コード例 #1
0
        public async Task RequestFileDelete(LockerObject fileInfo)
        {
            var msg = new FileDeleteRequestMessage {
                filename = fileInfo.name
            };

            await SendMessage(msg);
        }
コード例 #2
0
        private async Task HandleFileDeleteRequest(FileDeleteRequest msg)
        {
            var fileInfo = new LockerObject {
                name = msg.filename
            };

            Database.Instance.DeleteFile(_user, fileInfo);
            IOController.Instance.Delete($"{UserPath}/{msg.filename}");
            _user = Database.Instance.GetUser(_user._id);
            await SendFileCatalogUpdate(_user.locker);
        }
コード例 #3
0
        private async Task HandleFileCreateRequest(FileCreateRequestMessage msg)
        {
            var file = new LockerObject {
                name = msg.name, encrypted = msg.encrypted
            };

            Database.Instance.AddFile(_user, file);
            await IOController.Instance.Write($"{UserPath}/{msg.name}", msg.data);

            _user = Database.Instance.GetUser(_user._id);
            await SendFileCatalogUpdate(_user.locker);
        }
コード例 #4
0
        public FileItemViewModel(LockerObject fileInfo)
        {
            _fileInfo     = fileInfo;
            SelectCommand = new RelayCommand(p =>
            {
                IsSelected = !IsSelected;
                OnSelect?.Invoke(this, null);
            });

            DownloadCommand = new RelayCommand(p =>
            {
                DownloadFile();
            });
        }
コード例 #5
0
        public void AddFile(User user, LockerObject file)
        {
            try
            {
                var collection = _database.GetCollection <User>("users");
                var filter     = Builders <User> .Filter.Eq("_id", user._id);

                var update = Builders <User> .Update.AddToSet("locker.content", file);

                collection.UpdateOne(filter, update);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"addfile: {ex.ToString()}");
            }
        }
コード例 #6
0
        public ExplorerViewModel()
        {
            BackCommand = new RelayCommand(p =>
            {
                NavigationController.Instance.DropViews();
                NavigationController.Instance.ShowView <LoginViewModel>("start");
                BackendConnector.Instance.Init();
            });

            CreateFileCommand = new RelayCommand(p =>
            {
                var dialog            = NavigationController.Instance.ShowView <CreateFileViewModel>("create-file");
                dialog.CompleteAction = async(r, f, pw) =>
                {
                    if (r != null)
                    {
                        var error = await BackendConnector.Instance.RequestFileCreate(r, f, pw);
                        if (error != null)
                        {
                            var msg                  = NavigationController.Instance.ShowView <MessageViewModel>("error-message");
                            msg.Message              = error;
                            msg.ButtonMessage        = Resources.Ok;
                            msg.MessageActionCommand = new RelayCommand(param =>
                            {
                                NavigationController.Instance.ShowView <CreateFileViewModel>("create-file");
                                NavigationController.Instance.DeleteView <MessageViewModel>("error-message");
                            });
                            return;
                        }
                    }
                    NavigationController.Instance.ShowView <ExplorerViewModel>("home");
                    NavigationController.Instance.DeleteView <CreateFileViewModel>("create-file");
                };
            });

            DeleteFileCommand = new RelayCommand(p =>
            {
                var fileInfo = new LockerObject()
                {
                    name = _selectedFile.Name
                };
                BackendConnector.Instance.RequestFileDelete(fileInfo);
            }, p => { return(Files?.Count(f => f.IsSelected) == 1); });
            BackendConnector.Instance.OnFileCatalogUpdate += UpdateFileCatalog;
            BackendConnector.Instance.RequestFileCatalog();
        }
コード例 #7
0
        public void DeleteFile(User user, LockerObject file)
        {
            try
            {
                var collection = _database.GetCollection <User>("users");
                var filter     = Builders <User> .Filter.Eq("_id", user._id);

                var update = Builders <User> .Update.PullFilter(u => u.locker.content,
                                                                f => f.name == file.name);

                collection.UpdateOne(filter, update);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"addfile: {ex.ToString()}");
            }
        }
コード例 #8
0
        public async Task <IOFile> RequestFileDownload(LockerObject fileInfo, string password = "")
        {
            IOFile res = null;
            var    msg = new FileDownloadRequestMessage {
                filename = fileInfo.name
            };

            await SendMessage(msg);

            var resp = await WaitForRequestResponse <FileDownloadResponseMessage>(60000,
                                                                                  MessageType.FileDownloadResponse);

            if (resp != null && resp.success)
            {
                var fileJson = fileInfo.encrypted? Encryption.Decrypt(resp.data, password): resp.data;
                res = JsonConvert.DeserializeObject <IOFile>(fileJson);
            }
            return(res);
        }
コード例 #9
0
        public CreateFileViewModel()
        {
            OkCommand = new RelayCommand(p =>
            {
                var pw     = ((PasswordBox)p).Password;
                var result = new LockerObject {
                    name = Name, encrypted = Encrypt && !string.IsNullOrEmpty(pw)
                };
                CompleteAction?.Invoke(result, _file, pw);
                _file        = null;
                OpenFileText = Resources.OpenFile;
            }, DataValid);

            CancelCommand = new RelayCommand(p =>
            {
                CompleteAction?.Invoke(null, null, null);
            });

            OpenFileCommand = new RelayCommand(OpenFile);
        }
コード例 #10
0
        public async Task <string> RequestFileCreate(LockerObject fileInfo, IOFile file, string password = null)
        {
            try
            {
                var dataJson          = JsonConvert.SerializeObject(file);
                var dataJsonEncrypted = fileInfo.encrypted ? Encryption.Encrypt(dataJson, password): dataJson;

                var msg = new FileCreateRequestMessage {
                    name = fileInfo.name, data = dataJsonEncrypted, encrypted = fileInfo.encrypted
                };
                await SendMessage(msg);

                return(null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(Resources.FileTooBigMessage);
            }
        }