/// <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);
        }
Example #3
0
        /// <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>
        /// 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>
        /// 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);
        }