Exemplo n.º 1
0
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);
  }
}
Exemplo n.º 2
0
void CVideoLibrary::UpdateVideoTag(const CVariant &parameterObject, 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.SetPlayCount(static_cast<int>(parameterObject["playcount"].asInteger()));
    if (ParameterNotNull(parameterObject, "runtime"))
        details.SetDuration(static_cast<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, "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.isObject() && ParameterNotNull(rIt->second, "rating"))
            {
                const auto& rating = rIt->second;
                if (ParameterNotNull(rating, "votes"))
                    details.SetRating(rating["rating"].asFloat(), rating["votes"].asFloat(), rIt->first, (ParameterNotNull(rating, "default") && rating["default"].asBoolean()));
                else
                    details.SetRating(rating["rating"].asFloat(), rIt->first, (ParameterNotNull(rating, "default") && rating["default"].asBoolean()));

                updatedDetails.insert("ratings");
            }
            else if (rIt->second.isNull())
            {
                details.RemoveRating(rIt->first);
                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.SetUniqueID(parameterObject["imdbnumber"].asString());
        updatedDetails.insert("uniqueid");
    }
    if (ParameterNotNull(parameterObject, "uniqueid"))
    {
        CVariant uniqueids = parameterObject["uniqueid"];
        for (CVariant::const_iterator_map idIt = uniqueids.begin_map(); idIt != uniqueids.end_map(); idIt++)
        {
            if (idIt->second.isString() && !idIt->second.asString().empty())
            {
                details.SetUniqueID(idIt->second.asString(), idIt->first);
                updatedDetails.insert("uniqueid");
            }
            else if (idIt->second.isNull() && idIt->first != details.GetDefaultUniqueID())
            {
                details.RemoveUniqueID(idIt->first);
                updatedDetails.insert("uniqueid");
            }
        }
    }
    if (ParameterNotNull(parameterObject, "premiered"))
    {
        CDateTime premiered;
        SetFromDBDate(parameterObject["premiered"], premiered);
        details.SetPremiered(premiered);
    }
    else if (ParameterNotNull(parameterObject, "year"))
        details.SetYear((int)parameterObject["year"].asInteger());
    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, "status"))
        details.SetStatus(parameterObject["status"].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);
            }
        }
    }

    if (ParameterNotNull(parameterObject, "dateadded"))
    {
        SetFromDBDateTime(parameterObject["dateadded"], details.m_dateAdded);
        updatedDetails.insert("dateadded");
    }
}