/// <summary> /// Obtains information about a cloud file or folder by ID or path; returns NULL for not found /// </summary> /// <param name="connector">connection to use</param> /// <param name="objectType">specifies file or folder</param> /// <param name="specType">specifies format of supplied specification (id or path)</param> /// <param name="request">file or folder specification</param> /// <returns>null if file not found (404)</returns> public static async Task <CloudFile> GetCloudObjectInfo(CloudElementsConnector connector, CloudElementsConnector.DirectoryEntryType objectType, CloudElementsConnector.FileSpecificationType specType, string request) { CloudFile CloudObjectInfo; try { CloudObjectInfo = await connector.GetDocEntryMetaData(objectType, specType, request, true); } catch (System.Net.Http.HttpRequestException hx) { if (hx.Message.IndexOf("404") > 0) { string traceInfo = string.Format("ce(GetCloudObjectInfo,{1},{2}) {0}", hx.Message, specType, request); connector.OnDiagTrace(traceInfo); CloudObjectInfo = null; } else { throw hx; } } return(CloudObjectInfo); }
/// <summary> /// Copies a file (or folder) /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileData">Cloud File Data</param> /// <param name="targetPath">new path (including name)</param> /// <returns>CloudFile reference to the new file </returns> public static async Task <CloudFile> Copy(CloudElementsConnector connector, CloudFile sourceFile, string targetPath) { CloudElementsConnector.DirectoryEntryType deType = sourceFile.EntryType; sourceFile = await connector.Copy(deType, CloudElementsConnector.FileSpecificationType.ID, sourceFile.id, targetPath); return(sourceFile); }
/// <summary> /// Removes a tag and updates if necessary /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileData">Cloud File Data, including current tags (if any)</param> /// <param name="tagValues">list of tags to be removed</param> /// <returns>Update CloudFile</returns> public static async Task <CloudFile> DeleteTag(CloudElementsConnector connector, CloudFile fileData, List <string> tagValues) { bool mustStore = false; foreach (var tagItem in tagValues) { if (fileData.RemoveTag(tagItem)) { if (!mustStore) { mustStore = true; } } } if (mustStore) { // store CloudElementsConnector.DirectoryEntryType deType = CloudElementsConnector.DirectoryEntryType.File; if (fileData.directory) { deType = CloudElementsConnector.DirectoryEntryType.Folder; throw new ArgumentException("CloudFile must point to a file; folders do not support tags"); } CloudFile PatchData = new CloudFile(); PatchData.id = fileData.id; PatchData.tags = fileData.tags; fileData = await connector.PatchDocEntryMetaData(deType, CloudElementsConnector.FileSpecificationType.ID, fileData.id, PatchData); } return(fileData); }
/// <summary> /// Updates tags and stores if necessary /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileData">Cloud File Data, including current tags (if any)</param> /// <param name="tagValue">tag to be stored</param> /// <returns>Update CloudFile</returns> public static async Task <CloudFile> SetTag(CloudElementsConnector connector, CloudFile fileData, string tagValue) { List <string> tagValues = new List <string>(); tagValues.Add(tagValue); fileData = await SetTag(connector, fileData, tagValues); return(fileData); }
/// <summary> /// Gets CloudFile Meta Data, updates tags and stores if necessary /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileSpecType">Indicates if ID or Path</param> /// <param name="identifier">ID or Path</param> /// <param name="tagValues">list of tags to be stored</param> /// <returns>Update CloudFile</returns> public static async Task <CloudFile> SetTag(CloudElementsConnector connector, CloudElementsConnector.FileSpecificationType fileSpecType, string identifier, List <string> tagValues) { CloudFile fileData; fileData = await connector.GetFileMetaData(fileSpecType, identifier); fileData = await SetTag(connector, fileData, tagValues); return(fileData); }
/// <summary> /// Gets CloudFile Meta Data, updates tags and stores if necessary /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileSpecType">Indicates if ID or Path</param> /// <param name="identifier">ID or Path</param> /// <param name="tagValue">tag to be stored</param> /// <returns>Update CloudFile</returns> public static async Task <CloudFile> SetTag(CloudElementsConnector connector, CloudElementsConnector.FileSpecificationType fileSpecType, string identifier, string tagValue) { List <string> tagValues = new List <string>(); tagValues.Add(tagValue); CloudFile fileData; fileData = await SetTag(connector, fileSpecType, identifier, tagValues); return(fileData); }
/// <summary> /// Moves (and/or renames) a file (or folder) /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileData">file object</param> /// <param name="newPath">new path</param> /// <returns>Updated CloudFile</returns> public static async Task <CloudFile> Move(CloudElementsConnector connector, CloudFile sourceFile, string newPath) { CloudElementsConnector.DirectoryEntryType deType = sourceFile.EntryType; CloudFile PatchData = new CloudFile(); PatchData.id = sourceFile.id; PatchData.path = newPath; sourceFile = await connector.PatchDocEntryMetaData(deType, CloudElementsConnector.FileSpecificationType.ID, sourceFile.id, PatchData); return(sourceFile); }
/// <summary> /// Returns email address of last file writer, if available /// </summary> /// <returns></returns> public static string LastWrittenBy(CloudElementsConnector connector, CloudFile targetFile) { if (!targetFile.HasRaw) { return(string.Empty); } if (!connector.EndpointOptions.HasModifiedBy) { return(string.Empty); } return(targetFile.RawValue(connector.EndpointOptions.ModifiedByRawIDPath)); }
/// <summary> /// Changes the name of a file (or folder) /// </summary> /// <param name="connector">The API connector instance</param> /// <param name="fileData">Cloud File Data</param> /// <param name="newFilename">new name</param> /// <returns>Updated CloudFile</returns> public static async Task <CloudFile> Rename(CloudElementsConnector connector, CloudFile targetFile, string newFilename) { if (newFilename.IndexOf("/") >= 0) { throw new ArgumentException("newFilename cannot include path information"); } CloudElementsConnector.DirectoryEntryType deType = targetFile.EntryType; CloudFile PatchData = new CloudFile(); PatchData.id = targetFile.id; PatchData.name = newFilename; targetFile = await connector.PatchDocEntryMetaData(deType, CloudElementsConnector.FileSpecificationType.ID, targetFile.id, PatchData); return(targetFile); }
/// <summary> /// Returns SHA1, if available /// </summary> /// <returns></returns> public static string ContentHash(CloudElementsConnector connector, CloudFile targetFile) { if (!targetFile.HasRaw) { return(string.Empty); } if (!connector.EndpointOptions.HasFileHashAlgorithm) { return(string.Empty); } Newtonsoft.Json.Linq.JToken valueToken = targetFile.RawValue(connector.EndpointOptions.FileHashRawIDPath); // targetFile.raw.GetValue("sha1"); if (valueToken == null) { return(string.Empty); } return(valueToken.ToString()); }
/// <summary> /// Obtains information about a cloud file by ID or path; returns NULL for not found /// </summary> /// <param name="connector">connection to use</param> /// <param name="specType">specifies format of supplied file specification</param> /// <param name="requestFilePath">file specification</param> /// <returns>null if file not found (404)</returns> public static async Task <CloudFile> GetCloudFileInfo(CloudElementsConnector connector, CloudElementsConnector.FileSpecificationType specType, string requestFilePath) { return(await GetCloudObjectInfo(connector, CloudElementsConnector.DirectoryEntryType.File, specType, requestFilePath)); }