diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 553c91ed1b..df3ae2d1a7 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -306,97 +306,106 @@ public class ServiceSynchronize extends LifecycleService { super.onStartCommand(intent, flags, startId); - if (action != null) { - final String[] parts = action.split(":"); - switch (parts[0]) { - case "why": - Intent why = new Intent(Intent.ACTION_VIEW); - why.setData(Uri.parse("https://github.com/M66B/open-source-email/blob/master/FAQ.md#user-content-faq2")); - why.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - PackageManager pm = getPackageManager(); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - if (prefs.getBoolean("why", false) || why.resolveActivity(pm) == null) { - Intent view = new Intent(this, ActivityView.class); - view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(view); - } else { - prefs.edit().putBoolean("why", true).apply(); - startActivity(why); - } - break; - - case "init": - // Network events will manage the service - serviceManager.service_init(); - break; - - case "reload": - serviceManager.service_reload(intent.getStringExtra("reason")); - break; - - case "clear": - executor.submit(new Runnable() { - @Override - public void run() { - DB.getInstance(ServiceSynchronize.this).message().ignoreAll(); + if (action != null) + try { + final String[] parts = action.split(":"); + switch (parts[0]) { + case "why": + Intent why = new Intent(Intent.ACTION_VIEW); + why.setData(Uri.parse("https://github.com/M66B/open-source-email/blob/master/FAQ.md#user-content-faq2")); + why.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + + PackageManager pm = getPackageManager(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + if (prefs.getBoolean("why", false) || why.resolveActivity(pm) == null) { + Intent view = new Intent(this, ActivityView.class); + view.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(view); + } else { + prefs.edit().putBoolean("why", true).apply(); + startActivity(why); } - }); - break; + break; - case "seen": - case "archive": - case "trash": - case "ignore": - executor.submit(new Runnable() { - @Override - public void run() { - long id = Long.parseLong(parts[1]); + case "init": + // Network events will manage the service + serviceManager.service_init(); + break; - DB db = DB.getInstance(ServiceSynchronize.this); - try { - db.beginTransaction(); - - EntityMessage message = db.message().getMessage(id); - switch (parts[0]) { - case "seen": - EntityOperation.queue(db, message, EntityOperation.SEEN, true); - break; - - case "archive": - EntityFolder archive = db.folder().getFolderByType(message.account, EntityFolder.ARCHIVE); - if (archive == null) - archive = db.folder().getFolderByType(message.account, EntityFolder.TRASH); - if (archive != null) - EntityOperation.queue(db, message, EntityOperation.MOVE, archive.id); - break; - - case "trash": - EntityFolder trash = db.folder().getFolderByType(message.account, EntityFolder.TRASH); - if (trash != null) - EntityOperation.queue(db, message, EntityOperation.MOVE, trash.id); - break; - - case "ignore": - db.message().setMessageUiIgnored(message.id, true); - break; - - default: - Log.w("Unknown action: " + parts[0]); + case "reload": + serviceManager.service_reload(intent.getStringExtra("reason")); + break; + + case "clear": + executor.submit(new Runnable() { + @Override + public void run() { + try { + DB.getInstance(ServiceSynchronize.this).message().ignoreAll(); + } catch (Throwable ex) { + Log.e(ex); } + } + }); + break; + + case "seen": + case "archive": + case "trash": + case "ignore": + executor.submit(new Runnable() { + @Override + public void run() { + DB db = DB.getInstance(ServiceSynchronize.this); + try { + db.beginTransaction(); + + long id = Long.parseLong(parts[1]); + EntityMessage message = db.message().getMessage(id); + + switch (parts[0]) { + case "seen": + EntityOperation.queue(db, message, EntityOperation.SEEN, true); + break; + + case "archive": + EntityFolder archive = db.folder().getFolderByType(message.account, EntityFolder.ARCHIVE); + if (archive == null) + archive = db.folder().getFolderByType(message.account, EntityFolder.TRASH); + if (archive != null) + EntityOperation.queue(db, message, EntityOperation.MOVE, archive.id); + break; + + case "trash": + EntityFolder trash = db.folder().getFolderByType(message.account, EntityFolder.TRASH); + if (trash != null) + EntityOperation.queue(db, message, EntityOperation.MOVE, trash.id); + break; + + case "ignore": + db.message().setMessageUiIgnored(message.id, true); + break; + + default: + Log.w("Unknown action: " + parts[0]); + } - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); + db.setTransactionSuccessful(); + } catch (Throwable ex) { + Log.e(ex); + } finally { + db.endTransaction(); + } } - } - }); - break; + }); + break; - default: - Log.w("Unknown action: " + action); + default: + Log.w("Unknown action: " + action); + } + } catch (Throwable ex) { + Log.e(ex); } - } return START_STICKY; }