Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 547a8738 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #5935 from k9mail/callback_cleanup

Callback cleanup
parents f59976ad 237a6024
Loading
Loading
Loading
Loading
+16 −59
Original line number Diff line number Diff line
@@ -60,7 +60,6 @@ import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.FolderClass;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.MessageDownloadState;
import com.fsck.k9.mail.MessageRetrievalListener;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.Part;
import com.fsck.k9.mail.ServerSettings;
@@ -401,56 +400,22 @@ public class MessagingController {
    /**
     * Find all messages in any local account which match the query 'query'
     */
    public void searchLocalMessages(final LocalSearch search, final MessagingListener listener) {
        threadPool.execute(new Runnable() {
            @Override
            public void run() {
                searchLocalMessagesSynchronous(search, listener);
            }
        });
    }

    @VisibleForTesting
    void searchLocalMessagesSynchronous(final LocalSearch search, final MessagingListener listener) {
    public List<LocalMessage> searchLocalMessages(final LocalSearch search) {
        List<Account> searchAccounts = getAccountsFromLocalSearch(search, preferences);

        for (final Account account : searchAccounts) {

            // Collecting statistics of the search result
            MessageRetrievalListener<LocalMessage> retrievalListener = new MessageRetrievalListener<LocalMessage>() {
                @Override
                public void messageStarted(String message, int number, int ofTotal) {
                }

                @Override
                public void messagesFinished(int number) {
                }

                @Override
                public void messageFinished(LocalMessage message, int number, int ofTotal) {
                    if (!isMessageSuppressed(message)) {
        List<LocalMessage> messages = new ArrayList<>();

                        messages.add(message);
                        if (listener != null) {
                            listener.listLocalMessagesAddMessages(account, null, messages);
                        }
                    }
                }
            };

            // build and do the query in the localstore
        for (final Account account : searchAccounts) {
            try {
                LocalStore localStore = localStoreProvider.getInstance(account);
                localStore.searchForMessages(retrievalListener, search);
                List<LocalMessage> localMessages = localStore.searchForMessages(search);

                messages.addAll(localMessages);
            } catch (Exception e) {
                Timber.e(e);
            }
        }

        if (listener != null) {
            listener.listLocalMessagesFinished();
        }
        return messages;
    }

    public Future<?> searchRemoteMessages(String acctUuid, long folderId, String query, Set<Flag> requiredFlags,
@@ -1070,7 +1035,7 @@ public class MessagingController {
        Timber.i("Marking all messages in %s:%s as read", account, folderServerId);

        // TODO: Make this one database UPDATE operation
        List<LocalMessage> messages = localFolder.getMessages(null, false);
        List<LocalMessage> messages = localFolder.getMessages(false);
        for (Message message : messages) {
            if (!message.isSet(Flag.SEEN)) {
                message.setFlag(Flag.SEEN, true);
@@ -1539,7 +1504,7 @@ public class MessagingController {

            long outboxFolderId = localFolder.getDatabaseId();

            List<LocalMessage> localMessages = localFolder.getMessages(null);
            List<LocalMessage> localMessages = localFolder.getMessages();
            int progress = 0;
            int todo = localMessages.size();
            for (MessagingListener l : getListeners()) {
@@ -2198,7 +2163,7 @@ public class MessagingController {
        // Remove all messages marked as deleted
        folder.destroyDeletedMessages();

        compact(account, null);
        compact(account);
    }

    public void emptyTrash(final Account account, MessagingListener listener) {
@@ -2482,22 +2447,14 @@ public class MessagingController {
        notificationController.clearFetchingMailNotification(account);
    }

    public void compact(final Account account, final MessagingListener ml) {
        putBackground("compact:" + account, ml, new Runnable() {
            @Override
            public void run() {
    public void compact(Account account) {
        putBackground("compact:" + account, null, () -> {
            try {
                MessageStore messageStore = messageStoreManager.getMessageStore(account);
                    long oldSize = messageStore.getSize();
                messageStore.compact();
                    long newSize = messageStore.getSize();
                    for (MessagingListener l : getListeners(ml)) {
                        l.accountSizeChanged(account, oldSize, newSize);
                    }
            } catch (Exception e) {
                Timber.e(e, "Failed to compact account %s", account);
            }
            }
        });
    }

+0 −5
Original line number Diff line number Diff line
@@ -13,11 +13,6 @@ import com.fsck.k9.mailstore.LocalMessage;


public interface MessagingListener {
    void accountSizeChanged(Account account, long oldSize, long newSize);

    void listLocalMessagesAddMessages(Account account, String folderServerId, List<LocalMessage> messages);
    void listLocalMessagesFinished();

    void synchronizeMailboxStarted(Account account, long folderId);
    void synchronizeMailboxHeadersStarted(Account account, String folderServerId);
    void synchronizeMailboxHeadersProgress(Account account, String folderServerId, int completed, int total);
+0 −13
Original line number Diff line number Diff line
@@ -9,22 +9,9 @@ import android.content.Context;
import com.fsck.k9.Account;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.Part;
import com.fsck.k9.mailstore.LocalMessage;


public abstract class SimpleMessagingListener implements MessagingListener {
    @Override
    public void accountSizeChanged(Account account, long oldSize, long newSize) {
    }

    @Override
    public void listLocalMessagesAddMessages(Account account, String folderServerId, List<LocalMessage> messages) {
    }

    @Override
    public void listLocalMessagesFinished() {
    }

    @Override
    public void synchronizeMailboxStarted(Account account, long folderId) {
    }
+5 −6
Original line number Diff line number Diff line
@@ -576,17 +576,16 @@ public class LocalFolder {
        });
    }

    public List<LocalMessage> getMessages(MessageRetrievalListener<LocalMessage> listener) throws MessagingException {
        return getMessages(listener, true);
    public List<LocalMessage> getMessages() throws MessagingException {
        return getMessages(true);
    }

    public List<LocalMessage> getMessages(final MessageRetrievalListener<LocalMessage> listener,
            final boolean includeDeleted) throws MessagingException {
    public List<LocalMessage> getMessages(final boolean includeDeleted) throws MessagingException {
        return localStore.getDatabase().execute(false, new DbCallback<List<LocalMessage>>() {
            @Override
            public List<LocalMessage> doDbWork(final SQLiteDatabase db) throws MessagingException {
                open();
                return LocalFolder.this.localStore.getMessages(listener, LocalFolder.this,
                return LocalFolder.this.localStore.getMessages(LocalFolder.this,
                        "SELECT " + LocalStore.GET_MESSAGES_COLS +
                        "FROM messages " +
                        "LEFT JOIN message_parts ON (message_parts.id = messages.message_part_id) " +
@@ -898,7 +897,7 @@ public class LocalFolder {
    public void setFlags(final Set<Flag> flags, boolean value)
    throws MessagingException {
        open();
        for (LocalMessage message : getMessages(null)) {
        for (LocalMessage message : getMessages()) {
            message.setFlags(flags, value);
        }
    }
+9 −26
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import com.fsck.k9.mail.FetchProfile.Item;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.FolderClass;
import com.fsck.k9.mail.FolderType;
import com.fsck.k9.mail.MessageRetrievalListener;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.Multipart;
import com.fsck.k9.mail.Part;
@@ -359,9 +358,7 @@ public class LocalStore {
        });
    }

    public List<LocalMessage> searchForMessages(MessageRetrievalListener<LocalMessage> retrievalListener,
                                        LocalSearch search) throws MessagingException {

    public List<LocalMessage> searchForMessages(LocalSearch search) throws MessagingException {
        StringBuilder query = new StringBuilder();
        List<String> queryArgs = new ArrayList<>();
        SqlQueryBuilder.buildWhereClause(account, search.getConditions(), query, queryArgs);
@@ -382,24 +379,20 @@ public class LocalStore {

        Timber.d("Query = %s", sqlQuery);

        return getMessages(retrievalListener, null, sqlQuery, selectionArgs);
        return getMessages(null, sqlQuery, selectionArgs);
    }

    /*
     * Given a query string, actually do the query for the messages and
     * call the MessageRetrievalListener for each one
     */
    List<LocalMessage> getMessages(
        final MessageRetrievalListener<LocalMessage> listener,
        final LocalFolder folder,
        final String queryString, final String[] placeHolders
    ) throws MessagingException {
    List<LocalMessage> getMessages(LocalFolder folder, String queryString, String[] placeHolders)
            throws MessagingException {
        final List<LocalMessage> messages = new ArrayList<>();
        final int j = database.execute(false, new DbCallback<Integer>() {
        database.execute(false, new DbCallback<Void>() {
            @Override
            public Integer doDbWork(final SQLiteDatabase db) {
            public Void doDbWork(final SQLiteDatabase db) {
                Cursor cursor = null;
                int i = 0;
                try {
                    cursor = db.rawQuery(queryString + " LIMIT 10", placeHolders);

@@ -408,10 +401,6 @@ public class LocalStore {
                        message.populateFromGetMessageCursor(cursor);

                        messages.add(message);
                        if (listener != null) {
                            listener.messageFinished(message, i, -1);
                        }
                        i++;
                    }
                    cursor.close();
                    cursor = db.rawQuery(queryString + " LIMIT -1 OFFSET 10", placeHolders);
@@ -421,22 +410,16 @@ public class LocalStore {
                        message.populateFromGetMessageCursor(cursor);

                        messages.add(message);
                        if (listener != null) {
                            listener.messageFinished(message, i, -1);
                        }
                        i++;
                    }
                } catch (Exception e) {
                    Timber.d(e, "Got an exception");
                } finally {
                    Utility.closeQuietly(cursor);
                }
                return i;

                return null;
            }
        });
        if (listener != null) {
            listener.messagesFinished(j);
        }

        return Collections.unmodifiableList(messages);

@@ -448,7 +431,7 @@ public class LocalStore {
        LocalSearch search = new LocalSearch();
        search.and(SearchField.THREAD_ID, rootIdString, Attribute.EQUALS);

        return searchForMessages(null, search);
        return searchForMessages(search);
    }

    public AttachmentInfo getAttachmentInfo(final String attachmentId) throws MessagingException {
Loading