Exemple #1
0
JSONRPC_STATUS CAudioLibrary::SetArtistDetails(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
    int id = (int)parameterObject["artistid"].asInteger();

    CMusicDatabase musicdatabase;
    if (!musicdatabase.Open())
        return InternalError;

    CArtist artist;
    if (!musicdatabase.GetArtist(id, artist) || artist.idArtist <= 0)
        return InvalidParams;

    if (ParameterNotNull(parameterObject, "artist"))
        artist.strArtist = parameterObject["artist"].asString();
    if (ParameterNotNull(parameterObject, "instrument"))
        CopyStringArray(parameterObject["instrument"], artist.instruments);
    if (ParameterNotNull(parameterObject, "style"))
        CopyStringArray(parameterObject["style"], artist.styles);
    if (ParameterNotNull(parameterObject, "mood"))
        CopyStringArray(parameterObject["mood"], artist.moods);
    if (ParameterNotNull(parameterObject, "born"))
        artist.strBorn = parameterObject["born"].asString();
    if (ParameterNotNull(parameterObject, "formed"))
        artist.strFormed = parameterObject["formed"].asString();
    if (ParameterNotNull(parameterObject, "description"))
        artist.strBiography = parameterObject["description"].asString();
    if (ParameterNotNull(parameterObject, "genre"))
        CopyStringArray(parameterObject["genre"], artist.genre);
    if (ParameterNotNull(parameterObject, "died"))
        artist.strDied = parameterObject["died"].asString();
    if (ParameterNotNull(parameterObject, "disbanded"))
        artist.strDisbanded = parameterObject["disbanded"].asString();
    if (ParameterNotNull(parameterObject, "yearsactive"))
        CopyStringArray(parameterObject["yearsactive"], artist.yearsActive);

    if (!musicdatabase.UpdateArtist(artist))
        return InternalError;

    CJSONRPCUtils::NotifyItemUpdated();
    return ACK;
}
Exemple #2
0
JSONRPC_STATUS CAudioLibrary::SetArtistDetails(const std::string &method, ITransportLayer *transport, IClient *client, const CVariant &parameterObject, CVariant &result)
{
  int id = (int)parameterObject["artistid"].asInteger();

  CMusicDatabase musicdatabase;
  if (!musicdatabase.Open())
    return InternalError;

  CArtist artist;
  if (!musicdatabase.GetArtist(id, artist) || artist.idArtist <= 0)
    return InvalidParams;

  if (ParameterNotNull(parameterObject, "artist"))
    artist.strArtist = parameterObject["artist"].asString();
  if (ParameterNotNull(parameterObject, "instrument"))
    CopyStringArray(parameterObject["instrument"], artist.instruments);
  if (ParameterNotNull(parameterObject, "style"))
    CopyStringArray(parameterObject["style"], artist.styles);
  if (ParameterNotNull(parameterObject, "mood"))
    CopyStringArray(parameterObject["mood"], artist.moods);
  if (ParameterNotNull(parameterObject, "born"))
    artist.strBorn = parameterObject["born"].asString();
  if (ParameterNotNull(parameterObject, "formed"))
    artist.strFormed = parameterObject["formed"].asString();
  if (ParameterNotNull(parameterObject, "description"))
    artist.strBiography = parameterObject["description"].asString();
  if (ParameterNotNull(parameterObject, "genre"))
    CopyStringArray(parameterObject["genre"], artist.genre);
  if (ParameterNotNull(parameterObject, "died"))
    artist.strDied = parameterObject["died"].asString();
  if (ParameterNotNull(parameterObject, "disbanded"))
    artist.strDisbanded = parameterObject["disbanded"].asString();
  if (ParameterNotNull(parameterObject, "yearsactive"))
    CopyStringArray(parameterObject["yearsactive"], artist.yearsActive);
  if (ParameterNotNull(parameterObject, "musicbrainzartistid"))
    artist.strMusicBrainzArtistID = parameterObject["musicbrainzartistid"].asString();
  if (ParameterNotNull(parameterObject, "sortname"))
    artist.strSortName = parameterObject["sortname"].asString();
  if (ParameterNotNull(parameterObject, "type"))
    artist.strType = parameterObject["type"].asString();
  if (ParameterNotNull(parameterObject, "gender"))
    artist.strGender = parameterObject["gender"].asString();
  if (ParameterNotNull(parameterObject, "disambiguation"))
    artist.strDisambiguation = parameterObject["disambiguation"].asString();

  // Update existing art. Any existing artwork that isn't specified in this request stays as is.
  // If the value is null then the existing art with that type is removed.
  if (ParameterNotNull(parameterObject, "art"))
  {
    // Get current artwork
    musicdatabase.GetArtForItem(artist.idArtist, MediaTypeArtist, artist.art);

    std::set<std::string> removedArtwork;
    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())
        artist.art[artIt->first] = CTextureUtils::UnwrapImageURL(artIt->second.asString());
      else if (artIt->second.isNull())
      {
        artist.art.erase(artIt->first);
        removedArtwork.insert(artIt->first);
      }
    }
    // Remove null art now, as not done by update
    if (!musicdatabase.RemoveArtForItem(artist.idArtist, MediaTypeArtist, removedArtwork))
      return InternalError;
  }

  // Update artist including adding or replacing (but not removing) art
  if (!musicdatabase.UpdateArtist(artist))
    return InternalError;

  CJSONRPCUtils::NotifyItemUpdated();
  return ACK;
}