void SubscribeToChanges(DBXItem item, Action <List <DBXFileChange> > onChange) { if (!OnChangeCallbacksDict.ContainsKey(item)) { // create new list for callbacks OnChangeCallbacksDict.Add(item, new List <Action <List <DBXFileChange> > >()); } OnChangeCallbacksDict[item].Add(onChange); }
/// <summary> /// Moves file or folder from dropboxFromPath to dropboxToPath /// </summary> /// <param name="dropboxFromPath">From path</param> /// <param name="dropboxToPath">To path</param> /// <param name="onResult">Result callback containing metadata of moved object</param> public void Move(string dropboxFromPath, string dropboxToPath, Action <DropboxRequestResult <DBXItem> > onResult) { var prms = new DropboxMoveFileRequestParams(); prms.from_path = dropboxFromPath; prms.to_path = dropboxToPath; MakeDropboxRequest(MOVE_ENDPOINT, prms, (jsonStr) => { DBXItem metadata = null; try { var root = JSON.FromJson <Dictionary <string, object> >(jsonStr); var metadata_dict = root["metadata"] as Dictionary <string, object>; if (metadata_dict[".tag"].ToString() == "file") { metadata = DBXFile.FromDropboxDictionary(metadata_dict); } else if (metadata_dict[".tag"].ToString() == "folder") { metadata = DBXFolder.FromDropboxDictionary(metadata_dict); } }catch (Exception ex) { _mainThreadQueueRunner.QueueOnMainThread(() => { onResult(DropboxRequestResult <DBXItem> .Error(new DBXError(ex.Message, DBXErrorType.ParsingError))); }); return; } _mainThreadQueueRunner.QueueOnMainThread(() => { onResult(new DropboxRequestResult <DBXItem>(metadata)); }); }, onProgress: (progress) => {}, onWebError: (error) => { _mainThreadQueueRunner.QueueOnMainThread(() => { if (error.ErrorType == DBXErrorType.RemotePathAlreadyExists) { error.ErrorDescription = "Can't move file: " + dropboxToPath + " already exists"; } onResult(DropboxRequestResult <DBXItem> .Error(error)); }); }); }
// FILE OPERATIONS /// <summary> /// Deletes file or folder on Dropbox /// </summary> /// <param name="dropboxPath">Path to file or folder on Dropbox or inside of Dropbox App folder (depending on accessToken type). Should start with "/". Example:/DropboxSyncExampleFolder/image.jpg</param> /// <param name="onResult">Callback function that receives DropboxRequestResult with DBXItem metadata of deleted file or folder</param> public void Delete(string dropboxPath, Action <DropboxRequestResult <DBXItem> > onResult) { var prms = new DropboxDeletePathRequestParams(); prms.path = dropboxPath; MakeDropboxRequest(DELETE_ENDPOINT, prms, (jsonStr) => { DBXItem metadata = null; try { var root = JSON.FromJson <Dictionary <string, object> >(jsonStr); var metadata_dict = root["metadata"] as Dictionary <string, object>; if (metadata_dict[".tag"].ToString() == "file") { metadata = DBXFile.FromDropboxDictionary(metadata_dict); } else if (metadata_dict[".tag"].ToString() == "folder") { metadata = DBXFolder.FromDropboxDictionary(metadata_dict); } }catch (Exception ex) { _mainThreadQueueRunner.QueueOnMainThread(() => { onResult(DropboxRequestResult <DBXItem> .Error(new DBXError(ex.Message, DBXErrorType.ParsingError))); }); return; } _mainThreadQueueRunner.QueueOnMainThread(() => { onResult(new DropboxRequestResult <DBXItem>(metadata)); }); }, onProgress: (progress) => {}, onWebError: (error) => { _mainThreadQueueRunner.QueueOnMainThread(() => { onResult(DropboxRequestResult <DBXItem> .Error(error)); }); }); }