Beispiel #1
0
            private async Task PushStack(CloudFile cloudFolder)
            {
                try
                {
                    MyLogger.Assert(cloudFolder.IsFolder);
                    CloudFolderContentPanel cfcp = new CloudFolderContentPanel(cloudFolder, Stack.Count + 1);
                    cfcp.FileClicked += delegate(CloudFileLabel label) { OnFileClicked(label); };
                    cfcp.FileClicked += async delegate(CloudFileLabel label)
                    {
                        var removeRequestTime = DateTime.Now;
                        if (RemovingStacks)
                        {
                            MyLogger.Log("Waiting for stack removing completion...");
                            while (RemovingStacks)
                            {
                                await Task.Delay(100);
                            }
                            MyLogger.Log("Stack remove completed.");
                        }
                        if (removeRequestTime <= RemoveRequestTime)
                        {
                            return;
                        }
                        RemoveRequestTime = removeRequestTime;
                        MyLogger.Assert(!RemovingStacks);
                        RemovingStacks = true;
                        foreach (var p in Stack.GetRange(cfcp.FolderDepth, Stack.Count - cfcp.FolderDepth))
                        {
                            await p.StopRefreshing();

                            SPpanel.Children.Remove(p);
                        }
                        Stack.RemoveRange(cfcp.FolderDepth, Stack.Count - cfcp.FolderDepth);
                        RemovingStacks = false;
                        if (label.File.IsFolder)
                        {
                            await PushStack(label.File);
                        }
                    };
                    Stack.Add(cfcp);
                    SPpanel.Children.Remove(LBpadding);
                    SPpanel.Children.Add(cfcp);
                    SPpanel.Children.Add(LBpadding);
                    await cfcp.RefreshContent();

                    if (SPpanel.Children.Contains(cfcp))
                    {
                        await SPpanel.ScrollToAsync(cfcp, ScrollToPosition.Center, true);
                    }
                    //await SPpanel.ScrollToAsync(cfcp, ScrollToPosition.Start, false);
                    //await SPpanel.ScrollToAsync(double.MaxValue, 0, true);
                    //await SPpanel.ScrollToAsync(double.MaxValue, 0, false);
                }
                catch (Exception error)
                {
                    await MyLogger.Alert(error.ToString());
                }
                this.IsEnabled = true;
            }
Beispiel #2
0
            private async Task SendHttpRequest()
            {
                string url = ETurl.Text;
                {
                    bool isFirst = true;
                    //await MyLogger.Alert(url);
                    foreach (var field in AKVfield.BLPmain.Treap.ToList())
                    {
                        //await MyLogger.Alert($"Field: {field.Key} = {field.Value}");
                        url    += (isFirst ? "?" : "&");
                        isFirst = false;
                        url    += System.Net.WebUtility.UrlEncode(field.Key) + "=" + System.Net.WebUtility.UrlEncode(field.Value);
                    }
                }
                var blankPoint = url.IndexOf(' ');

                MyLogger.Assert(blankPoint != -1);
                HttpWebRequest request = WebRequest.CreateHttp(url.Substring(blankPoint + 1));

                foreach (var header in AKVheader.BLPmain.Treap.ToList())
                {
                    //await MyLogger.Alert($"Header: {header.Key} = {header.Value}");
                    request.Headers[header.Key] = header.Value;
                }
                request.Method = url.Remove(blankPoint);
                if (Array.IndexOf(request.Headers.AllKeys, "Content-Length") != -1)
                {
                    using (var stream = await request.GetRequestStreamAsync())
                    {
                        var bytes = Encoding.UTF8.GetBytes(BodyTextToSend());
                        //MyLogger.Log(Encoding.UTF8.GetString(bytes).Replace("\n", "\\n").Replace("\r", "\\r").Replace("\t", "\\t")); //換行為甚麼是\r啦 >_<
                        await stream.WriteAsync(bytes, 0, bytes.Length);
                    }
                }
                string result;

                try
                {
                    using (var response = await RestRequests.GetHttpResponsePublicAsync(request))
                    {
                        if (response == null)
                        {
                            result = "(Null Response)";
                        }
                        else
                        {
                            result = await RestRequests.LogHttpWebResponsePublic(response, true);
                        }
                    }
                }
                catch (Exception error)
                {
                    result = $"{error}";
                }
                EDresponse.Text = result;
            }
Beispiel #3
0
 public CloudFolderContentPanel(CloudFile _cloudFolder, int folderDepth)
 {
     MyLogger.Assert(_cloudFolder.IsFolder);
     cloudFolder   = _cloudFolder;
     FolderDepth   = folderDepth;
     FoldersGetter = cloudFolder.FoldersGetter();
     FilesGetter   = cloudFolder.FilesGetter();
     InitializeViews();
     RegisterEvents();
 }
Beispiel #4
0
        public List <DataType> ToList()
        {
            var list = new List <DataType>();

            lock (root)
            {
                this.root?.AddToListRecursively(ref list);
            }
            MyLogger.Assert(list.Count >= 1);
            list.RemoveAt(list.Count - 1);
            return(list);
        }
Beispiel #5
0
 private static double AnimationOffsetRatio(double timeRatio)
 {
     MyLogger.Assert(timeRatio >= 0);
     return(Math.Min(1.0, timeRatio));
 }
        private async Task DownloadFile()
        {
            if (fileSelected == null)
            {
                await MyLogger.Alert("Please select a cloud folder first");
            }
            else
            {
                switch (Device.RuntimePlatform)
                {
                case Device.Windows:
                    if (fileSelected.IsFolder)
                    {
                        var picker = new Windows.Storage.Pickers.FolderPicker()
                        {
                            ViewMode = Windows.Storage.Pickers.PickerViewMode.List,
                            SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
                        };
                        picker.FileTypeFilter.Clear();
                        picker.FileTypeFilter.Add("*");
                        var folder = await picker.PickSingleFolderAsync();

                        if (folder != null)
                        {
                            var folderToDownload = fileSelected;
                            MyLogger.Log($"Folder downloading...\r\nCloud: {folderToDownload.FullName}\r\nLocal: {folder.Path}");
                            var downloadedFolder = await fileSelected.DownloadFolderOnWindowsAsync(folder);

                            if (downloadedFolder == null)
                            {
                                MyLogger.Log($"Folder download canceled!\r\nCloud: {folderToDownload.FullName}\r\nLocal: {folder.Path}");
                            }
                            else
                            {
                                MyLogger.Log($"Folder download succeeded!\r\nCloud: {folderToDownload.FullName}\r\nDownloaded: {downloadedFolder.Path}");
                            }
                        }
                        MyLogger.Log("All done!");
                    }
                    else
                    {
                        var picker = new Windows.Storage.Pickers.FolderPicker()
                        {
                            ViewMode = Windows.Storage.Pickers.PickerViewMode.List,
                            SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
                        };
                        picker.FileTypeFilter.Clear();
                        picker.FileTypeFilter.Add("*");
                        var folder = await picker.PickSingleFolderAsync();

                        if (folder != null)
                        {
                            var fileToDownload = fileSelected;
                            {
                                try
                                {
                                    var existedFile = await folder.GetFileAsync(fileToDownload.Name);

                                    MyLogger.Assert(existedFile != null);
                                    if (await MyLogger.Ask($"\"{fileToDownload.Name}\" already existed in \"{folder.Path}\", overwrite anyway?"))
                                    {
                                        await existedFile.DeleteAsync();
                                    }
                                    else
                                    {
                                        goto indexSkip;
                                    }
                                }
                                catch (FileNotFoundException)
                                {
                                    MyLogger.Log("File not found exception, YA!");
                                }
                            }
                            var localFile = await folder.CreateFileAsync(fileToDownload.Name);

                            MyLogger.Log($"File downloading...\r\nCloud: {fileToDownload.FullName}\r\nLocal: {localFile.Path}");
                            await fileSelected.DownloadFileOnWindowsAsync(localFile);

                            indexSkip :;
                        }
                        MyLogger.Log("All done!");
                    }
                    break;

                default:
                    await MyLogger.Alert($"File picker currently not supported on {Device.RuntimePlatform} devices.");

                    break;
                }
            }
        }