private async Task <IGoogleDriveFile> DoCopyFileAsync(IGoogleDriveFile from, IGoogleDriveFolder toFolder, string newName, PauseToken pt, CancellationToken ct, IProgress <GoogleDriveProgress> progress, GoogleDriveProgress progressPayload)
        {
            var driveService = await GetDriveServiceAsync().ConfigureAwait(false);

            progressPayload.Count++;
            progressPayload.Current = from;
            progressPayload.Status  = string.Format("Copying file '{0}' to folder '{1}'...", from.Name, toFolder.Name);
            progress.TryReport(() => progressPayload);

            await pt.WaitWhilePausedAsync().ConfigureAwait(false);

            var toFile = new File {
                Parents = new List <string> {
                    toFolder.Id
                }, Name = newName
            };
            var copyRequest = driveService.Files.Copy(toFile, from.Id);

            copyRequest.SupportsTeamDrives = true;
            var resp = await copyRequest.ExecuteAsync(ct).ConfigureAwait(false);

            var result = new GoogleDriveFile(resp, toFolder);

            RaiseFileCreated(result);
            return(result);
        }
        public Task <IGoogleDriveFile> DoCopyAsync(IGoogleDriveFile from, IGoogleDriveFolder toFolder, string newName, PauseToken pt, CancellationToken ct, IProgress <GoogleDriveProgress> progress, GoogleDriveProgress progressPayload)
        {
            var folder = from as IGoogleDriveFolder;

            return(folder != null
        ? DoCopyFolderAsync(folder, toFolder, newName, pt, ct, progress, progressPayload)
        : DoCopyFileAsync(from, toFolder, newName, pt, ct, progress, progressPayload));
        }
예제 #3
0
 public GoogleDriveActivity(string user, string action, string name, string id, IGoogleDriveFile file)
 {
     User   = user;
     Action = action;
     Name   = name;
     Id     = id;
     File   = file;
 }
예제 #4
0
        private ITreeNode CreateTreeNode(IGoogleDriveFile f, TreeNodeContainer parent)
        {
            if (f is IGoogleDriveFolder)
            {
                return(new TreeNodeContainer(f, parent, this));
            }

            return(new TreeNodeData(f, parent, this));
        }
예제 #5
0
        protected virtual void RaiseFileCreated(IGoogleDriveFile file)
        {
            var handler = FileCreated;

            if (handler != null)
            {
                handler(this, new GoogldDriveFileCreatedEventArgs(file));
            }
        }
 public Task <IGoogleDriveFile> CopyAsync(IGoogleDriveFile from, IGoogleDriveFolder toFolder, string newName = null, PauseToken pt = default(PauseToken), CancellationToken ct = default(CancellationToken), IProgress <GoogleDriveProgress> progress = null, GoogleDriveProgress progressPayload = null)
 {
     return(Task.Run(async() =>
     {
         var payload = progressPayload ?? new GoogleDriveProgress();
         var result = await DoCopyAsync(from, toFolder, newName, pt, ct, progress, payload).ConfigureAwait(false);
         progress.TryReport(() => payload);
         return result;
     }, ct));
 }
예제 #7
0
        public async void AddAdhocFileAsync(IGoogleDriveFile file)
        {
            var adhocNode = AdhocNode as TreeNodeContainer;

            if (adhocNode != null)
            {
                if (adhocNode.HasDummyChild)
                {
                    await adhocNode.ExpandAsync().ConfigureAwait(true);
                }

                _dispatcher.CheckedInvoke(() => adhocNode.AddData(file));
            }
        }
예제 #8
0
        public static IGoogleDriveFolder RootFolder(this IGoogleDriveFile file)
        {
            if (file == null)
            {
                return(null);
            }

            var folder = file as IGoogleDriveFolder ?? (IGoogleDriveFolder)file.Parent;

            if (folder != null)
            {
                return(GetRootFolder(folder));
            }

            return(null);
        }
예제 #9
0
 public GoogldDriveFileCreatedEventArgs(IGoogleDriveFile file)
 {
     File = file;
 }
예제 #10
0
 public GoogleDriveFileInfoInvalid(IGoogleDriveFile file) : base(file)
 {
 }
예제 #11
0
        public static bool IsTeamDriveFile(this IGoogleDriveFile file)
        {
            var root = file.RootFolder();

            return(root != null && root.File is GoogleTeamDrive);
        }
예제 #12
0
 public static bool IsFolder(this IGoogleDriveFile file)
 {
     return(file is IGoogleDriveFolder && file.Type == MimeType.Folder);
 }
        private async Task <IReadOnlyCollection <Tuple <IGoogleDriveFile, int> > > DoRecursiveGetChildFilesAsync(IGoogleDriveFile file, int start, string filenameQuery, CancellationToken ct, IProgress <string> progress)
        {
            var folder = file as IGoogleDriveFolder;

            if (folder != null)
            {
                var result = new List <Tuple <IGoogleDriveFile, int> > {
                    Tuple.Create(file, start++)
                };
                var q = string.Format(CommonQueries.LiveFileFormat, folder.Id);
                progress.TryReport("Recursively load files in " + folder + ", FileName: " + filenameQuery);
                var files = await DoRecursiveGetChildFilesAsync(folder, q, start, filenameQuery, ct, progress).ConfigureAwait(false);

                result.AddRange(files);
                return(result);
            }

            return(new[] { Tuple.Create(file, start) });
        }
예제 #14
0
        private Task <IReadOnlyCollection <IGoogleDriveFile> > GetRootsAsync(GoogleDriveFolder parent)
        {
            IReadOnlyCollection <IGoogleDriveFile> roots = new IGoogleDriveFile[] { _myDriveFolder, _teamDriveFolder, _activityFolder, _adhocFolder, _searchResultFolder };

            return(Task.FromResult(roots));
        }
예제 #15
0
 public static bool Match(this IGoogleDriveFile file, string str)
 {
     return(file.Name == str || file.Id == str);
 }
예제 #16
0
 public GoogleDriveFileInfoModel(IGoogleDriveFile file)
 {
     _file = file;
 }
 public GoogleDriveImageFileInfoModel(IGoogleDriveFile file) : base(file)
 {
 }