public IObservable <BaseMessage> Load(TD.Chat chat, long fromMessageId, int limit) { return(Observable.Create <BaseMessage>(async observer => { var chatsToLoad = new HashSet <long>(); var usersToLoad = new HashSet <int>(); while (true) { var messages = await _agent.ExecuteAsync(new TD.GetChatHistory { ChatId = chat.Id, FromMessageId = fromMessageId, Offset = 0, Limit = limit, OnlyLocal = false }); foreach (var m in messages.Messages_) { MessageAuthor messageAuthor; if (chat.Type is TD.ChatType.ChatTypeSupergroup cts && cts.IsChannel) { if (!_channelAuthorLoader.Retrieve(chat.Id, out var channelAuthor)) { chatsToLoad.Add(chat.Id); } messageAuthor = channelAuthor; }
public IObservable <TD.Message> SendText(TD.Chat chat, TD.InputMessageContent.InputMessageText messageText) { return(Observable.FromAsync(ct => _agent.ExecuteAsync(new TD.SendMessage { ChatId = chat.Id, InputMessageContent = messageText }))); }
public IObservable <BaseMessage> Appends(TD.Chat chat) { return(Observable.FromEventPattern <TD.Structure>( h => _agent.Received += h, h => _agent.Received -= h) .Select(s => s.EventArgs as TD.Update.UpdateNewMessage) .Where(u => u != null && u.Message.ChatId == chat.Id) .Select(MapMessage)); }
public bool IsAvatarReady(TD.Chat chat, Size size) { var localFilePath = chat.Photo?.Small?.Local?.Path; if (!File.Exists(localFilePath)) { return(false); } var avatarFile = GetAvatarFilename(size, Path.GetFileNameWithoutExtension(localFilePath)); return(File.Exists(avatarFile)); }
public bool Retrieve(TD.Chat chat, out Conversation conversation) { var result = Retrieve(chat.Id, out conversation); switch (chat.Type) { case TD.ChatType.ChatTypeBasicGroup _: conversation.Kind = ExplorerEntityKind.Group; break; case TD.ChatType.ChatTypeSupergroup cts: conversation.Kind = cts.IsChannel ? ExplorerEntityKind.Channel : ExplorerEntityKind.Group; break; } conversation.Title = chat.Title; conversation.Chat = chat; return(result); }
public bool Retrieve(TD.Chat chat, TD.User user, out Conversation conversation) { var result = Retrieve(chat.Id, out conversation); switch (user.Type) { case TD.UserType.UserTypeRegular _: conversation.Kind = ExplorerEntityKind.People; break; case TD.UserType.UserTypeBot _: conversation.Kind = ExplorerEntityKind.Bot; break; } conversation.Title = chat.Title; conversation.Chat = chat; return(result); }
public ChatInteractor( TD.Chat chat, MessageLoader messageLoader, NewMessageProvider newMessageProvider ) { _chat = chat; _messageLoader = messageLoader; _newMessageProvider = newMessageProvider; _actionSubject = new Subject <Action>(); _appendSubject = new Subject <ChatEntity>(); _prependSubject = new Subject <ChatEntity>(); _newMessageSubscription = _newMessageProvider .Appends(_chat) .Subscribe(_appendSubject); _actionsSubscription = _messageLoader .Actions() .Subscribe(_actionSubject); }
public async Task <IBitmap> LoadForChatAsync(TD.Chat chat, Size size, bool forceFallback = false) { string avatarFile; if (forceFallback) { avatarFile = await CreateFallbackAvatar(chat.Id, size); } else { var localFile = await _fileLoader.LoadFileAsync(chat.Photo?.Small); if (localFile?.Path != null) { avatarFile = await CreateAvatar(localFile.Path, size); } else { avatarFile = await CreateFallbackAvatar(chat.Id, size); } } return(await CreateBitmap(avatarFile)); }
public Topic(TD.Chat chat) { Chat = chat; }
public IObservable <BaseMessage> LoadRecent(TD.Chat chat) { return(Load(chat, 0, 50)); }