Ejemplo n.º 1
0
        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();
            }
Ejemplo n.º 2
0
        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();
            }