Limit range size to 1,000

pull/217/head
M66B 11 months ago
parent cb15d553c2
commit 9496a7d6a6

@ -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);

@ -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);

@ -1234,6 +1234,29 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvStartDelay" />
<TextView
android:id="@+id/tvRangeSize"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginEnd="48dp"
android:text="@string/title_advanced_range_size"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sbStartDelay" />
<SeekBar
android:id="@+id/sbRangeSize"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:max="1000"
android:min="0"
android:progress="100"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvRangeSize" />
<TextView
android:id="@+id/tvChunkSize"
android:layout_width="0dp"
@ -1244,7 +1267,7 @@
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/sbStartDelay" />
app:layout_constraintTop_toBottomOf="@id/sbRangeSize" />
<SeekBar
android:id="@+id/sbChunkSize"

@ -957,6 +957,7 @@
<string name="title_advanced_cache_lists" translatable="false">Cache lists</string>
<string name="title_advanced_oauth_tabs" translatable="false">OAuth tabs</string>
<string name="title_advanced_start_delay" translatable="false">Start delay: %1$d s</string>
<string name="title_advanced_range_size" translatable="false">Range size: %1$d</string>
<string name="title_advanced_chunk_size" translatable="false">Chunk size: %1$d</string>
<string name="title_advanced_thread_range" translatable="false">Thread range: %1$d days</string>
<string name="title_advanced_auto_scroll" translatable="false">Auto scroll editor</string>

Loading…
Cancel
Save