private void SendDocument(TLDocument document, string caption) { var media = new TLMessageMediaDocument { Document = document, Caption = caption }; var date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now); var message = TLUtils.GetMessage(SettingsHelper.UserId, Peer.ToPeer(), TLMessageState.Sending, true, true, date, string.Empty, media, TLLong.Random(), null); if (Reply != null) { message.HasReplyToMsgId = true; message.ReplyToMsgId = Reply.Id; message.Reply = Reply; Reply = null; } var previousMessage = InsertSendingMessage(message, false); CacheService.SyncSendingMessage(message, previousMessage, async (m) => { var input = new TLInputMediaDocument { Caption = caption, Id = new TLInputDocument { Id = document.Id, AccessHash = document.AccessHash, } }; await ProtoService.SendMediaAsync(Peer, input, message); }); }
private string UpdateSizeLabel(TLDocument document) { if (document == null) { return("0 B"); } var bytesCount = document.Size; if (bytesCount < 1024) { return(string.Format("{0} B", bytesCount)); } if (bytesCount < 1024 * 1024) { return(string.Format("{0} KB", ((double)bytesCount / 1024).ToString("0.0", CultureInfo.InvariantCulture))); } if (bytesCount < 1024 * 1024 * 1024) { return(string.Format("{0} MB", ((double)bytesCount / 1024 / 1024).ToString("0.0", CultureInfo.InvariantCulture))); } return(string.Format("{0} GB", ((double)bytesCount / 1024 / 1024 / 1024).ToString("0.0", CultureInfo.InvariantCulture))); }
private bool TrySetWebPSource(TLDocument document, int phase) { if (phase >= Phase && document != null) { var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { Phase = phase; //Image.UriSource = FileUtils.GetTempFileUri(fileName); var decoded = WebPImage.Encode(File.ReadAllBytes(FileUtils.GetTempFileName(fileName))); if (decoded != null) { _bitmapImage.SetSource(decoded); } else { _bitmapImage.UriSource = FileUtils.GetTempFileUri(fileName); } return(true); } } return(false); }
public void DownloadFile(TLMessagesSlice messages, TelegramClient client) { TLDocument document = GetFileData(messages); string file_name = GetFileName(document); var loc = new TLInputDocumentFileLocation() { AccessHash = document.AccessHash, Id = document.Id, Version = document.Version }; var mb = 1048576; var upperLimit = (int)Math.Pow(2, Math.Ceiling(Math.Log(document.Size, 2))) * 4; var limit = Math.Min(mb, upperLimit); var currentOffset = 0; File.WriteAllText(file_name, ""); using (var fs = File.OpenWrite(file_name)) { while (currentOffset < document.Size) { var file = client.GetFile(loc, limit, currentOffset).ConfigureAwait(false).GetAwaiter().GetResult(); fs.Write(file.Bytes, currentOffset, file.Bytes.Length); currentOffset += file.Bytes.Length; } fs.Close(); } }
public string GetFileName(TLDocument filedata) { var attributes = filedata.Attributes; TLDocumentAttributeFilename file_name = (TLDocumentAttributeFilename)attributes.AsEnumerable().ElementAt(0); return(file_name.FileName); }
private void SetWebPSource(ITLTransferable transferable, TLDocument document, int fileSize, int phase) { if (phase >= Phase && document != null) { Phase = phase; var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { //Image.UriSource = FileUtils.GetTempFileUri(fileName); Image.SetSource(WebPImage.Encode(File.ReadAllBytes(FileUtils.GetTempFileName(fileName)))); } else { Execute.BeginOnThreadPool(async() => { var result = await _downloadFileManager.DownloadFileAsync(fileName, document.DCId, document.ToInputFileLocation(), fileSize).AsTask(transferable?.Download()); if (result != null && Phase <= phase) { Execute.BeginOnUIThread(() => { if (transferable != null) { transferable.IsTransferring = false; } //Image.UriSource = FileUtils.GetTempFileUri(fileName); Image.SetSource(WebPImage.Encode(File.ReadAllBytes(FileUtils.GetTempFileName(fileName)))); }); } }); } } }
private string UpdateGlyph(TLDocument document) { Visibility = Visibility.Visible; var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { if (TLMessage.IsVideo(document) || TLMessage.IsRoundVideo(document) || TLMessage.IsGif(document) || TLMessage.IsMusic(document)) { return("\uE102"); } return("\uE160"); } else if (document.IsTransferring) { return("\uE10A"); } else if (document.DownloadingProgress > 0 && document.DownloadingProgress < 1) { return("\uE10A"); } else if (document.UploadingProgress > 0 && document.DownloadingProgress < 1) { return("\uE10A"); } return("\uE118"); }
public TLDocument GetFileData(TLMessagesSlice messages) { TLMessage message = (TLMessage)messages.Messages.AsEnumerable().ElementAt(0); TLMessageMediaDocument mediadata = (TLMessageMediaDocument)message.Media; TLDocument filedata = (TLDocument)mediadata.Document; return(filedata); }
private IUploadManager ChooseUploadManager(TLDocument document) { if (TLMessage.IsVideo(document)) { return(UnigramContainer.Current.ResolveType <IUploadVideoManager>()); } return(UnigramContainer.Current.ResolveType <IUploadDocumentManager>()); }
private Brush UpdateEllipseBrush(TLDocument document) { var brushes = new[] { App.Current.Resources["Placeholder0Brush"], App.Current.Resources["Placeholder1Brush"], App.Current.Resources["Placeholder2Brush"], App.Current.Resources["Placeholder3Brush"] }; if (document == null) { return(brushes[0] as SolidColorBrush); } var name = document.FileName.ToLower(); if (name.Length > 0) { var color = -1; if (name.EndsWith(".doc") || name.EndsWith(".txt") || name.EndsWith(".psd")) { color = 0; } else if (name.EndsWith(".xls") || name.EndsWith(".csv")) { color = 1; } else if (name.EndsWith(".pdf") || name.EndsWith(".ppt") || name.EndsWith(".key")) { color = 2; } else if (name.EndsWith(".zip") || name.EndsWith(".rar") || name.EndsWith(".ai") || name.EndsWith(".mp3") || name.EndsWith(".mov") || name.EndsWith(".avi")) { color = 3; } else { int idx; var extension = (idx = name.LastIndexOf(".", StringComparison.Ordinal)) == -1 ? string.Empty : name.Substring(idx + 1); if (extension.Length != 0) { color = extension[0] % brushes.Length; } else { color = name[0] % brushes.Length; } } return(brushes[color] as SolidColorBrush); } return(brushes[0] as SolidColorBrush); }
public ImageSource this[TLDocument document, bool?thumbnail] { get { if (document == null) { return(null); } var key = (object)document; if (thumbnail == true) { key = document.Id + "_thumbnail"; } if (_context.TryGetValue(key, out Tuple <TLBitmapSource, WeakReference <ImageSource> > reference) && reference.Item2.TryGetTarget(out ImageSource target)) { if (thumbnail == null) { reference.Item1.Download(); } return(target); } var bitmap = new TLBitmapSource(document, thumbnail == true); _context[key] = new Tuple <TLBitmapSource, WeakReference <ImageSource> >(bitmap, new WeakReference <ImageSource>(bitmap.Image)); if (thumbnail == null) { bitmap.Download(); } return(bitmap.Image); //var context = _context; //if (thumbnail) //{ // context = _contextThumb; //} //if (context.TryGetValue(document, out Tuple<TLBitmapSource, WeakReference<ImageSource>> reference) && // reference.Item2.TryGetTarget(out ImageSource target)) //{ // return target; //} //var bitmap = new TLBitmapSource(document, thumbnail); //context[document] = new Tuple<TLBitmapSource, WeakReference<ImageSource>>(bitmap, new WeakReference<ImageSource>(bitmap.Image)); //return bitmap.Image; } }
public TLBitmapSource(TLDocument document, bool thumbnail) { _source = document; if (TLMessage.IsSticker(document)) { if (thumbnail) { SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); return; } if (TrySetWebPSource(document, PHASE_FULL)) { return; } SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); SetWebPSource(document, document, document.Size, PHASE_FULL); } else if (TLMessage.IsGif(document)) { SetSource(null, document.Thumb, PHASE_THUMBNAIL); if (ApplicationSettings.Current.AutoDownload[_protoService.NetworkType].HasFlag(AutoDownloadType.GIF)) { SetDownloadSource(document, document, document.Size, PHASE_FULL); } } else if (TLMessage.IsVideo(document)) { SetSource(null, document.Thumb, PHASE_THUMBNAIL); if (ApplicationSettings.Current.AutoDownload[_protoService.NetworkType].HasFlag(AutoDownloadType.Video)) { SetDownloadSource(document, document, document.Size, PHASE_FULL); } } else if (TLMessage.IsRoundVideo(document)) { SetSource(null, document.Thumb, PHASE_THUMBNAIL); if (ApplicationSettings.Current.AutoDownload[_protoService.NetworkType].HasFlag(AutoDownloadType.Round)) { SetDownloadSource(document, document, document.Size, PHASE_FULL); } } else { SetSource(null, document.Thumb, PHASE_THUMBNAIL); } }
public TLBitmapSource(TLDocument document, bool thumbnail) { _source = document; if (TLMessage.IsSticker(document)) { if (thumbnail) { SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); return; } if (TrySetWebPSource(document, PHASE_FULL) == false) { SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); SetWebPSource(document, document, document.Size, PHASE_FULL); } } else if (TLMessage.IsGif(document)) { if (thumbnail) { SetSource(null, document.Thumb, PHASE_THUMBNAIL); return; } _renderer = _animatedFactory.CreateRenderer(320, 320); Image = _renderer.ImageSource; if (TrySetAnimatedSource(document, PHASE_FULL) == false && ApplicationSettings.Current.AutoDownload[_protoService.NetworkType].HasFlag(AutoDownloadType.GIF)) { SetAnimatedSource(document, document, document.Size, PHASE_FULL); } } else if (TLMessage.IsVideo(document)) { SetSource(null, document.Thumb, PHASE_THUMBNAIL); if (ApplicationSettings.Current.AutoDownload[_protoService.NetworkType].HasFlag(AutoDownloadType.Video)) { //SetSource(photo, photo.Full, PHASE_FULL); } } else { SetSource(null, document.Thumb, PHASE_THUMBNAIL); } }
public void CancelDownloadFile(TLDocument document) { Execute.BeginOnThreadPool(() => { lock (_itemsSyncRoot) { //var items = _items.Where(x => x.Owner == owner); var items = _items.Where(x => x.InputDocumentLocation.AccessHash == document.AccessHash && x.InputDocumentLocation.Id == document.Id); foreach (var item in items) { item.IsCancelled = true; } } }); }
public virtual async Task DownloadFileFromContactTest() { TelegramClient client = this.NewClient(); TelegramAuthModel authModel = new TelegramAuthModel() { ApiId = this.ApiId, ApiHash = this.ApiHash }; await client.AuthenticateAsync(authModel); TeleSharp.TL.Contacts.TLContacts result = await client.GetContactsAsync(); TLUser user = result.Users .OfType <TLUser>() .FirstOrDefault(x => x.Phone == this.NumberToSendMessage); TLInputPeerUser inputPeer = new TLInputPeerUser() { UserId = user.Id }; TLMessagesSlice res = await client.SendRequestAsync <TLMessagesSlice>(new TLRequestGetHistory() { Peer = inputPeer }); TLDocument document = res.Messages .OfType <TLMessage>() .Where(m => m.Media != null) .Select(m => m.Media) .OfType <TLMessageMediaDocument>() .Select(md => md.Document) .OfType <TLDocument>() .First(); TeleSharp.TL.Upload.TLFile resFile = await client.GetFile( new TLInputDocumentFileLocation() { AccessHash = document.AccessHash, Id = document.Id, Version = document.Version }, document.Size); Assert.IsTrue(resFile.Bytes.Length > 0); }
private bool TrySetAnimatedSource(TLDocument document, int phase) { if (phase >= Phase && document != null) { var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { Phase = phase; //Image.UriSource = FileUtils.GetTempFileUri(fileName); _renderer.SetSource(FileUtils.GetTempFileUri(fileName)); return(true); } } return(false); }
private void OnDataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args) { if (_oldViewModel != null) { //_oldViewModel.PropertyChanged -= OnPropertyChanged; _oldViewModel = null; } if (ViewModel != null) { _oldViewModel = ViewModel; //ViewModel.PropertyChanged += OnPropertyChanged; // To semplify future x:Bind implementation. EllipseIcon.Background = UpdateEllipseBrush(ViewModel); SizeLabel.Text = UpdateSizeLabel(ViewModel); TimeLabel.Text = UpdateTimeLabel(DataContext as TLMessage); } }
public static String getDocumentFileName(TLDocument document) { if (document != null) { //if (document.FileName != null) //{ // return document.file_name; //} for (int a = 0; a < document.Attributes.Count; a++) { var documentAttribute = document.Attributes[a]; if (documentAttribute is TLDocumentAttributeFilename filenameAttribute) { return(filenameAttribute.FileName); } } } return(""); }
public BitmapImage this[TLDocument document, bool thumbnail] { get { if (document == null) { return(null); } if (_context.TryGetValue(document, out Tuple <TLBitmapSource, WeakReference <BitmapImage> > reference) && reference.Item2.TryGetTarget(out BitmapImage target)) { if (!thumbnail) { reference.Item1.Download(); } return(target); } var bitmap = new TLBitmapSource(document, thumbnail); _context[document] = new Tuple <TLBitmapSource, WeakReference <BitmapImage> >(bitmap, new WeakReference <BitmapImage>(bitmap.Image)); return(bitmap.Image); //var context = _context; //if (thumbnail) //{ // context = _contextThumb; //} //if (context.TryGetValue(document, out Tuple<TLBitmapSource, WeakReference<BitmapImage>> reference) && // reference.Item2.TryGetTarget(out BitmapImage target)) //{ // return target; //} //var bitmap = new TLBitmapSource(document, thumbnail); //context[document] = new Tuple<TLBitmapSource, WeakReference<BitmapImage>>(bitmap, new WeakReference<BitmapImage>(bitmap.Image)); //return bitmap.Image; } }
private string UpdateGlyph(TLDocument document) { Visibility = Visibility.Visible; var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { var message = DataContext as TLMessage; if (message != null && message.Media is TLMessageMediaDocument documentMedia && documentMedia.HasTTLSeconds) { return("\uE60D"); } if (TLMessage.IsVideo(document) || TLMessage.IsRoundVideo(document) || TLMessage.IsMusic(document)) { return("\uE102"); } else if (TLMessage.IsGif(document)) { Visibility = Visibility.Collapsed; return("\uE102"); } return("\uE160"); } else if (document.IsTransferring) { return("\uE10A"); } else if (document.DownloadingProgress > 0 && document.DownloadingProgress < 1) { return("\uE10A"); } else if (document.UploadingProgress > 0 && document.DownloadingProgress < 1) { return("\uE10A"); } return("\uE118"); }
public IEnumerable <TLFile> GetDocument(TLDocument document) { TLAbsInputFileLocation inputDocument = new TLInputDocumentFileLocation() { id = document.id, access_hash = document.access_hash, version = document.version, }; int iRemainingSize = document.size; int iOffset = 0; int iRead; TLFile file; while (iRemainingSize > 0) { file = (TLFile)AsyncHelpers.RunSync <TLFile>(() => m_client.GetFile(inputDocument, iRemainingSize, iOffset)); iRead = file.bytes.Length; iRemainingSize -= iRead; iOffset += iRead; yield return(file); } }
public TLBitmapSource(TLDocument document, bool thumbnail) { _source = document; if (TLMessage.IsSticker(document)) { if (thumbnail) { SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); return; } if (TrySetWebPSource(document, PHASE_FULL) == false) { SetWebPSource(null, document.Thumb, PHASE_THUMBNAIL); SetWebPSource(document, document, document.Size, PHASE_FULL); } } else { SetSource(null, document.Thumb, PHASE_FULL); } }
private void SetDownloadSource(ITLTransferable transferable, TLDocument document, int fileSize, int phase) { if (phase >= Phase && document != null) { //Phase = phase; var fileName = document.GetFileName(); if (File.Exists(FileUtils.GetTempFileName(fileName))) { } else { Execute.BeginOnThreadPool(async() => { var result = await _downloadFileManager.DownloadFileAsync(fileName, document.DCId, document.ToInputFileLocation(), fileSize, transferable?.Download()); if (result != null && Phase <= phase) { //Phase = phase; } }); } } }
private static async void OnMyTimedEvent(object source, ElapsedEventArgs e) { try { Console.WriteLine("On timer event"); DateTime nowDateTime = DateTime.Now.ToLocalTime(); // Check that we are well connected if (Client != null && Client.IsConnected && UserId != 0) { if (ChannelId != null && ChannelId.Count > 0) { TLAbsDialogs = await Client.GetUserDialogsAsync(); foreach (TLAbsMessage tLAbsMessage in ((TLDialogs)TLAbsDialogs).Messages.Where(x => x is TLMessage message && TimeUnixTOWindows(message.Date, true) >= nowDateTime.AddMilliseconds(-(TimerIntervalInMs - 1)))) { ((TLMessage)tLAbsMessage).Message = CalculOffset(((TLMessage)tLAbsMessage).Message); if (((TLMessage)tLAbsMessage).ToId is TLPeerUser tLPeerUser) { // Personal Chat Do Not Forward! } else if (((TLMessage)tLAbsMessage).ToId is TLPeerChannel channel0 && ((TLMessage)tLAbsMessage).ReplyToMsgId != null) { int crtChannelId = channel0.ChannelId; if (crtChannelId != MyChanId && ChannelId.ContainsKey(crtChannelId)) { Console.WriteLine("ReplyChannelId " + ((TLMessage)tLAbsMessage).ReplyToMsgId); await ReplyMessage((TLMessage)tLAbsMessage); } } else if (((TLMessage)tLAbsMessage).ToId is TLPeerChat chat && ((TLMessage)tLAbsMessage).ReplyToMsgId != null) { Console.WriteLine("ReplyChatId " + ((TLMessage)tLAbsMessage).ReplyToMsgId); await ReplyMessage((TLMessage)tLAbsMessage); } else if (((TLMessage)tLAbsMessage).ToId is TLPeerChannel channel && ((TLMessage)tLAbsMessage).ReplyToMsgId == null) { int crtChannelId = channel.ChannelId; if (crtChannelId != MyChanId && ChannelId.ContainsKey(crtChannelId)) { Console.WriteLine("New Message Channel " + ChannelId[crtChannelId][0] + " \n" + ((TLMessage)tLAbsMessage).Message); if (ChannelId.ContainsKey(crtChannelId)) { if (((TLMessage)tLAbsMessage).Message != "") { if (((TLMessage)tLAbsMessage).Message.ToLower().StartsWith("tp") || ((TLMessage)tLAbsMessage).Message.ToLower().StartsWith("sl")) { TLChannelMessages historyFromSourceCanal = (TLChannelMessages)await Client.GetHistoryAsync(new TLInputPeerChannel() { ChannelId = channel.ChannelId, AccessHash = (long)ChannelId[channel.ChannelId][1] }); List <TLAbsMessage> tLMessageList = historyFromSourceCanal.Messages.ToList().Where(x => x is TLMessage tL).ToList(); List <TLMessage> orderedtLMessageList = tLMessageList.Cast <TLMessage>().OrderByDescending(x => x.Id).ToList(); string newMessage = CalculOffset(orderedtLMessageList[1].Message + "\n" + ((TLMessage)tLAbsMessage).Message); if (orderedtLMessageList[1].Message.ToLower().Contains("sell") && !orderedtLMessageList[1].Message.ToLower().Contains("sl")) { await Client.SendMessageAsync(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, newMessage); } else if (orderedtLMessageList[1].Message.ToLower().Contains("vente") && !orderedtLMessageList[1].Message.ToLower().Contains("sl")) { await Client.SendMessageAsync(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, newMessage); } else if (orderedtLMessageList[1].Message.ToLower().Contains("buy") && !orderedtLMessageList[1].Message.ToLower().Contains("sl")) { await Client.SendMessageAsync(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, newMessage); } else if (orderedtLMessageList[1].Message.ToLower().Contains("achat") && !orderedtLMessageList[1].Message.ToLower().Contains("sl")) { await Client.SendMessageAsync(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, newMessage); } } else { await Client.SendMessageAsync(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, ((TLMessage)tLAbsMessage).Message); } } else if (((TLMessage)tLAbsMessage).Media != null) { if (((TLMessage)tLAbsMessage).Media.GetType().ToString() == "TeleSharp.TL.TLMessageMediaPhoto") { TLMessageMediaPhoto tLMessageMediaPhoto = (TLMessageMediaPhoto)((TLMessage)tLAbsMessage).Media; TLPhoto tLPhoto = (TLPhoto)tLMessageMediaPhoto.Photo; TLPhotoSize tLPhotoSize = tLPhoto.Sizes.ToList().OfType <TLPhotoSize>().Last(); TLFileLocation tLFileLocation = (TLFileLocation)tLPhotoSize.Location; TLAbsInputFileLocation tLAbsInputFileLocation = new TLInputFileLocation() { LocalId = tLFileLocation.LocalId, Secret = tLFileLocation.Secret, VolumeId = tLFileLocation.VolumeId }; TLInputFileLocation TLInputFileLocation = tLAbsInputFileLocation as TLInputFileLocation; TLFile buffer = await Client.GetFile(TLInputFileLocation, 1024 * 512); TLInputFile fileResult = (TLInputFile)await UploadHelper.UploadFile(Client, "", new StreamReader(new MemoryStream(buffer.Bytes))); await Client.SendUploadedPhoto(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, fileResult, tLMessageMediaPhoto.Caption); } else if (((TLMessage)tLAbsMessage).Media.GetType().ToString() == "TeleSharp.TL.TLMessageMediaDocument") { TLMessageMediaDocument tLMessageMediaDocument = (TLMessageMediaDocument)((TLMessage)tLAbsMessage).Media; TLDocument tLDocument = (TLDocument)tLMessageMediaDocument.Document; TLVector <TLAbsDocumentAttribute> tLAbsDocumentAttributes = tLDocument.Attributes; TLInputDocumentFileLocation tLInputDocumentFileLocation = new TLInputDocumentFileLocation() { AccessHash = tLDocument.AccessHash, Id = tLDocument.Id, Version = tLDocument.Version, }; TLFile buffer = await Client.GetFile(tLInputDocumentFileLocation, 1024 * 512); TLInputFile fileResult = (TLInputFile)await UploadHelper.UploadFile(Client, ((TLDocumentAttributeFilename)tLAbsDocumentAttributes[0]).FileName, new StreamReader(new MemoryStream(buffer.Bytes))); await Client.SendUploadedDocument(new TLInputPeerChannel() { ChannelId = MyChanId, AccessHash = AccessHash }, fileResult, tLMessageMediaDocument.Caption, tLDocument.MimeType, tLAbsDocumentAttributes); } } } } } } }
public FileLoadOperation(TLDocument documentLocation) { try { /*if (documentLocation instanceof TLRPC.TL_documentEncrypted) { * location = new TLRPC.TL_inputEncryptedFileLocation(); * location.id = documentLocation.id; * location.access_hash = documentLocation.access_hash; * datacenter_id = documentLocation.dc_id; * iv = new byte[32]; * System.arraycopy(documentLocation.iv, 0, iv, 0, iv.length); * key = documentLocation.key; * } else*/ if (documentLocation is TLDocument document) { location = new TLInputDocumentFileLocation { Id = document.Id, AccessHash = document.AccessHash }; datacenter_id = document.DCId; } totalBytesCount = documentLocation.Size; if (key != null) { int toAdd = 0; if (totalBytesCount % 16 != 0) { bytesCountPadding = 16 - totalBytesCount % 16; totalBytesCount += bytesCountPadding; } } ext = FileLoader.getDocumentFileName(documentLocation); int idx; if (ext == null || (idx = ext.LastIndexOf('.')) == -1) { ext = ""; } else { ext = ext.Substring(idx); } if ("audio/ogg".Equals(documentLocation.MimeType)) { currentType = FileType.Audio; } else if ("video/mp4".Equals(documentLocation.MimeType)) { currentType = FileType.Video; } else { currentType = FileType.File; } if (ext.Length <= 1) { if (documentLocation.MimeType != null) { switch (documentLocation.MimeType) { case "video/mp4": ext = ".mp4"; break; case "audio/ogg": ext = ".ogg"; break; default: ext = ""; break; } } else { ext = ""; } } } catch (Exception e) { //FileLog.e(e); onFail(true, 0); } }
public async Task SendVideoAsync(StorageFile file, string caption, bool round, VideoTransformEffectDefinition transform = null, MediaEncodingProfile profile = null) { if (_peer == null) { return; } var fileLocation = new TLFileLocation { VolumeId = TLLong.Random(), LocalId = TLInt.Random(), Secret = TLLong.Random(), DCId = 0 }; var fileName = string.Format("{0}_{1}_{2}.mp4", fileLocation.VolumeId, fileLocation.LocalId, fileLocation.Secret); var fileCache = await FileUtils.CreateTempFileAsync(fileName); await file.CopyAndReplaceAsync(fileCache); var basicProps = await fileCache.GetBasicPropertiesAsync(); var videoProps = await fileCache.Properties.GetVideoPropertiesAsync(); var thumbnailBase = await FileUtils.GetFileThumbnailAsync(file); var thumbnail = thumbnailBase as TLPhotoSize; if (thumbnail == null) { return; } var desiredName = string.Format("{0}_{1}_{2}.jpg", thumbnail.Location.VolumeId, thumbnail.Location.LocalId, thumbnail.Location.Secret); var date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now); var videoWidth = (int)videoProps.Width; var videoHeight = (int)videoProps.Height; if (profile != null) { videoWidth = (int)profile.Video.Width; videoHeight = (int)profile.Video.Height; } var document = new TLDocument { Id = 0, AccessHash = 0, Date = date, Size = (int)basicProps.Size, MimeType = fileCache.ContentType, Thumb = thumbnail, Attributes = new TLVector<TLDocumentAttributeBase> { new TLDocumentAttributeFilename { FileName = file.Name }, new TLDocumentAttributeVideo { Duration = (int)videoProps.Duration.TotalSeconds, W = videoWidth, H = videoHeight, IsRoundMessage = round } } }; var media = new TLMessageMediaDocument { Document = document, Caption = caption }; var message = TLUtils.GetMessage(SettingsHelper.UserId, _peer.ToPeer(), TLMessageState.Sending, true, true, date, string.Empty, media, TLLong.Random(), null); if (Reply != null) { message.HasReplyToMsgId = true; message.ReplyToMsgId = Reply.Id; message.Reply = Reply; Reply = null; } var previousMessage = InsertSendingMessage(message); CacheService.SyncSendingMessage(message, previousMessage, async (m) => { if (transform != null && profile != null) { await fileCache.RenameAsync(fileName + ".temp.mp4"); var fileResult = await FileUtils.CreateTempFileAsync(fileName); var transcoder = new MediaTranscoder(); transcoder.AddVideoEffect(transform.ActivatableClassId, true, transform.Properties); var prepare = await transcoder.PrepareFileTranscodeAsync(fileCache, fileResult, profile); await prepare.TranscodeAsync().AsTask(Upload(media.Document as TLDocument, progress => new TLSendMessageUploadDocumentAction { Progress = progress }, 0, 200.0)); //await fileCache.DeleteAsync(); fileCache = fileResult; thumbnailBase = await FileUtils.GetFileThumbnailAsync(fileCache); thumbnail = thumbnailBase as TLPhotoSize; desiredName = string.Format("{0}_{1}_{2}.jpg", thumbnail.Location.VolumeId, thumbnail.Location.LocalId, thumbnail.Location.Secret); document.Thumb = thumbnail; } var fileId = TLLong.Random(); var upload = await _uploadVideoManager.UploadFileAsync(fileId, fileCache.Name, false).AsTask(Upload(media.Document as TLDocument, progress => new TLSendMessageUploadDocumentAction { Progress = progress }, 0.5, 2.0)); if (upload != null) { var thumbFileId = TLLong.Random(); var thumbUpload = await _uploadDocumentManager.UploadFileAsync(thumbFileId, desiredName); if (thumbUpload != null) { var inputMedia = new TLInputMediaUploadedThumbDocument { File = upload.ToInputFile(), Thumb = thumbUpload.ToInputFile(), MimeType = document.MimeType, Caption = media.Caption, Attributes = document.Attributes }; var result = await ProtoService.SendMediaAsync(_peer, inputMedia, message); } //if (result.IsSucceeded) //{ // var update = result.Result as TLUpdates; // if (update != null) // { // var newMessage = update.Updates.OfType<TLUpdateNewMessage>().FirstOrDefault(); // if (newMessage != null) // { // var newM = newMessage.Message as TLMessage; // if (newM != null) // { // message.Media = newM.Media; // message.RaisePropertyChanged(() => message.Media); // } // } // } //} } }); }
protected string ExportAudio(TLMessageMediaDocument media, TLDocument document) { // Find TLDocumentAttributeFilename from list of attributes TLDocumentAttributeAudio attrAudio = null; TLDocumentAttributeFilename attrFile = null; foreach (TLAbsDocumentAttribute absAttr in document.attributes.lists) { if (absAttr is TLDocumentAttributeAudio) { attrAudio = (TLDocumentAttributeAudio)absAttr; } else if (absAttr is TLDocumentAttributeFilename) { attrFile = (TLDocumentAttributeFilename)absAttr; } } if (attrAudio == null && attrFile == null) { throw new TLCoreException("The TLDocumentAttributeAudio and TLDocumentAttributeFilename have not been found"); } string key; if (attrFile != null) { // Key: YYYY-MM-DD-Caption{0:00}.EXT key = String.Format("{0}-{1}{2}", m_sPrefix, "{0:00}", attrFile.file_name); } else { string sCaption = attrAudio.voice ? c_sVoice : c_sAudio; string ext = document.mime_type.Substring(document.mime_type.Length - 3).Trim(); // Key: YYYY-MM-DD-Caption{0:00}.EXT key = String.Format("{0}-{1}{2}.{3}", m_sPrefix, sCaption, "{0:00}", ext); } string sFileName = GetUniqueFileName(key); // YYYY-MM-DD-AudioXX.EXT if (m_config.ExportVoiceMessages) { // Export the document to a file string sFullFileName = Path.Combine(m_sDialogDirectory, sFileName); using (FileStream f = new FileStream(sFullFileName, FileMode.Create, FileAccess.Write)) foreach (TLFile file in m_archiver.GetDocument(document)) { if (file.type.GetType() == typeof(TLFileUnknown)) { throw new TLCoreException("File unknown: " + sFileName); } f.Write(file.bytes, 0, file.bytes.Length); } } return(sFileName); // YYYY-MM-DD-AudioXX.EXT }
protected string ExportDocument(TLMessageMediaDocument media) { // TLPhoto contains a collection of TLPhotoSize TLDocument document = media.document as TLDocument; if (document == null) { throw new TLCoreException("The document is not an instance of TLDocument"); } if (document.attributes.lists.Count <= 0) { throw new TLCoreException("TLDocument does not have any attributes"); } if (document.mime_type.StartsWith("audio")) { return(ExportAudio(media, document)); } // Find TLDocumentAttributeFilename from list of attributes TLDocumentAttributeFilename attr = null; foreach (TLAbsDocumentAttribute absAttr in document.attributes.lists) { attr = absAttr as TLDocumentAttributeFilename; if (attr != null) { break; } } if (attr == null) { throw new TLCoreException("The TLDocumentAttributeFilename has not been found"); } if (String.IsNullOrEmpty(attr.file_name)) { throw new TLCoreException("The file_name of the document is empty"); } // Key: YYYY-MM-DD-Caption{0:00}.EXT string key = String.Format("{0}-{1}{2}", m_sPrefix, "{0:00}", attr.file_name); string sFileName = GetUniqueFileName(key); // YYYY-MM-DD-CaptionXX.EXT if (m_config.ExportFiles) { // Export the document to a file string sFullFileName = Path.Combine(m_sDialogDirectory, sFileName); using (FileStream f = new FileStream(sFullFileName, FileMode.Create, FileAccess.Write)) foreach (TLFile file in m_archiver.GetDocument(document)) { if (file.type.GetType() == typeof(TLFileUnknown)) { throw new TLCoreException("File unknown: " + sFileName); } f.Write(file.bytes, 0, file.bytes.Length); } } return(sFileName); // YYYY-MM-DD-CaptionXX.EXT }
public void SendGifExecute(TLDocument document) { SendDocument(document, null); Stickers.StickersService.AddRecentGif(document, (int)(Utils.CurrentTimestamp / 1000)); }
private async Task SendGifAsync(StorageFile file, string caption) { var fileLocation = new TLFileLocation { VolumeId = TLLong.Random(), LocalId = TLInt.Random(), Secret = TLLong.Random(), DCId = 0 }; var fileName = string.Format("{0}_{1}_{2}.gif", fileLocation.VolumeId, fileLocation.LocalId, fileLocation.Secret); var fileCache = await FileUtils.CreateTempFileAsync(fileName); await file.CopyAndReplaceAsync(fileCache); var basicProps = await fileCache.GetBasicPropertiesAsync(); var imageProps = await fileCache.Properties.GetImagePropertiesAsync(); var thumbnailBase = await FileUtils.GetFileThumbnailAsync(file); var thumbnail = thumbnailBase as TLPhotoSize; var desiredName = string.Format("{0}_{1}_{2}.jpg", thumbnail.Location.VolumeId, thumbnail.Location.LocalId, thumbnail.Location.Secret); var date = TLUtils.DateToUniversalTimeTLInt(ProtoService.ClientTicksDelta, DateTime.Now); var document = new TLDocument { Id = 0, AccessHash = 0, Date = date, Size = (int)basicProps.Size, MimeType = fileCache.ContentType, Thumb = thumbnail, Attributes = new TLVector<TLDocumentAttributeBase> { new TLDocumentAttributeAnimated(), new TLDocumentAttributeFilename { FileName = file.Name }, new TLDocumentAttributeImageSize { W = (int)imageProps.Width, H = (int)imageProps.Height }, new TLDocumentAttributeVideo { W = (int)imageProps.Width, H = (int)imageProps.Height, } } }; var media = new TLMessageMediaDocument { Caption = caption, Document = document }; var message = TLUtils.GetMessage(SettingsHelper.UserId, Peer.ToPeer(), TLMessageState.Sending, true, true, date, string.Empty, media, TLLong.Random(), null); if (Reply != null) { message.HasReplyToMsgId = true; message.ReplyToMsgId = Reply.Id; message.Reply = Reply; Reply = null; } var previousMessage = InsertSendingMessage(message); CacheService.SyncSendingMessage(message, previousMessage, async (m) => { var fileId = TLLong.Random(); var upload = await _uploadDocumentManager.UploadFileAsync(fileId, fileName, false).AsTask(media.Document.Upload()); if (upload != null) { var thumbFileId = TLLong.Random(); var thumbUpload = await _uploadDocumentManager.UploadFileAsync(thumbFileId, desiredName); if (thumbUpload != null) { var inputMedia = new TLInputMediaUploadedThumbDocument { File = upload.ToInputFile(), Thumb = thumbUpload.ToInputFile(), MimeType = document.MimeType, Caption = media.Caption, Attributes = document.Attributes }; var result = await ProtoService.SendMediaAsync(Peer, inputMedia, message); } } }); }