예제 #1
0
        private async Task operationCallDeleteFileAsync(string filename, bool checkHash = true)
        {
            Debug.WriteLine("Operation CallDelete");
            _folderSyncState.DeleteFileInLocalStatus(filename);

            if (await _serverManager.FileExistsAsync(filename))
            {
                HttpStatusCode deleteResponseCode = HttpStatusCode.NoContent;

                try
                {
                    string hash = "";
                    if (_folderSyncState.RemoteFile(filename) != null)
                    {
                        hash = _folderSyncState.RemoteFile(filename).Hash();
                    }

                    deleteResponseCode = await _serverManager.DeleteFileAsync(filename, checkHash?hash : null);
                }
                catch (Exception ex)
                {
                    userNotification(filename, SyncNotification.ServerDeleteFail, ex.Message);
                    return;
                }
                if (deleteResponseCode == HttpStatusCode.OK)
                {
                    _folderSyncState.DeleteFileInServerStatus(filename);
                    userNotification(filename, SyncNotification.SuccessfulServerDelete);
                }
                else
                if (deleteResponseCode == HttpStatusCode.Ambiguous) //File in Server is modified. User must decide.
                {
                    userConfirmationCall(new SyncConflict()
                    {
                        Filename = filename, ConflictType = SyncConflictType.NewerVersionRemoteAndLocalDeleted
                    });
                }
                else
                {
                    userNotification(filename, SyncNotification.ServerDeleteFail, deleteResponseCode.ToString());
                }
            }
            else
            {
                userNotification(filename, SyncNotification.GeneralInfo, "File doesn't exist on Server");
                _folderSyncState.DeleteFileInServerStatus(filename);
            }
        }