internal MediaControlMetadata(IntPtr handle) { Debug.Assert(handle != IntPtr.Zero); Title = Native.GetMetadata(handle, MediaControllerNativeAttribute.Title); Artist = Native.GetMetadata(handle, MediaControllerNativeAttribute.Artist); Album = Native.GetMetadata(handle, MediaControllerNativeAttribute.Album); Author = Native.GetMetadata(handle, MediaControllerNativeAttribute.Author); Genre = Native.GetMetadata(handle, MediaControllerNativeAttribute.Genre); Duration = Native.GetMetadata(handle, MediaControllerNativeAttribute.Duration); Date = Native.GetMetadata(handle, MediaControllerNativeAttribute.Date); Copyright = Native.GetMetadata(handle, MediaControllerNativeAttribute.Copyright); Description = Native.GetMetadata(handle, MediaControllerNativeAttribute.Description); TrackNumber = Native.GetMetadata(handle, MediaControllerNativeAttribute.TrackNumber); AlbumArtPath = Native.GetMetadata(handle, MediaControllerNativeAttribute.Picture); EncodedSeason = Native.GetMetadata(handle, MediaControllerNativeAttribute.Season); Season = DecodeSeason(EncodedSeason); EncodedEpisode = Native.GetMetadata(handle, MediaControllerNativeAttribute.Episode); Episode = DecodeEpisode(EncodedEpisode); EncodedResolution = Native.GetMetadata(handle, MediaControllerNativeAttribute.Resolution); Resolution = DecodeResolution(EncodedResolution); }
internal MediaControlMetadata(IntPtr handle) { // If native framework return null handle, // it means server doesn't set metadata yet and it's not error. // So we need to return empty metadata instance as native framework does. if (handle == IntPtr.Zero) { return; } Title = Native.GetMetadata(handle, MediaControllerNativeAttribute.Title); Artist = Native.GetMetadata(handle, MediaControllerNativeAttribute.Artist); Album = Native.GetMetadata(handle, MediaControllerNativeAttribute.Album); Author = Native.GetMetadata(handle, MediaControllerNativeAttribute.Author); Genre = Native.GetMetadata(handle, MediaControllerNativeAttribute.Genre); Duration = Native.GetMetadata(handle, MediaControllerNativeAttribute.Duration); Date = Native.GetMetadata(handle, MediaControllerNativeAttribute.Date); Copyright = Native.GetMetadata(handle, MediaControllerNativeAttribute.Copyright); Description = Native.GetMetadata(handle, MediaControllerNativeAttribute.Description); TrackNumber = Native.GetMetadata(handle, MediaControllerNativeAttribute.TrackNumber); AlbumArtPath = Native.GetMetadata(handle, MediaControllerNativeAttribute.Picture); EncodedSeason = Native.GetMetadata(handle, MediaControllerNativeAttribute.Season); EncodedEpisode = Native.GetMetadata(handle, MediaControllerNativeAttribute.Episode); EncodedResolution = Native.GetMetadata(handle, MediaControllerNativeAttribute.Resolution); }
// Gets the playlist handle by name. internal static IntPtr GetPlaylistHandle(string name) { NativePlaylist.GetPlaylistHandle(_serverName, name, out IntPtr playlistHandle). ThrowIfError("Failed to get playlist handle by name"); return(playlistHandle); }
/// <summary> /// Returns the all playlists. /// </summary> /// <returns>The set of <see cref="MediaControlPlaylist"/>.</returns> /// <exception cref="InvalidOperationException"> /// The server has already been stopped.<br/> /// -or-<br/> /// An internal error occurs. /// </exception> /// <exception cref="ObjectDisposedException">The <see cref="MediaControllerManager"/> has already been disposed.</exception> /// <since_tizen> 5 </since_tizen> public IEnumerable <MediaControlPlaylist> GetPlaylists() { ThrowIfStopped(); var playlists = new List <MediaControlPlaylist>(); Exception caught = null; NativePlaylist.PlaylistCallback playlistCallback = (handle, _) => { try { playlists.Add(new MediaControlPlaylist(handle)); return(true); } catch (Exception e) { caught = e; return(false); } }; NativePlaylist.ForeachPlaylist(ServerAppId, playlistCallback, IntPtr.Zero). ThrowIfError("Failed to get playlist."); if (caught != null) { throw caught; } return(playlists.AsReadOnly()); }
private void AddItemToPlaylist(string index, MediaControlMetadata metadata) { void AddMetadataToNative(string idx, MediaControllerNativeAttribute attribute, string value) { // This API doesn't save playlist to the storage. So we need to call MediaControlServer.SavePlaylist() // after all items are updated. NativePlaylist.UpdatePlaylist(Handle, idx, attribute, value) .ThrowIfError("Failed to update playlist"); } AddMetadataToNative(index, MediaControllerNativeAttribute.Album, metadata.Album); AddMetadataToNative(index, MediaControllerNativeAttribute.Artist, metadata.Artist); AddMetadataToNative(index, MediaControllerNativeAttribute.Author, metadata.Author); AddMetadataToNative(index, MediaControllerNativeAttribute.Copyright, metadata.Copyright); AddMetadataToNative(index, MediaControllerNativeAttribute.Date, metadata.Date); AddMetadataToNative(index, MediaControllerNativeAttribute.Description, metadata.Description); AddMetadataToNative(index, MediaControllerNativeAttribute.Duration, metadata.Duration); AddMetadataToNative(index, MediaControllerNativeAttribute.Genre, metadata.Genre); AddMetadataToNative(index, MediaControllerNativeAttribute.Picture, metadata.AlbumArtPath); AddMetadataToNative(index, MediaControllerNativeAttribute.Title, metadata.Title); AddMetadataToNative(index, MediaControllerNativeAttribute.TrackNumber, metadata.TrackNumber); AddMetadataToNative(index, MediaControllerNativeAttribute.Season, metadata.EncodedSeason); AddMetadataToNative(index, MediaControllerNativeAttribute.Episode, metadata.EncodedEpisode); AddMetadataToNative(index, MediaControllerNativeAttribute.Resolution, metadata.EncodedResolution); }
/// <summary> /// Update the playlist by lastest info. /// </summary> /// <since_tizen> 5 </since_tizen> public void Update() { // Update the name of playlist. Name = NativePlaylist.GetPlaylistName(Handle); // Update metadata. UpdateMetadata(Handle); }
private void RegisterMetadataUpdatedEvent() { _metadataUpdatedCallback = (serverName, metadata, _) => { GetController(serverName)?.RaiseMetadataUpdatedEvent(metadata); }; NativePlaylist.SetMetadataUpdatedCb(Handle, _metadataUpdatedCallback).ThrowIfError("Failed to init MetadataUpdated event."); }
private void RegisterPlaylistUpdatedEvent() { _playlistUpdatedCallback = (serverName, playlistMode, name, playlistHandle, _) => { GetController(serverName)?.RaisePlaylistUpdatedEvent(playlistMode, name, playlistHandle); }; NativePlaylist.SetPlaylistModeUpdatedCb(Handle, _playlistUpdatedCallback). ThrowIfError("Failed to register PlaylistUpdated event."); }
private void UpdateMetadata(IntPtr handle) { NativePlaylist.PlaylistItemCallback playlistItemCallback = (index, metadataHandle, _) => { _metadata.Add(index, new MediaControlMetadata(metadataHandle)); return(true); }; NativePlaylist.ForeachPlaylistItem(handle, playlistItemCallback, IntPtr.Zero). ThrowIfError("Failed to retrieve playlist item."); }
/// <summary> /// Initializes a new instance of the <see cref="MediaControlPlaylist"/> class with the playlist handle that created already. /// </summary> /// <param name="handle">The handle of playlist.</param> internal MediaControlPlaylist(IntPtr handle) { if (handle == IntPtr.Zero) { throw new ArgumentNullException(nameof(handle)); } // handle will be destroyed in Native FW side. Name = NativePlaylist.GetPlaylistName(handle); UpdateMetadata(handle); }
/// <summary> /// Initializes a new instance of the <see cref="MediaControlPlaylist"/> class. /// </summary> /// <param name="name">The name of this playlist.</param> /// <exception cref="InvalidOperationException">An internal error occurs.</exception> /// <since_tizen> 5 </since_tizen> public MediaControlPlaylist(string name) { if (name == null) { throw new ArgumentNullException(nameof(name)); } NativePlaylist.CreatePlaylist(name, out IntPtr handle).ThrowIfError("Failed to create playlist"); Name = name; _handle = handle; MediaControlServer.SavePlaylist(handle); }
/// <summary> /// Returns the all playlists. /// </summary> /// <returns>The set of <see cref="MediaControlPlaylist"/>.</returns> /// <exception cref="InvalidOperationException"> /// The server has already been stopped.<br/> /// -or-<br/> /// An internal error occurs. /// </exception> /// <exception cref="ObjectDisposedException">The <see cref="MediaControllerManager"/> has already been disposed of.</exception> /// <since_tizen> 5 </since_tizen> public IEnumerable <MediaControlPlaylist> GetPlaylists() { ThrowIfStopped(); var playlists = new List <MediaControlPlaylist>(); NativePlaylist.PlaylistCallback playlistCallback = (handle, _) => { playlists.Add(new MediaControlPlaylist(handle)); }; NativePlaylist.ForeachServerPlaylist(Manager.Handle, ServerAppId, playlistCallback, IntPtr.Zero) .ThrowIfError("Failed to get playlist."); return(playlists.AsReadOnly()); }
internal MediaControlMetadata(IntPtr handle) { Debug.Assert(handle != IntPtr.Zero); Title = Native.GetMetadata(handle, MediaControllerNativeAttribute.Title); Artist = Native.GetMetadata(handle, MediaControllerNativeAttribute.Artist); Album = Native.GetMetadata(handle, MediaControllerNativeAttribute.Album); Author = Native.GetMetadata(handle, MediaControllerNativeAttribute.Author); Genre = Native.GetMetadata(handle, MediaControllerNativeAttribute.Genre); Duration = Native.GetMetadata(handle, MediaControllerNativeAttribute.Duration); Date = Native.GetMetadata(handle, MediaControllerNativeAttribute.Date); Copyright = Native.GetMetadata(handle, MediaControllerNativeAttribute.Copyright); Description = Native.GetMetadata(handle, MediaControllerNativeAttribute.Description); TrackNumber = Native.GetMetadata(handle, MediaControllerNativeAttribute.TrackNumber); AlbumArtPath = Native.GetMetadata(handle, MediaControllerNativeAttribute.Picture); }
/// <summary> /// Returns the index of current playing media. /// </summary> /// <returns>The index of current playing media.</returns> /// <exception cref="InvalidOperationException"> /// The server has already been stopped.<br/> /// -or-<br/> /// An internal error occurs. /// </exception> /// <exception cref="ObjectDisposedException">The <see cref="MediaControllerManager"/> has already been disposed.</exception> /// <since_tizen> 5 </since_tizen> public string GetIndexOfCurrentPlayingMedia() { ThrowIfStopped(); IntPtr playbackHandle = IntPtr.Zero; try { Native.GetServerPlaybackHandle(Manager.Handle, ServerAppId, out playbackHandle).ThrowIfError("Failed to get playback."); var(name, index) = NativePlaylist.GetPlaylistInfo(playbackHandle); return(index); } finally { if (playbackHandle != IntPtr.Zero) { Native.DestroyPlayback(playbackHandle).ThrowIfError("Failed to destroy playback handle."); } } }
/// <summary> /// Returns the metadata set by the server. /// </summary> /// <returns>The metadata.</returns> /// <exception cref="InvalidOperationException"> /// The server has already been stopped.<br/> /// -or-<br/> /// An internal error occurs. /// </exception> /// <exception cref="ObjectDisposedException">The <see cref="MediaControllerManager"/> has already been disposed.</exception> /// <seealso cref="MediaControlServer.SetMetadata(MediaControlMetadata)"/> /// <since_tizen> 4 </since_tizen> public MediaControlMetadata GetMetadata() { ThrowIfStopped(); IntPtr metadataHandle = IntPtr.Zero; try { NativePlaylist.GetServerMetadata(Manager.Handle, ServerAppId, out metadataHandle). ThrowIfError("Failed to get metadata."); return(new MediaControlMetadata(metadataHandle)); } finally { if (metadataHandle != IntPtr.Zero) { NativePlaylist.DestroyMetadata(metadataHandle); } } }
/// <summary> /// Returns the playlist name of current playing media. /// </summary> /// <returns>The playlist name.</returns> /// <exception cref="InvalidOperationException"> /// The server has already been stopped.<br/> /// -or-<br/> /// An internal error occurs. /// </exception> /// <exception cref="ObjectDisposedException">The <see cref="MediaControllerManager"/> has already been disposed.</exception> /// <since_tizen> 5 </since_tizen> public MediaControlPlaylist GetPlaylistOfCurrentPlayingMedia() { ThrowIfStopped(); IntPtr playbackHandle = IntPtr.Zero; // Get the playlist name of current playing media. try { Native.GetServerPlaybackHandle(Manager.Handle, ServerAppId, out playbackHandle).ThrowIfError("Failed to get playback."); var(name, index) = NativePlaylist.GetPlaylistInfo(playbackHandle); return(GetPlaylists().FirstOrDefault(playlist => playlist.Name == name)); } finally { if (playbackHandle != IntPtr.Zero) { Native.DestroyPlayback(playbackHandle).ThrowIfError("Failed to destroy playback handle."); } } }
internal void Destroy() { NativePlaylist.DestroyPlaylist(Handle).ThrowIfError("Failed to delete playlist"); }