private void TrackChanged() { var player = App.Current.Kernel.Resolve <IPlayerService>(); if (Track == null) { IsPlaying = false; } else { if (IsQueue && QueueId != null) { IsPlaying = player.CurrentQueueId == QueueId; } else if (!IsQueue && player.CurrentQueueTrack?.Track != null) { IsPlaying = (Track.Id > 0 && player.CurrentQueueTrack.Track.Id == Track.Id) || TrackComparer.AreEqual(player.CurrentQueueTrack.Track, Track); } else { IsPlaying = false; } } player.TrackChanged -= PlayerOnTrackChanged; player.TrackChanged += PlayerOnTrackChanged; }
public PlaylistViewModel(Playlist playlistItem) { Instance = this; _comparer = new TrackComparer(); _playlist = playlistItem; Id = (ulong)_playlist?.Id; Title = playlistItem.Title; if (_playlist.Tracks == null || _playlist.Tracks.Count == 0) { Task.Run(async() => { TracksLoading = true; OnPropertyChanged(nameof(TracksLoading)); Tracks = await DependencyService.Get <IPlaylistManager>().GetPlaylistTracks(playlistItem.Id); TracksLoading = false; OnPropertyChanged(nameof(TracksLoading)); }); } else { Tracks = _playlist.Tracks; } PlayCommand = new Command((item) => { DependencyService.Get <IMusicManager>().StartQueue(new ObservableCollection <Track>(Tracks), Tracks.IndexOf(item as Track)); }); }
public Track Find(Track track) { if (!IsLoaded) { throw new NotLoadedException(); } return(Tracks.FirstOrDefault(p => TrackComparer.AreEqual(p, track))); }
public override void OnCreate() { base.OnCreate(); _queue = new ObservableCollection <Track>(); _pos = 0; _audioManager = (AudioManager)GetSystemService(AudioService); _random = new Random(); _comparer = new TrackComparer(); InitializePlayer(); }
private async void LyricsFlyout_OnOpened(object sender, object e) { _flyoutOpened = true; var track = ViewModel.CurrentQueueTrack.Track; var newSlug = TrackComparer.GetSlug(track); if (_currentSongSlug == newSlug) { return; } _currentSongSlug = newSlug; _cancellationTokenSource?.Cancel(); _cancellationTokenSource = new CancellationTokenSource(); IsLyricsLoading = true; LyricsText = "Loading lyrics..."; if (!string.IsNullOrEmpty(track.Lyrics)) { LyricsText = track.Lyrics; IsLyricsLoading = false; return; } var providers = App.Current.Kernel.Resolve <IMetadataProvider[]>().FilterAndSort <ILyricsMetadataProvider>(); try { foreach (var lyricsMetadataProvider in providers) { var lyrics = await lyricsMetadataProvider.GetLyricAsync(track.Title, track.AlbumArtist); _cancellationTokenSource.Token.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(lyrics)) { lyrics = await lyricsMetadataProvider.GetLyricAsync(track.Title, track.DisplayArtist); } _cancellationTokenSource.Token.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(lyrics)) { continue; } LyricsText = lyrics; break; } if (LyricsText == "Loading lyrics...") { LyricsText = "No lyrics found."; } } catch (OperationCanceledException) { } catch { LyricsText = "Something happened :/"; } finally { IsLyricsLoading = false; } }
private void AddTextColumn(StringPropertySelector selector, string columnName, TrackComparer comparer, TrackProperty property, TrackProperty? priorColumnProperty) { if (comparer == null) { comparer = (track1, track2) => string.Compare(selector(track1), selector(track2), StringComparison.CurrentCulture); } int fixedWidth; if (!_settings.ColumnWidths.TryGetValue(property, out fixedWidth)) fixedWidth = 200; TrackListViewColumn genericColumn = new TrackListViewColumn(columnName) {FixedWidth = fixedWidth}; PropertiesToColumns.Add(property, genericColumn); ColumnsToProperties.Add(genericColumn, property); TrackCellRenderer pathCellTextRenderer = new TrackCellRenderer(); genericColumn.PackStart(pathCellTextRenderer, true); genericColumn.SetCellDataFunc(pathCellTextRenderer, (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter) => { Track track = (Track) model.GetValue(iter, 0); Track playingTrack = ((ITrackListModel) model).CurrentTrack; bool playing = playingTrack != null && track.Equals(playingTrack); ((CellRendererText) cell).Text = selector(track); ((CellRendererText) cell).Weight = playing ? 800 : 400; }); genericColumn.SortColumnId = (int) property; ((ITrackListModel) TrackListView.Model).SetSortFunc((int) property, (model, iter1, iter2) => { Track track1 = (Track) model.GetValue(iter1, 0); Track track2 = (Track) model.GetValue(iter2, 0); int result = comparer(track1, track2); if (result == 0) result = DefaultSortFunc(model, iter1, iter2); return result; }); int position = 0; foreach (var column in TrackListView.Columns) { position++; TrackProperty columnProperty; if (ColumnsToProperties.TryGetValue((TrackListViewColumn) column, out columnProperty)) { if (columnProperty == priorColumnProperty) break; } } TrackListView.InsertColumn(genericColumn, position); genericColumn.AddNotification("width", TrackListViewColumnNotifyHandler); var label = new Label(columnName); genericColumn.Widget = label; var widget = genericColumn.Widget; widget.GetAncestor(Button.GType); var columnHeader = widget.GetAncestor(Button.GType); columnHeader.ButtonPressEvent += ColumnHeaderOnButtonPressEvent; label.Show(); }