(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, List<EntityMessage> messages, IMAPStore istore, IMAPFolder ifolder)
| 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 { |
no test coverage detected