public void DeleteMessages()
        {
            if (Items == null)
            {
                return;
            }

            var messages = Items.Where(x => ((TLMessageBase)x).IsSelected).Cast <TLMessageBase>().ToList();

            if (messages.Count == 0)
            {
                return;
            }

            var randomItems = messages.Where(x => (x.Id == null || x.Id.Value == 0) && x.RandomId != null).ToList();
            var items       = messages.Where(x => x.Id != null && x.Id.Value != 0).ToList();

            if (randomItems.Count > 0 || items.Count > 0)
            {
                IsSelectionEnabled = false;
            }

            var owner = Peer as TLObject;

            if (Peer is TLBroadcastChat)
            {
                DeleteMessagesInternal(owner, null, randomItems);
                DeleteMessagesInternal(owner, null, items);
                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, null, randomItems, items, (result1, result2) => DeleteMessagesInternal(owner, result1, result2), (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
        }
Esempio n. 2
0
        public void DeleteDialog(TLDialogBase dialogBase)
        {
            var dialog = dialogBase as TLDialog;

            if (dialog == null)
            {
                return;
            }

            var message = dialog.TopMessage as TLMessageCommon;

            if (message == null)
            {
                return;
            }

            var messages = new List <TLMessageBase> {
                message
            };

            var owner = message.Out.Value ? CacheService.GetUser(message.ToId.Id) : message.From;

            if ((message.Id == null || message.Id.Value == 0) && message.RandomIndex != 0)
            {
                DeleteMessagesInternal(owner, null, messages);
                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, false, null, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
        }
        public void DeleteMessage(TLMessage message)
        {
            if (message == null)
            {
                return;
            }

            var messages = new List <TLMessageBase> {
                message
            };

            var owner = Peer as TLObject;

            if (Peer is TLBroadcastChat)
            {
                DeleteMessagesInternal(owner, null, messages);
                return;
            }

            if ((message.Id == null || message.Id.Value == 0) && message.RandomIndex != 0)
            {
                DeleteMessagesInternal(owner, null, messages);
                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
        }
Esempio n. 4
0
        public void ForwardMessage(TLMessageBase message)
        {
            if (message == null)
            {
                return;
            }

            DialogDetailsViewModel.ForwardMessagesCommon(new List <TLMessageBase> {
                message
            }, StateService, NavigationService);
        }
Esempio n. 5
0
        public void SaveMedia(TLMessage message)
        {
            if (message == null)
            {
                return;
            }

#if WP81
            DialogDetailsViewModel.SaveMediaCommon(message);
#endif
        }
        public void Forward()
        {
            if (CurrentItem == null)
            {
                return;
            }

            DialogDetailsViewModel.ForwardMessagesCommon(new List <TLMessageBase> {
                CurrentItem
            }, StateService, IoC.Get <INavigationService>());
        }
        protected override void OnActivate()
        {
            base.OnActivate();

            var backEntry = NavigationService.BackStack.FirstOrDefault();

            while (backEntry != null &&
                   !backEntry.Source.ToString().EndsWith("ShellView.xaml") &&
                   !DialogDetailsViewModel.IsFirstEntryFromPeopleHub(backEntry, NavigationService.BackStack) &&
                   !DialogDetailsViewModel.IsFirstEntryFromTelegramUrl(backEntry, NavigationService.BackStack))
            {
                NavigationService.RemoveBackEntry();
                backEntry = NavigationService.BackStack.FirstOrDefault();
            }
        }
Esempio n. 8
0
        public void OpenMedia(TLMessage message)
#endif
        {
            if (message == null)
            {
                return;
            }

            var mediaDocument = message.Media as TLMessageMediaDocument;

            if (mediaDocument != null)
            {
                DialogDetailsViewModel.OpenDocumentCommon(message, StateService, DownloadDocumentFileManager, () => { });
            }
        }
        private async Task UpdateThumbnails(IList <PhotoFile> items)
        {
            foreach (var item in items)
            {
                if (item.Thumbnail != null)
                {
                    continue;
                }

                var thumbnail = await DialogDetailsViewModel.GetPhotoThumbnailAsync(item.File, ThumbnailMode.ListView, 99, ThumbnailOptions.None);

                item.Thumbnail = thumbnail;
                item.NotifyOfPropertyChange(() => item.Self);
            }
        }
Esempio n. 10
0
        public static void LogOutCommon(ITelegramEventAggregator eventAggregator, IMTProtoService mtProtoService, IUpdatesService updateService, ICacheService cacheService, IStateService stateService, IPushService pushService, INavigationService navigationService)
        {
            eventAggregator.Publish(Commands.LogOutCommand);

            SettingsHelper.SetValue(Constants.IsAuthorizedKey, false);
            SettingsHelper.RemoveValue(Constants.CurrentUserKey);
            mtProtoService.ClearQueue();
            updateService.ClearState();
            cacheService.ClearAsync();
            stateService.ResetPasscode();

            stateService.ClearAllStickersAsync();
            stateService.ClearFeaturedStickersAsync();
            stateService.ClearArchivedStickersAsync();

            EmojiControl emojiControl;

            if (EmojiControl.TryGetInstance(out emojiControl))
            {
                emojiControl.ClearStickersOnLogOut();
            }

            cacheService.ClearConfigImportAsync();
            SearchViewModel.DeleteRecentAsync();

            Bootstrapper.UpdateMainTile();

            DialogDetailsViewModel.DeleteInlineBots();
            FileUtils.Delete(new object(), Constants.InlineBotsNotificationFileName);
            FileUtils.Delete(new object(), Constants.WebPagePreviewsFileName);

            var liveLocationService = IoC.Get <ILiveLocationService>();

            liveLocationService.Clear();

            if (navigationService.CurrentSource == navigationService.UriFor <StartupViewModel>().BuildUri() ||
                navigationService.CurrentSource == navigationService.UriFor <SignInViewModel>().BuildUri() ||
                navigationService.CurrentSource == navigationService.UriFor <ConfirmViewModel>().BuildUri() ||
                navigationService.CurrentSource == navigationService.UriFor <SignUpViewModel>().BuildUri())
            {
                return;
            }

            stateService.ClearNavigationStack = true;
            Telegram.Logs.Log.Write("StartupViewModel SettingsViewModel.LogOutCommon");
            navigationService.UriFor <StartupViewModel>().Navigate();
        }
Esempio n. 11
0
        public void DeleteMessage(TLMessageBase message)
        {
            if (message == null)
            {
                return;
            }

            var messages = new List <TLMessageBase> {
                message
            };

            var owner = CurrentItem as TLObject;

            var channel = CurrentItem as TLChannel;

            if (channel != null)
            {
                var messageCommon = message as TLMessageCommon;
                if (messageCommon != null)
                {
                    if (messageCommon.ToId is TLPeerChat)
                    {
                        DialogDetailsViewModel.DeleteMessages(MTProtoService, false, null, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
                        return;
                    }
                }

                DialogDetailsViewModel.DeleteChannelMessages(MTProtoService, channel, null, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
                return;
            }

            if (CurrentItem is TLBroadcastChat)
            {
                DeleteMessagesInternal(owner, null, messages);
                return;
            }

            if ((message.Id == null || message.Id.Value == 0) && message.RandomIndex != 0)
            {
                DeleteMessagesInternal(owner, null, messages);
                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, false, null, null, messages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
        }
Esempio n. 12
0
        protected override void OnInitialize()
        {
            if (CurrentContact == null)
            {
                return;
            }

            UpdateNotificationSettings();
            UpdateSubtitles();

            NotifyOfPropertyChange(() => CurrentContact);

            if (CurrentContact == null)
            {
                return;
            }

            Subtitle = DialogDetailsViewModel.GetUserStatus(CurrentContact);

            Execute.BeginOnThreadPool(TimeSpan.FromSeconds(0.5), () =>
            {
                UpdateNotificationSettings();

                IsWorking = true;
                MTProtoService.GetFullUserAsync(
                    CurrentContact.ToInputUser(),
                    userFull =>
                {
                    IsWorking = false;
                    UpdateNotificationSettings();
                    Subtitle = DialogDetailsViewModel.GetUserStatus(CurrentContact);

                    RaiseBlockedStatusChanged(new BlockedEventArgs {
                        Blocked = userFull.Blocked.Value
                    });
                },
                    error =>
                {
                    IsWorking = false;
                    Execute.ShowDebugMessage("users.getFullUser error: " + error);
                });
            });

            base.OnInitialize();
        }
Esempio n. 13
0
 public void OpenLink(string url)
 {
     if (!string.IsNullOrEmpty(url))
     {
         if (url.ToLowerInvariant().Contains("telegram.me"))
         {
             DialogDetailsViewModel.OnTelegramLinkActionCommon(MTProtoService, StateService, new TelegramEventArgs {
                 Uri = url
             });
         }
         else
         {
             var task = new WebBrowserTask();
             task.Uri = new Uri(url);
             task.Show();
         }
     }
 }
Esempio n. 14
0
        private static async void DecryptFile(TLSecureFile secureFile, TLInputFileLocationBase inputFileLocation, string localFileName, string previewFileName)
        {
            var fileSecret = Passport.DecryptValueSecret(
                secureFile.Secret,
                EnterPasswordViewModel.Secret,
                secureFile.FileHash);

            var encryptedFile = await ApplicationData.Current.LocalFolder.GetFileAsync(inputFileLocation.GetFileName("document"));

            var decryptedTuple = await Passport.DecryptFile(localFileName, encryptedFile, fileSecret, secureFile.FileHash);

            var stream = await decryptedTuple.Item1.OpenReadAsync();

            await DialogDetailsViewModel.ResizeJpeg(stream, 180, localFileName, previewFileName);

            Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
            {
                secureFile.NotifyOfPropertyChange(() => secureFile.Self);
            });
        }
Esempio n. 15
0
        public void DeleteMessages()
        {
            if (Items == null)
            {
                return;
            }

            var messages = new List <TLMessageBase>();

            foreach (var item in Items.Where(x => x.IsSelected))
            {
                messages.Add(item);
            }

            if (messages.Count == 0)
            {
                return;
            }

            var randomItems = messages.Where(x => (x.Id == null || x.Id.Value == 0) && x.RandomId != null).ToList();
            var items       = messages.Where(x => x.Id != null && x.Id.Value != 0).ToList();

            if (randomItems.Count == 0 && items.Count == 0)
            {
                return;
            }

            IsSelectionEnabled = false;

            var owner = CurrentItem as TLObject;

            if (CurrentItem is TLBroadcastChat)
            {
                DeleteMessagesInternal(owner, randomItems);
                DeleteMessagesInternal(owner, items);
                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, null, randomItems, items, (result1, result2) => DeleteMessagesInternal(owner, result2), (result1, result2) => DeleteMessagesInternal(owner, result2));
        }
Esempio n. 16
0
        public void ForwardMessages()
        {
            if (Items == null)
            {
                return;
            }

            var messages = new List <TLMessageBase>();

            foreach (var item in Items.Where(x => x.IsSelected))
            {
                messages.Add(item);
            }

            if (messages.Count == 0)
            {
                return;
            }

            IsSelectionEnabled = false;

            DialogDetailsViewModel.ForwardMessagesCommon(messages, StateService, NavigationService);
        }
Esempio n. 17
0
        public void DeleteMessages()
        {
            if (Items == null)
            {
                return;
            }

            var messages = new List <TLMessageBase>();

            foreach (var item in Items.Where(x => x.IsSelected))
            {
                messages.Add(item);
            }

            if (messages.Count == 0)
            {
                return;
            }

            var randomItems = new List <TLMessageBase>();
            var items       = new List <TLMessageBase>();

            TLMessageBase lastItem = null;

            for (var i = 0; i < Items.Count; i++)
            {
                var message = Items[i];
                if (message.IsSelected)
                {
                    if (message.Index == 0 && message.RandomIndex != 0)
                    {
                        randomItems.Add(message);
                        lastItem = null;
                    }
                    else if (message.Index != 0)
                    {
                        items.Add(message);
                        lastItem = null;
                    }
                }
                else
                {
                    if (lastItem == null)
                    {
                        lastItem = message;
                    }
                }
            }

            if (randomItems.Count == 0 && items.Count == 0)
            {
                return;
            }

            IsSelectionEnabled = false;

            var owner = CurrentItem as TLObject;

            var channel = CurrentItem as TLChannel;

            if (channel != null)
            {
                var chatMessages    = new List <TLMessageBase>();
                var channelMessages = new List <TLMessageBase>();
                if (channel.MigratedFromChatId != null)
                {
                    foreach (var item in items)
                    {
                        var message = item as TLMessageCommon;
                        if (message != null && message.ToId is TLPeerChat)
                        {
                            chatMessages.Add(message);
                        }
                        else
                        {
                            channelMessages.Add(message);
                        }
                    }
                }
                if (chatMessages.Count > 0)
                {
                    DialogDetailsViewModel.DeleteChannelMessages(MTProtoService, channel, lastItem, null, channelMessages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
                    DialogDetailsViewModel.DeleteMessages(MTProtoService, false, lastItem, null, chatMessages, null, (result1, result2) => DeleteMessagesInternal(owner, result1, result2));

                    return;
                }

                DialogDetailsViewModel.DeleteChannelMessages(MTProtoService, channel, lastItem, randomItems, items, (result1, result2) => DeleteMessagesInternal(owner, result1, result2), (result1, result2) => DeleteMessagesInternal(owner, result1, result2));

                return;
            }

            if (CurrentItem is TLBroadcastChat)
            {
                DeleteMessagesInternal(owner, null, randomItems);
                DeleteMessagesInternal(owner, null, items);

                return;
            }

            DialogDetailsViewModel.DeleteMessages(MTProtoService, false, null, randomItems, items, (result1, result2) => DeleteMessagesInternal(owner, result1, result2), (result1, result2) => DeleteMessagesInternal(owner, result1, result2));
        }
Esempio n. 18
0
        private void OnContractActivated(object sender, IActivatedEventArgs e)
        {
            var saveArgs = e as FileSavePickerContinuationEventArgs;

            if (saveArgs != null)
            {
                object from;
                if (saveArgs.ContinuationData != null &&
                    saveArgs.ContinuationData.TryGetValue("From", out from))
                {
                    if (string.Equals(from, "DialogDetailsView"))
                    {
                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => DialogDetailsViewModel.SaveFile(saveArgs.File));

                        return;
                    }
                }
            }

            var args = e as FileOpenPickerContinuationEventArgs;

            if (args != null)
            {
                object from;
                if (args.ContinuationData != null &&
                    args.ContinuationData.TryGetValue("From", out from))
                {
                    if (string.Equals(from, "DialogDetailsView"))
                    {
                        var contentControl = RootVisual as ContentControl;
                        if (contentControl != null)
                        {
                            var dialogDetailsView = contentControl.Content as DialogDetailsView;
                            if (dialogDetailsView != null)
                            {
                                var dialogDetailsViewModel = dialogDetailsView.DataContext as DialogDetailsViewModel;
                                if (dialogDetailsViewModel != null)
                                {
                                    object type;
                                    if (!args.ContinuationData.TryGetValue("Type", out type))
                                    {
                                        type = "Document";
                                    }

                                    if (string.Equals(type, "Video"))
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => dialogDetailsViewModel.SendVideo(file));
                                    }
                                    else if (string.Equals(type, "Image"))
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        if (file != null)
                                        {
#if MULTIPLE_PHOTOS
                                            Photos = args.Files;
                                            return;
#endif

#if WP81
                                            Telegram.Api.Helpers.Execute.BeginOnThreadPool(async() =>
                                            {
                                                var randomStream = await file.OpenReadAsync();

                                                await ChooseAttachmentViewModel.Handle(IoC.Get <IStateService>(), randomStream, file.Name);

                                                //MessageBox.Show("OnContractActivated after handle");
                                                dialogDetailsViewModel.BackwardInAnimationComplete();
                                            });
#else
                                            Telegram.Api.Helpers.Execute.BeginOnThreadPool(async() =>
                                            {
                                                var randomStream = await file.OpenReadAsync();
                                                var chosenPhoto  = randomStream.AsStreamForRead();

                                                //MessageBox.Show("OnContractActivated stream");
                                                Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
                                                {
                                                    ChooseAttachmentViewModel.Handle(IoC.Get <IStateService>(), chosenPhoto, file.Name);

                                                    //MessageBox.Show("OnContractActivated after handle");
                                                    dialogDetailsViewModel.BackwardInAnimationComplete();
                                                });
                                            });
#endif
                                        }
                                    }
                                    else
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => dialogDetailsViewModel.SendDocument(file));
                                    }

                                    return;
                                }
                            }
                        }
                    }
                    else if (string.Equals(from, "SecretDialogDetailsView"))
                    {
                        var contentControl = RootVisual as ContentControl;
                        if (contentControl != null)
                        {
                            var dialogDetailsView = contentControl.Content as SecretDialogDetailsView;
                            if (dialogDetailsView != null)
                            {
                                var secretDialogDetailsViewModel = dialogDetailsView.DataContext as SecretDialogDetailsViewModel;
                                if (secretDialogDetailsViewModel != null)
                                {
                                    object type;
                                    if (!args.ContinuationData.TryGetValue("Type", out type))
                                    {
                                        type = "Document";
                                    }

                                    if (string.Equals(type, "Video"))
                                    //{
                                    //    var file = args.Files.FirstOrDefault();
                                    //    Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => dialogDetailsViewModel.EditVideo(file));
                                    //}
                                    //else
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => secretDialogDetailsViewModel.SendDocument(file));
                                    }
                                    else if (string.Equals(type, "Image"))
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        if (file != null)
                                        {
#if MULTIPLE_PHOTOS
                                            Photos = args.Files;
                                            return;
#endif
#if WP81
                                            Telegram.Api.Helpers.Execute.BeginOnThreadPool(async() =>
                                            {
                                                var randomStream = await file.OpenReadAsync();
                                                await ChooseAttachmentViewModel.Handle(IoC.Get <IStateService>(), randomStream, file.Name);
                                                secretDialogDetailsViewModel.OnBackwardInAnimationComplete();
                                            });
#else
                                            Telegram.Api.Helpers.Execute.BeginOnThreadPool(async() =>
                                            {
                                                var randomStream = await file.OpenReadAsync();
                                                var chosenPhoto  = randomStream.AsStreamForRead();

                                                Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
                                                {
                                                    ChooseAttachmentViewModel.Handle(IoC.Get <IStateService>(), chosenPhoto, file.Name);
                                                });
                                            });
#endif
                                        }
                                    }
                                    else
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => secretDialogDetailsViewModel.SendDocument(file));
                                    }

                                    return;
                                }
                            }
                        }
                    }
                    else if (string.Equals(from, "ResidentialAddressView"))
                    {
                        var contentControl = RootVisual as ContentControl;
                        if (contentControl != null)
                        {
                            var view = contentControl.Content as ResidentialAddressView;
                            if (view != null)
                            {
                                object type;
                                if (!args.ContinuationData.TryGetValue("Type", out type))
                                {
                                    type = "Document";
                                }

                                if (type is string)
                                {
                                    var viewModel = view.DataContext as ResidentialAddressViewModel;
                                    if (viewModel != null)
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => viewModel.SendDocument(type.ToString(), file));

                                        return;
                                    }
                                }
                            }
                        }
                    }
                    else if (string.Equals(from, "PersonalDetailsView"))
                    {
                        var contentControl = RootVisual as ContentControl;
                        if (contentControl != null)
                        {
                            object type;
                            if (!args.ContinuationData.TryGetValue("Type", out type))
                            {
                                type = "Document";
                            }

                            if (type is string)
                            {
                                var view = contentControl.Content as PersonalDetailsView;
                                if (view != null)
                                {
                                    var viewModel = view.DataContext as PersonalDetailsViewModel;
                                    if (viewModel != null)
                                    {
                                        var file = args.Files.FirstOrDefault();
                                        Telegram.Api.Helpers.Execute.BeginOnThreadPool(() => viewModel.SendDocument(type.ToString(), file));

                                        return;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 19
0
        public async void SetFile(StorageFile result, PhotoFile file)
        {
            if (result == null)
            {
                return;
            }

            _result = result;
            var properties = await result.Properties.GetImagePropertiesAsync();

            if (properties != null &&
                properties.Width > 0 &&
                properties.Height > 0)
            {
                _width  = properties.Width;
                _height = properties.Height;
                if (_width == 0 || _height == 0)
                {
                    return;
                }

                var minDimension = Math.Min(_width, _height);
                ImageBorder.Width  = _width * 400.0 / minDimension;
                ImageBorder.Height = _height * 400.0 / minDimension;
                ImageBorder.Margin = new Thickness((400.0 - ImageBorder.Width) / 2.0, (400.0 - ImageBorder.Height) / 2.0,
                                                   (400.0 - ImageBorder.Width) / 2.0, (400.0 - ImageBorder.Height) / 2.0);

                _stopwatch = Stopwatch.StartNew();
                var stream = await result.GetThumbnailAsync(ThumbnailMode.SingleItem, 800);

                System.Diagnostics.Debug.WriteLine("Picture.OpenReadAsync=" + _stopwatch.Elapsed);

                var thumbnailSource = new BitmapImage();
                //thumbnailSource.DecodePixelHeight = (int) ImageBorder.Height * 3;
                //thumbnailSource.DecodePixelWidth = (int) ImageBorder.Width * 3;
                thumbnailSource.CreateOptions = BitmapCreateOptions.BackgroundCreation;
                thumbnailSource.SetSource(stream.AsStream());
                Image.Source = thumbnailSource;
            }
            else
            {
                var sourceStream = await result.OpenReadAsync();

                var decoder = await BitmapDecoder.CreateAsync(sourceStream);

                _width  = decoder.OrientedPixelWidth;
                _height = decoder.OrientedPixelHeight;
                if (_width == 0 || _height == 0)
                {
                    return;
                }

                var minDimension = Math.Min(_width, _height);
                ImageBorder.Width  = _width * 400.0 / minDimension;
                ImageBorder.Height = _height * 400.0 / minDimension;
                ImageBorder.Margin = new Thickness((400.0 - ImageBorder.Width) / 2.0, (400.0 - ImageBorder.Height) / 2.0,
                                                   (400.0 - ImageBorder.Width) / 2.0, (400.0 - ImageBorder.Height) / 2.0);

                _stopwatch = Stopwatch.StartNew();
                var resizedJpeg = await DialogDetailsViewModel.ResizeJpeg(sourceStream, 800, string.Empty, string.Empty);

                var stream = new MemoryStream(resizedJpeg.Bytes);

                System.Diagnostics.Debug.WriteLine("Picture.OpenReadAsync=" + _stopwatch.Elapsed);

                var thumbnailSource = new BitmapImage();
                //thumbnailSource.DecodePixelHeight = (int) ImageBorder.Height * 3;
                //thumbnailSource.DecodePixelWidth = (int) ImageBorder.Width * 3;
                thumbnailSource.CreateOptions = BitmapCreateOptions.BackgroundCreation;
                thumbnailSource.SetSource(stream);
                Image.Source = thumbnailSource;
            }
        }
        private void UpdateDialogsAsync(TLDialog lastDialog)
        {
            if (_lastSliceLoaded)
            {
                return;
            }

            var             offsetDate = 0;
            var             offsetId   = 0;
            TLInputPeerBase offsetPeer = new TLInputPeerEmpty();

            if (lastDialog != null)
            {
                var lastMessage = lastDialog.TopMessage as TLMessageCommon;
                if (lastMessage != null)
                {
                    offsetDate = lastMessage.DateIndex;
                    offsetId   = lastMessage.Index;
                    if (lastMessage.ToId is TLPeerUser)
                    {
                        offsetPeer = !lastMessage.Out.Value
                            ? DialogDetailsViewModel.PeerToInputPeer(new TLPeerUser {
                            Id = lastMessage.FromId
                        })
                            : DialogDetailsViewModel.PeerToInputPeer(lastMessage.ToId);
                    }
                    else
                    {
                        offsetPeer = DialogDetailsViewModel.PeerToInputPeer(lastMessage.ToId);
                    }
                }
            }

            var stopwatch = Stopwatch.StartNew();

            IoC.Get <IMTProtoService>().GetDialogsAsync(stopwatch,
                                                        new TLInt(offsetDate),
                                                        new TLInt(offsetId),
                                                        offsetPeer,
                                                        new TLInt(int.MaxValue),
                                                        new TLInt(0),
                                                        result => Execute.BeginOnUIThread(() =>
            {
                _lastSliceLoaded = true;

                var dialogs        = result.Dialogs;
                var clearedDialogs = new List <TLDialogBase>();
                foreach (var d in dialogs)
                {
                    if (Skip(d))
                    {
                        continue;
                    }

                    clearedDialogs.Add(d);
                }

                foreach (var clearedDialog in clearedDialogs)
                {
                    var d = new DialogItem {
                        Dialog = clearedDialog
                    };

                    DialogsSource.Add(d);
                }

                LoadNextSlice();
            }),
                                                        error => Execute.BeginOnUIThread(() =>
            {
            }));
        }
Esempio n. 21
0
        public void Share()
        {
            if (SuppressSharing)
            {
                return;
            }
            if (string.IsNullOrEmpty(Server) || string.IsNullOrEmpty(Port))
            {
                return;
            }
            if (!IsSocks5Proxy && string.IsNullOrEmpty(Secret))
            {
                return;
            }

            var view = GetView() as ProxyView;

            if (view != null)
            {
                view.OpenShareMessagePicker(string.Empty,
                                            args =>
                {
                    if (args.Dialogs.Count == 0)
                    {
                        return;
                    }

                    var prefix   = Constants.DefaultMeUrlPrefix;
                    var config63 = CacheService.GetConfig() as TLConfig63;
                    if (config63 != null && !TLString.IsNullOrEmpty(config63.MeUrlPrefix))
                    {
                        prefix = config63.MeUrlPrefix.ToString();
                    }

                    var text = string.IsNullOrEmpty(args.Comment)
                            ? prefix + GetProxyString()
                            : args.Comment + "\n\n" + prefix + GetProxyString();

                    var messages = new List <TLMessage25>();
                    foreach (var dialog in args.Dialogs)
                    {
                        var with = dialog.With;
                        if (with != null)
                        {
                            with.ClearBitmap();
                        }

                        var date = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now);

                        var message = TLUtils.GetMessage(
                            new TLInt(StateService.CurrentUserId),
                            dialog.Peer,
                            MessageStatus.Sending,
                            TLBool.True,
                            TLBool.True,
                            date,
                            new TLString(text),
                            new TLMessageMediaEmpty(),
                            TLLong.Random(),
                            new TLInt(0)
                            );

                        messages.Add(message);
                    }

                    Telegram.Api.Helpers.Execute.BeginOnThreadPool(() =>
                    {
                        foreach (var message in messages)
                        {
                            CacheService.SyncSendingMessage(
                                message, null,
                                result => DialogDetailsViewModel.SendInternal(message, MTProtoService));
                        }
                    });
                });
            }

            return;
            //StateService.Url = prefix + GetProxyString();
            //NavigationService.UriFor<ChooseDialogViewModel>().Navigate();
        }