Skip to content

Commit

Permalink
Merge pull request xbmc#7859 from mkortstiege/SortByArtistThenYear
Browse files Browse the repository at this point in the history
[musiclibrary] add SortByArtistThenYear
  • Loading branch information
MartijnKaijser committed Aug 21, 2015
2 parents 01b693e + 0e0dbde commit 66717fd
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 7 deletions.
7 changes: 6 additions & 1 deletion addons/resource.language.en_gb/resources/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -2543,7 +2543,12 @@ msgctxt "#577"
msgid "Date taken"
msgstr ""

#empty strings from id 578 to 579
#: xbmc/utils/SortUtils.cpp
msgctxt "#578"
msgid "Artist / Year"
msgstr ""

#empty string with id 579

msgctxt "#580"
msgid "Sort direction"
Expand Down
1 change: 1 addition & 0 deletions xbmc/SortFileItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ typedef enum {
SORT_METHOD_TITLE,
SORT_METHOD_TITLE_IGNORE_THE,
SORT_METHOD_ARTIST,
SORT_METHOD_ARTIST_AND_YEAR,
SORT_METHOD_ARTIST_IGNORE_THE,
SORT_METHOD_ALBUM,
SORT_METHOD_ALBUM_IGNORE_THE,
Expand Down
9 changes: 9 additions & 0 deletions xbmc/music/GUIViewStateMusic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& item
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// artist
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// artist / year
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// year
AddSortMethod(SortByYear, 562, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight));

Expand Down Expand Up @@ -247,6 +249,7 @@ CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& item
case NODE_TYPE_SINGLES:
{
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty
AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight));
AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty
Expand All @@ -268,6 +271,7 @@ CGUIViewStateMusicDatabase::CGUIViewStateMusicDatabase(const CFileItemList& item
AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Title, Artist, Duration| empty, empty
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Title, Duration| empty, empty
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight));
AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty
AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Title - Artist, Rating
Expand Down Expand Up @@ -357,6 +361,7 @@ CGUIViewStateMusicSmartPlaylist::CGUIViewStateMusicSmartPlaylist(const CFileItem
AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Titel, Artist, Duration| empty, empty
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Titel, Duration| empty, empty
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Titel, Duration| empty, empty
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight));
AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty
AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Titel, Artist, Rating| empty, empty
Expand All @@ -377,6 +382,8 @@ CGUIViewStateMusicSmartPlaylist::CGUIViewStateMusicSmartPlaylist(const CFileItem
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// artist
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// artist / year
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight)); // Filename, empty | Userdefined, Userdefined
// year
AddSortMethod(SortByYear, 562, LABEL_MASKS("%F", "", strAlbumLeft, strAlbumRight));

Expand Down Expand Up @@ -411,6 +418,7 @@ CGUIViewStateMusicPlaylist::CGUIViewStateMusicPlaylist(const CFileItemList& item
AddSortMethod(SortByTitle, sortAttribute, 556, LABEL_MASKS("%T - %A", "%D")); // Title, Artist, Duration| empty, empty
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T - %A", "%D")); // Album, Titel, Artist, Duration| empty, empty
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%D")); // Artist, Titel, Duration| empty, empty
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%D")); // Artist, Titel, Duration| empty, empty
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS(strTrackLeft, strTrackRight));
AddSortMethod(SortByTime, 180, LABEL_MASKS("%T - %A", "%D")); // Titel, Artist, Duration| empty, empty
AddSortMethod(SortByRating, 563, LABEL_MASKS("%T - %A", "%R")); // Titel, Artist, Rating| empty, empty
Expand Down Expand Up @@ -454,6 +462,7 @@ CGUIViewStateWindowMusicNav::CGUIViewStateWindowMusicNav(const CFileItemList& it
AddSortMethod(SortByLabel, sortAttribute, 551, LABEL_MASKS("%T", "%Y")); // Filename, Duration | Foldername, empty
AddSortMethod(SortByYear, 562, LABEL_MASKS("%T", "%Y"));
AddSortMethod(SortByArtist, sortAttribute, 557, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByArtistThenYear, sortAttribute, 578, LABEL_MASKS("%A - %T", "%Y"));
AddSortMethod(SortByAlbum, sortAttribute, 558, LABEL_MASKS("%B - %T", "%Y"));

std::string strTrackLeft=CSettings::GetInstance().GetString(CSettings::SETTING_MUSICFILES_TRACKFORMAT);
Expand Down
2 changes: 0 additions & 2 deletions xbmc/settings/AdvancedSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,6 @@ void CAdvancedSettings::Initialize()
m_fanartImages = "fanart.jpg|fanart.png";

m_bMusicLibraryAllItemsOnBottom = false;
m_bMusicLibraryAlbumsSortByArtistThenYear = false;
m_bMusicLibraryCleanOnUpdate = false;
m_iMusicLibraryRecentlyAddedItems = 25;
m_strMusicLibraryAlbumFormat = "";
Expand Down Expand Up @@ -738,7 +737,6 @@ void CAdvancedSettings::ParseSettingsFile(const std::string &file)
XMLUtils::GetInt(pElement, "recentlyaddeditems", m_iMusicLibraryRecentlyAddedItems, 1, INT_MAX);
XMLUtils::GetBoolean(pElement, "prioritiseapetags", m_prioritiseAPEv2tags);
XMLUtils::GetBoolean(pElement, "allitemsonbottom", m_bMusicLibraryAllItemsOnBottom);
XMLUtils::GetBoolean(pElement, "albumssortbyartistthenyear", m_bMusicLibraryAlbumsSortByArtistThenYear);
XMLUtils::GetBoolean(pElement, "cleanonupdate", m_bMusicLibraryCleanOnUpdate);
XMLUtils::GetString(pElement, "albumformat", m_strMusicLibraryAlbumFormat);
XMLUtils::GetString(pElement, "albumformatright", m_strMusicLibraryAlbumFormatRight);
Expand Down
1 change: 0 additions & 1 deletion xbmc/settings/AdvancedSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,6 @@ class CAdvancedSettings : public ISettingCallback, public ISettingsHandler
int m_iMusicLibraryRecentlyAddedItems;
int m_iMusicLibraryDateAdded;
bool m_bMusicLibraryAllItemsOnBottom;
bool m_bMusicLibraryAlbumsSortByArtistThenYear;
bool m_bMusicLibraryCleanOnUpdate;
std::string m_strMusicLibraryAlbumFormat;
std::string m_strMusicLibraryAlbumFormatRight;
Expand Down
25 changes: 22 additions & 3 deletions xbmc/utils/SortUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "URL.h"
#include "Util.h"
#include "XBDateTime.h"
#include "settings/AdvancedSettings.h"
#include "utils/CharsetConverter.h"
#include "utils/StringUtils.h"
#include "utils/Variant.h"
Expand Down Expand Up @@ -140,9 +139,23 @@ string ByArtist(SortAttribute attributes, const SortItem &values)
{
std::string label = ArrayToString(attributes, values.at(FieldArtist));

const CVariant &album = values.at(FieldAlbum);
if (!album.isNull())
label += " " + SortUtils::RemoveArticles(album.asString());

const CVariant &track = values.at(FieldTrackNumber);
if (!track.isNull())
label += StringUtils::Format(" %i", (int)track.asInteger());

return label;
}

string ByArtistThenYear(SortAttribute attributes, const SortItem &values)
{
std::string label = ArrayToString(attributes, values.at(FieldArtist));

const CVariant &year = values.at(FieldYear);
if (g_advancedSettings.m_bMusicLibraryAlbumsSortByArtistThenYear &&
!year.isNull())
if (!year.isNull())
label += StringUtils::Format(" %i", (int)year.asInteger());

const CVariant &album = values.at(FieldAlbum);
Expand Down Expand Up @@ -521,6 +534,7 @@ map<SortBy, SortUtils::SortPreparator> fillPreparators()
preparators[SortByTrackNumber] = ByTrackNumber;
preparators[SortByTime] = ByTime;
preparators[SortByArtist] = ByArtist;
preparators[SortByArtistThenYear] = ByArtistThenYear;
preparators[SortByAlbum] = ByAlbum;
preparators[SortByAlbumType] = ByAlbumType;
preparators[SortByGenre] = ByGenre;
Expand Down Expand Up @@ -582,6 +596,10 @@ map<SortBy, Fields> fillSortingFields()
sortingFields[SortByArtist].insert(FieldYear);
sortingFields[SortByArtist].insert(FieldAlbum);
sortingFields[SortByArtist].insert(FieldTrackNumber);
sortingFields[SortByArtistThenYear].insert(FieldArtist);
sortingFields[SortByArtistThenYear].insert(FieldYear);
sortingFields[SortByArtistThenYear].insert(FieldAlbum);
sortingFields[SortByArtistThenYear].insert(FieldTrackNumber);
sortingFields[SortByAlbum].insert(FieldAlbum);
sortingFields[SortByAlbum].insert(FieldArtist);
sortingFields[SortByAlbum].insert(FieldTrackNumber);
Expand Down Expand Up @@ -817,6 +835,7 @@ const sort_map table[] = {
{ SortByTitle, SORT_METHOD_TITLE_IGNORE_THE, SortAttributeIgnoreArticle, 556 },
{ SortByTitle, SORT_METHOD_VIDEO_TITLE, SortAttributeNone, 556 },
{ SortByArtist, SORT_METHOD_ARTIST, SortAttributeNone, 557 },
{ SortByArtistThenYear, SORT_METHOD_ARTIST_AND_YEAR, SortAttributeNone, 578 },
{ SortByArtist, SORT_METHOD_ARTIST_IGNORE_THE, SortAttributeIgnoreArticle, 557 },
{ SortByAlbum, SORT_METHOD_ALBUM, SortAttributeNone, 558 },
{ SortByAlbum, SORT_METHOD_ALBUM_IGNORE_THE, SortAttributeIgnoreArticle, 558 },
Expand Down
1 change: 1 addition & 0 deletions xbmc/utils/SortUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ typedef enum {
SortByTrackNumber,
SortByTime,
SortByArtist,
SortByArtistThenYear,
SortByAlbum,
SortByAlbumType,
SortByGenre,
Expand Down

0 comments on commit 66717fd

Please sign in to comment.