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