Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45227e27 authored by Daniel Applebaum's avatar Daniel Applebaum
Browse files

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.

parent 6d5b1587
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -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);
          }
          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);
          }
          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);
            Folder localFolder = localStore.getFolder(folder);
            Message lMessage = localFolder.getMessage(message.getUid());
            String origUid = message.getUid();
            if (lMessage != null)
            {
              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)
                  {
                    Log.d(Email.LOG_TAG, "Deleting message in normal folder, copying");
                  }
                  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);
                    Log.d(Email.LOG_TAG, "Deleting message in normal folder, moving");
                  }
                  
                  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();
              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);
              processPendingCommands(account);
            }
            else if (account.getDeletePolicy() == Account.DELETE_POLICY_ON_DELETE) {
                PendingCommand command = new PendingCommand();
                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);
                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();
              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);
              processPendingCommands(account);
            }
+18 −25
Original line number Diff line number Diff line
@@ -1002,28 +1002,27 @@ public class FolderMessageList extends ExpandableListActivity
     {
	     return;
     }
	   String destFolderName = folder.name;
	   FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
	   
	   if (destHolder == null) {
//	   String destFolderName = folder.name;
//	   FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
//	   
	   if (folder == null) {
	     return;
	   }
	   
	   if (holder.read == false && holder.folder.unreadMessageCount > 0)
	   if (holder.read == false )
	    {
	      if (holder.folder.unreadMessageCount > 0) {
	        holder.folder.unreadMessageCount--;
	      destHolder.unreadMessageCount++;
	      }
	    
	    if (destHolder != null)
	    {
	      destHolder.needsRefresh = true;
	      folder.unreadMessageCount++;
	    }
	    
	    folder.needsRefresh = true;
	    
	    mAdapter.removeMessage(holder.message.getFolder().getName(), holder.uid);
	    
	    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;
     }
     String destFolderName = folder.name;
     FolderInfoHolder destHolder = mAdapter.getFolder(destFolderName);
     
     if (destHolder == null) {
     if (folder == null) {
       return;
     }
     
     if (holder.read == false && holder.folder.unreadMessageCount > 0)
     if (holder.read == false)
      {
        destHolder.unreadMessageCount++;
        folder.unreadMessageCount++;
      }

      if (destHolder != null)
      {
        destHolder.needsRefresh = true;
      }
      folder.needsRefresh = true;
     
      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)
+17 −5
Original line number Diff line number Diff line
@@ -981,18 +981,26 @@ public class LocalStore extends Store implements Serializable {
        @Override
        public void moveMessages(Message[] msgs, Folder destFolder) throws MessagingException {
            if (!(destFolder instanceof LocalFolder)) {
                throw new MessagingException("copyMessages called with incorrect Folder");
              throw new MessagingException("copyMessages called with non-LocalFolder");
            }

            LocalFolder lDestFolder = (LocalFolder)destFolder;
            lDestFolder.open(OpenMode.READ_WRITE);
            for (Message message : msgs)
            {
              LocalMessage lMessage = (LocalMessage)message;
                   
              if (!message.isSet(Flag.SEEN)) {
                if (getUnreadMessageCount() > 0) {
                  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());          
              
@@ -1000,6 +1008,10 @@ public class LocalStore extends Store implements Serializable {
                  lDestFolder.getId(), 
                  message.getUid(),
                  lMessage.getId() });
              
              LocalMessage placeHolder = new LocalMessage(oldUID, this);
              placeHolder.setFlagInternal(Flag.DELETED, true);
              appendMessages(new Message[] { placeHolder });
            }
            
        }