コード例 #1
0
        void CheckDuplicate(DItem item)
        {
            Dictionary <string, int> dicDup = new Dictionary <string, int>();

            foreach (DItem child in item.Children)
            {
                if (child.IsFolder)
                {
                    CheckDuplicate(child);
                    if (child.operation == Operation.CHANGED)
                    {
                        item.operation = Operation.CHANGED;
                    }
                }
                else if (dicDup.ContainsKey(child.Name))
                {
                    dupList.Add(child);
                    item.operation = child.operation = Operation.CHANGED;
                }
                else
                {
                    dicDup[child.Name] = 1;
                }
            }
        }
コード例 #2
0
        async Task get_children(DItem dItem)
        {
            IItemRequestBuilder irb = string.IsNullOrEmpty(dItem.Id) ?
                                      oneDriveClient.Drive.Root : oneDriveClient.Drive.Items[dItem.Id];

            try
            {
                List <Task> tasks   = new List <Task>();
                var         request = irb.Children.Request()
                                      .Select("id,name,createdDateTime,size,file,folder,parentReference,webUrl");
                while (request != null)
                {
                    var children = await request
                                   .GetAsync();

                    foreach (var item in children)
                    {
                        DItem child = new DItem
                        {
                            Id          = item.Id,
                            Name        = item.Name,
                            Size        = item.Size,
                            WebUrl      = item.WebUrl,
                            Checksum    = item.File != null && item.File.Hashes != null ? item.File.Hashes.Crc32Hash : null,
                            CreatedDate = item.CreatedDateTime.Value.DateTime,
                            Path        = item.ParentReference.Path,

                            IsFolder = item.Folder != null,

                            Parent = dItem
                        };

                        dItem.Children.Add(child);

                        if (!child.IsFolder)
                        {
                            child.CountFile = 1;
                        }
                        else if (item.Folder.ChildCount > 0)
                        {
                            tasks.Add(get_children(child));
                        }
                    }

                    // next request if exceed 200 item
                    request = children.NextPageRequest;
                }

                await Task.WhenAll(tasks);

                dItem.Size      = dItem.Children.Sum(i => ((KFile)i).Size);
                dItem.CountFile = dItem.Children.Sum(i => ((KFile)i).CountFile);
            }
            catch (ServiceException ex)
            {
                MessageBox.Show(ex.Error.Message);
            }
        }
コード例 #3
0
        async Task OneDrive()
        {
            await get_authorize();

            rootCloud = new DItem();
            await get_children((DItem)rootCloud);

            show_folder_grid(rootCloud);

            SaveData(DATA_ONE_DRIVE);
        }
コード例 #4
0
 void SaveMD5(DItem item, string path, StringBuilder fileContent)
 {
     foreach (DItem child in item.Children)
     {
         if (child.IsFolder)
         {
             SaveMD5(child, Path.Combine(path, child.Name), fileContent);
         }
         else
         {
             fileContent.AppendLine($"{child.Checksum} *{Path.Combine(path, child.Name)}");
         }
     }
 }
コード例 #5
0
        void CalculateSize(DItem item)
        {
            foreach (DItem child in item.Children)
            {
                if (child.IsFolder)
                {
                    CalculateSize(child);
                }
                else
                {
                    child.CountFile = 1;
                }
            }

            item.Size      = item.Children.Sum(i => ((KFile)i).Size);
            item.CountFile = item.Children.Sum(i => ((KFile)i).CountFile);
        }
コード例 #6
0
        async Task GDrive()
        {
            if (credential == null)
            {
                using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
                {
                    credential = await GoogleWebAuthorizationBroker
                                 .AuthorizeAsync(
                        stream,
                        new[] { DriveService.Scope.DriveReadonly },
                        Environment.UserName,
                        CancellationToken.None,
                        new FileDataStore("oauth/drive"))
                    ;
                }

                driveService = new DriveService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = this.GetType().ToString(),
                });
            }

            var req = driveService.About.Get();

            req.Fields = "user(displayName,photoLink, me, emailAddress), storageQuota(limit,usage), maxImportSizes, maxUploadSize";
            About ab = await req.ExecuteAsync();

            lbUserinfo.Text      = $"{ab.User.DisplayName} - {ab.User.EmailAddress}";
            lbStorageamount.Text = $"{ab.StorageQuota.Usage.ToReadableSize()}/{ab.StorageQuota.Limit.ToReadableSize()}";

            List <DItem> listfiles = new List <DItem>();
            string       pageToken = null;

            do
            {
                // Define parameters of request.
                FilesResource.ListRequest request = driveService.Files.List();
                request.Fields    = "nextPageToken, files(id,name,size,mimeType,parents,webViewLink,md5Checksum,createdTime,ownedByMe)";
                request.Spaces    = "drive";
                request.Q         = "(trashed = false) and ('me' in owners)";
                request.PageToken = pageToken;
                request.PageSize  = 1000;

                // List files.
                var result = await request.ExecuteAsync();

                listfiles.AddRange(result.Files.Where(f => f.OwnedByMe == true).Select(f =>
                {
                    try
                    {
                        var x = new DItem
                        {
                            Id          = f.Id,
                            Name        = f.Name,
                            Size        = f.Size,
                            IsFolder    = f.MimeType == "application/vnd.google-apps.folder",
                            Checksum    = f.Md5Checksum,
                            CreatedDate = f.CreatedTime.Value,

                            ParentId = f.Parents[0],
                            WebUrl   = f.WebViewLink
                        };
                        return(x);
                    }
                    catch (Exception ex)
                    {
                        var a = ex;
                        return(null);
                    }
                }));

                pageToken = result.NextPageToken;
            }while (pageToken != null);

            Dictionary <string, DItem> dicFolder = listfiles.ToDictionary(i => i.Id);

            foreach (DItem item in listfiles)
            {
                if (!dicFolder.ContainsKey(item.ParentId))
                {
                    rootCloud = new DItem();
                    dicFolder[item.ParentId] = (DItem)rootCloud;
                }

                item.Parent = dicFolder[item.ParentId];
                item.Parent.Children.Add(item);
            }

            CalculateSize((DItem)rootCloud);
            show_folder_grid(rootCloud);

            lbSource.Text = "Cloud";

            SaveData(DATA_GDRIVE);
        }