mirror of
https://github.com/moparisthebest/k-9
synced 2025-02-12 05:00:20 -05:00
Delete now uses LocalFolder.moveMessages
Copy now copied body (but attachments might not work right). Move is now reliable (needed to open the destination folder), and leaves a placeHolder message behind in the source folder so that messages are not resynced.
This commit is contained in:
parent
6d5b158787
commit
45227e2708
@ -2214,6 +2214,10 @@ s * critical data as fast as possible, and then we'll fill in the de
|
|||||||
+ ", uid = " + origUid + ", destination folder = " + destFolder + ", isCopy = " + isCopy);
|
+ ", uid = " + origUid + ", destination folder = " + destFolder + ", isCopy = " + isCopy);
|
||||||
}
|
}
|
||||||
if (isCopy) {
|
if (isCopy) {
|
||||||
|
FetchProfile fp = new FetchProfile();
|
||||||
|
fp.add(FetchProfile.Item.ENVELOPE);
|
||||||
|
fp.add(FetchProfile.Item.BODY);
|
||||||
|
localSrcFolder.fetch(new Message[] { message }, fp, null);
|
||||||
localSrcFolder.copyMessages(new Message[] { message }, localDestFolder);
|
localSrcFolder.copyMessages(new Message[] { message }, localDestFolder);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -2255,6 +2259,7 @@ s * critical data as fast as possible, and then we'll fill in the de
|
|||||||
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
|
Store localStore = Store.getInstance(account.getLocalStoreUri(), mApplication);
|
||||||
Folder localFolder = localStore.getFolder(folder);
|
Folder localFolder = localStore.getFolder(folder);
|
||||||
Message lMessage = localFolder.getMessage(message.getUid());
|
Message lMessage = localFolder.getMessage(message.getUid());
|
||||||
|
String origUid = message.getUid();
|
||||||
if (lMessage != null)
|
if (lMessage != null)
|
||||||
{
|
{
|
||||||
if (folder.equals(account.getTrashFolderName()))
|
if (folder.equals(account.getTrashFolderName()))
|
||||||
@ -2276,20 +2281,11 @@ s * critical data as fast as possible, and then we'll fill in the de
|
|||||||
{
|
{
|
||||||
if (Config.LOGD)
|
if (Config.LOGD)
|
||||||
{
|
{
|
||||||
Log.d(Email.LOG_TAG, "Deleting message in normal folder, copying");
|
Log.d(Email.LOG_TAG, "Deleting message in normal folder, moving");
|
||||||
}
|
|
||||||
FetchProfile fp = new FetchProfile();
|
|
||||||
fp.add(FetchProfile.Item.ENVELOPE);
|
|
||||||
fp.add(FetchProfile.Item.BODY);
|
|
||||||
// TODO: Turn the fetch/copy/delete into an atomic move
|
|
||||||
localFolder.fetch(new Message[] { lMessage }, fp, null);
|
|
||||||
localFolder.copyMessages(new Message[] { lMessage }, localTrashFolder);
|
|
||||||
if (folder.equals(account.getOutboxFolderName())) {
|
|
||||||
lMessage.setFlag(Flag.X_DESTROYED, true);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
lMessage.setFlag(Flag.DELETED, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
localFolder.moveMessages(new Message[] { message }, localTrashFolder);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2323,14 +2319,14 @@ s * critical data as fast as possible, and then we'll fill in the de
|
|||||||
{
|
{
|
||||||
PendingCommand command = new PendingCommand();
|
PendingCommand command = new PendingCommand();
|
||||||
command.command = PENDING_COMMAND_SET_FLAG;
|
command.command = PENDING_COMMAND_SET_FLAG;
|
||||||
command.arguments = new String[] { folder, message.getUid(), Boolean.toString(true), Flag.DELETED.toString() };
|
command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.DELETED.toString() };
|
||||||
queuePendingCommand(account, command);
|
queuePendingCommand(account, command);
|
||||||
processPendingCommands(account);
|
processPendingCommands(account);
|
||||||
}
|
}
|
||||||
else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) {
|
else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) {
|
||||||
PendingCommand command = new PendingCommand();
|
PendingCommand command = new PendingCommand();
|
||||||
command.command = PENDING_COMMAND_MOVE_OR_COPY;
|
command.command = PENDING_COMMAND_MOVE_OR_COPY;
|
||||||
command.arguments = new String[] { folder, message.getUid(), account.getTrashFolderName(), "false" };
|
command.arguments = new String[] { folder, origUid, account.getTrashFolderName(), "false" };
|
||||||
queuePendingCommand(account, command);
|
queuePendingCommand(account, command);
|
||||||
processPendingCommands(account);
|
processPendingCommands(account);
|
||||||
}
|
}
|
||||||
@ -2338,7 +2334,7 @@ s * critical data as fast as possible, and then we'll fill in the de
|
|||||||
{
|
{
|
||||||
PendingCommand command = new PendingCommand();
|
PendingCommand command = new PendingCommand();
|
||||||
command.command = PENDING_COMMAND_SET_FLAG;
|
command.command = PENDING_COMMAND_SET_FLAG;
|
||||||
command.arguments = new String[] { folder, message.getUid(), Boolean.toString(true), Flag.SEEN.toString() };
|
command.arguments = new String[] { folder, origUid, Boolean.toString(true), Flag.SEEN.toString() };
|
||||||
queuePendingCommand(account, command);
|
queuePendingCommand(account, command);
|
||||||
processPendingCommands(account);
|
processPendingCommands(account);
|
||||||
}
|
}
|
||||||
|
@ -1002,28 +1002,27 @@ public class FolderMessageList extends ExpandableListActivity
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String destFolderName = folder.name;
|
// String destFolderName = folder.name;
|
||||||
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
|
// FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
|
||||||
|
//
|
||||||
if (destHolder == null) {
|
if (folder == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (holder.read == false && holder.folder.unreadMessageCount > 0)
|
if (holder.read == false )
|
||||||
{
|
{
|
||||||
|
if (holder.folder.unreadMessageCount > 0) {
|
||||||
holder.folder.unreadMessageCount--;
|
holder.folder.unreadMessageCount--;
|
||||||
destHolder.unreadMessageCount++;
|
}
|
||||||
|
folder.unreadMessageCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destHolder != null)
|
folder.needsRefresh = true;
|
||||||
{
|
|
||||||
destHolder.needsRefresh = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid);
|
mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid);
|
||||||
|
|
||||||
MessagingController.getInstance(getApplication()).moveMessage(mAccount,
|
MessagingController.getInstance(getApplication()).moveMessage(mAccount,
|
||||||
holder.message.getFolder().getName(), holder.message, destFolderName, null);
|
holder.message.getFolder().getName(), holder.message, folder.name, null);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1034,25 +1033,19 @@ public class FolderMessageList extends ExpandableListActivity
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String destFolderName = folder.name;
|
if (folder == null) {
|
||||||
FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
|
|
||||||
|
|
||||||
if (destHolder == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (holder.read == false && holder.folder.unreadMessageCount > 0)
|
if (holder.read == false)
|
||||||
{
|
{
|
||||||
destHolder.unreadMessageCount++;
|
folder.unreadMessageCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destHolder != null)
|
folder.needsRefresh = true;
|
||||||
{
|
|
||||||
destHolder.needsRefresh = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
MessagingController.getInstance(getApplication()).copyMessage(mAccount,
|
MessagingController.getInstance(getApplication()).copyMessage(mAccount,
|
||||||
holder.message.getFolder().getName(), holder.message, destFolderName, null);
|
holder.message.getFolder().getName(), holder.message, folder.name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onReply(MessageInfoHolder holder)
|
private void onReply(MessageInfoHolder holder)
|
||||||
|
@ -981,18 +981,26 @@ public class LocalStore extends Store implements Serializable {
|
|||||||
@Override
|
@Override
|
||||||
public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException {
|
public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException {
|
||||||
if (!(destFolder instanceof LocalFolder)) {
|
if (!(destFolder instanceof LocalFolder)) {
|
||||||
throw new MessagingException("copyMessages called with incorrect Folder");
|
throw new MessagingException("copyMessages called with non-LocalFolder");
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalFolder lDestFolder = (LocalFolder)destFolder;
|
LocalFolder lDestFolder = (LocalFolder)destFolder;
|
||||||
|
lDestFolder.open(OpenMode.READ_WRITE);
|
||||||
for (Message message : msgs)
|
for (Message message : msgs)
|
||||||
{
|
{
|
||||||
LocalMessage lMessage = (LocalMessage)message;
|
LocalMessage lMessage = (LocalMessage)message;
|
||||||
|
|
||||||
if (!message.isSet(Flag.SEEN)) {
|
if (!message.isSet(Flag.SEEN)) {
|
||||||
|
if (getUnreadMessageCount() > 0) {
|
||||||
setUnreadMessageCount(getUnreadMessageCount() - 1);
|
setUnreadMessageCount(getUnreadMessageCount() - 1);
|
||||||
lDestFolder.setUnreadMessageCount(destFolder.getUnreadMessageCount() + 1);
|
|
||||||
}
|
}
|
||||||
|
lDestFolder.setUnreadMessageCount(lDestFolder.getUnreadMessageCount() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
String oldUID = message.getUid();
|
||||||
|
|
||||||
|
Log.d(Email.LOG_TAG, "Updating folder_id to " + lDestFolder.getId() + " for message with UID "
|
||||||
|
+ message.getUid() + ", id " + lMessage.getId() + " currently in folder " + getName());
|
||||||
|
|
||||||
message.setUid("Local" + UUID.randomUUID().toString());
|
message.setUid("Local" + UUID.randomUUID().toString());
|
||||||
|
|
||||||
@ -1000,6 +1008,10 @@ public class LocalStore extends Store implements Serializable {
|
|||||||
lDestFolder.getId(),
|
lDestFolder.getId(),
|
||||||
message.getUid(),
|
message.getUid(),
|
||||||
lMessage.getId() });
|
lMessage.getId() });
|
||||||
|
|
||||||
|
LocalMessage placeHolder = new LocalMessage(oldUID, this);
|
||||||
|
placeHolder.setFlagInternal(Flag.DELETED, true);
|
||||||
|
appendMessages(new Message[] { placeHolder });
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user