mirror of https://github.com/M66B/FairEmail.git
Refactoring
This commit is contained in:
parent
26fba327fd
commit
4197e27ef9
|
@ -1,5 +1,6 @@
|
|||
package eu.faircode.email;
|
||||
|
||||
import android.accounts.AccountsException;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.net.ConnectivityManager;
|
||||
|
@ -14,12 +15,15 @@ import android.telephony.TelephonyManager;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.sun.mail.iap.ConnectionException;
|
||||
|
||||
import org.xbill.DNS.Lookup;
|
||||
import org.xbill.DNS.MXRecord;
|
||||
import org.xbill.DNS.Record;
|
||||
import org.xbill.DNS.SimpleResolver;
|
||||
import org.xbill.DNS.Type;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Arrays;
|
||||
|
@ -277,6 +281,27 @@ public class ConnectionHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
static boolean isIoError(Throwable ex) {
|
||||
while (ex != null) {
|
||||
if (isMaxConnections(ex.getMessage()) ||
|
||||
ex instanceof IOException ||
|
||||
ex instanceof ConnectionException ||
|
||||
ex instanceof AccountsException ||
|
||||
"failed to connect".equals(ex.getMessage()))
|
||||
return true;
|
||||
ex = ex.getCause();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static boolean isMaxConnections(String message) {
|
||||
return (message != null &&
|
||||
(message.contains("Too many simultaneous connections") /* Gmail */ ||
|
||||
message.contains("Maximum number of connections") /* ... from user+IP exceeded */ /* Dovecot */ ||
|
||||
message.contains("Too many concurrent connections") /* ... to this mailbox */ ||
|
||||
message.contains("User is authenticated but not connected") /* Outlook */));
|
||||
}
|
||||
|
||||
static boolean vpnActive(Context context) {
|
||||
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (cm == null)
|
||||
|
|
|
@ -19,7 +19,6 @@ package eu.faircode.email;
|
|||
Copyright 2018-2020 by Marcel Bokhorst (M66B)
|
||||
*/
|
||||
|
||||
import android.accounts.AccountsException;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
|
@ -49,11 +48,9 @@ import androidx.lifecycle.MutableLiveData;
|
|||
import androidx.lifecycle.Observer;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.sun.mail.iap.ConnectionException;
|
||||
import com.sun.mail.imap.IMAPFolder;
|
||||
import com.sun.mail.imap.IMAPStore;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.DateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
@ -858,7 +855,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
|||
|
||||
EntityLog.log(ServiceSynchronize.this, account.name + " alert: " + message);
|
||||
|
||||
if (!isMaxConnections(message))
|
||||
if (!ConnectionHelper.isMaxConnections(message))
|
||||
try {
|
||||
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
nm.notify("alert:" + account.id, 1,
|
||||
|
@ -885,21 +882,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
|||
} catch (Throwable ex) {
|
||||
// Immediately report auth errors
|
||||
if (ex instanceof AuthenticationFailedException) {
|
||||
boolean ioError = false;
|
||||
Throwable c = ex;
|
||||
while (c != null) {
|
||||
if (isMaxConnections(c.getMessage()) ||
|
||||
c instanceof IOException ||
|
||||
c instanceof ConnectionException ||
|
||||
c instanceof AccountsException ||
|
||||
"failed to connect".equals(ex.getMessage())) {
|
||||
ioError = true;
|
||||
break;
|
||||
}
|
||||
c = c.getCause();
|
||||
}
|
||||
|
||||
if (!ioError) {
|
||||
if (!ConnectionHelper.isIoError(ex)) {
|
||||
Log.e(ex);
|
||||
try {
|
||||
NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
@ -1578,14 +1561,6 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences
|
|||
}
|
||||
}
|
||||
|
||||
private boolean isMaxConnections(String message) {
|
||||
return (message != null &&
|
||||
(message.contains("Too many simultaneous connections") /* Gmail */ ||
|
||||
message.contains("Maximum number of connections") /* ... from user+IP exceeded */ /* Dovecot */ ||
|
||||
message.contains("Too many concurrent connections") /* ... to this mailbox */ ||
|
||||
message.contains("User is authenticated but not connected") /* Outlook */));
|
||||
}
|
||||
|
||||
private void optimizeAccount(Context context, EntityAccount account, String reason) {
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
boolean auto_optimize = prefs.getBoolean("auto_optimize", false);
|
||||
|
|
Loading…
Reference in New Issue