示例#1
0
        private void ProcessStickers()
        {
            _stickers = true;
            var stickers = _stickersService.GetStickerSets(StickerType.Image);

            Execute.BeginOnUIThread(() =>
            {
                SavedStickers.ReplaceWith(stickers);

                if (_frequentlyUsed.Documents.Count > 0)
                {
                    SavedStickers.Insert(0, _frequentlyUsed);
                }
            });
        }
        private void ProcessStickers()
        {
            _stickers = true;

            var stickers = _stickersService.GetStickerSets(StickerType.Image);

            Execute.BeginOnUIThread(() =>
            {
                SavedStickers.ReplaceWith(stickers);

                //if (_groupSet.Documents != null && _groupSet.Documents.Count > 0)
                //{
                //    SavedStickers.Add(_groupSet);
                //}
                //else
                //{
                //    SavedStickers.Remove(_groupSet);
                //}

                //if (_recentSet.Documents != null && _recentSet.Documents.Count > 0)
                //{
                //    SavedStickers.Add(_recentSet);
                //}
                //else
                //{
                //    SavedStickers.Remove(_recentSet);
                //}

                //if (_favedSet.Documents != null && _favedSet.Documents.Count > 0)
                //{
                //    SavedStickers.Add(_favedSet);
                //}
                //else
                //{
                //    SavedStickers.Remove(_favedSet);
                //}
            });
        }
示例#3
0
        //public void SyncGroup(TLChannelFull channelFull)
        //{
        //    SavedStickers.Remove(_groupSet);

        //    var update = true;

        //    var appData = ApplicationData.Current.LocalSettings.CreateContainer("Channels", ApplicationDataCreateDisposition.Always);
        //    if (appData.Values.TryGetValue("Stickers" + channelFull.Id, out object stickersObj))
        //    {
        //        var stickersId = (long)stickersObj;
        //        if (stickersId == channelFull.StickerSet?.Id)
        //        {
        //            update = false;
        //        }
        //    }

        //    if (channelFull.HasStickerSet && update)
        //    {
        //        _groupSet.With = CacheService.GetChat(channelFull.Id) as TLChannel;
        //        _groupSet.Full = channelFull;

        //        Execute.BeginOnThreadPool(() =>
        //        {
        //            var result = _stickersService.GetGroupStickerSetById(channelFull.StickerSet);
        //            if (result != null)
        //            {
        //                BeginOnUIThread(() =>
        //                {
        //                    _groupSet.Documents = new TLVector<TLDocumentBase>(result.Documents);

        //                    if (_groupSet.Documents != null && _groupSet.Documents.Count > 0)
        //                    {
        //                        SavedStickers.Add(_groupSet);
        //                    }
        //                    else
        //                    {
        //                        SavedStickers.Remove(_groupSet);
        //                    }
        //                });
        //            }
        //        });
        //    }
        //}

        //public void HideGroup(TLChannelFull channelFull)
        //{
        //    var appData = ApplicationData.Current.LocalSettings.CreateContainer("Channels", ApplicationDataCreateDisposition.Always);
        //    appData.Values["Stickers" + channelFull.Id] = channelFull.StickerSet?.Id ?? 0;

        //    SavedStickers.Remove(_groupSet);
        //}

        public void SyncStickers()
        {
            if (_stickers)
            {
                return;
            }

            _stickers = true;

            ProtoService.Send(new GetFavoriteStickers(), result1 =>
            {
                ProtoService.Send(new GetRecentStickers(), result2 =>
                {
                    ProtoService.Send(new GetInstalledStickerSets(false), result3 =>
                    {
                        if (result1 is Stickers favorite && result2 is Stickers recent && result3 is StickerSets sets)
                        {
                            _favoriteSet.Update(favorite);
                            _recentSet.Update(recent);

                            for (int i = 0; i < _favoriteSet.Stickers.Count; i++)
                            {
                                var favSticker = _favoriteSet.Stickers[i];
                                for (int j = 0; j < _recentSet.Stickers.Count; j++)
                                {
                                    var recSticker = _recentSet.Stickers[j];
                                    if (recSticker.StickerValue.Id == favSticker.StickerValue.Id)
                                    {
                                        _recentSet.Stickers.Remove(recSticker);
                                        break;
                                    }
                                }
                            }


                            var stickers = new List <StickerSetViewModel>();
                            if (favorite.StickersValue.Count > 0)
                            {
                                stickers.Add(_favoriteSet);
                            }
                            if (recent.StickersValue.Count > 0)
                            {
                                stickers.Add(_recentSet);
                            }

                            if (sets.Sets.Count > 0)
                            {
                                ProtoService.Send(new GetStickerSet(sets.Sets[0].Id), result4 =>
                                {
                                    if (result4 is StickerSet set)
                                    {
                                        stickers.Add(new StickerSetViewModel(sets.Sets[0], set));
                                        BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Skip(1).Select(x => new StickerSetViewModel(x)))));
                                    }
                                    else
                                    {
                                        BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Select(x => new StickerSetViewModel(x)))));
                                    }
                                });
                            }
                            else
                            {
                                BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Select(x => new StickerSetViewModel(x)))));
                            }
                        }
                    });
                });
            });
        //public void HideGroup(TLChannelFull channelFull)
        //{
        //    var appData = ApplicationData.Current.LocalSettings.CreateContainer("Channels", ApplicationDataCreateDisposition.Always);
        //    appData.Values["Stickers" + channelFull.Id] = channelFull.StickerSet?.Id ?? 0;

        //    SavedStickers.Remove(_groupSet);
        //}

        public void SyncStickers(Chat chat)
        {
            if (_updated)
            {
                return;
            }

            _updated = true;

            ProtoService.Send(new GetFavoriteStickers(), result1 =>
            {
                ProtoService.Send(new GetRecentStickers(), result2 =>
                {
                    ProtoService.Send(new GetInstalledStickerSets(false), result3 =>
                    {
                        if (result1 is Stickers favorite && result2 is Stickers recent && result3 is StickerSets sets)
                        {
                            for (int i = 0; i < favorite.StickersValue.Count; i++)
                            {
                                var favSticker = favorite.StickersValue[i];
                                for (int j = 0; j < recent.StickersValue.Count; j++)
                                {
                                    var recSticker = recent.StickersValue[j];
                                    if (recSticker.StickerValue.Id == favSticker.StickerValue.Id)
                                    {
                                        recent.StickersValue.Remove(recSticker);
                                        break;
                                    }
                                }
                            }

                            for (int i = 20; i < recent.StickersValue.Count; i++)
                            {
                                recent.StickersValue.RemoveAt(20);
                                i--;
                            }

                            _favoriteSet.Update(favorite);
                            _recentSet.Update(recent);

                            var stickers = new List <StickerSetViewModel>();
                            if (_favoriteSet.Stickers.Count > 0)
                            {
                                stickers.Add(_favoriteSet);
                            }
                            if (_recentSet.Stickers.Count > 0)
                            {
                                stickers.Add(_recentSet);
                            }
                            if (_groupSet.Stickers.Count > 0 && _groupSet.ChatId == chat?.Id)
                            {
                                stickers.Add(_groupSet);
                            }

                            if (sets.Sets.Count > 0)
                            {
                                ProtoService.Send(new GetStickerSet(sets.Sets[0].Id), result4 =>
                                {
                                    if (result4 is StickerSet set)
                                    {
                                        stickers.Add(new StickerSetViewModel(ProtoService, Aggregator, sets.Sets[0], set));
                                        BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Skip(1).Select(x => new StickerSetViewModel(ProtoService, Aggregator, x)))));
                                    }
                                    else
                                    {
                                        BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Select(x => new StickerSetViewModel(ProtoService, Aggregator, x)))));
                                    }
                                });
                            }
                            else
                            {
                                BeginOnUIThread(() => SavedStickers.ReplaceWith(stickers.Union(sets.Sets.Select(x => new StickerSetViewModel(ProtoService, Aggregator, x)))));
                            }
                        }
                    });
                });
            });