void AddFilesToList(CloudFolder folder, ref List <CloudFile> flatFilesList)
 {
     foreach (CloudFolder subfolder in folder.Subfolders)
     {
         flatFilesList.AddRange(subfolder.Files);
         AddFilesToList(subfolder, ref flatFilesList);
     }
 }
        void AddCheckedFilesToYadisk()
        {
            if (checkedFilesSize > MainForm.freeSpace)
            {
                MessageBox.Show("Not enougt free space on Yandex disk");
                return;
            }
            if (checkedFiles.Count > 0)
            {
                DialogResult dialogResult = MessageBox.Show(checkedFiles.Count + $" new files found. Size: {Math.Round(checkedFilesSize / 1000000.0, 2)} MB. Download?", "", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    foreach (CloudFile file in checkedFiles)
                    {
                        string      savePath      = MainForm.cloudPublicFolder.Name + file.Path;
                        string[]    folders       = ParsePath(savePath);
                        CloudFolder currentFolder = (CloudFolder)MainForm.yadiskFolder.Subfolders[2];
                        savePath = currentFolder.Path;
                        for (int i = 0; i < folders.Length; i++)
                        {
                            if (!currentFolder.Subfolders.ConvertAll(x => x.Name).Contains(folders[i]))
                            {
                                Link        linki         = MainForm.rc.CreateResource(currentFolder.Path.Replace("disk:", "") + "/" + folders[i]);
                                CloudFolder createdFolder = new CloudFolder(folders[i], DateTime.Now, DateTime.Now, 0);
                                createdFolder.Path = currentFolder.Path + "/" + folders[i];
                                currentFolder.Subfolders.Add(createdFolder);
                            }
                            currentFolder = (CloudFolder)currentFolder.Subfolders.Find(x => x.Name == folders[i]);
                            savePath     += "/" + folders[i];
                        }
                        //Uri link = (rc.GetPublicResourceDownloadLink(cloudPublicFolder.PublicKey, file.Path)).Href;

                        //TODO: add whole folders if all files inside are checked
                        Link link = MainForm.rc.SaveToDiskPublicResource(MainForm.cloudPublicFolder.PublicKey, file.Name, file.Path, savePath);
                    }
                    MessageBox.Show("Finished");
                }
            }
            else
            {
                MessageBox.Show("No files checked!");
            }
        }
        public SyncFilesForm(CloudFolder newFilesFolder, CloudServiceType cloudServiceName)
        {
            InitializeComponent();

            SendMessage(filter_textBox.Handle, 0x1501, 1, "Filter by name");

            overwriteMode_comboBox.DataSource    = new BindingSource(overwriteModes, null);
            overwriteMode_comboBox.DisplayMember = "Value";
            overwriteMode_comboBox.ValueMember   = "Key";

            nodeCheckBox2.IsVisibleValueNeeded += CheckIndex;

            cloudServiceType = cloudServiceName;
            if (cloudServiceType == CloudServiceType.Mega)
            {
                downloadMega_button.Enabled  = true;
                getJdLinks_button.Enabled    = false;
                downloadFiles_button.Enabled = false;
            }
            if (cloudServiceType == CloudServiceType.Yadisk)
            {
                if (Properties.Settings.Default.loginedYandex)
                {
                    addFilesToYadisk_button.Enabled = true;
                }

                getJdLinks_button.Enabled    = true;
                downloadFiles_button.Enabled = false;
            }

            progressBars = new List <ProgressBar> {
                progressBar1, progressBar2, progressBar3, progressBar4
            };
            progressLabels = new List <Label> {
                label1, label2, label3, label4, DownloadProgress_label
            };

            rootFolder = newFilesFolder;
            nodeCheckBox2.CheckStateChanged     += new EventHandler <TreePathEventArgs>(NodeCheckStateChanged);
            newFilesTreeViewAdv.ShowNodeToolTips = true;
            newFilesTreeViewAdv.NodeControls[2].ToolTipProvider = new ToolTipProvider();
            newFilesTreeViewAdv.NodeFilter = filter;
            //newFilesTreeViewAdv.Expanded += new EventHandler<TreeViewAdvEventArgs>(Form1.treeViewAdv_Expanded);
            //newFilesTreeViewAdv.Collapsed += new EventHandler<TreeViewAdvEventArgs>(Form1.treeViewAdv_Expanded);

            newFiles_model     = new TreeModel();
            newFilesFlat_model = new TreeModel();

            ColumnNode rootFlatNode = new ColumnNode(newFilesFolder.Name, newFilesFolder.Created, newFilesFolder.Modified, newFilesFolder.Size);

            newFilesFlat_model.Nodes.Add(rootFlatNode);
            ColumnNode rootNode = new ColumnNode(newFilesFolder.Name, newFilesFolder.Created, newFilesFolder.Modified, newFilesFolder.Size);

            //rootNode.Tag = newFilesFolder;
            newFilesTreeViewAdv.Model = new SortedTreeModel(newFiles_model);
            newFilesTreeViewAdv.BeginUpdate();
            newFiles_model.Nodes.Add(rootNode);

            foreach (CloudFile file in newFilesFolder.Files)
            {
                ColumnNode ffileNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                ffileNode.Tag = file;
                rootFlatNode.Nodes.Add(ffileNode);

                string[] folders = ParsePath(file.Path);
                if (folders == null)
                {
                    ColumnNode subNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                    subNode.Tag = file;
                    rootNode.Nodes.Add(subNode);
                }
                else
                {
                    ColumnNode currentNode = rootNode;
                    //creating folders nodes and file node from file path
                    string currentFolderPath = @"/"; //+ folders[0] + @"/";
                    for (int i = 0; i < folders.Length; i++)
                    {
                        if (folders[i] == "")
                        {
                        }
                        currentFolderPath += folders[i] + @"/";
                        ColumnNode subNode = new ColumnNode(folders[i], file.Created, file.Modified, 0);
                        if (currentNode.Nodes.ToList().ConvertAll(x => x.Text).Contains(folders[i]))
                        {
                            currentNode = (ColumnNode)currentNode.Nodes.ToList().Find(x => x.Text == folders[i]);
                        }
                        else
                        {
                            currentNode.Nodes.Add(subNode);
                            currentNode = subNode;
                        }
                        if (i == folders.Length - 1)
                        {
                            ColumnNode fileNode = new ColumnNode(file.Name, file.Created, file.Modified, file.Size);
                            fileNode.Tag = file;
                            currentNode.Nodes.Add(fileNode);
                        }
                    }
                }
            }
            //Form1.BuildSubfolderNodes(rootNode);
            //BuildFullFolderStructure(rootNode);
            newFilesTreeViewAdv.EndUpdate();
            newFilesTreeViewAdv.Root.Children[0].Expand();
            newFiles_model.Nodes[0].CheckState = CheckState.Checked;

            this.Show();
            //CheckAllSubnodes(newFiles_model.Nodes[0], false);
        }
 public void AddSubfolder(CloudFolder subfolder)
 {
     this.Subfolders.Add(subfolder);
     //if (subfolder.Modified > this.Modified)
     //    this.Modified = subfolder.Modified;
 }