MCPcopy Create free account
hub / github.com/M66B/FairEmail / onMove

Method onMove

app/src/main/java/eu/faircode/email/Core.java:1453–1736  ·  view source on GitHub ↗
(Context context, JSONArray jargs, boolean copy, EntityAccount account, EntityFolder folder, List<EntityMessage> messages, IMAPStore istore, IMAPFolder ifolder, State state)

Source from the content-addressed store, hash-verified

1451 }
1452
1453 private static void onMove(Context context, JSONArray jargs, boolean copy, EntityAccount account, EntityFolder folder, List<EntityMessage> messages, IMAPStore istore, IMAPFolder ifolder, State state) throws JSONException, MessagingException, IOException {
1454 // Move message
1455 DB db = DB.getInstance(context);
1456
1457 // Get arguments
1458 long id = jargs.getLong(0);
1459 boolean seen = jargs.optBoolean(1);
1460 boolean unflag = jargs.optBoolean(3);
1461 boolean delete = jargs.optBoolean(4);
1462 boolean create = jargs.optBoolean(5);
1463
1464 Flags flags = ifolder.getPermanentFlags();
1465
1466 // Get target folder
1467 EntityFolder target = db.folder().getFolder(id);
1468 if (target == null)
1469 throw new FolderNotFoundException();
1470 if (folder.id.equals(target.id))
1471 throw new IllegalArgumentException("self type=" + folder.type + "/" + target.type);
1472 if (!target.selectable)
1473 throw new IllegalArgumentException("not selectable type=" + target.type);
1474
1475 if (create) {
1476 Folder icreate = istore.getFolder(target.name);
1477 if (!icreate.exists()) {
1478 ((IMAPFolder) ifolder).doCommand(new IMAPFolder.ProtocolCommand() {
1479 @Override
1480 public Object doCommand(IMAPProtocol protocol) throws ProtocolException {
1481 protocol.create(target.name);
1482 return null;
1483 }
1484 });
1485 ifolder.setSubscribed(true);
1486 db.folder().resetFolderTbc(target.id);
1487 }
1488 }
1489
1490 // De-classify
1491 if (!copy &&
1492 !EntityFolder.TRASH.equals(target.type) &&
1493 !EntityFolder.ARCHIVE.equals(target.type))
1494 for (EntityMessage message : messages)
1495 MessageClassifier.classify(message, folder, false, context);
1496
1497 IMAPFolder itarget = (IMAPFolder) istore.getFolder(target.name);
1498
1499 // Get source messages
1500 Map<Message, EntityMessage> map = new HashMap<>();
1501 Map<EntityMessage, String> msgids = new HashMap<>();
1502 for (EntityMessage message : messages)
1503 try {
1504 if (message.uid == null)
1505 throw new IllegalArgumentException("move without uid");
1506 Message imessage = ifolder.getMessageByUID(message.uid);
1507 if (imessage == null)
1508 throw new MessageRemovedException("move without message");
1509 if (imessage.isExpunged())
1510 throw new MessageRemovedException("move of expunged message");

Callers 1

processOperationsMethod · 0.95

Calls 15

getInstanceMethod · 0.95
folderMethod · 0.95
existsMethod · 0.95
classifyMethod · 0.95
isExpungedMethod · 0.95
eMethod · 0.95
messageMethod · 0.95
hasCapabilityMethod · 0.95
iMethod · 0.95
getFileMethod · 0.95
getSessionPropertiesMethod · 0.95
getInstanceMethod · 0.95

Tested by

no test coverage detected