private Model.DataStructures.DownloadItem GetDownloadItem(string downloadPath, File file, bool writable, bool run, Option <string> componentName)
 {
     if (PatternsToSynchronize.Count() == 1 && PatternsToSynchronize[0].Equals("/"))
     {
         return(new Model.DataStructures.DownloadFolder(downloadPath));
     }
     else if (componentName.IsSome)
     {
         return(new Model.DataStructures.TacTon.TactonDownloadFile(file, downloadPath, writable, run, componentName.Get()));
     }
     else
     {
         return(new Model.DataStructures.DownloadFile(file, downloadPath, writable, run));
     }
 }
        /************************************************************************************************************/
        /************************************************************************************************************/
        private bool AbhereSynchronizationRules(FileFolder file, bool recursive, bool children)
        {
            if (!children && !recursive && !(file.Folder.FullName.Equals(VaultPath, StringComparison.InvariantCultureIgnoreCase) || (file.Folder.FullName + "/" + file.File.Name).Equals(VaultPath, StringComparison.InvariantCultureIgnoreCase)))
            {
                return(false);
            }

            if (!children && !(file.Folder.FullName + "/" + file.File.Name).ToLower().Contains(VaultPath.ToLower()))
            {
                return(false);
            }

            if (((PatternsToSynchronize.Count() > 0) && (!PatternsToSynchronize.Any(s => file.File.Name.ToLower().EndsWith(s.ToLower())))) && !((PatternsToSynchronize.Count() == 1) && (PatternsToSynchronize[0].Equals("/", StringComparison.InvariantCultureIgnoreCase))))
            {
                return(false);
            }

            if ((Excludes.Count() > 0) && (Excludes.Any(s => (file.Folder.FullName + "/" + file.File.Name).ToLower().Contains(s.ToLower()))))
            {
                return(false);
            }

            return(true);
        }