UID EXPUNGE for folders

pull/207/head
M66B 4 years ago
parent 8c54034f09
commit e9310d56b5

@ -2692,7 +2692,33 @@ class Core {
private static void onExpungeFolder(Context context, JSONArray jargs, EntityFolder folder, IMAPFolder ifolder) throws MessagingException {
Log.i(folder.name + " expunge");
ifolder.expunge();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean uid_expunge = prefs.getBoolean("uid_expunge", false);
int chunk_size = prefs.getInt("chunk_size", DEFAULT_CHUNK_SIZE);
if (uid_expunge)
uid_expunge = MessageHelper.hasCapability(ifolder, "UIDPLUS");
if (uid_expunge) {
DB db = DB.getInstance(context);
List<Long> uids = db.message().getDeletedUids(folder.id);
if (uids == null || uids.size() == 0)
return;
Log.i(ifolder.getName() + " expunging " + TextUtils.join(",", uids));
ifolder.doCommand(new IMAPFolder.ProtocolCommand() {
@Override
public Object doCommand(IMAPProtocol protocol) throws ProtocolException {
for (List<Long> list : Helper.chunkList(uids, chunk_size))
protocol.uidexpunge(UIDSet.createUIDSets(Helper.toLongArray(list)));
return null;
}
});
Log.i(ifolder.getName() + " expunged " + TextUtils.join(",", uids));
} else
ifolder.expunge();
}
private static void onPurgeFolder(Context context, EntityFolder folder) {

@ -623,6 +623,12 @@ public interface DaoMessage {
" AND NOT content")
List<EntityMessage> getMessagesWithoutContent(long folder, Long received);
@Query("SELECT uid FROM message" +
" WHERE folder = :folder" +
" AND ui_deleted" +
" AND NOT uid IS NULL")
List<Long> getDeletedUids(long folder);
@Query("SELECT uid FROM message" +
" WHERE folder = :folder" +
" AND NOT ui_busy IS NULL" +

@ -1043,7 +1043,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("perform_expunge", checked).apply();
swUidExpunge.setEnabled(checked);
ServiceSynchronize.reload(compoundButton.getContext(), null, true, "perform_expunge");
}
});
@ -1713,7 +1712,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swUid.setChecked(prefs.getBoolean("uid_command", false));
swExpunge.setChecked(prefs.getBoolean("perform_expunge", true));
swUidExpunge.setChecked(prefs.getBoolean("uid_expunge", false));
swUidExpunge.setEnabled(swExpunge.isChecked());
swAuthPlain.setChecked(prefs.getBoolean("auth_plain", true));
swAuthLogin.setChecked(prefs.getBoolean("auth_login", true));
swAuthNtlm.setChecked(prefs.getBoolean("auth_ntlm", true));

@ -997,7 +997,6 @@
android:id="@+id/swUidExpunge"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="12dp"
android:text="@string/title_advanced_uid_expunge"
app:layout_constraintEnd_toEndOf="parent"

Loading…
Cancel
Save