Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #4
0
        /// <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());
        }
Example #5
0
        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);
        }
Example #6
0
        /// <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.");
        }
Example #9
0
 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.");
 }
Example #10
0
        /// <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);
        }
Example #11
0
        /// <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);
        }
Example #12
0
        /// <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());
        }
Example #13
0
        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);
        }
Example #14
0
        /// <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.");
                }
            }
        }
Example #15
0
        /// <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);
                }
            }
        }
Example #16
0
        /// <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.");
                }
            }
        }
Example #17
0
 internal void Destroy()
 {
     NativePlaylist.DestroyPlaylist(Handle).ThrowIfError("Failed to delete playlist");
 }