示例#1
0
        // Return the set of existing folders found at the end of the
        // chain of the "path" represented by this FolderName.  If no such
        // folders exist, return an empty list.
        public async Task <List <Folder> > ResolveLeafFolders(
            DriveService service, Action <string> feedback)
        {
            // Find all folders named m_name, whose parents are in the
            // ParentFolderName list.  For each folder found, add a folder
            // object to the list, then invoke this method on ChildFolderName.
            Folders.Clear();
            List <Folder> parentFolders;

            if (ParentFolderName != null)
            {
                parentFolders = ParentFolderName.Folders;
            }
            else
            {
                parentFolders = new List <Folder>()
                {
                    Folder.RootFolder
                };
            }

            if (feedback != null)
            {
                string status = Resources.GetFormat(
                    "Msg_RetrievingFolderFmt",
                    m_name);
                feedback(status);
            }

            foreach (Folder parent in parentFolders)
            {
                FilesResource.ListRequest req = service.Files.List();
                req.Q = "mimeType='" + GdsDefs.MimeTypeFolder +
                        "' and name='" +
                        m_name.QueryGdriveObjectName() +
                        "' and '" +
                        parent.DriveEntry.Id +
                        "' in parents and trashed=false";
                FileList appFolders = await req.ExecuteAsync();

                foreach (GDriveFile entry in appFolders.Files)
                {
                    Folders.Add(new Folder(this, parent, entry));
                }
            }
            if (Folders.Any() && ChildFolderName != null)
            {
                return(await ChildFolderName.ResolveLeafFolders(service,
                                                                feedback));
            }
            return(Folders);
        }
示例#2
0
 // Return this FolderName or the first of its successors that does not
 // have folders. Used to find an existing partial path after
 // ResolveLeafFolders returns an empty list. Assuming
 // ResolveLeafFolders has been called, the return value's
 // ParentFolderName property value is either null (root), or an
 // instance whose Folders property contains at least one Folder.
 public FolderName FirstFolderNameWithoutFolders()
 {
     if (Folders.Any())
     {
         if (ChildFolderName != null)
         {
             return(ChildFolderName.FirstFolderNameWithoutFolders());
         }
         Debug.Fail(
             "All FolderNames have folders; ResolveLeafFolders failed");
         throw new ApplicationException(
                   "Expected empty folders in Target Folder chain.");
     }
     return(this);
 }
示例#3
0
        // Create a new folder hierarchy, parented by the first Folder in
        // the ParentFolderName link (or root if this is the top link).
        // The new hierarchy will be a set of nested folders, as modeled by
        // the "path" of the FolderName chain.
        // The top-most folder in the hierarchy will take the FolderName of
        // this link.  Return the "leaf" Folder of the hierarchy.
        public async Task <Folder> CreateNewFolderPathFrom(Folder parent,
                                                           DriveService service, Action <string> feedback
                                                           )
        {
            if (feedback != null)
            {
                string status = Resources.GetFormat(
                    "Msg_CreatingFolderFmt",
                    m_name);
                feedback(status);
            }

            GDriveFile folderMetadata = new GDriveFile()
            {
                Name     = m_name,
                MimeType = GdsDefs.MimeTypeFolder
            };

            if (parent != null)
            {
                folderMetadata.Parents = new List <string>()
                {
                    parent.DriveEntry.Id
                };
            }
            if (PluginConfig.Default.FolderColor != null)
            {
                folderMetadata.FolderColorRgb =
                    PluginConfig.Default.FolderColor.HtmlHexString;
            }
            FilesResource.CreateRequest folderCreate;
            folderCreate        = service.Files.Create(folderMetadata);
            folderCreate.Fields = "id";

            Folder newFolder = new Folder(this, parent,
                                          await folderCreate.ExecuteAsync());

            Folders.Add(newFolder);
            if (ChildFolderName != null)
            {
                return(await ChildFolderName
                       .CreateNewFolderPathFrom(newFolder, service, feedback));
            }
            return(newFolder);
        }