Sort discs numerically when using Group by disc.

This commit is contained in:
Mattias Andersson 2015-05-23 09:02:07 +02:00
parent 030b7e3620
commit 82dcdd3a12
3 changed files with 28 additions and 25 deletions

View File

@ -115,7 +115,7 @@ QStandardItem* GlobalSearchModel::BuildContainers(const Song& s,
case LibraryModel::GroupBy_YearAlbum: case LibraryModel::GroupBy_YearAlbum:
year = qMax(0, s.year()); year = qMax(0, s.year());
display_text = LibraryModel::PrettyYearAlbum(year, s.album()); display_text = LibraryModel::PrettyYearAlbum(year, s.album());
sort_text = LibraryModel::SortTextForYear(year) + s.album(); sort_text = LibraryModel::SortTextForNumber(year) + s.album();
unique_tag = s.album_id(); unique_tag = s.album_id();
has_album_icon = true; has_album_icon = true;
break; break;
@ -123,7 +123,7 @@ QStandardItem* GlobalSearchModel::BuildContainers(const Song& s,
case LibraryModel::GroupBy_Year: case LibraryModel::GroupBy_Year:
year = qMax(0, s.year()); year = qMax(0, s.year());
display_text = QString::number(year); display_text = QString::number(year);
sort_text = LibraryModel::SortTextForYear(year) + " "; sort_text = LibraryModel::SortTextForNumber(year) + " ";
break; break;
case LibraryModel::GroupBy_Composer: case LibraryModel::GroupBy_Composer:

View File

@ -207,7 +207,7 @@ void LibraryModel::SongsDiscovered(const SongList& songs) {
key = song.performer(); key = song.performer();
break; break;
case GroupBy_Disc: case GroupBy_Disc:
key = song.disc(); key = QString::number(song.disc());
break; break;
case GroupBy_Grouping: case GroupBy_Grouping:
key = song.grouping(); key = song.grouping();
@ -313,13 +313,13 @@ QString LibraryModel::DividerKey(GroupBy type, LibraryItem* item) const {
} }
case GroupBy_Year: case GroupBy_Year:
return SortTextForYear(item->sort_text.toInt() / 10 * 10); return SortTextForNumber(item->sort_text.toInt() / 10 * 10);
case GroupBy_YearAlbum: case GroupBy_YearAlbum:
return SortTextForYear(item->metadata.year()); return SortTextForNumber(item->metadata.year());
case GroupBy_Bitrate: case GroupBy_Bitrate:
return SortTextForBitrate(item->metadata.bitrate()); return SortTextForNumber(item->metadata.bitrate());
case GroupBy_None: case GroupBy_None:
return QString(); return QString();
@ -904,6 +904,7 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type, bool signal,
LibraryItem* item = InitItem(type, signal, parent, container_level); LibraryItem* item = InitItem(type, signal, parent, container_level);
int year = 0; int year = 0;
int bitrate = 0; int bitrate = 0;
int disc = 0;
switch (type) { switch (type) {
case GroupBy_Artist: case GroupBy_Artist:
@ -918,18 +919,17 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type, bool signal,
item->metadata.set_album(row.value(1).toString()); item->metadata.set_album(row.value(1).toString());
item->metadata.set_grouping(row.value(2).toString()); item->metadata.set_grouping(row.value(2).toString());
item->key = PrettyYearAlbum(year, item->metadata.album()); item->key = PrettyYearAlbum(year, item->metadata.album());
item->sort_text = SortTextForYear(year) + item->metadata.grouping() + item->metadata.album(); item->sort_text = SortTextForNumber(year) + item->metadata.grouping() + item->metadata.album();
break; break;
case GroupBy_Year: case GroupBy_Year:
year = qMax(0, row.value(0).toInt()); year = qMax(0, row.value(0).toInt());
item->key = QString::number(year); item->key = QString::number(year);
item->sort_text = SortTextForYear(year) + " "; item->sort_text = SortTextForNumber(year) + " ";
break; break;
case GroupBy_Composer: case GroupBy_Composer:
case GroupBy_Performer: case GroupBy_Performer:
case GroupBy_Disc:
case GroupBy_Grouping: case GroupBy_Grouping:
case GroupBy_Genre: case GroupBy_Genre:
case GroupBy_Album: case GroupBy_Album:
@ -939,6 +939,12 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type, bool signal,
item->sort_text = SortTextForArtist(item->key); item->sort_text = SortTextForArtist(item->key);
break; break;
case GroupBy_Disc:
disc = row.value(0).toInt();
item->key = QString::number(disc);
item->sort_text = SortTextForNumber(disc);
break;
case GroupBy_FileType: case GroupBy_FileType:
item->metadata.set_filetype(Song::FileType(row.value(0).toInt())); item->metadata.set_filetype(Song::FileType(row.value(0).toInt()));
item->key = item->metadata.TextForFiletype(); item->key = item->metadata.TextForFiletype();
@ -947,7 +953,7 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type, bool signal,
case GroupBy_Bitrate: case GroupBy_Bitrate:
bitrate = qMax(0, row.value(0).toInt()); bitrate = qMax(0, row.value(0).toInt());
item->key = QString::number(bitrate); item->key = QString::number(bitrate);
item->sort_text = SortTextForBitrate(bitrate) + " "; item->sort_text = SortTextForNumber(bitrate) + " ";
break; break;
case GroupBy_None: case GroupBy_None:
@ -982,21 +988,19 @@ LibraryItem* LibraryModel::ItemFromSong(GroupBy type, bool signal,
item->metadata.set_year(year); item->metadata.set_year(year);
item->metadata.set_album(s.album()); item->metadata.set_album(s.album());
item->key = PrettyYearAlbum(year, s.album()); item->key = PrettyYearAlbum(year, s.album());
item->sort_text = SortTextForYear(year) + s.grouping() + s.album(); item->sort_text = SortTextForNumber(year) + s.grouping() + s.album();
break; break;
case GroupBy_Year: case GroupBy_Year:
year = qMax(0, s.year()); year = qMax(0, s.year());
item->key = QString::number(year); item->key = QString::number(year);
item->sort_text = SortTextForYear(year) + " "; item->sort_text = SortTextForNumber(year) + " ";
break; break;
case GroupBy_Composer: case GroupBy_Composer:
item->key = s.composer(); item->key = s.composer();
case GroupBy_Performer: case GroupBy_Performer:
item->key = s.performer(); item->key = s.performer();
case GroupBy_Disc:
item->key = s.disc();
case GroupBy_Grouping: case GroupBy_Grouping:
item->key = s.grouping(); item->key = s.grouping();
case GroupBy_Genre: case GroupBy_Genre:
@ -1009,6 +1013,11 @@ LibraryItem* LibraryModel::ItemFromSong(GroupBy type, bool signal,
item->sort_text = SortTextForArtist(item->key); item->sort_text = SortTextForArtist(item->key);
break; break;
case GroupBy_Disc:
item->key = QString::number(s.disc());
item->sort_text = SortTextForNumber(s.disc());
break;
case GroupBy_FileType: case GroupBy_FileType:
item->metadata.set_filetype(s.filetype()); item->metadata.set_filetype(s.filetype());
item->key = s.TextForFiletype(); item->key = s.TextForFiletype();
@ -1017,7 +1026,7 @@ LibraryItem* LibraryModel::ItemFromSong(GroupBy type, bool signal,
case GroupBy_Bitrate: case GroupBy_Bitrate:
bitrate = qMax(0, s.bitrate()); bitrate = qMax(0, s.bitrate());
item->key = QString::number(bitrate); item->key = QString::number(bitrate);
item->sort_text = SortTextForBitrate(bitrate) + " "; item->sort_text = SortTextForNumber(bitrate) + " ";
break; break;
case GroupBy_None: case GroupBy_None:
@ -1098,14 +1107,9 @@ QString LibraryModel::SortTextForArtist(QString artist) {
return artist; return artist;
} }
QString LibraryModel::SortTextForYear(int year) { QString LibraryModel::SortTextForNumber(int number) {
QString str = QString::number(year); QString str = QString("%1").arg(number, 4, 10, QChar('0'));
return QString("0").repeated(qMax(0, 4 - str.length())) + str; return str;
}
QString LibraryModel::SortTextForBitrate(int bitrate) {
QString str = QString::number(bitrate);
return QString("0").repeated(qMax(0, 3 - str.length())) + str;
} }
QString LibraryModel::SortTextForSong(const Song& song) { QString LibraryModel::SortTextForSong(const Song& song) {

View File

@ -164,8 +164,7 @@ class LibraryModel : public SimpleTreeModel<LibraryItem> {
static QString PrettyYearAlbum(int year, const QString& album); static QString PrettyYearAlbum(int year, const QString& album);
static QString SortText(QString text); static QString SortText(QString text);
static QString SortTextForArtist(QString artist); static QString SortTextForArtist(QString artist);
static QString SortTextForYear(int year); static QString SortTextForNumber(int year);
static QString SortTextForBitrate(int bitrate);
static QString SortTextForSong(const Song& song); static QString SortTextForSong(const Song& song);
signals: signals: