Example #1
0
        protected NetworkSongViewModel(Library library, Guid accessToken, CoreSettings coreSettings,
                                       Func <TSong, TViewModel> modelToViewModelConverter,
                                       INetworkSongFinder <TSong> songFinder = null)
            : base(library, coreSettings, accessToken)
        {
            if (modelToViewModelConverter == null)
            {
                throw new ArgumentNullException(nameof(modelToViewModelConverter));
            }

            this.modelToViewModelConverter = modelToViewModelConverter;
            this.songFinder = songFinder;

            IObservable <bool> canPlayNow = this.Library.LocalAccessControl.ObserveAccessPermission(accessToken)
                                            .Select(x => x == AccessPermission.Admin || !this.CoreSettings.LockPlayPause);

            this.playNowCommand = ReactiveCommand.CreateAsyncTask(canPlayNow,
                                                                  _ => this.Library.PlayInstantlyAsync(this.SelectedSongs.Select(vm => vm.Model), accessToken));

            this.selectedSong = this.WhenAnyValue(x => x.SelectedSongs)
                                .Select(x => x == null ? null : this.SelectedSongs.FirstOrDefault())
                                .ToProperty(this, x => x.SelectedSong);

            this.Search = ReactiveCommand.Create();

            this.WhenAnyValue(x => x.SearchText, x => x.Trim()).DistinctUntilChanged().Skip(1)
            .Throttle(TimeSpan.FromMilliseconds(500), RxApp.TaskpoolScheduler).Select(_ => Unit.Default)
            .Merge(this.Search.ToUnit())
            .StartWith(Unit.Default)
            .Select(_ => this.StartSearchAsync())
            .Switch()
            .Select(x => x.OrderBy(this.SongOrderFunc).ToList())
            .Subscribe(x =>
            {
                this.SelectableSongs = x;
                this.SelectedSongs   = (IEnumerable <ISongViewModelBase>) this.SelectableSongs.Take(1).ToList();
            });
        }
Example #2
0
        public SoundCloudViewModel(Library library, Guid accessToken, CoreSettings coreSettings, ViewSettings viewSettings, INetworkSongFinder <SoundCloudSong> songFinder = null)
            : base(library, accessToken, coreSettings,
                   song => new SoundCloudSongViewModel(song), songFinder ?? new SoundCloudSongFinder(Locator.Current.GetService <IBlobCache>(BlobCacheKeys.RequestCacheContract)))
        {
            if (viewSettings == null)
            {
                throw new ArgumentNullException(nameof(viewSettings));
            }

            this.viewSettings = viewSettings;

            this.OrderByUploaderCommand = ReactiveCommand.Create();
            this.OrderByUploaderCommand.Subscribe(_ => this.ApplyOrder(SortHelpers.GetOrderByUploader, ref this.uploaderOrder));

            this.OrderByPlaybacksCommand = ReactiveCommand.Create();
            this.OrderByPlaybacksCommand.Subscribe(_ => this.ApplyOrder(SortHelpers.GetOrderByPlaybacks, ref this.playbacksOrder));
        }