MCPcopy Create free account
hub / github.com/M66B/FairEmail / onLabel

Method onLabel

app/src/main/java/eu/faircode/email/Core.java:1094–1175  ·  view source on GitHub ↗
(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPStore istore, IMAPFolder ifolder, State state)

Source from the content-addressed store, hash-verified

1092 }
1093
1094 private static void onLabel(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPStore istore, IMAPFolder ifolder, State state) throws JSONException, MessagingException, IOException {
1095 // Set/clear Gmail label
1096 // Gmail does not push label changes
1097 String label = jargs.getString(0);
1098 boolean set = jargs.getBoolean(1);
1099
1100 if (TextUtils.isEmpty(label))
1101 throw new IllegalArgumentException("label/empty");
1102
1103 if (message.uid == null)
1104 throw new IllegalArgumentException("label/uid");
1105
1106 DB db = DB.getInstance(context);
1107
1108 if (!set && label.equals(folder.name)) {
1109 if (TextUtils.isEmpty(message.msgid)) {
1110 Log.w("label/msgid");
1111 return;
1112 }
1113
1114 // Prevent deleting message
1115 EntityFolder archive = db.folder().getFolderByType(message.account, EntityFolder.ARCHIVE);
1116 if (archive == null) {
1117 Log.w("label/archive");
1118 return;
1119 }
1120
1121 boolean archived;
1122 Folder iarchive = istore.getFolder(archive.name);
1123 try {
1124 iarchive.open(Folder.READ_ONLY);
1125 Message[] imessages = iarchive.search(new MessageIDTerm(message.msgid));
1126 archived = (imessages != null && imessages.length > 0);
1127 } finally {
1128 if (iarchive.isOpen())
1129 iarchive.close(false);
1130 }
1131
1132 if (archived)
1133 try {
1134 Message imessage = ifolder.getMessageByUID(message.uid);
1135 if (imessage == null)
1136 throw new MessageRemovedException();
1137 imessage.setFlag(Flags.Flag.DELETED, true);
1138 expunge(context, ifolder, Arrays.asList(imessage));
1139 } catch (MessagingException ex) {
1140 Log.w(ex);
1141 }
1142 else {
1143 Log.w("label/delete folder=" + folder.name);
1144 return;
1145 }
1146 } else {
1147 try {
1148 Message imessage = ifolder.getMessageByUID(message.uid);
1149 if (imessage instanceof GmailMessage)
1150 ((GmailMessage) imessage).setLabels(new String[]{label}, set);
1151 } catch (MessagingException ex) {

Callers 2

processOperationsMethod · 0.95
onFetchMethod · 0.95

Calls 15

getInstanceMethod · 0.95
wMethod · 0.95
folderMethod · 0.95
openMethod · 0.95
searchMethod · 0.95
isOpenMethod · 0.95
closeMethod · 0.95
setFlagMethod · 0.95
expungeMethod · 0.95
beginTransactionMethod · 0.95
messageMethod · 0.95
iMethod · 0.95

Tested by

no test coverage detected