Port to QStringLiteral operator
This commit is contained in:
@@ -106,16 +106,16 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget *parent)
|
||||
search_cover_auto_(nullptr),
|
||||
save_embedded_cover_override_(false) {
|
||||
|
||||
cover_from_file_ = new QAction(IconLoader::Load(QStringLiteral("document-open")), tr("Load cover from disk..."), this);
|
||||
cover_to_file_ = new QAction(IconLoader::Load(QStringLiteral("document-save")), tr("Save cover to disk..."), this);
|
||||
cover_from_url_ = new QAction(IconLoader::Load(QStringLiteral("download")), tr("Load cover from URL..."), this);
|
||||
search_for_cover_ = new QAction(IconLoader::Load(QStringLiteral("search")), tr("Search for album covers..."), this);
|
||||
unset_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Unset cover"), this);
|
||||
delete_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Delete cover"), this);
|
||||
clear_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Clear cover"), this);
|
||||
cover_from_file_ = new QAction(IconLoader::Load(u"document-open"_s), tr("Load cover from disk..."), this);
|
||||
cover_to_file_ = new QAction(IconLoader::Load(u"document-save"_s), tr("Save cover to disk..."), this);
|
||||
cover_from_url_ = new QAction(IconLoader::Load(u"download"_s), tr("Load cover from URL..."), this);
|
||||
search_for_cover_ = new QAction(IconLoader::Load(u"search"_s), tr("Search for album covers..."), this);
|
||||
unset_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Unset cover"), this);
|
||||
delete_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Delete cover"), this);
|
||||
clear_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Clear cover"), this);
|
||||
separator1_ = new QAction(this);
|
||||
separator1_->setSeparator(true);
|
||||
show_cover_ = new QAction(IconLoader::Load(QStringLiteral("zoom-in")), tr("Show fullsize..."), this);
|
||||
show_cover_ = new QAction(IconLoader::Load(u"zoom-in"_s), tr("Show fullsize..."), this);
|
||||
|
||||
search_cover_auto_ = new QAction(tr("Search automatically"), this);
|
||||
search_cover_auto_->setCheckable(true);
|
||||
@@ -135,7 +135,7 @@ void AlbumCoverChoiceController::Init(Application *app) {
|
||||
app_ = app;
|
||||
|
||||
cover_fetcher_ = new AlbumCoverFetcher(app_->cover_providers(), app->network(), this);
|
||||
cover_searcher_ = new AlbumCoverSearcher(QIcon(QStringLiteral(":/pictures/cdcase.png")), app, this);
|
||||
cover_searcher_ = new AlbumCoverSearcher(QIcon(u":/pictures/cdcase.png"_s), app, this);
|
||||
cover_searcher_->Init(cover_fetcher_);
|
||||
|
||||
QObject::connect(cover_fetcher_, &AlbumCoverFetcher::AlbumCoverFetched, this, &AlbumCoverChoiceController::AlbumCoverFetched);
|
||||
@@ -148,7 +148,7 @@ void AlbumCoverChoiceController::ReloadSettings() {
|
||||
s.beginGroup(CoversSettingsPage::kSettingsGroup);
|
||||
cover_options_.cover_type = static_cast<CoverOptions::CoverType>(s.value(CoversSettingsPage::kSaveType, static_cast<int>(CoverOptions::CoverType::Cache)).toInt());
|
||||
cover_options_.cover_filename = static_cast<CoverOptions::CoverFilename>(s.value(CoversSettingsPage::kSaveFilename, static_cast<int>(CoverOptions::CoverFilename::Pattern)).toInt());
|
||||
cover_options_.cover_pattern = s.value(CoversSettingsPage::kSavePattern, QStringLiteral("%albumartist-%album")).toString();
|
||||
cover_options_.cover_pattern = s.value(CoversSettingsPage::kSavePattern, u"%albumartist-%album"_s).toString();
|
||||
cover_options_.cover_overwrite = s.value(CoversSettingsPage::kSaveOverwrite, false).toBool();
|
||||
cover_options_.cover_lowercase = s.value(CoversSettingsPage::kSaveLowercase, false).toBool();
|
||||
cover_options_.cover_replace_spaces = s.value(CoversSettingsPage::kSaveReplaceSpaces, false).toBool();
|
||||
@@ -179,7 +179,7 @@ AlbumCoverImageResult AlbumCoverChoiceController::LoadImageFromFile(Song *song)
|
||||
return AlbumCoverImageResult();
|
||||
}
|
||||
|
||||
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
|
||||
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
|
||||
if (cover_file.isEmpty()) return AlbumCoverImageResult();
|
||||
|
||||
QFile file(cover_file);
|
||||
@@ -210,7 +210,7 @@ QUrl AlbumCoverChoiceController::LoadCoverFromFile(Song *song) {
|
||||
|
||||
if (!song->url().isValid() || !song->url().isLocalFile() || song->effective_albumartist().isEmpty() || song->album().isEmpty()) return QUrl();
|
||||
|
||||
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
|
||||
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
|
||||
if (cover_file.isEmpty() || QImage(cover_file).isNull()) return QUrl();
|
||||
|
||||
switch (get_save_album_cover_type()) {
|
||||
@@ -241,12 +241,12 @@ void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const A
|
||||
}
|
||||
initial_file_name = initial_file_name + QLatin1Char('-') + (song.effective_album().isEmpty() ? tr("unknown") : song.effective_album()) + ".jpg"_L1;
|
||||
initial_file_name = initial_file_name.toLower();
|
||||
static const QRegularExpression regex_whitespaces(QStringLiteral("\\s"));
|
||||
initial_file_name.replace(regex_whitespaces, QStringLiteral("-"));
|
||||
static const QRegularExpression regex_whitespaces(u"\\s"_s);
|
||||
initial_file_name.replace(regex_whitespaces, u"-"_s);
|
||||
static const QRegularExpression regex_invalid_fat_characters(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption);
|
||||
initial_file_name.remove(regex_invalid_fat_characters);
|
||||
|
||||
QString save_filename = QFileDialog::getSaveFileName(this, tr("Save album cover"), GetInitialPathForFileDialog(song, initial_file_name), tr(kSaveImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
|
||||
QString save_filename = QFileDialog::getSaveFileName(this, tr("Save album cover"), GetInitialPathForFileDialog(song, initial_file_name), tr(kSaveImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
|
||||
|
||||
if (save_filename.isEmpty()) return;
|
||||
|
||||
@@ -659,7 +659,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou
|
||||
const AlbumCoverImageResult &result,
|
||||
const bool force_overwrite) {
|
||||
|
||||
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, QStringLiteral("jpg"));
|
||||
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, u"jpg"_s);
|
||||
if (filepath.isEmpty()) return QUrl();
|
||||
|
||||
QFile file(filepath);
|
||||
@@ -745,7 +745,7 @@ bool AlbumCoverChoiceController::IsKnownImageExtension(const QString &suffix) {
|
||||
|
||||
if (!sImageExtensions) {
|
||||
sImageExtensions = new QSet<QString>();
|
||||
(*sImageExtensions) << QStringLiteral("png") << QStringLiteral("jpg") << QStringLiteral("jpeg") << QStringLiteral("bmp") << QStringLiteral("gif") << QStringLiteral("xpm") << QStringLiteral("pbm") << QStringLiteral("pgm") << QStringLiteral("ppm") << QStringLiteral("xbm");
|
||||
(*sImageExtensions) << u"png"_s << u"jpg"_s << u"jpeg"_s << u"bmp"_s << u"gif"_s << u"xpm"_s << u"pbm"_s << u"pgm"_s << u"ppm"_s << u"xbm"_s;
|
||||
}
|
||||
|
||||
return sImageExtensions->contains(suffix);
|
||||
|
||||
@@ -59,7 +59,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
|
||||
s.beginGroup(kSettingsGroup);
|
||||
|
||||
// Restore last accepted settings
|
||||
ui_->fileName->setText(s.value("fileName", QStringLiteral("cover")).toString());
|
||||
ui_->fileName->setText(s.value("fileName", u"cover"_s).toString());
|
||||
ui_->doNotOverwrite->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::None)).toInt()) == OverwriteMode::None);
|
||||
ui_->overwriteAll->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::All)).toInt()) == OverwriteMode::All);
|
||||
ui_->overwriteSmaller->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::Smaller)).toInt()) == OverwriteMode::Smaller);
|
||||
@@ -77,7 +77,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
|
||||
if (!result.cancelled_) {
|
||||
QString fileName = ui_->fileName->text();
|
||||
if (fileName.isEmpty()) {
|
||||
fileName = QStringLiteral("cover");
|
||||
fileName = u"cover"_s;
|
||||
}
|
||||
OverwriteMode overwrite_mode = ui_->doNotOverwrite->isChecked() ? OverwriteMode::None : (ui_->overwriteAll->isChecked() ? OverwriteMode::All : OverwriteMode::Smaller);
|
||||
bool forceSize = ui_->forceSize->isChecked();
|
||||
|
||||
@@ -38,7 +38,7 @@ AlbumCoverLoaderOptions::Types AlbumCoverLoaderOptions::LoadTypes() {
|
||||
|
||||
Settings s;
|
||||
s.beginGroup(CoversSettingsPage::kSettingsGroup);
|
||||
const QStringList all_cover_types = QStringList() << QStringLiteral("art_unset") << QStringLiteral("art_embedded") << QStringLiteral("art_manual") << QStringLiteral("art_automatic");
|
||||
const QStringList all_cover_types = QStringList() << u"art_unset"_s << u"art_embedded"_s << u"art_manual"_s << u"art_automatic"_s;
|
||||
const QStringList cover_types_strlist = s.value(CoversSettingsPage::kTypes, all_cover_types).toStringList();
|
||||
for (const QString &cover_type_str : cover_types_strlist) {
|
||||
if (cover_type_str == "art_unset"_L1) {
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
#include "core/application.h"
|
||||
#include "core/iconloader.h"
|
||||
#include "core/database.h"
|
||||
#include "core/sqlrow.h"
|
||||
#include "core/settings.h"
|
||||
#include "utilities/strutils.h"
|
||||
#include "utilities/fileutils.h"
|
||||
@@ -118,8 +117,8 @@ AlbumCoverManager::AlbumCoverManager(Application *app, SharedPtr<CollectionBacke
|
||||
cover_searcher_(nullptr),
|
||||
cover_export_(nullptr),
|
||||
cover_exporter_(new AlbumCoverExporter(this)),
|
||||
artist_icon_(IconLoader::Load(QStringLiteral("folder-sound"))),
|
||||
all_artists_icon_(IconLoader::Load(QStringLiteral("library-music"))),
|
||||
artist_icon_(IconLoader::Load(u"folder-sound"_s)),
|
||||
all_artists_icon_(IconLoader::Load(u"library-music"_s)),
|
||||
image_nocover_thumbnail_(ImageUtils::GenerateNoCoverImage(QSize(120, 120), devicePixelRatio())),
|
||||
icon_nocover_item_(QPixmap::fromImage(image_nocover_thumbnail_)),
|
||||
context_menu_(new QMenu(this)),
|
||||
@@ -136,12 +135,12 @@ AlbumCoverManager::AlbumCoverManager(Application *app, SharedPtr<CollectionBacke
|
||||
QObject::connect(timer_album_cover_load_, &QTimer::timeout, this, &AlbumCoverManager::LoadAlbumCovers);
|
||||
|
||||
// Icons
|
||||
ui_->action_fetch->setIcon(IconLoader::Load(QStringLiteral("download")));
|
||||
ui_->export_covers->setIcon(IconLoader::Load(QStringLiteral("document-save")));
|
||||
ui_->view->setIcon(IconLoader::Load(QStringLiteral("view-choose")));
|
||||
ui_->button_fetch->setIcon(IconLoader::Load(QStringLiteral("download")));
|
||||
ui_->action_add_to_playlist->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_load->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_fetch->setIcon(IconLoader::Load(u"download"_s));
|
||||
ui_->export_covers->setIcon(IconLoader::Load(u"document-save"_s));
|
||||
ui_->view->setIcon(IconLoader::Load(u"view-choose"_s));
|
||||
ui_->button_fetch->setIcon(IconLoader::Load(u"download"_s));
|
||||
ui_->action_add_to_playlist->setIcon(IconLoader::Load(u"media-playback-start"_s));
|
||||
ui_->action_load->setIcon(IconLoader::Load(u"media-playback-start"_s));
|
||||
|
||||
album_cover_choice_controller_->Init(app_);
|
||||
|
||||
@@ -921,12 +920,12 @@ SongList AlbumCoverManager::GetSongsInAlbum(const QModelIndex &idx) const {
|
||||
|
||||
CollectionQuery q(db, collection_backend_->songs_table());
|
||||
q.SetColumnSpec(Song::kRowIdColumnSpec);
|
||||
q.AddWhere(QStringLiteral("album"), idx.data(Role_Album).toString());
|
||||
q.SetOrderBy(QStringLiteral("disc, track, title"));
|
||||
q.AddWhere(u"album"_s, idx.data(Role_Album).toString());
|
||||
q.SetOrderBy(u"disc, track, title"_s);
|
||||
|
||||
QString albumartist = idx.data(Role_AlbumArtist).toString();
|
||||
if (!albumartist.isEmpty()) {
|
||||
q.AddWhere(QStringLiteral("effective_albumartist"), albumartist);
|
||||
q.AddWhere(u"effective_albumartist"_s, albumartist);
|
||||
}
|
||||
|
||||
q.AddCompilationRequirement(albumartist.isEmpty());
|
||||
|
||||
@@ -62,6 +62,8 @@
|
||||
#include "albumcoverimageresult.h"
|
||||
#include "ui_albumcoversearcher.h"
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
namespace {
|
||||
constexpr int kMargin = 4;
|
||||
constexpr int kPaddingX = 3;
|
||||
@@ -222,7 +224,7 @@ void AlbumCoverSearcher::SearchFinished(const quint64 id, const CoverProviderSea
|
||||
|
||||
QStandardItem *item = new QStandardItem;
|
||||
item->setIcon(no_cover_icon_);
|
||||
item->setText(result.artist + QStringLiteral(" - ") + result.album);
|
||||
item->setText(result.artist + u" - "_s + result.album);
|
||||
item->setData(result.image_url, Role_ImageURL);
|
||||
item->setData(new_id, Role_ImageRequestId);
|
||||
item->setData(false, Role_ImageFetchFinished);
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
|
||||
#include "coversearchstatistics.h"
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
CoverSearchStatistics::CoverSearchStatistics()
|
||||
: network_requests_made_(0),
|
||||
bytes_transferred_(0),
|
||||
@@ -62,7 +64,7 @@ CoverSearchStatistics &CoverSearchStatistics::operator+=(const CoverSearchStatis
|
||||
QString CoverSearchStatistics::AverageDimensions() const {
|
||||
|
||||
if (chosen_images_ == 0) {
|
||||
return QStringLiteral("0x0");
|
||||
return u"0x0"_s;
|
||||
}
|
||||
|
||||
return QString::number(chosen_width_ / chosen_images_) + QLatin1Char('x') + QString::number(chosen_height_ / chosen_images_);
|
||||
|
||||
@@ -36,6 +36,8 @@
|
||||
#include "coversearchstatisticsdialog.h"
|
||||
#include "ui_coversearchstatisticsdialog.h"
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
|
||||
: QDialog(parent), ui_(new Ui_CoverSearchStatisticsDialog) {
|
||||
|
||||
@@ -44,7 +46,7 @@ CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
|
||||
details_layout_->setSpacing(0);
|
||||
|
||||
setStyleSheet(
|
||||
QStringLiteral("#details {"
|
||||
u"#details {"
|
||||
" background-color: palette(base);"
|
||||
"}"
|
||||
"#details QLabel[type=\"label\"] {"
|
||||
@@ -55,7 +57,7 @@ CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
|
||||
"#details QLabel[type=\"value\"] {"
|
||||
" font-weight: bold;"
|
||||
" max-width: 100px;"
|
||||
"}"));
|
||||
"}"_s);
|
||||
}
|
||||
|
||||
CoverSearchStatisticsDialog::~CoverSearchStatisticsDialog() { delete ui_; }
|
||||
@@ -80,7 +82,7 @@ void CoverSearchStatisticsDialog::Show(const CoverSearchStatistics &statistics)
|
||||
|
||||
AddLine(tr("Total network requests made"), QString::number(statistics.network_requests_made_));
|
||||
AddLine(tr("Average image size"), statistics.AverageDimensions());
|
||||
AddLine(tr("Total bytes transferred"), statistics.bytes_transferred_ > 0 ? Utilities::PrettySize(statistics.bytes_transferred_) : QStringLiteral("0 bytes"));
|
||||
AddLine(tr("Total bytes transferred"), statistics.bytes_transferred_ > 0 ? Utilities::PrettySize(statistics.bytes_transferred_) : u"0 bytes"_s);
|
||||
|
||||
details_layout_->addStretch();
|
||||
|
||||
@@ -93,8 +95,8 @@ void CoverSearchStatisticsDialog::AddLine(const QString &label, const QString &v
|
||||
QLabel *label1 = new QLabel(label);
|
||||
QLabel *label2 = new QLabel(value);
|
||||
|
||||
label1->setProperty("type", QStringLiteral("label"));
|
||||
label2->setProperty("type", QStringLiteral("value"));
|
||||
label1->setProperty("type", u"label"_s);
|
||||
label2->setProperty("type", u"value"_s);
|
||||
|
||||
QHBoxLayout *layout = new QHBoxLayout;
|
||||
layout->addWidget(label1);
|
||||
|
||||
@@ -38,18 +38,19 @@
|
||||
#include "currentalbumcoverloader.h"
|
||||
|
||||
using std::make_unique;
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *parent)
|
||||
: QObject(parent),
|
||||
app_(app),
|
||||
temp_file_pattern_(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + QStringLiteral("/strawberry-cover-XXXXXX.jpg")),
|
||||
temp_file_pattern_(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + u"/strawberry-cover-XXXXXX.jpg"_s),
|
||||
id_(0) {
|
||||
|
||||
setObjectName(QLatin1String(metaObject()->className()));
|
||||
|
||||
options_.options = AlbumCoverLoaderOptions::Option::RawImageData | AlbumCoverLoaderOptions::Option::OriginalImage | AlbumCoverLoaderOptions::Option::ScaledImage;
|
||||
options_.desired_scaled_size = QSize(120, 120);
|
||||
options_.default_cover = QStringLiteral(":/pictures/cdcase.png");
|
||||
options_.default_cover = u":/pictures/cdcase.png"_s;
|
||||
|
||||
QObject::connect(&*app_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover);
|
||||
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady);
|
||||
|
||||
@@ -56,7 +56,7 @@ constexpr int kLimit = 10;
|
||||
}
|
||||
|
||||
DeezerCoverProvider::DeezerCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Deezer"), true, false, 2.0, true, true, app, network, parent) {}
|
||||
: JsonCoverProvider(u"Deezer"_s, true, false, 2.0, true, true, app, network, parent) {}
|
||||
|
||||
DeezerCoverProvider::~DeezerCoverProvider() {
|
||||
|
||||
@@ -88,9 +88,9 @@ bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
}
|
||||
}
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("output"), QStringLiteral("json"))
|
||||
<< Param(QStringLiteral("q"), query)
|
||||
<< Param(QStringLiteral("limit"), QString::number(kLimit));
|
||||
const ParamList params = ParamList() << Param(u"output"_s, u"json"_s)
|
||||
<< Param(u"q"_s, query)
|
||||
<< Param(u"limit"_s, QString::number(kLimit));
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -167,7 +167,7 @@ QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) {
|
||||
if (json_obj.contains("error"_L1)) {
|
||||
QJsonValue value_error = json_obj["error"_L1];
|
||||
if (!value_error.isObject()) {
|
||||
Error(QStringLiteral("Error missing object"), json_obj);
|
||||
Error(u"Error missing object"_s, json_obj);
|
||||
return QJsonValue();
|
||||
}
|
||||
QJsonObject obj_error = value_error.toObject();
|
||||
@@ -178,7 +178,7 @@ QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) {
|
||||
}
|
||||
|
||||
if (!json_obj.contains("data"_L1) && !json_obj.contains("DATA"_L1)) {
|
||||
Error(QStringLiteral("Json reply object is missing data."), json_obj);
|
||||
Error(u"Json reply object is missing data."_s, json_obj);
|
||||
return QJsonValue();
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
for (const QJsonValue &json_value : std::as_const(array_data)) {
|
||||
|
||||
if (!json_value.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value is not a object."));
|
||||
Error(u"Invalid Json reply, data array value is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject json_obj = json_value.toObject();
|
||||
@@ -233,39 +233,39 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
}
|
||||
|
||||
if (!json_obj.contains("id"_L1) || !obj_album.contains("id"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value object is missing ID."), json_obj);
|
||||
Error(u"Invalid Json reply, data array value object is missing ID."_s, json_obj);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!obj_album.contains("type"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing type."), obj_album);
|
||||
Error(u"Invalid Json reply, data array value album object is missing type."_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
QString type = obj_album["type"_L1].toString();
|
||||
if (type != "album"_L1) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object has incorrect type returned"), obj_album);
|
||||
Error(u"Invalid Json reply, data array value album object has incorrect type returned"_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("artist"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value object is missing artist."), json_obj);
|
||||
Error(u"Invalid Json reply, data array value object is missing artist."_s, json_obj);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist = json_obj["artist"_L1];
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value artist is not a object."), value_artist);
|
||||
Error(u"Invalid Json reply, data array value artist is not a object."_s, value_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
|
||||
if (!obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value artist object is missing name."), obj_artist);
|
||||
Error(u"Invalid Json reply, data array value artist object is missing name."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"_L1].toString();
|
||||
|
||||
if (!obj_album.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing title."), obj_album);
|
||||
Error(u"Invalid Json reply, data array value album object is missing title."_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
QString album = obj_album["title"_L1].toString();
|
||||
@@ -275,8 +275,8 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
cover_result.album = Song::AlbumRemoveDiscMisc(album);
|
||||
|
||||
bool have_cover = false;
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("cover_xl"), QSize(1000, 1000))
|
||||
<< qMakePair(QStringLiteral("cover_big"), QSize(500, 500));
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"cover_xl"_s, QSize(1000, 1000))
|
||||
<< qMakePair(u"cover_big"_s, QSize(500, 500));
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
if (!obj_album.contains(cover_size.first)) continue;
|
||||
QString cover = obj_album[cover_size.first].toString();
|
||||
@@ -294,7 +294,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
}
|
||||
|
||||
if (!have_cover) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing cover."), obj_album);
|
||||
Error(u"Invalid Json reply, data array value album object is missing cover."_s, obj_album);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ const char *DiscogsCoverProvider::kSecretKeyB64 = "ZkFIcmlaSER4aHhRSlF2U3d0bm5ZV
|
||||
const int DiscogsCoverProvider::kRequestsDelay = 1000;
|
||||
|
||||
DiscogsCoverProvider::DiscogsCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Discogs"), false, false, 0.0, false, false, app, network, parent),
|
||||
: JsonCoverProvider(u"Discogs"_s, false, false, 0.0, false, false, app, network, parent),
|
||||
timer_flush_requests_(new QTimer(this)) {
|
||||
|
||||
timer_flush_requests_->setInterval(kRequestsDelay);
|
||||
@@ -127,16 +127,16 @@ void DiscogsCoverProvider::FlushRequests() {
|
||||
|
||||
void DiscogsCoverProvider::SendSearchRequest(SharedPtr<DiscogsCoverSearchContext> search) {
|
||||
|
||||
ParamList params = ParamList() << Param(QStringLiteral("format"), QStringLiteral("album"))
|
||||
<< Param(QStringLiteral("artist"), search->artist.toLower())
|
||||
<< Param(QStringLiteral("release_title"), search->album.toLower());
|
||||
ParamList params = ParamList() << Param(u"format"_s, u"album"_s)
|
||||
<< Param(u"artist"_s, search->artist.toLower())
|
||||
<< Param(u"release_title"_s, search->album.toLower());
|
||||
|
||||
switch (search->type) {
|
||||
case DiscogsCoverType::Master:
|
||||
params << Param(QStringLiteral("type"), QStringLiteral("master"));
|
||||
params << Param(u"type"_s, u"master"_s);
|
||||
break;
|
||||
case DiscogsCoverType::Release:
|
||||
params << Param(QStringLiteral("type"), QStringLiteral("release"));
|
||||
params << Param(u"type"_s, u"release"_s);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -147,8 +147,8 @@ void DiscogsCoverProvider::SendSearchRequest(SharedPtr<DiscogsCoverSearchContext
|
||||
|
||||
QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList ¶ms_provided) {
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("key"), QString::fromLatin1(QByteArray::fromBase64(kAccessKeyB64)))
|
||||
<< Param(QStringLiteral("secret"), QString::fromLatin1(QByteArray::fromBase64(kSecretKeyB64)))
|
||||
const ParamList params = ParamList() << Param(u"key"_s, QString::fromLatin1(QByteArray::fromBase64(kAccessKeyB64)))
|
||||
<< Param(u"secret"_s, QString::fromLatin1(QByteArray::fromBase64(kSecretKeyB64)))
|
||||
<< params_provided;
|
||||
|
||||
QUrlQuery url_query;
|
||||
@@ -168,7 +168,7 @@ QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList &pa
|
||||
const QByteArray signature(Utilities::HmacSha256(QByteArray::fromBase64(kSecretKeyB64), data_to_sign));
|
||||
|
||||
// Add the signature to the request
|
||||
url_query.addQueryItem(QStringLiteral("Signature"), QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(signature.toBase64()))));
|
||||
url_query.addQueryItem(u"Signature"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(signature.toBase64()))));
|
||||
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@@ -256,13 +256,13 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json object is missing results."), json_obj);
|
||||
Error(u"Json object is missing results."_s, json_obj);
|
||||
EndSearch(search);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_results.isArray()) {
|
||||
Error(QStringLiteral("Missing results array."), value_results);
|
||||
Error(u"Missing results array."_s, value_results);
|
||||
EndSearch(search);
|
||||
return;
|
||||
}
|
||||
@@ -271,7 +271,7 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
for (const QJsonValue &value_result : array_results) {
|
||||
|
||||
if (!value_result.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, results value is not a object."));
|
||||
Error(u"Invalid Json reply, results value is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_result = value_result.toObject();
|
||||
@@ -284,7 +284,7 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
QString title = obj_result["title"_L1].toString();
|
||||
|
||||
if (title.contains(" - "_L1)) {
|
||||
QStringList title_splitted = title.split(QStringLiteral(" - "));
|
||||
QStringList title_splitted = title.split(u" - "_s);
|
||||
if (title_splitted.count() == 2) {
|
||||
QString artist = title_splitted.first();
|
||||
title = title_splitted.last();
|
||||
@@ -356,7 +356,7 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
}
|
||||
|
||||
if (!json_obj.contains("artists"_L1) || !json_obj.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Json reply object is missing artists or title."), json_obj);
|
||||
Error(u"Json reply object is missing artists or title."_s, json_obj);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
@@ -368,7 +368,7 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
|
||||
QJsonValue value_artists = json_obj["artists"_L1];
|
||||
if (!value_artists.isArray()) {
|
||||
Error(QStringLiteral("Json reply object artists is not a array."), value_artists);
|
||||
Error(u"Json reply object artists is not a array."_s, value_artists);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
@@ -377,12 +377,12 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
QString artist;
|
||||
for (const QJsonValue &value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, atists array value is not a object."));
|
||||
Error(u"Invalid Json reply, atists array value is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, artists array value object is missing name."), obj_artist);
|
||||
Error(u"Invalid Json reply, artists array value object is missing name."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
artist = obj_artist["name"_L1].toString();
|
||||
@@ -404,14 +404,14 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
|
||||
QJsonValue value_images = json_obj["images"_L1];
|
||||
if (!value_images.isArray()) {
|
||||
Error(QStringLiteral("Json images is not an array."));
|
||||
Error(u"Json images is not an array."_s);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
const QJsonArray array_images = value_images.toArray();
|
||||
|
||||
if (array_images.isEmpty()) {
|
||||
Error(QStringLiteral("Invalid Json reply, images array is empty."));
|
||||
Error(u"Invalid Json reply, images array is empty."_s);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
@@ -419,12 +419,12 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
for (const QJsonValue &value_image : array_images) {
|
||||
|
||||
if (!value_image.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, images array value is not an object."));
|
||||
Error(u"Invalid Json reply, images array value is not an object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("type"_L1) || !obj_image.contains("resource_url"_L1) || !obj_image.contains("width"_L1) || !obj_image.contains("height"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, images array value object is missing type, resource_url, width or height."), obj_image);
|
||||
Error(u"Invalid Json reply, images array value object is missing type, resource_url, width or height."_s, obj_image);
|
||||
continue;
|
||||
}
|
||||
QString type = obj_image["type"_L1].toString();
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#include "coverprovider.h"
|
||||
#include "jsoncoverprovider.h"
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
JsonCoverProvider::JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: CoverProvider(name, enabled, authentication_required, quality, batch, allow_missing_album, app, network, parent) {}
|
||||
|
||||
@@ -45,18 +47,18 @@ QJsonObject JsonCoverProvider::ExtractJsonObj(const QByteArray &data) {
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json document."), data);
|
||||
Error(u"Received empty Json document."_s, data);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
Error(QStringLiteral("Json document is not an object."), json_doc);
|
||||
Error(u"Json document is not an object."_s, json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json object."), json_doc);
|
||||
Error(u"Received empty Json object."_s, json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ constexpr char kSecret[] = "80fd738f49596e9709b1bf9319c444a8";
|
||||
} // namespace
|
||||
|
||||
LastFmCoverProvider::LastFmCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Last.fm"), true, false, 1.0, true, false, app, network, parent) {}
|
||||
: JsonCoverProvider(u"Last.fm"_s, true, false, 1.0, true, false, app, network, parent) {}
|
||||
|
||||
LastFmCoverProvider::~LastFmCoverProvider() {
|
||||
|
||||
@@ -91,9 +91,9 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
}
|
||||
}
|
||||
|
||||
ParamList params = ParamList() << Param(QStringLiteral("api_key"), QLatin1String(kApiKey))
|
||||
<< Param(QStringLiteral("lang"), QLocale().name().left(2).toLower())
|
||||
<< Param(QStringLiteral("method"), method)
|
||||
ParamList params = ParamList() << Param(u"api_key"_s, QLatin1String(kApiKey))
|
||||
<< Param(u"lang"_s, QLocale().name().left(2).toLower())
|
||||
<< Param(u"method"_s, method)
|
||||
<< Param(type, query);
|
||||
|
||||
std::sort(params.begin(), params.end());
|
||||
@@ -109,13 +109,13 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5);
|
||||
QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower();
|
||||
|
||||
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("api_sig"))), QString::fromLatin1(QUrl::toPercentEncoding(signature)));
|
||||
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("format"))), QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("json"))));
|
||||
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(u"api_sig"_s)), QString::fromLatin1(QUrl::toPercentEncoding(signature)));
|
||||
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(u"format"_s)), QString::fromLatin1(QUrl::toPercentEncoding(u"json"_s)));
|
||||
|
||||
QUrl url(QString::fromLatin1(kUrl));
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
|
||||
replies_ << reply;
|
||||
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, type]() { QueryFinished(reply, id, type); });
|
||||
@@ -157,20 +157,20 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json reply is missing results."), json_obj);
|
||||
Error(u"Json reply is missing results."_s, json_obj);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_results.isObject()) {
|
||||
Error(QStringLiteral("Json results is not a object."), value_results);
|
||||
Error(u"Json results is not a object."_s, value_results);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_results = value_results.toObject();
|
||||
if (obj_results.isEmpty()) {
|
||||
Error(QStringLiteral("Json results object is empty."), value_results);
|
||||
Error(u"Json results object is empty."_s, value_results);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -182,7 +182,7 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
value_matches = obj_results["albummatches"_L1];
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json results object is missing albummatches."), obj_results);
|
||||
Error(u"Json results object is missing albummatches."_s, obj_results);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -192,21 +192,21 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
value_matches = obj_results["trackmatches"_L1];
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json results object is missing trackmatches."), obj_results);
|
||||
Error(u"Json results object is missing trackmatches."_s, obj_results);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!value_matches.isObject()) {
|
||||
Error(QStringLiteral("Json albummatches or trackmatches is not an object."), value_matches);
|
||||
Error(u"Json albummatches or trackmatches is not an object."_s, value_matches);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_matches = value_matches.toObject();
|
||||
if (obj_matches.isEmpty()) {
|
||||
Error(QStringLiteral("Json albummatches or trackmatches object is empty."), value_matches);
|
||||
Error(u"Json albummatches or trackmatches object is empty."_s, value_matches);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -220,7 +220,7 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
value_type = obj_matches[type];
|
||||
|
||||
if (!value_type.isArray()) {
|
||||
Error(QStringLiteral("Json album value in albummatches object is not an array."), value_type);
|
||||
Error(u"Json album value in albummatches object is not an array."_s, value_type);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -229,12 +229,12 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
for (const QJsonValue &value : array_type) {
|
||||
|
||||
if (!value.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, value in albummatches/trackmatches array is not a object."));
|
||||
Error(u"Invalid Json reply, value in albummatches/trackmatches array is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj = value.toObject();
|
||||
if (!obj.contains("artist"_L1) || !obj.contains("image"_L1) || !obj.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, album is missing artist, image or name."), obj);
|
||||
Error(u"Invalid Json reply, album is missing artist, image or name."_s, obj);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj["artist"_L1].toString();
|
||||
@@ -245,7 +245,7 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
|
||||
QJsonValue json_image = obj["image"_L1];
|
||||
if (!json_image.isArray()) {
|
||||
Error(QStringLiteral("Invalid Json reply, album image is not a array."), json_image);
|
||||
Error(u"Invalid Json reply, album image is not a array."_s, json_image);
|
||||
continue;
|
||||
}
|
||||
const QJsonArray array_image = json_image.toArray();
|
||||
@@ -253,12 +253,12 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
LastFmImageSize image_size_use = LastFmImageSize::Unknown;
|
||||
for (const QJsonValue &value_image : array_image) {
|
||||
if (!value_image.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, album image value is not an object."));
|
||||
Error(u"Invalid Json reply, album image value is not an object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("#text"_L1) || !obj_image.contains("size"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, album image value is missing #text or size."), obj_image);
|
||||
Error(u"Invalid Json reply, album image value is missing #text or size."_s, obj_image);
|
||||
continue;
|
||||
}
|
||||
QString image_url = obj_image["#text"_L1].toString();
|
||||
|
||||
@@ -54,7 +54,7 @@ constexpr int kRequestsDelay = 1000;
|
||||
} // namespace
|
||||
|
||||
MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("MusicBrainz"), true, false, 1.5, true, false, app, network, parent),
|
||||
: JsonCoverProvider(u"MusicBrainz"_s, true, false, 1.5, true, false, app, network, parent),
|
||||
timer_flush_requests_(new QTimer(this)) {
|
||||
|
||||
timer_flush_requests_->setInterval(kRequestsDelay);
|
||||
@@ -96,9 +96,9 @@ void MusicbrainzCoverProvider::SendSearchRequest(const SearchRequest &request) {
|
||||
QString query = QStringLiteral("release:\"%1\" AND artist:\"%2\"").arg(request.album.trimmed().replace(u'"', "\""_L1), request.artist.trimmed().replace(u'"', "\""_L1));
|
||||
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem(QStringLiteral("query"), query);
|
||||
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit));
|
||||
url_query.addQueryItem(QStringLiteral("fmt"), QStringLiteral("json"));
|
||||
url_query.addQueryItem(u"query"_s, query);
|
||||
url_query.addQueryItem(u"limit"_s, QString::number(kLimit));
|
||||
url_query.addQueryItem(u"fmt"_s, u"json"_s);
|
||||
|
||||
QUrl url(QString::fromLatin1(kReleaseSearchUrl));
|
||||
url.setQuery(url_query);
|
||||
@@ -148,7 +148,7 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
Error(error);
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json reply is missing releases."), json_obj);
|
||||
Error(u"Json reply is missing releases."_s, json_obj);
|
||||
}
|
||||
Q_EMIT SearchFinished(search_id, results);
|
||||
return;
|
||||
@@ -156,7 +156,7 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
QJsonValue value_releases = json_obj["releases"_L1];
|
||||
|
||||
if (!value_releases.isArray()) {
|
||||
Error(QStringLiteral("Json releases is not an array."), value_releases);
|
||||
Error(u"Json releases is not an array."_s, value_releases);
|
||||
Q_EMIT SearchFinished(search_id, results);
|
||||
return;
|
||||
}
|
||||
@@ -170,18 +170,18 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
for (const QJsonValue &value_release : array_releases) {
|
||||
|
||||
if (!value_release.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, releases array value is not an object."));
|
||||
Error(u"Invalid Json reply, releases array value is not an object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_release = value_release.toObject();
|
||||
if (!obj_release.contains("id"_L1) || !obj_release.contains("artist-credit"_L1) || !obj_release.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, releases array object is missing id, artist-credit or title."), obj_release);
|
||||
Error(u"Invalid Json reply, releases array object is missing id, artist-credit or title."_s, obj_release);
|
||||
continue;
|
||||
}
|
||||
|
||||
QJsonValue json_artists = obj_release["artist-credit"_L1];
|
||||
if (!json_artists.isArray()) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist-credit is not a array."), json_artists);
|
||||
Error(u"Invalid Json reply, artist-credit is not a array."_s, json_artists);
|
||||
continue;
|
||||
}
|
||||
const QJsonArray array_artists = json_artists.toArray();
|
||||
@@ -189,24 +189,24 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
QString artist;
|
||||
for (const QJsonValue &value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is not a object."));
|
||||
Error(u"Invalid Json reply, artist is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
|
||||
if (!obj_artist.contains("artist"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is missing."), obj_artist);
|
||||
Error(u"Invalid Json reply, artist is missing."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist2 = obj_artist["artist"_L1];
|
||||
if (!value_artist2.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is not an object."), value_artist2);
|
||||
Error(u"Invalid Json reply, artist is not an object."_s, value_artist2);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist2 = value_artist2.toObject();
|
||||
|
||||
if (!obj_artist2.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is missing name."), value_artist2);
|
||||
Error(u"Invalid Json reply, artist is missing name."_s, value_artist2);
|
||||
continue;
|
||||
}
|
||||
artist = obj_artist2["name"_L1].toString();
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
|
||||
MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Musixmatch"), true, false, 1.0, true, false, app, network, parent) {}
|
||||
: JsonCoverProvider(u"Musixmatch"_s, true, false, 1.0, true, false, app, network, parent) {}
|
||||
|
||||
MusixmatchCoverProvider::~MusixmatchCoverProvider() {
|
||||
|
||||
@@ -104,7 +104,7 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
|
||||
const QByteArray data = reply->readAll();
|
||||
if (data.isEmpty()) {
|
||||
Error(QStringLiteral("Empty reply received from server."));
|
||||
Error(u"Empty reply received from server."_s);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
return;
|
||||
}
|
||||
|
||||
static const QRegularExpression regex_html_tag(QStringLiteral("<[^>]*>"));
|
||||
static const QRegularExpression regex_html_tag(u"<[^>]*>"_s);
|
||||
if (content_json.contains(regex_html_tag)) { // Make sure it's not HTML code.
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
@@ -146,54 +146,54 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json document."), data);
|
||||
Error(u"Received empty Json document."_s, data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
Error(QStringLiteral("Json document is not an object."), json_doc);
|
||||
Error(u"Json document is not an object."_s, json_doc);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_data = json_doc.object();
|
||||
if (obj_data.isEmpty()) {
|
||||
Error(QStringLiteral("Received empty Json object."), json_doc);
|
||||
Error(u"Received empty Json object."_s, json_doc);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!obj_data.contains("props"_L1) || !obj_data["props"_L1].isObject()) {
|
||||
Error(QStringLiteral("Json reply is missing props."), obj_data);
|
||||
Error(u"Json reply is missing props."_s, obj_data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["props"_L1].toObject();
|
||||
|
||||
if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) {
|
||||
Error(QStringLiteral("Json props is missing pageProps."), obj_data);
|
||||
Error(u"Json props is missing pageProps."_s, obj_data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["pageProps"_L1].toObject();
|
||||
|
||||
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) {
|
||||
Error(QStringLiteral("Json pageProps is missing data."), obj_data);
|
||||
Error(u"Json pageProps is missing data."_s, obj_data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["data"_L1].toObject();
|
||||
|
||||
if (!obj_data.contains("albumGet"_L1) || !obj_data["albumGet"_L1].isObject()) {
|
||||
Error(QStringLiteral("Json data is missing albumGet."), obj_data);
|
||||
Error(u"Json data is missing albumGet."_s, obj_data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["albumGet"_L1].toObject();
|
||||
|
||||
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) {
|
||||
Error(QStringLiteral("Json albumGet reply is missing data."), obj_data);
|
||||
Error(u"Json albumGet reply is missing data."_s, obj_data);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -212,9 +212,9 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
return;
|
||||
}
|
||||
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("coverImage800x800"), QSize(800, 800))
|
||||
<< qMakePair(QStringLiteral("coverImage500x500"), QSize(500, 500))
|
||||
<< qMakePair(QStringLiteral("coverImage350x350"), QSize(350, 350));
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"coverImage800x800"_s, QSize(800, 800))
|
||||
<< qMakePair(u"coverImage500x500"_s, QSize(500, 500))
|
||||
<< qMakePair(u"coverImage350x350"_s, QSize(350, 350));
|
||||
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
if (!obj_data.contains(cover_size.first)) continue;
|
||||
|
||||
@@ -62,7 +62,7 @@ constexpr const int kRequestsDelay = 1000;
|
||||
using std::make_shared;
|
||||
|
||||
OpenTidalCoverProvider::OpenTidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("OpenTidal"), true, false, 2.5, true, false, app, network, parent),
|
||||
: JsonCoverProvider(u"OpenTidal"_s, true, false, 2.5, true, false, app, network, parent),
|
||||
login_timer_(new QTimer(this)),
|
||||
timer_flush_requests_(new QTimer(this)),
|
||||
login_in_progress_(false),
|
||||
@@ -178,7 +178,7 @@ void OpenTidalCoverProvider::Login() {
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setRawHeader("Authorization", "Basic " + QByteArray(QByteArray::fromBase64(kApiClientIdB64) + ":" + QByteArray::fromBase64(kApiClientSecretB64)).toBase64());
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem(QStringLiteral("grant_type"), QStringLiteral("client_credentials"));
|
||||
url_query.addQueryItem(u"grant_type"_s, u"client_credentials"_s);
|
||||
QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
|
||||
replies_ << reply;
|
||||
QObject::connect(reply, &QNetworkReply::sslErrors, this, &OpenTidalCoverProvider::HandleLoginSSLErrors);
|
||||
@@ -331,14 +331,14 @@ void OpenTidalCoverProvider::SendSearchRequest(SearchRequestPtr search_request)
|
||||
}
|
||||
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem(QStringLiteral("query"), QString::fromUtf8(QUrl::toPercentEncoding(query)));
|
||||
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit));
|
||||
url_query.addQueryItem(QStringLiteral("countryCode"), QStringLiteral("US"));
|
||||
url_query.addQueryItem(u"query"_s, QString::fromUtf8(QUrl::toPercentEncoding(query)));
|
||||
url_query.addQueryItem(u"limit"_s, QString::number(kLimit));
|
||||
url_query.addQueryItem(u"countryCode"_s, u"US"_s);
|
||||
QUrl url(QLatin1String(kApiUrl) + "/search"_L1);
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/vnd.tidal.v1+json"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/vnd.tidal.v1+json"_s);
|
||||
req.setRawHeader("Authorization", token_type_.toUtf8() + " " + access_token_.toUtf8());
|
||||
|
||||
QNetworkReply *reply = network_->get(req);
|
||||
|
||||
@@ -54,7 +54,7 @@ constexpr int kLimit = 10;
|
||||
}
|
||||
|
||||
QobuzCoverProvider::QobuzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Qobuz"), true, true, 2.0, true, true, app, network, parent),
|
||||
: JsonCoverProvider(u"Qobuz"_s, true, true, 2.0, true, true, app, network, parent),
|
||||
service_(app->streaming_services()->Service<QobuzService>()) {}
|
||||
|
||||
QobuzCoverProvider::~QobuzCoverProvider() {
|
||||
@@ -87,9 +87,9 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
}
|
||||
}
|
||||
|
||||
ParamList params = ParamList() << Param(QStringLiteral("query"), query)
|
||||
<< Param(QStringLiteral("limit"), QString::number(kLimit))
|
||||
<< Param(QStringLiteral("app_id"), service_->app_id());
|
||||
ParamList params = ParamList() << Param(u"query"_s, query)
|
||||
<< Param(u"limit"_s, QString::number(kLimit))
|
||||
<< Param(u"app_id"_s, service_->app_id());
|
||||
|
||||
std::sort(params.begin(), params.end());
|
||||
|
||||
@@ -103,7 +103,7 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
req.setRawHeader("X-App-Id", service_->app_id().toUtf8());
|
||||
req.setRawHeader("X-User-Auth-Token", service_->user_auth_token().toUtf8());
|
||||
QNetworkReply *reply = network_->get(req);
|
||||
@@ -188,27 +188,27 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
value_type = json_obj["tracks"_L1];
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Json reply is missing albums and tracks object."), json_obj);
|
||||
Error(u"Json reply is missing albums and tracks object."_s, json_obj);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_type.isObject()) {
|
||||
Error(QStringLiteral("Json albums or tracks is not a object."), value_type);
|
||||
Error(u"Json albums or tracks is not a object."_s, value_type);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
QJsonObject obj_type = value_type.toObject();
|
||||
|
||||
if (!obj_type.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json albums or tracks object does not contain items."), obj_type);
|
||||
Error(u"Json albums or tracks object does not contain items."_s, obj_type);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
QJsonValue value_items = obj_type["items"_L1];
|
||||
|
||||
if (!value_items.isArray()) {
|
||||
Error(QStringLiteral("Json albums or track object items is not a array."), value_items);
|
||||
Error(u"Json albums or track object items is not a array."_s, value_items);
|
||||
Q_EMIT SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@@ -217,7 +217,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
for (const QJsonValue &value : array_items) {
|
||||
|
||||
if (!value.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, value in items is not a object."));
|
||||
Error(u"Invalid Json reply, value in items is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject item_obj = value.toObject();
|
||||
@@ -225,7 +225,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
QJsonObject obj_album;
|
||||
if (item_obj.contains("album"_L1)) {
|
||||
if (!item_obj["album"_L1].isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items album is not a object."), item_obj);
|
||||
Error(u"Invalid Json reply, items album is not a object."_s, item_obj);
|
||||
continue;
|
||||
}
|
||||
obj_album = item_obj["album"_L1].toObject();
|
||||
@@ -235,7 +235,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
}
|
||||
|
||||
if (!obj_album.contains("artist"_L1) || !obj_album.contains("image"_L1) || !obj_album.contains("title"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, item is missing artist, title or image."), obj_album);
|
||||
Error(u"Invalid Json reply, item is missing artist, title or image."_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -244,12 +244,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
// Artist
|
||||
QJsonValue value_artist = obj_album["artist"_L1];
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) artist is not a object."), value_artist);
|
||||
Error(u"Invalid Json reply, items (album) artist is not a object."_s, value_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) artist is missing name."), obj_artist);
|
||||
Error(u"Invalid Json reply, items (album) artist is missing name."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"_L1].toString();
|
||||
@@ -257,12 +257,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
// Image
|
||||
QJsonValue value_image = obj_album["image"_L1];
|
||||
if (!value_image.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) image is not a object."), value_image);
|
||||
Error(u"Invalid Json reply, items (album) image is not a object."_s, value_image);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("large"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) image is missing large."), obj_image);
|
||||
Error(u"Invalid Json reply, items (album) image is missing large."_s, obj_image);
|
||||
continue;
|
||||
}
|
||||
QUrl cover_url(obj_image["large"_L1].toString());
|
||||
|
||||
@@ -42,10 +42,6 @@
|
||||
#include "core/application.h"
|
||||
#include "core/networkaccessmanager.h"
|
||||
#include "core/logging.h"
|
||||
#include "core/settings.h"
|
||||
#include "core/localredirectserver.h"
|
||||
#include "utilities/randutils.h"
|
||||
#include "utilities/timeconstants.h"
|
||||
#include "streaming/streamingservices.h"
|
||||
#include "spotify/spotifyservice.h"
|
||||
#include "albumcoverfetcher.h"
|
||||
@@ -60,7 +56,7 @@ constexpr int kLimit = 10;
|
||||
} // namespace
|
||||
|
||||
SpotifyCoverProvider::SpotifyCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Spotify"), true, true, 2.5, true, true, app, network, parent),
|
||||
: JsonCoverProvider(u"Spotify"_s, true, true, 2.5, true, true, app, network, parent),
|
||||
service_(app->streaming_services()->Service<SpotifyService>()) {}
|
||||
|
||||
SpotifyCoverProvider::~SpotifyCoverProvider() {
|
||||
@@ -98,20 +94,20 @@ bool SpotifyCoverProvider::StartSearch(const QString &artist, const QString &alb
|
||||
}
|
||||
}
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("q"), query)
|
||||
<< Param(QStringLiteral("type"), type)
|
||||
<< Param(QStringLiteral("limit"), QString::number(kLimit));
|
||||
const ParamList params = ParamList() << Param(u"q"_s, query)
|
||||
<< Param(u"type"_s, type)
|
||||
<< Param(u"limit"_s, QString::number(kLimit));
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(param.first)), QString::fromLatin1(QUrl::toPercentEncoding(param.second)));
|
||||
}
|
||||
|
||||
QUrl url(QLatin1String(kApiUrl) + QStringLiteral("/search"));
|
||||
QUrl url(QLatin1String(kApiUrl) + u"/search"_s);
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
req.setRawHeader("Authorization", "Bearer " + service_->access_token().toUtf8());
|
||||
|
||||
QNetworkReply *reply = network_->get(req);
|
||||
|
||||
@@ -52,7 +52,7 @@ constexpr int kLimit = 10;
|
||||
}
|
||||
|
||||
TidalCoverProvider::TidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider(QStringLiteral("Tidal"), true, true, 2.5, true, true, app, network, parent),
|
||||
: JsonCoverProvider(u"Tidal"_s, true, true, 2.5, true, true, app, network, parent),
|
||||
service_(app->streaming_services()->Service<TidalService>()) {}
|
||||
|
||||
TidalCoverProvider::~TidalCoverProvider() {
|
||||
@@ -87,9 +87,9 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
}
|
||||
}
|
||||
|
||||
const ParamList params = ParamList() << Param(QStringLiteral("query"), query)
|
||||
<< Param(QStringLiteral("limit"), QString::number(kLimit))
|
||||
<< Param(QStringLiteral("countryCode"), service_->country_code());
|
||||
const ParamList params = ParamList() << Param(u"query"_s, query)
|
||||
<< Param(u"limit"_s, QString::number(kLimit))
|
||||
<< Param(u"countryCode"_s, service_->country_code());
|
||||
|
||||
QUrlQuery url_query;
|
||||
for (const Param ¶m : params) {
|
||||
@@ -100,7 +100,7 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
|
||||
if (service_->oauth() && !service_->access_token().isEmpty()) req.setRawHeader("authorization", "Bearer " + service_->access_token().toUtf8());
|
||||
else if (!service_->session_id().isEmpty()) req.setRawHeader("X-Tidal-SessionId", service_->session_id().toUtf8());
|
||||
|
||||
@@ -183,7 +183,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
}
|
||||
|
||||
if (!json_obj.contains("items"_L1)) {
|
||||
Error(QStringLiteral("Json object is missing items."), json_obj);
|
||||
Error(u"Json object is missing items."_s, json_obj);
|
||||
Q_EMIT SearchFinished(id, CoverProviderSearchResults());
|
||||
return;
|
||||
}
|
||||
@@ -204,23 +204,23 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
for (const QJsonValue &value_item : array_items) {
|
||||
|
||||
if (!value_item.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item is not a object."));
|
||||
Error(u"Invalid Json reply, items array item is not a object."_s);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
|
||||
if (!obj_item.contains("artist"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item is missing artist."), obj_item);
|
||||
Error(u"Invalid Json reply, items array item is missing artist."_s, obj_item);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist = obj_item["artist"_L1];
|
||||
if (!value_artist.isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item artist is not a object."), value_artist);
|
||||
Error(u"Invalid Json reply, items array item artist is not a object."_s, value_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item artist is missing name."), obj_artist);
|
||||
Error(u"Invalid Json reply, items array item artist is missing name."_s, obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"_L1].toString();
|
||||
@@ -232,7 +232,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
obj_album = value_album.toObject();
|
||||
}
|
||||
else {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item album is not a object."), value_album);
|
||||
Error(u"Invalid Json reply, items array item album is not a object."_s, value_album);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -241,7 +241,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
}
|
||||
|
||||
if (!obj_album.contains("title"_L1) || !obj_album.contains("cover"_L1)) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item album is missing title or cover."), obj_album);
|
||||
Error(u"Invalid Json reply, items array item album is missing title or cover."_s, obj_album);
|
||||
continue;
|
||||
}
|
||||
QString album = obj_album["title"_L1].toString();
|
||||
@@ -252,9 +252,9 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
cover_result.album = Song::AlbumRemoveDiscMisc(album);
|
||||
cover_result.number = ++i;
|
||||
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("1280x1280"), QSize(1280, 1280))
|
||||
<< qMakePair(QStringLiteral("750x750"), QSize(750, 750))
|
||||
<< qMakePair(QStringLiteral("640x640"), QSize(640, 640));
|
||||
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"1280x1280"_s, QSize(1280, 1280))
|
||||
<< qMakePair(u"750x750"_s, QSize(750, 750))
|
||||
<< qMakePair(u"640x640"_s, QSize(640, 640));
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
QUrl cover_url(QStringLiteral("%1/images/%2/%3.jpg").arg(QLatin1String(TidalService::kResourcesUrl), cover, cover_size.first));
|
||||
cover_result.image_url = cover_url;
|
||||
|
||||
Reference in New Issue
Block a user