Limit range size to 1,000

This commit is contained in:
M66B
2024-10-24 10:04:34 +02:00
parent cb15d553c2
commit 9496a7d6a6
4 changed files with 65 additions and 5 deletions

View File

@@ -124,6 +124,7 @@ import javax.mail.search.SearchTerm;
import javax.mail.search.SentDateTerm;
class Core {
static final int DEFAULT_RANGE_SIZE = 1000;
static final int DEFAULT_CHUNK_SIZE = 50;
private static final int SYNC_BATCH_SIZE = 20;
@@ -4145,6 +4146,10 @@ class Core {
public Object doCommand(IMAPProtocol protocol) throws ProtocolException {
protocol.select(folder.name);
// Yahoo range size: 2000
// https://help.yahoo.com/kb/download-email-yahoo-mail-third-party-sln28681.html
int range_size = prefs.getInt("range_size", DEFAULT_RANGE_SIZE);
// Build ranges
List<Pair<Long, Long>> ranges = new ArrayList<>();
long first = -1;
@@ -4152,7 +4157,7 @@ class Core {
for (long uid : uids)
if (first < 0)
first = uid;
else if ((last < 0 ? first : last) + 1 == uid)
else if ((last < 0 ? first : last) + 1 == uid && (uid - first + 1 <= range_size))
last = uid;
else {
ranges.add(new Pair<>(first, last < 0 ? first : last));
@@ -4170,10 +4175,10 @@ class Core {
List<List<Pair<Long, Long>>> chunks = Helper.chunkList(ranges, chunk_size);
Log.i(folder.name + " executing uid fetch count=" + uids.size() +
" ranges=" + ranges.size() + " chunks=" + chunks.size());
" ranges=" + ranges.size() + " chunks=" + chunks.size() +
" range_size=" + range_size + " chunk_size=" + chunk_size);
for (int c = 0; c < chunks.size(); c++) {
List<Pair<Long, Long>> chunk = chunks.get(c);
Log.i(folder.name + " chunk #" + c + " size=" + chunk.size());
StringBuilder sb = new StringBuilder();
for (Pair<Long, Long> range : chunk) {
@@ -4184,6 +4189,8 @@ class Core {
else
sb.append(range.first).append(':').append(range.second);
}
Log.i(folder.name + " chunk #" + c + " " + sb);
String command = "UID FETCH " + sb + " (UID FLAGS)";
Response[] responses = protocol.command(command, null);

View File

@@ -188,6 +188,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swOauthTabs;
private TextView tvStartDelay;
private SeekBar sbStartDelay;
private TextView tvRangeSize;
private SeekBar sbRangeSize;
private TextView tvChunkSize;
private SeekBar sbChunkSize;
private TextView tvThreadRange;
@@ -296,7 +298,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
"sqlite_integrity_check", "wal", "sqlite_checkpoints", "sqlite_analyze", "sqlite_auto_vacuum", "sqlite_sync_extra", "sqlite_cache",
"legacy_queries",
"cache_lists", "oauth_tabs",
"start_delay", "chunk_size", "thread_range",
"start_delay", "range_size", "chunk_size", "thread_range",
"autoscroll_editor", "undo_manager",
"browser_zoom", "fake_dark",
"ignore_formatted_size",
@@ -452,6 +454,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swOauthTabs = view.findViewById(R.id.swOauthTabs);
tvStartDelay = view.findViewById(R.id.tvStartDelay);
sbStartDelay = view.findViewById(R.id.sbStartDelay);
tvRangeSize = view.findViewById(R.id.tvRangeSize);
sbRangeSize = view.findViewById(R.id.sbRangeSize);
tvChunkSize = view.findViewById(R.id.tvChunkSize);
sbChunkSize = view.findViewById(R.id.sbChunkSize);
tvThreadRange = view.findViewById(R.id.tvThreadRange);
@@ -1330,6 +1334,27 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
sbRangeSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
progress = progress / 10;
if (progress < 1)
progress = 1;
progress = progress * 10;
prefs.edit().putInt("range_size", progress).apply();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// Do nothing
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// Do nothing
}
});
sbChunkSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -2501,6 +2526,10 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
tvStartDelay.setText(getString(R.string.title_advanced_start_delay, start_delay));
sbStartDelay.setProgress(start_delay);
int range_size = prefs.getInt("range_size", Core.DEFAULT_RANGE_SIZE);
tvRangeSize.setText(getString(R.string.title_advanced_range_size, range_size));
sbRangeSize.setProgress(range_size);
int chunk_size = prefs.getInt("chunk_size", Core.DEFAULT_CHUNK_SIZE);
tvChunkSize.setText(getString(R.string.title_advanced_chunk_size, chunk_size));
sbChunkSize.setProgress(chunk_size);