mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-28 19:56:33 +02:00
Added basic K9 account import
This commit is contained in:
@@ -72,6 +72,8 @@ import org.bouncycastle.util.io.pem.PemReader;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import org.xmlpull.v1.XmlPullParserFactory;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
@@ -748,8 +750,25 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
|
||||
}
|
||||
|
||||
private void handleImport(Intent data) {
|
||||
Uri uri = data.getData();
|
||||
|
||||
if (uri != null)
|
||||
try {
|
||||
DocumentFile df = DocumentFile.fromSingleUri(this, uri);
|
||||
if (df != null) {
|
||||
String name = df.getName();
|
||||
String ext = Helper.getExtension(name);
|
||||
if ("k9s".equals(ext)) {
|
||||
handleK9Import(uri);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable("uri", data.getData());
|
||||
args.putParcelable("uri", uri);
|
||||
args.putString("password", this.password);
|
||||
args.putBoolean("import_accounts", this.import_accounts);
|
||||
args.putBoolean("import_rules", this.import_rules);
|
||||
@@ -1165,6 +1184,154 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac
|
||||
}.execute(this, args, "setup:import");
|
||||
}
|
||||
|
||||
private void handleK9Import(Uri uri) {
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelable("uri", uri);
|
||||
|
||||
new SimpleTask<Void>() {
|
||||
@Override
|
||||
protected Void onExecute(Context context, Bundle args) throws Throwable {
|
||||
Uri uri = args.getParcelable("uri");
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
ContentResolver resolver = context.getContentResolver();
|
||||
try (InputStream is = new BufferedInputStream(resolver.openInputStream(uri))) {
|
||||
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
||||
XmlPullParser xml = factory.newPullParser();
|
||||
xml.setInput(new InputStreamReader(is));
|
||||
|
||||
EntityAccount account = null;
|
||||
EntityIdentity identity = null;
|
||||
|
||||
int eventType = xml.getEventType();
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
if (eventType == XmlPullParser.START_TAG) {
|
||||
String name = xml.getName();
|
||||
switch (name) {
|
||||
case "incoming-server":
|
||||
String itype = xml.getAttributeValue(null, "type");
|
||||
if ("IMAP".equals(itype)) {
|
||||
account = new EntityAccount();
|
||||
account.protocol = EntityAccount.TYPE_IMAP;
|
||||
account.auth_type = ServiceAuthenticator.AUTH_TYPE_PASSWORD;
|
||||
account.password = "";
|
||||
account.synchronize = false;
|
||||
account.primary = false;
|
||||
} else if ("POP3".equals(itype)) {
|
||||
account = new EntityAccount();
|
||||
account.protocol = EntityAccount.TYPE_POP;
|
||||
account.auth_type = ServiceAuthenticator.AUTH_TYPE_PASSWORD;
|
||||
account.password = "";
|
||||
account.synchronize = false;
|
||||
account.primary = false;
|
||||
}
|
||||
break;
|
||||
case "outgoing-server":
|
||||
String otype = xml.getAttributeValue(null, "type");
|
||||
if ("SMTP".equals(otype)) {
|
||||
identity = new EntityIdentity();
|
||||
identity.auth_type = ServiceAuthenticator.AUTH_TYPE_PASSWORD;
|
||||
identity.password = "";
|
||||
identity.synchronize = false;
|
||||
identity.primary = false;
|
||||
}
|
||||
break;
|
||||
case "host":
|
||||
eventType = xml.next();
|
||||
if (eventType == XmlPullParser.TEXT) {
|
||||
String host = xml.getText();
|
||||
if (identity != null)
|
||||
identity.host = host;
|
||||
else if (account != null)
|
||||
account.host = host;
|
||||
}
|
||||
break;
|
||||
case "port":
|
||||
eventType = xml.next();
|
||||
if (eventType == XmlPullParser.TEXT) {
|
||||
int port = Integer.parseInt(xml.getText());
|
||||
if (identity != null)
|
||||
identity.port = port;
|
||||
else if (account != null)
|
||||
account.port = port;
|
||||
}
|
||||
break;
|
||||
case "connection-security":
|
||||
eventType = xml.next();
|
||||
if (eventType == XmlPullParser.TEXT) {
|
||||
String etype = xml.getText();
|
||||
|
||||
int encryption;
|
||||
if ("STARTTLS_REQUIRED".equals(etype))
|
||||
encryption = EmailService.ENCRYPTION_STARTTLS;
|
||||
else if ("SSL_TLS_REQUIRED".equals(etype))
|
||||
encryption = EmailService.ENCRYPTION_SSL;
|
||||
else
|
||||
encryption = EmailService.ENCRYPTION_NONE;
|
||||
|
||||
if (identity != null)
|
||||
identity.encryption = encryption;
|
||||
else if (account != null)
|
||||
account.encryption = encryption;
|
||||
}
|
||||
break;
|
||||
case "username":
|
||||
eventType = xml.next();
|
||||
if (eventType == XmlPullParser.TEXT) {
|
||||
String user = xml.getText();
|
||||
if (identity != null) {
|
||||
identity.name = "K9/" + user;
|
||||
identity.email = user;
|
||||
identity.user = user;
|
||||
} else if (account != null) {
|
||||
account.name = "K9/" + user;
|
||||
account.user = user;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (eventType == XmlPullParser.END_TAG) {
|
||||
String name = xml.getName();
|
||||
if ("account".equals(name)) {
|
||||
if (account != null && identity != null) {
|
||||
try {
|
||||
db.beginTransaction();
|
||||
|
||||
account.id = db.account().insertAccount(account);
|
||||
identity.account = account.id;
|
||||
identity.id = db.identity().insertIdentity(identity);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
account = null;
|
||||
identity = null;
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eventType = xml.next();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onExecuted(Bundle args, Void data) {
|
||||
ToastEx.makeText(ActivitySetup.this, R.string.title_setup_imported, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onException(Bundle args, Throwable ex) {
|
||||
Log.unexpectedError(getSupportFragmentManager(), ex);
|
||||
}
|
||||
}.execute(this, args, "setup:k9");
|
||||
}
|
||||
|
||||
private void handleImportCertificate(Intent data) {
|
||||
Uri uri = data.getData();
|
||||
if (uri != null) {
|
||||
|
||||
Reference in New Issue
Block a user