mirror of
https://github.com/M66B/FairEmail.git
synced 2025-02-24 07:01:05 +00:00
Propagate labels
This commit is contained in:
parent
1488a37caa
commit
141d57ba18
2 changed files with 63 additions and 18 deletions
|
@ -698,20 +698,25 @@ class Core {
|
|||
String label = jargs.getString(0);
|
||||
boolean set = jargs.getBoolean(1);
|
||||
|
||||
Message imessage = ifolder.getMessageByUID(message.uid);
|
||||
if (imessage == null)
|
||||
throw new MessageRemovedException();
|
||||
|
||||
if (!(imessage instanceof GmailMessage))
|
||||
throw new IllegalArgumentException("GmailMessage");
|
||||
|
||||
((GmailMessage) imessage).setLabels(new String[]{label}, set);
|
||||
|
||||
// Gmail does not push label changes
|
||||
message.setLabel(label, set);
|
||||
try {
|
||||
Message imessage = ifolder.getMessageByUID(message.uid);
|
||||
if (imessage instanceof GmailMessage)
|
||||
((GmailMessage) imessage).setLabels(new String[]{label}, set);
|
||||
} catch (MessagingException ex) {
|
||||
Log.w(ex);
|
||||
}
|
||||
|
||||
DB db = DB.getInstance(context);
|
||||
db.message().setMessageLabels(message.id, DB.Converters.fromStringArray(message.labels));
|
||||
List<EntityMessage> messages = db.message().getMessagesByMsgId(message.account, message.msgid);
|
||||
if (messages != null)
|
||||
for (EntityMessage m : messages) {
|
||||
EntityFolder f = db.folder().getFolder(m.folder);
|
||||
if (!label.equals(f.name) && m.setLabel(label, set)) {
|
||||
Log.i("Set " + label + "=" + set + " id=" + m.id + " folder=" + f.name);
|
||||
db.message().setMessageLabels(m.id, DB.Converters.fromStringArray(m.labels));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void onAdd(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPStore istore, IMAPFolder ifolder, State state) throws MessagingException, IOException {
|
||||
|
@ -1018,13 +1023,39 @@ class Core {
|
|||
ifolder.fetch(new Message[]{imessage}, fp);
|
||||
|
||||
EntityMessage message = synchronizeMessage(context, account, folder, istore, ifolder, imessage, false, download, rules, state);
|
||||
if (download && message != null)
|
||||
downloadMessage(context, account, folder, istore, ifolder, imessage, message.id, state);
|
||||
if (message != null) {
|
||||
if (account.isGmail() && EntityFolder.USER.equals(folder.type))
|
||||
try {
|
||||
JSONArray jlabel = new JSONArray();
|
||||
jlabel.put(0, folder.name);
|
||||
jlabel.put(1, true);
|
||||
onLabel(context, jlabel, folder, message, istore, ifolder, state);
|
||||
} catch (Throwable ex1) {
|
||||
Log.e(ex1);
|
||||
}
|
||||
|
||||
if (download)
|
||||
downloadMessage(context, account, folder, istore, ifolder, imessage, message.id, state);
|
||||
}
|
||||
} finally {
|
||||
((IMAPMessage) imessage).invalidateHeaders();
|
||||
}
|
||||
} catch (MessageRemovedException ex) {
|
||||
Log.i(ex);
|
||||
|
||||
if (account.isGmail() && EntityFolder.USER.equals(folder.type)) {
|
||||
EntityMessage message = db.message().getMessageByUid(folder.id, uid);
|
||||
if (message != null)
|
||||
try {
|
||||
JSONArray jlabel = new JSONArray();
|
||||
jlabel.put(0, folder.name);
|
||||
jlabel.put(1, false);
|
||||
onLabel(context, jlabel, folder, message, istore, ifolder, state);
|
||||
} catch (Throwable ex1) {
|
||||
Log.e(ex1);
|
||||
}
|
||||
}
|
||||
|
||||
db.message().deleteMessage(folder.id, uid);
|
||||
} finally {
|
||||
int count = ifolder.getMessageCount();
|
||||
|
|
|
@ -244,14 +244,28 @@ public class EntityMessage implements Serializable {
|
|||
return "notification." + sender.getAddress().toLowerCase(Locale.ROOT);
|
||||
}
|
||||
|
||||
void setLabel(String label, boolean set) {
|
||||
boolean setLabel(String label, boolean set) {
|
||||
List<String> list = new ArrayList<>();
|
||||
if (labels != null)
|
||||
list.addAll(Arrays.asList(labels));
|
||||
list.remove(label);
|
||||
if (set)
|
||||
list.add(label);
|
||||
labels = list.toArray(new String[0]);
|
||||
|
||||
boolean changed = false;
|
||||
if (set) {
|
||||
if (!list.contains(label)) {
|
||||
changed = true;
|
||||
list.add(label);
|
||||
}
|
||||
} else {
|
||||
if (list.contains(label)) {
|
||||
changed = true;
|
||||
list.remove(label);
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
labels = list.toArray(new String[0]);
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
static File getFile(Context context, Long id) {
|
||||
|
|
Loading…
Reference in a new issue