Implemented sort by bitrate

This commit is contained in:
GitAnt 2013-12-17 16:07:20 +01:00
parent a6dc82af18
commit a39e559425
5 changed files with 43 additions and 19 deletions

View File

@ -146,7 +146,9 @@ QStandardItem* GlobalSearchModel::BuildContainers(
break;
case LibraryModel::GroupBy_Bitrate:
return parent;
display_text = QString(s.bitrate(), 1);
sort_text = display_text;
break;
case LibraryModel::GroupBy_None:
return parent;

View File

@ -36,8 +36,9 @@ GroupByDialog::GroupByDialog(QWidget *parent)
mapping_.insert(Mapping(LibraryModel::GroupBy_Genre, 6));
mapping_.insert(Mapping(LibraryModel::GroupBy_Year, 7));
mapping_.insert(Mapping(LibraryModel::GroupBy_YearAlbum, 8));
mapping_.insert(Mapping(LibraryModel::GroupBy_Performer, 9));
mapping_.insert(Mapping(LibraryModel::GroupBy_Grouping, 10));
mapping_.insert(Mapping(LibraryModel::GroupBy_Bitrate, 9));
mapping_.insert(Mapping(LibraryModel::GroupBy_Performer, 10));
mapping_.insert(Mapping(LibraryModel::GroupBy_Grouping, 11));
connect(ui_->button_box->button(QDialogButtonBox::Reset), SIGNAL(clicked()),
SLOT(Reset()));

View File

@ -88,6 +88,11 @@
<string>Year - Album</string>
</property>
</item>
<item>
<property name="text">
<string>Bitrate</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
@ -144,6 +149,11 @@
<string>Year - Album</string>
</property>
</item>
<item>
<property name="text">
<string>Bitrate</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
@ -200,6 +210,11 @@
<string>Year - Album</string>
</property>
</item>
<item>
<property name="text">
<string>Bitrate</string>
</property>
</item>
</widget>
</item>
</layout>

View File

@ -190,9 +190,7 @@ void LibraryModel::SongsDiscovered(const SongList& songs) {
case GroupBy_YearAlbum:
key = PrettyYearAlbum(qMax(0, song.year()), song.album()); break;
case GroupBy_FileType: key = song.filetype(); break;
case GroupBy_Bitrate:
qLog(Error) << "GroupBy_Bitrate";
break;
case GroupBy_Bitrate: key = song.bitrate(); break;
case GroupBy_None:
qLog(Error) << "GroupBy_None";
break;
@ -284,7 +282,7 @@ QString LibraryModel::DividerKey(GroupBy type, LibraryItem* item) const {
return SortTextForYear(item->metadata.year());
case GroupBy_Bitrate:
return QString();
return SortTextForBitrate(item->metadata.bitrate());
case GroupBy_None:
return QString();
@ -320,8 +318,9 @@ QString LibraryModel::DividerDisplayText(GroupBy type, const QString& key) const
return QString::number(key.toInt()); // To remove leading 0s
case GroupBy_Bitrate:
// fallthrough
;
if (key == "000")
return tr("Unknown");
return QString::number(key.toInt()); // To remove leading 0s
case GroupBy_None:
// fallthrough
@ -750,7 +749,7 @@ void LibraryModel::InitQuery(GroupBy type, LibraryQuery* q) {
q->SetColumnSpec("DISTINCT effective_albumartist");
break;
case GroupBy_Bitrate:
q->SetColumnSpec("%songs_table.ROWID, " + Song::kColumnSpec);
q->SetColumnSpec("DISTINCT bitrate");
break;
case GroupBy_None:
q->SetColumnSpec("%songs_table.ROWID, " + Song::kColumnSpec);
@ -810,7 +809,7 @@ void LibraryModel::FilterQuery(GroupBy type, LibraryItem* item, LibraryQuery* q)
q->AddWhere("filetype", item->metadata.filetype());
break;
case GroupBy_Bitrate:
qLog(Error) << "Unknown GroupBy type" << type << "used in filter";
q->AddWhere("bitrate", item->key);
break;
case GroupBy_None:
qLog(Error) << "Unknown GroupBy type" << type << "used in filter";
@ -841,6 +840,7 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type,
int container_level) {
LibraryItem* item = InitItem(type, signal, parent, container_level);
int year = 0;
int bitrate = 0;
switch (type) {
case GroupBy_Artist:
@ -880,10 +880,9 @@ LibraryItem* LibraryModel::ItemFromQuery(GroupBy type,
break;
case GroupBy_Bitrate:
item->metadata.InitFromQuery(row, true);
item->key = item->metadata.title();
item->display_text = item->metadata.TitleWithCompilationArtist();
item->sort_text = SortTextForSong(item->metadata);
bitrate = qMax(0, row.value(0).toInt());
item->key = QString::number(bitrate);
item->sort_text = SortTextForBitrate(bitrate) + " ";
break;
case GroupBy_None:
@ -904,6 +903,7 @@ LibraryItem* LibraryModel::ItemFromSong(GroupBy type,
int container_level) {
LibraryItem* item = InitItem(type, signal, parent, container_level);
int year = 0;
int bitrate = 0;
switch (type) {
case GroupBy_Artist:
@ -942,10 +942,9 @@ LibraryItem* LibraryModel::ItemFromSong(GroupBy type,
break;
case GroupBy_Bitrate:
item->metadata = s;
item->key = s.title();
item->display_text = s.TitleWithCompilationArtist();
item->sort_text = SortTextForSong(s);
bitrate = qMax(0, s.bitrate());
item->key = QString::number(bitrate);
item->sort_text = SortTextForBitrate(bitrate) + " ";
break;
case GroupBy_None:
@ -1034,6 +1033,12 @@ QString LibraryModel::SortTextForYear(int year) {
return QString("0").repeated(qMax(0, 4 - str.length())) + 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 ret = QString::number(qMax(0, song.disc()) * 1000 + qMax(0, song.track()));
ret.prepend(QString("0").repeated(6 - ret.length()));

View File

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