Allow extern poll of individual accounts

pull/169/head
M66B 5 years ago
parent bd9416bd25
commit 616526ff16

@ -1711,29 +1711,32 @@ so there is little room for performance improvements.
<a name="faq78"></a>
**(78) How do I use schedules?**
In the settingss you can enable scheduling and set the time to turn synchronizing automatically on and off.
In the receive settings you can enable scheduling and set the time period for when messages should be received.
An end time equal to or earlier than the start time is considered to be 24 hours later.
Note that an end time equal to or earlier than the start time is considered to be 24 hours later.
Turning FairEmail on or off, for example by using [a quick settings tile](#user-content-faq30), will not turn scheduling off.
This means that the next schedule event will still turn FairEmail on or off.
You can also automate turning synchronization on and off by sending these commands to FairEmail:
For more complex schemes you could set one or more accounts to manual synchronization
and send this command to FairEmail to check for new messages:
```
(adb shell) am startservice -a eu.faircode.email.ENABLE
(adb shell) am startservice -a eu.faircode.email.DISABLE
(adb shell) am startservice -a eu.faircode.email.POLL
```
Sending these commands will turn scheduling off.
For a specific account:
If you want to automate checking for new messages, you can send this command to FairEmail:
```
(adb shell) am startservice -a eu.faircode.email.POLL --es account Gmail
```
You can also automate turning receiving messages on and off by sending these commands to FairEmail:
```
(adb shell) adb shell am startservice -a eu.faircode.email.POLL
(adb shell) am startservice -a eu.faircode.email.ENABLE
(adb shell) am startservice -a eu.faircode.email.DISABLE
```
It is also possible to enable/disable an account, for example the account with the name *Gmail*:
To enable/disable a specific account:
```
(adb shell) am startservice -a eu.faircode.email.ENABLE --es account Gmail
(adb shell) am startservice -a eu.faircode.email.DISABLE --es account Gmail

@ -779,7 +779,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB
new SimpleTask<Void>() {
@Override
protected Void onExecute(Context context, Bundle args) {
WorkerPoll.sync(context);
WorkerPoll.sync(context, null);
return null;
}

@ -29,6 +29,8 @@ import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.preference.PreferenceManager;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
public class ServiceExternal extends Service {
@ -36,7 +38,7 @@ public class ServiceExternal extends Service {
private static final String ACTION_ENABLE = BuildConfig.APPLICATION_ID + ".ENABLE";
private static final String ACTION_DISABLE = BuildConfig.APPLICATION_ID + ".DISABLE";
// adb shell am startservice -a eu.faircode.email.POLL
// adb shell am startservice -a eu.faircode.email.POLL --es account Gmail
// adb shell am startservice -a eu.faircode.email.ENABLE --es account Gmail
// adb shell am startservice -a eu.faircode.email.DISABLE --es account Gmail
@ -73,20 +75,11 @@ public class ServiceExternal extends Service {
if (!ActivityBilling.isPro(this))
return START_NOT_STICKY;
String action = intent.getAction();
if (ACTION_POLL.equals(action)) {
final Context context = getApplicationContext();
executor.submit(new Runnable() {
@Override
public void run() {
WorkerPoll.sync(context);
}
});
return START_NOT_STICKY;
}
final String accountName = intent.getStringExtra("account");
final Boolean enabled;
String action = intent.getAction();
if (ACTION_ENABLE.equals(action))
enabled = true;
else if (ACTION_DISABLE.equals(action))
@ -94,32 +87,35 @@ public class ServiceExternal extends Service {
else
enabled = null;
if (enabled != null) {
final String accountName = intent.getStringExtra("account");
executor.submit(new Runnable() {
@Override
public void run() {
if (accountName == null) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("schedule", false).apply();
boolean previous = prefs.getBoolean("enabled", true);
if (!enabled.equals(previous)) {
if (enabled == null)
WorkerPoll.sync(context, null);
else {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putBoolean("enabled", enabled).apply();
ServiceSynchronize.eval(this, "external");
ServiceSynchronize.eval(context, "external enabled=" + enabled);
}
} else {
final Context context = getApplicationContext();
executor.submit(new Runnable() {
@Override
public void run() {
DB db = DB.getInstance(context);
EntityAccount account = db.account().getAccount(accountName);
if (account != null) {
db.account().setAccountSynchronize(account.id, enabled);
ServiceSynchronize.eval(context, "account enabled=" + enabled);
if (account == null) {
EntityLog.log(context, "Account not found name=" + accountName);
return;
}
if (enabled == null)
WorkerPoll.sync(context, account.id);
else {
db.account().setAccountSynchronize(account.id, enabled);
ServiceSynchronize.eval(context, "external account=" + accountName + " enabled=" + enabled);
}
});
}
}
});
return START_NOT_STICKY;
} finally {

@ -101,7 +101,7 @@ public class ServiceTileUnseen extends TileService {
new Thread(new Runnable() {
@Override
public void run() {
WorkerPoll.sync(context);
WorkerPoll.sync(context, null);
}
}).start();
}

@ -45,7 +45,7 @@ public class WorkerPoll extends Worker {
public Result doWork() {
Log.i("Running " + getName());
sync(getApplicationContext());
sync(getApplicationContext(), null);
return Result.success();
}
@ -76,13 +76,14 @@ public class WorkerPoll extends Worker {
}
}
static void sync(Context context) {
static void sync(Context context, Long aid) {
DB db = DB.getInstance(context);
try {
db.beginTransaction();
List<EntityAccount> accounts = db.account().getSynchronizingAccounts();
for (EntityAccount account : accounts) {
for (EntityAccount account : accounts)
if (aid == null || account.id.equals(aid)) {
List<EntityFolder> folders = db.folder().getSynchronizingFolders(account.id);
if (folders.size() > 0)
Collections.sort(folders, folders.get(0).getComparator(context));

Loading…
Cancel
Save