mirror of https://github.com/M66B/FairEmail.git
Experiment: leave on device for IMAP
This commit is contained in:
parent
859e7da4c6
commit
75f1af1c98
|
@ -1847,8 +1847,14 @@ class Core {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (BuildConfig.DEBUG && account.leave_on_device) {
|
||||||
|
EntityMessage message = db.message().getMessageByUid(folder.id, uid);
|
||||||
|
if (message != null)
|
||||||
|
db.message().setMessageUiDeleted(message.id, true);
|
||||||
|
} else {
|
||||||
int count = db.message().deleteMessage(folder.id, uid);
|
int count = db.message().deleteMessage(folder.id, uid);
|
||||||
Log.i(folder.name + " delete local uid=" + uid + " count=" + count);
|
Log.i(folder.name + " delete local uid=" + uid + " count=" + count);
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
throw ex;
|
throw ex;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -3890,9 +3896,15 @@ class Core {
|
||||||
// Delete local messages not at remote
|
// Delete local messages not at remote
|
||||||
Log.i(folder.name + " delete=" + uids.size());
|
Log.i(folder.name + " delete=" + uids.size());
|
||||||
for (Long uid : uids) {
|
for (Long uid : uids) {
|
||||||
|
if (BuildConfig.DEBUG && account.leave_on_device) {
|
||||||
|
EntityMessage message = db.message().getMessageByUid(folder.id, uid);
|
||||||
|
if (message != null)
|
||||||
|
db.message().setMessageUiDeleted(message.id, true);
|
||||||
|
} else {
|
||||||
int count = db.message().deleteMessage(folder.id, uid);
|
int count = db.message().deleteMessage(folder.id, uid);
|
||||||
Log.i(folder.name + " delete local uid=" + uid + " count=" + count);
|
Log.i(folder.name + " delete local uid=" + uid + " count=" + count);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<EntityRule> rules = db.rule().getEnabledRules(folder.id);
|
List<EntityRule> rules = db.rule().getEnabledRules(folder.id);
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
private TextView tvNotifyPro;
|
private TextView tvNotifyPro;
|
||||||
private CheckBox cbBrowse;
|
private CheckBox cbBrowse;
|
||||||
private CheckBox cbAutoSeen;
|
private CheckBox cbAutoSeen;
|
||||||
|
private CheckBox cbLeaveDevice;
|
||||||
private EditText etInterval;
|
private EditText etInterval;
|
||||||
private CheckBox cbNoop;
|
private CheckBox cbNoop;
|
||||||
private CheckBox cbPartialFetch;
|
private CheckBox cbPartialFetch;
|
||||||
|
@ -244,6 +245,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
tvNotifyPro = view.findViewById(R.id.tvNotifyPro);
|
tvNotifyPro = view.findViewById(R.id.tvNotifyPro);
|
||||||
cbBrowse = view.findViewById(R.id.cbBrowse);
|
cbBrowse = view.findViewById(R.id.cbBrowse);
|
||||||
cbAutoSeen = view.findViewById(R.id.cbAutoSeen);
|
cbAutoSeen = view.findViewById(R.id.cbAutoSeen);
|
||||||
|
cbLeaveDevice = view.findViewById(R.id.cbLeaveDevice);
|
||||||
etInterval = view.findViewById(R.id.etInterval);
|
etInterval = view.findViewById(R.id.etInterval);
|
||||||
cbNoop = view.findViewById(R.id.cbNoop);
|
cbNoop = view.findViewById(R.id.cbNoop);
|
||||||
cbPartialFetch = view.findViewById(R.id.cbPartialFetch);
|
cbPartialFetch = view.findViewById(R.id.cbPartialFetch);
|
||||||
|
@ -511,6 +513,9 @@ public class FragmentAccount extends FragmentBase {
|
||||||
|
|
||||||
etInterval.setHint(Integer.toString(EntityAccount.DEFAULT_KEEP_ALIVE_INTERVAL));
|
etInterval.setHint(Integer.toString(EntityAccount.DEFAULT_KEEP_ALIVE_INTERVAL));
|
||||||
|
|
||||||
|
if (!BuildConfig.DEBUG)
|
||||||
|
Helper.hide(cbLeaveDevice);
|
||||||
|
|
||||||
btnCheck.setOnClickListener(new View.OnClickListener() {
|
btnCheck.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -933,6 +938,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
args.putBoolean("notify", cbNotify.isChecked());
|
args.putBoolean("notify", cbNotify.isChecked());
|
||||||
args.putBoolean("browse", cbBrowse.isChecked());
|
args.putBoolean("browse", cbBrowse.isChecked());
|
||||||
args.putBoolean("auto_seen", cbAutoSeen.isChecked());
|
args.putBoolean("auto_seen", cbAutoSeen.isChecked());
|
||||||
|
args.putBoolean("leave_device", cbLeaveDevice.isChecked());
|
||||||
args.putString("interval", etInterval.getText().toString());
|
args.putString("interval", etInterval.getText().toString());
|
||||||
args.putBoolean("noop", cbNoop.isChecked());
|
args.putBoolean("noop", cbNoop.isChecked());
|
||||||
args.putBoolean("partial_fetch", cbPartialFetch.isChecked());
|
args.putBoolean("partial_fetch", cbPartialFetch.isChecked());
|
||||||
|
@ -1008,6 +1014,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
boolean notify = args.getBoolean("notify");
|
boolean notify = args.getBoolean("notify");
|
||||||
boolean browse = args.getBoolean("browse");
|
boolean browse = args.getBoolean("browse");
|
||||||
boolean auto_seen = args.getBoolean("auto_seen");
|
boolean auto_seen = args.getBoolean("auto_seen");
|
||||||
|
boolean leave_device = args.getBoolean("leave_device");
|
||||||
String interval = args.getString("interval");
|
String interval = args.getString("interval");
|
||||||
boolean noop = args.getBoolean("noop");
|
boolean noop = args.getBoolean("noop");
|
||||||
boolean partial_fetch = args.getBoolean("partial_fetch");
|
boolean partial_fetch = args.getBoolean("partial_fetch");
|
||||||
|
@ -1115,6 +1122,8 @@ public class FragmentAccount extends FragmentBase {
|
||||||
return true;
|
return true;
|
||||||
if (!Objects.equals(account.auto_seen, auto_seen))
|
if (!Objects.equals(account.auto_seen, auto_seen))
|
||||||
return true;
|
return true;
|
||||||
|
if (!Objects.equals(account.leave_on_device, leave_device))
|
||||||
|
return true;
|
||||||
if (!Objects.equals(account.poll_interval, poll_interval))
|
if (!Objects.equals(account.poll_interval, poll_interval))
|
||||||
return true;
|
return true;
|
||||||
if (!Objects.equals(account.keep_alive_noop, noop))
|
if (!Objects.equals(account.keep_alive_noop, noop))
|
||||||
|
@ -1262,6 +1271,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
account.notify = notify;
|
account.notify = notify;
|
||||||
account.browse = browse;
|
account.browse = browse;
|
||||||
account.auto_seen = auto_seen;
|
account.auto_seen = auto_seen;
|
||||||
|
account.leave_on_device = leave_device;
|
||||||
|
|
||||||
if (account.poll_interval != poll_interval) {
|
if (account.poll_interval != poll_interval) {
|
||||||
account.keep_alive_ok = false;
|
account.keep_alive_ok = false;
|
||||||
|
@ -1636,6 +1646,7 @@ public class FragmentAccount extends FragmentBase {
|
||||||
cbPrimary.setChecked(account == null ? false : account.primary);
|
cbPrimary.setChecked(account == null ? false : account.primary);
|
||||||
cbBrowse.setChecked(account == null ? true : account.browse);
|
cbBrowse.setChecked(account == null ? true : account.browse);
|
||||||
cbAutoSeen.setChecked(account == null ? true : account.auto_seen);
|
cbAutoSeen.setChecked(account == null ? true : account.auto_seen);
|
||||||
|
cbLeaveDevice.setChecked(account == null ? true : account.leave_on_device);
|
||||||
etInterval.setText(account == null ? "" : Long.toString(account.poll_interval));
|
etInterval.setText(account == null ? "" : Long.toString(account.poll_interval));
|
||||||
cbNoop.setChecked(account == null ? true : account.keep_alive_noop);
|
cbNoop.setChecked(account == null ? true : account.keep_alive_noop);
|
||||||
cbPartialFetch.setChecked(account == null ? true : account.partial_fetch);
|
cbPartialFetch.setChecked(account == null ? true : account.partial_fetch);
|
||||||
|
|
|
@ -5312,7 +5312,7 @@ public class FragmentMessages extends FragmentBase
|
||||||
menu.findItem(R.id.menu_filter_unflagged).setVisible(folder);
|
menu.findItem(R.id.menu_filter_unflagged).setVisible(folder);
|
||||||
menu.findItem(R.id.menu_filter_unknown).setVisible(folder && !drafts && !sent);
|
menu.findItem(R.id.menu_filter_unknown).setVisible(folder && !drafts && !sent);
|
||||||
menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts);
|
menu.findItem(R.id.menu_filter_snoozed).setVisible(folder && !drafts);
|
||||||
menu.findItem(R.id.menu_filter_deleted).setVisible(folder && !perform_expunge);
|
menu.findItem(R.id.menu_filter_deleted).setVisible(folder && (!perform_expunge || BuildConfig.DEBUG));
|
||||||
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
menu.findItem(R.id.menu_filter_duplicates).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
||||||
menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
menu.findItem(R.id.menu_filter_trash).setVisible(viewType == AdapterMessage.ViewType.THREAD);
|
||||||
|
|
||||||
|
|
|
@ -611,6 +611,15 @@
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/tvBrowseHint" />
|
app:layout_constraintTop_toBottomOf="@id/tvBrowseHint" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/cbLeaveDevice"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:text="@string/title_leave_on_device"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/cbAutoSeen" />
|
||||||
|
|
||||||
<!-- keep alive -->
|
<!-- keep alive -->
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -621,7 +630,7 @@
|
||||||
android:text="@string/title_keep_alive_interval"
|
android:text="@string/title_keep_alive_interval"
|
||||||
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
android:textAppearance="@style/TextAppearance.AppCompat.Small"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@id/cbAutoSeen" />
|
app:layout_constraintTop_toBottomOf="@id/cbLeaveDevice" />
|
||||||
|
|
||||||
<eu.faircode.email.EditTextPlain
|
<eu.faircode.email.EditTextPlain
|
||||||
android:id="@+id/etInterval"
|
android:id="@+id/etInterval"
|
||||||
|
@ -1159,7 +1168,7 @@
|
||||||
cbNotify,tvNotifyRemark,tvNotifyPro,
|
cbNotify,tvNotifyRemark,tvNotifyPro,
|
||||||
cbSynchronize,cbIgnoreSchedule,cbOnDemand,tvLeave,cbPrimary,
|
cbSynchronize,cbIgnoreSchedule,cbOnDemand,tvLeave,cbPrimary,
|
||||||
cbBrowse,tvBrowseHint,
|
cbBrowse,tvBrowseHint,
|
||||||
cbAutoSeen,
|
cbAutoSeen,cbLeaveDevice,
|
||||||
tvInterval,etInterval,tvIntervalRemark,cbNoop,tvNoopRemark,
|
tvInterval,etInterval,tvIntervalRemark,cbNoop,tvNoopRemark,
|
||||||
cbPartialFetch,tvPartialFetchRemark,cbIgnoreSize,rgDate,tvDateRemark,
|
cbPartialFetch,tvPartialFetchRemark,cbIgnoreSize,rgDate,tvDateRemark,
|
||||||
cbUnicode,cbUnmeteredOnly,cbVpnOnly" />
|
cbUnicode,cbUnmeteredOnly,cbVpnOnly" />
|
||||||
|
|
Loading…
Reference in New Issue