(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, IMAPFolder ifolder)
| 3159 | } |
| 3160 | |
| 3161 | private static void onPurgeFolder(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, IMAPFolder ifolder) throws MessagingException { |
| 3162 | // Delete all messages from folder |
| 3163 | try { |
| 3164 | DB db = DB.getInstance(context); |
| 3165 | List<Long> busy = db.message().getBusyUids(folder.id, new Date().getTime()); |
| 3166 | |
| 3167 | Message[] imessages = ifolder.getMessages(); |
| 3168 | Log.i(folder.name + " purge=" + imessages.length + " busy=" + busy.size()); |
| 3169 | |
| 3170 | FetchProfile fp = new FetchProfile(); |
| 3171 | fp.add(UIDFolder.FetchProfileItem.UID); |
| 3172 | ifolder.fetch(imessages, fp); |
| 3173 | |
| 3174 | List<Message> idelete = new ArrayList<>(); |
| 3175 | for (Message imessage : imessages) |
| 3176 | try { |
| 3177 | long uid = ifolder.getUID(imessage); |
| 3178 | if (!busy.contains(uid)) |
| 3179 | idelete.add(imessage); |
| 3180 | } catch (MessageRemovedException ex) { |
| 3181 | Log.w(ex); |
| 3182 | } |
| 3183 | |
| 3184 | EntityLog.log(context, folder.name + " purging=" + idelete.size() + "/" + imessages.length); |
| 3185 | if (account.isYahooJp()) { |
| 3186 | for (Message imessage : new ArrayList<>(idelete)) |
| 3187 | try { |
| 3188 | imessage.setFlag(Flags.Flag.DELETED, true); |
| 3189 | } catch (MessagingException mex) { |
| 3190 | Log.w(mex); |
| 3191 | idelete.remove(imessage); |
| 3192 | } |
| 3193 | } else { |
| 3194 | SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); |
| 3195 | int chunk_size = prefs.getInt("chunk_size", DEFAULT_CHUNK_SIZE); |
| 3196 | |
| 3197 | Flags flags = new Flags(Flags.Flag.DELETED); |
| 3198 | List<Message> iremove = new ArrayList<>(); |
| 3199 | for (List<Message> list : Helper.chunkList(idelete, chunk_size)) |
| 3200 | try { |
| 3201 | ifolder.setFlags(list.toArray(new Message[0]), flags, true); |
| 3202 | } catch (MessagingException ex) { |
| 3203 | Log.w(ex); |
| 3204 | for (Message imessage : list) |
| 3205 | try { |
| 3206 | imessage.setFlag(Flags.Flag.DELETED, true); |
| 3207 | } catch (MessagingException mex) { |
| 3208 | Log.w(mex); |
| 3209 | iremove.add(imessage); |
| 3210 | } |
| 3211 | } |
| 3212 | |
| 3213 | for (Message imessage : iremove) |
| 3214 | idelete.remove(imessage); |
| 3215 | } |
| 3216 | Log.i(folder.name + " purge deleted"); |
| 3217 | expunge(context, ifolder, idelete); |
| 3218 | } catch (Throwable ex) { |
no test coverage detected