Search in sources :

Example 11 with LocalStore

use of com.fsck.k9.mailstore.LocalStore in project k-9 by k9mail.

the class MessagingControllerPushReceiver method getPushState.

public String getPushState(String folderName) {
    LocalFolder localFolder = null;
    try {
        LocalStore localStore = account.getLocalStore();
        localFolder = localStore.getFolder(folderName);
        localFolder.open(Folder.OPEN_MODE_RW);
        return localFolder.getPushState();
    } catch (Exception e) {
        Timber.e(e, "Unable to get push state from account %s, folder %s", account.getDescription(), folderName);
        return null;
    } finally {
        if (localFolder != null) {
            localFolder.close();
        }
    }
}
Also used : LocalFolder(com.fsck.k9.mailstore.LocalFolder) LocalStore(com.fsck.k9.mailstore.LocalStore)

Example 12 with LocalStore

use of com.fsck.k9.mailstore.LocalStore in project k-9 by k9mail.

the class MessagingController method setFlag.

/**
     * Set or remove a flag for a set of messages in a specific folder.
     * <p>
     * <p>
     * The {@link Message} objects passed in are updated to reflect the new flag state.
     * </p>
     *
     * @param account
     *         The account the folder containing the messages belongs to.
     * @param folderName
     *         The name of the folder.
     * @param messages
     *         The messages to change the flag for.
     * @param flag
     *         The flag to change.
     * @param newState
     *         {@code true}, if the flag should be set. {@code false} if it should be removed.
     */
public void setFlag(Account account, String folderName, List<? extends Message> messages, Flag flag, boolean newState) {
    // TODO: Put this into the background, but right now some callers depend on the message
    //       objects being modified right after this method returns.
    Folder localFolder = null;
    try {
        Store localStore = account.getLocalStore();
        localFolder = localStore.getFolder(folderName);
        localFolder.open(Folder.OPEN_MODE_RW);
        // Allows for re-allowing sending of messages that could not be sent
        if (flag == Flag.FLAGGED && !newState && account.getOutboxFolderName().equals(folderName)) {
            for (Message message : messages) {
                String uid = message.getUid();
                if (uid != null) {
                    sendCount.remove(uid);
                }
            }
        }
        // Update the messages in the local store
        localFolder.setFlags(messages, Collections.singleton(flag), newState);
        int unreadMessageCount = localFolder.getUnreadMessageCount();
        for (MessagingListener l : getListeners()) {
            l.folderStatusChanged(account, folderName, unreadMessageCount);
        }
        // TODO: Skip the remote part for all local-only folders
        if (account.getErrorFolderName().equals(folderName)) {
            return;
        }
        List<String> uids = getUidsFromMessages(messages);
        queueSetFlag(account, folderName, newState, flag, uids);
        processPendingCommands(account);
    } catch (MessagingException me) {
        addErrorMessage(account, null, me);
        throw new RuntimeException(me);
    } finally {
        closeFolder(localFolder);
    }
}
Also used : LocalMessage(com.fsck.k9.mailstore.LocalMessage) MimeMessage(com.fsck.k9.mail.internet.MimeMessage) Message(com.fsck.k9.mail.Message) MessagingException(com.fsck.k9.mail.MessagingException) LocalStore(com.fsck.k9.mailstore.LocalStore) Store(com.fsck.k9.mail.Store) Pop3Store(com.fsck.k9.mail.store.pop3.Pop3Store) Folder(com.fsck.k9.mail.Folder) LocalFolder(com.fsck.k9.mailstore.LocalFolder) SuppressLint(android.annotation.SuppressLint)

Example 13 with LocalStore

use of com.fsck.k9.mailstore.LocalStore in project k-9 by k9mail.

the class MessagingController method queuePendingCommand.

private void queuePendingCommand(Account account, PendingCommand command) {
    try {
        LocalStore localStore = account.getLocalStore();
        localStore.addPendingCommand(command);
    } catch (Exception e) {
        addErrorMessage(account, null, e);
        throw new RuntimeException("Unable to enqueue pending command", e);
    }
}
Also used : LocalStore(com.fsck.k9.mailstore.LocalStore) CertificateValidationException(com.fsck.k9.mail.CertificateValidationException) UnavailableStorageException(com.fsck.k9.mailstore.UnavailableStorageException) IOException(java.io.IOException) MessagingException(com.fsck.k9.mail.MessagingException) AuthenticationFailedException(com.fsck.k9.mail.AuthenticationFailedException)

Example 14 with LocalStore

use of com.fsck.k9.mailstore.LocalStore in project k-9 by k9mail.

the class MessagingController method processPendingCommandsSynchronous.

private void processPendingCommandsSynchronous(Account account) throws MessagingException {
    LocalStore localStore = account.getLocalStore();
    List<PendingCommand> commands = localStore.getPendingCommands();
    int progress = 0;
    int todo = commands.size();
    if (todo == 0) {
        return;
    }
    for (MessagingListener l : getListeners()) {
        l.pendingCommandsProcessing(account);
        l.synchronizeMailboxProgress(account, null, progress, todo);
    }
    PendingCommand processingCommand = null;
    try {
        for (PendingCommand command : commands) {
            processingCommand = command;
            Timber.d("Processing pending command '%s'", command);
            for (MessagingListener l : getListeners()) {
                l.pendingCommandStarted(account, command.getCommandName());
            }
            /*
                 * We specifically do not catch any exceptions here. If a command fails it is
                 * most likely due to a server or IO error and it must be retried before any
                 * other command processes. This maintains the order of the commands.
                 */
            try {
                command.execute(this, account);
                localStore.removePendingCommand(command);
                Timber.d("Done processing pending command '%s'", command);
            } catch (MessagingException me) {
                if (me.isPermanentFailure()) {
                    addErrorMessage(account, null, me);
                    Timber.e("Failure of command '%s' was permanent, removing command from queue", command);
                    localStore.removePendingCommand(processingCommand);
                } else {
                    throw me;
                }
            } finally {
                progress++;
                for (MessagingListener l : getListeners()) {
                    l.synchronizeMailboxProgress(account, null, progress, todo);
                    l.pendingCommandCompleted(account, command.getCommandName());
                }
            }
        }
    } catch (MessagingException me) {
        notifyUserIfCertificateProblem(account, me, true);
        addErrorMessage(account, null, me);
        Timber.e(me, "Could not process command '%s'", processingCommand);
        throw me;
    } finally {
        for (MessagingListener l : getListeners()) {
            l.pendingCommandsFinished(account);
        }
    }
}
Also used : MessagingException(com.fsck.k9.mail.MessagingException) LocalStore(com.fsck.k9.mailstore.LocalStore) PendingCommand(com.fsck.k9.controller.MessagingControllerCommands.PendingCommand) SuppressLint(android.annotation.SuppressLint)

Example 15 with LocalStore

use of com.fsck.k9.mailstore.LocalStore in project k-9 by k9mail.

the class MlfUtils method getOpenFolder.

static LocalFolder getOpenFolder(String folderName, Account account) throws MessagingException {
    LocalStore localStore = account.getLocalStore();
    LocalFolder localFolder = localStore.getFolder(folderName);
    localFolder.open(Folder.OPEN_MODE_RO);
    return localFolder;
}
Also used : LocalFolder(com.fsck.k9.mailstore.LocalFolder) LocalStore(com.fsck.k9.mailstore.LocalStore)

Aggregations

LocalStore (com.fsck.k9.mailstore.LocalStore)41 MessagingException (com.fsck.k9.mail.MessagingException)33 LocalFolder (com.fsck.k9.mailstore.LocalFolder)33 Store (com.fsck.k9.mail.Store)18 LocalMessage (com.fsck.k9.mailstore.LocalMessage)18 Folder (com.fsck.k9.mail.Folder)17 Pop3Store (com.fsck.k9.mail.store.pop3.Pop3Store)17 MimeMessage (com.fsck.k9.mail.internet.MimeMessage)15 FetchProfile (com.fsck.k9.mail.FetchProfile)14 Message (com.fsck.k9.mail.Message)13 UnavailableStorageException (com.fsck.k9.mailstore.UnavailableStorageException)13 IOException (java.io.IOException)12 AuthenticationFailedException (com.fsck.k9.mail.AuthenticationFailedException)11 CertificateValidationException (com.fsck.k9.mail.CertificateValidationException)11 Test (org.junit.Test)10 Account (com.fsck.k9.Account)9 ArrayList (java.util.ArrayList)9 SuppressLint (android.annotation.SuppressLint)8 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)8 VisibleForTesting (android.support.annotation.VisibleForTesting)5