public async Task <bool> MoveFile(Organization org, string srcFullName, string dstFullName) { Log.LogDebug("MoveFile: org={0} {1}, srcFullName={2}, dstFullName={3}", org.shortName, org.filespaceId, srcFullName, dstFullName); try { var dstPath = dstFullName.Substring(0, dstFullName.LastIndexOf("/", StringComparison.Ordinal)) + "/"; if (!await FolderExists(org.filespaceId, dstPath)) { var resultCreate = await MakeFolder(org.filespaceId, dstPath); if (!resultCreate) { Log.LogError("Can not create folder for org {0} folder {1}", org.shortName, dstPath); return(false); } } var renParams = new RenParams { filespaceid = org.filespaceId, path = srcFullName, newfilespaceid = org.filespaceId, newPath = dstFullName, merge = false, replace = true }; var renResult = await ExecuteRequest <RenResult>(Ticket, "Ren", renParams); if (renResult != null) { if (renResult.success || renResult.errorid.Contains("INVALID_OPERATION_FILE_IS_LOCKED")) { return(true); } CheckForInvalidTicket(renResult, "MoveFile"); } else { Log.LogError("Null result from MoveFile for org {0} file {1}", org.shortName, srcFullName); } } catch (Exception ex) { Log.LogError("Failed to move TCC file for org {0} file {1}: {2}", org.shortName, srcFullName, ex.Message); } return(false); }
public bool MoveFile(Organization org, string srcFullName, string dstFullName) { const string FILE_CHECKED_OUT_ERROR_ID = "INVALID_OPERATION_FILE_IS_LOCKED"; Log.LogDebug("MoveFile: org={0} {1}, srcFullName={2}, dstFullName={3}", org.shortName, org.filespaceId, srcFullName, dstFullName); try { if (!FolderExists(org.filespaceId, dstFullName.Substring(0, dstFullName.LastIndexOf("/")) + "/")) { var mkdirParams = new MkDir { filespaceid = org.filespaceId, force = true, path = dstFullName.Substring(0, dstFullName.LastIndexOf("/")) + "/" }; var resultCreate = ExecuteRequest(Ticket, Method.GET, "/tcc/MkDir", mkdirParams, typeof(RenResult)); if (resultCreate == null) { Log.LogError("Can not create folder for org {0} folder {1}", org.shortName, dstFullName.Substring(0, dstFullName.LastIndexOf("/")) + "/"); return(false); } } var renParams = new RenParams { filespaceid = org.filespaceId, path = srcFullName, newfilespaceid = org.filespaceId, newPath = dstFullName, merge = false, replace = true }; var result = ExecuteRequest(Ticket, Method.GET, "/tcc/Ren", renParams, typeof(RenResult)); var renResult = result as RenResult; if (renResult != null && !renResult.success && renResult.errorid.Contains(FILE_CHECKED_OUT_ERROR_ID)) { Log.LogInformation($"File {srcFullName} for org {org.shortName} is locked, attempting to cancel checkout"); var cancelled = CancelCheckout(org, srcFullName); if (cancelled) { Log.LogInformation($"Retrying MoveFile for {srcFullName} for org {org.shortName}"); result = ExecuteRequest(Ticket, Method.GET, "/tcc/Ren", renParams, typeof(RenResult)); renResult = result as RenResult; } } if (renResult != null) { if (renResult.success || renResult.errorid.Contains("INVALID_OPERATION_FILE_IS_LOCKED")) { return(true); } CheckForInvalidTicket(renResult, "MoveFile"); } else { Log.LogError("Null result from MoveFile for org {0} file {1}", org.shortName, srcFullName); } } catch (Exception ex) { Log.LogError("Failed to move TCC file for org {0} file {1}: {2}", org.shortName, srcFullName, ex.Message); } return(false); }