/* * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using Native = Interop.MediaControllerPlaylist; namespace Tizen.Multimedia.Remoting { /// /// Represents metadata for media control. /// /// 4 public class MediaControlMetadata { /// /// Initializes a new instance of the class. /// /// 4 public MediaControlMetadata() { } 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 or sets the title. /// /// 4 public string Title { get; set; } /// /// Gets or sets the artist. /// /// 4 public string Artist { get; set; } /// /// Gets or sets the album. /// /// 4 public string Album { get; set; } /// /// Gets or sets the author. /// /// 4 public string Author { get; set; } /// /// Gets or sets the genre. /// /// 4 public string Genre { get; set; } /// /// Gets or sets the duration. /// /// 4 public string Duration { get; set; } /// /// Gets or sets the date. /// /// 4 public string Date { get; set; } /// /// Gets or sets the copyright. /// /// 4 public string Copyright { get; set; } /// /// Gets or sets the description. /// /// 4 public string Description { get; set; } /// /// Gets or sets the track number. /// /// 4 public string TrackNumber { get; set; } /// /// Gets or sets the path of the album art. /// /// 4 public string AlbumArtPath { get; set; } /// /// Gets or sets the season information. /// /// /// 6 public SeriesInformation Season { get => DecodeSeason(EncodedSeason); set => EncodedSeason = EncodeSeason(value); } /// /// Gets or sets the episode information. /// /// /// 6 public SeriesInformation Episode { get => DecodeEpisode(EncodedEpisode); set => EncodedEpisode = EncodeEpisode(value); } /// /// Gets or sets the content resolution. /// /// /// 6 public Size Resolution { get => DecodeResolution(EncodedResolution); set => EncodedResolution = EncodeResolution(value.Width, value.Height); } // Developers who use Tizen Native API must encode strings to set or get metadata of media // such as season, episode, and resolution. It is inconvenient. // TizenFX supports for using normal strings and using encoded strings internally. internal string EncodedSeason { get; private set; } internal string EncodedEpisode { get; private set; } internal string EncodedResolution { get; private set; } private static string EncodeSeason(SeriesInformation information) { Native.EncodeSeason(information.Number, information.Title, out string encodedSeason). ThrowIfError("Failed to encode season"); return encodedSeason; } private static string EncodeEpisode(SeriesInformation information) { Native.EncodeEpisode(information.Number, information.Title, out string encodedEpisode). ThrowIfError("Failed to encode episode"); return encodedEpisode; } private static string EncodeResolution(int width, int height) { Native.EncodeResolution((uint)width, (uint)height, out string encodedResolution). ThrowIfError("Failed to encode resolution"); return encodedResolution; } private static SeriesInformation DecodeSeason(string encodedSeason) { int number = 0; string title = null; if (encodedSeason != null) { Native.DecodeSeason(encodedSeason, out number, out title). ThrowIfError("Failed to decode season"); } return new SeriesInformation(number, title); } private static SeriesInformation DecodeEpisode(string encodedEpisode) { int number = 0; string title = null; if (encodedEpisode != null) { Native.DecodeEpisode(encodedEpisode, out number, out title). ThrowIfError("Failed to decode episode"); } return new SeriesInformation(number, title); } private static Size DecodeResolution(string encodedResolution) { uint width = 0, height = 0; if (encodedResolution != null) { Native.DecodeResolution(encodedResolution, out width, out height). ThrowIfError("Failed to decode resolution"); } return new Size((int)width, (int)height); } } /// /// Represents properties for the video series information. /// /// 6 public class SeriesInformation { /// /// Initializes a new instance of the class. /// /// The order of this video in entire series. /// The title. /// 6 public SeriesInformation(int number, string title) { Number = number; Title = title; } /// /// Gets or sets the order of this video in entire series. /// /// 6 public int Number { get; } /// /// Gets or sets the title. /// /// 6 public string Title { get; } /// /// Returns a string that represents the current object. /// /// A string that represents the current object. /// 6 public override string ToString() => $"Number={Number.ToString()}, Title={Title}"; } }