aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornight199uk <night199uk@xbmc.org>2013-08-15 01:39:45 +0800
committerJonathan Marshall <jmarshall@xbmc.org>2013-12-24 13:48:51 +1300
commit7373e661ea384502423dc5f761f6eba44fbb2e70 (patch)
tree73cda20ce7f0d32c4e88ab315dc2c1c7392ad86a
parent2dd2fc63e8d7728178f20a2bde492f90ba8ef1cb (diff)
[musicdb] fix: make the guidialog discography use artist id instead of name
allows us to deal with duplicate named albums from multiple artists
-rw-r--r--xbmc/music/dialogs/GUIDialogMusicInfo.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/xbmc/music/dialogs/GUIDialogMusicInfo.cpp b/xbmc/music/dialogs/GUIDialogMusicInfo.cpp
index 62abec3fee..7c26b5d62a 100644
--- a/xbmc/music/dialogs/GUIDialogMusicInfo.cpp
+++ b/xbmc/music/dialogs/GUIDialogMusicInfo.cpp
@@ -222,11 +222,24 @@ void CGUIDialogMusicInfo::SetDiscography()
CMusicDatabase database;
database.Open();
+ vector<int> albumsByArtist;
+ database.GetAlbumsByArtist(m_artist.idArtist, true, albumsByArtist);
+
for (unsigned int i=0;i<m_artist.discography.size();++i)
{
CFileItemPtr item(new CFileItem(m_artist.discography[i].first));
item->SetLabel2(m_artist.discography[i].second);
- long idAlbum = database.GetAlbumByName(item->GetLabel(),m_artist.strArtist);
+
+ int idAlbum = -1;
+ for (vector<int>::const_iterator album = albumsByArtist.begin(); album != albumsByArtist.end(); ++album)
+ {
+ if (database.GetAlbumById(*album).Equals(item->GetLabel()))
+ {
+ idAlbum = *album;
+ item->GetMusicInfoTag()->SetDatabaseId(idAlbum, "album");
+ break;
+ }
+ }
if (idAlbum != -1) // we need this slight stupidity to get correct case for the album name
item->SetArt("thumb", database.GetArtForItem(idAlbum, "album", "thumb"));
@@ -541,14 +554,14 @@ void CGUIDialogMusicInfo::OnSearch(const CFileItem* pItem)
{
CMusicDatabase database;
database.Open();
- long idAlbum = database.GetAlbumByName(pItem->GetLabel(),m_artist.strArtist);
- if (idAlbum != -1)
+ if (pItem->HasMusicInfoTag() &&
+ pItem->GetMusicInfoTag()->GetDatabaseId() > 0)
{
CAlbum album;
- if (database.GetAlbumInfo(idAlbum,album,&album.songs))
+ if (database.GetAlbumInfo(pItem->GetMusicInfoTag()->GetDatabaseId(), album, &album.songs))
{
CStdString strPath;
- database.GetAlbumPath(idAlbum,strPath);
+ database.GetAlbumPath(pItem->GetMusicInfoTag()->GetDatabaseId(), strPath);
SetAlbum(album,strPath);
Update();
}