diff options
author | elupus <elupus@xbmc.org> | 2011-05-20 23:30:27 +0200 |
---|---|---|
committer | elupus <elupus@xbmc.org> | 2011-05-20 23:30:27 +0200 |
commit | 92a25593399e007815abd03923481bc5a84df0c9 (patch) | |
tree | 782e88631ac8ca4050f8b27b19e2c989ff185143 | |
parent | 962e67a329a97eedab4317b274a8a7083a3de7a7 (diff) |
changed: make sure we serve metadata for tvshow folders
-rw-r--r-- | xbmc/network/UPnP.cpp | 61 |
1 files changed, 47 insertions, 14 deletions
diff --git a/xbmc/network/UPnP.cpp b/xbmc/network/UPnP.cpp index d1c9712364..ef0272c551 100644 --- a/xbmc/network/UPnP.cpp +++ b/xbmc/network/UPnP.cpp @@ -670,6 +670,8 @@ CUPnPServer::BuildObject(const CFileItem& item, container->m_ObjectClass.type = "object.container"; container->m_ChildrenCount = -1; + CStdStringArray strings; + /* this might be overkill, but hey */ if (item.IsMusicDb()) { MUSICDATABASEDIRECTORY::NODE_TYPE node = CMusicDatabaseDirectory::GetDirectoryType(item.m_strPath); @@ -717,25 +719,56 @@ CUPnPServer::BuildObject(const CFileItem& item, } } else if (item.IsVideoDb()) { VIDEODATABASEDIRECTORY::NODE_TYPE node = CVideoDatabaseDirectory::GetDirectoryType(item.m_strPath); - if(quirks & ECLIENTQUIRKS_ONLYSTORAGEFOLDER) { - container->m_ObjectClass.type += ".storageFolder"; - } else { - switch(node) { - case VIDEODATABASEDIRECTORY::NODE_TYPE_GENRE: - container->m_ObjectClass.type += ".genre.movieGenre"; - break; - case VIDEODATABASEDIRECTORY::NODE_TYPE_ACTOR: - container->m_ObjectClass.type += ".person"; - break; - default: - container->m_ObjectClass.type += ".storageFolder"; - break; - } + CVideoInfoTag &tag = *(CVideoInfoTag*)item.GetVideoInfoTag(); + switch(node) { + case VIDEODATABASEDIRECTORY::NODE_TYPE_GENRE: + container->m_ObjectClass.type += ".genre.movieGenre"; + break; + case VIDEODATABASEDIRECTORY::NODE_TYPE_ACTOR: + container->m_ObjectClass.type += ".person.videoArtist"; + container->m_Creator = tag.m_strArtist; + container->m_Title = tag.m_strTitle; + break; + case VIDEODATABASEDIRECTORY::NODE_TYPE_TITLE_TVSHOWS: + container->m_ObjectClass.type += ".album.videoAlbum"; + container->m_Recorded.program_title = "S" + ("0" + NPT_String::FromInteger(tag.m_iSeason)).Right(2); + container->m_Recorded.program_title += "E" + ("0" + NPT_String::FromInteger(tag.m_iEpisode)).Right(2); + container->m_Recorded.program_title += " : " + tag.m_strTitle; + container->m_Recorded.series_title = tag.m_strShowTitle; + container->m_Recorded.episode_number = tag.m_iSeason * 100 + tag.m_iEpisode; + container->m_Title = container->m_Recorded.series_title + " - " + container->m_Recorded.program_title; + container->m_Date = tag.m_strFirstAired; + container->m_Title = tag.m_strTitle; + container->m_Date = NPT_String::FromInteger(tag.m_iYear) + "-01-01"; + + StringUtils::SplitString(tag.m_strGenre, " / ", strings); + for(CStdStringArray::iterator it = strings.begin(); it != strings.end(); it++) { + container->m_Affiliation.genre.Add((*it).c_str()); + } + + for(CVideoInfoTag::iCast it = tag.m_cast.begin();it != tag.m_cast.end();it++) { + container->m_People.actors.Add(it->strName.c_str(), it->strRole.c_str()); + } + + container->m_People.director = tag.m_strDirector; + container->m_People.authors.Add(tag.m_strWritingCredits.c_str()); + + container->m_Description.description = tag.m_strTagLine; + container->m_Description.long_description = tag.m_strPlot; + + break; + default: + container->m_ObjectClass.type += ".storageFolder"; + break; } } else if (item.IsPlayList()) { container->m_ObjectClass.type += ".playlistContainer"; } + if(quirks & ECLIENTQUIRKS_ONLYSTORAGEFOLDER) { + container->m_ObjectClass.type = "object.container.storageFolder"; + } + /* Get the number of children for this container */ if (with_count && upnp_server) { if (object->m_ObjectID.StartsWith("virtualpath://")) { |