From 664c4d6a7824d7dccd20a4c3352479928ea1d251 Mon Sep 17 00:00:00 2001 From: Daniel Applebaum Date: Fri, 16 Apr 2010 14:33:54 +0000 Subject: [PATCH] Fixes Issue 1394 Computing the account size is pretty slow for big accounts, and making this functionality optional should be considered. Also, displays the number of flagged messages ("stars") in each account in the Accounts list and each folder in the FolderList. Needs better presentation of the flagged message counts, but this works as a proof-of-concept and gets the data structures built. --- src/com/fsck/k9/Account.java | 15 +++- src/com/fsck/k9/MessagingController.java | 23 +++-- src/com/fsck/k9/MessagingListener.java | 2 +- src/com/fsck/k9/activity/Accounts.java | 87 ++++++++++++++----- src/com/fsck/k9/activity/FolderList.java | 31 ++++++- src/com/fsck/k9/mail/Folder.java | 1 + src/com/fsck/k9/mail/store/ImapStore.java | 28 +++++++ src/com/fsck/k9/mail/store/LocalStore.java | 93 +++++++++++++++++++-- src/com/fsck/k9/mail/store/Pop3Store.java | 5 ++ src/com/fsck/k9/mail/store/WebDavStore.java | 5 ++ 10 files changed, 245 insertions(+), 45 deletions(-) diff --git a/src/com/fsck/k9/Account.java b/src/com/fsck/k9/Account.java index 1e090962c..3d3cd8a49 100644 --- a/src/com/fsck/k9/Account.java +++ b/src/com/fsck/k9/Account.java @@ -5,6 +5,8 @@ import android.content.Context; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.Uri; +import android.util.Log; + import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.MessagingException; @@ -422,10 +424,13 @@ public class Account //TODO: Shouldn't this live in MessagingController? // Why should everything be in MessagingController? This is an Account-specific operation. --danapple0 - public int getUnreadMessageCount(Context context) throws MessagingException + public AccountStats getStats(Context context) throws MessagingException { + AccountStats stats = new AccountStats(); int unreadMessageCount = 0; + int flaggedMessageCount = 0; LocalStore localStore = getLocalStore(); + stats.size = localStore.getSize(); Account.FolderMode aMode = getFolderDisplayMode(); Preferences prefs = Preferences.getPreferences(context); for (LocalFolder folder : localStore.getPersonalNamespaces()) @@ -460,10 +465,14 @@ public class Account continue; } unreadMessageCount += folder.getUnreadMessageCount(); + flaggedMessageCount += folder.getFlaggedMessageCount(); + } } - - return unreadMessageCount; + stats.unreadMessageCount = unreadMessageCount; + stats.flaggedMessageCount = flaggedMessageCount; + Log.i(K9.LOG_TAG, "flaggedMessageCount for " + getDescription() + " = " + flaggedMessageCount); + return stats; } public String getUuid() diff --git a/src/com/fsck/k9/MessagingController.java b/src/com/fsck/k9/MessagingController.java index 8e4fe6e47..b1699924d 100644 --- a/src/com/fsck/k9/MessagingController.java +++ b/src/com/fsck/k9/MessagingController.java @@ -1078,6 +1078,8 @@ public class MessagingController implements Runnable int newMessages = downloadMessages(account, remoteFolder, localFolder, remoteMessages, false); int unreadMessageCount = setLocalUnreadCountToRemote(localFolder, remoteFolder, newMessages); + setLocalFlaggedCountToRemote(localFolder, remoteFolder); + for (MessagingListener l : getListeners()) { @@ -1192,6 +1194,15 @@ public class MessagingController implements Runnable return localFolder.getMessageCount(); } } + + private void setLocalFlaggedCountToRemote(LocalFolder localFolder, Folder remoteFolder) throws MessagingException + { + int remoteFlaggedMessageCount = remoteFolder.getFlaggedMessageCount(); + if (remoteFlaggedMessageCount != -1) + { + localFolder.setFlaggedMessageCount(remoteFlaggedMessageCount); + } + } private int downloadMessages(final Account account, final Folder remoteFolder, final LocalFolder localFolder, List inputMessages, boolean flagSyncOnly) throws MessagingException @@ -3372,18 +3383,17 @@ public class MessagingController implements Runnable { public void run() { - - int unreadMessageCount = 0; try { - unreadMessageCount = account.getUnreadMessageCount(context); + AccountStats stats = account.getStats(context); + l.accountStatusChanged(account, stats); } catch (MessagingException me) { Log.e(K9.LOG_TAG, "Count not get unread count for account " + account.getDescription(), me); } - l.accountStatusChanged(account, unreadMessageCount); + } }; @@ -4306,7 +4316,8 @@ public class MessagingController implements Runnable int unreadMessageCount = 0; try { - unreadMessageCount = account.getUnreadMessageCount(context); + AccountStats stats = account.getStats(context); + unreadMessageCount = stats.unreadMessageCount; } catch (MessagingException e) { @@ -4649,6 +4660,8 @@ public class MessagingController implements Runnable int newCount = downloadMessages(account, remoteFolder, localFolder, messages, flagSyncOnly); int unreadMessageCount = setLocalUnreadCountToRemote(localFolder, remoteFolder, messages.size()); + setLocalFlaggedCountToRemote(localFolder, remoteFolder); + localFolder.setLastPush(System.currentTimeMillis()); localFolder.setStatus(null); diff --git a/src/com/fsck/k9/MessagingListener.java b/src/com/fsck/k9/MessagingListener.java index 794506ac0..463c5d59e 100644 --- a/src/com/fsck/k9/MessagingListener.java +++ b/src/com/fsck/k9/MessagingListener.java @@ -18,7 +18,7 @@ import java.util.List; public class MessagingListener { - public void accountStatusChanged(Account account, int unreadMessageCount) + public void accountStatusChanged(Account account, AccountStats stats) { } diff --git a/src/com/fsck/k9/activity/Accounts.java b/src/com/fsck/k9/activity/Accounts.java index 4fc56c227..b60dc3d83 100644 --- a/src/com/fsck/k9/activity/Accounts.java +++ b/src/com/fsck/k9/activity/Accounts.java @@ -10,6 +10,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.*; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnClickListener; @@ -29,7 +30,8 @@ import java.util.concurrent.ConcurrentHashMap; public class Accounts extends K9ListActivity implements OnItemClickListener, OnClickListener { private static final int DIALOG_REMOVE_ACCOUNT = 1; - private ConcurrentHashMap unreadMessageCounts = new ConcurrentHashMap(); + //private ConcurrentHashMap unreadMessageCounts = new ConcurrentHashMap(); + private ConcurrentHashMap accountStats = new ConcurrentHashMap(); private ConcurrentHashMap pendingWork = new ConcurrentHashMap(); @@ -97,11 +99,20 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC { public void run() { + AccountStats stats = accountStats.get(account.getUuid()); + if (stats != null) + { + stats.size = newSize; + } String toastText = getString(R.string.account_size_changed, account.getDescription(), SizeFormatter.formatSize(getApplication(), oldSize), SizeFormatter.formatSize(getApplication(), newSize));; Toast toast = Toast.makeText(getApplication(), toastText, Toast.LENGTH_LONG); toast.show(); + if (mAdapter != null) + { + mAdapter.notifyDataSetChanged(); + } } }); } @@ -131,21 +142,33 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC ActivityListener mListener = new ActivityListener() { @Override - public void accountStatusChanged(Account account, int unreadMessageCount) + public void folderStatusChanged(Account account, String folderName, int unreadMessageCount) { - Integer oldUnreadMessageCountInteger = unreadMessageCounts.get(account.getUuid()); - int oldUnreadMessageCount = 0; - if (oldUnreadMessageCountInteger != null) + try { - oldUnreadMessageCount = oldUnreadMessageCountInteger; + AccountStats stats = account.getStats(Accounts.this); + accountStatusChanged(account, stats); } - - unreadMessageCounts.put(account.getUuid(), unreadMessageCount); - mUnreadMessageCount += unreadMessageCount - oldUnreadMessageCount; + catch (Exception e) + { + Log.e(K9.LOG_TAG, "Unable to get account stats", e); + } + } + @Override + public void accountStatusChanged(Account account, AccountStats stats) + { + AccountStats oldStats = accountStats.get(account.getUuid()); + int oldUnreadMessageCount = 0; + if (oldStats != null) + { + oldUnreadMessageCount = oldStats.unreadMessageCount; + } + accountStats.put(account.getUuid(), stats); + // unreadMessageCounts.put(account.getUuid(), stats.unreadMessageCount); + mUnreadMessageCount += stats.unreadMessageCount - oldUnreadMessageCount; mHandler.dataChanged(); pendingWork.remove(account); - if (pendingWork.isEmpty()) { mHandler.progress(Window.PROGRESS_END); @@ -161,9 +184,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC @Override public void accountSizeChanged(Account account, long oldSize, long newSize) { - mHandler.accountSizeChanged(account, oldSize, newSize); - } @Override @@ -259,7 +280,8 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC }; - private static String UNREAD_MESSAGE_COUNTS = "unreadMessageCounts"; + //private static String UNREAD_MESSAGE_COUNTS = "unreadMessageCounts"; + private static String ACCOUNT_STATS = "accountStats"; private static String SELECTED_CONTEXT_ACCOUNT = "selectedContextAccount"; public static final String EXTRA_STARTUP = "startup"; @@ -330,10 +352,10 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC if (icicle != null) { - Map oldUnreadMessageCounts = (Map)icicle.get(UNREAD_MESSAGE_COUNTS); - if (oldUnreadMessageCounts != null) + Map oldStats = (Map)icicle.get(ACCOUNT_STATS); + if (oldStats != null) { - unreadMessageCounts.putAll(oldUnreadMessageCounts); + accountStats.putAll(oldStats); } } } @@ -347,7 +369,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC { outState.putString(SELECTED_CONTEXT_ACCOUNT, mSelectedContextAccount.getUuid()); } - outState.putSerializable(UNREAD_MESSAGE_COUNTS, unreadMessageCounts); + outState.putSerializable(ACCOUNT_STATS, accountStats); } @Override @@ -385,7 +407,7 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC } pendingWork.clear(); mUnreadMessageCount = 0; - unreadMessageCounts.clear(); + accountStats.clear(); for (Account account : accounts) { @@ -743,16 +765,35 @@ public class Accounts extends K9ListActivity implements OnItemClickListener, OnC view.setTag(holder); } - holder.description.setText(account.getDescription()); - holder.email.setText(account.getEmail()); + AccountStats stats = accountStats.get(account.getUuid()); + + if (stats != null) + { + holder.email.setText(SizeFormatter.formatSize(Accounts.this, stats.size) + + (stats.flaggedMessageCount > 0 ? " / " + stats.flaggedMessageCount + "*" : "")); + } + else + { + holder.email.setText(account.getEmail()); + } + + String description = account.getDescription(); + if (description == null || description.length() == 0) + { + description = account.getEmail(); + } + + holder.description.setText(description); + if (account.getEmail().equals(account.getDescription())) { holder.email.setVisibility(View.GONE); } - - Integer unreadMessageCount = unreadMessageCounts.get(account.getUuid()); - if (unreadMessageCount != null) + + Integer unreadMessageCount = null; + if (stats != null) { + unreadMessageCount = stats.unreadMessageCount; holder.newMessageCount.setText(Integer.toString(unreadMessageCount)); holder.newMessageCount.setVisibility(unreadMessageCount > 0 ? View.VISIBLE : View.GONE); } diff --git a/src/com/fsck/k9/activity/FolderList.java b/src/com/fsck/k9/activity/FolderList.java index 91e513a69..4b2f8bfa1 100644 --- a/src/com/fsck/k9/activity/FolderList.java +++ b/src/com/fsck/k9/activity/FolderList.java @@ -63,6 +63,7 @@ public class FolderList extends K9ListActivity private FolderListHandler mHandler = new FolderListHandler(); private int mUnreadMessageCount; + private int mFlaggedMessageCount; class FolderListHandler extends Handler { @@ -73,7 +74,8 @@ public class FolderList extends K9ListActivity { public void run() { - String dispString = mAdapter.mListener.formatHeader(FolderList.this, getString(R.string.folder_list_title, mAccount.getDescription()), mUnreadMessageCount, getTimeFormat()); + String dispString = mAdapter.mListener.formatHeader(FolderList.this, + getString(R.string.folder_list_title, mAccount.getDescription()), mUnreadMessageCount, getTimeFormat()); setTitle(dispString); @@ -757,9 +759,9 @@ public class FolderList extends K9ListActivity private ActivityListener mListener = new ActivityListener() { @Override - public void accountStatusChanged(Account account, int unreadMessageCount) + public void accountStatusChanged(Account account, AccountStats stats) { - mUnreadMessageCount = unreadMessageCount; + mUnreadMessageCount = stats.unreadMessageCount; mHandler.refreshTitle(); } @@ -1222,8 +1224,18 @@ public class FolderList extends K9ListActivity statusText = getString(R.string.folder_push_active_symbol) + " "+ statusText; } + if (folder.flaggedMessageCount > 0) + { + if (statusText == null) + { + statusText = ""; + } + statusText += " / " + folder.flaggedMessageCount + "*"; + } if (statusText != null) { + + holder.folderStatus.setText(statusText); holder.folderStatus.setVisibility(View.VISIBLE); } @@ -1273,6 +1285,8 @@ public class FolderList extends K9ListActivity public long lastChecked; public int unreadMessageCount; + + public int flaggedMessageCount; public boolean loading; @@ -1332,7 +1346,7 @@ public class FolderList extends K9ListActivity try { folder.open(Folder.OpenMode.READ_WRITE); - unreadCount = folder.getUnreadMessageCount(); + // unreadCount = folder.getUnreadMessageCount(); } catch (MessagingException me) { @@ -1378,6 +1392,15 @@ public class FolderList extends K9ListActivity this.status = mess; this.unreadMessageCount = unreadCount; + + try + { + this.flaggedMessageCount = folder.getFlaggedMessageCount(); + } + catch (Exception e) + { + Log.e(K9.LOG_TAG, "Unable to get flaggedMessageCount", e); + } folder.close(); diff --git a/src/com/fsck/k9/mail/Folder.java b/src/com/fsck/k9/mail/Folder.java index 167d3c6bd..9fb6e40b5 100644 --- a/src/com/fsck/k9/mail/Folder.java +++ b/src/com/fsck/k9/mail/Folder.java @@ -77,6 +77,7 @@ public abstract class Folder public abstract int getMessageCount() throws MessagingException; public abstract int getUnreadMessageCount() throws MessagingException; + public abstract int getFlaggedMessageCount() throws MessagingException; public abstract Message getMessage(String uid) throws MessagingException; diff --git a/src/com/fsck/k9/mail/store/ImapStore.java b/src/com/fsck/k9/mail/store/ImapStore.java index b64f8c19e..9fc6e1a23 100644 --- a/src/com/fsck/k9/mail/store/ImapStore.java +++ b/src/com/fsck/k9/mail/store/ImapStore.java @@ -862,6 +862,34 @@ public class ImapStore extends Store throw ioExceptionHandler(mConnection, ioe); } } + + @Override + public int getFlaggedMessageCount() throws MessagingException + { + checkOpen(); + try + { + int count = 0; + int start = mMessageCount - 299; + if (start < 1) + { + start = 1; + } + List responses = executeSimpleCommand(String.format("SEARCH %d:* FLAGGED NOT DELETED", start)); + for (ImapResponse response : responses) + { + if (response.get(0).equals("SEARCH")) + { + count += response.size() - 1; + } + } + return count; + } + catch (IOException ioe) + { + throw ioExceptionHandler(mConnection, ioe); + } + } @Override public void delete(boolean recurse) throws MessagingException diff --git a/src/com/fsck/k9/mail/store/LocalStore.java b/src/com/fsck/k9/mail/store/LocalStore.java index bcb239deb..2831ac03d 100644 --- a/src/com/fsck/k9/mail/store/LocalStore.java +++ b/src/com/fsck/k9/mail/store/LocalStore.java @@ -34,7 +34,7 @@ import java.util.regex.Matcher; */ public class LocalStore extends Store implements Serializable { - private static final int DB_VERSION = 33; + private static final int DB_VERSION = 34; private static final Flag[] PERMANENT_FLAGS = { Flag.DELETED, Flag.X_DESTROYED, Flag.SEEN, Flag.FLAGGED }; private String mPath; @@ -201,6 +201,20 @@ public class LocalStore extends Store implements Serializable } } + if (mDb.getVersion() < 34) + { + try + { + mDb.execSQL("ALTER TABLE folders ADD flagged_count INTEGER default 0"); + } + catch (SQLiteException e) + { + if (! e.toString().startsWith("duplicate column name: flagged_count")) + { + throw e; + } + } + } } @@ -339,11 +353,11 @@ public class LocalStore extends Store implements Serializable try { - cursor = mDb.rawQuery("SELECT id, name, unread_count, visible_limit, last_updated, status, push_state, last_pushed FROM folders", null); + cursor = mDb.rawQuery("SELECT id, name, unread_count, visible_limit, last_updated, status, push_state, last_pushed, flagged_count FROM folders", null); while (cursor.moveToNext()) { LocalFolder folder = new LocalFolder(cursor.getString(1)); - folder.open(cursor.getInt(0), cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getLong(4), cursor.getString(5), cursor.getString(6), cursor.getLong(7)); + folder.open(cursor.getInt(0), cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getLong(4), cursor.getString(5), cursor.getString(6), cursor.getLong(7), cursor.getInt(8)); folders.add(folder); } @@ -743,6 +757,7 @@ public class LocalStore extends Store implements Serializable private String mName = null; private long mFolderId = -1; private int mUnreadMessageCount = -1; + private int mFlaggedMessageCount = -1; private int mVisibleLimit = -1; private FolderClass displayClass = FolderClass.NO_CLASS; private FolderClass syncClass = FolderClass.INHERITED; @@ -790,7 +805,7 @@ public class LocalStore extends Store implements Serializable try { String baseQuery = - "SELECT id, name,unread_count, visible_limit, last_updated, status, push_state, last_pushed FROM folders "; + "SELECT id, name,unread_count, visible_limit, last_updated, status, push_state, last_pushed, flagged_count FROM folders "; if (mName != null) { cursor = mDb.rawQuery(baseQuery + "where folders.name = ?", new String[] { mName }); @@ -807,7 +822,7 @@ public class LocalStore extends Store implements Serializable int folderId = cursor.getInt(0); if (folderId > 0) { - open(folderId, cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getLong(4), cursor.getString(5), cursor.getString(6), cursor.getLong(7)); + open(folderId, cursor.getString(1), cursor.getInt(2), cursor.getInt(3), cursor.getLong(4), cursor.getString(5), cursor.getString(6), cursor.getLong(7), cursor.getInt(8)); } } else @@ -826,13 +841,14 @@ public class LocalStore extends Store implements Serializable } } - private void open(int id, String name, int unreadCount, int visibleLimit, long lastChecked, String status, String pushState, long lastPushed) throws MessagingException + private void open(int id, String name, int unreadCount, int visibleLimit, long lastChecked, String status, String pushState, long lastPushed, int flaggedCount) throws MessagingException { mFolderId = id; mName = name; mUnreadMessageCount = unreadCount; mVisibleLimit = visibleLimit; mPushState = pushState; + mFlaggedMessageCount = flaggedCount; super.setStatus(status); // Only want to set the local variable stored in the super class. This class // does a DB update on setLastChecked @@ -954,7 +970,13 @@ public class LocalStore extends Store implements Serializable open(OpenMode.READ_WRITE); return mUnreadMessageCount; } - + + @Override + public int getFlaggedMessageCount() throws MessagingException + { + open(OpenMode.READ_WRITE); + return mFlaggedMessageCount; + } public void setUnreadMessageCount(int unreadMessageCount) throws MessagingException { @@ -963,6 +985,14 @@ public class LocalStore extends Store implements Serializable mDb.execSQL("UPDATE folders SET unread_count = ? WHERE id = ?", new Object[] { mUnreadMessageCount, mFolderId }); } + + public void setFlaggedMessageCount(int flaggedMessageCount) throws MessagingException + { + open(OpenMode.READ_WRITE); + mFlaggedMessageCount = Math.max(0, flaggedMessageCount); + mDb.execSQL("UPDATE folders SET flagged_count = ? WHERE id = ?", + new Object[] { mFlaggedMessageCount, mFolderId }); + } @Override public void setLastChecked(long lastChecked) throws MessagingException @@ -1524,6 +1554,12 @@ public class LocalStore extends Store implements Serializable setUnreadMessageCount(getUnreadMessageCount() - 1); lDestFolder.setUnreadMessageCount(lDestFolder.getUnreadMessageCount() + 1); } + + if (message.isSet(Flag.FLAGGED)) + { + setFlaggedMessageCount(getFlaggedMessageCount() - 1); + lDestFolder.setFlaggedMessageCount(lDestFolder.getFlaggedMessageCount() + 1); + } String oldUID = message.getUid(); @@ -1592,6 +1628,10 @@ public class LocalStore extends Store implements Serializable { setUnreadMessageCount(getUnreadMessageCount() - 1); } + if (oldMessage != null && oldMessage.isSet(Flag.FLAGGED) == true) + { + setFlaggedMessageCount(getFlaggedMessageCount() - 1); + } /* * The message may already exist in this Folder, so delete it first. */ @@ -1670,6 +1710,10 @@ public class LocalStore extends Store implements Serializable { setUnreadMessageCount(getUnreadMessageCount() + 1); } + if (message.isSet(Flag.FLAGGED) == true) + { + setFlaggedMessageCount(getFlaggedMessageCount() + 1); + } } catch (Exception e) { @@ -1970,14 +2014,15 @@ public class LocalStore extends Store implements Serializable { Long.toString(mFolderId), new Long(cutoff) }); - resetUnreadCount(); + resetUnreadAndFlaggedCounts(); } - private void resetUnreadCount() + private void resetUnreadAndFlaggedCounts() { try { int newUnread = 0; + int newFlagged = 0; Message[] messages = getMessages(null); for (Message message : messages) { @@ -1985,14 +2030,20 @@ public class LocalStore extends Store implements Serializable { newUnread++; } + if (message.isSet(Flag.FLAGGED) == true) + { + newFlagged++; + } } setUnreadMessageCount(newUnread); + setFlaggedMessageCount(newFlagged); } catch (Exception e) { Log.e(K9.LOG_TAG, "Unable to fetch all messages from LocalStore", e); } } + @Override public void delete(boolean recurse) throws MessagingException @@ -2539,6 +2590,30 @@ public class LocalStore extends Store implements Serializable folder.setUnreadMessageCount(folder.getUnreadMessageCount() + 1); } } + if ((flag == Flag.DELETED || flag == Flag.X_DESTROYED) && isSet(Flag.FLAGGED)) + { + LocalFolder folder = (LocalFolder)mFolder; + if (set) + { + folder.setFlaggedMessageCount(folder.getFlaggedMessageCount() - 1); + } + else + { + folder.setFlaggedMessageCount(folder.getFlaggedMessageCount() + 1); + } + } + if (flag == Flag.FLAGGED && !isSet(Flag.DELETED)) + { + LocalFolder folder = (LocalFolder)mFolder; + if (set) + { + folder.setFlaggedMessageCount(folder.getFlaggedMessageCount() + 1); + } + else + { + folder.setFlaggedMessageCount(folder.getFlaggedMessageCount() - 1); + } + } } catch (MessagingException me) { diff --git a/src/com/fsck/k9/mail/store/Pop3Store.java b/src/com/fsck/k9/mail/store/Pop3Store.java index 4d638a214..990247504 100644 --- a/src/com/fsck/k9/mail/store/Pop3Store.java +++ b/src/com/fsck/k9/mail/store/Pop3Store.java @@ -415,6 +415,11 @@ public class Pop3Store extends Store { return -1; } + @Override + public int getFlaggedMessageCount() throws MessagingException + { + return -1; + } @Override public Message getMessage(String uid) throws MessagingException diff --git a/src/com/fsck/k9/mail/store/WebDavStore.java b/src/com/fsck/k9/mail/store/WebDavStore.java index 74fd69207..3875b0a44 100644 --- a/src/com/fsck/k9/mail/store/WebDavStore.java +++ b/src/com/fsck/k9/mail/store/WebDavStore.java @@ -1332,6 +1332,11 @@ public class WebDavStore extends Store return this.mUnreadMessageCount; } + @Override + public int getFlaggedMessageCount() throws MessagingException + { + return -1; + } @Override public boolean isOpen()