private void HandleSourcePlaylistsTopic(ByteQueue data) { Dictionary <Guid, ISourcePlaylistBase> addPlaylists = data .DequeueSourcePlaylists(Service.CreateSourcePlaylist) .ToDictionary(p => p.ID); Guid[] order = data.DequeueGuids(); ISourcePlaylistBase[] newPlaylists = new ISourcePlaylistBase[order.Length]; for (int i = 0; i < order.Length; i++) { ISourcePlaylistBase playlist; Guid id = order[i]; if (addPlaylists.TryGetValue(id, out playlist)) { playlists[id] = newPlaylists[i] = playlist; } else { newPlaylists[i] = (ISourcePlaylistBase)playlists[id]; } } Service.SourcePlaylists = newPlaylists; }
protected Task PublishMediaSources(ISourcePlaylistBase source) { ByteQueue data = new ByteQueue(); data.Enqueue(source.FileMediaSources); return(SendAsync(source, nameof(source.FileMediaSources), data, false)); }
protected async Task PublishMediaSources(ISourcePlaylistBase source) { ByteQueue data = new ByteQueue(); data.Enqueue(source.FileMediaSources); await PublishPlaylistAsync(source, nameof(source.FileMediaSources), data); }
public ISourcePlaylistBase DequeueSourcePlaylist(Func <Guid, ISourcePlaylistBase> createFunc) { ISourcePlaylistBase playlist = createFunc(DequeueGuid()); DequeuePlaylist(playlist); playlist.FileMediaSources = DequeueStrings(); return(playlist); }
private void Unsubscribe(ISourcePlaylistBase playlist) { if (playlist == null) { return; } Unsubscribe((IPlaylistBase)playlist); playlist.FileMediaSourcesChanged -= Save; }
private async Task <bool> HandlePlaylistMessage(Guid id, string topic, ByteQueue data, string playlistType) { IPlaylistBase playlist = await GetPlaylist(id, playlistType); ISourcePlaylistBase source = playlist as ISourcePlaylistBase; switch (topic) { case nameof(playlist.CurrentSong): playlist.CurrentSong = data.DequeueNullableSong(); break; case nameof(playlist.Duration): playlist.Duration = data.DequeueTimeSpan(); break; case nameof(playlist.Shuffle): playlist.Shuffle = (OrderType)data.DequeueInt(); break; case nameof(playlist.Loop): playlist.Loop = (LoopType)data.DequeueInt(); break; case nameof(playlist.Name): playlist.Name = data.DequeueString(); break; case nameof(playlist.Position): playlist.Position = data.DequeueTimeSpan(); break; case nameof(playlist.WannaSong): playlist.WannaSong = data.DequeueNullableRequestSong(); return(false); case nameof(playlist.Songs): playlist.Songs = data.DequeueSongs(); break; case nameof(source.FileMediaSources): source.FileMediaSources = data.DequeueStrings(); break; default: return(false); } return(true); }
private static void MergePlaylist(ISourcePlaylistBase playlist, SourcePlaylistData data) { playlist.FileMediaSources = data.Sources; MergePlaylist((IPlaylistBase)playlist, data); }
private void Load() { AudioServiceData data; if (!File.Exists(path)) { return; } try { data = StdUtils.XmlDeserializeFile <AudioServiceData>(path); } catch { return; } Service.Volume = data.Volume; IDictionary <string, Song> allSongs = new Dictionary <string, Song>(); Service.SourcePlaylists = data.SourcePlaylists.Select(playlistData => { Guid id = Guid.Parse(playlistData.ID); ISourcePlaylistBase playlist = Service.SourcePlaylists .FirstOrDefault(s => s.ID == id) ?? Service.CreateSourcePlaylist(id); MergePlaylist(playlist, playlistData); foreach (Song song in playlist.Songs) { allSongs[song.FullPath] = song; } return(playlist); }).ToArray(); Service.Playlists = data.Playlists.Select(playlistData => { Guid id = Guid.Parse(playlistData.ID); IPlaylistBase playlist = Service.Playlists .FirstOrDefault(s => s.ID == id) ?? Service.CreatePlaylist(id); playlistData.Songs = playlistData.Songs.Where(s => allSongs.ContainsKey(s.FullPath)).ToArray(); MergePlaylist(playlist, playlistData); return(playlist); }).ToArray(); if (string.IsNullOrWhiteSpace(data.CurrentPlaylistID)) { Service.CurrentPlaylist = null; } else { Guid currentPlaylistID = Guid.Parse(data.CurrentPlaylistID); Service.CurrentPlaylist = Service.GetAllPlaylists().FirstOrDefault(p => p.ID == currentPlaylistID); } }
public void Enqueue(ISourcePlaylistBase playlist) { Enqueue((IPlaylistBase)playlist); Enqueue(playlist.FileMediaSources); }
public SourcePlaylistData(ISourcePlaylistBase playlist) : base(playlist) { Sources = playlist.FileMediaSources.ToArray(); }