| 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) { |