static void ParseItemVoddler(CFileItem* item, SResources& resources, TiXmlElement* element, const std::string& name, const std::string& xmlns, const std::string& path) { CVideoInfoTag* vtag = item->GetVideoInfoTag(); std::string text = GetValue(element); if(name == "trailer") { vtag->m_strTrailer = text; SResource res; res.tag = "voddler:trailer"; res.mime = XMLUtils::GetAttribute(element, "type"); res.path = text; resources.push_back(res); } else if(name == "year") vtag->SetYear(atoi(text.c_str())); else if(name == "rating") vtag->SetRating((float)atof(text.c_str())); else if(name == "tagline") vtag->m_strTagLine = text; else if(name == "posterwall") { const char* url = element->Attribute("url"); if(url) item->SetArt("fanart", url); else if(IsPathToThumbnail(text)) item->SetArt("fanart", text); } }
static void ParseItemZink(CFileItem* item, SResources& resources, TiXmlElement* element, const std::string& name, const std::string& xmlns, const std::string& path) { CVideoInfoTag* vtag = item->GetVideoInfoTag(); std::string text = GetValue(element); if (name == "episode") vtag->m_iEpisode = atoi(text.c_str()); else if(name == "season") vtag->m_iSeason = atoi(text.c_str()); else if(name == "views") vtag->m_playCount = atoi(text.c_str()); else if(name == "airdate") vtag->m_firstAired.SetFromDateString(text); else if(name == "userrating") vtag->SetRating((float)atof(text.c_str())); else if(name == "duration") vtag->m_duration = atoi(text.c_str()); else if(name == "durationstr") vtag->m_duration = StringUtils::TimeStringToSeconds(text); }
void CVideoLibrary::UpdateVideoTag(const CVariant ¶meterObject, CVideoInfoTag& details, std::map<std::string, std::string> &artwork, std::set<std::string> &removedArtwork, std::set<std::string> &updatedDetails) { if (ParameterNotNull(parameterObject, "title")) details.SetTitle(parameterObject["title"].asString()); if (ParameterNotNull(parameterObject, "playcount")) details.m_playCount = (int)parameterObject["playcount"].asInteger(); if (ParameterNotNull(parameterObject, "runtime")) details.m_duration = (int)parameterObject["runtime"].asInteger(); std::vector<std::string> director(details.m_director); UpdateVideoTagField(parameterObject, "director", director, updatedDetails); details.SetDirector(director); std::vector<std::string> studio(details.m_studio); UpdateVideoTagField(parameterObject, "studio", studio, updatedDetails); details.SetStudio(studio); if (ParameterNotNull(parameterObject, "year")) details.m_iYear = (int)parameterObject["year"].asInteger(); if (ParameterNotNull(parameterObject, "plot")) details.SetPlot(parameterObject["plot"].asString()); if (ParameterNotNull(parameterObject, "album")) details.SetAlbum(parameterObject["album"].asString()); std::vector<std::string> artist(details.m_artist); UpdateVideoTagField(parameterObject, "artist", artist, updatedDetails); details.SetArtist(artist); std::vector<std::string> genre(details.m_genre); UpdateVideoTagField(parameterObject, "genre", genre, updatedDetails); details.SetGenre(genre); if (ParameterNotNull(parameterObject, "track")) details.m_iTrack = (int)parameterObject["track"].asInteger(); if (ParameterNotNull(parameterObject, "rating")) { details.SetRating(parameterObject["rating"].asFloat()); updatedDetails.insert("ratings"); } if (ParameterNotNull(parameterObject, "votes")) { details.SetVotes(StringUtils::ReturnDigits(parameterObject["votes"].asString())); updatedDetails.insert("ratings"); //Votes and ratings both need updates now, this will trigger those } if (ParameterNotNull(parameterObject, "ratings")) { CVariant ratings = parameterObject["ratings"]; for (CVariant::const_iterator_map rIt = ratings.begin_map(); rIt != ratings.end_map(); rIt++) { if (rIt->second.isArray() && ParameterNotNull(rIt->second, "name") && ParameterNotNull(rIt->second, "rating")) { details.SetRating(rIt->second["rating"].asFloat(), rIt->second["name"].asString()); if (ParameterNotNull(rIt->second, "votes")) details.SetVotes(StringUtils::ReturnDigits(parameterObject["votes"].asString()), rIt->second["name"].asString()); } } updatedDetails.insert("ratings"); } if (ParameterNotNull(parameterObject, "userrating")) details.m_iUserRating = parameterObject["userrating"].asInteger(); if (ParameterNotNull(parameterObject, "mpaa")) details.SetMPAARating(parameterObject["mpaa"].asString()); if (ParameterNotNull(parameterObject, "imdbnumber")) details.SetIMDBNumber(parameterObject["imdbnumber"].asString()); if (ParameterNotNull(parameterObject, "premiered")) SetFromDBDate(parameterObject["premiered"], details.m_premiered); if (ParameterNotNull(parameterObject, "lastplayed")) SetFromDBDateTime(parameterObject["lastplayed"], details.m_lastPlayed); if (ParameterNotNull(parameterObject, "firstaired")) SetFromDBDate(parameterObject["firstaired"], details.m_firstAired); if (ParameterNotNull(parameterObject, "productioncode")) details.SetProductionCode(parameterObject["productioncode"].asString()); if (ParameterNotNull(parameterObject, "season")) details.m_iSeason = (int)parameterObject["season"].asInteger(); if (ParameterNotNull(parameterObject, "episode")) details.m_iEpisode = (int)parameterObject["episode"].asInteger(); if (ParameterNotNull(parameterObject, "originaltitle")) details.SetOriginalTitle(parameterObject["originaltitle"].asString()); if (ParameterNotNull(parameterObject, "trailer")) details.SetTrailer(parameterObject["trailer"].asString()); if (ParameterNotNull(parameterObject, "tagline")) details.SetTagLine(parameterObject["tagline"].asString()); if (ParameterNotNull(parameterObject, "plotoutline")) details.SetPlotOutline(parameterObject["plotoutline"].asString()); std::vector<std::string> credits(details.m_writingCredits); UpdateVideoTagField(parameterObject, "writer", credits, updatedDetails); details.SetWritingCredits(credits); std::vector<std::string> country(details.m_country); UpdateVideoTagField(parameterObject, "country", country, updatedDetails); details.SetCountry(country); if (ParameterNotNull(parameterObject, "top250")) details.m_iTop250 = (int)parameterObject["top250"].asInteger(); if (ParameterNotNull(parameterObject, "sorttitle")) details.SetSortTitle(parameterObject["sorttitle"].asString()); if (ParameterNotNull(parameterObject, "episodeguide")) details.SetEpisodeGuide(parameterObject["episodeguide"].asString()); if (ParameterNotNull(parameterObject, "set")) { details.SetSet(parameterObject["set"].asString()); updatedDetails.insert("set"); } std::vector<std::string> showLink(details.m_showLink); UpdateVideoTagField(parameterObject, "showlink", showLink, updatedDetails); details.SetShowLink(showLink); std::vector<std::string> tags(details.m_tags); UpdateVideoTagField(parameterObject, "tag", tags, updatedDetails); details.SetTags(tags); if (ParameterNotNull(parameterObject, "thumbnail")) { std::string value = parameterObject["thumbnail"].asString(); artwork["thumb"] = StringUtils::Trim(value); updatedDetails.insert("art.altered"); } if (ParameterNotNull(parameterObject, "fanart")) { std::string value = parameterObject["fanart"].asString(); artwork["fanart"] = StringUtils::Trim(value); updatedDetails.insert("art.altered"); } if (ParameterNotNull(parameterObject, "art")) { CVariant art = parameterObject["art"]; for (CVariant::const_iterator_map artIt = art.begin_map(); artIt != art.end_map(); artIt++) { if (artIt->second.isString() && !artIt->second.asString().empty()) { artwork[artIt->first] = CTextureUtils::UnwrapImageURL(artIt->second.asString()); updatedDetails.insert("art.altered"); } else if (artIt->second.isNull()) { artwork.erase(artIt->first); removedArtwork.insert(artIt->first); } } } }
static void ParseItemMRSS(CFileItem* item, SResources& resources, TiXmlElement* item_child, const std::string& name, const std::string& xmlns, const std::string& path) { CVideoInfoTag* vtag = item->GetVideoInfoTag(); std::string text = GetValue(item_child); if(name == "content") { SResource res; res.tag = "media:content"; res.mime = XMLUtils::GetAttribute(item_child, "type"); res.path = XMLUtils::GetAttribute(item_child, "url"); item_child->Attribute("width", &res.width); item_child->Attribute("height", &res.height); item_child->Attribute("bitrate", &res.bitrate); item_child->Attribute("duration", &res.duration); if(item_child->Attribute("fileSize")) res.size = _atoi64(item_child->Attribute("fileSize")); resources.push_back(res); ParseItem(item, resources, item_child, path); } else if(name == "group") { ParseItem(item, resources, item_child, path); } else if(name == "thumbnail") { if(!item_child->NoChildren() && IsPathToThumbnail(item_child->FirstChild()->ValueStr())) item->SetArt("thumb", item_child->FirstChild()->ValueStr()); else { const char * url = item_child->Attribute("url"); if(url && IsPathToThumbnail(url)) item->SetArt("thumb", url); } } else if (name == "title") { if(text.empty()) return; if(text.length() > item->m_strTitle.length()) item->m_strTitle = text; } else if(name == "description") { if(text.empty()) return; std::string description = text; if(XMLUtils::GetAttribute(item_child, "type") == "html") HTML::CHTMLUtil::RemoveTags(description); item->SetProperty("description", description); } else if(name == "category") { if(text.empty()) return; std::string scheme = XMLUtils::GetAttribute(item_child, "scheme"); /* okey this is silly, boxee what did you think?? */ if (scheme == "urn:boxee:genre") vtag->m_genre.push_back(text); else if(scheme == "urn:boxee:title-type") { if (text == "tv") item->SetProperty("boxee:istvshow", true); else if(text == "movie") item->SetProperty("boxee:ismovie", true); } else if(scheme == "urn:boxee:episode") vtag->m_iEpisode = atoi(text.c_str()); else if(scheme == "urn:boxee:season") vtag->m_iSeason = atoi(text.c_str()); else if(scheme == "urn:boxee:show-title") vtag->m_strShowTitle = text.c_str(); else if(scheme == "urn:boxee:view-count") vtag->m_playCount = atoi(text.c_str()); else if(scheme == "urn:boxee:source") item->SetProperty("boxee:provider_source", text); else vtag->m_genre = StringUtils::Split(text, g_advancedSettings.m_videoItemSeparator); } else if(name == "rating") { std::string scheme = XMLUtils::GetAttribute(item_child, "scheme"); if(scheme == "urn:user") vtag->SetRating((float)atof(text.c_str())); else vtag->m_strMPAARating = text; } else if(name == "credit") { std::string role = XMLUtils::GetAttribute(item_child, "role"); if (role == "director") vtag->m_director.push_back(text); else if(role == "author" || role == "writer") vtag->m_writingCredits.push_back(text); else if(role == "actor") { SActorInfo actor; actor.strName = text; vtag->m_cast.push_back(actor); } } else if(name == "copyright") vtag->m_studio = StringUtils::Split(text, g_advancedSettings.m_videoItemSeparator); else if(name == "keywords") item->SetProperty("keywords", text); }