예제 #1
0
 private void AddFiles(FileListResponse response, FileListOptions options)
 {
     foreach (var file in response.files)
     {
         if (responseFiles.Count >= maxFilesTotal)
         {
             break;
         }
         var newFile = ResponseFile.FromFile(file);
         var res     = responseUsers.Where(x => x.id == file.user);
         if (res.Count() > 0)
         {
             newFile.linkedUser = res.First();
             if (file.username == "")
             {
                 newFile.username = res.First().name;
             }
         }
         responseFiles.Add(newFile);
     }
     slackFiles.Items.Refresh();
     PopulateFilterByFileType();
     SetStatus($"Page received. (Received: {response.paging.page} Available: {response.paging.pages})");
     SetProgress((response.paging.page) / ((double)maxFilesTotal / maxFilesPerPage) * 100.0, $"Receiving {response.paging.page} / {Math.Ceiling((double)maxFilesTotal / (double)maxFilesPerPage)}");
     if (responseFiles.Count < maxFilesTotal && response.paging.page < response.paging.pages)
     {
         SetStatus($"Delaying next request by {apiCallDelay}ms...");
         Task.Delay(apiCallDelay).ContinueWith(t => {
             options.page = response.paging.page + 1; GetFilesFromSlack(options);
         });
     }
 }
예제 #2
0
        private void SendFileList(SimpleSocketSession <SocketData> session, FileListRequest request)
        {
            string            path  = request.Path;
            List <RemoteFile> files = new List <RemoteFile>();

            if (string.IsNullOrEmpty(path))
            {
                files = DriveInfo.GetDrives().Select(p => p.RootDirectory).Select(p => new RemoteFile(p, false)).ToList();
            }
            else
            {
                foreach (var dir in new DirectoryInfo(path).EnumerateFileSystemInfos())
                {
                    var file = new RemoteFile(dir, true);
                    files.Add(file);
                }
            }
            var data = new FileListResponse()
            {
                Files = files.OrderByDescending(p => p.IsDir).ToList(), Path = path
            };
            SocketData resp = new SocketData(Response, SocketDataAction.FileListResponse, data);

            Send(session, resp);
        }
예제 #3
0
        public int Download(string id, out FileListResponse fileListResponse)
        {
            if (UserInfo.UserName == "")
            {
                fileListResponse = null;
                return(-1);
            }
            var client  = new RestClient(ServerAddress.Address + "/api/storage/file?download=true&id=" + id);
            var request = new RestRequest(Method.GET);

            request.AddHeader("Authorization", "Bearer " + UserInfo.Token);
            request.AddHeader("Content-Type", "application/json");
            IRestResponse response = client.Execute(request);

            Console.WriteLine(response.Content);
            fileListResponse = JsonConvert.DeserializeObject <FileListResponse>(response.Content);
            if (fileListResponse != null)
            {
                if (fileListResponse.data.amount == 1)
                {
                    return(fileListResponse.status);
                }
                else
                {
                    return(-20001);
                }
            }
            else
            {
                return(-20000);
            }
        }
예제 #4
0
        public async Task <IActionResult> GetFileList(string source, string share, string folder)
        {
            if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(share) || string.IsNullOrEmpty(folder))
            {
                return(BadRequest());
            }
            FileListResponse response = await _service.ListFiles(source, share, folder);

            return(Ok(response));
        }
예제 #5
0
        public override Task <FileListResponse> GetFileList(FileListRequest request, ServerCallContext context)
        {
            var bubu = _testGoogleDrive.GetFileList();

            var fileListResponse = new FileListResponse();

            foreach (var item in bubu)
            {
                fileListResponse.FileList.Add(new FileData()
                {
                    FileName = item.Name, Id = item.Id
                });
            }

            return(Task.FromResult(fileListResponse));
        }
예제 #6
0
        private void HandleFileListResponse(object sender, FileListResponse fileListResponse)
        {
            _eventLog.Add(new ServerEvent
            {
                EventType              = EventType.ReceivedFileList,
                LocalIpAddress         = MyInfo.LocalIpAddress,
                LocalPortNumber        = MyInfo.PortNumber,
                RemoteServerIpAddress  = fileListResponse.RemoteServerInfo.SessionIpAddress,
                RemoteServerPortNumber = fileListResponse.RemoteServerInfo.PortNumber,
                RemoteFolder           = fileListResponse.RemoteServerInfo.TransferFolder,
                RemoteServerFileList   = fileListResponse.FileInfoList,
            });

            EventOccurred?.Invoke(this, _eventLog.Last());

            SuccessfullyProcessedRequest?.Invoke(this, fileListResponse);
        }
예제 #7
0
        public void GetFileList(string folder, out int status, out List <Response.FileListResponse.File> fileList)
        {
            if (UserInfo.UserName == "")
            {
                fileList = null;
                status   = -1;
                return;
            }
            fileList = new List <Response.FileListResponse.File>();
            int offset = 0;
            int currentAmount;

            do
            {
                var client  = new RestClient(ServerAddress.Address + "/api/storage/file?offset=" + offset + "&amount=100&folder=" + folder);
                var request = new RestRequest(Method.GET);
                request.AddHeader("Authorization", "Bearer " + UserInfo.Token);
                request.AddHeader("Content-Type", "application/json");
                IRestResponse response = client.Execute(request);
                Console.WriteLine(response.Content);
                FileListResponse fileListResponse = JsonConvert.DeserializeObject <FileListResponse>(response.Content);
                if (fileListResponse != null)
                {
                    currentAmount = fileListResponse.data.amount;
                    if (currentAmount != 0)
                    {
                        fileList.AddRange(fileListResponse.data.files);
                    }

                    offset = offset + currentAmount;  // 下一次请求用
                }
                else
                {
                    status = -20000;
                    return;
                }
            } while (currentAmount != 0);

            status = 0;
        }
예제 #8
0
 public GDriveFolderView(FileListResponse files = null)
 {
     InitializeComponent();
     BindingContext = new GDriveFolderViewModel(files);
     Helpers.NavigationHelper.OnBackButtonPressed += BackButtonPressed;
 }
예제 #9
0
 public static void ClassInitialize(TestContext context)
 {
     OkBaseResponse     = JsonLoader.LoadJson <BaseResponse>(@"Data/base.json");
     OkFileInfoResponse = JsonLoader.LoadJson <FileInfoResponse>(@"Files/Data/file_info.json");
     OkFileListResponse = JsonLoader.LoadJson <FileListResponse>(@"Files/Data/file_list.json");
 }
예제 #10
0
        async void HandleFileListRequest(object sender, FileListRequest fileListRequest)
        {
            MyInfo.TransferFolder = fileListRequest.TransferFolderPath;

            _eventLog.Add(new ServerEvent
            {
                EventType              = EventType.ReceivedFileListRequest,
                RemoteServerIpAddress  = fileListRequest.RemoteServerInfo.SessionIpAddress,
                RemoteServerPortNumber = fileListRequest.RemoteServerInfo.PortNumber,
                LocalFolder            = MyInfo.TransferFolder
            });

            EventOccurred?.Invoke(this, _eventLog.Last());

            if (!Directory.Exists(MyInfo.TransferFolder))
            {
                var foldesDoesNotExist = new Request(RequestType.RequestedFolderDoesNotExist)
                {
                    LocalServerInfo  = MyInfo,
                    RemoteServerInfo = fileListRequest.RemoteServerInfo,
                    Status           = RequestStatus.InProgress,
                    Direction        = TransferDirection.Outbound
                };

                await _requestHandler.SendRequestAsync(foldesDoesNotExist);

                return;
            }

            var fileInfoList = new FileInfoList(MyInfo.TransferFolder);

            if (fileInfoList.Count == 0)
            {
                var folderIsEmpty = new Request(RequestType.RequestedFolderIsEmpty)
                {
                    LocalServerInfo  = MyInfo,
                    RemoteServerInfo = fileListRequest.RemoteServerInfo,
                    Status           = RequestStatus.InProgress,
                    Direction        = TransferDirection.Outbound
                };

                await _requestHandler.SendRequestAsync(folderIsEmpty);

                return;
            }

            var fileListResponse = new FileListResponse
            {
                LocalServerInfo  = MyInfo,
                RemoteServerInfo = fileListRequest.RemoteServerInfo,
                FileInfoList     = fileInfoList,
                Status           = RequestStatus.InProgress,
                Direction        = TransferDirection.Outbound
            };

            var sendRequest = await _requestHandler.SendRequestAsync(fileListResponse);

            if (sendRequest.Failure)
            {
                return;
            }

            SuccessfullyProcessedRequest?.Invoke(this, fileListRequest);
        }