public void Initialize()
        {
            fileWatcher = new FileSystemWatcher(FileSystem.Root, "*.nupkg")
            {
                NotifyFilter          = NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastWrite,
                IncludeSubdirectories = true
            };

            var modifiedFilesThrottledByPath = ModifiedFiles
                                               .Select(args => args.EventArgs.FullPath)
                                               .GroupBy(path => path)
                                               .Select(groupByPath => groupByPath.Throttle(QuietTime))
                                               .SelectMany(obs => obs);

            fileObserver         = modifiedFilesThrottledByPath.Subscribe(async path => await OnPackageModified(path));
            fileWatcher.Deleted += async(s, e) => await OnPackageDeleted(e.FullPath);

            fileWatcher.Renamed += async(s, e) => await OnPackageRenamed(e.OldFullPath, e.FullPath);

            fileWatcher.Error += OnFileWatcherError;

            fileWatcher.EnableRaisingEvents = true;

            dirObserver = MovedDirectories.Select(args => args.EventArgs.FullPath).Throttle(QuietTime).Subscribe(OnDirectoryMoved);
        }
예제 #2
0
        /// <summary>
        /// Adds modified files got from querying in the <see cref="LibraryFoldersCollection"/>. The query parameters include time range from <see cref="TimeClosed"/> to <seealso cref="TimeOpened"/>.
        /// </summary>
        private async Task AddModifiedFilesAsync()
        {
            TimeClosed    = RoamingSettingsHelper.GetSetting <string>("timeclosed", "0");
            ModifiedFiles = await Common.DirectoryWalker.GetModifiedFiles(LibraryFoldersCollection, TimeClosed);

            if (ModifiedFiles.Any())
            {
                RenameAddOrDeleteFiles(ModifiedFiles);
            }
        }
예제 #3
0
        public void SaveModifiedFiles()
        {
            HashSet <FileData> copy = new HashSet <FileData>(ModifiedFiles);

            foreach (FileData fileData in copy)
            {
                fileData.TrySaveFile();
            }
            ModifiedFiles.Clear();
        }
예제 #4
0
    static void OnDelete(string relativePath, string externalPath)
    {
        string externalFile = Path.Combine(externalPath, relativePath);

        Debug.Log(string.Format("Deleted: {0} now Deleting: {1}", relativePath, externalFile));

        ModifiedFiles modifiedFiles = ModifiedFiles.GetModifiedFiles();

        if (File.Exists(externalFile))
        {
            modifiedFiles.DeleteFile(externalFile);
            AssetDatabase.SaveAssets();
        }
    }
예제 #5
0
 public void Analyze()
 {
     ModifiedFiles.Clear();
     foreach (var file in Pcaps)
     {
         string hash = CalculateMD5(file);
         Console.WriteLine("\"" + hash + "\",");
         if (desiredHashes.Contains(hash))
         {
             var fileName = file.Split('\\').LastOrDefault();
             ModifiedFiles.Add(fileName);
         }
     }
     ModifiedFiles.OrderBy(x => x);
     IsAnalizeComplete = true;
 }
예제 #6
0
        public void Sync(IMp3File file, Mask mask, ISyncRule rule)
        {
            var errorFlag = true;

            _tager.CurrentFile = file;

            foreach (var operation in rule.OperationsList)
            {
                if (operation.Call(mask, _tager, file))
                {
                    OperationList.Add(operation);
                    ModifiedFiles.Add(_tager.CurrentFile);
                    errorFlag = false;
                    break;
                }
            }

            if (errorFlag)
            {
                ErrorFiles.Add(_tager.CurrentFile.Name, "Can't sync this file");
            }
        }
예제 #7
0
    static void OnNewImport(string relativePath, string path, string externalPath)
    {
        string externalFile = Path.Combine(externalPath, relativePath);

        Debug.Log(string.Format("Imported: {0} now Creating: {1}", relativePath, externalFile));

        ModifiedFiles modifiedFiles = ModifiedFiles.GetModifiedFiles();

        if (File.Exists(externalFile))
        {
            if (File.GetLastWriteTime(externalFile) < File.GetLastWriteTime(path))
            {
                modifiedFiles.AddFile(path, externalFile);
                AssetDatabase.SaveAssets();
            }
        }
        else
        {
            modifiedFiles.AddFile(path, externalFile);
            AssetDatabase.SaveAssets();
        }
    }
예제 #8
0
 private void ParseStatusResult(string stdout)
 {
     using (var reader = new StringReader(stdout))
     {
         string line;
         while ((line = reader.ReadLine()) != null)
         {
             if (line.StartsWith("M"))
             {
                 ModifiedFiles.Add(line.Substring(2).TrimStart());
             }
             if (line.StartsWith("D"))
             {
                 DeletedFiles.Add(line.Substring(2).TrimStart());
             }
             if (line.StartsWith("A"))
             {
                 NewFiles.Add(line.Substring(2).TrimStart());
             }
             // renames (R) are ignored - won't be used in a Quince repository
         }
     }
 }
예제 #9
0
    void OnGUI()
    {
        externalFolder = EditorPrefs.GetString(externalFolderKey);

        GUILayout.Label("Folder to Sync to");
        string newExternalFolder = EditorGUILayout.TextField(externalFolder);

        EditorPrefs.SetString(externalFolderKey, newExternalFolder);

        GUILayout.Space(20);
        ModifiedFiles modifiedFiles = ModifiedFiles.GetModifiedFiles();

        if (modifiedFiles.addedFiles == null || modifiedFiles.addedFiles.Count < 1)
        {
            GUILayout.BeginVertical();
            GUILayout.Label("No added files");
            GUILayout.EndVertical();
        }
        else
        {
            GUILayout.BeginVertical();

            for (int i = 0; i < modifiedFiles.addedFiles.Count; ++i)
            {
                FileMod modification = modifiedFiles.addedFiles[i];
                GUILayout.BeginHorizontal();
                GUILayout.Label(modification.sourcePath);
                if (GUILayout.Button("Discard"))
                {
                    Debug.Log("This is supposed to discard");
                    modifiedFiles.addedFiles.RemoveAt(i);
                    AssetDatabase.SaveAssets();
                }
                GUILayout.EndHorizontal();
            }


            if (GUILayout.Button("Push Changes"))
            {
                foreach (FileMod modification in modifiedFiles.addedFiles)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(modification.destinationPath));
                    File.Copy(modification.sourcePath, modification.destinationPath, true);
                }
                modifiedFiles.addedFiles.Clear();
                AssetDatabase.SaveAssets();
            }
            GUILayout.EndVertical();
        }
        GUILayout.Space(20);
        if (modifiedFiles.deletedFiles == null || modifiedFiles.deletedFiles.Count < 1)
        {
            GUILayout.BeginVertical();
            GUILayout.Label("No deleted files");
            GUILayout.EndVertical();
        }
        else
        {
            GUILayout.BeginVertical();

            foreach (string deletedFile in modifiedFiles.deletedFiles)
            {
                GUILayout.BeginHorizontal();
                GUILayout.Label(deletedFile);
                if (GUILayout.Button("Discard"))
                {
                    Debug.Log("This is supposed to discard");
                }
                GUILayout.EndHorizontal();
            }
            if (GUILayout.Button("Push Changes"))
            {
                Debug.Log("This doesn't work yet");
            }
            GUILayout.EndVertical();
        }
    }