public List <MusicPlaybackItem> GetHistory(int count) { if (!EnablePlaybackHistory) { return(new List <MusicPlaybackItem>()); } if (_historyCache == null) { var query = context.PlaybackHistory .Include(item => item.RelatedMediaFile) .OrderByDescending(item => item.PlaybackTime); _historyCache = (count > 0 ? query.Take(count) : query) .Where(x => x.RelatedMediaFile != null) .Select(x => MusicPlaybackItem.CreateFromMediaFile(x.RelatedMediaFile)) .ToList(); } if (_historyCache.Count < Math.Min( count == 0 ? int.MaxValue : count, context.PlaybackHistory.Count())) { _historyCache.AddRange(context.PlaybackHistory .Include(item => item.RelatedMediaFile) .OrderByDescending(item => item.PlaybackTime) .Skip(_historyCache.Count) .Where(x => x.RelatedMediaFile != null) .Select(x => MusicPlaybackItem.CreateFromMediaFile(x.RelatedMediaFile))); } return((count > 0 && _historyCache.Count > count ? _historyCache.Take(count) : _historyCache).ToList()); }
public static async void Shuffle(this DbArtist artist) { if (artist?.MediaFiles != null) { var random = new Random(); var shuffledFiles = artist.MediaFiles .OrderBy(file => random.Next()) .Select(file => MusicPlaybackItem.CreateFromMediaFile(file)); PlaybackControl.Instance.Clear(); await PlaybackControl.Instance.AddFile(shuffledFiles.ToList(), -1); } }
/// <summary> /// Play all songs by a specific artist. /// </summary> /// <param name="artist"></param> /// <param name="requireClear"></param> /// <param name="isInsert"></param> public static async void Play(this DbArtist artist, bool requireClear = false, bool isInsert = false) { if (artist?.MediaFiles != null) { var sortedFiles = artist.MediaFiles .OrderBy(file => file.Title, new AlphabetAscendComparer()) .Select(file => MusicPlaybackItem.CreateFromMediaFile(file)); if (requireClear) { PlaybackControl.Instance.Clear(); } await PlaybackControl.Instance.AddFile(sortedFiles.ToList(), isInsert? -2 : -1); } }
/// <summary> /// Play an album. /// </summary> /// <param name="album"></param> /// <param name="requireClear"></param> /// <param name="isInsert"></param> public static async void Play(this DbAlbum album, bool requireClear = false, bool isInsert = false) { if (album?.MediaFiles != null) { var sortedFiles = album.MediaFiles .OrderBy(file => ParseWithDefaultFallback(file.DiscNumber)) .ThenBy(file => ParseWithDefaultFallback(file.TrackNumber)) .Select(file => MusicPlaybackItem.CreateFromMediaFile(file)); if (requireClear) { PlaybackControl.Instance.Clear(); } await PlaybackControl.Instance.AddFile(sortedFiles.ToList(), isInsert? -2 : -1); } }