protected override bool TryParseArguments(ImmutableList <IMessageData> arguments) { if (arguments.Count != 3) { return(false); } string storeType = MessageData.GetString(arguments[0], Encoding.ASCII); _messageRange = arguments[1] as NumberRangeMessageData; _valueList = arguments[2] as ListMessageData; if (string.IsNullOrEmpty(storeType) || _messageRange == null || _valueList == null) { return(false); } Match argumentMatch = ArgumentPattern.Match(storeType); if (!argumentMatch.Success) { return(false); } switch (argumentMatch.Groups[1].Value) { case "": _operation = StoreOperation.Set; break; case "+": _operation = StoreOperation.Add; break; case "-": _operation = StoreOperation.Remove; break; default: return(false); } _command = argumentMatch.Groups[2].Value; if (!KnownCommands.Contains(_command, StringComparer.OrdinalIgnoreCase)) { return(false); } _silent = string.Equals(argumentMatch.Groups[3].Value, ".SILENT", StringComparison.OrdinalIgnoreCase); return(true); }
protected override bool TryParseArguments(ImmutableList <IMessageData> arguments) { switch (arguments.Count) { case 4: { IMessageData second = arguments[1]; if (!(second is ListMessageData secondList)) { return(false); } _flags = secondList; if (!MessageData.TryGetDateTime(arguments[2], Encoding.ASCII, out DateTime localDate)) { return(false); } _date = localDate; goto case 2; } case 3: { IMessageData second = arguments[1]; if (second is ListMessageData secondList) { _flags = secondList; } else { if (!MessageData.TryGetDateTime(second, Encoding.ASCII, out DateTime localDate)) { return(false); } _date = localDate; } goto case 2; } case 2: _mailbox = MessageData.GetString(arguments[0], Encoding.UTF8); _messageBody = arguments[arguments.Count - 1] as LiteralMessageData; return(true); default: return(false); } }
public override async Task ExecuteAsync(CancellationToken cancellationToken) { if (string.IsNullOrEmpty(_reference) && string.IsNullOrEmpty(_pattern)) { await _channel.SendMessageAsync( new ImapMessage( UntaggedTag, CommandName, new ListMessageData(new AtomMessageData(Tags.NoSelect)), new QuotedMessageData(Constants.HeirarchySeparator), new QuotedMessageData("")), cancellationToken); await EndOkAsync(_channel, cancellationToken); return; } IEnumerable <Mailbox> mailboxes = await _mailstore.ListMailboxesAsync(_channel.AuthenticatedUser, _reference + _pattern, cancellationToken); foreach (Mailbox mailbox in mailboxes) { ListMessageData list; if (mailbox.IsSelectable) { list = new ListMessageData(); } else { list = new ListMessageData(new AtomMessageData(Tags.NoSelect)); } #warning Presumably we should use the list... await _channel.SendMessageAsync( new ImapMessage( UntaggedTag, CommandName, new ListMessageData(new AtomMessageData(Tags.NoSelect)), new QuotedMessageData(Constants.HeirarchySeparator), MessageData.CreateData(mailbox.FullName)), cancellationToken); } await EndOkAsync(_channel, cancellationToken); }