Пример #1
0
    IEnumerator waitForSoundTrack(musicTrack song)
    {
        yield return(new WaitWhile(() => musicTracks.isPlaying));

        musicTracks.clip = musicList[(int)song];
        musicTracks.Play();
    }
Пример #2
0
        public static string Conductor(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                foreach (artist a in item.Artist)
                {
                    if (a.Role != null && a.Role.ToLower() == "conductor")
                    {
                        result = a.Artist;
                    }
                }
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                foreach (artist a in item.Artist)
                {
                    if (a.Role != null && a.Role.ToLower() == "conductor")
                    {
                        result = a.Artist;
                    }
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #3
0
        public static string Album(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is musicAlbum)
            {
                musicAlbum album = aObject as musicAlbum;
                result = album.Title;
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                if (item.Album.Count > 0)
                {
                    result = item.Album[0];
                }
            }
            else if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                if (item.Album.Count > 0)
                {
                    result = item.Album[0];
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #4
0
    // Music fade-out management
    private void fadeTrackOutIfNeeded(int nextSceneBuildIndex)
    {
        resetTrackFade();
        musicTrack currentTrack = MusicManager.Instance.getCurrentTrack();
        musicTrack nextTrack    = MusicManager.Instance.getTrackForSceneIndex(nextSceneBuildIndex);

        //if (currentTrack.clip.name != nextTrack.clip.name) {
        if (currentTrack.clip != nextTrack.clip)
        {
            trackFadeCoroutine = StartCoroutine(fadeTrackOut());
        }
    }
Пример #5
0
    // You should go through this method in order to change the track at any time
    public void changeMusicTrack(musicTrack track)
    {
        currentTrack  = track;
        music_as.clip = track.clip;

        refreshVolumes();

        if (!music_as.isPlaying)
        {
            music_as.Play();
        }
    }
Пример #6
0
 //MUSIC TRACKS
 public AudioSource soundTrack(musicTrack song)
 {
     if (!musicTracks.isPlaying)
     {
         musicTracks.clip = musicList[(int)song];
         musicTracks.Play();
         musicTracks.loop   = true;
         musicTracks.volume = 0.5f;
     }
     else
     {
         StartCoroutine(waitForSoundTrack(song));
     }
     return(musicTracks);
 }
Пример #7
0
        public static string Artist(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is person)
            {
                person person = aObject as person;
                result = person.Title;
            }
            else if (aObject is musicAlbum)
            {
                // Artist and ALbum Artist are the same for musicAlbums
                return(AlbumArtist(aObject));
            }
            else if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                foreach (artist a in item.Artist)
                {
                    if (a.Role == null || (a.Role != null && a.Role.ToLower() == "performer"))
                    {
                        result = a.Artist;
                        if (a.Role != null)
                        {
                            break;
                        }
                    }
                }
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                foreach (artist a in item.Artist)
                {
                    if (a.Role == null || (a.Role != null && a.Role.ToLower() == "performer"))
                    {
                        result = a.Artist;
                        if (a.Role != null)
                        {
                            break;
                        }
                    }
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #8
0
        public static string OriginalTrackNumber(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is musicTrack)
            {
                musicTrack track = aObject as musicTrack;
                if (track.OriginalTrackNumber > 0)
                {
                    result = track.OriginalTrackNumber.ToString();
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #9
0
        private upnpObject CreateUpnpObject(ISource aSource)
        {
            musicTrack item     = new musicTrack();
            resource   resource = new resource();

            resource.Uri          = iDirectSound.SourceUri(aSource);
            resource.ProtocolInfo = "http-get:*:audio/x-wav:*";
            resource.Bitrate      = 44100;
            item.Res.Add(resource);
            item.Id    = aSource.Id;
            item.Title = aSource.Name;
            item.Album.Add("SoundCard");
            artist artist = new artist();

            artist.Artist = "Various";
            item.Artist.Add(artist);
            //item.AlbumArtUri = aSource.LogoUri;
            return(item);
        }
Пример #10
0
        public static string ReleaseYear(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is playlistContainer)
            {
                playlistContainer container = aObject as playlistContainer;
                result = container.Date;
            }
            else if (aObject is album)
            {
                album album = aObject as album;
                result = album.Date;
            }
            else if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                result = item.Date;
            }
            else if (aObject is audioBook)
            {
                audioBook item = aObject as audioBook;
                result = item.Date;
            }
            if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                result = item.Date;
            }

            if (!string.IsNullOrEmpty(result))
            {
                try
                {
                    DateTime t = DateTime.Parse(result);
                    result = t.Year.ToString().Trim();
                }
                catch (FormatException) { }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #11
0
        public static string Contributor(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is album)
            {
                album album = aObject as album;
                if (album.Contributor.Count > 0)
                {
                    result = album.Contributor[0];
                }
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                if (item.Contributor.Count > 0)
                {
                    result = item.Contributor[0];
                }
            }
            else if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                if (item.Contributor.Count > 0)
                {
                    result = item.Contributor[0];
                }
            }
            else if (aObject is audioBook)
            {
                audioBook item = aObject as audioBook;
                if (item.Contributor.Count > 0)
                {
                    result = item.Contributor[0];
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #12
0
        private upnpObject UpnpObject(ITrack aTrack)
        {
            musicTrack track = new musicTrack();

            artist artist = new artist();

            artist.Artist = aTrack.Artist;
            artist.Role   = "Performer";
            track.Artist.Add(artist);

            resource resource = new resource();
            Time     time     = new Time(aTrack.Duration);

            resource.Duration = time.ToString();
            resource.Uri      = aTrack.Uri;
            track.Res.Add(resource);

            track.Album.Add(aTrack.Album);
            track.AlbumArtUri.Add(aTrack.ArtworkUri);

            track.Title = aTrack.Title;

            return(track);
        }
Пример #13
0
        protected override void EventListViewLibrary_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.NoPrefix | TextFormatFlags.EndEllipsis;

            // Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the
            // details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a
            // custom background drawn in a DrawItem event handler. See the example in the OwnerDraw reference topic for a workaround that invalidates
            // each row when the extra event occurs. An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler
            // and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0.
            if (e.ColumnIndex == 0)
            {
                e.Graphics.FillRectangle(iBackBrush, e.Bounds);

                if (iIsAlbum && Items.Count > 0)
                {
                    ListViewKinsky.Item item  = Items[0] as ListViewKinsky.Item;
                    musicTrack          track = item.Tag as musicTrack;

                    int iconHeight = (int)(Columns[0].Width * 0.5f);
                    int iconOffset = 5;// (int)((Columns[0].Width - iconHeight) * 0.5f);

                    Image albumArt = item.Icon;
                    if (albumArt != null)
                    {
                        e.Graphics.FillRectangle(iBackBrush, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        try
                        {
                            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                            e.Graphics.DrawImage(albumArt, item.Bounds.Left + iconOffset, item.Bounds.Top + iconOffset, iconHeight, iconHeight);
                        }
                        catch (ArgumentException ex)
                        {
                            Trace.WriteLine(Trace.kKinsky, "ListViewLibrary.EventListViewLibrary_DrawSubItem: " + ex.Message);
                        }
                    }

                    if (track != null)
                    {
                        int x      = item.Bounds.Left + iconOffset + iconHeight + iconOffset;
                        int y      = item.Bounds.Top + iconOffset;
                        int width  = Columns[0].Width + item.Bounds.Left;
                        int height = iFont.Height;

                        e.Graphics.FillRectangle(iBackBrush, new Rectangle(x, y, width - x, height * 4));

                        string album = DidlLiteAdapter.Album(track);
                        if (!string.IsNullOrEmpty(album))
                        {
                            TextRenderer.DrawText(e.Graphics, album, iFont, new Rectangle(x, y, width - x, height), ForeColor, flags);
                            y += height;
                        }

                        string artist = DidlLiteAdapter.AlbumArtist(track);
                        if (!string.IsNullOrEmpty(artist))
                        {
                            TextRenderer.DrawText(e.Graphics, artist, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        string genre = DidlLiteAdapter.Genre(track);
                        if (!string.IsNullOrEmpty(genre))
                        {
                            TextRenderer.DrawText(e.Graphics, genre, iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                            y += height;
                        }

                        TextRenderer.DrawText(e.Graphics, DidlLiteAdapter.ReleaseYear(track), iFont, new Rectangle(x, y, width - x, height), Color.DarkGray, flags);
                    }
                }
            }
            //Console.WriteLine("columIndex=" + e.ColumnIndex + ", header=" + e.Header + ", item=" + e.Item + ", itemIndex=" + e.ItemIndex + ", subItem=" + e.SubItem);
            //e.DrawDefault = true;
            //return;

            if (e.ColumnIndex > 0)
            {
                if (e.Item.Selected)
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iHighlightBackBrush, e.Bounds);
                }
                else
                {
                    e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
                    e.Graphics.FillRectangle(iBackBrush, e.Bounds);
                }
            }

            ListViewItem.ListViewSubItem subItem = null;
            for (int i = 0; i < e.Item.SubItems.Count; ++i)
            {
                if (e.Item.SubItems[i].Name == e.Header.Name)
                {
                    subItem = e.Item.SubItems[i];
                    break;
                }
            }

            if (subItem != null)
            {
                if (e.Item.Selected)
                {
                    TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, HighlightForeColour, flags);
                }
                else
                {
                    if (e.Header.Name != "Title")
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColorMuted, flags);
                    }
                    else
                    {
                        TextRenderer.DrawText(e.Graphics, subItem.Text, iFont, e.Bounds, ForeColor, flags);
                    }
                }
            }
        }
Пример #14
0
    // When each scene is loaded, the correct track should be played
    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        musicTrack nextTrack = getTrackForSceneIndex(scene.buildIndex);

        changeMusicTrack(nextTrack);
    }
Пример #15
0
        public static upnpObject Create(FileInfo aInfo, string aArtworkUri, string aResourceUri)
        {
            // check for playlist file
            if (aInfo.Extension == Playlist.kPlaylistExtension)
            {
                playlistContainer playlist = new playlistContainer();
                resource          resource = new resource();
                playlist.Res.Add(resource);

                playlist.Id          = aInfo.FullName;
                playlist.Title       = aInfo.Name;
                playlist.WriteStatus = "PROTECTED";
                playlist.Restricted  = true;

                resource.Size = aInfo.Length;
                resource.Uri  = aResourceUri;

                return(playlist);
            }

            // check for audio/video file
            try
            {
                if (IsTagLibSupported(aInfo))
                {
                    TagLib.File f = TagLib.File.Create(aInfo.FullName);

                    if (f.Properties.MediaTypes == MediaTypes.Audio)
                    {
                        musicTrack track    = new musicTrack();
                        resource   resource = new resource();
                        track.Res.Add(resource);

                        track.Id          = aInfo.FullName;
                        track.WriteStatus = "PROTECTED";
                        track.Restricted  = true;

                        if (!f.Tag.IsEmpty)
                        {
                            if (f.Tag.Title != null)
                            {
                                track.Title = f.Tag.Title;
                            }
                            else
                            {
                                track.Title = aInfo.Name;
                            }
                            if (f.Tag.Album != null)
                            {
                                track.Album.Add(f.Tag.Album);
                            }
                            foreach (string g in f.Tag.Genres)
                            {
                                track.Genre.Add(g);
                            }
                            track.OriginalTrackNumber = (int)f.Tag.Track;
                            track.Date = f.Tag.Year.ToString();
                            foreach (string p in f.Tag.Performers)
                            {
                                artist performer = new artist();
                                performer.Artist = p;
                                performer.Role   = "Performer";
                                track.Artist.Add(performer);
                            }
                            foreach (string a in f.Tag.AlbumArtists)
                            {
                                artist artist = new artist();
                                artist.Artist = a;
                                artist.Role   = "AlbumArtist";
                                track.Artist.Add(artist);
                            }
                            foreach (string c in f.Tag.Composers)
                            {
                                artist composer = new artist();
                                composer.Artist = c;
                                composer.Role   = "Composer";
                                track.Artist.Add(composer);
                            }
                            if (f.Tag.Conductor != null)
                            {
                                artist conductor = new artist();
                                conductor.Artist = f.Tag.Conductor;
                                conductor.Role   = "Conductor";
                                track.Artist.Add(conductor);
                            }
                        }
                        else
                        {
                            track.Title = aInfo.Name;
                        }

                        resource.Bitrate         = (int)((f.Properties.AudioBitrate * 1000.0f) / 8.0f);
                        resource.Duration        = new Time((int)f.Properties.Duration.TotalSeconds).ToString();
                        resource.NrAudioChannels = f.Properties.AudioChannels;
                        resource.SampleFrequency = f.Properties.AudioSampleRate;
                        resource.Size            = aInfo.Length;
                        resource.Uri             = aResourceUri;

                        resource.ProtocolInfo = string.Format("http-get:*:{0}:*", f.MimeType.Replace("taglib", "audio"));
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("flac", "x-flac");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("aif:", "aiff:");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("wma", "x-ms-wma");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("asf", "x-ms-asf");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("mp3", "mpeg");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("mpeg3", "mpeg");
                        resource.ProtocolInfo = resource.ProtocolInfo.Replace("m4a", "x-m4a");

                        if (!string.IsNullOrEmpty(aArtworkUri))
                        {
                            track.AlbumArtUri.Add(aArtworkUri);
                        }

                        return(track);
                    }
                    else if (f.Properties.MediaTypes == TagLib.MediaTypes.Video)
                    {
                        videoItem video    = new videoItem();
                        resource  resource = new resource();
                        video.Res.Add(resource);

                        video.Id          = aInfo.FullName;
                        video.WriteStatus = "PROTECTED";
                        video.Restricted  = true;

                        if (!f.Tag.IsEmpty)
                        {
                            if (f.Tag.Title != null)
                            {
                                video.Title = f.Tag.Title;
                            }
                            else
                            {
                                video.Title = aInfo.Name;
                            }
                            foreach (string g in f.Tag.Genres)
                            {
                                video.Genre.Add(g);
                            }
                            foreach (string p in f.Tag.Performers)
                            {
                                actor performer = new actor();
                                performer.Actor = p;
                                performer.Role  = "Actor";
                                video.Actor.Add(performer);
                            }
                        }
                        else
                        {
                            video.Title = aInfo.Name;
                        }

                        resource.Bitrate         = (int)((f.Properties.AudioBitrate * 1000.0f) / 8.0f);
                        resource.Duration        = new Time((int)f.Properties.Duration.TotalSeconds).ToString();
                        resource.NrAudioChannels = f.Properties.AudioChannels;
                        resource.SampleFrequency = f.Properties.AudioSampleRate;
                        resource.Size            = aInfo.Length;
                        resource.Uri             = aResourceUri;

                        resource.ProtocolInfo = string.Format("http-get:*:{0}:*", f.MimeType.Replace("taglib", "video"));

                        if (!string.IsNullOrEmpty(aArtworkUri))
                        {
                            video.AlbumArtUri.Add(aArtworkUri);
                        }

                        return(video);
                    }
                }
            }
            catch (TagLib.UnsupportedFormatException)
            {
            }
            catch (Exception e)
            {
                UserLog.WriteLine(aInfo.FullName + ": " + e.Message);
            }

            // check for image file
            string mimeType;

            if (IsImageFile(aInfo, out mimeType))
            {
                photo    photo    = new photo();
                resource resource = new resource();
                photo.Res.Add(resource);

                photo.Id          = aInfo.FullName;
                photo.Title       = aInfo.Name;
                photo.WriteStatus = "PROTECTED";
                photo.Restricted  = true;

                resource.Size         = aInfo.Length;
                resource.Uri          = aResourceUri;
                resource.ProtocolInfo = string.Format("http-get:*:{0}:*", mimeType);

                if (!string.IsNullOrEmpty(aArtworkUri))
                {
                    photo.AlbumArtUri.Add(aArtworkUri);
                }

                return(photo);
            }

            // all other types
            {
                item     item     = new item();
                resource resource = new resource();
                item.Res.Add(resource);

                item.Id          = aInfo.FullName;
                item.Title       = aInfo.Name;
                item.WriteStatus = "PROTECTED";
                item.Restricted  = true;

                resource.Size         = aInfo.Length;
                resource.Uri          = aResourceUri;
                resource.ProtocolInfo = string.Format("http-get:*:application/octet-stream:*");

                if (!string.IsNullOrEmpty(aArtworkUri))
                {
                    item.AlbumArtUri.Add(aArtworkUri);
                }

                return(item);
            }
        }
Пример #16
0
        public void Process(NodeItem aNode)
        {
            LibraryItem libItem = aNode.LibraryItem;

            musicTrack track = new musicTrack();

            track.Id          = aNode.Id.ToString();
            track.RefId       = aNode.RefId.ToString();
            track.ParentId    = iParent.Id.ToString();
            track.Restricted  = true;
            track.WriteStatus = "PROTECTED";

            if (libItem.Name != null)
            {
                track.Title = libItem.Name;
            }

            if (libItem.Album != null)
            {
                track.Album.Add(libItem.Album);
            }

            if (libItem.Artist != null)
            {
                artist artist = new artist();
                artist.Artist = libItem.Artist;
                track.Artist.Add(artist);
            }

            if (libItem.Genre != null)
            {
                track.Genre.Add(libItem.Genre);
            }

            if (libItem.DiscCount != -1)
            {
                track.OriginalDiscCount = (int)libItem.DiscCount;
            }

            if (libItem.DiscNumber != -1)
            {
                track.OriginalDiscNumber = (int)libItem.DiscNumber;
            }

            if (libItem.TrackNumber != -1)
            {
                track.OriginalTrackNumber = (int)libItem.TrackNumber;
            }

            resource res = new resource();

            if (libItem.BitRate != -1)
            {
                res.Bitrate = ((int)libItem.BitRate * 1000) / 8;
            }

            if (libItem.SampleRate != -1)
            {
                res.SampleFrequency = (int)libItem.SampleRate;
            }

            if (libItem.Size != -1)
            {
                res.Size = libItem.Size;
            }

            if (libItem.TotalTime != -1)
            {
                Upnp.Time totalTime = new Time(Convert.ToInt32(libItem.TotalTime / 1000));
                res.Duration = totalTime.ToString();
            }

            if (libItem.Kind.Contains("MPEG audio file"))
            {
                res.ProtocolInfo = "http-get:*:audio/mpeg:*";
            }
            else if (libItem.Kind.Contains("WAV audio file"))
            {
                res.ProtocolInfo = "http-get:*:audio/x-wav:*";
            }
            else if (libItem.Kind.Contains("AIFF audio file"))
            {
                res.ProtocolInfo = "http-get:*:audio/x-aiff:*";
            }
            else if (libItem.Kind.Contains("AAC audio file"))
            {
                res.ProtocolInfo = "http-get:*:audio/x-m4a:*";
            }
            else if (libItem.Kind.Contains("Apple Lossless audio file"))
            {
                res.ProtocolInfo = "http-get:*:audio/x-m4a:*";
            }
            else
            {
                // if the file kind is unrecognised, set the protocol info so the
                // DS will decide - this means that KDT will add the track to the
                // DS playlist and then the DS can decide whether it wants to play it
                res.ProtocolInfo = "http-get:*:*:*";
            }

            if (libItem.Location != null)
            {
                System.Uri uri = new System.Uri(libItem.Location);
                if (uri.Scheme == "file" && uri.Host == "localhost")
                {
                    // handle paths that are "/Users/..." or "/C:\\Users\\..." i.e. mac or windows
                    // strings passed to the VirtualFileSystem.Uri method must be unescaped. The unescaping
                    // was initially implemented at the point where the Location element is read from
                    // the XML file (the Location URI in the XML file is escaped). However, when this
                    // unescaped string was passed to the Uri constructor, the uri.AbsolutePath returns
                    // an **escaped** string, thus another unescape had to be performed here anyway. So,
                    // no point in doing it twice - just do it here
                    string path = System.Uri.UnescapeDataString(uri.AbsolutePath);
                    if (path[2] == ':')
                    {
                        path = path.Substring(1);
                    }
                    try
                    {
                        res.Uri = iSupport.VirtualFileSystem.Uri(path);
                    }
                    catch (HttpServerException) { }
                }
            }

            if (res.ProtocolInfo != "" && res.Uri != "")
            {
                track.Res.Add(res);
            }

            if (libItem.AlbumArtId != null)
            {
                string filename = iLibrary.GetAlbumArtFilenameNoExt(libItem.AlbumArtId) + libItem.AlbumArtExt;
                try
                {
                    string albumArtUri = iSupport.VirtualFileSystem.Uri(filename);
                    track.AlbumArtUri.Add(albumArtUri);
                }
                catch (HttpServerException) { }
            }

            iMetadata = track;
        }
Пример #17
0
        public static string Publisher(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is album)
            {
                album item = aObject as album;
                for (int i = 0; i < item.Publisher.Count; ++i)
                {
                    if (i > 0 && i < item.Publisher.Count - 1)
                    {
                        result += ", ";
                    }
                    result += item.Publisher[i];
                }
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                result = item.Publisher;
            }
            else if (aObject is musicTrack)
            {
                musicTrack item = aObject as musicTrack;
                for (int i = 0; i < item.Publisher.Count; ++i)
                {
                    if (i > 0 && i < item.Publisher.Count - 1)
                    {
                        result += ", ";
                    }
                    result += item.Publisher[i];
                }
            }
            else if (aObject is audioBook)
            {
                audioBook item = aObject as audioBook;
                for (int i = 0; i < item.Publisher.Count; ++i)
                {
                    if (i > 0 && i < item.Publisher.Count - 1)
                    {
                        result += ", ";
                    }
                    result += item.Publisher[i];
                }
            }
            else if (aObject is videoItem)
            {
                videoItem item = aObject as videoItem;
                result = item.Publisher;
            }
            else if (aObject is videoBroadcast)
            {
                videoBroadcast item = aObject as videoBroadcast;
                result = item.Publisher;
            }
            else if (aObject is movie)
            {
                movie item = aObject as movie;
                result = item.Publisher;
            }

            // always return a non-null string
            return(NonNullString(result));
        }
Пример #18
0
        public static string AlbumArtist(upnpObject aObject)
        {
            string result = string.Empty;

            if (aObject is person)
            {
                person person = aObject as person;
                result = person.Title;
            }
            else if (aObject is musicAlbum)
            {
                // Album Artist for a musicAlbum object is, in order of preference,
                // - the <artist role="albumArtist"> value
                // - the <artist> value
                // - the <creator> value
                musicAlbum album = aObject as musicAlbum;

                string roleAlbumArtist = null;
                string roleNull        = null;
                foreach (artist a in album.Artist)
                {
                    if (string.IsNullOrEmpty(a.Role))
                    {
                        roleNull = a.Artist;
                    }
                    else if (a.Role.ToLower() == "albumartist")
                    {
                        roleAlbumArtist = a.Artist;
                    }
                }

                if (!string.IsNullOrEmpty(roleAlbumArtist))
                {
                    result = roleAlbumArtist;
                }
                else if (!string.IsNullOrEmpty(roleNull))
                {
                    result = roleNull;
                }
                else
                {
                    result = album.Creator;
                }
            }
            else if (aObject is musicTrack)
            {
                // Album Artist for a track is unambiguous - it is the <artist role="albumArtist"> value or nothing
                musicTrack item = aObject as musicTrack;
                foreach (artist a in item.Artist)
                {
                    if (a.Role != null && a.Role.ToLower() == "albumartist")
                    {
                        result = a.Artist;
                        break;
                    }
                }
            }
            else if (aObject is musicVideoClip)
            {
                musicVideoClip item = aObject as musicVideoClip;
                foreach (artist a in item.Artist)
                {
                    if (a.Role != null && a.Role.ToLower() == "albumartist")
                    {
                        result = a.Artist;
                        break;
                    }
                }
            }

            // always return a non-null string
            return(NonNullString(result));
        }