internal static async Task InitializeAsync() { _isIndexing.OnNext(false); Observable.Using( () => Db.Instance, db => Observable.Merge(new IObservable <object>[] { db.Set <Folder>().ToList() .ToObservable() .ObservableOnThreadPool() .Select(x => FolderViewModel.Create(x)) .Do(_musicFolders.AddOrUpdate), db.Set <Artist>().ToList() .ToObservable() .ObservableOnThreadPool() .Select(x => ArtistViewModel.Create(x)) .Do(_artistSource.AddOrUpdate) }).IgnoreElements()) .Subscribe(); AlbumSource = ArtistSource.Connect() .ObservableOnThreadPool() .MergeMany(x => x.Albums.Connect()) .AsObservableCache(); TrackSource = AlbumSource.Connect() .ObservableOnThreadPool() .MergeMany(x => x.Tracks.Connect()) .AsObservableCache(); Observable.Merge(new[] { newMusicFolderObservable.Select(_ => "Added new folder"), FolderWatcherManager.ContentChanged.Select(_ => "FolderWatcherManager.ContentChanged"), Setting.Collection.AutoRefresh.Where(x => x == true).Select(_ => Unit.Default).Select(_ => "Setting.SettingChanged[Setting.Collection.AutoRefresh]"), }) .ObservableOnThreadPool() .Throttle(TimeSpan.FromSeconds(5)) .SkipUntil(collectionAutoRefresh.Where(x => x == true)) .TakeUntil(collectionAutoRefresh.Where(x => x == false)) .Repeat() .Subscribe(async _ => { var o = new IndexService(); await o.BeginIndexAsync(); }); await FolderWatcherManager.InitializeAsync(); }
private async Task RequestAddFolderAsyncInner(StorageFolder folder) { // If this new folder is a subfolder, it shouldn't be added to db. var isSubFolder = await _musicFolders.Items.AnyAsync(x => folder.Path.StartsWith(x.Path)); if (isSubFolder) { await DialogService.NotificateAsync("Cannot add subfolder."); return; } // If this new folder is a parent folder, it shouldn't be added to db. var isParentFolder = await _musicFolders.Items.AnyAsync(x => x.Path.StartsWith(folder.Path)); if (isParentFolder) { await DialogService.NotificateAsync("Cannot add parent folder."); return; } var props = await folder.GetBasicPropertiesAsync(); var f = new Folder() { DateModified = props.DateModified, Path = folder.Path, NeedIndex = true, Token = StorageApplicationPermissions.FutureAccessList.Add(folder) }; await db.AddAsync(f); await db.SaveChangesAsync(); _musicFolders.AddOrUpdate(FolderViewModel.Create(f)); //Setting.AddOrUpdate(Setting.Collection.Indexing, true); }
/// <summary> /// Get folder and it's childs. /// </summary> /// <param name="fullPath"></param> /// <returns></returns> public ActionResult ShowFolders(string fullPath) { return(View(FolderViewModel.Create(_context, fullPath))); }