diff options
author | night199uk <night199uk@xbmc.org> | 2013-08-15 01:39:45 +0800 |
---|---|---|
committer | Jonathan Marshall <jmarshall@xbmc.org> | 2013-12-24 13:48:51 +1300 |
commit | 7373e661ea384502423dc5f761f6eba44fbb2e70 (patch) | |
tree | 73cda20ce7f0d32c4e88ab315dc2c1c7392ad86a | |
parent | 2dd2fc63e8d7728178f20a2bde492f90ba8ef1cb (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.cpp | 23 |
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(); } |