private bool ApplyStore(int[] messageIds, StoreFlagData flagData) { var storeResult = Context .EntityProvider .MailProvider .StoreFlags(messageIds, flagData.Flags, flagData.Operation); if (!storeResult) { return(false); } foreach (var messageId in messageIds) { if (!flagData.IsSilent) { var cmd = new ImapCommand($"xx UID FETCH {messageId} (FLAGS)"); var uidResult = new ImapUidStateController().Run(Context, cmd); if (!uidResult) { return(false); } } } return(true); }
private StoreFlagData ParseStoreFlagData(string args) { var match = Regex.Match(args, @"(?<op>[+-]){0,1}FLAGS(?<s>\.SILENT){0,1} \((?<f>[^)]*)\)"); if (!match.Success || !match.Groups["f"].Success) { return(null); } var operation = StoreFlagOperation.None; if (!match.Groups["op"].Success) { operation = StoreFlagOperation.Replace; } else { switch (match.Groups["op"].Value) { case "+": operation = StoreFlagOperation.Add; break; case "-": operation = StoreFlagOperation.Delete; break; } } var data = new StoreFlagData { Flags = match.Groups["f"].Value.Split(' '), IsSilent = match.Groups["s"].Success, Operation = operation }; //DEBUG var logger = LoggerFactory.GetLogger(); logger.Print($"flags: {data.Flags.Aggregate((a, b) => (a + " " + b))}"); logger.Print($"silent: {data.IsSilent}"); logger.Print($"op: {data.Operation}"); return(data); }