예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
 /// <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)));
 }