/// <summary> /// Find pmx in folder /// </summary> /// <param name="path">The path contain the pmx files</param> private void GetMmdObjects(string path) { var objects = Directory .EnumerateFiles(path, "*.*", SearchOption.AllDirectories).Where(s => Path.GetExtension(s).EndsWith(".pmx", true, CultureInfo.CurrentCulture)); foreach (var x in objects) { var obj = new MMDObject(x, x.Remove(x.LastIndexOf("\\")), path); ObservedMMDObjects.Add(obj); } }
/// <summary> /// Define observe /// </summary> private void ObservableSettings() { // Handle add new // TODO: Add filter var watchNew = WatchedFolders.ObserveAdd(); // Get pmx objects watchNew.Subscribe(x => GetMmdObjects(x.Value)); // Handle watch events //watchNew.Select(x => new FileSystemWatcher(x.Value)) // .Do(x => x.Created += (_, __) => { }) // .Do(x => x.Changed += (_, __) => { }) // .Do(x => x.Deleted += (_, __) => { }) // .Subscribe(x => FileSystemWatchers.Add(x)); // Handle remove var folderRemove = WatchedFolders.ObserveRemove(); folderRemove .SelectMany(x => ObservedMMDObjects.ToList() .Where(f => f.WatchedFolder == x.Value)) .ForEachAsync(x => ObservedMMDObjects.Remove(x)) .Subscribe(); //folderRemove.Select(x => FileSystemWatchers.Where(f => f.Path == x.Value).FirstOrDefault()) // .Do(x => x.Dispose()) // .Subscribe(x => FileSystemWatchers.Remove(x)); Observable.Timer(TimeSpan.FromSeconds(1)) .Subscribe(_ => { GameObject.Find("MMDRenderer").GetComponent <PreviewBuilder.PreviewBuilder>().OnRenderComplete += () => { System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor; ObservedMMDObjects.Clear(); Debug.Log("Reload"); foreach (var watchedFolder in WatchedFolders) { GetMmdObjects(watchedFolder); } System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default; }; }); }