public ComposeBubbleGroup(NewBubble newBubble, Contact.ID[] ids, string title) : base(newBubble) { Title = string.IsNullOrWhiteSpace(title) ? null : title; Photo = null; Ids = ids; }
internal static UnifiedBubbleGroup CreateUnifiedInternal(List <BubbleGroup> groups, BubbleGroup primaryGroup, string id = null) { var service = ServiceManager.GetUnified(); if (service == null) { return(null); } var newBubble = new NewBubble(Time.GetNowUnixTimestamp(), Bubble.BubbleDirection.Incoming, Guid.NewGuid() + "@unified", null, false, service); var unified = new UnifiedBubbleGroup(groups, primaryGroup, newBubble, id); if (id == null) { var unread = groups.FirstOrDefault(BubbleGroupSettingsManager.GetUnread) != null; BubbleGroupSettingsManager.SetUnread(unified, unread); } foreach (var group in groups) { @group.RegisterUnified(unified); } var associatedPartiallyLoadedGroups = groups.Where(x => x.PartiallyLoaded).ToList(); if (associatedPartiallyLoadedGroups.Any()) { VisualBubble latest = null; foreach (var innerGroup in unified.Groups) { var current = innerGroup.Bubbles.Last(); if (latest == null || current.Time > latest.Time) { latest = current; } } if (latest != null) { unified.Bubbles.Clear(); unified.Bubbles.Add(latest); } return(unified); } Populate(unified); return(unified); }
public static BubbleGroup AddNew(NewBubble newBubble, bool updateUi = false) { return(AddNewInternal((VisualBubble)newBubble, updateUi)); }
public Task FetchChannelBubbleGroup(Contact.ID[] contactIds, Action <BubbleGroup> result) { return(Task.Factory.StartNew(() => { // Sanity check, we are currently only processing collections passed in with a cardinality of 1 if (contactIds.Length != 1) { result(null); return; } foreach (var chat in _dialogs.GetAllChats()) { var name = TelegramUtils.GetChatTitle(chat); var upgraded = TelegramUtils.GetChatUpgraded(chat); if (upgraded) { continue; } var left = TelegramUtils.GetChatLeft(chat); if (left) { continue; } var kicked = TelegramUtils.GetChatKicked(chat); if (kicked) { continue; } var isChannel = chat is Channel; if (isChannel) { var channel = chat as Channel; if (channel.Broadcast == null) { continue; } } else { continue; } var channelAddress = TelegramUtils.GetChatId(chat); if (BubbleGroupComparer(contactIds[0].Id, channelAddress)) { var newBubble = new NewBubble( time: Time.GetNowUnixTimestamp(), direction: Bubble.BubbleDirection.Outgoing, address: channelAddress, participantAddress: null, party: true, service: this); newBubble.ExtendedParty = true; var newGroup = BubbleGroupFactory.AddNewIfNotExist(newBubble); if (newGroup == null) { newGroup = BubbleGroupManager.FindWithAddress(this, channelAddress); } result(newGroup); return; } } // OK, we didn't get a channel locally, we must be trying to join a public channel using (var client = new FullClientDisposable(this)) { // A NewChannel flow will stuff away a Contact in the ContactId.Tag field var telegramPartyContact = contactIds[0].Tag as TelegramPartyContact; if (telegramPartyContact == null) { result(null); return; } // Go for the public channel join var response = TelegramUtils.RunSynchronously(client.Client.Methods.ChannelsJoinChannelAsync(new ChannelsJoinChannelArgs { Channel = new InputChannel { ChannelId = uint.Parse(contactIds[0].Id), AccessHash = telegramPartyContact.AccessHash } })); // Process the result and add in the new public channel to our local set of groups var updates = response as Updates; if (updates != null) { SendToResponseDispatcher(updates, client.Client); _dialogs.AddChats(updates.Chats); var chat = TelegramUtils.GetChatFromUpdate(updates); var channelAddress = TelegramUtils.GetChatId(chat); var newBubble = new NewBubble( time: Time.GetNowUnixTimestamp(), direction: Bubble.BubbleDirection.Outgoing, address: channelAddress, participantAddress: null, party: true, service: this); newBubble.ExtendedParty = true; var newGroup = BubbleGroupFactory.AddNew(newBubble); result(newGroup); } else { result(null); } } })); }