private void OnSyncFilesRequest(SyncFilesRequest fileAction, SyncFilesBodyRequest bodyRequest, HttpRequestEventArgs e) { var login = _connectionStateManager.GetLoginByToken(fileAction.Token); if (string.IsNullOrEmpty(login)) { ApiController.SetErrorResponse(e); return; } var folders = _userTableDataBase.GetAvailableFolders(login); var databaseFiles = _syncTableDataBase.GetSyncStates(login); var serverFiles = new List <FileInfoModel>(); foreach (var folder in folders) { var rootFiles = _fileManager.GetFiles(folder); serverFiles.AddRange(rootFiles); } var deviceFiles = bodyRequest.Files.Select(Convert).ToList(); var resultServerRemoveFiles = _serverRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles); var response = new SyncFilesResponse(); var resultClientRemoveFiles = _clientRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles); AddFilesRemoveResponse(resultClientRemoveFiles, response); var resultServerAddFiles = _serverAddFiles.Get(databaseFiles, deviceFiles, serverFiles); AddUploadRequest(resultServerAddFiles, response); var resultClientAddFiles = _clientAddFiles.Get(databaseFiles, deviceFiles, serverFiles); AddFilesAddResponse(resultClientAddFiles, response); var resultClientUpdateFiles = _clientUpdateFiles.Get(databaseFiles, deviceFiles, serverFiles); AddUpdatedResponse(resultClientUpdateFiles, response); var clientServerExistFiles = _clientServerExistFiles.Get(databaseFiles, deviceFiles, serverFiles); _syncTableDataBase.AddStates(login, clientServerExistFiles.Select(x => x.Path).ToArray()); _syncTableDataBase.RemoveSyncStates(login, resultServerRemoveFiles.Select(x => x.Path).ToList()); foreach (var filePath in resultServerRemoveFiles.ToList()) { _fileManager.RemoveFile(filePath.Path); RaiseSendMessage($"Remove {filePath.Path}"); } ApiController.SendResponse(e, response); }
public void ActionTest() { var databaseFiles = new List <string> { Remove_it_on_server_side, Remove_it_on_client_side, Update_it_on_client_side, }; var deviceFiles = new List <FileInfoModel> { new FileInfoModel(Remove_it_on_client_side, 1), new FileInfoModel(Add_it_on_server_side, 1), new FileInfoModel(Update_it_on_client_side, 1), }; var serverFiles = new List <FileInfoModel> { new FileInfoModel(Remove_it_on_server_side, 1), new FileInfoModel(Add_it_on_client_side, 1), new FileInfoModel(Update_it_on_client_side, 2), }; void CheckAssert(IList <FileInfoModel> result, string element) { Assert.AreEqual(result.Count, 1); Assert.AreEqual(result.FirstOrDefault()?.Path, element); } var serverRemoveFiles = new ServerRemoveFiles(); var resultServerRemoveFiles = serverRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles); CheckAssert(resultServerRemoveFiles, Remove_it_on_server_side); var clientRemoveFiles = new ClientRemoveFiles(); var resultClientRemoveFiles = clientRemoveFiles.Get(databaseFiles, deviceFiles, serverFiles); CheckAssert(resultClientRemoveFiles, Remove_it_on_client_side); var serverAddFiles = new ServerAddFiles(); var resultServerAddFiles = serverAddFiles.Get(databaseFiles, deviceFiles, serverFiles); CheckAssert(resultServerAddFiles, Add_it_on_server_side); var clientAddFiles = new ClientAddFiles(); var resultClientAddFiles = clientAddFiles.Get(databaseFiles, deviceFiles, serverFiles); CheckAssert(resultClientAddFiles, Add_it_on_client_side); var clientUpdateFiles = new ClientUpdateFiles(); var resultClientUpdateFiles = clientUpdateFiles.Get(databaseFiles, deviceFiles, serverFiles); CheckAssert(resultClientUpdateFiles, Update_it_on_client_side); }