Skip to content

Commit

Permalink
Merge pull request #12963 from DaveTBlake/XtraArtist
Browse files Browse the repository at this point in the history
[JSON RPC][Music]Extra artist data with JSON API update
  • Loading branch information
DaveTBlake committed Nov 8, 2017
2 parents 8caf680 + 14c4418 commit 1ca7701
Show file tree
Hide file tree
Showing 15 changed files with 189 additions and 19 deletions.
28 changes: 27 additions & 1 deletion addons/resource.language.en_gb/resources/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -755,12 +755,14 @@ msgctxt "#174"
msgid "Compiled:"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
#: addons/skin.estuary/xml/Variables.xml
msgctxt "#175"
msgid "Moods"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#176"
msgid "Styles"
Expand Down Expand Up @@ -14461,16 +14463,19 @@ msgctxt "#21891"
msgid "Artist information"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#21892"
msgid "Instruments"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#21893"
msgid "Born"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#21894"
msgid "Formed"
Expand All @@ -14481,11 +14486,13 @@ msgctxt "#21895"
msgid "Themes"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#21896"
msgid "Disbanded"
msgstr ""

#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#21897"
msgid "Died"
Expand Down Expand Up @@ -21342,7 +21349,26 @@ msgctxt "#39024"
msgid "Dependencies"
msgstr ""

#empty strings from id 39025 to 39099
#. Artist gender - male, female, other
#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#39025"
msgid "Gender"
msgstr ""

#. Brief comment to distinguish artists with the same name e.g "former bassist with Journey"
#: xbmc/dialogs/GUIDialogMediaFilter.cpp
#: xbmc/playlists/SmartPlaylist.cpp
msgctxt "#39026"
msgid "Disambiguation"
msgstr ""

#. Sort name of artist (e.g. Jackson, Michael)
msgctxt "#39027"
msgid "Sortname"
msgstr ""

#empty strings from id 39028 to 39099

#: system/settings/settings.xml
msgctxt "#39100"
Expand Down
42 changes: 42 additions & 0 deletions xbmc/GUIInfoManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1486,6 +1486,27 @@ const infomap musicpartymode[] = {{ "enabled", MUSICPM_ENABLED },
/// _string_,
/// Todo
/// }
/// \table_row3{ <b>`MusicPlayer.Property(Artist_Sortname)`</b>,
/// \anchor MusicPlayer_Property_Artist_Sortname
/// _string_,
/// Sortname of the currently playing Artist
/// }
/// \table_row3{ <b>`MusicPlayer.Property(Artist_Type)`</b>,
/// \anchor MusicPlayer_Property_Artist_Type
/// _string_,
/// Type of the currently playing Artist - person, group, orchestra, choir etc.
/// }
/// \table_row3{ <b>`MusicPlayer.Property(Artist_Gender)`</b>,
/// \anchor MusicPlayer_Property_Artist_Gender
/// _string_,
/// Gender of the currently playing Artist - male, female, other
/// }
/// \table_row3{ <b>`MusicPlayer.Property(Artist_Disambiguation)`</b>,
/// \anchor MusicPlayer_Property_Artist_Disambiguation
/// _string_,
/// Brief description of the currently playing Artist that differentiates them
/// from others with the same name
/// }
/// \table_row3{ <b>`MusicPlayer.Property(Artist_Born)`</b>,
/// \anchor MusicPlayer_Property_Artist_Born
/// _string_,
Expand Down Expand Up @@ -2690,6 +2711,27 @@ const infomap container_str[] = {{ "property", CONTAINER_PROPERTY },
/// _string_,
/// Shows the artist of the currently selected album in a list
/// }
/// \table_row3{ <b>`ListItem.Property(Artist_Sortname)`</b>,
/// \anchor ListItem_Property_Artist_Sortname
/// _string_,
/// Sortname of the currently selected Artist
/// }
/// \table_row3{ <b>`ListItem.Property(Artist_Type)`</b>,
/// \anchor ListItem_Property_Artist_Type
/// _string_,
/// Type of the currently selected Artist - person, group, orchestra, choir etc.
/// }
/// \table_row3{ <b>`ListItem.Property(Artist_Gender)`</b>,
/// \anchor ListItem_Property_Artist_Gender
/// _string_,
/// Gender of the currently selected Artist - male, female, other
/// }
/// \table_row3{ <b>`ListItem.Property(Artist_Disambiguation)`</b>,
/// \anchor ListItem_Property_Artist_Disambiguation
/// _string_,
/// Brief description of the currently selected Artist that differentiates them
/// from others with the same name
/// }
/// \table_row3{ <b>`ListItem.Property(Artist_Born)`</b>,
/// \anchor ListItem_Property_Artist_Born
/// _string_,
Expand Down
11 changes: 11 additions & 0 deletions xbmc/dialogs/GUIDialogMediaFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,17 @@ static const CGUIDialogMediaFilter::Filter filterList[] = {

{ "artists", FieldArtist, 557, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldGenre, 515, SettingType::List, "list", "string", CDatabaseQueryRule::OPERATOR_EQUALS },
{ "artists", FieldMoods, 175, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldStyles, 176, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldInstruments, 21892, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldArtistType, 564, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_EQUALS },
{ "artists", FieldGender, 39025, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_EQUALS },
{ "artists", FieldDisambiguation, 39026, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldBiography, 21887, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldBorn, 21893, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldBandFormed, 21894, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldDisbanded, 21896, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
{ "artists", FieldDied, 21897, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },

{ "albums", FieldAlbum, 556, SettingType::String, "edit", "string", CDatabaseQueryRule::OPERATOR_CONTAINS },
// { "albums", FieldArtist, 557, SettingType::List, "list", "string", CDatabaseQueryRule::OPERATOR_EQUALS },
Expand Down
18 changes: 18 additions & 0 deletions xbmc/interfaces/json-rpc/AudioLibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,16 @@ JSONRPC_STATUS CAudioLibrary::SetArtistDetails(const std::string &method, ITrans
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();

if (!musicdatabase.UpdateArtist(artist))
return InternalError;
Expand Down Expand Up @@ -601,8 +611,16 @@ JSONRPC_STATUS CAudioLibrary::SetAlbumDetails(const std::string &method, ITransp
album.fRating = parameterObject["rating"].asFloat();
if (ParameterNotNull(parameterObject, "userrating"))
album.iUserrating = parameterObject["userrating"].asInteger();
if (ParameterNotNull(parameterObject, "votes"))
album.iVotes = parameterObject["votes"].asInteger();
if (ParameterNotNull(parameterObject, "year"))
album.iYear = (int)parameterObject["year"].asInteger();
if (ParameterNotNull(parameterObject, "musicbrainzalbumid"))
album.strMusicBrainzAlbumID = parameterObject["musicbrainzalbumid"].asString();
if (ParameterNotNull(parameterObject, "musicbrainzreleasegroupid"))
album.strReleaseGroupMBID = parameterObject["musicbrainzreleasegroupid"].asString();
if (ParameterNotNull(parameterObject, "sortartist"))
album.strArtistSort = parameterObject["sortartist"].asString();

if (!musicdatabase.UpdateAlbum(album))
return InternalError;
Expand Down
12 changes: 10 additions & 2 deletions xbmc/interfaces/json-rpc/schema/methods.json
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,12 @@
{ "name": "genre", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
{ "name": "died", "$ref": "Optional.String" },
{ "name": "disbanded", "$ref": "Optional.String" },
{ "name": "yearsactive", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null }
{ "name": "yearsactive", "type": [ "null", { "$ref": "Array.String", "required": true } ], "default": null },
{ "name": "musicbrainzartistid", "$ref": "Optional.String" },
{ "name": "sortname", "$ref": "Optional.String" },
{ "name": "type", "$ref": "Optional.String" },
{ "name": "gender", "$ref": "Optional.String" },
{ "name": "disambiguation", "$ref": "Optional.String" }
],
"returns": "string"
},
Expand All @@ -997,7 +1002,10 @@
{ "name": "rating", "$ref": "Optional.Number" },
{ "name": "year", "$ref": "Optional.Integer" },
{ "name": "userrating", "$ref": "Optional.Integer" },
{ "name": "votes", "$ref": "Optional.Integer" }
{ "name": "votes", "$ref": "Optional.Integer" },
{ "name": "musicbrainzalbumid", "$ref": "Optional.String" },
{ "name": "musicbrainzreleasegroupid", "$ref": "Optional.String" },
{ "name": "sortartist", "$ref": "Optional.String" }
],
"returns": "string"
},
Expand Down
30 changes: 19 additions & 11 deletions xbmc/interfaces/json-rpc/schema/types.json
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,8 @@
"description", "genre", "died", "disbanded",
"yearsactive", "musicbrainzartistid", "fanart",
"thumbnail", "compilationartist", "dateadded",
"roles", "songgenres", "isalbumartist"]
"roles", "songgenres", "isalbumartist",
"sortname", "type", "gender", "disambiguation"]
}
},
"Audio.Fields.Album": {
Expand All @@ -470,7 +471,8 @@
"rating", "votes", "userrating","year", "musicbrainzalbumid",
"musicbrainzalbumartistid", "fanart", "thumbnail",
"playcount", "genreid", "artistid", "displayartist",
"compilation", "releasetype", "dateadded" ]
"compilation", "releasetype", "dateadded",
"sortartist", "musicbrainzreleasegroupid"]
}
},
"Audio.Fields.Song": {
Expand All @@ -485,8 +487,8 @@
"lastplayed", "disc", "genreid", "artistid", "displayartist",
"albumartistid", "albumreleasetype", "dateadded",
"votes", "userrating", "mood", "contributors",
"displaycomposer", "displayconductor", "displayorchestra", "displaylyricist"
]
"displaycomposer", "displayconductor", "displayorchestra", "displaylyricist",
"sortartist"]
}
},
"Audio.Album.ReleaseType": {
Expand Down Expand Up @@ -541,13 +543,14 @@
"artist": { "$ref": "Array.String" },
"year": { "type": "integer" },
"rating": { "type": "number" },
"musicbrainzalbumid": { "type": "string" },
"musicbrainzalbumartistid": { "type": "string" },
"musicbrainzalbumid": { "type": "string", "description": "Only returned for albums, deprecated for songs" },
"musicbrainzalbumartistid": { "$ref": "Array.String" },
"genreid": { "$ref": "Array.Integer" },
"artistid": { "$ref": "Array.Integer" },
"displayartist": { "type" : "string" },
"votes": { "type": "integer" },
"userrating": { "type": "integer" }
"userrating": { "type": "integer" },
"sortartist": { "type" : "string" }
}
},
"Audio.Details.Artist": {
Expand All @@ -568,7 +571,11 @@
"musicbrainzartistid": { "type": "string" },
"roles": {"$ref": "Audio.Artist.Roles"},
"songgenres": {"$ref": "Audio.Details.Genres"},
"isalbumartist": { "type": "boolean" }
"isalbumartist": { "type": "boolean" },
"sortname": { "type": "string" },
"type": { "type": "string" },
"gender": { "type": "string" },
"disambiguation": { "type": "string" }
}
},
"Audio.Details.Album": {
Expand All @@ -583,7 +590,8 @@
"albumlabel": { "type": "string" },
"playcount": { "type": "integer" },
"compilation": { "type": "boolean" },
"releasetype": { "$ref": "Audio.Album.ReleaseType" }
"releasetype": { "$ref": "Audio.Album.ReleaseType" },
"musicbrainzreleasegroupid": { "type": "string" }
}
},
"Audio.Details.Song": {
Expand Down Expand Up @@ -1443,7 +1451,7 @@
"locked", "channelnumber", "starttime", "endtime", "specialsortseason",
"specialsortepisode", "compilation", "releasetype", "albumreleasetype",
"contributors", "displaycomposer", "displayconductor", "displayorchestra", "displaylyricist",
"userrating" ]
"userrating", "votes", "sortartist", "musicbrainzreleasegroupid"]
}
},
"List.Item.All": {
Expand Down Expand Up @@ -1473,7 +1481,7 @@
"disc", "tag", "art", "genreid", "displayartist", "albumartistid",
"description", "theme", "mood", "style", "albumlabel", "sorttitle",
"episodeguide", "uniqueid", "dateadded", "size", "lastmodified", "mimetype",
"specialsortseason", "specialsortepisode" ]
"specialsortseason", "specialsortepisode", "sortartist", "musicbrainzreleasegroupid"]
}
},
"List.Item.File": {
Expand Down
2 changes: 1 addition & 1 deletion xbmc/interfaces/json-rpc/schema/version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
JSONRPC_VERSION 8.3.0
JSONRPC_VERSION 8.4.0
9 changes: 9 additions & 0 deletions xbmc/music/Artist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ void CArtist::MergeScrapedArtist(const CArtist& source, bool override /* = true
if ((override && !source.strSortName.empty()) || strSortName.empty())
strSortName = source.strSortName;

strType = source.strType;
strGender = source.strGender;
strDisambiguation = source.strDisambiguation;
genre = source.genre;
strBiography = source.strBiography;
styles = source.styles;
Expand Down Expand Up @@ -80,6 +83,9 @@ bool CArtist::Load(const TiXmlElement *artist, bool append, bool prioritise)
XMLUtils::GetString(artist, "name", strArtist);
XMLUtils::GetString(artist, "musicBrainzArtistID", strMusicBrainzArtistID);
XMLUtils::GetString(artist, "sortname", strSortName);
XMLUtils::GetString(artist, "type", strType);
XMLUtils::GetString(artist, "gender", strGender);
XMLUtils::GetString(artist, "disambiguation", strDisambiguation);
XMLUtils::GetStringArray(artist, "genre", genre, prioritise, g_advancedSettings.m_musicItemSeparator);
XMLUtils::GetStringArray(artist, "style", styles, prioritise, g_advancedSettings.m_musicItemSeparator);
XMLUtils::GetStringArray(artist, "mood", moods, prioritise, g_advancedSettings.m_musicItemSeparator);
Expand Down Expand Up @@ -178,6 +184,9 @@ bool CArtist::Save(TiXmlNode *node, const std::string &tag, const std::string& s
XMLUtils::SetString(artist, "name", strArtist);
XMLUtils::SetString(artist, "musicBrainzArtistID", strMusicBrainzArtistID);
XMLUtils::SetString(artist, "sortname", strSortName);
XMLUtils::SetString(artist, "type", strType);
XMLUtils::SetString(artist, "gender", strGender);
XMLUtils::SetString(artist, "disambiguation", strDisambiguation);
XMLUtils::SetStringArray(artist, "genre", genre);
XMLUtils::SetStringArray(artist, "style", styles);
XMLUtils::SetStringArray(artist, "mood", moods);
Expand Down
6 changes: 6 additions & 0 deletions xbmc/music/Artist.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ class CArtist
{
strArtist.clear();
strSortName.clear();
strType.clear();
strGender.clear();
strDisambiguation.clear();
genre.clear();
strBiography.clear();
styles.clear();
Expand Down Expand Up @@ -93,6 +96,9 @@ class CArtist
std::string strArtist;
std::string strSortName;
std::string strMusicBrainzArtistID;
std::string strType;
std::string strGender;
std::string strDisambiguation;
std::vector<std::string> genre;
std::string strBiography;
std::vector<std::string> styles;
Expand Down

0 comments on commit 1ca7701

Please sign in to comment.