diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index eb2aeefdd1..8e63b90966 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -708,9 +708,17 @@ class Core { ((GmailMessage) imessage).setLabels(new String[]{label}, set); // Gmail does not push label changes - JSONArray fargs = new JSONArray(); - fargs.put(message.uid); - onFetch(context, fargs, folder, istore, ifolder, state); + + List labels = new ArrayList<>(); + if (message.labels != null) + labels.addAll(Arrays.asList(message.labels)); + labels.remove(label); + if (set) + labels.add(label); + + DB db = DB.getInstance(context); + db.message().setMessageLabels(message.id, + DB.Converters.fromStringArray(labels.toArray(new String[0]))); } private static void onAdd(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPStore istore, IMAPFolder ifolder, State state) throws MessagingException, IOException { diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 46c0159ce6..76d4196ae9 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -634,6 +634,9 @@ public interface DaoMessage { @Query("UPDATE message SET keywords = :keywords WHERE id = :id") int setMessageKeywords(long id, String keywords); + @Query("UPDATE message SET labels = :labels WHERE id = :id") + int setMessageLabels(long id, String labels); + @Query("UPDATE message SET ui_seen = :ui_seen WHERE id = :id") int setMessageUiSeen(long id, boolean ui_seen);