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

Method onPurgeFolder

app/src/main/java/eu/faircode/email/Core.java:3161–3224  ·  view source on GitHub ↗
(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, IMAPFolder ifolder)

Source from the content-addressed store, hash-verified

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

Callers 1

processOperationsMethod · 0.95

Calls 15

getInstanceMethod · 0.95
messageMethod · 0.95
iMethod · 0.95
addMethod · 0.95
wMethod · 0.95
logMethod · 0.95
chunkListMethod · 0.95
expungeMethod · 0.95
eMethod · 0.95
syncMethod · 0.95
beginTransactionMethod · 0.95

Tested by

no test coverage detected