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)); }
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)); }
public void ForwardMessage(TLMessageBase message) { if (message == null) { return; } DialogDetailsViewModel.ForwardMessagesCommon(new List <TLMessageBase> { message }, StateService, NavigationService); }
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(); } }
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); } }
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(); }
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)); }
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(); }
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(); } } }
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); }); }
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)); }
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); }
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)); }
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; } } } } } } } }
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(() => { })); }
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(); }