Use helper function for collection model container keys
This commit is contained in:
parent
b7ab6c5c3e
commit
fd251c6e61
@ -252,88 +252,7 @@ void CollectionModel::SongsDiscovered(const SongList &songs) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Otherwise find the proper container at this level based on the item's key
|
// Otherwise find the proper container at this level based on the item's key
|
||||||
switch (type) {
|
key.append(ContainerKey(type, song));
|
||||||
case GroupBy_AlbumArtist:
|
|
||||||
key.append(TextOrUnknown(song.effective_albumartist()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Artist:
|
|
||||||
key.append(TextOrUnknown(song.artist()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Album:
|
|
||||||
key.append(TextOrUnknown(song.album()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_AlbumDisc:
|
|
||||||
key.append(PrettyAlbumDisc(song.album(), song.disc()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_YearAlbum:
|
|
||||||
key.append(PrettyYearAlbum(song.year(), song.album()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_YearAlbumDisc:
|
|
||||||
key.append(PrettyYearAlbumDisc(song.year(), song.album(), song.disc()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_OriginalYearAlbum:
|
|
||||||
key.append(PrettyYearAlbum(song.effective_originalyear(), song.album()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_OriginalYearAlbumDisc:
|
|
||||||
key.append(PrettyYearAlbumDisc(song.effective_originalyear(), song.album(), song.disc()));
|
|
||||||
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
|
||||||
break;
|
|
||||||
case GroupBy_Composer:
|
|
||||||
key.append(TextOrUnknown(song.composer()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Performer:
|
|
||||||
key.append(TextOrUnknown(song.performer()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Grouping:
|
|
||||||
key.append(TextOrUnknown(song.grouping()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Disc:
|
|
||||||
key.append(PrettyDisc(song.disc()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Genre:
|
|
||||||
key.append(TextOrUnknown(song.genre()));
|
|
||||||
break;
|
|
||||||
case GroupBy_Year:
|
|
||||||
key.append(QString::number(qMax(0, song.year())));
|
|
||||||
break;
|
|
||||||
case GroupBy_OriginalYear:
|
|
||||||
key.append(QString::number(qMax(0, song.effective_originalyear())));
|
|
||||||
break;
|
|
||||||
case GroupBy_FileType:
|
|
||||||
key.append(song.TextForFiletype());
|
|
||||||
break;
|
|
||||||
case GroupBy_Samplerate:
|
|
||||||
key.append(QString::number(qMax(0, song.samplerate())));
|
|
||||||
break;
|
|
||||||
case GroupBy_Bitdepth:
|
|
||||||
key.append(QString::number(qMax(0, song.bitdepth())));
|
|
||||||
break;
|
|
||||||
case GroupBy_Bitrate:
|
|
||||||
key.append(QString::number(qMax(0, song.bitrate())));
|
|
||||||
break;
|
|
||||||
case GroupBy_Format:
|
|
||||||
if (song.samplerate() <= 0) {
|
|
||||||
key.append(song.TextForFiletype());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (song.bitdepth() <= 0) {
|
|
||||||
key.append(QString("%1 (%2)").arg(song.TextForFiletype()).arg(QString::number(song.samplerate() / 1000.0, 'G', 5)));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
key.append(QString("%1 (%2/%3)").arg(song.TextForFiletype()).arg(QString::number(song.samplerate() / 1000.0, 'G', 5)).arg(song.bitdepth()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case GroupBy_None:
|
|
||||||
case GroupByCount:
|
|
||||||
qLog(Error) << "GroupBy_None";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Does it exist already?
|
// Does it exist already?
|
||||||
if (!container_nodes_[i].contains(key)) {
|
if (!container_nodes_[i].contains(key)) {
|
||||||
@ -387,6 +306,97 @@ CollectionItem *CollectionModel::CreateCompilationArtistNode(const bool signal,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CollectionModel::ContainerKey(const GroupBy type, const Song &song) const {
|
||||||
|
|
||||||
|
QString key;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case GroupBy_AlbumArtist:
|
||||||
|
key = TextOrUnknown(song.effective_albumartist());
|
||||||
|
break;
|
||||||
|
case GroupBy_Artist:
|
||||||
|
key = TextOrUnknown(song.artist());
|
||||||
|
break;
|
||||||
|
case GroupBy_Album:
|
||||||
|
key = TextOrUnknown(song.album());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_AlbumDisc:
|
||||||
|
key = PrettyAlbumDisc(song.album(), song.disc());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_YearAlbum:
|
||||||
|
key = PrettyYearAlbum(song.year(), song.album());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_YearAlbumDisc:
|
||||||
|
key = PrettyYearAlbumDisc(song.year(), song.album(), song.disc());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_OriginalYearAlbum:
|
||||||
|
key = PrettyYearAlbum(song.effective_originalyear(), song.album());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_OriginalYearAlbumDisc:
|
||||||
|
key = PrettyYearAlbumDisc(song.effective_originalyear(), song.album(), song.disc());
|
||||||
|
if (!song.album_id().isEmpty()) key.append("-" + song.album_id());
|
||||||
|
break;
|
||||||
|
case GroupBy_Disc:
|
||||||
|
key = PrettyDisc(song.disc());
|
||||||
|
break;
|
||||||
|
case GroupBy_Year:
|
||||||
|
key = QString::number(qMax(0, song.year()));
|
||||||
|
break;
|
||||||
|
case GroupBy_OriginalYear:
|
||||||
|
key = QString::number(qMax(0, song.effective_originalyear()));
|
||||||
|
break;
|
||||||
|
case GroupBy_Genre:
|
||||||
|
key = TextOrUnknown(song.genre());
|
||||||
|
break;
|
||||||
|
case GroupBy_Composer:
|
||||||
|
key = TextOrUnknown(song.composer());
|
||||||
|
break;
|
||||||
|
case GroupBy_Performer:
|
||||||
|
key = TextOrUnknown(song.performer());
|
||||||
|
break;
|
||||||
|
case GroupBy_Grouping:
|
||||||
|
key = TextOrUnknown(song.grouping());
|
||||||
|
break;
|
||||||
|
case GroupBy_FileType:
|
||||||
|
key = song.TextForFiletype();
|
||||||
|
break;
|
||||||
|
case GroupBy_Samplerate:
|
||||||
|
key = QString::number(qMax(0, song.samplerate()));
|
||||||
|
break;
|
||||||
|
case GroupBy_Bitdepth:
|
||||||
|
key = QString::number(qMax(0, song.bitdepth()));
|
||||||
|
break;
|
||||||
|
case GroupBy_Bitrate:
|
||||||
|
key = QString::number(qMax(0, song.bitrate()));
|
||||||
|
break;
|
||||||
|
case GroupBy_Format:
|
||||||
|
if (song.samplerate() <= 0) {
|
||||||
|
key = song.TextForFiletype();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (song.bitdepth() <= 0) {
|
||||||
|
key = QString("%1 (%2)").arg(song.TextForFiletype()).arg(QString::number(song.samplerate() / 1000.0, 'G', 5));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
key = QString("%1 (%2/%3)").arg(song.TextForFiletype()).arg(QString::number(song.samplerate() / 1000.0, 'G', 5)).arg(song.bitdepth());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GroupBy_None:
|
||||||
|
case GroupByCount:
|
||||||
|
qLog(Error) << "GroupBy_None";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return key;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QString CollectionModel::DividerKey(const GroupBy type, CollectionItem *item) const {
|
QString CollectionModel::DividerKey(const GroupBy type, CollectionItem *item) const {
|
||||||
|
|
||||||
// Items which are to be grouped under the same divider must produce the same divider key. This will only get called for top-level items.
|
// Items which are to be grouped under the same divider must produce the same divider key. This will only get called for top-level items.
|
||||||
@ -1164,14 +1174,14 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case GroupBy_AlbumArtist:{
|
case GroupBy_AlbumArtist:{
|
||||||
item->metadata.set_albumartist(row.value(0).toString());
|
item->metadata.set_albumartist(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.albumartist()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.albumartist());
|
item->display_text = TextOrUnknown(item->metadata.albumartist());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.albumartist());
|
item->sort_text = SortTextForArtist(item->metadata.albumartist());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Artist:{
|
case GroupBy_Artist:{
|
||||||
item->metadata.set_artist(row.value(0).toString());
|
item->metadata.set_artist(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.artist()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.artist());
|
item->display_text = TextOrUnknown(item->metadata.artist());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.artist());
|
item->sort_text = SortTextForArtist(item->metadata.artist());
|
||||||
break;
|
break;
|
||||||
@ -1179,8 +1189,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
case GroupBy_Album:{
|
case GroupBy_Album:{
|
||||||
item->metadata.set_album(row.value(0).toString());
|
item->metadata.set_album(row.value(0).toString());
|
||||||
item->metadata.set_album_id(row.value(1).toString());
|
item->metadata.set_album_id(row.value(1).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.album()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
item->display_text = TextOrUnknown(item->metadata.album());
|
item->display_text = TextOrUnknown(item->metadata.album());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.album());
|
item->sort_text = SortTextForArtist(item->metadata.album());
|
||||||
break;
|
break;
|
||||||
@ -1189,11 +1198,9 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_album(row.value(0).toString());
|
item->metadata.set_album(row.value(0).toString());
|
||||||
item->metadata.set_album_id(row.value(1).toString());
|
item->metadata.set_album_id(row.value(1).toString());
|
||||||
item->metadata.set_disc(row.value(2).toInt());
|
item->metadata.set_disc(row.value(2).toInt());
|
||||||
item->key.append(PrettyAlbumDisc(item->metadata.album(), item->metadata.disc()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
const int disc = qMax(0, item->metadata.disc());
|
|
||||||
item->display_text = PrettyAlbumDisc(item->metadata.album(), item->metadata.disc());
|
item->display_text = PrettyAlbumDisc(item->metadata.album(), item->metadata.disc());
|
||||||
item->sort_text = item->metadata.album() + SortTextForNumber(disc);
|
item->sort_text = item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_YearAlbum:{
|
case GroupBy_YearAlbum:{
|
||||||
@ -1201,8 +1208,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_album(row.value(1).toString());
|
item->metadata.set_album(row.value(1).toString());
|
||||||
item->metadata.set_album_id(row.value(2).toString());
|
item->metadata.set_album_id(row.value(2).toString());
|
||||||
item->metadata.set_grouping(row.value(3).toString());
|
item->metadata.set_grouping(row.value(3).toString());
|
||||||
item->key.append(PrettyYearAlbum(item->metadata.year(), item->metadata.album()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
item->display_text = PrettyYearAlbum(item->metadata.year(), item->metadata.album());
|
item->display_text = PrettyYearAlbum(item->metadata.year(), item->metadata.album());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.grouping() + item->metadata.album();
|
item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.grouping() + item->metadata.album();
|
||||||
break;
|
break;
|
||||||
@ -1212,8 +1218,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_album(row.value(1).toString());
|
item->metadata.set_album(row.value(1).toString());
|
||||||
item->metadata.set_album_id(row.value(2).toString());
|
item->metadata.set_album_id(row.value(2).toString());
|
||||||
item->metadata.set_disc(row.value(3).toInt());
|
item->metadata.set_disc(row.value(3).toInt());
|
||||||
item->key.append(PrettyYearAlbumDisc(item->metadata.year(), item->metadata.album(), item->metadata.disc()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
item->display_text = PrettyYearAlbumDisc(item->metadata.year(), item->metadata.album(), item->metadata.disc());
|
item->display_text = PrettyYearAlbumDisc(item->metadata.year(), item->metadata.album(), item->metadata.disc());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc()));
|
item->sort_text = SortTextForNumber(qMax(0, item->metadata.year())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc()));
|
||||||
break;
|
break;
|
||||||
@ -1224,8 +1229,7 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_album(row.value(2).toString());
|
item->metadata.set_album(row.value(2).toString());
|
||||||
item->metadata.set_album_id(row.value(3).toString());
|
item->metadata.set_album_id(row.value(3).toString());
|
||||||
item->metadata.set_grouping(row.value(4).toString());
|
item->metadata.set_grouping(row.value(4).toString());
|
||||||
item->key.append(PrettyYearAlbum(item->metadata.effective_originalyear(), item->metadata.album()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
item->display_text = PrettyYearAlbum(item->metadata.effective_originalyear(), item->metadata.album());
|
item->display_text = PrettyYearAlbum(item->metadata.effective_originalyear(), item->metadata.album());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.grouping() + item->metadata.album();
|
item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.grouping() + item->metadata.album();
|
||||||
break;
|
break;
|
||||||
@ -1236,67 +1240,66 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_album(row.value(2).toString());
|
item->metadata.set_album(row.value(2).toString());
|
||||||
item->metadata.set_album_id(row.value(3).toString());
|
item->metadata.set_album_id(row.value(3).toString());
|
||||||
item->metadata.set_disc(row.value(4).toInt());
|
item->metadata.set_disc(row.value(4).toInt());
|
||||||
item->key.append(PrettyYearAlbumDisc(item->metadata.effective_originalyear(), item->metadata.album(), item->metadata.disc()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
if (!item->metadata.album_id().isEmpty()) item->key.append("-" + item->metadata.album_id());
|
|
||||||
item->display_text = PrettyYearAlbumDisc(item->metadata.effective_originalyear(), item->metadata.album(), item->metadata.disc());
|
item->display_text = PrettyYearAlbumDisc(item->metadata.effective_originalyear(), item->metadata.album(), item->metadata.disc());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc()));
|
item->sort_text = SortTextForNumber(qMax(0, item->metadata.effective_originalyear())) + item->metadata.album() + SortTextForNumber(qMax(0, item->metadata.disc()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Disc:{
|
case GroupBy_Disc:{
|
||||||
item->metadata.set_disc(row.value(0).toInt());
|
item->metadata.set_disc(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int disc = qMax(0, row.value(0).toInt());
|
const int disc = qMax(0, row.value(0).toInt());
|
||||||
item->key.append(PrettyDisc(disc));
|
|
||||||
item->display_text = PrettyDisc(disc);
|
item->display_text = PrettyDisc(disc);
|
||||||
item->sort_text = SortTextForNumber(disc);
|
item->sort_text = SortTextForNumber(disc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Year:{
|
case GroupBy_Year:{
|
||||||
item->metadata.set_year(row.value(0).toInt());
|
item->metadata.set_year(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int year = qMax(0, item->metadata.year());
|
const int year = qMax(0, item->metadata.year());
|
||||||
item->key.append(QString::number(year));
|
|
||||||
item->display_text = QString::number(year);
|
item->display_text = QString::number(year);
|
||||||
item->sort_text = SortTextForNumber(year) + " ";
|
item->sort_text = SortTextForNumber(year) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_OriginalYear:{
|
case GroupBy_OriginalYear:{
|
||||||
item->metadata.set_originalyear(row.value(0).toInt());
|
item->metadata.set_originalyear(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int year = qMax(0, item->metadata.originalyear());
|
const int year = qMax(0, item->metadata.originalyear());
|
||||||
item->key.append(QString::number(year));
|
|
||||||
item->display_text = QString::number(year);
|
item->display_text = QString::number(year);
|
||||||
item->sort_text = SortTextForNumber(year) + " ";
|
item->sort_text = SortTextForNumber(year) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Genre:{
|
case GroupBy_Genre:{
|
||||||
item->metadata.set_genre(row.value(0).toString());
|
item->metadata.set_genre(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.genre()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.genre());
|
item->display_text = TextOrUnknown(item->metadata.genre());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.genre());
|
item->sort_text = SortTextForArtist(item->metadata.genre());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Composer:{
|
case GroupBy_Composer:{
|
||||||
item->metadata.set_composer(row.value(0).toString());
|
item->metadata.set_composer(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.composer()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.composer());
|
item->display_text = TextOrUnknown(item->metadata.composer());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.composer());
|
item->sort_text = SortTextForArtist(item->metadata.composer());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Performer:{
|
case GroupBy_Performer:{
|
||||||
item->metadata.set_performer(row.value(0).toString());
|
item->metadata.set_performer(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.performer()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.performer());
|
item->display_text = TextOrUnknown(item->metadata.performer());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.performer());
|
item->sort_text = SortTextForArtist(item->metadata.performer());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Grouping:{
|
case GroupBy_Grouping:{
|
||||||
item->metadata.set_grouping(row.value(0).toString());
|
item->metadata.set_grouping(row.value(0).toString());
|
||||||
item->key.append(TextOrUnknown(item->metadata.grouping()));
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = TextOrUnknown(item->metadata.grouping());
|
item->display_text = TextOrUnknown(item->metadata.grouping());
|
||||||
item->sort_text = SortTextForArtist(item->metadata.grouping());
|
item->sort_text = SortTextForArtist(item->metadata.grouping());
|
||||||
break;
|
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.append(item->metadata.TextForFiletype());
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
item->display_text = item->metadata.TextForFiletype();
|
item->display_text = item->metadata.TextForFiletype();
|
||||||
item->sort_text = item->metadata.TextForFiletype();
|
item->sort_text = item->metadata.TextForFiletype();
|
||||||
break;
|
break;
|
||||||
@ -1305,43 +1308,32 @@ CollectionItem *CollectionModel::ItemFromQuery(const GroupBy type, const bool si
|
|||||||
item->metadata.set_filetype(Song::FileType(row.value(0).toInt()));
|
item->metadata.set_filetype(Song::FileType(row.value(0).toInt()));
|
||||||
item->metadata.set_samplerate(row.value(1).toInt());
|
item->metadata.set_samplerate(row.value(1).toInt());
|
||||||
item->metadata.set_bitdepth(row.value(2).toInt());
|
item->metadata.set_bitdepth(row.value(2).toInt());
|
||||||
QString key;
|
QString key = ContainerKey(type, item->metadata);
|
||||||
if (item->metadata.samplerate() <= 0) {
|
item->key.append(key);
|
||||||
key = item->metadata.TextForFiletype();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (item->metadata.bitdepth() <= 0) {
|
|
||||||
key = QString("%1 (%2)").arg(item->metadata.TextForFiletype()).arg(QString::number(item->metadata.samplerate() / 1000.0, 'G', 5));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
key = QString("%1 (%2/%3)").arg(item->metadata.TextForFiletype()).arg(QString::number(item->metadata.samplerate() / 1000.0, 'G', 5)).arg(QString::number(item->metadata.bitdepth()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
item->display_text = key;
|
item->display_text = key;
|
||||||
item->sort_text = key;
|
item->sort_text = key;
|
||||||
item->key.append(key);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Samplerate:{
|
case GroupBy_Samplerate:{
|
||||||
item->metadata.set_samplerate(row.value(0).toInt());
|
item->metadata.set_samplerate(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int samplerate = qMax(0, item->metadata.samplerate());
|
const int samplerate = qMax(0, item->metadata.samplerate());
|
||||||
item->key.append(QString::number(samplerate));
|
|
||||||
item->display_text = QString::number(samplerate);
|
item->display_text = QString::number(samplerate);
|
||||||
item->sort_text = SortTextForNumber(samplerate) + " ";
|
item->sort_text = SortTextForNumber(samplerate) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Bitdepth:{
|
case GroupBy_Bitdepth:{
|
||||||
item->metadata.set_bitdepth(row.value(0).toInt());
|
item->metadata.set_bitdepth(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int bitdepth = qMax(0, item->metadata.bitdepth());
|
const int bitdepth = qMax(0, item->metadata.bitdepth());
|
||||||
item->key.append(QString::number(bitdepth));
|
|
||||||
item->display_text = QString::number(bitdepth);
|
item->display_text = QString::number(bitdepth);
|
||||||
item->sort_text = SortTextForNumber(bitdepth) + " ";
|
item->sort_text = SortTextForNumber(bitdepth) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Bitrate:{
|
case GroupBy_Bitrate:{
|
||||||
item->metadata.set_bitrate(row.value(0).toInt());
|
item->metadata.set_bitrate(row.value(0).toInt());
|
||||||
|
item->key.append(ContainerKey(type, item->metadata));
|
||||||
const int bitrate = qMax(0, item->metadata.bitrate());
|
const int bitrate = qMax(0, item->metadata.bitrate());
|
||||||
item->key.append(QString::number(bitrate));
|
|
||||||
item->display_text = QString::number(bitrate);
|
item->display_text = QString::number(bitrate);
|
||||||
item->sort_text = SortTextForNumber(bitrate) + " ";
|
item->sort_text = SortTextForNumber(bitrate) + " ";
|
||||||
break;
|
break;
|
||||||
@ -1377,14 +1369,14 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
switch (type) {
|
switch (type) {
|
||||||
case GroupBy_AlbumArtist:{
|
case GroupBy_AlbumArtist:{
|
||||||
item->metadata.set_albumartist(s.effective_albumartist());
|
item->metadata.set_albumartist(s.effective_albumartist());
|
||||||
item->key.append(TextOrUnknown(s.effective_albumartist()));
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = TextOrUnknown(s.effective_albumartist());
|
item->display_text = TextOrUnknown(s.effective_albumartist());
|
||||||
item->sort_text = SortTextForArtist(s.effective_albumartist());
|
item->sort_text = SortTextForArtist(s.effective_albumartist());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Artist:{
|
case GroupBy_Artist:{
|
||||||
item->metadata.set_artist(s.artist());
|
item->metadata.set_artist(s.artist());
|
||||||
item->key.append(TextOrUnknown(s.artist()));
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = TextOrUnknown(s.artist());
|
item->display_text = TextOrUnknown(s.artist());
|
||||||
item->sort_text = SortTextForArtist(s.artist());
|
item->sort_text = SortTextForArtist(s.artist());
|
||||||
break;
|
break;
|
||||||
@ -1392,8 +1384,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
case GroupBy_Album:{
|
case GroupBy_Album:{
|
||||||
item->metadata.set_album(s.album());
|
item->metadata.set_album(s.album());
|
||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->key.append(TextOrUnknown(s.album()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = TextOrUnknown(s.album());
|
item->display_text = TextOrUnknown(s.album());
|
||||||
item->sort_text = SortTextForArtist(s.album());
|
item->sort_text = SortTextForArtist(s.album());
|
||||||
break;
|
break;
|
||||||
@ -1402,8 +1393,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
item->metadata.set_album(s.album());
|
item->metadata.set_album(s.album());
|
||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->metadata.set_disc(s.disc());
|
item->metadata.set_disc(s.disc());
|
||||||
item->key.append(PrettyAlbumDisc(s.album(), s.disc()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = PrettyAlbumDisc(s.album(), s.disc());
|
item->display_text = PrettyAlbumDisc(s.album(), s.disc());
|
||||||
item->sort_text = s.album() + SortTextForNumber(qMax(0, s.disc()));
|
item->sort_text = s.album() + SortTextForNumber(qMax(0, s.disc()));
|
||||||
break;
|
break;
|
||||||
@ -1413,8 +1403,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
item->metadata.set_album(s.album());
|
item->metadata.set_album(s.album());
|
||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->metadata.set_grouping(s.grouping());
|
item->metadata.set_grouping(s.grouping());
|
||||||
item->key.append(PrettyYearAlbum(s.year(), s.album()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = PrettyYearAlbum(s.year(), s.album());
|
item->display_text = PrettyYearAlbum(s.year(), s.album());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.grouping() + s.album();
|
item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.grouping() + s.album();
|
||||||
break;
|
break;
|
||||||
@ -1424,8 +1413,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
item->metadata.set_album(s.album());
|
item->metadata.set_album(s.album());
|
||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->metadata.set_disc(s.disc());
|
item->metadata.set_disc(s.disc());
|
||||||
item->key.append(PrettyYearAlbumDisc(s.year(), s.album(), s.disc()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = PrettyYearAlbumDisc(s.year(), s.album(), s.disc());
|
item->display_text = PrettyYearAlbumDisc(s.year(), s.album(), s.disc());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.album() + SortTextForNumber(qMax(0, s.disc()));
|
item->sort_text = SortTextForNumber(qMax(0, s.year())) + s.album() + SortTextForNumber(qMax(0, s.disc()));
|
||||||
break;
|
break;
|
||||||
@ -1436,8 +1424,7 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
item->metadata.set_album(s.album());
|
item->metadata.set_album(s.album());
|
||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->metadata.set_grouping(s.grouping());
|
item->metadata.set_grouping(s.grouping());
|
||||||
item->key.append(PrettyYearAlbum(s.effective_originalyear(), s.album()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = PrettyYearAlbum(s.effective_originalyear(), s.album());
|
item->display_text = PrettyYearAlbum(s.effective_originalyear(), s.album());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.grouping() + s.album();
|
item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.grouping() + s.album();
|
||||||
break;
|
break;
|
||||||
@ -1449,119 +1436,108 @@ CollectionItem *CollectionModel::ItemFromSong(const GroupBy type, const bool sig
|
|||||||
item->metadata.set_album_id(s.album_id());
|
item->metadata.set_album_id(s.album_id());
|
||||||
item->metadata.set_disc(s.disc());
|
item->metadata.set_disc(s.disc());
|
||||||
item->metadata.set_grouping(s.grouping());
|
item->metadata.set_grouping(s.grouping());
|
||||||
item->key.append(PrettyYearAlbumDisc(s.effective_originalyear(), s.album(), s.disc()));
|
item->key.append(ContainerKey(type, s));
|
||||||
if (!s.album_id().isEmpty()) item->key.append("-" + s.album_id());
|
|
||||||
item->display_text = PrettyYearAlbumDisc(s.effective_originalyear(), s.album(), s.disc());
|
item->display_text = PrettyYearAlbumDisc(s.effective_originalyear(), s.album(), s.disc());
|
||||||
item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.album() + SortTextForNumber(qMax(0, s.disc()));
|
item->sort_text = SortTextForNumber(qMax(0, s.effective_originalyear())) + s.album() + SortTextForNumber(qMax(0, s.disc()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GroupBy_Disc:{
|
||||||
|
item->metadata.set_disc(s.disc());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
|
const int disc = qMax(0, s.disc());
|
||||||
|
item->display_text = PrettyDisc(disc);
|
||||||
|
item->sort_text = SortTextForNumber(disc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GroupBy_Year:{
|
case GroupBy_Year:{
|
||||||
item->metadata.set_year(s.year());
|
item->metadata.set_year(s.year());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
const int year = qMax(0, s.year());
|
const int year = qMax(0, s.year());
|
||||||
item->key.append(QString::number(year));
|
|
||||||
item->display_text = QString::number(year);
|
item->display_text = QString::number(year);
|
||||||
item->sort_text = SortTextForNumber(year) + " ";
|
item->sort_text = SortTextForNumber(year) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_OriginalYear:{
|
case GroupBy_OriginalYear:{
|
||||||
item->metadata.set_originalyear(s.effective_originalyear());
|
item->metadata.set_originalyear(s.effective_originalyear());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
const int year = qMax(0, s.effective_originalyear());
|
const int year = qMax(0, s.effective_originalyear());
|
||||||
item->key.append(QString::number(year));
|
|
||||||
item->display_text = QString::number(year);
|
item->display_text = QString::number(year);
|
||||||
item->sort_text = SortTextForNumber(year) + " ";
|
item->sort_text = SortTextForNumber(year) + " ";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GroupBy_Genre:{
|
||||||
|
item->metadata.set_genre(s.genre());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
|
item->display_text = TextOrUnknown(s.genre());
|
||||||
|
item->sort_text = SortTextForArtist(s.genre());
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GroupBy_Composer:{
|
case GroupBy_Composer:{
|
||||||
item->metadata.set_composer(s.composer());
|
item->metadata.set_composer(s.composer());
|
||||||
item->key.append(TextOrUnknown(s.composer()));
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = TextOrUnknown(s.composer());
|
item->display_text = TextOrUnknown(s.composer());
|
||||||
item->sort_text = SortTextForArtist(s.composer());
|
item->sort_text = SortTextForArtist(s.composer());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Performer:{
|
case GroupBy_Performer:{
|
||||||
item->metadata.set_performer(s.performer());
|
item->metadata.set_performer(s.performer());
|
||||||
item->key.append(TextOrUnknown(s.performer()));
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = TextOrUnknown(s.performer());
|
item->display_text = TextOrUnknown(s.performer());
|
||||||
item->sort_text = SortTextForArtist(s.performer());
|
item->sort_text = SortTextForArtist(s.performer());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Grouping:{
|
case GroupBy_Grouping:{
|
||||||
item->metadata.set_grouping(s.grouping());
|
item->metadata.set_grouping(s.grouping());
|
||||||
item->key.append(TextOrUnknown(s.grouping()));
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = TextOrUnknown(s.grouping());
|
item->display_text = TextOrUnknown(s.grouping());
|
||||||
item->sort_text = SortTextForArtist(s.grouping());
|
item->sort_text = SortTextForArtist(s.grouping());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GroupBy_Genre:{
|
case GroupBy_FileType:{
|
||||||
item->metadata.set_genre(s.genre());
|
|
||||||
item->key.append(TextOrUnknown(s.genre()));
|
|
||||||
item->display_text = TextOrUnknown(s.genre());
|
|
||||||
item->sort_text = SortTextForArtist(s.genre());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GroupBy_Disc:{
|
|
||||||
item->metadata.set_disc(s.disc());
|
|
||||||
const int disc = qMax(0, s.disc());
|
|
||||||
item->key.append(PrettyDisc(disc));
|
|
||||||
item->display_text = PrettyDisc(disc);
|
|
||||||
item->sort_text = SortTextForNumber(disc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GroupBy_FileType:
|
|
||||||
item->metadata.set_filetype(s.filetype());
|
item->metadata.set_filetype(s.filetype());
|
||||||
item->key.append(s.TextForFiletype());
|
item->key.append(ContainerKey(type, s));
|
||||||
item->display_text = s.TextForFiletype();
|
item->display_text = s.TextForFiletype();
|
||||||
item->sort_text = s.TextForFiletype();
|
item->sort_text = s.TextForFiletype();
|
||||||
break;
|
break;
|
||||||
case GroupBy_Bitrate:{
|
|
||||||
item->metadata.set_bitrate(s.bitrate());
|
|
||||||
const int bitrate = qMax(0, s.bitrate());
|
|
||||||
item->key.append(QString::number(bitrate));
|
|
||||||
item->display_text = QString::number(bitrate);
|
|
||||||
item->sort_text = SortTextForNumber(bitrate) + " ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GroupBy_Samplerate:{
|
|
||||||
item->metadata.set_samplerate(s.samplerate());
|
|
||||||
const int samplerate = qMax(0, s.samplerate());
|
|
||||||
item->key.append(QString::number(samplerate));
|
|
||||||
item->display_text = QString::number(samplerate);
|
|
||||||
item->sort_text = SortTextForNumber(samplerate) + " ";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GroupBy_Bitdepth:{
|
|
||||||
item->metadata.set_bitdepth(s.bitdepth());
|
|
||||||
const int bitdepth = qMax(0, s.bitdepth());
|
|
||||||
item->key.append(QString::number(bitdepth));
|
|
||||||
item->display_text = QString::number(bitdepth);
|
|
||||||
item->sort_text = SortTextForNumber(bitdepth) + " ";
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case GroupBy_Format:{
|
case GroupBy_Format:{
|
||||||
item->metadata.set_filetype(s.filetype());
|
item->metadata.set_filetype(s.filetype());
|
||||||
item->metadata.set_samplerate(s.samplerate());
|
item->metadata.set_samplerate(s.samplerate());
|
||||||
item->metadata.set_bitdepth(s.bitdepth());
|
item->metadata.set_bitdepth(s.bitdepth());
|
||||||
QString key;
|
QString key = ContainerKey(type, s);
|
||||||
if (s.samplerate() <= 0) {
|
|
||||||
key = s.TextForFiletype();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (s.bitdepth() <= 0) {
|
|
||||||
key = QString("%1 (%2)").arg(s.TextForFiletype()).arg(QString::number(s.samplerate() / 1000.0, 'G', 5));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
key = QString("%1 (%2/%3)").arg(s.TextForFiletype()).arg(QString::number(s.samplerate() / 1000.0, 'G', 5)).arg(QString::number(s.bitdepth()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
item->key.append(key);
|
item->key.append(key);
|
||||||
item->display_text = key;
|
item->display_text = key;
|
||||||
item->sort_text = key;
|
item->sort_text = key;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GroupBy_Samplerate:{
|
||||||
|
item->metadata.set_samplerate(s.samplerate());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
|
const int samplerate = qMax(0, s.samplerate());
|
||||||
|
item->display_text = QString::number(samplerate);
|
||||||
|
item->sort_text = SortTextForNumber(samplerate) + " ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GroupBy_Bitdepth:{
|
||||||
|
item->metadata.set_bitdepth(s.bitdepth());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
|
const int bitdepth = qMax(0, s.bitdepth());
|
||||||
|
item->display_text = QString::number(bitdepth);
|
||||||
|
item->sort_text = SortTextForNumber(bitdepth) + " ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GroupBy_Bitrate:{
|
||||||
|
item->metadata.set_bitrate(s.bitrate());
|
||||||
|
item->key.append(ContainerKey(type, s));
|
||||||
|
const int bitrate = qMax(0, s.bitrate());
|
||||||
|
item->display_text = QString::number(bitrate);
|
||||||
|
item->sort_text = SortTextForNumber(bitrate) + " ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GroupBy_None:
|
case GroupBy_None:
|
||||||
case GroupByCount:{
|
case GroupByCount:{
|
||||||
item->metadata = s;
|
item->metadata = s;
|
||||||
item->key.append(s.title());
|
item->key.append(TextOrUnknown(s.title()));
|
||||||
item->display_text = s.TitleWithCompilationArtist();
|
item->display_text = s.TitleWithCompilationArtist();
|
||||||
if (item->container_level == 1 && !IsAlbumGroupBy(group_by_[0])) {
|
if (item->container_level == 1 && !IsAlbumGroupBy(group_by_[0])) {
|
||||||
item->sort_text = SortText(s.title());
|
item->sort_text = SortText(s.title());
|
||||||
|
@ -258,6 +258,7 @@ class CollectionModel : public SimpleTreeModel<CollectionItem> {
|
|||||||
CollectionItem *InitItem(const GroupBy type, const bool signal, CollectionItem *parent, const int container_level);
|
CollectionItem *InitItem(const GroupBy type, const bool signal, CollectionItem *parent, const int container_level);
|
||||||
void FinishItem(const GroupBy type, const bool signal, const bool create_divider, CollectionItem *parent, CollectionItem *item);
|
void FinishItem(const GroupBy type, const bool signal, const bool create_divider, CollectionItem *parent, CollectionItem *item);
|
||||||
|
|
||||||
|
QString ContainerKey(const GroupBy type, const Song &song) const;
|
||||||
QString DividerKey(const GroupBy type, CollectionItem *item) const;
|
QString DividerKey(const GroupBy type, CollectionItem *item) const;
|
||||||
QString DividerDisplayText(const GroupBy type, const QString &key) const;
|
QString DividerDisplayText(const GroupBy type, const QString &key) const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user