public void DownloadFile(TLEncryptedFile file, TLObject owner)
        {
            var inputFile = new TLInputEncryptedFileLocation {
                Id = file.Id, AccessHash = file.AccessHash
            };
            var downloadableItem = GetDownloadableItem(file.DCId, inputFile, owner, file.Size);

            lock (_itemsSyncRoot)
            {
                bool addFile = true;
                foreach (var item in _items)
                {
                    if (item.InputEncryptedFileLocation.LocationEquals(inputFile))
                    {
                        addFile = false;
                        break;
                    }
                }

                if (addFile)
                {
                    _items.Add(downloadableItem);
                }
            }

            StartAwaitingWorkers();
        }
Esempio n. 2
0
        public void DownloadFile(TLEncryptedFile file, TLObject owner, Action <DownloadableItem> callback)
        {
            var inputFile = new TLInputEncryptedFileLocation {
                Id = file.Id, AccessHash = file.AccessHash
            };
            var downloadableItem = GetDownloadableItem(file.DCId, inputFile, owner, file.Size, callback);

            var downloadedCount = downloadableItem.Parts.Count(x => x.Status == PartStatus.Processed);
            var count           = downloadableItem.Parts.Count;
            var isComplete      = downloadedCount == count;

            if (isComplete)
            {
                var fileName = downloadableItem.InputLocation.GetFileName("encrypted");
                Func <DownloadablePart, string> getPartName = x => downloadableItem.InputLocation.GetPartFileName(x.Number, "encrypted");

                FileUtils.MergePartsToFile(getPartName, downloadableItem.Parts, fileName);

                downloadableItem.IsoFileName = fileName;
                if (downloadableItem.Callback != null)
                {
                    downloadableItem.Callback(downloadableItem);
                }
                else
                {
                    _eventAggregator.Publish(downloadableItem);
                }
            }
            else
            {
                lock (_itemsSyncRoot)
                {
                    bool addFile = true;
                    foreach (var item in _items)
                    {
                        if (item.InputLocation.LocationEquals(inputFile))
                        {
                            addFile = false;
                            break;
                        }
                    }

                    if (addFile)
                    {
                        _items.Add(downloadableItem);
                    }
                }

                StartAwaitingWorkers();
            }
        }
        public IAsyncOperationWithProgress <DownloadableItem, double> DownloadFileAsync(TLEncryptedFile file)
        {
            return(AsyncInfo.Run <DownloadableItem, double>((token, progress) =>
            {
                var tsc = new TaskCompletionSource <DownloadableItem>();

                var inputFile = new TLInputEncryptedFileLocation {
                    Id = file.Id, AccessHash = file.AccessHash
                };
                var downloadableItem = GetDownloadableItem(file.DCId, inputFile, null, file.Size);
                downloadableItem.Callback = tsc;
                downloadableItem.Progress = progress;

                lock (_itemsSyncRoot)
                {
                    bool addFile = true;
                    foreach (var item in _items)
                    {
                        if (item.InputEncryptedFileLocation.LocationEquals(inputFile))
                        {
                            addFile = false;
                            break;
                        }
                    }

                    if (addFile)
                    {
                        _items.Add(downloadableItem);
                    }
                }

                StartAwaitingWorkers();

                return tsc.Task;
            }));
        }