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

Method onDelete

app/src/main/java/eu/faircode/email/Core.java:1853–2030  ·  view source on GitHub ↗
(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, List<EntityMessage> messages, IMAPStore istore, IMAPFolder ifolder)

Source from the content-addressed store, hash-verified

1851 }
1852
1853 private static void onDelete(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, List<EntityMessage> messages, IMAPStore istore, IMAPFolder ifolder) throws MessagingException, IOException {
1854 // Delete message
1855 DB db = DB.getInstance(context);
1856 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
1857 boolean perform_expunge = prefs.getBoolean("perform_expunge", true);
1858 boolean gmail_delete_all = prefs.getBoolean("gmail_delete_all", false);
1859
1860 if (folder.local) {
1861 Log.i(folder.name + " local delete");
1862 for (EntityMessage message : messages)
1863 db.message().deleteMessage(message.id);
1864 return;
1865 }
1866
1867 try {
1868 if (perform_expunge && account.isGmail() && gmail_delete_all) {
1869 EntityFolder trash = db.folder().getFolderByType(account.id, EntityFolder.TRASH);
1870 EntityFolder drafts = db.folder().getFolderByType(account.id, EntityFolder.DRAFTS);
1871 if (trash != null) {
1872 Map<String, Long> folders = new HashMap<>();
1873 EntityFolder archive = db.folder().getFolderByType(account.id, EntityFolder.ARCHIVE);
1874 if (archive != null)
1875 folders.put(archive.name, archive.id);
1876
1877 List<Long> uids = new ArrayList<>();
1878 List<EntityMessage> process = new ArrayList<>();
1879 for (EntityMessage message : new ArrayList<>(messages))
1880 if (message.uid != null &&
1881 (drafts == null || !Objects.equals(message.folder, drafts.id))) {
1882 uids.add(message.uid);
1883 messages.remove(message);
1884 process.add(message);
1885 }
1886
1887 IMAPFolder itrash = (IMAPFolder) istore.getFolder(trash.name);
1888 Message[] imessages = ifolder.getMessagesByUID(Helper.toLongArray(uids));
1889
1890 List<Message> imove = new ArrayList<>();
1891 if (imessages != null)
1892 for (Message imessage : imessages)
1893 if (imessage instanceof GmailMessage)
1894 try {
1895 imove.add(imessage);
1896 String[] labels = ((GmailMessage) imessage).getLabels();
1897 for (String label : labels)
1898 if (!folders.containsKey(label)) {
1899 EntityFolder f = db.folder().getFolderByName(account.id, label);
1900 if (f != null)
1901 folders.put(f.name, f.id);
1902 }
1903 } catch (Throwable ex) {
1904 Log.e(ex);
1905 }
1906
1907 ifolder.moveMessages(imove.toArray(new Message[0]), itrash);
1908
1909 itrash.open(READ_WRITE);
1910 try {

Callers 1

processOperationsMethod · 0.95

Calls 15

getInstanceMethod · 0.95
iMethod · 0.95
messageMethod · 0.95
folderMethod · 0.95
toLongArrayMethod · 0.95
eMethod · 0.95
openMethod · 0.95
searchMethod · 0.95
setFlagsMethod · 0.95
expungeMethod · 0.95
isOpenMethod · 0.95
closeMethod · 0.95

Tested by

no test coverage detected