mirror of https://github.com/M66B/FairEmail.git
Added sync/download yield
This commit is contained in:
parent
83b4c13284
commit
9a2b0d167f
|
@ -135,6 +135,10 @@ class Core {
|
|||
private static final int SYNC_CHUNCK_SIZE = 200;
|
||||
private static final int SYNC_BATCH_SIZE = 20;
|
||||
private static final int DOWNLOAD_BATCH_SIZE = 20;
|
||||
private static final int SYNC_YIELD_COUNT = 100;
|
||||
private static final long SYNC_YIELD_DURATION = 1000; // milliseconds
|
||||
private static final int DOWNLOAD_YIELD_COUNT = 25;
|
||||
private static final long DOWNLOAD_YIELD_DURATION = 1000; // milliseconds
|
||||
private static final long YIELD_DURATION = 200L; // milliseconds
|
||||
private static final long JOIN_WAIT = 180 * 1000L; // milliseconds
|
||||
private static final long FUTURE_RECEIVED = 30 * 24 * 3600 * 1000L; // milliseconds
|
||||
|
@ -2344,6 +2348,7 @@ class Core {
|
|||
fp.add(GmailFolder.FetchProfileItem.THRID);
|
||||
|
||||
// Add/update local messages
|
||||
int synced = 0;
|
||||
Long[] ids = new Long[imessages.length];
|
||||
Log.i(folder.name + " add=" + imessages.length);
|
||||
for (int i = imessages.length - 1; i >= 0 && state.isRunning() && state.isRecoverable(); i -= SYNC_BATCH_SIZE) {
|
||||
|
@ -2399,6 +2404,15 @@ class Core {
|
|||
false, download && initialize == 0,
|
||||
rules, state, stats);
|
||||
ids[from + j] = (message == null || message.ui_hide ? null : message.id);
|
||||
|
||||
if (message != null && full.contains(isub[j]))
|
||||
if ((++synced % SYNC_YIELD_COUNT) == 0)
|
||||
try {
|
||||
Log.i(folder.name + " yield synced=" + synced);
|
||||
Thread.sleep(SYNC_YIELD_DURATION);
|
||||
} catch (InterruptedException ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
} catch (MessageRemovedException ex) {
|
||||
Log.w(folder.name, ex);
|
||||
} catch (FolderClosedException ex) {
|
||||
|
@ -2442,6 +2456,7 @@ class Core {
|
|||
db.folder().setFolderSyncState(folder.id, "downloading");
|
||||
|
||||
// Download messages/attachments
|
||||
int downloaded = 0;
|
||||
Log.i(folder.name + " download=" + imessages.length);
|
||||
for (int i = imessages.length - 1; i >= 0 && state.isRunning() && state.isRecoverable(); i -= DOWNLOAD_BATCH_SIZE) {
|
||||
int from = Math.max(0, i - DOWNLOAD_BATCH_SIZE + 1);
|
||||
|
@ -2461,12 +2476,19 @@ class Core {
|
|||
for (int j = isub.length - 1; j >= 0 && state.isRunning() && state.isRecoverable(); j--)
|
||||
try {
|
||||
if (ids[from + j] != null)
|
||||
downloadMessage(
|
||||
if (downloadMessage(
|
||||
context,
|
||||
account, folder,
|
||||
istore, ifolder,
|
||||
(MimeMessage) isub[j], ids[from + j],
|
||||
state, stats);
|
||||
state, stats))
|
||||
if ((++downloaded % DOWNLOAD_YIELD_COUNT) == 0)
|
||||
try {
|
||||
Log.i(folder.name + " yield downloaded=" + downloaded);
|
||||
Thread.sleep(DOWNLOAD_YIELD_DURATION);
|
||||
} catch (InterruptedException ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
} catch (FolderClosedException ex) {
|
||||
throw ex;
|
||||
} catch (Throwable ex) {
|
||||
|
@ -3163,18 +3185,18 @@ class Core {
|
|||
}
|
||||
}
|
||||
|
||||
private static void downloadMessage(
|
||||
private static boolean downloadMessage(
|
||||
Context context,
|
||||
EntityAccount account, EntityFolder folder,
|
||||
IMAPStore istore, IMAPFolder ifolder,
|
||||
MimeMessage imessage, long id, State state, SyncStats stats) throws MessagingException, IOException {
|
||||
if (state.getNetworkState().isRoaming())
|
||||
return;
|
||||
return false;
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
EntityMessage message = db.message().getMessage(id);
|
||||
if (message == null || message.ui_hide)
|
||||
return;
|
||||
return false;
|
||||
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
long maxSize = prefs.getInt("download", MessageHelper.DEFAULT_DOWNLOAD_SIZE);
|
||||
|
@ -3254,6 +3276,8 @@ class Core {
|
|||
db.attachment().setError(attachment.id, Log.formatThrowable(ex, false));
|
||||
}
|
||||
}
|
||||
|
||||
return fetch;
|
||||
}
|
||||
|
||||
private static void reportEmptyMessage(Context context, State state, EntityAccount account, IMAPStore istore) {
|
||||
|
|
Loading…
Reference in New Issue