protected override void OnLoadData()
        {
            if (IsInDesignMode || string.IsNullOrEmpty(Settings.ApiKey))
            {
                return;
            }

            var rester      = new Api.Rest.Transfers(Settings.ApiKey);
            var transaction = ProgressTracker.StartNewTransaction();

            rester.ListTransfers(response =>
            {
                Transfers = response.Data.ToModelList(Invoker).OrderBy(x => x.Transfer.Name).ToObservableCollection();

                if (Updater != null)
                {
                    Updater.Dispose();
                }

                //Automatically refreshes...every so often
                Updater = new AutonomousUpdater(Transfers, Settings, Invoker);

                ProgressTracker.CompleteTransaction(transaction);
            });
        }
        public void GetStreamUrl(FileViewModel context, Action <Uri> action)
        {
            var transaction = ProgressTracker.StartNewTransaction();

            RestApi.StreamFile(context.File.FileID, response =>
            {
                ProgressTracker.CompleteTransaction(transaction);
                action(response.ResponseUri);
            });
        }
        public void ConvertToMp4(FileViewModel context, Action action)
        {
            var transaction = ProgressTracker.StartNewTransaction();

            RestApi.FileToMp4(context.File.FileID, response =>
            {
                ProgressTracker.CompleteTransaction(transaction);
                action();
            });
        }
        public void GetMp4Status(FileViewModel context, Action <Mp4Status, int> action)
        {
            var transaction = ProgressTracker.StartNewTransaction();

            RestApi.Mp4Status(context.File.FileID, response =>
            {
                ProgressTracker.CompleteTransaction(transaction);
                action(response.Data.ToMp4Status(), response.Data.mp4.percent_done);
            });
        }
        private void CancelTransfers(List <int> transfers)
        {
            var rester      = new Api.Rest.Transfers(Settings.ApiKey);
            var transaction = ProgressTracker.StartNewTransaction();

            rester.CancelTransfers(transfers, response =>
            {
                Refresh();
                ProgressTracker.CompleteTransaction(transaction);
            });
        }
        public void DeleteFiles(List <FileViewModel> selected)
        {
            var transaction = ProgressTracker.StartNewTransaction();
            var ids         = selected.Select(x => x.File.FileID);

            RestApi.DeleteFiles(ids, response =>
            {
                ProgressTracker.CompleteTransaction(transaction);

                if (response.ResponseStatus == ResponseStatus.Completed)
                {
                    Refresh();
                }
            });
        }
        protected override void OnLoadData()
        {
            if (IsInDesignMode || string.IsNullOrEmpty(Settings.ApiKey))
            {
                return;
            }

            var transactionID = ProgressTracker.StartNewTransaction();

            RestApi.ListFiles(null, response =>
            {
                //Store these down as our root items
                AllFiles = OrderCollection(response.Data.ToModelList(Invoker, Settings, ProgressTracker));

                //These root items will then be displayed as default
                CurrentFileList = AllFiles;

                ProgressTracker.CompleteTransaction(transactionID);
            });
        }
        public void ConvertToMp4(List <FileViewModel> selected)
        {
            foreach (var file in selected.Where(x => x.File.ContentType == ContentType.Video && !x.File.Name.EndsWith("mp4", StringComparison.InvariantCultureIgnoreCase)))
            {
                var fileID      = file.File.FileID;
                var transaction = ProgressTracker.StartNewTransaction();

                RestApi.Mp4Status(fileID, response =>
                {
                    if (response.Data.ToMp4Status() == Mp4Status.NotAvailable)
                    {
                        RestApi.FileToMp4(fileID, response2 => ProgressTracker.CompleteTransaction(transaction));
                    }
                    else
                    {
                        ProgressTracker.CompleteTransaction(transaction);
                    }
                });
            }
        }
        public void ExpandFile(FileViewModel file)
        {
            if (file.File.ContentType != ContentType.Directory)
            {
                return;
            }

            if (file.Children != null)
            {
                CurrentFileList = file.Children;
                return;
            }

            var transactionID = ProgressTracker.StartNewTransaction();

            RestApi.ListFiles(file.File.FileID, response =>
            {
                file.Children   = OrderCollection(response.Data.ToModelList(Invoker, Settings, ProgressTracker));
                CurrentFileList = file.Children;

                ProgressTracker.CompleteTransaction(transactionID);
            });
        }