diff --git a/res/menu/folder_context.xml b/res/menu/folder_context.xml index fe72d5ef5..ad5f3d5e0 100644 --- a/res/menu/folder_context.xml +++ b/res/menu/folder_context.xml @@ -24,6 +24,10 @@ android:id="@+id/folder_settings" android:title="@string/folder_settings_action" /> + Dump settings Empty Trash Expunge + Clear local messages Choose sort Reverse sort About diff --git a/src/com/fsck/k9/activity/FolderList.java b/src/com/fsck/k9/activity/FolderList.java index 5685f9050..16bcb36db 100644 --- a/src/com/fsck/k9/activity/FolderList.java +++ b/src/com/fsck/k9/activity/FolderList.java @@ -31,6 +31,7 @@ import com.fsck.k9.helper.power.TracingPowerManager.TracingWakeLock; import com.fsck.k9.mail.Flag; import com.fsck.k9.mail.Folder; import com.fsck.k9.mail.Message; +import com.fsck.k9.mail.store.LocalStore.LocalFolder; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.service.MailService; import java.util.ArrayList; @@ -538,6 +539,43 @@ public class FolderList extends K9ListActivity MessagingController.getInstance(getApplication()).expunge(account, folderName, null); } + + private void onClearFolder(Account account, String folderName) + { + // There has to be a cheaper way to get at the localFolder object than this + LocalFolder localFolder = null; + try + { + if (account == null || folderName == null || !account.isAvailable(FolderList.this)) + { + Log.i(K9.LOG_TAG, "not clear folder of unavailable account"); + return; + } + localFolder = account.getLocalStore().getFolder(folderName); + localFolder.open(Folder.OpenMode.READ_WRITE); + if (localFolder != null) + { + localFolder.clearAllMessages(); + } + } + catch (Exception e) + { + Log.e(K9.LOG_TAG, "Exception while clearing folder", e); + } + finally + { + if (localFolder != null) + { + localFolder.close(); + } + } + + } + + + + + private void sendMail(Account account) { MessagingController.getInstance(getApplication()).sendPendingMessages(account, mAdapter.mListener); @@ -675,6 +713,10 @@ public class FolderList extends K9ListActivity onExpunge(mAccount, folder.name); break; + + case R.id.clear_local_folder: + onClearFolder(mAccount,folder.name); + break; } return super.onContextItemSelected(item); diff --git a/src/com/fsck/k9/mail/store/LocalStore.java b/src/com/fsck/k9/mail/store/LocalStore.java index dfc8aa166..be97dfffd 100644 --- a/src/com/fsck/k9/mail/store/LocalStore.java +++ b/src/com/fsck/k9/mail/store/LocalStore.java @@ -3475,6 +3475,22 @@ public class LocalStore extends Store implements Serializable, LocalStoreMigrati } + + public void clearAllMessages() throws MessagingException + { + final String where = "folder_id = ?"; + final String[] params = new String[] + { + Long.toString(mFolderId) + }; + + + clearMessagesWhere(where, params); + setPushState(null); + setLastPush(0); + setLastChecked(0); + } + private void resetUnreadAndFlaggedCounts() { try