private void SendExecute() { var dialogs = SelectedItems.ToList(); if (dialogs.Count == 0) { return; } var date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now); if (_messages != null) { foreach (var dialog in dialogs) { TLInputPeerBase toPeer = dialog.ToInputPeer(); TLInputPeerBase fromPeer = null; TLMessage comment = null; var msgs = new TLVector <TLMessage>(); var msgIds = new TLVector <int>(); var grouped = false; foreach (var fwdMessage in _messages) { var clone = fwdMessage.Clone(); clone.Id = 0; clone.HasEditDate = false; clone.EditDate = null; clone.HasReplyToMsgId = false; clone.ReplyToMsgId = null; clone.HasReplyMarkup = false; clone.ReplyMarkup = null; clone.Date = date; clone.ToId = dialog.ToPeer(); clone.RandomId = TLLong.Random(); clone.IsOut = true; clone.IsPost = false; clone.FromId = SettingsHelper.UserId; clone.IsMediaUnread = dialog.ToPeer() is TLPeerChannel ? true : false; clone.IsUnread = true; clone.State = TLMessageState.Sending; clone.HasGroupedId = false; clone.GroupedId = null; if (clone.Media == null) { clone.HasMedia = true; clone.Media = new TLMessageMediaEmpty(); } if (fwdMessage.HasGroupedId) { grouped = true; } if (fwdMessage.Parent is TLChannel channel) { if (channel.IsBroadcast) { if (!channel.IsSignatures) { clone.HasFromId = false; clone.FromId = null; } // TODO //if (IsSilent) //{ // clone.IsSilent = true; //} clone.HasViews = true; clone.Views = 1; } } if (clone.Media is TLMessageMediaGame gameMedia) { clone.HasEntities = false; clone.Entities = null; clone.Message = null; } else if (clone.Media is TLMessageMediaGeoLive geoLiveMedia) { clone.Media = new TLMessageMediaGeo { Geo = geoLiveMedia.Geo }; } if (fromPeer == null) { fromPeer = fwdMessage.Parent.ToInputPeer(); } if (clone.FwdFrom == null && !clone.IsGame()) { if (fwdMessage.ToId is TLPeerChannel) { var fwdChannel = CacheService.GetChat(fwdMessage.ToId.Id) as TLChannel; if (fwdChannel != null && fwdChannel.IsMegaGroup) { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = true, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; } else { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = fwdMessage.HasFromId, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; if (fwdChannel.IsBroadcast) { clone.FwdFrom.HasChannelId = clone.FwdFrom.HasChannelPost = true; clone.FwdFrom.ChannelId = fwdChannel.Id; clone.FwdFrom.ChannelPost = fwdMessage.Id; clone.FwdFrom.HasPostAuthor = fwdMessage.HasPostAuthor; clone.FwdFrom.PostAuthor = fwdMessage.PostAuthor; } } } else if (fwdMessage.FromId == SettingsHelper.UserId && fwdMessage.ToId is TLPeerUser peerUser && peerUser.UserId == SettingsHelper.UserId) { } else { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = true, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; } if (clone.FwdFrom != null && ((toPeer is TLInputPeerUser user && user.UserId == SettingsHelper.UserId) || toPeer is TLInputPeerSelf)) { clone.FwdFrom.SavedFromMsgId = fwdMessage.Id; clone.FwdFrom.SavedFromPeer = fwdMessage.Parent?.ToPeer(); clone.FwdFrom.HasSavedFromMsgId = true; clone.FwdFrom.HasSavedFromPeer = clone.FwdFrom.SavedFromPeer != null; } } msgs.Add(clone); msgIds.Add(fwdMessage.Id); } if (!string.IsNullOrEmpty(_comment)) { comment = TLUtils.GetMessage(SettingsHelper.UserId, toPeer.ToPeer(), TLMessageState.Sending, true, true, date, _comment, new TLMessageMediaEmpty(), TLLong.Random(), null); msgs.Insert(0, comment); } CacheService.SyncSendingMessages(msgs, null, async(m) => { if (comment != null) { msgs.Remove(comment); var result = await ProtoService.SendMessageAsync(comment, null); if (result.IsSucceeded) { } else { } } var response = await ProtoService.ForwardMessagesAsync(toPeer, fromPeer, msgIds, msgs, IsWithMyScore, grouped); if (response.IsSucceeded) { foreach (var i in m) { Aggregator.Publish(i); } } else { } }); } NavigationService.GoBack(); }
private void SendExecute() { var dialogs = SelectedItems.ToList(); if (dialogs.Count == 0) { return; } var date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now); if (_message != null) { foreach (var dialog in dialogs) { TLInputPeerBase toPeer = dialog.ToInputPeer(); TLInputPeerBase fromPeer = null; var fwdMessage = _message; var msgs = new TLVector <TLMessage>(); var msgIds = new TLVector <int>(); var clone = fwdMessage.Clone(); clone.Id = 0; clone.HasReplyToMsgId = false; clone.ReplyToMsgId = null; clone.HasReplyMarkup = false; clone.ReplyMarkup = null; clone.Date = date; clone.ToId = dialog.Peer; clone.RandomId = TLLong.Random(); clone.IsOut = true; clone.IsPost = false; clone.FromId = SettingsHelper.UserId; clone.IsMediaUnread = dialog.Peer is TLPeerChannel ? true : false; clone.IsUnread = true; clone.State = TLMessageState.Sending; if (clone.Media == null) { clone.HasMedia = true; clone.Media = new TLMessageMediaEmpty(); } if (fwdMessage.Parent is TLChannel channel) { if (channel.IsBroadcast) { if (!channel.IsSignatures) { clone.HasFromId = false; clone.FromId = null; } // TODO //if (IsSilent) //{ // clone.IsSilent = true; //} clone.HasViews = true; clone.Views = 1; } } if (clone.Media is TLMessageMediaGame gameMedia) { clone.HasEntities = false; clone.Entities = null; clone.Message = null; } if (fromPeer == null) { fromPeer = fwdMessage.Parent.ToInputPeer(); } if (clone.FwdFrom == null && !clone.IsGame()) { if (fwdMessage.ToId is TLPeerChannel) { var fwdChannel = CacheService.GetChat(fwdMessage.ToId.Id) as TLChannel; if (fwdChannel != null && fwdChannel.IsMegaGroup) { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = true, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; } else { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = fwdMessage.HasFromId, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; if (fwdChannel.IsBroadcast) { clone.FwdFrom.HasChannelId = clone.FwdFrom.HasChannelPost = true; clone.FwdFrom.ChannelId = fwdChannel.Id; clone.FwdFrom.ChannelPost = fwdMessage.Id; } } } else if (fwdMessage.FromId == SettingsHelper.UserId && fwdMessage.ToId is TLPeerUser peerUser && peerUser.UserId == SettingsHelper.UserId) { } else { clone.HasFwdFrom = true; clone.FwdFrom = new TLMessageFwdHeader { HasFromId = true, FromId = fwdMessage.FromId, Date = fwdMessage.Date }; } } msgs.Add(clone); msgIds.Add(fwdMessage.Id); CacheService.SyncSendingMessage(clone, null, async(m) => { var response = await ProtoService.ForwardMessagesAsync(toPeer, fromPeer, msgIds, msgs, IsWithMyScore); if (response.IsSucceeded) { Aggregator.Publish(m); } }); } NavigationService.GoBack(); }