Port to QStringLiteral operator

This commit is contained in:
Jonas Kvinge 2024-10-20 06:38:55 +02:00
parent 722035913e
commit ef9ef63f02
202 changed files with 2036 additions and 1889 deletions

View File

@ -50,6 +50,7 @@
#include "engine/enginebase.h" #include "engine/enginebase.h"
using namespace std::chrono_literals; using namespace std::chrono_literals;
using namespace Qt::Literals::StringLiterals;
const char *AnalyzerContainer::kSettingsGroup = "Analyzer"; const char *AnalyzerContainer::kSettingsGroup = "Analyzer";
const char *AnalyzerContainer::kSettingsFramerate = "framerate"; const char *AnalyzerContainer::kSettingsFramerate = "framerate";
@ -185,7 +186,7 @@ void AnalyzerContainer::Load() {
Settings s; Settings s;
s.beginGroup(kSettingsGroup); s.beginGroup(kSettingsGroup);
QString type = s.value("type", QStringLiteral("BlockAnalyzer")).toString(); QString type = s.value("type", u"BlockAnalyzer"_s).toString();
current_framerate_ = s.value(kSettingsFramerate, kMediumFramerate).toInt(); current_framerate_ = s.value(kSettingsFramerate, kMediumFramerate).toInt();
s.endGroup(); s.endGroup();

View File

@ -41,6 +41,8 @@
#include "fht.h" #include "fht.h"
#include "analyzerbase.h" #include "analyzerbase.h"
using namespace Qt::Literals::StringLiterals;
const char *NyanCatAnalyzer::kName = "Nyanalyzer Cat"; const char *NyanCatAnalyzer::kName = "Nyanalyzer Cat";
const char *RainbowDashAnalyzer::kName = "Rainbow Dash"; const char *RainbowDashAnalyzer::kName = "Rainbow Dash";
@ -68,8 +70,8 @@ RainbowAnalyzer::RainbowAnalyzer(const RainbowType rbtype, QWidget *parent)
background_brush_(QColor(0x0f, 0x43, 0x73)) { background_brush_(QColor(0x0f, 0x43, 0x73)) {
rainbowtype = rbtype; rainbowtype = rbtype;
cat_dash_[0] = QPixmap(QStringLiteral(":/pictures/nyancat.png")); cat_dash_[0] = QPixmap(u":/pictures/nyancat.png"_s);
cat_dash_[1] = QPixmap(QStringLiteral(":/pictures/rainbowdash.png")); cat_dash_[1] = QPixmap(u":/pictures/rainbowdash.png"_s);
memset(history_, 0, sizeof(history_)); memset(history_, 0, sizeof(history_));
for (int i = 0; i < kRainbowBands; ++i) { for (int i = 0; i < kRainbowBands; ++i) {

View File

@ -210,8 +210,8 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET path=:path WHERE ROWID=:id").arg(dirs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET path=:path WHERE ROWID=:id").arg(dirs_table_));
q.BindValue(QStringLiteral(":path"), new_path); q.BindValue(u":path"_s, new_path);
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -227,8 +227,8 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET path=:path || substr(path, %2) WHERE directory=:id").arg(subdirs_table_).arg(path_len)); q.prepare(QStringLiteral("UPDATE %1 SET path=:path || substr(path, %2) WHERE directory=:id").arg(subdirs_table_).arg(path_len));
q.BindValue(QStringLiteral(":path"), new_url); q.BindValue(u":path"_s, new_url);
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -239,8 +239,8 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET url=:path || substr(url, %2) WHERE directory=:id").arg(songs_table_).arg(path_len)); q.prepare(QStringLiteral("UPDATE %1 SET url=:path || substr(url, %2) WHERE directory=:id").arg(songs_table_).arg(path_len));
q.BindValue(QStringLiteral(":path"), new_url); q.BindValue(u":path"_s, new_url);
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -288,7 +288,7 @@ CollectionSubdirectoryList CollectionBackend::SubdirsInDirectory(const int id, Q
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT path, mtime FROM %1 WHERE directory_id = :dir").arg(subdirs_table_)); q.prepare(QStringLiteral("SELECT path, mtime FROM %1 WHERE directory_id = :dir").arg(subdirs_table_));
q.BindValue(QStringLiteral(":dir"), id); q.BindValue(u":dir"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return CollectionSubdirectoryList(); return CollectionSubdirectoryList();
@ -379,7 +379,7 @@ void CollectionBackend::AddDirectory(const QString &path) {
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE path = :path").arg(dirs_table_)); q.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE path = :path").arg(dirs_table_));
q.BindValue(QStringLiteral(":path"), path); q.BindValue(u":path"_s, path);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -391,7 +391,7 @@ void CollectionBackend::AddDirectory(const QString &path) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("INSERT INTO %1 (path, subdirs) VALUES (:path, 1)").arg(dirs_table_)); q.prepare(QStringLiteral("INSERT INTO %1 (path, subdirs) VALUES (:path, 1)").arg(dirs_table_));
q.BindValue(QStringLiteral(":path"), path); q.BindValue(u":path"_s, path);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -423,7 +423,7 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id").arg(subdirs_table_)); q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id").arg(subdirs_table_));
q.BindValue(QStringLiteral(":id"), dir.id); q.BindValue(u":id"_s, dir.id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -434,7 +434,7 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(dirs_table_)); q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(dirs_table_));
q.BindValue(QStringLiteral(":id"), dir.id); q.BindValue(u":id"_s, dir.id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -454,7 +454,7 @@ SongList CollectionBackend::FindSongsInDirectory(const int id) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":directory_id"), id); q.BindValue(u":directory_id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return SongList(); return SongList();
@ -477,7 +477,7 @@ SongList CollectionBackend::SongsWithMissingFingerprint(const int id) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (fingerprint IS NULL OR fingerprint = '')").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (fingerprint IS NULL OR fingerprint = '')").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":directory_id"), id); q.BindValue(u":directory_id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return SongList(); return SongList();
@ -500,7 +500,7 @@ SongList CollectionBackend::SongsWithMissingLoudnessCharacteristics(const int id
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (ebur128_integrated_loudness_lufs IS NULL OR ebur128_loudness_range_lu IS NULL)").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (ebur128_integrated_loudness_lufs IS NULL OR ebur128_loudness_range_lu IS NULL)").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":directory_id"), id); q.BindValue(u":directory_id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return SongList(); return SongList();
@ -543,8 +543,8 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
// Delete the subdirectory // Delete the subdirectory
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_)); q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
q.BindValue(QStringLiteral(":id"), subdir.directory_id); q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(QStringLiteral(":path"), subdir.path); q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -556,8 +556,8 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_)); q.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
q.BindValue(QStringLiteral(":id"), subdir.directory_id); q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(QStringLiteral(":path"), subdir.path); q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -568,9 +568,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
if (exists) { if (exists) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE directory_id = :id AND path = :path").arg(subdirs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
q.BindValue(QStringLiteral(":mtime"), subdir.mtime); q.BindValue(u":mtime"_s, subdir.mtime);
q.BindValue(QStringLiteral(":id"), subdir.directory_id); q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(QStringLiteral(":path"), subdir.path); q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -579,9 +579,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
else { else {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("INSERT INTO %1 (directory_id, path, mtime) VALUES (:id, :path, :mtime)").arg(subdirs_table_)); q.prepare(QStringLiteral("INSERT INTO %1 (directory_id, path, mtime) VALUES (:id, :path, :mtime)").arg(subdirs_table_));
q.BindValue(QStringLiteral(":id"), subdir.directory_id); q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(QStringLiteral(":path"), subdir.path); q.BindValue(u":path"_s, subdir.path);
q.BindValue(QStringLiteral(":mtime"), subdir.mtime); q.BindValue(u":mtime"_s, subdir.mtime);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -637,7 +637,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
if (!dirs_table_.isEmpty()) { if (!dirs_table_.isEmpty()) {
SqlQuery check_dir(db); SqlQuery check_dir(db);
check_dir.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE ROWID = :id").arg(dirs_table_)); check_dir.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE ROWID = :id").arg(dirs_table_));
check_dir.BindValue(QStringLiteral(":id"), song.directory_id()); check_dir.BindValue(u":id"_s, song.directory_id());
if (!check_dir.Exec()) { if (!check_dir.Exec()) {
db_->ReportErrors(check_dir); db_->ReportErrors(check_dir);
return; return;
@ -658,7 +658,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec)); q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
song.BindToQuery(&q); song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), song.id()); q.BindValue(u":id"_s, song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -685,7 +685,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec)); q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
new_song.BindToQuery(&q); new_song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), new_song.id()); q.BindValue(u":id"_s, new_song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -770,7 +770,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec)); q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
new_song.BindToQuery(&q); new_song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), old_song.id()); q.BindValue(u":id"_s, old_song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -813,7 +813,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":id"), old_song.id()); q.BindValue(u":id"_s, old_song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -844,8 +844,8 @@ void CollectionBackend::UpdateMTimesOnly(const SongList &songs) {
for (const Song &song : songs) { for (const Song &song : songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":mtime"), song.mtime()); q.BindValue(u":mtime"_s, song.mtime());
q.BindValue(QStringLiteral(":id"), song.id()); q.BindValue(u":id"_s, song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -864,7 +864,7 @@ void CollectionBackend::DeleteSongs(const SongList &songs) {
for (const Song &song : songs) { for (const Song &song : songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":id"), song.id()); q.BindValue(u":id"_s, song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -891,7 +891,7 @@ void CollectionBackend::MarkSongsUnavailable(const SongList &songs, const bool u
ScopedTransaction transaction(&db); ScopedTransaction transaction(&db);
for (const Song &song : songs) { for (const Song &song : songs) {
query.BindValue(QStringLiteral(":id"), song.id()); query.BindValue(u":id"_s, song.id());
if (!query.Exec()) { if (!query.Exec()) {
db_->ReportErrors(query); db_->ReportErrors(query);
return; return;
@ -918,7 +918,7 @@ QStringList CollectionBackend::GetAll(const QString &column, const CollectionFil
QSqlDatabase db(db_->Connect()); QSqlDatabase db(db_->Connect());
CollectionQuery query(db, songs_table_, filter_options); CollectionQuery query(db, songs_table_, filter_options);
query.SetColumnSpec(QStringLiteral("DISTINCT ") + column); query.SetColumnSpec(u"DISTINCT "_s + column);
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
if (!query.Exec()) { if (!query.Exec()) {
@ -936,7 +936,8 @@ QStringList CollectionBackend::GetAll(const QString &column, const CollectionFil
QStringList CollectionBackend::GetAllArtists(const CollectionFilterOptions &opt) { QStringList CollectionBackend::GetAllArtists(const CollectionFilterOptions &opt) {
return GetAll(QStringLiteral("artist"), opt); return GetAll(u"artist"_s, opt);
} }
QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOptions &opt) { QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOptions &opt) {
@ -946,16 +947,16 @@ QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOpt
// Albums with 'albumartist' field set: // Albums with 'albumartist' field set:
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.SetColumnSpec(QStringLiteral("DISTINCT albumartist")); query.SetColumnSpec(u"DISTINCT albumartist"_s);
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!=")); query.AddWhere(u"album"_s, ""_L1, u"!="_s);
// Albums with no 'albumartist' (extract 'artist'): // Albums with no 'albumartist' (extract 'artist'):
CollectionQuery query2(db, songs_table_, opt); CollectionQuery query2(db, songs_table_, opt);
query2.SetColumnSpec(QStringLiteral("DISTINCT artist")); query2.SetColumnSpec(u"DISTINCT artist"_s);
query2.AddCompilationRequirement(false); query2.AddCompilationRequirement(false);
query2.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!=")); query2.AddWhere(u"album"_s, ""_L1, u"!="_s);
query2.AddWhere(QStringLiteral("albumartist"), ""_L1, QStringLiteral("=")); query2.AddWhere(u"albumartist"_s, ""_L1, u"="_s);
if (!query.Exec()) { if (!query.Exec()) {
ReportErrors(query); ReportErrors(query);
@ -994,7 +995,7 @@ SongList CollectionBackend::GetArtistSongs(const QString &effective_albumartist,
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); query.AddWhere(u"effective_albumartist"_s, effective_albumartist);
SongList songs; SongList songs;
if (!ExecCollectionQuery(&query, songs)) { if (!ExecCollectionQuery(&query, songs)) {
@ -1012,8 +1013,8 @@ SongList CollectionBackend::GetAlbumSongs(const QString &effective_albumartist,
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); query.AddWhere(u"effective_albumartist"_s, effective_albumartist);
query.AddWhere(QStringLiteral("album"), album); query.AddWhere(u"album"_s, album);
SongList songs; SongList songs;
if (!ExecCollectionQuery(&query, songs)) { if (!ExecCollectionQuery(&query, songs)) {
@ -1031,7 +1032,7 @@ SongList CollectionBackend::GetSongsByAlbum(const QString &album, const Collecti
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("album"), album); query.AddWhere(u"album"_s, album);
SongList songs; SongList songs;
if (!ExecCollectionQuery(&query, songs)) { if (!ExecCollectionQuery(&query, songs)) {
@ -1044,7 +1045,7 @@ SongList CollectionBackend::GetSongsByAlbum(const QString &album, const Collecti
bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongList &songs) { bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongList &songs) {
query->SetColumnSpec(QStringLiteral("%songs_table.ROWID, ") + Song::kColumnSpec); query->SetColumnSpec(u"%songs_table.ROWID, "_s + Song::kColumnSpec);
if (!query->Exec()) return false; if (!query->Exec()) return false;
@ -1059,7 +1060,7 @@ bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongList &so
bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongMap &songs) { bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongMap &songs) {
query->SetColumnSpec(QStringLiteral("%songs_table.ROWID, ") + Song::kColumnSpec); query->SetColumnSpec(u"%songs_table.ROWID, "_s + Song::kColumnSpec);
if (!query->Exec()) return false; if (!query->Exec()) return false;
@ -1166,11 +1167,11 @@ Song CollectionBackend::GetSongByUrl(const QUrl &url, const qint64 beginning) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND beginning = :beginning AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND beginning = :beginning AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":url1"), url.toString()); q.BindValue(u":url1"_s, url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded)); q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded)); q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded)); q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":beginning"), beginning); q.BindValue(u":beginning"_s, beginning);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
@ -1195,11 +1196,11 @@ Song CollectionBackend::GetSongByUrlAndTrack(const QUrl &url, const int track) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND track = :track AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND track = :track AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":url1"), url.toString()); q.BindValue(u":url1"_s, url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded)); q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded)); q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded)); q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":track"), track); q.BindValue(u":track"_s, track);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
@ -1224,11 +1225,11 @@ SongList CollectionBackend::GetSongsByUrl(const QUrl &url, const bool unavailabl
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = :unavailable").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = :unavailable").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":url1"), url.toString()); q.BindValue(u":url1"_s, url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded)); q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded)); q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded)); q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":unavailable"), (unavailable ? 1 : 0)); q.BindValue(u":unavailable"_s, (unavailable ? 1 : 0));
SongList songs; SongList songs;
if (!q.Exec()) { if (!q.Exec()) {
@ -1305,7 +1306,7 @@ SongList CollectionBackend::GetSongsByFingerprint(const QString &fingerprint) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE fingerprint = :fingerprint").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE fingerprint = :fingerprint").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":fingerprint"), fingerprint); q.BindValue(u":fingerprint"_s, fingerprint);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return SongList(); return SongList();
@ -1333,9 +1334,9 @@ SongList CollectionBackend::GetCompilationSongs(const QString &album, const Coll
QSqlDatabase db(db_->Connect()); QSqlDatabase db(db_->Connect());
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.SetColumnSpec(QStringLiteral("%songs_table.ROWID, ") + Song::kColumnSpec); query.SetColumnSpec(u"%songs_table.ROWID, "_s + Song::kColumnSpec);
query.AddCompilationRequirement(true); query.AddCompilationRequirement(true);
query.AddWhere(QStringLiteral("album"), album); query.AddWhere(u"album"_s, album);
if (!query.Exec()) { if (!query.Exec()) {
ReportErrors(query); ReportErrors(query);
@ -1426,10 +1427,10 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &cha
{ // Get song, so we can tell the model its updated { // Get song, so we can tell the model its updated
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(Song::kRowIdColumnSpec, songs_table_));
q.BindValue(QStringLiteral(":url1"), url.toString()); q.BindValue(u":url1"_s, url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded)); q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded)); q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded)); q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
if (q.Exec()) { if (q.Exec()) {
while (q.next()) { while (q.next()) {
Song song(source_); Song song(source_);
@ -1447,11 +1448,11 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &cha
// Update the song // Update the song
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET compilation_detected = :compilation_detected, compilation_effective = ((compilation OR :compilation_detected OR compilation_on) AND NOT compilation_off) + 0 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET compilation_detected = :compilation_detected, compilation_effective = ((compilation OR :compilation_detected OR compilation_on) AND NOT compilation_off) + 0 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":compilation_detected"), static_cast<int>(compilation_detected)); q.BindValue(u":compilation_detected"_s, static_cast<int>(compilation_detected));
q.BindValue(QStringLiteral(":url1"), url.toString()); q.BindValue(u":url1"_s, url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded)); q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded)); q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded)); q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return false; return false;
@ -1467,15 +1468,15 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
QSqlDatabase db(db_->Connect()); QSqlDatabase db(db_->Connect());
CollectionQuery query(db, songs_table_, opt); CollectionQuery query(db, songs_table_, opt);
query.SetColumnSpec(QStringLiteral("url, filetype, cue_path, effective_albumartist, album, compilation_effective, art_embedded, art_automatic, art_manual, art_unset")); query.SetColumnSpec(u"url, filetype, cue_path, effective_albumartist, album, compilation_effective, art_embedded, art_automatic, art_manual, art_unset"_s);
query.SetOrderBy(QStringLiteral("effective_albumartist, album, url")); query.SetOrderBy(u"effective_albumartist, album, url"_s);
if (compilation_required) { if (compilation_required) {
query.AddCompilationRequirement(true); query.AddCompilationRequirement(true);
} }
else if (!artist.isEmpty()) { else if (!artist.isEmpty()) {
query.AddCompilationRequirement(false); query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), artist); query.AddWhere(u"effective_albumartist"_s, artist);
} }
if (!query.Exec()) { if (!query.Exec()) {
@ -1503,7 +1504,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
album_info.art_embedded = query.Value(6).toBool(); album_info.art_embedded = query.Value(6).toBool();
const QString art_automatic = query.Value(7).toString(); const QString art_automatic = query.Value(7).toString();
static const QRegularExpression regex_url_schema(QStringLiteral("..+:.*")); static const QRegularExpression regex_url_schema(u"..+:.*"_s);
if (art_automatic.contains(regex_url_schema)) { if (art_automatic.contains(regex_url_schema)) {
album_info.art_automatic = QUrl::fromEncoded(art_automatic.toUtf8()); album_info.art_automatic = QUrl::fromEncoded(art_automatic.toUtf8());
} }
@ -1559,11 +1560,11 @@ CollectionBackend::Album CollectionBackend::GetAlbumArt(const QString &effective
ret.album_artist = effective_albumartist; ret.album_artist = effective_albumartist;
CollectionQuery query(db, songs_table_); CollectionQuery query(db, songs_table_);
query.SetColumnSpec(QStringLiteral("url, art_embedded, art_automatic, art_manual, art_unset")); query.SetColumnSpec(u"url, art_embedded, art_automatic, art_manual, art_unset"_s);
if (!effective_albumartist.isEmpty()) { if (!effective_albumartist.isEmpty()) {
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); query.AddWhere(u"effective_albumartist"_s, effective_albumartist);
} }
query.AddWhere(QStringLiteral("album"), album); query.AddWhere(u"album"_s, album);
if (!query.Exec()) { if (!query.Exec()) {
ReportErrors(query); ReportErrors(query);
@ -1596,9 +1597,9 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET art_embedded = :art_embedded, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET art_embedded = :art_embedded, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":art_embedded"), art_embedded ? 1 : 0); q.BindValue(u":art_embedded"_s, art_embedded ? 1 : 0);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist); q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(QStringLiteral(":album"), album); q.BindValue(u":album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1609,8 +1610,8 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
{ {
CollectionQuery q(db, songs_table_); CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec); q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(QStringLiteral("album"), album); q.AddWhere(u"album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
ReportErrors(q); ReportErrors(q);
return; return;
@ -1642,9 +1643,9 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET art_manual = :art_manual, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET art_manual = :art_manual, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":art_manual"), art_manual.isValid() ? art_manual.toString(QUrl::FullyEncoded) : ""_L1); q.BindValue(u":art_manual"_s, art_manual.isValid() ? art_manual.toString(QUrl::FullyEncoded) : ""_L1);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist); q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(QStringLiteral(":album"), album); q.BindValue(u":album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1655,8 +1656,8 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
{ {
CollectionQuery q(db, songs_table_); CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec); q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(QStringLiteral("album"), album); q.AddWhere(u"album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
ReportErrors(q); ReportErrors(q);
return; return;
@ -1688,8 +1689,8 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET art_unset = 1, art_manual = '', art_automatic = '', art_embedded = '' WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET art_unset = 1, art_manual = '', art_automatic = '', art_embedded = '' WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist); q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(QStringLiteral(":album"), album); q.BindValue(u":album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1700,8 +1701,8 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
{ {
CollectionQuery q(db, songs_table_); CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec); q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(QStringLiteral("album"), album); q.AddWhere(u"album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
ReportErrors(q); ReportErrors(q);
return; return;
@ -1733,9 +1734,9 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET art_embedded = 0, art_automatic = '', art_manual = '', art_unset = :art_unset WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET art_embedded = 0, art_automatic = '', art_manual = '', art_unset = :art_unset WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":art_unset"), art_unset ? 1 : 0); q.BindValue(u":art_unset"_s, art_unset ? 1 : 0);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist); q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(QStringLiteral(":album"), album); q.BindValue(u":album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1746,8 +1747,8 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
{ {
CollectionQuery q(db, songs_table_); CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec); q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist); q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(QStringLiteral("album"), album); q.AddWhere(u"album"_s, album);
if (!q.Exec()) { if (!q.Exec()) {
ReportErrors(q); ReportErrors(q);
return; return;
@ -1779,10 +1780,10 @@ void CollectionBackend::ForceCompilation(const QString &album, const QStringList
SqlQuery q(db); SqlQuery q(db);
q.prepare(sql); q.prepare(sql);
q.BindValue(QStringLiteral(":compilation_on"), on ? 1 : 0); q.BindValue(u":compilation_on"_s, on ? 1 : 0);
q.BindValue(QStringLiteral(":compilation_off"), on ? 0 : 1); q.BindValue(u":compilation_off"_s, on ? 0 : 1);
q.BindValue(QStringLiteral(":album"), album); q.BindValue(u":album"_s, album);
if (!artist.isEmpty()) q.BindValue(QStringLiteral(":artist"), artist); if (!artist.isEmpty()) q.BindValue(u":artist"_s, artist);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
@ -1793,8 +1794,8 @@ void CollectionBackend::ForceCompilation(const QString &album, const QStringList
CollectionQuery query(db, songs_table_); CollectionQuery query(db, songs_table_);
query.SetColumnSpec(Song::kRowIdColumnSpec); query.SetColumnSpec(Song::kRowIdColumnSpec);
query.AddWhere(QStringLiteral("album"), album); query.AddWhere(u"album"_s, album);
if (!artist.isEmpty()) query.AddWhere(QStringLiteral("artist"), artist); if (!artist.isEmpty()) query.AddWhere(u"artist"_s, artist);
if (!query.Exec()) { if (!query.Exec()) {
ReportErrors(query); ReportErrors(query);
@ -1823,8 +1824,8 @@ void CollectionBackend::IncrementPlayCount(const int id) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET playcount = playcount + 1, lastplayed = :now WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET playcount = playcount + 1, lastplayed = :now WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":now"), QDateTime::currentSecsSinceEpoch()); q.BindValue(u":now"_s, QDateTime::currentSecsSinceEpoch());
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1846,7 +1847,7 @@ void CollectionBackend::IncrementSkipCount(const int id, const float progress) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET skipcount = skipcount + 1 WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET skipcount = skipcount + 1 WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1892,7 +1893,7 @@ bool CollectionBackend::ResetPlayStatistics(const QStringList &id_str_list) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET playcount = 0, skipcount = 0, lastplayed = -1 WHERE ROWID IN (:ids)").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET playcount = 0, skipcount = 0, lastplayed = -1 WHERE ROWID IN (:ids)").arg(songs_table_));
q.BindValue(QStringLiteral(":ids"), id_str_list.join(u',')); q.BindValue(u":ids"_s, id_str_list.join(u','));
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return false; return false;
@ -1917,7 +1918,7 @@ void CollectionBackend::DeleteAll() {
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM ") + songs_table_); q.prepare(u"DELETE FROM "_s + songs_table_);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -1978,9 +1979,9 @@ SongList CollectionBackend::GetSongsBy(const QString &artist, const QString &alb
else { else {
q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND album = :album COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kRowIdColumnSpec, songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND album = :album COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kRowIdColumnSpec, songs_table_));
} }
q.BindValue(QStringLiteral(":artist"), artist); q.BindValue(u":artist"_s, artist);
if (!album.isEmpty()) q.BindValue(QStringLiteral(":album"), album); if (!album.isEmpty()) q.BindValue(u":album"_s, album);
q.BindValue(QStringLiteral(":title"), title); q.BindValue(u":title"_s, title);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return SongList(); return SongList();
@ -2012,8 +2013,8 @@ void CollectionBackend::UpdateLastPlayed(const QString &artist, const QString &a
} }
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET lastplayed = :lastplayed WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET lastplayed = :lastplayed WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":lastplayed"), lastplayed); q.BindValue(u":lastplayed"_s, lastplayed);
q.BindValue(QStringLiteral(":id"), song.id()); q.BindValue(u":id"_s, song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
continue; continue;
@ -2038,8 +2039,8 @@ void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &ti
for (const Song &song : songs) { for (const Song &song : songs) {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET playcount = :playcount WHERE ROWID = :id").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET playcount = :playcount WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":playcount"), playcount); q.BindValue(u":playcount"_s, playcount);
q.BindValue(QStringLiteral(":id"), song.id()); q.BindValue(u":id"_s, song.id());
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -2073,7 +2074,7 @@ void CollectionBackend::UpdateSongsRating(const QList<int> &id_list, const float
QString ids = id_str_list.join(u','); QString ids = id_str_list.join(u',');
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET rating = :rating WHERE ROWID IN (%2)").arg(songs_table_, ids)); q.prepare(QStringLiteral("UPDATE %1 SET rating = :rating WHERE ROWID IN (%2)").arg(songs_table_, ids));
q.BindValue(QStringLiteral(":rating"), rating); q.BindValue(u":rating"_s, rating);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -2101,8 +2102,8 @@ void CollectionBackend::UpdateLastSeen(const int directory_id, const int expire_
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET lastseen = :lastseen WHERE directory_id = :directory_id AND unavailable = 0").arg(songs_table_)); q.prepare(QStringLiteral("UPDATE %1 SET lastseen = :lastseen WHERE directory_id = :directory_id AND unavailable = 0").arg(songs_table_));
q.BindValue(QStringLiteral(":lastseen"), QDateTime::currentSecsSinceEpoch()); q.BindValue(u":lastseen"_s, QDateTime::currentSecsSinceEpoch());
q.BindValue(QStringLiteral(":directory_id"), directory_id); q.BindValue(u":directory_id"_s, directory_id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -2121,8 +2122,8 @@ void CollectionBackend::ExpireSongs(const int directory_id, const int expire_una
QSqlDatabase db(db_->Connect()); QSqlDatabase db(db_->Connect());
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT %1 FROM %2 LEFT JOIN playlist_items ON %2.ROWID = playlist_items.collection_id WHERE %2.directory_id = :directory_id AND %2.unavailable = 1 AND %2.lastseen > 0 AND %2.lastseen < :time AND playlist_items.collection_id IS NULL").arg(Song::JoinSpec(songs_table_), songs_table_)); q.prepare(QStringLiteral("SELECT %1 FROM %2 LEFT JOIN playlist_items ON %2.ROWID = playlist_items.collection_id WHERE %2.directory_id = :directory_id AND %2.unavailable = 1 AND %2.lastseen > 0 AND %2.lastseen < :time AND playlist_items.collection_id IS NULL").arg(Song::JoinSpec(songs_table_), songs_table_));
q.BindValue(QStringLiteral(":directory_id"), directory_id); q.BindValue(u":directory_id"_s, directory_id);
q.BindValue(QStringLiteral(":time"), QDateTime::currentSecsSinceEpoch() - (expire_unavailable_songs_days * 86400LL)); q.BindValue(u":time"_s, QDateTime::currentSecsSinceEpoch() - (expire_unavailable_songs_days * 86400LL));
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -2137,5 +2138,3 @@ void CollectionBackend::ExpireSongs(const int directory_id, const int expire_una
if (!songs.isEmpty()) DeleteSongs(songs); if (!songs.isEmpty()) DeleteSongs(songs);
} }

View File

@ -39,10 +39,11 @@
#include "collectiondirectorymodel.h" #include "collectiondirectorymodel.h"
using std::make_shared; using std::make_shared;
using namespace Qt::Literals::StringLiterals;
CollectionDirectoryModel::CollectionDirectoryModel(SharedPtr<CollectionBackend> backend, QObject *parent) CollectionDirectoryModel::CollectionDirectoryModel(SharedPtr<CollectionBackend> backend, QObject *parent)
: QStandardItemModel(parent), : QStandardItemModel(parent),
dir_icon_(IconLoader::Load(QStringLiteral("document-open-folder"))), dir_icon_(IconLoader::Load(u"document-open-folder"_s)),
backend_(backend) { backend_(backend) {
QObject::connect(&*backend_, &CollectionBackend::DirectoryAdded, this, &CollectionDirectoryModel::AddDirectory); QObject::connect(&*backend_, &CollectionBackend::DirectoryAdded, this, &CollectionDirectoryModel::AddDirectory);

View File

@ -22,7 +22,6 @@
#include "config.h" #include "config.h"
#include <utility> #include <utility>
#include <memory>
#include <QApplication> #include <QApplication>
#include <QWidget> #include <QWidget>
@ -45,13 +44,11 @@
#include <QKeyEvent> #include <QKeyEvent>
#include "core/iconloader.h" #include "core/iconloader.h"
#include "core/song.h"
#include "core/logging.h" #include "core/logging.h"
#include "core/settings.h" #include "core/settings.h"
#include "collectionfilteroptions.h" #include "collectionfilteroptions.h"
#include "collectionmodel.h" #include "collectionmodel.h"
#include "collectionfilter.h" #include "collectionfilter.h"
#include "collectionquery.h"
#include "filterparser/filterparser.h" #include "filterparser/filterparser.h"
#include "savedgroupingmanager.h" #include "savedgroupingmanager.h"
#include "collectionfilterwidget.h" #include "collectionfilterwidget.h"
@ -93,7 +90,7 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent)
timer_filter_delay_->setSingleShot(true); timer_filter_delay_->setSingleShot(true);
// Icons // Icons
ui_->options->setIcon(IconLoader::Load(QStringLiteral("configure"))); ui_->options->setIcon(IconLoader::Load(u"configure"_s));
// Filter by age // Filter by age
QActionGroup *filter_age_group = new QActionGroup(this); QActionGroup *filter_age_group = new QActionGroup(this);
@ -218,7 +215,7 @@ void CollectionFilterWidget::ReloadSettings() {
QString CollectionFilterWidget::group_by_version() const { QString CollectionFilterWidget::group_by_version() const {
if (settings_prefix_.isEmpty()) { if (settings_prefix_.isEmpty()) {
return QStringLiteral("group_by_version"); return u"group_by_version"_s;
} }
return QStringLiteral("%1_group_by_version").arg(settings_prefix_); return QStringLiteral("%1_group_by_version").arg(settings_prefix_);
@ -228,7 +225,7 @@ QString CollectionFilterWidget::group_by_version() const {
QString CollectionFilterWidget::group_by_key() const { QString CollectionFilterWidget::group_by_key() const {
if (settings_prefix_.isEmpty()) { if (settings_prefix_.isEmpty()) {
return QStringLiteral("group_by"); return u"group_by"_s;
} }
return QStringLiteral("%1_group_by").arg(settings_prefix_); return QStringLiteral("%1_group_by").arg(settings_prefix_);
@ -240,7 +237,7 @@ QString CollectionFilterWidget::group_by_key(const int number) const { return gr
QString CollectionFilterWidget::separate_albums_by_grouping_key() const { QString CollectionFilterWidget::separate_albums_by_grouping_key() const {
if (settings_prefix_.isEmpty()) { if (settings_prefix_.isEmpty()) {
return QStringLiteral("separate_albums_by_grouping"); return u"separate_albums_by_grouping"_s;
} }
return QStringLiteral("%1_separate_albums_by_grouping").arg(settings_prefix_); return QStringLiteral("%1_separate_albums_by_grouping").arg(settings_prefix_);
@ -357,7 +354,7 @@ void CollectionFilterWidget::SaveGroupBy() {
QByteArray buffer; QByteArray buffer;
QDataStream datastream(&buffer, QIODevice::WriteOnly); QDataStream datastream(&buffer, QIODevice::WriteOnly);
datastream << model_->GetGroupBy(); datastream << model_->GetGroupBy();
s.setValue("version", QStringLiteral("1")); s.setValue("version", u"1"_s);
s.setValue(name, buffer); s.setValue(name, buffer);
s.endGroup(); s.endGroup();

View File

@ -24,8 +24,6 @@
#include "config.h" #include "config.h"
#include <memory>
#include <QWidget> #include <QWidget>
#include <QObject> #include <QObject>
#include <QHash> #include <QHash>

View File

@ -95,7 +95,7 @@ CollectionModel::CollectionModel(SharedPtr<CollectionBackend> backend, Applicati
filter_(new CollectionFilter(this)), filter_(new CollectionFilter(this)),
timer_reload_(new QTimer(this)), timer_reload_(new QTimer(this)),
timer_update_(new QTimer(this)), timer_update_(new QTimer(this)),
icon_artist_(IconLoader::Load(QStringLiteral("folder-sound"))), icon_artist_(IconLoader::Load(u"folder-sound"_s)),
use_disk_cache_(false), use_disk_cache_(false),
total_song_count_(0), total_song_count_(0),
total_artist_count_(0), total_artist_count_(0),
@ -112,7 +112,7 @@ CollectionModel::CollectionModel(SharedPtr<CollectionBackend> backend, Applicati
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CollectionModel::AlbumCoverLoaded); QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CollectionModel::AlbumCoverLoaded);
} }
QIcon nocover = IconLoader::Load(QStringLiteral("cdcase")); QIcon nocover = IconLoader::Load(u"cdcase"_s);
if (!nocover.isNull()) { if (!nocover.isNull()) {
QList<QSize> nocover_sizes = nocover.availableSizes(); QList<QSize> nocover_sizes = nocover.availableSizes();
pixmap_no_cover_ = nocover.pixmap(nocover_sizes.last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap_no_cover_ = nocover.pixmap(nocover_sizes.last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
@ -409,7 +409,7 @@ Qt::ItemFlags CollectionModel::flags(const QModelIndex &idx) const {
} }
QStringList CollectionModel::mimeTypes() const { QStringList CollectionModel::mimeTypes() const {
return QStringList() << QStringLiteral("text/uri-list"); return QStringList() << u"text/uri-list"_s;
} }
QMimeData *CollectionModel::mimeData(const QModelIndexList &indexes) const { QMimeData *CollectionModel::mimeData(const QModelIndexList &indexes) const {
@ -823,7 +823,7 @@ SongList CollectionModel::LoadSongsFromSql(const CollectionFilterOptions &filter
QMutexLocker l(backend_->db()->Mutex()); QMutexLocker l(backend_->db()->Mutex());
QSqlDatabase db(backend_->db()->Connect()); QSqlDatabase db(backend_->db()->Connect());
CollectionQuery q(db, backend_->songs_table(), filter_options); CollectionQuery q(db, backend_->songs_table(), filter_options);
q.SetColumnSpec(QStringLiteral("%songs_table.ROWID, ") + Song::kColumnSpec); q.SetColumnSpec(u"%songs_table.ROWID, "_s + Song::kColumnSpec);
if (q.Exec()) { if (q.Exec()) {
while (q.Next()) { while (q.Next()) {
Song song; Song song;
@ -1155,7 +1155,7 @@ QString CollectionModel::SortText(QString text) {
else { else {
text = text.toLower(); text = text.toLower();
} }
static const QRegularExpression regex_not_words(QStringLiteral("[^\\w ]"), QRegularExpression::UseUnicodePropertiesOption); static const QRegularExpression regex_not_words(u"[^\\w ]"_s, QRegularExpression::UseUnicodePropertiesOption);
text = text.remove(regex_not_words); text = text.remove(regex_not_words);
return text; return text;
@ -1338,7 +1338,7 @@ QString CollectionModel::DividerKey(const GroupBy group_by, const Song &song, co
case GroupBy::Format: case GroupBy::Format:
case GroupBy::FileType: { case GroupBy::FileType: {
QChar c = sort_text[0]; QChar c = sort_text[0];
if (c.isDigit()) return QStringLiteral("0"); if (c.isDigit()) return u"0"_s;
if (c == u' ') return QString(); if (c == u' ') return QString();
if (c.decompositionTag() != QChar::NoDecomposition) { if (c.decompositionTag() != QChar::NoDecomposition) {
QString decomposition = c.decomposition(); QString decomposition = c.decomposition();
@ -1388,7 +1388,7 @@ QString CollectionModel::DividerDisplayText(const GroupBy group_by, const QStrin
case GroupBy::Genre: case GroupBy::Genre:
case GroupBy::FileType: case GroupBy::FileType:
case GroupBy::Format: case GroupBy::Format:
if (key == "0"_L1) return QStringLiteral("0-9"); if (key == "0"_L1) return u"0-9"_s;
return key.toUpper(); return key.toUpper();
case GroupBy::YearAlbum: case GroupBy::YearAlbum:

View File

@ -49,14 +49,14 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
if (filter_options.max_age() != -1) { if (filter_options.max_age() != -1) {
qint64 cutoff = QDateTime::currentSecsSinceEpoch() - filter_options.max_age(); qint64 cutoff = QDateTime::currentSecsSinceEpoch() - filter_options.max_age();
where_clauses_ << QStringLiteral("ctime > ?"); where_clauses_ << u"ctime > ?"_s;
bound_values_ << cutoff; bound_values_ << cutoff;
} }
duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Duplicates; duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Duplicates;
if (filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Untagged) { if (filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Untagged) {
where_clauses_ << QStringLiteral("(artist = '' OR album = '' OR title ='')"); where_clauses_ << u"(artist = '' OR album = '' OR title ='')"_s;
} }
} }
@ -69,7 +69,7 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con
QStringList final_values; QStringList final_values;
final_values.reserve(values.count()); final_values.reserve(values.count());
for (const QString &single_value : values) { for (const QString &single_value : values) {
final_values.append(QStringLiteral("?")); final_values.append(u"?"_s);
bound_values_ << single_value; bound_values_ << single_value;
} }
@ -113,7 +113,7 @@ bool CollectionQuery::Exec() {
QStringList where_clauses(where_clauses_); QStringList where_clauses(where_clauses_);
if (!include_unavailable_) { if (!include_unavailable_) {
where_clauses << QStringLiteral("unavailable = 0"); where_clauses << u"unavailable = 0"_s;
} }
if (!where_clauses.isEmpty()) sql += " WHERE "_L1 + where_clauses.join(" AND "_L1); if (!where_clauses.isEmpty()) sql += " WHERE "_L1 + where_clauses.join(" AND "_L1);

View File

@ -76,6 +76,7 @@
#include "settings/collectionsettingspage.h" #include "settings/collectionsettingspage.h"
using std::make_unique; using std::make_unique;
using namespace Qt::Literals::StringLiterals;
CollectionView::CollectionView(QWidget *parent) CollectionView::CollectionView(QWidget *parent)
: AutoExpandingTreeView(parent), : AutoExpandingTreeView(parent),
@ -84,7 +85,7 @@ CollectionView::CollectionView(QWidget *parent)
total_song_count_(-1), total_song_count_(-1),
total_artist_count_(-1), total_artist_count_(-1),
total_album_count_(-1), total_album_count_(-1),
nomusic_(QStringLiteral(":/pictures/nomusic.png")), nomusic_(u":/pictures/nomusic.png"_s),
context_menu_(nullptr), context_menu_(nullptr),
action_load_(nullptr), action_load_(nullptr),
action_add_to_playlist_(nullptr), action_add_to_playlist_(nullptr),
@ -116,7 +117,7 @@ CollectionView::CollectionView(QWidget *parent)
setDragDropMode(QAbstractItemView::DragOnly); setDragDropMode(QAbstractItemView::DragOnly);
setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionMode(QAbstractItemView::ExtendedSelection);
setStyleSheet(QStringLiteral("QTreeView::item{padding-top:1px;}")); setStyleSheet(u"QTreeView::item{padding-top:1px;}"_s);
} }
@ -379,29 +380,29 @@ void CollectionView::contextMenuEvent(QContextMenuEvent *e) {
if (!context_menu_) { if (!context_menu_) {
context_menu_ = new QMenu(this); context_menu_ = new QMenu(this);
action_add_to_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &CollectionView::AddToPlaylist); action_add_to_playlist_ = context_menu_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Append to current playlist"), this, &CollectionView::AddToPlaylist);
action_load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &CollectionView::Load); action_load_ = context_menu_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Replace current playlist"), this, &CollectionView::Load);
action_open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &CollectionView::OpenInNewPlaylist); action_open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(u"document-new"_s), tr("Open in new playlist"), this, &CollectionView::OpenInNewPlaylist);
context_menu_->addSeparator(); context_menu_->addSeparator();
action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &CollectionView::AddToPlaylistEnqueue); action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(u"go-next"_s), tr("Queue track"), this, &CollectionView::AddToPlaylistEnqueue);
action_add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext); action_add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(u"go-next"_s), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext);
context_menu_->addSeparator(); context_menu_->addSeparator();
action_search_for_this_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-find")), tr("Search for this"), this, &CollectionView::SearchForThis); action_search_for_this_ = context_menu_->addAction(IconLoader::Load(u"edit-find"_s), tr("Search for this"), this, &CollectionView::SearchForThis);
context_menu_->addSeparator(); context_menu_->addSeparator();
action_organize_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Organize files..."), this, &CollectionView::Organize); action_organize_ = context_menu_->addAction(IconLoader::Load(u"edit-copy"_s), tr("Organize files..."), this, &CollectionView::Organize);
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
action_copy_to_device_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("device")), tr("Copy to device..."), this, &CollectionView::CopyToDevice); action_copy_to_device_ = context_menu_->addAction(IconLoader::Load(u"device"_s), tr("Copy to device..."), this, &CollectionView::CopyToDevice);
#endif #endif
action_delete_files_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from disk..."), this, &CollectionView::Delete); action_delete_files_ = context_menu_->addAction(IconLoader::Load(u"edit-delete"_s), tr("Delete from disk..."), this, &CollectionView::Delete);
context_menu_->addSeparator(); context_menu_->addSeparator();
action_edit_track_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-rename")), tr("Edit track information..."), this, &CollectionView::EditTracks); action_edit_track_ = context_menu_->addAction(IconLoader::Load(u"edit-rename"_s), tr("Edit track information..."), this, &CollectionView::EditTracks);
action_edit_tracks_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-rename")), tr("Edit tracks information..."), this, &CollectionView::EditTracks); action_edit_tracks_ = context_menu_->addAction(IconLoader::Load(u"edit-rename"_s), tr("Edit tracks information..."), this, &CollectionView::EditTracks);
action_show_in_browser_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), tr("Show in file browser..."), this, &CollectionView::ShowInBrowser); action_show_in_browser_ = context_menu_->addAction(IconLoader::Load(u"document-open-folder"_s), tr("Show in file browser..."), this, &CollectionView::ShowInBrowser);
context_menu_->addSeparator(); context_menu_->addSeparator();

View File

@ -73,7 +73,7 @@
using namespace std::chrono_literals; using namespace std::chrono_literals;
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
QStringList CollectionWatcher::sValidImages = QStringList() << QStringLiteral("jpg") << QStringLiteral("png") << QStringLiteral("gif") << QStringLiteral("jpeg"); QStringList CollectionWatcher::sValidImages = QStringList() << u"jpg"_s << u"png"_s << u"gif"_s << u"jpeg"_s;
CollectionWatcher::CollectionWatcher(const Song::Source source, QObject *parent) CollectionWatcher::CollectionWatcher(const Song::Source source, QObject *parent)
: QObject(parent), : QObject(parent),
@ -205,7 +205,7 @@ void CollectionWatcher::ReloadSettings() {
scan_on_startup_ = true; scan_on_startup_ = true;
monitor_ = true; monitor_ = true;
} }
const QStringList filters = s.value("cover_art_patterns", QStringList() << QStringLiteral("front") << QStringLiteral("cover")).toStringList(); const QStringList filters = s.value("cover_art_patterns", QStringList() << u"front"_s << u"cover"_s).toStringList();
if (source_ == Song::Source::Collection) { if (source_ == Song::Source::Collection) {
song_tracking_ = s.value("song_tracking", false).toBool(); song_tracking_ = s.value("song_tracking", false).toBool();
song_ebur128_loudness_analysis_ = s.value("song_ebur128_loudness_analysis", false).toBool(); song_ebur128_loudness_analysis_ = s.value("song_ebur128_loudness_analysis", false).toBool();
@ -951,43 +951,43 @@ void CollectionWatcher::AddChangedSong(const QString &file, const Song &matching
} }
else { else {
if (matching_song.url() != new_song.url()) { if (matching_song.url() != new_song.url()) {
changes << QStringLiteral("file path"); changes << u"file path"_s;
notify_new = true; notify_new = true;
} }
if (matching_song.fingerprint() != new_song.fingerprint()) { if (matching_song.fingerprint() != new_song.fingerprint()) {
changes << QStringLiteral("fingerprint"); changes << u"fingerprint"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsMetadataEqual(new_song)) { if (!matching_song.IsMetadataEqual(new_song)) {
changes << QStringLiteral("metadata"); changes << u"metadata"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsPlayStatisticsEqual(new_song)) { if (!matching_song.IsPlayStatisticsEqual(new_song)) {
changes << QStringLiteral("play statistics"); changes << u"play statistics"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsRatingEqual(new_song)) { if (!matching_song.IsRatingEqual(new_song)) {
changes << QStringLiteral("rating"); changes << u"rating"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsArtEqual(new_song)) { if (!matching_song.IsArtEqual(new_song)) {
changes << QStringLiteral("album art"); changes << u"album art"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsAcoustIdEqual(new_song)) { if (!matching_song.IsAcoustIdEqual(new_song)) {
changes << QStringLiteral("acoustid"); changes << u"acoustid"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsMusicBrainzEqual(new_song)) { if (!matching_song.IsMusicBrainzEqual(new_song)) {
changes << QStringLiteral("musicbrainz"); changes << u"musicbrainz"_s;
notify_new = true; notify_new = true;
} }
if (!matching_song.IsEBUR128Equal(new_song)) { if (!matching_song.IsEBUR128Equal(new_song)) {
changes << QStringLiteral("ebur128 loudness characteristics"); changes << u"ebur128 loudness characteristics"_s;
notify_new = true; notify_new = true;
} }
if (matching_song.mtime() != new_song.mtime()) { if (matching_song.mtime() != new_song.mtime()) {
changes << QStringLiteral("mtime"); changes << u"mtime"_s;
} }
if (changes.isEmpty()) { if (changes.isEmpty()) {

View File

@ -61,7 +61,7 @@ SavedGroupingManager::SavedGroupingManager(const QString &saved_groupings_settin
model_->setHorizontalHeaderItem(2, new QStandardItem(tr("Second Level"))); model_->setHorizontalHeaderItem(2, new QStandardItem(tr("Second Level")));
model_->setHorizontalHeaderItem(3, new QStandardItem(tr("Third Level"))); model_->setHorizontalHeaderItem(3, new QStandardItem(tr("Third Level")));
ui_->list->setModel(model_); ui_->list->setModel(model_);
ui_->remove->setIcon(IconLoader::Load(QStringLiteral("edit-delete"))); ui_->remove->setIcon(IconLoader::Load(u"edit-delete"_s));
ui_->remove->setEnabled(false); ui_->remove->setEnabled(false);
ui_->remove->setShortcut(QKeySequence::Delete); ui_->remove->setShortcut(QKeySequence::Delete);

View File

@ -48,6 +48,8 @@
using std::make_unique; using std::make_unique;
using std::make_shared; using std::make_shared;
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr int kFadeTimeLineMs = 1000; constexpr int kFadeTimeLineMs = 1000;
} }
@ -59,12 +61,12 @@ ContextAlbum::ContextAlbum(QWidget *parent)
album_cover_choice_controller_(nullptr), album_cover_choice_controller_(nullptr),
downloading_covers_(false), downloading_covers_(false),
timeline_fade_(new QTimeLine(kFadeTimeLineMs, this)), timeline_fade_(new QTimeLine(kFadeTimeLineMs, this)),
image_strawberry_(QStringLiteral(":/pictures/strawberry.png")), image_strawberry_(u":/pictures/strawberry.png"_s),
image_original_(image_strawberry_), image_original_(image_strawberry_),
pixmap_current_opacity_(1.0), pixmap_current_opacity_(1.0),
desired_height_(width()) { desired_height_(width()) {
setObjectName(QStringLiteral("context-widget-album")); setObjectName(u"context-widget-album"_s);
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
@ -274,7 +276,7 @@ void ContextAlbum::SearchCoverInProgress() {
downloading_covers_ = true; downloading_covers_ = true;
// Show a spinner animation // Show a spinner animation
spinner_animation_ = make_unique<QMovie>(QStringLiteral(":/pictures/spinner.gif"), QByteArray(), this); spinner_animation_ = make_unique<QMovie>(u":/pictures/spinner.gif"_s, QByteArray(), this);
QObject::connect(&*spinner_animation_, &QMovie::updated, this, &ContextAlbum::Update); QObject::connect(&*spinner_animation_, &QMovie::updated, this, &ContextAlbum::Update);
spinner_animation_->start(); spinner_animation_->start();
update(); update();

View File

@ -57,8 +57,6 @@
#include "utilities/strutils.h" #include "utilities/strutils.h"
#include "utilities/timeutils.h" #include "utilities/timeutils.h"
#include "widgets/resizabletextedit.h" #include "widgets/resizabletextedit.h"
#include "collection/collectionbackend.h"
#include "collection/collectionquery.h"
#include "collection/collectionview.h" #include "collection/collectionview.h"
#include "covermanager/albumcoverchoicecontroller.h" #include "covermanager/albumcoverchoicecontroller.h"
#include "lyrics/lyricsfetcher.h" #include "lyrics/lyricsfetcher.h"
@ -119,25 +117,25 @@ ContextView::ContextView(QWidget *parent)
setLayout(layout_container_); setLayout(layout_container_);
layout_container_->setObjectName(QStringLiteral("context-layout-container")); layout_container_->setObjectName(u"context-layout-container"_s);
layout_container_->setContentsMargins(0, 0, 0, 0); layout_container_->setContentsMargins(0, 0, 0, 0);
layout_container_->addWidget(scrollarea_); layout_container_->addWidget(scrollarea_);
scrollarea_->setObjectName(QStringLiteral("context-scrollarea")); scrollarea_->setObjectName(u"context-scrollarea"_s);
scrollarea_->setWidgetResizable(true); scrollarea_->setWidgetResizable(true);
scrollarea_->setWidget(widget_scrollarea_); scrollarea_->setWidget(widget_scrollarea_);
scrollarea_->setContentsMargins(0, 0, 0, 0); scrollarea_->setContentsMargins(0, 0, 0, 0);
scrollarea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollarea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollarea_->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); scrollarea_->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
widget_scrollarea_->setObjectName(QStringLiteral("context-widget-scrollarea")); widget_scrollarea_->setObjectName(u"context-widget-scrollarea"_s);
widget_scrollarea_->setLayout(layout_scrollarea_); widget_scrollarea_->setLayout(layout_scrollarea_);
widget_scrollarea_->setContentsMargins(0, 0, 0, 0); widget_scrollarea_->setContentsMargins(0, 0, 0, 0);
textedit_top_->setReadOnly(true); textedit_top_->setReadOnly(true);
textedit_top_->setFrameShape(QFrame::NoFrame); textedit_top_->setFrameShape(QFrame::NoFrame);
layout_scrollarea_->setObjectName(QStringLiteral("context-layout-scrollarea")); layout_scrollarea_->setObjectName(u"context-layout-scrollarea"_s);
layout_scrollarea_->setContentsMargins(15, 15, 15, 15); layout_scrollarea_->setContentsMargins(15, 15, 15, 15);
layout_scrollarea_->addWidget(textedit_top_); layout_scrollarea_->addWidget(textedit_top_);
layout_scrollarea_->addWidget(widget_album_); layout_scrollarea_->addWidget(widget_album_);
@ -306,8 +304,8 @@ void ContextView::ReloadSettings() {
Settings s; Settings s;
s.beginGroup(ContextSettingsPage::kSettingsGroup); s.beginGroup(ContextSettingsPage::kSettingsGroup);
title_fmt_ = s.value(ContextSettingsPage::kSettingsTitleFmt, QStringLiteral("%title% - %artist%")).toString(); title_fmt_ = s.value(ContextSettingsPage::kSettingsTitleFmt, u"%title% - %artist%"_s).toString();
summary_fmt_ = s.value(ContextSettingsPage::kSettingsSummaryFmt, QStringLiteral("%album%")).toString(); summary_fmt_ = s.value(ContextSettingsPage::kSettingsSummaryFmt, u"%album%"_s).toString();
action_show_album_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::ALBUM)], true).toBool()); action_show_album_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::ALBUM)], true).toBool());
action_show_data_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA)], false).toBool()); action_show_data_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::TECHNICAL_DATA)], false).toBool());
action_show_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS)], true).toBool()); action_show_lyrics_->setChecked(s.value(ContextSettingsPage::kSettingsGroupEnable[static_cast<int>(ContextSettingsPage::ContextSettingsOrder::SONG_LYRICS)], true).toBool());
@ -441,7 +439,7 @@ void ContextView::UpdateFonts() {
void ContextView::SetSong() { void ContextView::SetSong() {
textedit_top_->setFont(font_headline_); textedit_top_->setFont(font_headline_);
textedit_top_->SetText(QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song_playing_, QStringLiteral("<br />"), true), Utilities::ReplaceMessage(summary_fmt_, song_playing_, QStringLiteral("<br />"), true))); textedit_top_->SetText(QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song_playing_, u"<br />"_s, true), Utilities::ReplaceMessage(summary_fmt_, song_playing_, u"<br />"_s, true)));
label_stop_summary_->clear(); label_stop_summary_->clear();
@ -477,7 +475,7 @@ void ContextView::SetSong() {
else { else {
label_samplerate_title_->show(); label_samplerate_title_->show();
label_samplerate_->show(); label_samplerate_->show();
SetLabelText(label_samplerate_, song_playing_.samplerate(), QStringLiteral("Hz")); SetLabelText(label_samplerate_, song_playing_.samplerate(), u"Hz"_s);
} }
if (song_playing_.bitdepth() <= 0) { if (song_playing_.bitdepth() <= 0) {
label_bitdepth_title_->hide(); label_bitdepth_title_->hide();
@ -487,7 +485,7 @@ void ContextView::SetSong() {
else { else {
label_bitdepth_title_->show(); label_bitdepth_title_->show();
label_bitdepth_->show(); label_bitdepth_->show();
SetLabelText(label_bitdepth_, song_playing_.bitdepth(), QStringLiteral("Bit")); SetLabelText(label_bitdepth_, song_playing_.bitdepth(), u"Bit"_s);
} }
if (song_playing_.bitrate() <= 0) { if (song_playing_.bitrate() <= 0) {
label_bitrate_title_->hide(); label_bitrate_title_->hide();
@ -549,7 +547,7 @@ void ContextView::SetSong() {
void ContextView::UpdateSong(const Song &song) { void ContextView::UpdateSong(const Song &song) {
const QString top_text = QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song, QStringLiteral("<br />"), true), Utilities::ReplaceMessage(summary_fmt_, song, QStringLiteral("<br />"), true)); const QString top_text = QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song, u"<br />"_s, true), Utilities::ReplaceMessage(summary_fmt_, song, u"<br />"_s, true));
if (top_text != textedit_top_->Text()) { if (top_text != textedit_top_->Text()) {
textedit_top_->SetText(top_text); textedit_top_->SetText(top_text);
} }
@ -577,7 +575,7 @@ void ContextView::UpdateSong(const Song &song) {
else { else {
label_samplerate_title_->show(); label_samplerate_title_->show();
label_samplerate_->show(); label_samplerate_->show();
SetLabelText(label_samplerate_, song.samplerate(), QStringLiteral("Hz")); SetLabelText(label_samplerate_, song.samplerate(), u"Hz"_s);
} }
} }
if (song.bitdepth() != song_playing_.bitdepth()) { if (song.bitdepth() != song_playing_.bitdepth()) {
@ -589,7 +587,7 @@ void ContextView::UpdateSong(const Song &song) {
else { else {
label_bitdepth_title_->show(); label_bitdepth_title_->show();
label_bitdepth_->show(); label_bitdepth_->show();
SetLabelText(label_bitdepth_, song.bitdepth(), QStringLiteral("Bit")); SetLabelText(label_bitdepth_, song.bitdepth(), u"Bit"_s);
} }
} }
if (song.bitrate() != song_playing_.bitrate()) { if (song.bitrate() != song_playing_.bitrate()) {

View File

@ -46,6 +46,8 @@
#include <getopt.h> #include <getopt.h>
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr char kHelpText[] = constexpr char kHelpText[] =
@ -113,11 +115,11 @@ CommandlineOptions::CommandlineOptions(int argc, char **argv)
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS
// Remove -psn_xxx option that Mac passes when opened from Finder. // Remove -psn_xxx option that Mac passes when opened from Finder.
RemoveArg(QStringLiteral("-psn"), 1); RemoveArg(u"-psn"_s, 1);
#endif #endif
// Remove the -session option that KDE passes // Remove the -session option that KDE passes
RemoveArg(QStringLiteral("-session"), 2); RemoveArg(u"-session"_s, 2);
} }
@ -306,10 +308,10 @@ bool CommandlineOptions::Parse() {
volume_modifier_ = -4; volume_modifier_ = -4;
break; break;
case LongOptions::Quiet: case LongOptions::Quiet:
log_levels_ = QStringLiteral("1"); log_levels_ = u"1"_s;
break; break;
case LongOptions::Verbose: case LongOptions::Verbose:
log_levels_ = QStringLiteral("3"); log_levels_ = u"3"_s;
break; break;
case LongOptions::LogLevels: case LongOptions::LogLevels:
log_levels_ = OptArgToString(optarg); log_levels_ = OptArgToString(optarg);

View File

@ -129,12 +129,12 @@ QSqlDatabase Database::Connect() {
db = QSqlDatabase::database(connection_id); db = QSqlDatabase::database(connection_id);
} }
else { else {
db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connection_id); db = QSqlDatabase::addDatabase(u"QSQLITE"_s, connection_id);
} }
if (db.isOpen()) { if (db.isOpen()) {
return db; return db;
} }
db.setConnectOptions(QStringLiteral("QSQLITE_BUSY_TIMEOUT=30000")); db.setConnectOptions(u"QSQLITE_BUSY_TIMEOUT=30000"_s);
//qLog(Debug) << "Opened database with connection id" << connection_id; //qLog(Debug) << "Opened database with connection id" << connection_id;
if (injected_database_name_.isNull()) { if (injected_database_name_.isNull()) {
@ -145,7 +145,7 @@ QSqlDatabase Database::Connect() {
} }
if (!db.open()) { if (!db.open()) {
app_->AddError(QStringLiteral("Database: ") + db.lastError().text()); app_->AddError(u"Database: "_s + db.lastError().text());
return db; return db;
} }
@ -168,9 +168,9 @@ QSqlDatabase Database::Connect() {
// Attach the db // Attach the db
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias")); q.prepare(u"ATTACH DATABASE :filename AS :alias"_s);
q.BindValue(QStringLiteral(":filename"), filename); q.BindValue(u":filename"_s, filename);
q.BindValue(QStringLiteral(":alias"), key); q.BindValue(u":alias"_s, key);
if (!q.Exec()) { if (!q.Exec()) {
qFatal("Couldn't attach external database '%s'", key.toLatin1().constData()); qFatal("Couldn't attach external database '%s'", key.toLatin1().constData());
} }
@ -225,7 +225,7 @@ int Database::SchemaVersion(QSqlDatabase *db) {
int schema_version = 0; int schema_version = 0;
{ {
SqlQuery q(*db); SqlQuery q(*db);
q.prepare(QStringLiteral("SELECT version FROM schema_version")); q.prepare(u"SELECT version FROM schema_version"_s);
if (q.Exec() && q.next()) { if (q.Exec() && q.next()) {
schema_version = q.value(0).toInt(); schema_version = q.value(0).toInt();
} }
@ -266,8 +266,8 @@ void Database::RecreateAttachedDb(const QString &database_name) {
QSqlDatabase db(Connect()); QSqlDatabase db(Connect());
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DETACH DATABASE :alias")); q.prepare(u"DETACH DATABASE :alias"_s);
q.BindValue(QStringLiteral(":alias"), database_name); q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) { if (!q.Exec()) {
qLog(Warning) << "Failed to detach database" << database_name; qLog(Warning) << "Failed to detach database" << database_name;
return; return;
@ -297,9 +297,9 @@ void Database::AttachDatabaseOnDbConnection(const QString &database_name, const
// Attach the db // Attach the db
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias")); q.prepare(u"ATTACH DATABASE :filename AS :alias"_s);
q.BindValue(QStringLiteral(":filename"), database.filename_); q.BindValue(u":filename"_s, database.filename_);
q.BindValue(QStringLiteral(":alias"), database_name); q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) { if (!q.Exec()) {
qFatal("Couldn't attach external database '%s'", database_name.toLatin1().constData()); qFatal("Couldn't attach external database '%s'", database_name.toLatin1().constData());
} }
@ -313,8 +313,8 @@ void Database::DetachDatabase(const QString &database_name) {
QSqlDatabase db(Connect()); QSqlDatabase db(Connect());
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DETACH DATABASE :alias")); q.prepare(u"DETACH DATABASE :alias"_s);
q.BindValue(QStringLiteral(":alias"), database_name); q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) { if (!q.Exec()) {
qLog(Warning) << "Failed to detach database" << database_name; qLog(Warning) << "Failed to detach database" << database_name;
return; return;
@ -329,7 +329,7 @@ void Database::UpdateDatabaseSchema(int version, QSqlDatabase &db) {
QString filename; QString filename;
if (version == 0) { if (version == 0) {
filename = QStringLiteral(":/schema/schema.sql"); filename = u":/schema/schema.sql"_s;
} }
else { else {
filename = QStringLiteral(":/schema/schema-%1.sql").arg(version); filename = QStringLiteral(":/schema/schema-%1.sql").arg(version);
@ -360,8 +360,8 @@ void Database::UrlEncodeFilenameColumn(const QString &table, QSqlDatabase &db) {
const QUrl url = QUrl::fromLocalFile(filename); const QUrl url = QUrl::fromLocalFile(filename);
update.BindValue(QStringLiteral(":filename"), url.toEncoded()); update.BindValue(u":filename"_s, url.toEncoded());
update.BindValue(QStringLiteral(":id"), rowid); update.BindValue(u":id"_s, rowid);
if (!update.Exec()) { if (!update.Exec()) {
ReportErrors(update); ReportErrors(update);
} }
@ -389,7 +389,7 @@ void Database::ExecSchemaCommandsFromFile(QSqlDatabase &db, const QString &filen
void Database::ExecSchemaCommands(QSqlDatabase &db, const QString &schema, int schema_version, bool in_transaction) { void Database::ExecSchemaCommands(QSqlDatabase &db, const QString &schema, int schema_version, bool in_transaction) {
// Run each command // Run each command
static const QRegularExpression regex_split_commands(QStringLiteral("; *\n\n")); static const QRegularExpression regex_split_commands(u"; *\n\n"_s);
QStringList commands = schema.split(regex_split_commands); QStringList commands = schema.split(regex_split_commands);
// We don't want this list to reflect possible DB schema changes, so we initialize it before executing any statements. // We don't want this list to reflect possible DB schema changes, so we initialize it before executing any statements.
@ -471,7 +471,7 @@ QStringList Database::SongsTables(QSqlDatabase &db, const int schema_version) {
} }
} }
ret << QStringLiteral("playlist_items"); ret << u"playlist_items"_s;
return ret; return ret;
@ -497,7 +497,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) {
bool ok = false; bool ok = false;
// Ask for 10 error messages at most. // Ask for 10 error messages at most.
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("PRAGMA integrity_check(10)")); q.prepare(u"PRAGMA integrity_check(10)"_s);
if (q.Exec()) { if (q.Exec()) {
bool error_reported = false; bool error_reported = false;
while (q.next()) { while (q.next()) {
@ -510,7 +510,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) {
} }
else { else {
if (!error_reported) { app_->AddError(tr("Database corruption detected.")); } if (!error_reported) { app_->AddError(tr("Database corruption detected.")); }
app_->AddError(QStringLiteral("Database: ") + message); app_->AddError(u"Database: "_s + message);
error_reported = true; error_reported = true;
} }
} }

View File

@ -36,6 +36,8 @@
#include "settings/appearancesettingspage.h" #include "settings/appearancesettingspage.h"
#include "iconloader.h" #include "iconloader.h"
using namespace Qt::Literals::StringLiterals;
bool IconLoader::system_icons_ = false; bool IconLoader::system_icons_ = false;
bool IconLoader::custom_icons_ = false; bool IconLoader::custom_icons_ = false;
@ -49,7 +51,7 @@ void IconLoader::Init() {
#endif #endif
QDir dir; QDir dir;
if (dir.exists(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QStringLiteral("/icons"))) { if (dir.exists(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + u"/icons"_s)) {
custom_icons_ = true; custom_icons_ = true;
} }
@ -123,7 +125,7 @@ QIcon IconLoader::Load(const QString &name, const bool system_icon, const int fi
} }
if (custom_icons_) { if (custom_icons_) {
QString custom_icon_path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QStringLiteral("/icons/%1x%2/%3.png"); QString custom_icon_path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + u"/icons/%1x%2/%3.png"_s;
for (int s : std::as_const(sizes)) { for (int s : std::as_const(sizes)) {
QString filename(custom_icon_path.arg(s).arg(s).arg(name)); QString filename(custom_icon_path.arg(s).arg(s).arg(name));
if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s)); if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s));
@ -132,7 +134,7 @@ QIcon IconLoader::Load(const QString &name, const bool system_icon, const int fi
qLog(Warning) << "Couldn't load icon" << name << "from custom icons."; qLog(Warning) << "Couldn't load icon" << name << "from custom icons.";
} }
const QString path(QStringLiteral(":/icons/%1x%2/%3.png")); const QString path(u":/icons/%1x%2/%3.png"_s);
for (int s : std::as_const(sizes)) { for (int s : std::as_const(sizes)) {
QString filename(path.arg(s).arg(s).arg(name)); QString filename(path.arg(s).arg(s).arg(name));
if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s)); if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s));

View File

@ -57,10 +57,10 @@ bool LocalRedirectServer::Listen() {
return false; return false;
} }
url_.setScheme(QStringLiteral("http")); url_.setScheme(u"http"_s);
url_.setHost(QStringLiteral("localhost")); url_.setHost(u"localhost"_s);
url_.setPort(serverPort()); url_.setPort(serverPort());
url_.setPath(QStringLiteral("/")); url_.setPath(u"/"_s);
QObject::connect(this, &QTcpServer::newConnection, this, &LocalRedirectServer::NewConnection); QObject::connect(this, &QTcpServer::newConnection, this, &LocalRedirectServer::NewConnection);
return true; return true;
@ -126,12 +126,12 @@ void LocalRedirectServer::ReadyRead() {
void LocalRedirectServer::WriteTemplate() const { void LocalRedirectServer::WriteTemplate() const {
QFile page_file(QStringLiteral(":/html/oauthsuccess.html")); QFile page_file(u":/html/oauthsuccess.html"_s);
if (!page_file.open(QIODevice::ReadOnly)) return; if (!page_file.open(QIODevice::ReadOnly)) return;
QString page_data = QString::fromUtf8(page_file.readAll()); QString page_data = QString::fromUtf8(page_file.readAll());
page_file.close(); page_file.close();
static const QRegularExpression tr_regexp(QStringLiteral("tr\\(\"([^\"]+)\"\\)")); static const QRegularExpression tr_regexp(u"tr\\(\"([^\"]+)\"\\)"_s);
qint64 offset = 0; qint64 offset = 0;
Q_FOREVER { Q_FOREVER {
QRegularExpressionMatch re_match = tr_regexp.match(page_data, offset); QRegularExpressionMatch re_match = tr_regexp.match(page_data, offset);

View File

@ -168,7 +168,7 @@ static void MessageHandler(QtMsgType type, const QMessageLogContext &message_log
const QStringList lines = message.split(u'\n'); const QStringList lines = message.split(u'\n');
for (const QString &line : lines) { for (const QString &line : lines) {
BufferedDebug d = CreateLogger<BufferedDebug>(level, QStringLiteral("unknown"), -1, nullptr); BufferedDebug d = CreateLogger<BufferedDebug>(level, u"unknown"_s, -1, nullptr);
d << line.toLocal8Bit().constData(); d << line.toLocal8Bit().constData();
if (d.buf_) { if (d.buf_) {
d.buf_->close(); d.buf_->close();
@ -295,7 +295,7 @@ static T CreateLogger(Level level, const QString &class_name, int line, const ch
} }
T ret(type); T ret(type);
ret.nospace() << QDateTime::currentDateTime().toString(QStringLiteral("hh:mm:ss.zzz")).toLatin1().constData() << level_name << function_line.leftJustified(32).toLatin1().constData(); ret.nospace() << QDateTime::currentDateTime().toString(u"hh:mm:ss.zzz"_s).toLatin1().constData() << level_name << function_line.leftJustified(32).toLatin1().constData();
return ret.space(); return ret.space();
@ -321,7 +321,7 @@ QString CXXDemangle(const QString &mangled_function) {
QString LinuxDemangle(const QString &symbol); QString LinuxDemangle(const QString &symbol);
QString LinuxDemangle(const QString &symbol) { QString LinuxDemangle(const QString &symbol) {
static const QRegularExpression regex_symbol(QStringLiteral("\\(([^+]+)")); static const QRegularExpression regex_symbol(u"\\(([^+]+)"_s);
QRegularExpressionMatch match = regex_symbol.match(symbol); QRegularExpressionMatch match = regex_symbol.match(symbol);
if (!match.hasMatch()) { if (!match.hasMatch()) {
return symbol; return symbol;

View File

@ -37,6 +37,8 @@
#include "song.h" #include "song.h"
#include "iconloader.h" #include "iconloader.h"
using namespace Qt::Literals::StringLiterals;
@interface Target :NSObject { @interface Target :NSObject {
QAction *action_; QAction *action_;
} }
@ -70,7 +72,7 @@ class MacSystemTrayIconPrivate {
MacSystemTrayIconPrivate() { MacSystemTrayIconPrivate() {
dock_menu_ = [[NSMenu alloc] initWithTitle:@"DockMenu"]; dock_menu_ = [[NSMenu alloc] initWithTitle:@"DockMenu"];
QString title = QT_TR_NOOP(QStringLiteral("Now Playing")); QString title = QT_TR_NOOP(u"Now Playing"_s);
NSString *t = [[NSString alloc] initWithUTF8String:title.toUtf8().constData()]; NSString *t = [[NSString alloc] initWithUTF8String:title.toUtf8().constData()];
now_playing_ = [[NSMenuItem alloc] initWithTitle:t action:nullptr keyEquivalent:@""]; now_playing_ = [[NSMenuItem alloc] initWithTitle:t action:nullptr keyEquivalent:@""];
now_playing_artist_ = [[NSMenuItem alloc] initWithTitle:@"Nothing to see here" action:nullptr keyEquivalent:@""]; now_playing_artist_ = [[NSMenuItem alloc] initWithTitle:@"Nothing to see here" action:nullptr keyEquivalent:@""];
@ -89,7 +91,7 @@ class MacSystemTrayIconPrivate {
void AddMenuItem(QAction *action) { void AddMenuItem(QAction *action) {
// Strip accelarators from name. // Strip accelarators from name.
QString text = action->text().remove(QLatin1Char('&')); QString text = action->text().remove(u'&');
NSString *title = [[NSString alloc] initWithUTF8String: text.toUtf8().constData()]; NSString *title = [[NSString alloc] initWithUTF8String: text.toUtf8().constData()];
// Create an object that can receive user clicks and pass them on to the QAction. // Create an object that can receive user clicks and pass them on to the QAction.
Target *target = [[Target alloc] initWithQAction:action]; Target *target = [[Target alloc] initWithQAction:action];
@ -152,10 +154,10 @@ class MacSystemTrayIconPrivate {
SystemTrayIcon::SystemTrayIcon(QObject *parent) SystemTrayIcon::SystemTrayIcon(QObject *parent)
: QObject(parent), : QObject(parent),
normal_icon_(QPixmap(QStringLiteral(":/pictures/strawberry.png")).scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)), normal_icon_(QPixmap(u":/pictures/strawberry.png"_s).scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)),
grey_icon_(QPixmap(QStringLiteral(":/pictures/strawberry-grey.png")).scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)), grey_icon_(QPixmap(u":/pictures/strawberry-grey.png"_s).scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation)),
playing_icon_(QStringLiteral(":/pictures/tiny-play.png")), playing_icon_(u":/pictures/tiny-play.png"_s),
paused_icon_(QStringLiteral(":/pictures/tiny-pause.png")), paused_icon_(u":/pictures/tiny-pause.png"_s),
trayicon_progress_(false), trayicon_progress_(false),
song_progress_(0) { song_progress_(0) {

View File

@ -364,7 +364,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
// Initialize the UI // Initialize the UI
ui_->setupUi(this); ui_->setupUi(this);
setWindowIcon(IconLoader::Load(QStringLiteral("strawberry"))); setWindowIcon(IconLoader::Load(u"strawberry"_s));
album_cover_choice_controller_->Init(app); album_cover_choice_controller_->Init(app);
@ -376,32 +376,32 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
StyleHelper::setBaseColor(palette().color(QPalette::Highlight).darker()); StyleHelper::setBaseColor(palette().color(QPalette::Highlight).darker());
// Add tabs to the fancy tab widget // Add tabs to the fancy tab widget
ui_->tabs->AddTab(context_view_, QStringLiteral("context"), IconLoader::Load(QStringLiteral("strawberry"), true, 0, 32), tr("Context")); ui_->tabs->AddTab(context_view_, u"context"_s, IconLoader::Load(u"strawberry"_s, true, 0, 32), tr("Context"));
ui_->tabs->AddTab(collection_view_, QStringLiteral("collection"), IconLoader::Load(QStringLiteral("library-music"), true, 0, 32), tr("Collection")); ui_->tabs->AddTab(collection_view_, u"collection"_s, IconLoader::Load(u"library-music"_s, true, 0, 32), tr("Collection"));
ui_->tabs->AddTab(queue_view_, QStringLiteral("queue"), IconLoader::Load(QStringLiteral("footsteps"), true, 0, 32), tr("Queue")); ui_->tabs->AddTab(queue_view_, u"queue"_s, IconLoader::Load(u"footsteps"_s, true, 0, 32), tr("Queue"));
ui_->tabs->AddTab(playlist_list_, QStringLiteral("playlists"), IconLoader::Load(QStringLiteral("view-media-playlist"), true, 0, 32), tr("Playlists")); ui_->tabs->AddTab(playlist_list_, u"playlists"_s, IconLoader::Load(u"view-media-playlist"_s, true, 0, 32), tr("Playlists"));
ui_->tabs->AddTab(smartplaylists_view_, QStringLiteral("smartplaylists"), IconLoader::Load(QStringLiteral("view-media-playlist"), true, 0, 32), tr("Smart playlists")); ui_->tabs->AddTab(smartplaylists_view_, u"smartplaylists"_s, IconLoader::Load(u"view-media-playlist"_s, true, 0, 32), tr("Smart playlists"));
ui_->tabs->AddTab(file_view_, QStringLiteral("files"), IconLoader::Load(QStringLiteral("document-open"), true, 0, 32), tr("Files")); ui_->tabs->AddTab(file_view_, u"files"_s, IconLoader::Load(u"document-open"_s, true, 0, 32), tr("Files"));
ui_->tabs->AddTab(radio_view_, QStringLiteral("radios"), IconLoader::Load(QStringLiteral("radio"), true, 0, 32), tr("Radios")); ui_->tabs->AddTab(radio_view_, u"radios"_s, IconLoader::Load(u"radio"_s, true, 0, 32), tr("Radios"));
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
ui_->tabs->AddTab(device_view_, QStringLiteral("devices"), IconLoader::Load(QStringLiteral("device"), true, 0, 32), tr("Devices")); ui_->tabs->AddTab(device_view_, u"devices"_s, IconLoader::Load(u"device"_s, true, 0, 32), tr("Devices"));
#endif #endif
#ifdef HAVE_SUBSONIC #ifdef HAVE_SUBSONIC
ui_->tabs->AddTab(subsonic_view_, QStringLiteral("subsonic"), IconLoader::Load(QStringLiteral("subsonic"), true, 0, 32), tr("Subsonic")); ui_->tabs->AddTab(subsonic_view_, u"subsonic"_s, IconLoader::Load(u"subsonic"_s, true, 0, 32), tr("Subsonic"));
#endif #endif
#ifdef HAVE_TIDAL #ifdef HAVE_TIDAL
ui_->tabs->AddTab(tidal_view_, QStringLiteral("tidal"), IconLoader::Load(QStringLiteral("tidal"), true, 0, 32), tr("Tidal")); ui_->tabs->AddTab(tidal_view_, u"tidal"_s, IconLoader::Load(u"tidal"_s, true, 0, 32), tr("Tidal"));
#endif #endif
#ifdef HAVE_SPOTIFY #ifdef HAVE_SPOTIFY
ui_->tabs->AddTab(spotify_view_, QStringLiteral("spotify"), IconLoader::Load(QStringLiteral("spotify"), true, 0, 32), tr("Spotify")); ui_->tabs->AddTab(spotify_view_, u"spotify"_s, IconLoader::Load(u"spotify"_s, true, 0, 32), tr("Spotify"));
#endif #endif
#ifdef HAVE_QOBUZ #ifdef HAVE_QOBUZ
ui_->tabs->AddTab(qobuz_view_, QStringLiteral("qobuz"), IconLoader::Load(QStringLiteral("qobuz"), true, 0, 32), tr("Qobuz")); ui_->tabs->AddTab(qobuz_view_, u"qobuz"_s, IconLoader::Load(u"qobuz"_s, true, 0, 32), tr("Qobuz"));
#endif #endif
// Add the playing widget to the fancy tab widget // Add the playing widget to the fancy tab widget
ui_->tabs->AddBottomWidget(ui_->widget_playing); ui_->tabs->AddBottomWidget(ui_->widget_playing);
ui_->tabs->SetBackgroundPixmap(QPixmap(QStringLiteral(":/pictures/sidebar-background.png"))); ui_->tabs->SetBackgroundPixmap(QPixmap(u":/pictures/sidebar-background.png"_s));
ui_->tabs->LoadSettings(QLatin1String(kSettingsGroup)); ui_->tabs->LoadSettings(QLatin1String(kSettingsGroup));
track_position_timer_->setInterval(kTrackPositionUpdateTimeMs); track_position_timer_->setInterval(kTrackPositionUpdateTimeMs);
@ -441,59 +441,59 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
// Help menu // Help menu
ui_->action_about_strawberry->setIcon(IconLoader::Load(QStringLiteral("strawberry"))); ui_->action_about_strawberry->setIcon(IconLoader::Load(u"strawberry"_s));
ui_->action_about_qt->setIcon(QIcon(QStringLiteral(":/qt-project.org/qmessagebox/images/qtlogo-64.png"))); ui_->action_about_qt->setIcon(QIcon(u":/qt-project.org/qmessagebox/images/qtlogo-64.png"_s));
// Music menu // Music menu
ui_->action_open_file->setIcon(IconLoader::Load(QStringLiteral("document-open"))); ui_->action_open_file->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_open_cd->setIcon(IconLoader::Load(QStringLiteral("media-optical"))); ui_->action_open_cd->setIcon(IconLoader::Load(u"media-optical"_s));
ui_->action_previous_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-backward"))); ui_->action_previous_track->setIcon(IconLoader::Load(u"media-skip-backward"_s));
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); ui_->action_play_pause->setIcon(IconLoader::Load(u"media-playback-start"_s));
ui_->action_stop->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop"))); ui_->action_stop->setIcon(IconLoader::Load(u"media-playback-stop"_s));
ui_->action_stop_after_this_track->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop"))); ui_->action_stop_after_this_track->setIcon(IconLoader::Load(u"media-playback-stop"_s));
ui_->action_next_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward"))); ui_->action_next_track->setIcon(IconLoader::Load(u"media-skip-forward"_s));
ui_->action_quit->setIcon(IconLoader::Load(QStringLiteral("application-exit"))); ui_->action_quit->setIcon(IconLoader::Load(u"application-exit"_s));
// Playlist // Playlist
ui_->action_add_file->setIcon(IconLoader::Load(QStringLiteral("document-open"))); ui_->action_add_file->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_add_folder->setIcon(IconLoader::Load(QStringLiteral("document-open-folder"))); ui_->action_add_folder->setIcon(IconLoader::Load(u"document-open-folder"_s));
ui_->action_add_stream->setIcon(IconLoader::Load(QStringLiteral("document-open-remote"))); ui_->action_add_stream->setIcon(IconLoader::Load(u"document-open-remote"_s));
ui_->action_shuffle_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle"))); ui_->action_shuffle_mode->setIcon(IconLoader::Load(u"media-playlist-shuffle"_s));
ui_->action_repeat_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-repeat"))); ui_->action_repeat_mode->setIcon(IconLoader::Load(u"media-playlist-repeat"_s));
ui_->action_new_playlist->setIcon(IconLoader::Load(QStringLiteral("document-new"))); ui_->action_new_playlist->setIcon(IconLoader::Load(u"document-new"_s));
ui_->action_save_playlist->setIcon(IconLoader::Load(QStringLiteral("document-save"))); ui_->action_save_playlist->setIcon(IconLoader::Load(u"document-save"_s));
ui_->action_load_playlist->setIcon(IconLoader::Load(QStringLiteral("document-open"))); ui_->action_load_playlist->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_jump->setIcon(IconLoader::Load(QStringLiteral("go-jump"))); ui_->action_jump->setIcon(IconLoader::Load(u"go-jump"_s));
ui_->action_clear_playlist->setIcon(IconLoader::Load(QStringLiteral("edit-clear-list"))); ui_->action_clear_playlist->setIcon(IconLoader::Load(u"edit-clear-list"_s));
ui_->action_shuffle->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle"))); ui_->action_shuffle->setIcon(IconLoader::Load(u"media-playlist-shuffle"_s));
ui_->action_remove_duplicates->setIcon(IconLoader::Load(QStringLiteral("list-remove"))); ui_->action_remove_duplicates->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_remove_unavailable->setIcon(IconLoader::Load(QStringLiteral("list-remove"))); ui_->action_remove_unavailable->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_remove_from_playlist->setIcon(IconLoader::Load(QStringLiteral("list-remove"))); ui_->action_remove_from_playlist->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_save_all_playlists->setIcon(IconLoader::Load(QStringLiteral("document-save-all"))); ui_->action_save_all_playlists->setIcon(IconLoader::Load(u"document-save-all"_s));
// Configure // Configure
ui_->action_cover_manager->setIcon(IconLoader::Load(QStringLiteral("document-download"))); ui_->action_cover_manager->setIcon(IconLoader::Load(u"document-download"_s));
ui_->action_edit_track->setIcon(IconLoader::Load(QStringLiteral("edit-rename"))); ui_->action_edit_track->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_edit_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename"))); ui_->action_edit_value->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_selection_set_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename"))); ui_->action_selection_set_value->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_equalizer->setIcon(IconLoader::Load(QStringLiteral("equalizer"))); ui_->action_equalizer->setIcon(IconLoader::Load(u"equalizer"_s));
ui_->action_transcoder->setIcon(IconLoader::Load(QStringLiteral("tools-wizard"))); ui_->action_transcoder->setIcon(IconLoader::Load(u"tools-wizard"_s));
ui_->action_update_collection->setIcon(IconLoader::Load(QStringLiteral("view-refresh"))); ui_->action_update_collection->setIcon(IconLoader::Load(u"view-refresh"_s));
ui_->action_full_collection_scan->setIcon(IconLoader::Load(QStringLiteral("view-refresh"))); ui_->action_full_collection_scan->setIcon(IconLoader::Load(u"view-refresh"_s));
ui_->action_stop_collection_scan->setIcon(IconLoader::Load(QStringLiteral("dialog-error"))); ui_->action_stop_collection_scan->setIcon(IconLoader::Load(u"dialog-error"_s));
ui_->action_settings->setIcon(IconLoader::Load(QStringLiteral("configure"))); ui_->action_settings->setIcon(IconLoader::Load(u"configure"_s));
ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load(QStringLiteral("scrobble"))); ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load(u"scrobble"_s));
ui_->action_console->setIcon(IconLoader::Load(QStringLiteral("keyboard"))); ui_->action_console->setIcon(IconLoader::Load(u"keyboard"_s));
ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load(QStringLiteral("view-choose"))); ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load(u"view-choose"_s));
ui_->action_auto_complete_tags->setIcon(IconLoader::Load(QStringLiteral("musicbrainz"))); ui_->action_auto_complete_tags->setIcon(IconLoader::Load(u"musicbrainz"_s));
// Scrobble // Scrobble
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble-disabled"))); ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(u"scrobble-disabled"_s));
ui_->action_love->setIcon(IconLoader::Load(QStringLiteral("love"))); ui_->action_love->setIcon(IconLoader::Load(u"love"_s));
// File view connections // File view connections
QObject::connect(file_view_, &FileView::AddToPlaylist, this, &MainWindow::AddToPlaylist); QObject::connect(file_view_, &FileView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
@ -545,15 +545,15 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
QObject::connect(ui_->action_full_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::FullScan); QObject::connect(ui_->action_full_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::FullScan);
QObject::connect(ui_->action_stop_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::StopScan); QObject::connect(ui_->action_stop_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::StopScan);
QObject::connect(ui_->action_add_files_to_transcoder, &QAction::triggered, this, &MainWindow::AddFilesToTranscoder); QObject::connect(ui_->action_add_files_to_transcoder, &QAction::triggered, this, &MainWindow::AddFilesToTranscoder);
ui_->action_add_files_to_transcoder->setIcon(IconLoader::Load(QStringLiteral("tools-wizard"))); ui_->action_add_files_to_transcoder->setIcon(IconLoader::Load(u"tools-wizard"_s));
QObject::connect(ui_->action_toggle_scrobbling, &QAction::triggered, &*app_->scrobbler(), &AudioScrobbler::ToggleScrobbling); QObject::connect(ui_->action_toggle_scrobbling, &QAction::triggered, &*app_->scrobbler(), &AudioScrobbler::ToggleScrobbling);
QObject::connect(ui_->action_love, &QAction::triggered, this, &MainWindow::Love); QObject::connect(ui_->action_love, &QAction::triggered, this, &MainWindow::Love);
QObject::connect(&*app_->scrobbler(), &AudioScrobbler::ErrorMessage, this, &MainWindow::ShowErrorDialog); QObject::connect(&*app_->scrobbler(), &AudioScrobbler::ErrorMessage, this, &MainWindow::ShowErrorDialog);
// Playlist view actions // Playlist view actions
ui_->action_next_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgDown"))); ui_->action_next_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(u"Ctrl+Tab"_s) << QKeySequence::fromString(u"Ctrl+PgDown"_s));
ui_->action_previous_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Shift+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgUp"))); ui_->action_previous_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(u"Ctrl+Shift+Tab"_s) << QKeySequence::fromString(u"Ctrl+PgUp"_s));
// Actions for switching tabs will be global to the entire window, so adding them here // Actions for switching tabs will be global to the entire window, so adding them here
addAction(ui_->action_next_playlist); addAction(ui_->action_next_playlist);
@ -673,7 +673,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
QObject::connect(collection_view_group, &QActionGroup::triggered, this, &MainWindow::ChangeCollectionFilterMode); QObject::connect(collection_view_group, &QActionGroup::triggered, this, &MainWindow::ChangeCollectionFilterMode);
QAction *collection_config_action = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure collection..."), this); QAction *collection_config_action = new QAction(IconLoader::Load(u"configure"_s), tr("Configure collection..."), this);
QObject::connect(collection_config_action, &QAction::triggered, this, &MainWindow::ShowCollectionConfig); QObject::connect(collection_config_action, &QAction::triggered, this, &MainWindow::ShowCollectionConfig);
collection_view_->filter_widget()->SetSettingsGroup(QLatin1String(CollectionSettingsPage::kSettingsGroup)); collection_view_->filter_widget()->SetSettingsGroup(QLatin1String(CollectionSettingsPage::kSettingsGroup));
collection_view_->filter_widget()->Init(app_->collection()->model(), app_->collection()->model()->filter()); collection_view_->filter_widget()->Init(app_->collection()->model(), app_->collection()->model()->filter());
@ -723,14 +723,14 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
QObject::connect(playlist_menu_, &QMenu::aboutToHide, this, &MainWindow::PlaylistMenuHidden); QObject::connect(playlist_menu_, &QMenu::aboutToHide, this, &MainWindow::PlaylistMenuHidden);
playlist_play_pause_ = playlist_menu_->addAction(tr("Play"), this, &MainWindow::PlaylistPlay); playlist_play_pause_ = playlist_menu_->addAction(tr("Play"), this, &MainWindow::PlaylistPlay);
playlist_menu_->addAction(ui_->action_stop); playlist_menu_->addAction(ui_->action_stop);
playlist_stop_after_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-stop")), tr("Stop after this track"), this, &MainWindow::PlaylistStopAfter); playlist_stop_after_ = playlist_menu_->addAction(IconLoader::Load(u"media-playback-stop"_s), tr("Stop after this track"), this, &MainWindow::PlaylistStopAfter);
playlist_queue_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue); playlist_queue_ = playlist_menu_->addAction(IconLoader::Load(u"go-next"_s), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue);
playlist_queue_->setShortcut(QKeySequence(QStringLiteral("Ctrl+D"))); playlist_queue_->setShortcut(QKeySequence(u"Ctrl+D"_s));
ui_->playlist->addAction(playlist_queue_); ui_->playlist->addAction(playlist_queue_);
playlist_queue_play_next_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue selected tracks to play next"), this, &MainWindow::PlaylistQueuePlayNext); playlist_queue_play_next_ = playlist_menu_->addAction(IconLoader::Load(u"go-next"_s), tr("Queue selected tracks to play next"), this, &MainWindow::PlaylistQueuePlayNext);
playlist_queue_play_next_->setShortcut(QKeySequence(QStringLiteral("Ctrl+Shift+D"))); playlist_queue_play_next_->setShortcut(QKeySequence(u"Ctrl+Shift+D"_s));
ui_->playlist->addAction(playlist_queue_play_next_); ui_->playlist->addAction(playlist_queue_play_next_);
playlist_skip_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("media-skip-forward")), tr("Toggle skip status"), this, &MainWindow::PlaylistSkip); playlist_skip_ = playlist_menu_->addAction(IconLoader::Load(u"media-skip-forward"_s), tr("Toggle skip status"), this, &MainWindow::PlaylistSkip);
ui_->playlist->addAction(playlist_skip_); ui_->playlist->addAction(playlist_skip_);
playlist_menu_->addSeparator(); playlist_menu_->addSeparator();
@ -743,20 +743,20 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
#ifdef HAVE_MUSICBRAINZ #ifdef HAVE_MUSICBRAINZ
playlist_menu_->addAction(ui_->action_auto_complete_tags); playlist_menu_->addAction(ui_->action_auto_complete_tags);
#endif #endif
playlist_rescan_songs_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("view-refresh")), tr("Rescan song(s)..."), this, &MainWindow::RescanSongs); playlist_rescan_songs_ = playlist_menu_->addAction(IconLoader::Load(u"view-refresh"_s), tr("Rescan song(s)..."), this, &MainWindow::RescanSongs);
playlist_menu_->addAction(playlist_rescan_songs_); playlist_menu_->addAction(playlist_rescan_songs_);
playlist_menu_->addAction(ui_->action_add_files_to_transcoder); playlist_menu_->addAction(ui_->action_add_files_to_transcoder);
playlist_menu_->addSeparator(); playlist_menu_->addSeparator();
playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy URL(s)..."), this, &MainWindow::PlaylistCopyUrl); playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load(u"edit-copy"_s), tr("Copy URL(s)..."), this, &MainWindow::PlaylistCopyUrl);
playlist_show_in_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-find")), tr("Show in collection..."), this, &MainWindow::ShowInCollection); playlist_show_in_collection_ = playlist_menu_->addAction(IconLoader::Load(u"edit-find"_s), tr("Show in collection..."), this, &MainWindow::ShowInCollection);
playlist_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), tr("Show in file browser..."), this, &MainWindow::PlaylistOpenInBrowser); playlist_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load(u"document-open-folder"_s), tr("Show in file browser..."), this, &MainWindow::PlaylistOpenInBrowser);
playlist_organize_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Organize files..."), this, &MainWindow::PlaylistMoveToCollection); playlist_organize_ = playlist_menu_->addAction(IconLoader::Load(u"edit-copy"_s), tr("Organize files..."), this, &MainWindow::PlaylistMoveToCollection);
playlist_copy_to_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy to collection..."), this, &MainWindow::PlaylistCopyToCollection); playlist_copy_to_collection_ = playlist_menu_->addAction(IconLoader::Load(u"edit-copy"_s), tr("Copy to collection..."), this, &MainWindow::PlaylistCopyToCollection);
playlist_move_to_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-jump")), tr("Move to collection..."), this, &MainWindow::PlaylistMoveToCollection); playlist_move_to_collection_ = playlist_menu_->addAction(IconLoader::Load(u"go-jump"_s), tr("Move to collection..."), this, &MainWindow::PlaylistMoveToCollection);
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
playlist_copy_to_device_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("device")), tr("Copy to device..."), this, &MainWindow::PlaylistCopyToDevice); playlist_copy_to_device_ = playlist_menu_->addAction(IconLoader::Load(u"device"_s), tr("Copy to device..."), this, &MainWindow::PlaylistCopyToDevice);
#endif #endif
playlist_delete_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from disk..."), this, &MainWindow::PlaylistDelete); playlist_delete_ = playlist_menu_->addAction(IconLoader::Load(u"edit-delete"_s), tr("Delete from disk..."), this, &MainWindow::PlaylistDelete);
playlist_menu_->addSeparator(); playlist_menu_->addSeparator();
playlistitem_actions_separator_ = playlist_menu_->addSeparator(); playlistitem_actions_separator_ = playlist_menu_->addSeparator();
playlist_menu_->addAction(ui_->action_clear_playlist); playlist_menu_->addAction(ui_->action_clear_playlist);
@ -845,7 +845,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
QObject::connect(ui_->analyzer, &AnalyzerContainer::WheelEvent, this, &MainWindow::VolumeWheelEvent); QObject::connect(ui_->analyzer, &AnalyzerContainer::WheelEvent, this, &MainWindow::VolumeWheelEvent);
// Statusbar widgets // Statusbar widgets
ui_->playlist_summary->setMinimumWidth(QFontMetrics(font()).horizontalAdvance(QStringLiteral("WW selected of WW tracks - [ WW:WW ]"))); ui_->playlist_summary->setMinimumWidth(QFontMetrics(font()).horizontalAdvance(u"WW selected of WW tracks - [ WW:WW ]"_s));
ui_->status_bar_stack->setCurrentWidget(ui_->playlist_summary_page); ui_->status_bar_stack->setCurrentWidget(ui_->playlist_summary_page);
QObject::connect(ui_->multi_loading_indicator, &MultiLoadingIndicator::TaskCountChange, this, &MainWindow::TaskCountChanged); QObject::connect(ui_->multi_loading_indicator, &MultiLoadingIndicator::TaskCountChange, this, &MainWindow::TaskCountChanged);
@ -872,7 +872,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
PlayingWidgetPositionChanged(ui_->widget_playing->show_above_status_bar()); PlayingWidgetPositionChanged(ui_->widget_playing->show_above_status_bar());
StyleSheetLoader *css_loader = new StyleSheetLoader(this); StyleSheetLoader *css_loader = new StyleSheetLoader(this);
css_loader->SetStyleSheet(this, QStringLiteral(":/style/strawberry.css")); css_loader->SetStyleSheet(this, u":/style/strawberry.css"_s);
// Load playlists // Load playlists
app_->playlist_manager()->Init(app_->collection_backend(), app_->playlist_backend(), ui_->playlist_sequence, ui_->playlist); app_->playlist_manager()->Init(app_->collection_backend(), app_->playlist_backend(), ui_->playlist_sequence, ui_->playlist);
@ -991,7 +991,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
QObject::connect(close_window_shortcut, &QShortcut::activated, this, &MainWindow::ToggleHide); QObject::connect(close_window_shortcut, &QShortcut::activated, this, &MainWindow::ToggleHide);
QAction *action_focus_search = new QAction(this); QAction *action_focus_search = new QAction(this);
action_focus_search->setShortcuts(QList<QKeySequence>() << QKeySequence(QStringLiteral("Ctrl+F"))); action_focus_search->setShortcuts(QList<QKeySequence>() << QKeySequence(u"Ctrl+F"_s));
addAction(action_focus_search); addAction(action_focus_search);
QObject::connect(action_focus_search, &QAction::triggered, this, &MainWindow::FocusSearchField); QObject::connect(action_focus_search, &QAction::triggered, this, &MainWindow::FocusSearchField);
@ -1014,7 +1014,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
#endif #endif
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
if (!Utilities::GetEnv(QStringLiteral("SNAP")).isEmpty() && !Utilities::GetEnv(QStringLiteral("SNAP_NAME")).isEmpty()) { if (!Utilities::GetEnv(u"SNAP"_s).isEmpty() && !Utilities::GetEnv(u"SNAP_NAME"_s).isEmpty()) {
Settings s; Settings s;
s.beginGroup(kSettingsGroup); s.beginGroup(kSettingsGroup);
const bool ignore_snap = s.value("ignore_snap", false).toBool(); const bool ignore_snap = s.value("ignore_snap", false).toBool();
@ -1036,9 +1036,9 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
if (!ignore_rosetta) { if (!ignore_rosetta) {
MessageDialog *rosetta_message = new MessageDialog(this); MessageDialog *rosetta_message = new MessageDialog(this);
rosetta_message->set_settings_group(QLatin1String(kSettingsGroup)); rosetta_message->set_settings_group(QLatin1String(kSettingsGroup));
rosetta_message->set_do_not_show_message_again(QStringLiteral("ignore_rosetta")); rosetta_message->set_do_not_show_message_again(u"ignore_rosetta"_s);
rosetta_message->setAttribute(Qt::WA_DeleteOnClose); rosetta_message->setAttribute(Qt::WA_DeleteOnClose);
rosetta_message->ShowMessage(tr("Strawberry running under Rosetta"), tr("You are running Strawberry under Rosetta. Running Strawberry under Rosetta is unsupported and known to have issues. You should download Strawberry for the correct CPU architecture from %1").arg(QLatin1String("<a href=\"https://downloads.strawberrymusicplayer.org/\">downloads.strawberrymusicplayer.org</a>")), IconLoader::Load(QStringLiteral("dialog-warning"))); rosetta_message->ShowMessage(tr("Strawberry running under Rosetta"), tr("You are running Strawberry under Rosetta. Running Strawberry under Rosetta is unsupported and known to have issues. You should download Strawberry for the correct CPU architecture from %1").arg(QLatin1String("<a href=\"https://downloads.strawberrymusicplayer.org/\">downloads.strawberrymusicplayer.org</a>")), IconLoader::Load(u"dialog-warning"_s));
} }
} }
#endif #endif
@ -1061,7 +1061,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
sponsor_message->set_settings_group(QLatin1String(kSettingsGroup)); sponsor_message->set_settings_group(QLatin1String(kSettingsGroup));
sponsor_message->set_do_not_show_message_again(QLatin1String(do_not_show_sponsor_message_key)); sponsor_message->set_do_not_show_message_again(QLatin1String(do_not_show_sponsor_message_key));
sponsor_message->setAttribute(Qt::WA_DeleteOnClose); sponsor_message->setAttribute(Qt::WA_DeleteOnClose);
sponsor_message->ShowMessage(tr("Sponsoring Strawberry"), tr("Strawberry is free and open source software. If you like Strawberry, please consider sponsoring the project. For more information about sponsorship see our website %1").arg(QStringLiteral("<a href= \"https://www.strawberrymusicplayer.org/\">www.strawberrymusicplayer.org</a>")), IconLoader::Load(QStringLiteral("dialog-information"))); sponsor_message->ShowMessage(tr("Sponsoring Strawberry"), tr("Strawberry is free and open source software. If you like Strawberry, please consider sponsoring the project. For more information about sponsorship see our website %1").arg(u"<a href= \"https://www.strawberrymusicplayer.org/\">www.strawberrymusicplayer.org</a>"_s), IconLoader::Load(u"dialog-information"_s));
} }
} }
} }
@ -1330,11 +1330,11 @@ void MainWindow::EngineChanged(const EngineBase::Type enginetype) {
void MainWindow::MediaStopped() { void MainWindow::MediaStopped() {
setWindowTitle(QStringLiteral("Strawberry Music Player")); setWindowTitle(u"Strawberry Music Player"_s);
ui_->action_stop->setEnabled(false); ui_->action_stop->setEnabled(false);
ui_->action_stop_after_this_track->setEnabled(false); ui_->action_stop_after_this_track->setEnabled(false);
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); ui_->action_play_pause->setIcon(IconLoader::Load(u"media-playback-start"_s));
ui_->action_play_pause->setText(tr("Play")); ui_->action_play_pause->setText(tr("Play"));
ui_->action_play_pause->setEnabled(true); ui_->action_play_pause->setEnabled(true);
@ -1371,7 +1371,7 @@ void MainWindow::MediaPaused() {
ui_->action_stop->setEnabled(true); ui_->action_stop->setEnabled(true);
ui_->action_stop_after_this_track->setEnabled(true); ui_->action_stop_after_this_track->setEnabled(true);
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); ui_->action_play_pause->setIcon(IconLoader::Load(u"media-playback-start"_s));
ui_->action_play_pause->setText(tr("Play")); ui_->action_play_pause->setText(tr("Play"));
ui_->action_play_pause->setEnabled(true); ui_->action_play_pause->setEnabled(true);
@ -1391,7 +1391,7 @@ void MainWindow::MediaPlaying() {
ui_->action_stop->setEnabled(true); ui_->action_stop->setEnabled(true);
ui_->action_stop_after_this_track->setEnabled(true); ui_->action_stop_after_this_track->setEnabled(true);
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause"))); ui_->action_play_pause->setIcon(IconLoader::Load(u"media-playback-pause"_s));
ui_->action_play_pause->setText(tr("Pause")); ui_->action_play_pause->setText(tr("Pause"));
bool enable_play_pause(false); bool enable_play_pause(false);
@ -1713,11 +1713,11 @@ void MainWindow::UpdateTrackSliderPosition() {
void MainWindow::UpdateTaskbarProgress(const bool visible, const double progress) { void MainWindow::UpdateTaskbarProgress(const bool visible, const double progress) {
QVariantMap map; QVariantMap map;
QDBusMessage msg = QDBusMessage::createSignal(QStringLiteral("/org/strawberrymusicplayer/strawberry"), QStringLiteral("com.canonical.Unity.LauncherEntry"), QStringLiteral("Update")); QDBusMessage msg = QDBusMessage::createSignal(u"/org/strawberrymusicplayer/strawberry"_s, u"com.canonical.Unity.LauncherEntry"_s, u"Update"_s);
map.insert(QStringLiteral("progress-visible"), visible); map.insert(u"progress-visible"_s, visible);
map.insert(QStringLiteral("progress"), progress); map.insert(u"progress"_s, progress);
msg << QStringLiteral("application://org.strawberrymusicplayer.strawberry.desktop") << map; msg << u"application://org.strawberrymusicplayer.strawberry.desktop"_s << map;
QDBusConnection::sessionBus().send(msg); QDBusConnection::sessionBus().send(msg);
@ -1849,11 +1849,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
// Is this song currently playing? // Is this song currently playing?
if (app_->playlist_manager()->current()->current_row() == source_index.row() && app_->player()->GetState() == EngineBase::State::Playing) { if (app_->playlist_manager()->current()->current_row() == source_index.row() && app_->player()->GetState() == EngineBase::State::Playing) {
playlist_play_pause_->setText(tr("Pause")); playlist_play_pause_->setText(tr("Pause"));
playlist_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause"))); playlist_play_pause_->setIcon(IconLoader::Load(u"media-playback-pause"_s));
} }
else { else {
playlist_play_pause_->setText(tr("Play")); playlist_play_pause_->setText(tr("Play"));
playlist_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); playlist_play_pause_->setIcon(IconLoader::Load(u"media-playback-start"_s));
} }
// Are we allowed to pause? // Are we allowed to pause?
@ -1965,11 +1965,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
else playlist_skip_->setText(tr("Toggle skip status")); else playlist_skip_->setText(tr("Toggle skip status"));
} }
if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-previous"))); if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load(u"go-previous"_s));
else playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-next"))); else playlist_queue_->setIcon(IconLoader::Load(u"go-next"_s));
if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward"))); if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load(u"media-skip-forward"_s));
else playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); else playlist_skip_->setIcon(IconLoader::Load(u"media-playback-start"_s));
if (!index.isValid()) { if (!index.isValid()) {
@ -1986,7 +1986,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
QString column_name = Playlist::column_name(column); QString column_name = Playlist::column_name(column);
QString column_value = app_->playlist_manager()->current()->data(source_index).toString(); QString column_value = app_->playlist_manager()->current()->data(source_index).toString();
if (column_value.length() > 25) column_value = column_value.left(25) + QStringLiteral("..."); if (column_value.length() > 25) column_value = column_value.left(25) + u"..."_s;
ui_->action_selection_set_value->setText(tr("Set %1 to \"%2\"...").arg(column_name.toLower(), column_value)); ui_->action_selection_set_value->setText(tr("Set %1 to \"%2\"...").arg(column_name.toLower(), column_value));
ui_->action_edit_value->setText(tr("Edit tag \"%1\"...").arg(column_name)); ui_->action_edit_value->setText(tr("Edit tag \"%1\"...").arg(column_name));
@ -2030,7 +2030,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
// Create the playlist submenu if songs are selected. // Create the playlist submenu if songs are selected.
if (selected > 0) { if (selected > 0) {
QMenu *add_to_another_menu = new QMenu(tr("Add to another playlist"), this); QMenu *add_to_another_menu = new QMenu(tr("Add to another playlist"), this);
add_to_another_menu->setIcon(IconLoader::Load(QStringLiteral("list-add"))); add_to_another_menu->setIcon(IconLoader::Load(u"list-add"_s));
const QList<int> playlist_ids = app_->playlist_manager()->playlist_ids(); const QList<int> playlist_ids = app_->playlist_manager()->playlist_ids();
for (const int playlist_id : playlist_ids) { for (const int playlist_id : playlist_ids) {
@ -2884,7 +2884,7 @@ void MainWindow::CheckFullRescanRevisions() {
// If we have any... // If we have any...
if (!reasons.isEmpty()) { if (!reasons.isEmpty()) {
QString message = tr("The version of Strawberry you've just updated to requires a full collection rescan because of the new features listed below:") + QStringLiteral("<ul>"); QString message = tr("The version of Strawberry you've just updated to requires a full collection rescan because of the new features listed below:") + u"<ul>"_s;
for (const QString &reason : reasons) { for (const QString &reason : reasons) {
message += "<li>"_L1 + reason + "</li>"_L1; message += "<li>"_L1 + reason + "</li>"_L1;
} }
@ -2996,10 +2996,10 @@ void MainWindow::HandleNotificationPreview(const OSDBase::Behaviour type, const
qLog(Debug) << "The current playlist is empty, showing a fake song"; qLog(Debug) << "The current playlist is empty, showing a fake song";
// Create a fake song // Create a fake song
Song fake(Song::Source::LocalFile); Song fake(Song::Source::LocalFile);
fake.Init(QStringLiteral("Title"), QStringLiteral("Artist"), QStringLiteral("Album"), 123); fake.Init(u"Title"_s, u"Artist"_s, u"Album"_s, 123);
fake.set_genre(QStringLiteral("Classical")); fake.set_genre(u"Classical"_s);
fake.set_composer(QStringLiteral("Anonymous")); fake.set_composer(u"Anonymous"_s);
fake.set_performer(QStringLiteral("Anonymous")); fake.set_performer(u"Anonymous"_s);
fake.set_track(1); fake.set_track(1);
fake.set_disc(1); fake.set_disc(1);
fake.set_year(2011); fake.set_year(2011);
@ -3142,12 +3142,12 @@ void MainWindow::SetToggleScrobblingIcon(const bool value) {
if (value) { if (value) {
if (app_->playlist_manager()->active() && app_->playlist_manager()->active()->scrobbled()) if (app_->playlist_manager()->active() && app_->playlist_manager()->active()->scrobbled())
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble"), true, 22)); ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(u"scrobble"_s, true, 22));
else else
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble"), true, 22)); // TODO: Create a faint version of the icon ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(u"scrobble"_s, true, 22)); // TODO: Create a faint version of the icon
} }
else { else {
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble-disabled"), true, 22)); ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(u"scrobble-disabled"_s, true, 22));
} }
} }
@ -3193,7 +3193,7 @@ void MainWindow::PlaylistDelete() {
app_->player()->Next(); app_->player()->Next();
} }
SharedPtr<MusicStorage> storage = make_shared<FilesystemMusicStorage>(Song::Source::LocalFile, QStringLiteral("/")); SharedPtr<MusicStorage> storage = make_shared<FilesystemMusicStorage>(Song::Source::LocalFile, u"/"_s);
DeleteFiles *delete_files = new DeleteFiles(app_->task_manager(), storage, true); DeleteFiles *delete_files = new DeleteFiles(app_->task_manager(), storage, true);
QObject::connect(delete_files, &DeleteFiles::Finished, this, &MainWindow::DeleteFilesFinished); QObject::connect(delete_files, &DeleteFiles::Finished, this, &MainWindow::DeleteFilesFinished);
delete_files->Start(selected_songs); delete_files->Start(selected_songs);

View File

@ -33,6 +33,8 @@
#include "networkaccessmanager.h" #include "networkaccessmanager.h"
#include "threadsafenetworkdiskcache.h" #include "threadsafenetworkdiskcache.h"
using namespace Qt::Literals::StringLiterals;
NetworkAccessManager::NetworkAccessManager(QObject *parent) NetworkAccessManager::NetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent) { : QNetworkAccessManager(parent) {
@ -56,7 +58,7 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, const QNetworkR
new_request.setHeader(QNetworkRequest::UserAgentHeader, user_agent); new_request.setHeader(QNetworkRequest::UserAgentHeader, user_agent);
if (op == QNetworkAccessManager::PostOperation && !new_request.header(QNetworkRequest::ContentTypeHeader).isValid()) { if (op == QNetworkAccessManager::PostOperation && !new_request.header(QNetworkRequest::ContentTypeHeader).isValid()) {
new_request.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded")); new_request.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
} }
// Prefer the cache unless the caller has changed the setting already // Prefer the cache unless the caller has changed the setting already

View File

@ -34,12 +34,14 @@
#include "iconloader.h" #include "iconloader.h"
#include "qtsystemtrayicon.h" #include "qtsystemtrayicon.h"
using namespace Qt::Literals::StringLiterals;
SystemTrayIcon::SystemTrayIcon(QObject *parent) SystemTrayIcon::SystemTrayIcon(QObject *parent)
: QSystemTrayIcon(parent), : QSystemTrayIcon(parent),
menu_(new QMenu), menu_(new QMenu),
app_name_(QCoreApplication::applicationName()), app_name_(QCoreApplication::applicationName()),
pixmap_playing_(QStringLiteral(":/pictures/tiny-play.png")), pixmap_playing_(u":/pictures/tiny-play.png"_s),
pixmap_paused_(QStringLiteral(":/pictures/tiny-pause.png")), pixmap_paused_(u":/pictures/tiny-pause.png"_s),
action_play_pause_(nullptr), action_play_pause_(nullptr),
action_stop_(nullptr), action_stop_(nullptr),
action_stop_after_this_track_(nullptr), action_stop_after_this_track_(nullptr),
@ -51,8 +53,8 @@ SystemTrayIcon::SystemTrayIcon(QObject *parent)
app_name_[0] = app_name_[0].toUpper(); app_name_[0] = app_name_[0].toUpper();
const QIcon icon = IconLoader::Load(QStringLiteral("strawberry")); const QIcon icon = IconLoader::Load(u"strawberry"_s);
const QIcon icon_grey = IconLoader::Load(QStringLiteral("strawberry-grey")); const QIcon icon_grey = IconLoader::Load(u"strawberry-grey"_s);
pixmap_normal_ = icon.pixmap(48, QIcon::Normal); pixmap_normal_ = icon.pixmap(48, QIcon::Normal);
if (icon_grey.isNull()) { if (icon_grey.isNull()) {
pixmap_grey_ = icon.pixmap(48, QIcon::Disabled); pixmap_grey_ = icon.pixmap(48, QIcon::Disabled);
@ -143,7 +145,7 @@ void SystemTrayIcon::SetPlaying(bool enable_play_pause) {
action_stop_->setEnabled(true); action_stop_->setEnabled(true);
action_stop_after_this_track_->setEnabled(true); action_stop_after_this_track_->setEnabled(true);
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause"))); action_play_pause_->setIcon(IconLoader::Load(u"media-playback-pause"_s));
action_play_pause_->setText(tr("Pause")); action_play_pause_->setText(tr("Pause"));
action_play_pause_->setEnabled(enable_play_pause); action_play_pause_->setEnabled(enable_play_pause);
@ -156,7 +158,7 @@ void SystemTrayIcon::SetPaused() {
action_stop_->setEnabled(true); action_stop_->setEnabled(true);
action_stop_after_this_track_->setEnabled(true); action_stop_after_this_track_->setEnabled(true);
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); action_play_pause_->setIcon(IconLoader::Load(u"media-playback-start"_s));
action_play_pause_->setText(tr("Play")); action_play_pause_->setText(tr("Play"));
action_play_pause_->setEnabled(true); action_play_pause_->setEnabled(true);
@ -170,7 +172,7 @@ void SystemTrayIcon::SetStopped() {
action_stop_->setEnabled(false); action_stop_->setEnabled(false);
action_stop_after_this_track_->setEnabled(false); action_stop_after_this_track_->setEnabled(false);
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); action_play_pause_->setIcon(IconLoader::Load(u"media-playback-start"_s));
action_play_pause_->setText(tr("Play")); action_play_pause_->setText(tr("Play"));
action_play_pause_->setEnabled(true); action_play_pause_->setEnabled(true);

View File

@ -47,11 +47,9 @@
#include "song.h" #include "song.h"
#include "songloader.h" #include "songloader.h"
#include "database.h" #include "database.h"
#include "sqlrow.h"
#include "engine/enginebase.h" #include "engine/enginebase.h"
#include "tagreader/tagreaderclient.h" #include "tagreader/tagreaderclient.h"
#include "collection/collectionbackend.h" #include "collection/collectionbackend.h"
#include "collection/collectionquery.h"
#include "playlistparsers/cueparser.h" #include "playlistparsers/cueparser.h"
#include "playlistparsers/parserbase.h" #include "playlistparsers/parserbase.h"
#include "playlistparsers/playlistparser.h" #include "playlistparsers/playlistparser.h"
@ -60,6 +58,8 @@
# include "device/cddasongloader.h" # include "device/cddasongloader.h"
#endif #endif
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr int kDefaultTimeout = 5000; constexpr int kDefaultTimeout = 5000;
} }
@ -81,15 +81,15 @@ SongLoader::SongLoader(SharedPtr<CollectionBackendInterface> collection_backend,
success_(false) { success_(false) {
if (sRawUriSchemes.isEmpty()) { if (sRawUriSchemes.isEmpty()) {
sRawUriSchemes << QStringLiteral("udp") sRawUriSchemes << u"udp"_s
<< QStringLiteral("mms") << u"mms"_s
<< QStringLiteral("mmsh") << u"mmsh"_s
<< QStringLiteral("mmst") << u"mmst"_s
<< QStringLiteral("mmsu") << u"mmsu"_s
<< QStringLiteral("rtsp") << u"rtsp"_s
<< QStringLiteral("rtspu") << u"rtspu"_s
<< QStringLiteral("rtspt") << u"rtspt"_s
<< QStringLiteral("rtsph"); << u"rtsph"_s;
} }
timeout_timer_->setSingleShot(true); timeout_timer_->setSingleShot(true);
@ -537,7 +537,7 @@ void SongLoader::TypeFound(GstElement *typefind, const uint probability, GstCaps
// Check the mimetype // Check the mimetype
instance->mime_type_ = QString::fromUtf8(gst_structure_get_name(gst_caps_get_structure(caps, 0))); instance->mime_type_ = QString::fromUtf8(gst_structure_get_name(gst_caps_get_structure(caps, 0)));
qLog(Debug) << "Mime type is" << instance->mime_type_; qLog(Debug) << "Mime type is" << instance->mime_type_;
if (instance->mime_type_ == QStringLiteral("text/plain") || instance->mime_type_ == QStringLiteral("text/uri-list")) { if (instance->mime_type_ == u"text/plain"_s || instance->mime_type_ == u"text/uri-list"_s) {
// Yeah it might be a playlist, let's get some data and have a better look // Yeah it might be a playlist, let's get some data and have a better look
instance->state_ = State::WaitingForMagic; instance->state_ = State::WaitingForMagic;
return; return;
@ -688,10 +688,10 @@ void SongLoader::MagicReady() {
qLog(Debug) << "Magic says" << parser_->name(); qLog(Debug) << "Magic says" << parser_->name();
if (parser_->name() == QStringLiteral("ASX/INI") && url_.scheme() == QStringLiteral("http")) { if (parser_->name() == u"ASX/INI"_s && url_.scheme() == u"http"_s) {
// This is actually a weird MS-WMSP stream. Changing the protocol to MMS from HTTP makes it playable. // This is actually a weird MS-WMSP stream. Changing the protocol to MMS from HTTP makes it playable.
parser_ = nullptr; parser_ = nullptr;
url_.setScheme(QStringLiteral("mms")); url_.setScheme(u"mms"_s);
StopTypefindAsync(true); StopTypefindAsync(true);
} }

View File

@ -95,26 +95,26 @@ void StyleSheetLoader::UpdateStyleSheet(QWidget *widget, SharedPtr<StyleSheetDat
stylesheet.replace("%palette-alternate-base"_L1, QStringLiteral("rgba(%1,%2,%3,%4)").arg(alt.red()).arg(alt.green()).arg(alt.blue()).arg(alt.alpha())); stylesheet.replace("%palette-alternate-base"_L1, QStringLiteral("rgba(%1,%2,%3,%4)").arg(alt.red()).arg(alt.green()).arg(alt.blue()).arg(alt.alpha()));
} }
ReplaceColor(&stylesheet, QStringLiteral("Window"), p, QPalette::Window); ReplaceColor(&stylesheet, u"Window"_s, p, QPalette::Window);
ReplaceColor(&stylesheet, QStringLiteral("Background"), p, QPalette::Window); ReplaceColor(&stylesheet, u"Background"_s, p, QPalette::Window);
ReplaceColor(&stylesheet, QStringLiteral("WindowText"), p, QPalette::WindowText); ReplaceColor(&stylesheet, u"WindowText"_s, p, QPalette::WindowText);
ReplaceColor(&stylesheet, QStringLiteral("Base"), p, QPalette::Base); ReplaceColor(&stylesheet, u"Base"_s, p, QPalette::Base);
ReplaceColor(&stylesheet, QStringLiteral("AlternateBase"), p, QPalette::AlternateBase); ReplaceColor(&stylesheet, u"AlternateBase"_s, p, QPalette::AlternateBase);
ReplaceColor(&stylesheet, QStringLiteral("ToolTipBase"), p, QPalette::ToolTipBase); ReplaceColor(&stylesheet, u"ToolTipBase"_s, p, QPalette::ToolTipBase);
ReplaceColor(&stylesheet, QStringLiteral("ToolTipText"), p, QPalette::ToolTipText); ReplaceColor(&stylesheet, u"ToolTipText"_s, p, QPalette::ToolTipText);
ReplaceColor(&stylesheet, QStringLiteral("Text"), p, QPalette::Text); ReplaceColor(&stylesheet, u"Text"_s, p, QPalette::Text);
ReplaceColor(&stylesheet, QStringLiteral("Button"), p, QPalette::Button); ReplaceColor(&stylesheet, u"Button"_s, p, QPalette::Button);
ReplaceColor(&stylesheet, QStringLiteral("ButtonText"), p, QPalette::ButtonText); ReplaceColor(&stylesheet, u"ButtonText"_s, p, QPalette::ButtonText);
ReplaceColor(&stylesheet, QStringLiteral("BrightText"), p, QPalette::BrightText); ReplaceColor(&stylesheet, u"BrightText"_s, p, QPalette::BrightText);
ReplaceColor(&stylesheet, QStringLiteral("Light"), p, QPalette::Light); ReplaceColor(&stylesheet, u"Light"_s, p, QPalette::Light);
ReplaceColor(&stylesheet, QStringLiteral("Midlight"), p, QPalette::Midlight); ReplaceColor(&stylesheet, u"Midlight"_s, p, QPalette::Midlight);
ReplaceColor(&stylesheet, QStringLiteral("Dark"), p, QPalette::Dark); ReplaceColor(&stylesheet, u"Dark"_s, p, QPalette::Dark);
ReplaceColor(&stylesheet, QStringLiteral("Mid"), p, QPalette::Mid); ReplaceColor(&stylesheet, u"Mid"_s, p, QPalette::Mid);
ReplaceColor(&stylesheet, QStringLiteral("Shadow"), p, QPalette::Shadow); ReplaceColor(&stylesheet, u"Shadow"_s, p, QPalette::Shadow);
ReplaceColor(&stylesheet, QStringLiteral("Highlight"), p, QPalette::Highlight); ReplaceColor(&stylesheet, u"Highlight"_s, p, QPalette::Highlight);
ReplaceColor(&stylesheet, QStringLiteral("HighlightedText"), p, QPalette::HighlightedText); ReplaceColor(&stylesheet, u"HighlightedText"_s, p, QPalette::HighlightedText);
ReplaceColor(&stylesheet, QStringLiteral("Link"), p, QPalette::Link); ReplaceColor(&stylesheet, u"Link"_s, p, QPalette::Link);
ReplaceColor(&stylesheet, QStringLiteral("LinkVisited"), p, QPalette::LinkVisited); ReplaceColor(&stylesheet, u"LinkVisited"_s, p, QPalette::LinkVisited);
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS
stylesheet.replace(QLatin1String("macos"), QLatin1String("*")); stylesheet.replace(QLatin1String("macos"), QLatin1String("*"));
@ -129,9 +129,9 @@ void StyleSheetLoader::UpdateStyleSheet(QWidget *widget, SharedPtr<StyleSheetDat
void StyleSheetLoader::ReplaceColor(QString *css, const QString &name, const QPalette &palette, const QPalette::ColorRole role) { void StyleSheetLoader::ReplaceColor(QString *css, const QString &name, const QPalette &palette, const QPalette::ColorRole role) {
css->replace(QStringLiteral("%palette-") + name + QStringLiteral("-lighter"), palette.color(role).lighter().name(), Qt::CaseInsensitive); css->replace(u"%palette-"_s + name + u"-lighter"_s, palette.color(role).lighter().name(), Qt::CaseInsensitive);
css->replace(QStringLiteral("%palette-") + name + QStringLiteral("-darker"), palette.color(role).darker().name(), Qt::CaseInsensitive); css->replace(u"%palette-"_s + name + u"-darker"_s, palette.color(role).darker().name(), Qt::CaseInsensitive);
css->replace(QStringLiteral("%palette-") + name, palette.color(role).name(), Qt::CaseInsensitive); css->replace(u"%palette-"_s + name, palette.color(role).name(), Qt::CaseInsensitive);
} }

View File

@ -25,6 +25,8 @@
#include "temporaryfile.h" #include "temporaryfile.h"
using namespace Qt::Literals::StringLiterals;
TemporaryFile::TemporaryFile(const QString &filename_pattern) { TemporaryFile::TemporaryFile(const QString &filename_pattern) {
int i = 0; int i = 0;
@ -56,7 +58,7 @@ TemporaryFile::~TemporaryFile() {
QString TemporaryFile::GenerateFilename(const QString &filename_pattern) const { QString TemporaryFile::GenerateFilename(const QString &filename_pattern) const {
static const QString random_chars = QStringLiteral("abcdefghijklmnopqrstuvwxyz0123456789"); static const QString random_chars = u"abcdefghijklmnopqrstuvwxyz0123456789"_s;
QString filename = filename_pattern; QString filename = filename_pattern;

View File

@ -34,6 +34,8 @@
#include "threadsafenetworkdiskcache.h" #include "threadsafenetworkdiskcache.h"
using namespace Qt::Literals::StringLiterals;
QMutex ThreadSafeNetworkDiskCache::sMutex; QMutex ThreadSafeNetworkDiskCache::sMutex;
int ThreadSafeNetworkDiskCache::sInstances = 0; int ThreadSafeNetworkDiskCache::sInstances = 0;
QNetworkDiskCache *ThreadSafeNetworkDiskCache::sCache = nullptr; QNetworkDiskCache *ThreadSafeNetworkDiskCache::sCache = nullptr;
@ -46,9 +48,9 @@ ThreadSafeNetworkDiskCache::ThreadSafeNetworkDiskCache(QObject *parent) : QAbstr
if (!sCache) { if (!sCache) {
sCache = new QNetworkDiskCache; sCache = new QNetworkDiskCache;
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
sCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + QStringLiteral("/strawberry/networkcache")); sCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + u"/strawberry/networkcache"_s);
#else #else
sCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/networkcache")); sCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + u"/networkcache"_s);
#endif #endif
} }

View File

@ -106,16 +106,16 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget *parent)
search_cover_auto_(nullptr), search_cover_auto_(nullptr),
save_embedded_cover_override_(false) { save_embedded_cover_override_(false) {
cover_from_file_ = new QAction(IconLoader::Load(QStringLiteral("document-open")), tr("Load cover from disk..."), 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(QStringLiteral("document-save")), tr("Save cover to 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(QStringLiteral("download")), tr("Load cover from URL..."), this); cover_from_url_ = new QAction(IconLoader::Load(u"download"_s), tr("Load cover from URL..."), this);
search_for_cover_ = new QAction(IconLoader::Load(QStringLiteral("search")), tr("Search for album covers..."), this); search_for_cover_ = new QAction(IconLoader::Load(u"search"_s), tr("Search for album covers..."), this);
unset_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Unset cover"), this); unset_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Unset cover"), this);
delete_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Delete cover"), this); delete_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Delete cover"), this);
clear_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Clear cover"), this); clear_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Clear cover"), this);
separator1_ = new QAction(this); separator1_ = new QAction(this);
separator1_->setSeparator(true); 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_ = new QAction(tr("Search automatically"), this);
search_cover_auto_->setCheckable(true); search_cover_auto_->setCheckable(true);
@ -135,7 +135,7 @@ void AlbumCoverChoiceController::Init(Application *app) {
app_ = app; app_ = app;
cover_fetcher_ = new AlbumCoverFetcher(app_->cover_providers(), app->network(), this); 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_); cover_searcher_->Init(cover_fetcher_);
QObject::connect(cover_fetcher_, &AlbumCoverFetcher::AlbumCoverFetched, this, &AlbumCoverChoiceController::AlbumCoverFetched); QObject::connect(cover_fetcher_, &AlbumCoverFetcher::AlbumCoverFetched, this, &AlbumCoverChoiceController::AlbumCoverFetched);
@ -148,7 +148,7 @@ void AlbumCoverChoiceController::ReloadSettings() {
s.beginGroup(CoversSettingsPage::kSettingsGroup); 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_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_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_overwrite = s.value(CoversSettingsPage::kSaveOverwrite, false).toBool();
cover_options_.cover_lowercase = s.value(CoversSettingsPage::kSaveLowercase, false).toBool(); cover_options_.cover_lowercase = s.value(CoversSettingsPage::kSaveLowercase, false).toBool();
cover_options_.cover_replace_spaces = s.value(CoversSettingsPage::kSaveReplaceSpaces, false).toBool(); cover_options_.cover_replace_spaces = s.value(CoversSettingsPage::kSaveReplaceSpaces, false).toBool();
@ -179,7 +179,7 @@ AlbumCoverImageResult AlbumCoverChoiceController::LoadImageFromFile(Song *song)
return AlbumCoverImageResult(); 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(); if (cover_file.isEmpty()) return AlbumCoverImageResult();
QFile file(cover_file); 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(); 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(); if (cover_file.isEmpty() || QImage(cover_file).isNull()) return QUrl();
switch (get_save_album_cover_type()) { 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 + QLatin1Char('-') + (song.effective_album().isEmpty() ? tr("unknown") : song.effective_album()) + ".jpg"_L1;
initial_file_name = initial_file_name.toLower(); initial_file_name = initial_file_name.toLower();
static const QRegularExpression regex_whitespaces(QStringLiteral("\\s")); static const QRegularExpression regex_whitespaces(u"\\s"_s);
initial_file_name.replace(regex_whitespaces, QStringLiteral("-")); initial_file_name.replace(regex_whitespaces, u"-"_s);
static const QRegularExpression regex_invalid_fat_characters(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption); static const QRegularExpression regex_invalid_fat_characters(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption);
initial_file_name.remove(regex_invalid_fat_characters); 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; if (save_filename.isEmpty()) return;
@ -659,7 +659,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou
const AlbumCoverImageResult &result, const AlbumCoverImageResult &result,
const bool force_overwrite) { 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(); if (filepath.isEmpty()) return QUrl();
QFile file(filepath); QFile file(filepath);
@ -745,7 +745,7 @@ bool AlbumCoverChoiceController::IsKnownImageExtension(const QString &suffix) {
if (!sImageExtensions) { if (!sImageExtensions) {
sImageExtensions = new QSet<QString>(); 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); return sImageExtensions->contains(suffix);

View File

@ -59,7 +59,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
s.beginGroup(kSettingsGroup); s.beginGroup(kSettingsGroup);
// Restore last accepted settings // 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_->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_->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); 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_) { if (!result.cancelled_) {
QString fileName = ui_->fileName->text(); QString fileName = ui_->fileName->text();
if (fileName.isEmpty()) { 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); OverwriteMode overwrite_mode = ui_->doNotOverwrite->isChecked() ? OverwriteMode::None : (ui_->overwriteAll->isChecked() ? OverwriteMode::All : OverwriteMode::Smaller);
bool forceSize = ui_->forceSize->isChecked(); bool forceSize = ui_->forceSize->isChecked();

View File

@ -38,7 +38,7 @@ AlbumCoverLoaderOptions::Types AlbumCoverLoaderOptions::LoadTypes() {
Settings s; Settings s;
s.beginGroup(CoversSettingsPage::kSettingsGroup); 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(); const QStringList cover_types_strlist = s.value(CoversSettingsPage::kTypes, all_cover_types).toStringList();
for (const QString &cover_type_str : cover_types_strlist) { for (const QString &cover_type_str : cover_types_strlist) {
if (cover_type_str == "art_unset"_L1) { if (cover_type_str == "art_unset"_L1) {

View File

@ -67,7 +67,6 @@
#include "core/application.h" #include "core/application.h"
#include "core/iconloader.h" #include "core/iconloader.h"
#include "core/database.h" #include "core/database.h"
#include "core/sqlrow.h"
#include "core/settings.h" #include "core/settings.h"
#include "utilities/strutils.h" #include "utilities/strutils.h"
#include "utilities/fileutils.h" #include "utilities/fileutils.h"
@ -118,8 +117,8 @@ AlbumCoverManager::AlbumCoverManager(Application *app, SharedPtr<CollectionBacke
cover_searcher_(nullptr), cover_searcher_(nullptr),
cover_export_(nullptr), cover_export_(nullptr),
cover_exporter_(new AlbumCoverExporter(this)), cover_exporter_(new AlbumCoverExporter(this)),
artist_icon_(IconLoader::Load(QStringLiteral("folder-sound"))), artist_icon_(IconLoader::Load(u"folder-sound"_s)),
all_artists_icon_(IconLoader::Load(QStringLiteral("library-music"))), all_artists_icon_(IconLoader::Load(u"library-music"_s)),
image_nocover_thumbnail_(ImageUtils::GenerateNoCoverImage(QSize(120, 120), devicePixelRatio())), image_nocover_thumbnail_(ImageUtils::GenerateNoCoverImage(QSize(120, 120), devicePixelRatio())),
icon_nocover_item_(QPixmap::fromImage(image_nocover_thumbnail_)), icon_nocover_item_(QPixmap::fromImage(image_nocover_thumbnail_)),
context_menu_(new QMenu(this)), 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); QObject::connect(timer_album_cover_load_, &QTimer::timeout, this, &AlbumCoverManager::LoadAlbumCovers);
// Icons // Icons
ui_->action_fetch->setIcon(IconLoader::Load(QStringLiteral("download"))); ui_->action_fetch->setIcon(IconLoader::Load(u"download"_s));
ui_->export_covers->setIcon(IconLoader::Load(QStringLiteral("document-save"))); ui_->export_covers->setIcon(IconLoader::Load(u"document-save"_s));
ui_->view->setIcon(IconLoader::Load(QStringLiteral("view-choose"))); ui_->view->setIcon(IconLoader::Load(u"view-choose"_s));
ui_->button_fetch->setIcon(IconLoader::Load(QStringLiteral("download"))); ui_->button_fetch->setIcon(IconLoader::Load(u"download"_s));
ui_->action_add_to_playlist->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); ui_->action_add_to_playlist->setIcon(IconLoader::Load(u"media-playback-start"_s));
ui_->action_load->setIcon(IconLoader::Load(QStringLiteral("media-playback-start"))); ui_->action_load->setIcon(IconLoader::Load(u"media-playback-start"_s));
album_cover_choice_controller_->Init(app_); album_cover_choice_controller_->Init(app_);
@ -921,12 +920,12 @@ SongList AlbumCoverManager::GetSongsInAlbum(const QModelIndex &idx) const {
CollectionQuery q(db, collection_backend_->songs_table()); CollectionQuery q(db, collection_backend_->songs_table());
q.SetColumnSpec(Song::kRowIdColumnSpec); q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("album"), idx.data(Role_Album).toString()); q.AddWhere(u"album"_s, idx.data(Role_Album).toString());
q.SetOrderBy(QStringLiteral("disc, track, title")); q.SetOrderBy(u"disc, track, title"_s);
QString albumartist = idx.data(Role_AlbumArtist).toString(); QString albumartist = idx.data(Role_AlbumArtist).toString();
if (!albumartist.isEmpty()) { if (!albumartist.isEmpty()) {
q.AddWhere(QStringLiteral("effective_albumartist"), albumartist); q.AddWhere(u"effective_albumartist"_s, albumartist);
} }
q.AddCompilationRequirement(albumartist.isEmpty()); q.AddCompilationRequirement(albumartist.isEmpty());

View File

@ -62,6 +62,8 @@
#include "albumcoverimageresult.h" #include "albumcoverimageresult.h"
#include "ui_albumcoversearcher.h" #include "ui_albumcoversearcher.h"
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr int kMargin = 4; constexpr int kMargin = 4;
constexpr int kPaddingX = 3; constexpr int kPaddingX = 3;
@ -222,7 +224,7 @@ void AlbumCoverSearcher::SearchFinished(const quint64 id, const CoverProviderSea
QStandardItem *item = new QStandardItem; QStandardItem *item = new QStandardItem;
item->setIcon(no_cover_icon_); 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(result.image_url, Role_ImageURL);
item->setData(new_id, Role_ImageRequestId); item->setData(new_id, Role_ImageRequestId);
item->setData(false, Role_ImageFetchFinished); item->setData(false, Role_ImageFetchFinished);

View File

@ -27,6 +27,8 @@
#include "coversearchstatistics.h" #include "coversearchstatistics.h"
using namespace Qt::Literals::StringLiterals;
CoverSearchStatistics::CoverSearchStatistics() CoverSearchStatistics::CoverSearchStatistics()
: network_requests_made_(0), : network_requests_made_(0),
bytes_transferred_(0), bytes_transferred_(0),
@ -62,7 +64,7 @@ CoverSearchStatistics &CoverSearchStatistics::operator+=(const CoverSearchStatis
QString CoverSearchStatistics::AverageDimensions() const { QString CoverSearchStatistics::AverageDimensions() const {
if (chosen_images_ == 0) { 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_); return QString::number(chosen_width_ / chosen_images_) + QLatin1Char('x') + QString::number(chosen_height_ / chosen_images_);

View File

@ -36,6 +36,8 @@
#include "coversearchstatisticsdialog.h" #include "coversearchstatisticsdialog.h"
#include "ui_coversearchstatisticsdialog.h" #include "ui_coversearchstatisticsdialog.h"
using namespace Qt::Literals::StringLiterals;
CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent) CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
: QDialog(parent), ui_(new Ui_CoverSearchStatisticsDialog) { : QDialog(parent), ui_(new Ui_CoverSearchStatisticsDialog) {
@ -44,7 +46,7 @@ CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
details_layout_->setSpacing(0); details_layout_->setSpacing(0);
setStyleSheet( setStyleSheet(
QStringLiteral("#details {" u"#details {"
" background-color: palette(base);" " background-color: palette(base);"
"}" "}"
"#details QLabel[type=\"label\"] {" "#details QLabel[type=\"label\"] {"
@ -55,7 +57,7 @@ CoverSearchStatisticsDialog::CoverSearchStatisticsDialog(QWidget *parent)
"#details QLabel[type=\"value\"] {" "#details QLabel[type=\"value\"] {"
" font-weight: bold;" " font-weight: bold;"
" max-width: 100px;" " max-width: 100px;"
"}")); "}"_s);
} }
CoverSearchStatisticsDialog::~CoverSearchStatisticsDialog() { delete ui_; } 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("Total network requests made"), QString::number(statistics.network_requests_made_));
AddLine(tr("Average image size"), statistics.AverageDimensions()); 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(); details_layout_->addStretch();
@ -93,8 +95,8 @@ void CoverSearchStatisticsDialog::AddLine(const QString &label, const QString &v
QLabel *label1 = new QLabel(label); QLabel *label1 = new QLabel(label);
QLabel *label2 = new QLabel(value); QLabel *label2 = new QLabel(value);
label1->setProperty("type", QStringLiteral("label")); label1->setProperty("type", u"label"_s);
label2->setProperty("type", QStringLiteral("value")); label2->setProperty("type", u"value"_s);
QHBoxLayout *layout = new QHBoxLayout; QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label1); layout->addWidget(label1);

View File

@ -38,18 +38,19 @@
#include "currentalbumcoverloader.h" #include "currentalbumcoverloader.h"
using std::make_unique; using std::make_unique;
using namespace Qt::Literals::StringLiterals;
CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *parent) CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *parent)
: QObject(parent), : QObject(parent),
app_(app), 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) { id_(0) {
setObjectName(QLatin1String(metaObject()->className())); setObjectName(QLatin1String(metaObject()->className()));
options_.options = AlbumCoverLoaderOptions::Option::RawImageData | AlbumCoverLoaderOptions::Option::OriginalImage | AlbumCoverLoaderOptions::Option::ScaledImage; options_.options = AlbumCoverLoaderOptions::Option::RawImageData | AlbumCoverLoaderOptions::Option::OriginalImage | AlbumCoverLoaderOptions::Option::ScaledImage;
options_.desired_scaled_size = QSize(120, 120); 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_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover);
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady); QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady);

View File

@ -56,7 +56,7 @@ constexpr int kLimit = 10;
} }
DeezerCoverProvider::DeezerCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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() { DeezerCoverProvider::~DeezerCoverProvider() {
@ -88,9 +88,9 @@ bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &albu
} }
} }
const ParamList params = ParamList() << Param(QStringLiteral("output"), QStringLiteral("json")) const ParamList params = ParamList() << Param(u"output"_s, u"json"_s)
<< Param(QStringLiteral("q"), query) << Param(u"q"_s, query)
<< Param(QStringLiteral("limit"), QString::number(kLimit)); << Param(u"limit"_s, QString::number(kLimit));
QUrlQuery url_query; QUrlQuery url_query;
for (const Param &param : params) { for (const Param &param : params) {
@ -167,7 +167,7 @@ QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) {
if (json_obj.contains("error"_L1)) { if (json_obj.contains("error"_L1)) {
QJsonValue value_error = json_obj["error"_L1]; QJsonValue value_error = json_obj["error"_L1];
if (!value_error.isObject()) { if (!value_error.isObject()) {
Error(QStringLiteral("Error missing object"), json_obj); Error(u"Error missing object"_s, json_obj);
return QJsonValue(); return QJsonValue();
} }
QJsonObject obj_error = value_error.toObject(); 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)) { 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(); return QJsonValue();
} }
@ -220,7 +220,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
for (const QJsonValue &json_value : std::as_const(array_data)) { for (const QJsonValue &json_value : std::as_const(array_data)) {
if (!json_value.isObject()) { 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; continue;
} }
QJsonObject json_obj = json_value.toObject(); 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)) { 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; continue;
} }
if (!obj_album.contains("type"_L1)) { 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; continue;
} }
QString type = obj_album["type"_L1].toString(); QString type = obj_album["type"_L1].toString();
if (type != "album"_L1) { 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; continue;
} }
if (!json_obj.contains("artist"_L1)) { 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; continue;
} }
QJsonValue value_artist = json_obj["artist"_L1]; QJsonValue value_artist = json_obj["artist"_L1];
if (!value_artist.isObject()) { 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; continue;
} }
QJsonObject obj_artist = value_artist.toObject(); QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) { 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; continue;
} }
QString artist = obj_artist["name"_L1].toString(); QString artist = obj_artist["name"_L1].toString();
if (!obj_album.contains("title"_L1)) { 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; continue;
} }
QString album = obj_album["title"_L1].toString(); 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); cover_result.album = Song::AlbumRemoveDiscMisc(album);
bool have_cover = false; bool have_cover = false;
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("cover_xl"), QSize(1000, 1000)) const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"cover_xl"_s, QSize(1000, 1000))
<< qMakePair(QStringLiteral("cover_big"), QSize(500, 500)); << qMakePair(u"cover_big"_s, QSize(500, 500));
for (const QPair<QString, QSize> &cover_size : cover_sizes) { for (const QPair<QString, QSize> &cover_size : cover_sizes) {
if (!obj_album.contains(cover_size.first)) continue; if (!obj_album.contains(cover_size.first)) continue;
QString cover = obj_album[cover_size.first].toString(); QString cover = obj_album[cover_size.first].toString();
@ -294,7 +294,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
} }
if (!have_cover) { 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);
} }
} }

View File

@ -59,7 +59,7 @@ const char *DiscogsCoverProvider::kSecretKeyB64 = "ZkFIcmlaSER4aHhRSlF2U3d0bm5ZV
const int DiscogsCoverProvider::kRequestsDelay = 1000; const int DiscogsCoverProvider::kRequestsDelay = 1000;
DiscogsCoverProvider::DiscogsCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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_(new QTimer(this)) {
timer_flush_requests_->setInterval(kRequestsDelay); timer_flush_requests_->setInterval(kRequestsDelay);
@ -127,16 +127,16 @@ void DiscogsCoverProvider::FlushRequests() {
void DiscogsCoverProvider::SendSearchRequest(SharedPtr<DiscogsCoverSearchContext> search) { void DiscogsCoverProvider::SendSearchRequest(SharedPtr<DiscogsCoverSearchContext> search) {
ParamList params = ParamList() << Param(QStringLiteral("format"), QStringLiteral("album")) ParamList params = ParamList() << Param(u"format"_s, u"album"_s)
<< Param(QStringLiteral("artist"), search->artist.toLower()) << Param(u"artist"_s, search->artist.toLower())
<< Param(QStringLiteral("release_title"), search->album.toLower()); << Param(u"release_title"_s, search->album.toLower());
switch (search->type) { switch (search->type) {
case DiscogsCoverType::Master: case DiscogsCoverType::Master:
params << Param(QStringLiteral("type"), QStringLiteral("master")); params << Param(u"type"_s, u"master"_s);
break; break;
case DiscogsCoverType::Release: case DiscogsCoverType::Release:
params << Param(QStringLiteral("type"), QStringLiteral("release")); params << Param(u"type"_s, u"release"_s);
break; break;
} }
@ -147,8 +147,8 @@ void DiscogsCoverProvider::SendSearchRequest(SharedPtr<DiscogsCoverSearchContext
QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList &params_provided) { QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList &params_provided) {
const ParamList params = ParamList() << Param(QStringLiteral("key"), QString::fromLatin1(QByteArray::fromBase64(kAccessKeyB64))) const ParamList params = ParamList() << Param(u"key"_s, QString::fromLatin1(QByteArray::fromBase64(kAccessKeyB64)))
<< Param(QStringLiteral("secret"), QString::fromLatin1(QByteArray::fromBase64(kSecretKeyB64))) << Param(u"secret"_s, QString::fromLatin1(QByteArray::fromBase64(kSecretKeyB64)))
<< params_provided; << params_provided;
QUrlQuery url_query; 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)); const QByteArray signature(Utilities::HmacSha256(QByteArray::fromBase64(kSecretKeyB64), data_to_sign));
// Add the signature to the request // 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); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
@ -256,13 +256,13 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
return; return;
} }
else { else {
Error(QStringLiteral("Json object is missing results."), json_obj); Error(u"Json object is missing results."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!value_results.isArray()) { if (!value_results.isArray()) {
Error(QStringLiteral("Missing results array."), value_results); Error(u"Missing results array."_s, value_results);
EndSearch(search); EndSearch(search);
return; return;
} }
@ -271,7 +271,7 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
for (const QJsonValue &value_result : array_results) { for (const QJsonValue &value_result : array_results) {
if (!value_result.isObject()) { 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; continue;
} }
QJsonObject obj_result = value_result.toObject(); 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(); QString title = obj_result["title"_L1].toString();
if (title.contains(" - "_L1)) { if (title.contains(" - "_L1)) {
QStringList title_splitted = title.split(QStringLiteral(" - ")); QStringList title_splitted = title.split(u" - "_s);
if (title_splitted.count() == 2) { if (title_splitted.count() == 2) {
QString artist = title_splitted.first(); QString artist = title_splitted.first();
title = title_splitted.last(); 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)) { 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); EndSearch(search, release.id);
return; return;
} }
@ -368,7 +368,7 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
QJsonValue value_artists = json_obj["artists"_L1]; QJsonValue value_artists = json_obj["artists"_L1];
if (!value_artists.isArray()) { 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); EndSearch(search, release.id);
return; return;
} }
@ -377,12 +377,12 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
QString artist; QString artist;
for (const QJsonValue &value_artist : array_artists) { for (const QJsonValue &value_artist : array_artists) {
if (!value_artist.isObject()) { 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; continue;
} }
QJsonObject obj_artist = value_artist.toObject(); QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) { 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; continue;
} }
artist = obj_artist["name"_L1].toString(); 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]; QJsonValue value_images = json_obj["images"_L1];
if (!value_images.isArray()) { 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); EndSearch(search, release.id);
return; return;
} }
const QJsonArray array_images = value_images.toArray(); const QJsonArray array_images = value_images.toArray();
if (array_images.isEmpty()) { 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); EndSearch(search, release.id);
return; return;
} }
@ -419,12 +419,12 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
for (const QJsonValue &value_image : array_images) { for (const QJsonValue &value_image : array_images) {
if (!value_image.isObject()) { 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; continue;
} }
QJsonObject obj_image = value_image.toObject(); 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)) { 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; continue;
} }
QString type = obj_image["type"_L1].toString(); QString type = obj_image["type"_L1].toString();

View File

@ -31,6 +31,8 @@
#include "coverprovider.h" #include "coverprovider.h"
#include "jsoncoverprovider.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) 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) {} : 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()) { if (json_doc.isEmpty()) {
Error(QStringLiteral("Received empty Json document."), data); Error(u"Received empty Json document."_s, data);
return QJsonObject(); return QJsonObject();
} }
if (!json_doc.isObject()) { 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(); return QJsonObject();
} }
QJsonObject json_obj = json_doc.object(); QJsonObject json_obj = json_doc.object();
if (json_obj.isEmpty()) { if (json_obj.isEmpty()) {
Error(QStringLiteral("Received empty Json object."), json_doc); Error(u"Received empty Json object."_s, json_doc);
return QJsonObject(); return QJsonObject();
} }

View File

@ -56,7 +56,7 @@ constexpr char kSecret[] = "80fd738f49596e9709b1bf9319c444a8";
} // namespace } // namespace
LastFmCoverProvider::LastFmCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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() { LastFmCoverProvider::~LastFmCoverProvider() {
@ -91,9 +91,9 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu
} }
} }
ParamList params = ParamList() << Param(QStringLiteral("api_key"), QLatin1String(kApiKey)) ParamList params = ParamList() << Param(u"api_key"_s, QLatin1String(kApiKey))
<< Param(QStringLiteral("lang"), QLocale().name().left(2).toLower()) << Param(u"lang"_s, QLocale().name().left(2).toLower())
<< Param(QStringLiteral("method"), method) << Param(u"method"_s, method)
<< Param(type, query); << Param(type, query);
std::sort(params.begin(), params.end()); 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); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5);
QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower(); 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(u"api_sig"_s)), 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"format"_s)), QString::fromLatin1(QUrl::toPercentEncoding(u"json"_s)));
QUrl url(QString::fromLatin1(kUrl)); QUrl url(QString::fromLatin1(kUrl));
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); 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()); QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
replies_ << reply; replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, type]() { QueryFinished(reply, id, type); }); 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; return;
} }
else { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
if (!value_results.isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
QJsonObject obj_results = value_results.toObject(); QJsonObject obj_results = value_results.toObject();
if (obj_results.isEmpty()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -182,7 +182,7 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
value_matches = obj_results["albummatches"_L1]; value_matches = obj_results["albummatches"_L1];
} }
else { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -192,21 +192,21 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
value_matches = obj_results["trackmatches"_L1]; value_matches = obj_results["trackmatches"_L1];
} }
else { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
} }
if (!value_matches.isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
QJsonObject obj_matches = value_matches.toObject(); QJsonObject obj_matches = value_matches.toObject();
if (obj_matches.isEmpty()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -220,7 +220,7 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
value_type = obj_matches[type]; value_type = obj_matches[type];
if (!value_type.isArray()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -229,12 +229,12 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
for (const QJsonValue &value : array_type) { for (const QJsonValue &value : array_type) {
if (!value.isObject()) { 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; continue;
} }
QJsonObject obj = value.toObject(); QJsonObject obj = value.toObject();
if (!obj.contains("artist"_L1) || !obj.contains("image"_L1) || !obj.contains("name"_L1)) { 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; continue;
} }
QString artist = obj["artist"_L1].toString(); 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]; QJsonValue json_image = obj["image"_L1];
if (!json_image.isArray()) { 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; continue;
} }
const QJsonArray array_image = json_image.toArray(); 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; LastFmImageSize image_size_use = LastFmImageSize::Unknown;
for (const QJsonValue &value_image : array_image) { for (const QJsonValue &value_image : array_image) {
if (!value_image.isObject()) { 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; continue;
} }
QJsonObject obj_image = value_image.toObject(); QJsonObject obj_image = value_image.toObject();
if (!obj_image.contains("#text"_L1) || !obj_image.contains("size"_L1)) { 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; continue;
} }
QString image_url = obj_image["#text"_L1].toString(); QString image_url = obj_image["#text"_L1].toString();

View File

@ -54,7 +54,7 @@ constexpr int kRequestsDelay = 1000;
} // namespace } // namespace
MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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_(new QTimer(this)) {
timer_flush_requests_->setInterval(kRequestsDelay); 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)); QString query = QStringLiteral("release:\"%1\" AND artist:\"%2\"").arg(request.album.trimmed().replace(u'"', "\""_L1), request.artist.trimmed().replace(u'"', "\""_L1));
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("query"), query); url_query.addQueryItem(u"query"_s, query);
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit)); url_query.addQueryItem(u"limit"_s, QString::number(kLimit));
url_query.addQueryItem(QStringLiteral("fmt"), QStringLiteral("json")); url_query.addQueryItem(u"fmt"_s, u"json"_s);
QUrl url(QString::fromLatin1(kReleaseSearchUrl)); QUrl url(QString::fromLatin1(kReleaseSearchUrl));
url.setQuery(url_query); url.setQuery(url_query);
@ -148,7 +148,7 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
Error(error); Error(error);
} }
else { 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); Q_EMIT SearchFinished(search_id, results);
return; return;
@ -156,7 +156,7 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
QJsonValue value_releases = json_obj["releases"_L1]; QJsonValue value_releases = json_obj["releases"_L1];
if (!value_releases.isArray()) { 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); Q_EMIT SearchFinished(search_id, results);
return; return;
} }
@ -170,18 +170,18 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
for (const QJsonValue &value_release : array_releases) { for (const QJsonValue &value_release : array_releases) {
if (!value_release.isObject()) { 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; continue;
} }
QJsonObject obj_release = value_release.toObject(); QJsonObject obj_release = value_release.toObject();
if (!obj_release.contains("id"_L1) || !obj_release.contains("artist-credit"_L1) || !obj_release.contains("title"_L1)) { 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; continue;
} }
QJsonValue json_artists = obj_release["artist-credit"_L1]; QJsonValue json_artists = obj_release["artist-credit"_L1];
if (!json_artists.isArray()) { 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; continue;
} }
const QJsonArray array_artists = json_artists.toArray(); const QJsonArray array_artists = json_artists.toArray();
@ -189,24 +189,24 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
QString artist; QString artist;
for (const QJsonValue &value_artist : array_artists) { for (const QJsonValue &value_artist : array_artists) {
if (!value_artist.isObject()) { 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; continue;
} }
QJsonObject obj_artist = value_artist.toObject(); QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("artist"_L1)) { 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; continue;
} }
QJsonValue value_artist2 = obj_artist["artist"_L1]; QJsonValue value_artist2 = obj_artist["artist"_L1];
if (!value_artist2.isObject()) { 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; continue;
} }
QJsonObject obj_artist2 = value_artist2.toObject(); QJsonObject obj_artist2 = value_artist2.toObject();
if (!obj_artist2.contains("name"_L1)) { 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; continue;
} }
artist = obj_artist2["name"_L1].toString(); artist = obj_artist2["name"_L1].toString();

View File

@ -43,7 +43,7 @@
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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() { MusixmatchCoverProvider::~MusixmatchCoverProvider() {
@ -104,7 +104,7 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
const QByteArray data = reply->readAll(); const QByteArray data = reply->readAll();
if (data.isEmpty()) { if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server.")); Error(u"Empty reply received from server."_s);
Q_EMIT SearchFinished(id, results); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -130,7 +130,7 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
return; 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. if (content_json.contains(regex_html_tag)) { // Make sure it's not HTML code.
Q_EMIT SearchFinished(id, results); Q_EMIT SearchFinished(id, results);
return; return;
@ -146,54 +146,54 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
} }
if (json_doc.isEmpty()) { if (json_doc.isEmpty()) {
Error(QStringLiteral("Received empty Json document."), data); Error(u"Received empty Json document."_s, data);
Q_EMIT SearchFinished(id, results); Q_EMIT SearchFinished(id, results);
return; return;
} }
if (!json_doc.isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
QJsonObject obj_data = json_doc.object(); QJsonObject obj_data = json_doc.object();
if (obj_data.isEmpty()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
if (!obj_data.contains("props"_L1) || !obj_data["props"_L1].isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
obj_data = obj_data["props"_L1].toObject(); obj_data = obj_data["props"_L1].toObject();
if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
obj_data = obj_data["pageProps"_L1].toObject(); obj_data = obj_data["pageProps"_L1].toObject();
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
obj_data = obj_data["data"_L1].toObject(); obj_data = obj_data["data"_L1].toObject();
if (!obj_data.contains("albumGet"_L1) || !obj_data["albumGet"_L1].isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
obj_data = obj_data["albumGet"_L1].toObject(); obj_data = obj_data["albumGet"_L1].toObject();
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -212,9 +212,9 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
return; return;
} }
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("coverImage800x800"), QSize(800, 800)) const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"coverImage800x800"_s, QSize(800, 800))
<< qMakePair(QStringLiteral("coverImage500x500"), QSize(500, 500)) << qMakePair(u"coverImage500x500"_s, QSize(500, 500))
<< qMakePair(QStringLiteral("coverImage350x350"), QSize(350, 350)); << qMakePair(u"coverImage350x350"_s, QSize(350, 350));
for (const QPair<QString, QSize> &cover_size : cover_sizes) { for (const QPair<QString, QSize> &cover_size : cover_sizes) {
if (!obj_data.contains(cover_size.first)) continue; if (!obj_data.contains(cover_size.first)) continue;

View File

@ -62,7 +62,7 @@ constexpr const int kRequestsDelay = 1000;
using std::make_shared; using std::make_shared;
OpenTidalCoverProvider::OpenTidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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)), login_timer_(new QTimer(this)),
timer_flush_requests_(new QTimer(this)), timer_flush_requests_(new QTimer(this)),
login_in_progress_(false), login_in_progress_(false),
@ -178,7 +178,7 @@ void OpenTidalCoverProvider::Login() {
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setRawHeader("Authorization", "Basic " + QByteArray(QByteArray::fromBase64(kApiClientIdB64) + ":" + QByteArray::fromBase64(kApiClientSecretB64)).toBase64()); req.setRawHeader("Authorization", "Basic " + QByteArray(QByteArray::fromBase64(kApiClientIdB64) + ":" + QByteArray::fromBase64(kApiClientSecretB64)).toBase64());
QUrlQuery url_query; 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()); QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
replies_ << reply; replies_ << reply;
QObject::connect(reply, &QNetworkReply::sslErrors, this, &OpenTidalCoverProvider::HandleLoginSSLErrors); QObject::connect(reply, &QNetworkReply::sslErrors, this, &OpenTidalCoverProvider::HandleLoginSSLErrors);
@ -331,14 +331,14 @@ void OpenTidalCoverProvider::SendSearchRequest(SearchRequestPtr search_request)
} }
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("query"), QString::fromUtf8(QUrl::toPercentEncoding(query))); url_query.addQueryItem(u"query"_s, QString::fromUtf8(QUrl::toPercentEncoding(query)));
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit)); url_query.addQueryItem(u"limit"_s, QString::number(kLimit));
url_query.addQueryItem(QStringLiteral("countryCode"), QStringLiteral("US")); url_query.addQueryItem(u"countryCode"_s, u"US"_s);
QUrl url(QLatin1String(kApiUrl) + "/search"_L1); QUrl url(QLatin1String(kApiUrl) + "/search"_L1);
url.setQuery(url_query); url.setQuery(url_query);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); 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()); req.setRawHeader("Authorization", token_type_.toUtf8() + " " + access_token_.toUtf8());
QNetworkReply *reply = network_->get(req); QNetworkReply *reply = network_->get(req);

View File

@ -54,7 +54,7 @@ constexpr int kLimit = 10;
} }
QobuzCoverProvider::QobuzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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>()) {} service_(app->streaming_services()->Service<QobuzService>()) {}
QobuzCoverProvider::~QobuzCoverProvider() { QobuzCoverProvider::~QobuzCoverProvider() {
@ -87,9 +87,9 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
} }
} }
ParamList params = ParamList() << Param(QStringLiteral("query"), query) ParamList params = ParamList() << Param(u"query"_s, query)
<< Param(QStringLiteral("limit"), QString::number(kLimit)) << Param(u"limit"_s, QString::number(kLimit))
<< Param(QStringLiteral("app_id"), service_->app_id()); << Param(u"app_id"_s, service_->app_id());
std::sort(params.begin(), params.end()); std::sort(params.begin(), params.end());
@ -103,7 +103,7 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); 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-App-Id", service_->app_id().toUtf8());
req.setRawHeader("X-User-Auth-Token", service_->user_auth_token().toUtf8()); req.setRawHeader("X-User-Auth-Token", service_->user_auth_token().toUtf8());
QNetworkReply *reply = network_->get(req); QNetworkReply *reply = network_->get(req);
@ -188,27 +188,27 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
value_type = json_obj["tracks"_L1]; value_type = json_obj["tracks"_L1];
} }
else { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
if (!value_type.isObject()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
QJsonObject obj_type = value_type.toObject(); QJsonObject obj_type = value_type.toObject();
if (!obj_type.contains("items"_L1)) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
QJsonValue value_items = obj_type["items"_L1]; QJsonValue value_items = obj_type["items"_L1];
if (!value_items.isArray()) { 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); Q_EMIT SearchFinished(id, results);
return; return;
} }
@ -217,7 +217,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
for (const QJsonValue &value : array_items) { for (const QJsonValue &value : array_items) {
if (!value.isObject()) { 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; continue;
} }
QJsonObject item_obj = value.toObject(); QJsonObject item_obj = value.toObject();
@ -225,7 +225,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
QJsonObject obj_album; QJsonObject obj_album;
if (item_obj.contains("album"_L1)) { if (item_obj.contains("album"_L1)) {
if (!item_obj["album"_L1].isObject()) { 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; continue;
} }
obj_album = item_obj["album"_L1].toObject(); 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)) { 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; continue;
} }
@ -244,12 +244,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
// Artist // Artist
QJsonValue value_artist = obj_album["artist"_L1]; QJsonValue value_artist = obj_album["artist"_L1];
if (!value_artist.isObject()) { 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; continue;
} }
QJsonObject obj_artist = value_artist.toObject(); QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) { 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; continue;
} }
QString artist = obj_artist["name"_L1].toString(); QString artist = obj_artist["name"_L1].toString();
@ -257,12 +257,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
// Image // Image
QJsonValue value_image = obj_album["image"_L1]; QJsonValue value_image = obj_album["image"_L1];
if (!value_image.isObject()) { 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; continue;
} }
QJsonObject obj_image = value_image.toObject(); QJsonObject obj_image = value_image.toObject();
if (!obj_image.contains("large"_L1)) { 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; continue;
} }
QUrl cover_url(obj_image["large"_L1].toString()); QUrl cover_url(obj_image["large"_L1].toString());

View File

@ -42,10 +42,6 @@
#include "core/application.h" #include "core/application.h"
#include "core/networkaccessmanager.h" #include "core/networkaccessmanager.h"
#include "core/logging.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 "streaming/streamingservices.h"
#include "spotify/spotifyservice.h" #include "spotify/spotifyservice.h"
#include "albumcoverfetcher.h" #include "albumcoverfetcher.h"
@ -60,7 +56,7 @@ constexpr int kLimit = 10;
} // namespace } // namespace
SpotifyCoverProvider::SpotifyCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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>()) {} service_(app->streaming_services()->Service<SpotifyService>()) {}
SpotifyCoverProvider::~SpotifyCoverProvider() { SpotifyCoverProvider::~SpotifyCoverProvider() {
@ -98,20 +94,20 @@ bool SpotifyCoverProvider::StartSearch(const QString &artist, const QString &alb
} }
} }
const ParamList params = ParamList() << Param(QStringLiteral("q"), query) const ParamList params = ParamList() << Param(u"q"_s, query)
<< Param(QStringLiteral("type"), type) << Param(u"type"_s, type)
<< Param(QStringLiteral("limit"), QString::number(kLimit)); << Param(u"limit"_s, QString::number(kLimit));
QUrlQuery url_query; QUrlQuery url_query;
for (const Param &param : params) { for (const Param &param : params) {
url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(param.first)), QString::fromLatin1(QUrl::toPercentEncoding(param.second))); 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); url.setQuery(url_query);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); 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()); req.setRawHeader("Authorization", "Bearer " + service_->access_token().toUtf8());
QNetworkReply *reply = network_->get(req); QNetworkReply *reply = network_->get(req);

View File

@ -52,7 +52,7 @@ constexpr int kLimit = 10;
} }
TidalCoverProvider::TidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent) 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>()) {} service_(app->streaming_services()->Service<TidalService>()) {}
TidalCoverProvider::~TidalCoverProvider() { TidalCoverProvider::~TidalCoverProvider() {
@ -87,9 +87,9 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
} }
} }
const ParamList params = ParamList() << Param(QStringLiteral("query"), query) const ParamList params = ParamList() << Param(u"query"_s, query)
<< Param(QStringLiteral("limit"), QString::number(kLimit)) << Param(u"limit"_s, QString::number(kLimit))
<< Param(QStringLiteral("countryCode"), service_->country_code()); << Param(u"countryCode"_s, service_->country_code());
QUrlQuery url_query; QUrlQuery url_query;
for (const Param &param : params) { for (const Param &param : params) {
@ -100,7 +100,7 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
url.setQuery(url_query); url.setQuery(url_query);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); 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()); 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()); 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)) { 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()); Q_EMIT SearchFinished(id, CoverProviderSearchResults());
return; return;
} }
@ -204,23 +204,23 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
for (const QJsonValue &value_item : array_items) { for (const QJsonValue &value_item : array_items) {
if (!value_item.isObject()) { 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; continue;
} }
QJsonObject obj_item = value_item.toObject(); QJsonObject obj_item = value_item.toObject();
if (!obj_item.contains("artist"_L1)) { 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; continue;
} }
QJsonValue value_artist = obj_item["artist"_L1]; QJsonValue value_artist = obj_item["artist"_L1];
if (!value_artist.isObject()) { 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; continue;
} }
QJsonObject obj_artist = value_artist.toObject(); QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) { 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; continue;
} }
QString artist = obj_artist["name"_L1].toString(); QString artist = obj_artist["name"_L1].toString();
@ -232,7 +232,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
obj_album = value_album.toObject(); obj_album = value_album.toObject();
} }
else { 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; continue;
} }
} }
@ -241,7 +241,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
} }
if (!obj_album.contains("title"_L1) || !obj_album.contains("cover"_L1)) { 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; continue;
} }
QString album = obj_album["title"_L1].toString(); 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.album = Song::AlbumRemoveDiscMisc(album);
cover_result.number = ++i; cover_result.number = ++i;
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("1280x1280"), QSize(1280, 1280)) const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"1280x1280"_s, QSize(1280, 1280))
<< qMakePair(QStringLiteral("750x750"), QSize(750, 750)) << qMakePair(u"750x750"_s, QSize(750, 750))
<< qMakePair(QStringLiteral("640x640"), QSize(640, 640)); << qMakePair(u"640x640"_s, QSize(640, 640));
for (const QPair<QString, QSize> &cover_size : cover_sizes) { 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)); QUrl cover_url(QStringLiteral("%1/images/%2/%3.jpg").arg(QLatin1String(TidalService::kResourcesUrl), cover, cover_size.first));
cover_result.image_url = cover_url; cover_result.image_url = cover_url;

View File

@ -37,6 +37,8 @@
#include "cddalister.h" #include "cddalister.h"
#include "core/logging.h" #include "core/logging.h"
using namespace Qt::Literals::StringLiterals;
QStringList CddaLister::DeviceUniqueIDs() { return devices_list_; } QStringList CddaLister::DeviceUniqueIDs() { return devices_list_; }
QVariantList CddaLister::DeviceIcons(const QString &id) { QVariantList CddaLister::DeviceIcons(const QString &id) {
@ -44,7 +46,7 @@ QVariantList CddaLister::DeviceIcons(const QString &id) {
Q_UNUSED(id) Q_UNUSED(id)
QVariantList icons; QVariantList icons;
icons << QStringLiteral("media-optical"); icons << u"media-optical"_s;
return icons; return icons;
} }
@ -105,12 +107,12 @@ QString CddaLister::MakeFriendlyName(const QString &id) {
return QString::fromUtf8(cd_info.psz_model); return QString::fromUtf8(cd_info.psz_model);
} }
cdio_destroy(cdio); cdio_destroy(cdio);
return QStringLiteral("CD (") + id + QLatin1Char(')'); return u"CD ("_s + id + QLatin1Char(')');
} }
QList<QUrl> CddaLister::MakeDeviceUrls(const QString &id) { QList<QUrl> CddaLister::MakeDeviceUrls(const QString &id) {
return QList<QUrl>() << QUrl(QStringLiteral("cdda://") + id); return QList<QUrl>() << QUrl(u"cdda://"_s + id);
} }
void CddaLister::UnmountDevice(const QString &id) { void CddaLister::UnmountDevice(const QString &id) {
@ -142,7 +144,7 @@ bool CddaLister::Init() {
} }
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS
// Every track is detected as a separate device on Darwin. The raw disk looks like /dev/rdisk1 // Every track is detected as a separate device on Darwin. The raw disk looks like /dev/rdisk1
if (!device.contains(QRegularExpression(QStringLiteral("^/dev/rdisk[0-9]$")))) { if (!device.contains(QRegularExpression(u"^/dev/rdisk[0-9]$"_s))) {
continue; continue;
} }
#endif #endif

View File

@ -47,6 +47,8 @@
using std::make_shared; using std::make_shared;
using namespace Qt::Literals::StringLiterals;
CddaSongLoader::CddaSongLoader(const QUrl &url, QObject *parent) CddaSongLoader::CddaSongLoader(const QUrl &url, QObject *parent)
: QObject(parent), : QObject(parent),
url_(url), url_(url),
@ -73,7 +75,7 @@ void CddaSongLoader::LoadSongs() {
QMutexLocker locker(&mutex_load_); QMutexLocker locker(&mutex_load_);
cdio_ = cdio_open(url_.path().toLocal8Bit().constData(), DRIVER_DEVICE); cdio_ = cdio_open(url_.path().toLocal8Bit().constData(), DRIVER_DEVICE);
if (cdio_ == nullptr) { if (cdio_ == nullptr) {
Error(QStringLiteral("Unable to open CDIO device.")); Error(u"Unable to open CDIO device."_s);
return; return;
} }

View File

@ -88,7 +88,7 @@ DeviceDatabaseBackend::DeviceList DeviceDatabaseBackend::GetAllDevices() {
QMutexLocker l(db_->Mutex()); QMutexLocker l(db_->Mutex());
QSqlDatabase db(db_->Connect()); QSqlDatabase db(db_->Connect());
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("SELECT ROWID, unique_id, friendly_name, size, icon, schema_version, transcode_mode, transcode_format FROM devices")); q.prepare(u"SELECT ROWID, unique_id, friendly_name, size, icon, schema_version, transcode_mode, transcode_format FROM devices"_s);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return ret; return ret;
@ -132,13 +132,13 @@ int DeviceDatabaseBackend::AddDevice(const Device &device) {
// Insert the device into the devices table // Insert the device into the devices table
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("INSERT INTO devices (unique_id, friendly_name, size, icon, transcode_mode, transcode_format) VALUES (:unique_id, :friendly_name, :size, :icon, :transcode_mode, :transcode_format)")); q.prepare(u"INSERT INTO devices (unique_id, friendly_name, size, icon, transcode_mode, transcode_format) VALUES (:unique_id, :friendly_name, :size, :icon, :transcode_mode, :transcode_format)"_s);
q.BindValue(QStringLiteral(":unique_id"), device.unique_id_); q.BindValue(u":unique_id"_s, device.unique_id_);
q.BindValue(QStringLiteral(":friendly_name"), device.friendly_name_); q.BindValue(u":friendly_name"_s, device.friendly_name_);
q.BindValue(QStringLiteral(":size"), device.size_); q.BindValue(u":size"_s, device.size_);
q.BindValue(QStringLiteral(":icon"), device.icon_name_); q.BindValue(u":icon"_s, device.icon_name_);
q.BindValue(QStringLiteral(":transcode_mode"), static_cast<int>(device.transcode_mode_)); q.BindValue(u":transcode_mode"_s, static_cast<int>(device.transcode_mode_));
q.BindValue(QStringLiteral(":transcode_format"), static_cast<int>(device.transcode_format_)); q.BindValue(u":transcode_format"_s, static_cast<int>(device.transcode_format_));
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return -1; return -1;
@ -172,8 +172,8 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
// Remove the device from the devices table // Remove the device from the devices table
{ {
SqlQuery q(db); SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM devices WHERE ROWID=:id")); q.prepare(u"DELETE FROM devices WHERE ROWID=:id"_s);
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
return; return;
@ -234,11 +234,11 @@ void DeviceDatabaseBackend::SetDeviceOptions(const int id, const QString &friend
" transcode_mode=:transcode_mode," " transcode_mode=:transcode_mode,"
" transcode_format=:transcode_format" " transcode_format=:transcode_format"
" WHERE ROWID=:id")); " WHERE ROWID=:id"));
q.BindValue(QStringLiteral(":friendly_name"), friendly_name); q.BindValue(u":friendly_name"_s, friendly_name);
q.BindValue(QStringLiteral(":icon_name"), icon_name); q.BindValue(u":icon_name"_s, icon_name);
q.BindValue(QStringLiteral(":transcode_mode"), static_cast<int>(mode)); q.BindValue(u":transcode_mode"_s, static_cast<int>(mode));
q.BindValue(QStringLiteral(":transcode_format"), static_cast<int>(format)); q.BindValue(u":transcode_format"_s, static_cast<int>(format));
q.BindValue(QStringLiteral(":id"), id); q.BindValue(u":id"_s, id);
if (!q.Exec()) { if (!q.Exec()) {
db_->ReportErrors(q); db_->ReportErrors(q);
} }

View File

@ -115,48 +115,48 @@ QString GetIpodColour(Itdb_IpodModel model) {
case ITDB_IPOD_MODEL_MINI_GREEN: case ITDB_IPOD_MODEL_MINI_GREEN:
case ITDB_IPOD_MODEL_NANO_GREEN: case ITDB_IPOD_MODEL_NANO_GREEN:
case ITDB_IPOD_MODEL_SHUFFLE_GREEN: case ITDB_IPOD_MODEL_SHUFFLE_GREEN:
return QStringLiteral("green"); return u"green"_s;
case ITDB_IPOD_MODEL_MINI_BLUE: case ITDB_IPOD_MODEL_MINI_BLUE:
case ITDB_IPOD_MODEL_NANO_BLUE: case ITDB_IPOD_MODEL_NANO_BLUE:
case ITDB_IPOD_MODEL_SHUFFLE_BLUE: case ITDB_IPOD_MODEL_SHUFFLE_BLUE:
return QStringLiteral("blue"); return u"blue"_s;
case ITDB_IPOD_MODEL_MINI_PINK: case ITDB_IPOD_MODEL_MINI_PINK:
case ITDB_IPOD_MODEL_NANO_PINK: case ITDB_IPOD_MODEL_NANO_PINK:
case ITDB_IPOD_MODEL_SHUFFLE_PINK: case ITDB_IPOD_MODEL_SHUFFLE_PINK:
return QStringLiteral("pink"); return u"pink"_s;
case ITDB_IPOD_MODEL_MINI_GOLD: case ITDB_IPOD_MODEL_MINI_GOLD:
return QStringLiteral("gold"); return u"gold"_s;
case ITDB_IPOD_MODEL_NANO_WHITE: case ITDB_IPOD_MODEL_NANO_WHITE:
case ITDB_IPOD_MODEL_VIDEO_WHITE: case ITDB_IPOD_MODEL_VIDEO_WHITE:
return QStringLiteral("white"); return u"white"_s;
case ITDB_IPOD_MODEL_NANO_SILVER: case ITDB_IPOD_MODEL_NANO_SILVER:
case ITDB_IPOD_MODEL_CLASSIC_SILVER: case ITDB_IPOD_MODEL_CLASSIC_SILVER:
return QStringLiteral("silver"); return u"silver"_s;
case ITDB_IPOD_MODEL_NANO_RED: case ITDB_IPOD_MODEL_NANO_RED:
case ITDB_IPOD_MODEL_SHUFFLE_RED: case ITDB_IPOD_MODEL_SHUFFLE_RED:
return QStringLiteral("red"); return u"red"_s;
case ITDB_IPOD_MODEL_NANO_YELLOW: case ITDB_IPOD_MODEL_NANO_YELLOW:
return QStringLiteral("yellow"); return u"yellow"_s;
case ITDB_IPOD_MODEL_NANO_PURPLE: case ITDB_IPOD_MODEL_NANO_PURPLE:
case ITDB_IPOD_MODEL_SHUFFLE_PURPLE: case ITDB_IPOD_MODEL_SHUFFLE_PURPLE:
return QStringLiteral("purple"); return u"purple"_s;
case ITDB_IPOD_MODEL_NANO_ORANGE: case ITDB_IPOD_MODEL_NANO_ORANGE:
case ITDB_IPOD_MODEL_SHUFFLE_ORANGE: case ITDB_IPOD_MODEL_SHUFFLE_ORANGE:
return QStringLiteral("orange"); return u"orange"_s;
case ITDB_IPOD_MODEL_NANO_BLACK: case ITDB_IPOD_MODEL_NANO_BLACK:
case ITDB_IPOD_MODEL_VIDEO_BLACK: case ITDB_IPOD_MODEL_VIDEO_BLACK:
case ITDB_IPOD_MODEL_CLASSIC_BLACK: case ITDB_IPOD_MODEL_CLASSIC_BLACK:
return QStringLiteral("black"); return u"black"_s;
default: default:
return QString(); return QString();
@ -172,7 +172,7 @@ QString GetIpodModel(Itdb_IpodModel model) {
case ITDB_IPOD_MODEL_MINI_PINK: case ITDB_IPOD_MODEL_MINI_PINK:
case ITDB_IPOD_MODEL_MINI_GREEN: case ITDB_IPOD_MODEL_MINI_GREEN:
case ITDB_IPOD_MODEL_MINI_GOLD: case ITDB_IPOD_MODEL_MINI_GOLD:
return QStringLiteral("mini"); return u"mini"_s;
case ITDB_IPOD_MODEL_NANO_WHITE: case ITDB_IPOD_MODEL_NANO_WHITE:
case ITDB_IPOD_MODEL_NANO_BLACK: case ITDB_IPOD_MODEL_NANO_BLACK:
@ -184,7 +184,7 @@ QString GetIpodModel(Itdb_IpodModel model) {
case ITDB_IPOD_MODEL_NANO_YELLOW: case ITDB_IPOD_MODEL_NANO_YELLOW:
case ITDB_IPOD_MODEL_NANO_PURPLE: case ITDB_IPOD_MODEL_NANO_PURPLE:
case ITDB_IPOD_MODEL_NANO_ORANGE: case ITDB_IPOD_MODEL_NANO_ORANGE:
return QStringLiteral("nano"); return u"nano"_s;
case ITDB_IPOD_MODEL_SHUFFLE: case ITDB_IPOD_MODEL_SHUFFLE:
case ITDB_IPOD_MODEL_SHUFFLE_SILVER: case ITDB_IPOD_MODEL_SHUFFLE_SILVER:
@ -193,17 +193,17 @@ QString GetIpodModel(Itdb_IpodModel model) {
case ITDB_IPOD_MODEL_SHUFFLE_GREEN: case ITDB_IPOD_MODEL_SHUFFLE_GREEN:
case ITDB_IPOD_MODEL_SHUFFLE_ORANGE: case ITDB_IPOD_MODEL_SHUFFLE_ORANGE:
case ITDB_IPOD_MODEL_SHUFFLE_RED: case ITDB_IPOD_MODEL_SHUFFLE_RED:
return QStringLiteral("shuffle"); return u"shuffle"_s;
case ITDB_IPOD_MODEL_COLOR: case ITDB_IPOD_MODEL_COLOR:
case ITDB_IPOD_MODEL_REGULAR: case ITDB_IPOD_MODEL_REGULAR:
case ITDB_IPOD_MODEL_CLASSIC_SILVER: case ITDB_IPOD_MODEL_CLASSIC_SILVER:
case ITDB_IPOD_MODEL_CLASSIC_BLACK: case ITDB_IPOD_MODEL_CLASSIC_BLACK:
return QStringLiteral("standard"); return u"standard"_s;
case ITDB_IPOD_MODEL_COLOR_U2: case ITDB_IPOD_MODEL_COLOR_U2:
case ITDB_IPOD_MODEL_REGULAR_U2: case ITDB_IPOD_MODEL_REGULAR_U2:
return QStringLiteral("U2"); return u"U2"_s;
default: default:
return QString(); return QString();
@ -218,7 +218,7 @@ QUrl DeviceLister::MakeUrlFromLocalPath(const QString &path) const {
if (IsIpod(path)) { if (IsIpod(path)) {
QUrl ret; QUrl ret;
ret.setScheme(QStringLiteral("ipod")); ret.setScheme(u"ipod"_s);
ret.setPath(QDir::fromNativeSeparators(path)); ret.setPath(QDir::fromNativeSeparators(path));
return ret; return ret;
} }
@ -244,7 +244,7 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) {
const Itdb_IpodInfo *info = itdb_device_get_ipod_info(device); const Itdb_IpodInfo *info = itdb_device_get_ipod_info(device);
if (info->ipod_model == ITDB_IPOD_MODEL_INVALID) { if (info->ipod_model == ITDB_IPOD_MODEL_INVALID) {
ret << QStringLiteral("device-ipod"); ret << u"device-ipod"_s;
} }
else { else {
QString model = GetIpodModel(info->ipod_model); QString model = GetIpodModel(info->ipod_model);
@ -260,7 +260,7 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) {
} }
if (ret.isEmpty()) { if (ret.isEmpty()) {
ret << QStringLiteral("device-ipod"); ret << u"device-ipod"_s;
} }
} }
@ -280,7 +280,7 @@ QVariantList DeviceLister::GuessIconForModel(const QString &vendor, const QStrin
QVariantList ret; QVariantList ret;
if (vendor.startsWith("Google"_L1) && model.contains("Nexus"_L1)) { if (vendor.startsWith("Google"_L1) && model.contains("Nexus"_L1)) {
ret << QStringLiteral("phone-google-nexus-one"); ret << u"phone-google-nexus-one"_s;
} }
return ret; return ret;

View File

@ -91,7 +91,7 @@ const int DeviceManager::kDeviceIconOverlaySize = 16;
DeviceManager::DeviceManager(Application *app, QObject *parent) DeviceManager::DeviceManager(Application *app, QObject *parent)
: SimpleTreeModel<DeviceInfo>(new DeviceInfo(this), parent), : SimpleTreeModel<DeviceInfo>(new DeviceInfo(this), parent),
app_(app), app_(app),
not_connected_overlay_(IconLoader::Load(QStringLiteral("edit-delete"))) { not_connected_overlay_(IconLoader::Load(u"edit-delete"_s)) {
setObjectName(QLatin1String(metaObject()->className())); setObjectName(QLatin1String(metaObject()->className()));
@ -604,7 +604,7 @@ SharedPtr<ConnectedDevice> DeviceManager::Connect(DeviceInfo *info) {
// If it was "ipod" or "mtp" then the user compiled out support and the device won't work properly. // If it was "ipod" or "mtp" then the user compiled out support and the device won't work properly.
if (url.scheme() == "mtp"_L1 || url.scheme() == "gphoto2"_L1) { if (url.scheme() == "mtp"_L1 || url.scheme() == "gphoto2"_L1) {
if (QMessageBox::critical(nullptr, tr("This device will not work properly"), if (QMessageBox::critical(nullptr, tr("This device will not work properly"),
tr("This is an MTP device, but you compiled Strawberry without libmtp support.") + QStringLiteral(" ") + tr("This is an MTP device, but you compiled Strawberry without libmtp support.") + u" "_s +
tr("If you continue, this device will work slowly and songs copied to it may not work."), tr("If you continue, this device will work slowly and songs copied to it may not work."),
QMessageBox::Abort, QMessageBox::Ignore) == QMessageBox::Abort) QMessageBox::Abort, QMessageBox::Ignore) == QMessageBox::Abort)
return ret; return ret;

View File

@ -57,6 +57,8 @@
#include "transcoder/transcoder.h" #include "transcoder/transcoder.h"
#include "ui_deviceproperties.h" #include "ui_deviceproperties.h"
using namespace Qt::Literals::StringLiterals;
DeviceProperties::DeviceProperties(QWidget *parent) DeviceProperties::DeviceProperties(QWidget *parent)
: QDialog(parent), : QDialog(parent),
ui_(new Ui_DeviceProperties), ui_(new Ui_DeviceProperties),
@ -87,13 +89,13 @@ void DeviceProperties::ShowDevice(const QModelIndex &idx) {
if (ui_->icon->count() == 0) { if (ui_->icon->count() == 0) {
// Only load the icons the first time the dialog is shown // Only load the icons the first time the dialog is shown
const QStringList icon_names = QStringList() << QStringLiteral("device") const QStringList icon_names = QStringList() << u"device"_s
<< QStringLiteral("device-usb-drive") << u"device-usb-drive"_s
<< QStringLiteral("device-usb-flash") << u"device-usb-flash"_s
<< QStringLiteral("media-optical") << u"media-optical"_s
<< QStringLiteral("device-ipod") << u"device-ipod"_s
<< QStringLiteral("device-ipod-nano") << u"device-ipod-nano"_s
<< QStringLiteral("device-phone"); << u"device-phone"_s;
for (const QString &icon_name : icon_names) { for (const QString &icon_name : icon_names) {

View File

@ -236,19 +236,19 @@ void DeviceView::contextMenuEvent(QContextMenuEvent *e) {
collection_menu_ = new QMenu(this); collection_menu_ = new QMenu(this);
// Device menu // Device menu
eject_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("media-eject")), tr("Safely remove device"), this, &DeviceView::Unmount); eject_action_ = device_menu_->addAction(IconLoader::Load(u"media-eject"_s), tr("Safely remove device"), this, &DeviceView::Unmount);
forget_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Forget device"), this, &DeviceView::Forget); forget_action_ = device_menu_->addAction(IconLoader::Load(u"list-remove"_s), tr("Forget device"), this, &DeviceView::Forget);
device_menu_->addSeparator(); device_menu_->addSeparator();
properties_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Device properties..."), this, &DeviceView::Properties); properties_action_ = device_menu_->addAction(IconLoader::Load(u"configure"_s), tr("Device properties..."), this, &DeviceView::Properties);
// Collection menu // Collection menu
add_to_playlist_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &DeviceView::AddToPlaylist); add_to_playlist_action_ = collection_menu_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Append to current playlist"), this, &DeviceView::AddToPlaylist);
load_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &DeviceView::Load); load_action_ = collection_menu_->addAction(IconLoader::Load(u"media-playback-start"_s), tr("Replace current playlist"), this, &DeviceView::Load);
open_in_new_playlist_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &DeviceView::OpenInNewPlaylist); open_in_new_playlist_ = collection_menu_->addAction(IconLoader::Load(u"document-new"_s), tr("Open in new playlist"), this, &DeviceView::OpenInNewPlaylist);
collection_menu_->addSeparator(); collection_menu_->addSeparator();
organize_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy to collection..."), this, &DeviceView::Organize); organize_action_ = collection_menu_->addAction(IconLoader::Load(u"edit-copy"_s), tr("Copy to collection..."), this, &DeviceView::Organize);
delete_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from device..."), this, &DeviceView::Delete); delete_action_ = collection_menu_->addAction(IconLoader::Load(u"edit-delete"_s), tr("Delete from device..."), this, &DeviceView::Delete);
} }
menu_index_ = currentIndex(); menu_index_ = currentIndex();

View File

@ -228,12 +228,12 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
for (QString uri : std::as_const(uris)) { for (QString uri : std::as_const(uris)) {
// gphoto2 gives invalid hostnames with []:, characters in // gphoto2 gives invalid hostnames with []:, characters in
static const QRegularExpression regex_url_usb(QStringLiteral("//\\[usb:(\\d+),(\\d+)\\]")); static const QRegularExpression regex_url_usb(u"//\\[usb:(\\d+),(\\d+)\\]"_s);
uri.replace(regex_url_usb, QStringLiteral("//usb-\\1-\\2")); uri.replace(regex_url_usb, u"//usb-\\1-\\2"_s);
QUrl url; QUrl url;
static const QRegularExpression regex_url_schema(QStringLiteral("..+:.*")); static const QRegularExpression regex_url_schema(u"..+:.*"_s);
if (uri.contains(regex_url_schema)) { if (uri.contains(regex_url_schema)) {
url = QUrl::fromEncoded(uri.toUtf8()); url = QUrl::fromEncoded(uri.toUtf8());
} }
@ -245,16 +245,16 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
// Special case for file:// GIO URIs - we have to check whether they point to an ipod. // Special case for file:// GIO URIs - we have to check whether they point to an ipod.
if (url.isLocalFile() && IsIpod(url.path())) { if (url.isLocalFile() && IsIpod(url.path())) {
url.setScheme(QStringLiteral("ipod")); url.setScheme(u"ipod"_s);
} }
static const QRegularExpression regex_usb_digit(QStringLiteral("usb/(\\d+)/(\\d+)")); static const QRegularExpression regex_usb_digit(u"usb/(\\d+)/(\\d+)"_s);
QRegularExpression device_re(regex_usb_digit); QRegularExpression device_re(regex_usb_digit);
QRegularExpressionMatch re_match = device_re.match(unix_device); QRegularExpressionMatch re_match = device_re.match(unix_device);
if (re_match.hasMatch()) { if (re_match.hasMatch()) {
QUrlQuery url_query(url); QUrlQuery url_query(url);
url_query.addQueryItem(QStringLiteral("busnum"), re_match.captured(1)); url_query.addQueryItem(u"busnum"_s, re_match.captured(1));
url_query.addQueryItem(QStringLiteral("devnum"), re_match.captured(2)); url_query.addQueryItem(u"devnum"_s, re_match.captured(2));
url.setQuery(url_query); url.setQuery(url_query);
} }

View File

@ -52,6 +52,7 @@ class DeviceLister;
class DeviceManager; class DeviceManager;
using std::make_shared; using std::make_shared;
using namespace Qt::Literals::StringLiterals;
GPodDevice::GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, SharedPtr<DeviceManager> manager, Application *app, const int database_id, const bool first_time, QObject *parent) GPodDevice::GPodDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, SharedPtr<DeviceManager> manager, Application *app, const int database_id, const bool first_time, QObject *parent)
: ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent), : ConnectedDevice(url, lister, unique_id, manager, app, database_id, first_time, parent),
@ -195,12 +196,12 @@ bool GPodDevice::CopyToStorage(const CopyJob &job, QString &error_text) {
bool result = false; bool result = false;
if (!job.cover_image_.isNull()) { if (!job.cover_image_.isNull()) {
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
QString temp_path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/organize"); QString temp_path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + u"/organize"_s;
#else #else
QString temp_path = QStandardPaths::writableLocation(QStandardPaths::TempLocation); QString temp_path = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
#endif #endif
if (!QDir(temp_path).exists()) QDir().mkpath(temp_path); if (!QDir(temp_path).exists()) QDir().mkpath(temp_path);
SharedPtr<TemporaryFile> cover_file = make_shared<TemporaryFile>(temp_path + QStringLiteral("/track-albumcover-XXXXXX.jpg")); SharedPtr<TemporaryFile> cover_file = make_shared<TemporaryFile>(temp_path + u"/track-albumcover-XXXXXX.jpg"_s);
if (!cover_file->filename().isEmpty()) { if (!cover_file->filename().isEmpty()) {
const QImage &image = job.cover_image_; const QImage &image = job.cover_image_;
if (image.save(cover_file->filename(), "JPG")) { if (image.save(cover_file->filename(), "JPG")) {

View File

@ -723,18 +723,18 @@ QList<QUrl> MacOsDeviceLister::MakeDeviceUrls(const QString &serial) {
const MTPDevice &device = mtp_devices_[serial]; const MTPDevice &device = mtp_devices_[serial];
QString str = QString::asprintf("gphoto2://usb-%d-%d/", device.bus, device.address); QString str = QString::asprintf("gphoto2://usb-%d-%d/", device.bus, device.address);
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("vendor"), device.vendor); url_query.addQueryItem(u"vendor"_s, device.vendor);
url_query.addQueryItem(QStringLiteral("vendor_id"), QString::number(device.vendor_id)); url_query.addQueryItem(u"vendor_id"_s, QString::number(device.vendor_id));
url_query.addQueryItem(QStringLiteral("product"), device.product); url_query.addQueryItem(u"product"_s, device.product);
url_query.addQueryItem(QStringLiteral("product_id"), QString::number(device.product_id)); url_query.addQueryItem(u"product_id"_s, QString::number(device.product_id));
url_query.addQueryItem(QStringLiteral("quirks"), QString::number(device.quirks)); url_query.addQueryItem(u"quirks"_s, QString::number(device.quirks));
QUrl url(str); QUrl url(str);
url.setQuery(url_query); url.setQuery(url_query);
return QList<QUrl>() << url; return QList<QUrl>() << url;
} }
if (IsCDDevice(serial)) { if (IsCDDevice(serial)) {
return QList<QUrl>() << QUrl(QStringLiteral("cdda:///dev/r") + serial); return QList<QUrl>() << QUrl(u"cdda:///dev/r"_s + serial);
} }
QString bsd_name = current_devices_[serial]; QString bsd_name = current_devices_[serial];
@ -762,7 +762,7 @@ QVariantList MacOsDeviceLister::DeviceIcons(const QString &serial) {
} }
if (IsCDDevice(serial)) { if (IsCDDevice(serial)) {
return QVariantList() << QStringLiteral("media-optical"); return QVariantList() << u"media-optical"_s;
} }
QString bsd_name = current_devices_[serial]; QString bsd_name = current_devices_[serial];

View File

@ -33,11 +33,13 @@
#include "core/logging.h" #include "core/logging.h"
#include "mtpconnection.h" #include "mtpconnection.h"
using namespace Qt::Literals::StringLiterals;
MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent), device_(nullptr) { MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent), device_(nullptr) {
QString hostname = url.host(); QString hostname = url.host();
// Parse the URL // Parse the URL
static const QRegularExpression host_re(QStringLiteral("^usb-(\\d+)-(\\d+)$")); static const QRegularExpression host_re(u"^usb-(\\d+)-(\\d+)$"_s);
unsigned int bus_location = 0; unsigned int bus_location = 0;
unsigned int device_num = 0; unsigned int device_num = 0;
@ -49,9 +51,9 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
bus_location = re_match.captured(1).toUInt(); bus_location = re_match.captured(1).toUInt();
device_num = re_match.captured(2).toUInt(); device_num = re_match.captured(2).toUInt();
} }
else if (url_query.hasQueryItem(QStringLiteral("busnum"))) { else if (url_query.hasQueryItem(u"busnum"_s)) {
bus_location = url_query.queryItemValue(QStringLiteral("busnum")).toUInt(); bus_location = url_query.queryItemValue(u"busnum"_s).toUInt();
device_num = url_query.queryItemValue(QStringLiteral("devnum")).toUInt(); device_num = url_query.queryItemValue(u"devnum"_s).toUInt();
} }
else { else {
error_text_ = tr("Invalid MTP device: %1").arg(hostname); error_text_ = tr("Invalid MTP device: %1").arg(hostname);
@ -59,13 +61,13 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
return; return;
} }
if (url_query.hasQueryItem(QStringLiteral("vendor"))) { if (url_query.hasQueryItem(u"vendor"_s)) {
LIBMTP_raw_device_t *raw_device = static_cast<LIBMTP_raw_device_t*>(malloc(sizeof(LIBMTP_raw_device_t))); LIBMTP_raw_device_t *raw_device = static_cast<LIBMTP_raw_device_t*>(malloc(sizeof(LIBMTP_raw_device_t)));
raw_device->device_entry.vendor = url_query.queryItemValue(QStringLiteral("vendor")).toLatin1().data(); raw_device->device_entry.vendor = url_query.queryItemValue(u"vendor"_s).toLatin1().data();
raw_device->device_entry.product = url_query.queryItemValue(QStringLiteral("product")).toLatin1().data(); raw_device->device_entry.product = url_query.queryItemValue(u"product"_s).toLatin1().data();
raw_device->device_entry.vendor_id = url_query.queryItemValue(QStringLiteral("vendor_id")).toUShort(); raw_device->device_entry.vendor_id = url_query.queryItemValue(u"vendor_id"_s).toUShort();
raw_device->device_entry.product_id = url_query.queryItemValue(QStringLiteral("product_id")).toUShort(); raw_device->device_entry.product_id = url_query.queryItemValue(u"product_id"_s).toUShort();
raw_device->device_entry.device_flags = url_query.queryItemValue(QStringLiteral("quirks")).toUInt(); raw_device->device_entry.device_flags = url_query.queryItemValue(u"quirks"_s).toUInt();
raw_device->bus_location = bus_location; raw_device->bus_location = bus_location;
raw_device->devnum = device_num; raw_device->devnum = device_num;
@ -122,16 +124,16 @@ QString MtpConnection::ErrorString(const LIBMTP_error_number_t error_number) {
switch(error_number) { switch(error_number) {
case LIBMTP_ERROR_NO_DEVICE_ATTACHED: case LIBMTP_ERROR_NO_DEVICE_ATTACHED:
return QStringLiteral("No Devices have been found."); return u"No Devices have been found."_s;
case LIBMTP_ERROR_CONNECTING: case LIBMTP_ERROR_CONNECTING:
return QStringLiteral("There has been an error connecting."); return u"There has been an error connecting."_s;
case LIBMTP_ERROR_MEMORY_ALLOCATION: case LIBMTP_ERROR_MEMORY_ALLOCATION:
return QStringLiteral("Memory Allocation Error."); return u"Memory Allocation Error."_s;
case LIBMTP_ERROR_GENERAL: case LIBMTP_ERROR_GENERAL:
default: default:
return QStringLiteral("Unknown error, please report this to the libmtp developers."); return u"Unknown error, please report this to the libmtp developers."_s;
case LIBMTP_ERROR_NONE: case LIBMTP_ERROR_NONE:
return QStringLiteral("Successfully connected."); return u"Successfully connected."_s;
} }
} }

View File

@ -78,7 +78,7 @@ MtpDevice::~MtpDevice() {
bool MtpDevice::Init() { bool MtpDevice::Init() {
InitBackendDirectory(QStringLiteral("/"), first_time_, false); InitBackendDirectory(u"/"_s, first_time_, false);
model_->Init(); model_->Init();
loader_ = new MtpLoader(url_, app_->task_manager(), backend_); loader_ = new MtpLoader(url_, app_->task_manager(), backend_);

View File

@ -190,7 +190,7 @@ void Udisks2Lister::UpdateDeviceFreeSpace(const QString &id) {
bool Udisks2Lister::Init() { bool Udisks2Lister::Init() {
udisks2_interface_ = make_unique<OrgFreedesktopDBusObjectManagerInterface>(QLatin1String(kUDisks2Service), QStringLiteral("/org/freedesktop/UDisks2"), QDBusConnection::systemBus()); udisks2_interface_ = make_unique<OrgFreedesktopDBusObjectManagerInterface>(QLatin1String(kUDisks2Service), u"/org/freedesktop/UDisks2"_s, QDBusConnection::systemBus());
QDBusPendingReply<ManagedObjectList> reply = udisks2_interface_->GetManagedObjects(); QDBusPendingReply<ManagedObjectList> reply = udisks2_interface_->GetManagedObjects();
reply.waitForFinished(); reply.waitForFinished();
@ -411,7 +411,7 @@ Udisks2Lister::PartitionData Udisks2Lister::ReadPartitionData(const QDBusObjectP
} }
QString Udisks2Lister::PartitionData::unique_id() const { QString Udisks2Lister::PartitionData::unique_id() const {
return QStringLiteral("Udisks2/%1/%2/%3/%4/%5") return u"Udisks2/%1/%2/%3/%4/%5"_s
.arg(serial, vendor, model) .arg(serial, vendor, model)
.arg(capacity) .arg(capacity)
.arg(uuid); .arg(uuid);

View File

@ -45,50 +45,50 @@ About::About(QWidget *parent) : QDialog(parent), ui_{} {
setWindowTitle(tr("About Strawberry")); setWindowTitle(tr("About Strawberry"));
strawberry_authors_ \ strawberry_authors_ \
<< Person(QStringLiteral("Jonas Kvinge")); << Person(u"Jonas Kvinge"_s);
strawberry_contributors_ \ strawberry_contributors_ \
<< Person(QStringLiteral("Gavin D. Howard")) << Person(u"Gavin D. Howard"_s)
<< Person(QStringLiteral("Martin Delille")) << Person(u"Martin Delille"_s)
<< Person(QStringLiteral("Roman Lebedev")) << Person(u"Roman Lebedev"_s)
<< Person(QStringLiteral("Daniel Ostertag")) << Person(u"Daniel Ostertag"_s)
<< Person(QStringLiteral("Gustavo L Conte")); << Person(u"Gustavo L Conte"_s);
clementine_authors_ clementine_authors_
<< Person(QStringLiteral("David Sansome")) << Person(u"David Sansome"_s)
<< Person(QStringLiteral("John Maguire")) << Person(u"John Maguire"_s)
<< Person(QStringLiteral("Paweł Bara")) << Person(u"Paweł Bara"_s)
<< Person(QStringLiteral("Arnaud Bienner")); << Person(u"Arnaud Bienner"_s);
clementine_contributors_ \ clementine_contributors_ \
<< Person(QStringLiteral("Jakub Stachowski")) << Person(u"Jakub Stachowski"_s)
<< Person(QStringLiteral("Paul Cifarelli")) << Person(u"Paul Cifarelli"_s)
<< Person(QStringLiteral("Felipe Rivera")) << Person(u"Felipe Rivera"_s)
<< Person(QStringLiteral("Alexander Peitz")) << Person(u"Alexander Peitz"_s)
<< Person(QStringLiteral("Andreas Muttscheller")) << Person(u"Andreas Muttscheller"_s)
<< Person(QStringLiteral("Mark Furneaux")) << Person(u"Mark Furneaux"_s)
<< Person(QStringLiteral("Florian Bigard")) << Person(u"Florian Bigard"_s)
<< Person(QStringLiteral("Alex Bikadorov")) << Person(u"Alex Bikadorov"_s)
<< Person(QStringLiteral("Mattias Andersson")) << Person(u"Mattias Andersson"_s)
<< Person(QStringLiteral("Alan Briolat")) << Person(u"Alan Briolat"_s)
<< Person(QStringLiteral("Arun Narayanankutty")) << Person(u"Arun Narayanankutty"_s)
<< Person(QStringLiteral("Bartłomiej Burdukiewicz")) << Person(u"Bartłomiej Burdukiewicz"_s)
<< Person(QStringLiteral("Andre Siviero")) << Person(u"Andre Siviero"_s)
<< Person(QStringLiteral("Santiago Gil")) << Person(u"Santiago Gil"_s)
<< Person(QStringLiteral("Tyler Rhodes")) << Person(u"Tyler Rhodes"_s)
<< Person(QStringLiteral("Vikram Ambrose")) << Person(u"Vikram Ambrose"_s)
<< Person(QStringLiteral("David Guillen")) << Person(u"David Guillen"_s)
<< Person(QStringLiteral("Krzysztof Sobiecki")) << Person(u"Krzysztof Sobiecki"_s)
<< Person(QStringLiteral("Valeriy Malov")) << Person(u"Valeriy Malov"_s)
<< Person(QStringLiteral("Nick Lanham")); << Person(u"Nick Lanham"_s);
strawberry_thanks_ \ strawberry_thanks_ \
<< Person(QStringLiteral("Mark Kretschmann")) << Person(u"Mark Kretschmann"_s)
<< Person(QStringLiteral("Max Howell")) << Person(u"Max Howell"_s)
<< Person(QStringLiteral("Artur Rona")) << Person(u"Artur Rona"_s)
<< Person(QStringLiteral("Robert-André Mauchin")) << Person(u"Robert-André Mauchin"_s)
<< Person(QStringLiteral("Thomas Pierson")) << Person(u"Thomas Pierson"_s)
<< Person(QStringLiteral("Fabio Loli")); << Person(u"Fabio Loli"_s);
QFont title_font; QFont title_font;
title_font.setBold(true); title_font.setBold(true);

View File

@ -40,6 +40,8 @@
#include "core/application.h" #include "core/application.h"
#include "core/database.h" #include "core/database.h"
using namespace Qt::Literals::StringLiterals;
Console::Console(Application *app, QWidget *parent) : QDialog(parent), ui_{}, app_(app) { Console::Console(Application *app, QWidget *parent) : QDialog(parent), ui_{}, app_(app) {
ui_.setupUi(this); ui_.setupUi(this);
@ -48,7 +50,7 @@ Console::Console(Application *app, QWidget *parent) : QDialog(parent), ui_{}, ap
QObject::connect(ui_.run, &QPushButton::clicked, this, &Console::RunQuery); QObject::connect(ui_.run, &QPushButton::clicked, this, &Console::RunQuery);
QFont font(QStringLiteral("Monospace")); QFont font(u"Monospace"_s);
font.setStyleHint(QFont::TypeWriter); font.setStyleHint(QFont::TypeWriter);
ui_.output->setFont(font); ui_.output->setFont(font);
@ -69,7 +71,7 @@ void Console::RunQuery() {
return; return;
} }
ui_.output->append(QStringLiteral("<b>&gt; ") + query.executedQuery() + QStringLiteral("</b>")); ui_.output->append(u"<b>&gt; "_s + query.executedQuery() + u"</b>"_s);
while (query.next() && query.isValid()) { while (query.next() && query.isValid()) {
QSqlRecord record = query.record(); QSqlRecord record = query.record();

View File

@ -147,7 +147,7 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
ui_->loading_label->hide(); ui_->loading_label->hide();
ui_->label_lyrics->hide(); ui_->label_lyrics->hide();
ui_->fetch_tag->setIcon(QPixmap::fromImage(QImage(QStringLiteral(":/pictures/musicbrainz.png")))); ui_->fetch_tag->setIcon(QPixmap::fromImage(QImage(u":/pictures/musicbrainz.png"_s)));
#ifdef HAVE_MUSICBRAINZ #ifdef HAVE_MUSICBRAINZ
ui_->fetch_tag->setEnabled(true); ui_->fetch_tag->setEnabled(true);
#else #else
@ -235,8 +235,8 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
ui_->summary_art->installEventFilter(this); ui_->summary_art->installEventFilter(this);
// Add the next/previous buttons // Add the next/previous buttons
previous_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-previous")), tr("Previous"), this); previous_button_ = new QPushButton(IconLoader::Load(u"go-previous"_s), tr("Previous"), this);
next_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-next")), tr("Next"), this); next_button_ = new QPushButton(IconLoader::Load(u"go-next"_s), tr("Next"), this);
ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole); ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole);
ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole); ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole);
@ -315,7 +315,7 @@ void EditTagDialog::hideEvent(QHideEvent *e) {
void EditTagDialog::accept() { void EditTagDialog::accept() {
// Show the loading indicator // Show the loading indicator
if (!SetLoading(tr("Saving tracks") + QStringLiteral("..."))) return; if (!SetLoading(tr("Saving tracks") + u"..."_s)) return;
SaveData(); SaveData();
@ -416,7 +416,7 @@ QList<EditTagDialog::Data> EditTagDialog::LoadData(const SongList &songs) {
void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemPtrList &items) { void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemPtrList &items) {
// Show the loading indicator // Show the loading indicator
if (!SetLoading(tr("Loading tracks") + QStringLiteral("..."))) return; if (!SetLoading(tr("Loading tracks") + u"..."_s)) return;
data_.clear(); data_.clear();
playlist_items_ = items; playlist_items_ = items;
@ -790,12 +790,12 @@ void EditTagDialog::UpdateSummaryTab(const Song &song) {
cover_options.device_pixel_ratio = devicePixelRatioF(); cover_options.device_pixel_ratio = devicePixelRatioF();
summary_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options, song); summary_cover_art_id_ = app_->album_cover_loader()->LoadImageAsync(cover_options, song);
ui_->summary->setText(QStringLiteral("<p><b>") + song.PrettyTitleWithArtist().toHtmlEscaped() + QStringLiteral("</b></p>")); ui_->summary->setText(u"<p><b>"_s + song.PrettyTitleWithArtist().toHtmlEscaped() + u"</b></p>"_s);
ui_->length->setText(Utilities::PrettyTimeNanosec(song.length_nanosec())); ui_->length->setText(Utilities::PrettyTimeNanosec(song.length_nanosec()));
SetText(ui_->samplerate, song.samplerate(), QStringLiteral("Hz")); SetText(ui_->samplerate, song.samplerate(), u"Hz"_s);
SetText(ui_->bitdepth, song.bitdepth(), QStringLiteral("Bit")); SetText(ui_->bitdepth, song.bitdepth(), u"Bit"_s);
SetText(ui_->bitrate, song.bitrate(), tr("kbps")); SetText(ui_->bitrate, song.bitrate(), tr("kbps"));
ui_->ebur128_integrated_loudness->setText(song.Ebur128LoudnessLUFSToText()); ui_->ebur128_integrated_loudness->setText(song.Ebur128LoudnessLUFSToText());
ui_->ebur128_loudness_range->setText(song.Ebur128LoudnessRangeLUToText()); ui_->ebur128_loudness_range->setText(song.Ebur128LoudnessRangeLUToText());

View File

@ -31,6 +31,8 @@
#include "core/iconloader.h" #include "core/iconloader.h"
#include "scrobbler/lastfmimport.h" #include "scrobbler/lastfmimport.h"
using namespace Qt::Literals::StringLiterals;
LastFMImportDialog::LastFMImportDialog(SharedPtr<LastFMImport> lastfm_import, QWidget *parent) LastFMImportDialog::LastFMImportDialog(SharedPtr<LastFMImport> lastfm_import, QWidget *parent)
: QDialog(parent), : QDialog(parent),
ui_(new Ui_LastFMImportDialog), ui_(new Ui_LastFMImportDialog),
@ -41,7 +43,7 @@ LastFMImportDialog::LastFMImportDialog(SharedPtr<LastFMImport> lastfm_import, QW
ui_->setupUi(this); ui_->setupUi(this);
setWindowIcon(IconLoader::Load(QStringLiteral("scrobble"))); setWindowIcon(IconLoader::Load(u"scrobble"_s));
ui_->stackedWidget->setCurrentWidget(ui_->page_start); ui_->stackedWidget->setCurrentWidget(ui_->page_start);

View File

@ -31,7 +31,7 @@ SnapDialog::SnapDialog(QWidget *parent) : MessageDialog(parent) {
setWindowTitle(tr("Strawberry is running as a Snap")); setWindowTitle(tr("Strawberry is running as a Snap"));
const QIcon icon = IconLoader::Load(QStringLiteral("dialog-warning")); const QIcon icon = IconLoader::Load(u"dialog-warning"_s);
const QPixmap pixmap = icon.pixmap(QSize(64, 64), devicePixelRatioF()); const QPixmap pixmap = icon.pixmap(QSize(64, 64), devicePixelRatioF());
ui_->label_logo->setPixmap(pixmap); ui_->label_logo->setPixmap(pixmap);

View File

@ -31,7 +31,9 @@
#include "alsadevicefinder.h" #include "alsadevicefinder.h"
#include "enginedevice.h" #include "enginedevice.h"
AlsaDeviceFinder::AlsaDeviceFinder() : DeviceFinder(QStringLiteral("alsa"), { QStringLiteral("alsa"), QStringLiteral("alsasink") }) {} using namespace Qt::Literals::StringLiterals;
AlsaDeviceFinder::AlsaDeviceFinder() : DeviceFinder(u"alsa"_s, { u"alsa"_s, u"alsasink"_s }) {}
EngineDeviceList AlsaDeviceFinder::ListDevices() { EngineDeviceList AlsaDeviceFinder::ListDevices() {

View File

@ -28,7 +28,9 @@
#include "alsapcmdevicefinder.h" #include "alsapcmdevicefinder.h"
#include "enginedevice.h" #include "enginedevice.h"
AlsaPCMDeviceFinder::AlsaPCMDeviceFinder() : DeviceFinder(QStringLiteral("alsa"), { QStringLiteral("alsa"), QStringLiteral("alsasink") }) {} using namespace Qt::Literals::StringLiterals;
AlsaPCMDeviceFinder::AlsaPCMDeviceFinder() : DeviceFinder(u"alsa"_s, { u"alsa"_s, u"alsasink"_s }) {}
EngineDeviceList AlsaPCMDeviceFinder::ListDevices() { EngineDeviceList AlsaPCMDeviceFinder::ListDevices() {

View File

@ -28,7 +28,9 @@
#include "enginedevice.h" #include "enginedevice.h"
#include "core/logging.h" #include "core/logging.h"
AsioDeviceFinder::AsioDeviceFinder() : DeviceFinder(QStringLiteral("asio"), { QStringLiteral("asiosink") }) {} using namespace Qt::Literals::StringLiterals;
AsioDeviceFinder::AsioDeviceFinder() : DeviceFinder(u"asio"_s, { u"asiosink"_s }) {}
EngineDeviceList AsioDeviceFinder::ListDevices() { EngineDeviceList AsioDeviceFinder::ListDevices() {

View File

@ -39,6 +39,8 @@
#include "core/logging.h" #include "core/logging.h"
#include "core/signalchecker.h" #include "core/signalchecker.h"
using namespace Qt::Literals::StringLiterals;
#ifndef u_int32_t #ifndef u_int32_t
using u_int32_t = unsigned int; using u_int32_t = unsigned int;
#endif #endif
@ -80,11 +82,11 @@ QString Chromaprinter::CreateFingerprint() {
return QString(); return QString();
} }
GstElement *src = CreateElement(QStringLiteral("filesrc"), pipeline); GstElement *src = CreateElement(u"filesrc"_s, pipeline);
GstElement *decode = CreateElement(QStringLiteral("decodebin"), pipeline); GstElement *decode = CreateElement(u"decodebin"_s, pipeline);
GstElement *convert = CreateElement(QStringLiteral("audioconvert"), pipeline); GstElement *convert = CreateElement(u"audioconvert"_s, pipeline);
GstElement *resample = CreateElement(QStringLiteral("audioresample"), pipeline); GstElement *resample = CreateElement(u"audioresample"_s, pipeline);
GstElement *sink = CreateElement(QStringLiteral("appsink"), pipeline); GstElement *sink = CreateElement(u"appsink"_s, pipeline);
if (!src || !decode || !convert || !resample || !sink) { if (!src || !decode || !convert || !resample || !sink) {
gst_object_unref(pipeline); gst_object_unref(pipeline);

View File

@ -395,11 +395,11 @@ std::optional<EBUR128Measures> EBUR128AnalysisImpl::Compute(const Song &song) {
return std::nullopt; return std::nullopt;
} }
GstElement *src = CreateElement(QStringLiteral("filesrc"), pipeline); GstElement *src = CreateElement(u"filesrc"_s, pipeline);
GstElement *decode = CreateElement(QStringLiteral("decodebin"), pipeline); GstElement *decode = CreateElement(u"decodebin"_s, pipeline);
GstElement *convert = CreateElement(QStringLiteral("audioconvert"), pipeline); GstElement *convert = CreateElement(u"audioconvert"_s, pipeline);
GstElement *queue = CreateElement(QStringLiteral("queue2"), pipeline); GstElement *queue = CreateElement(u"queue2"_s, pipeline);
GstElement *sink = CreateElement(QStringLiteral("appsink"), pipeline); GstElement *sink = CreateElement(u"appsink"_s, pipeline);
if (!src || !decode || !convert || !queue || !sink) { if (!src || !decode || !convert || !queue || !sink) {
gst_object_unref(pipeline); gst_object_unref(pipeline);

View File

@ -94,9 +94,9 @@ EngineBase::Type EngineBase::TypeFromName(const QString &name) {
QString EngineBase::Name(const Type type) { QString EngineBase::Name(const Type type) {
switch (type) { switch (type) {
case Type::GStreamer: return QStringLiteral("gstreamer"); case Type::GStreamer: return u"gstreamer"_s;
case Type::None: case Type::None:
default: return QStringLiteral("None"); default: return u"None"_s;
} }
} }
@ -104,9 +104,9 @@ QString EngineBase::Name(const Type type) {
QString EngineBase::Description(const Type type) { QString EngineBase::Description(const Type type) {
switch (type) { switch (type) {
case Type::GStreamer: return QStringLiteral("GStreamer"); case Type::GStreamer: return u"GStreamer"_s;
case Type::None: case Type::None:
default: return QStringLiteral("None"); default: return u"None"_s;
} }
} }
@ -207,7 +207,7 @@ void EngineBase::ReloadSettings() {
bool http2_enabled = s.value("http2", false).toBool(); bool http2_enabled = s.value("http2", false).toBool();
if (http2_enabled != http2_enabled_) { if (http2_enabled != http2_enabled_) {
http2_enabled_ = http2_enabled; http2_enabled_ = http2_enabled;
Utilities::SetEnv("SOUP_FORCE_HTTP1", http2_enabled_ ? ""_L1 : QStringLiteral("1")); Utilities::SetEnv("SOUP_FORCE_HTTP1", http2_enabled_ ? ""_L1 : u"1"_s);
qLog(Debug) << "SOUP_FORCE_HTTP1:" << (http2_enabled_ ? "OFF" : "ON"); qLog(Debug) << "SOUP_FORCE_HTTP1:" << (http2_enabled_ ? "OFF" : "ON");
} }

View File

@ -26,27 +26,27 @@ EngineDevice::EngineDevice() : card(0), device(0) {}
QString EngineDevice::GuessIconName() const { QString EngineDevice::GuessIconName() const {
if (description.contains("mcintosh"_L1, Qt::CaseInsensitive)) { if (description.contains("mcintosh"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("mcintosh"); return u"mcintosh"_s;
} }
if (description.contains("electrocompaniet"_L1, Qt::CaseInsensitive)) { if (description.contains("electrocompaniet"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("electrocompaniet"); return u"electrocompaniet"_s;
} }
if (description.contains("intel"_L1, Qt::CaseInsensitive)) { if (description.contains("intel"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("intel"); return u"intel"_s;
} }
if (description.contains("realtek"_L1, Qt::CaseInsensitive)) { if (description.contains("realtek"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("realtek"); return u"realtek"_s;
} }
if (description.contains("nvidia"_L1, Qt::CaseInsensitive)) { if (description.contains("nvidia"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("nvidia"); return u"nvidia"_s;
} }
if (description.contains("headset"_L1, Qt::CaseInsensitive)) { if (description.contains("headset"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("headset"); return u"headset"_s;
} }
if (description.contains("pulseaudio"_L1, Qt::CaseInsensitive)) { if (description.contains("pulseaudio"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("pulseaudio"); return u"pulseaudio"_s;
} }
return QStringLiteral("soundcard"); return u"soundcard"_s;
} }

View File

@ -189,7 +189,7 @@ void GstEngine::StartPreloading(const QUrl &media_url, const QUrl &stream_url, c
if (current_pipeline_) { if (current_pipeline_) {
current_pipeline_->PrepareNextUrl(media_url, stream_url, gst_url, beginning_nanosec, force_stop_at_end ? end_nanosec : 0); current_pipeline_->PrepareNextUrl(media_url, stream_url, gst_url, beginning_nanosec, force_stop_at_end ? end_nanosec : 0);
// Add request to discover the stream // Add request to discover the stream
if (discoverer_ && media_url.scheme() != QStringLiteral("spotify")) { if (discoverer_ && media_url.scheme() != u"spotify"_s) {
if (!gst_discoverer_discover_uri_async(discoverer_, gst_url.constData())) { if (!gst_discoverer_discover_uri_async(discoverer_, gst_url.constData())) {
qLog(Error) << "Failed to start stream discovery for" << gst_url; qLog(Error) << "Failed to start stream discovery for" << gst_url;
} }
@ -258,7 +258,7 @@ bool GstEngine::Load(const QUrl &media_url, const QUrl &stream_url, const Engine
} }
// Add request to discover the stream // Add request to discover the stream
if (discoverer_ && media_url.scheme() != QStringLiteral("spotify")) { if (discoverer_ && media_url.scheme() != u"spotify"_s) {
if (!gst_discoverer_discover_uri_async(discoverer_, gst_url.constData())) { if (!gst_discoverer_discover_uri_async(discoverer_, gst_url.constData())) {
qLog(Error) << "Failed to start stream discovery for" << gst_url; qLog(Error) << "Failed to start stream discovery for" << gst_url;
} }
@ -1162,12 +1162,12 @@ void GstEngine::StreamDiscoveryFinished(GstDiscoverer *discoverer, gpointer self
QString GstEngine::GSTdiscovererErrorMessage(GstDiscovererResult result) { QString GstEngine::GSTdiscovererErrorMessage(GstDiscovererResult result) {
switch (result) { switch (result) {
case GST_DISCOVERER_URI_INVALID: return QStringLiteral("The URI is invalid"); case GST_DISCOVERER_URI_INVALID: return u"The URI is invalid"_s;
case GST_DISCOVERER_TIMEOUT: return QStringLiteral("The discovery timed-out"); case GST_DISCOVERER_TIMEOUT: return u"The discovery timed-out"_s;
case GST_DISCOVERER_BUSY: return QStringLiteral("The discoverer was already discovering a file"); case GST_DISCOVERER_BUSY: return u"The discoverer was already discovering a file"_s;
case GST_DISCOVERER_MISSING_PLUGINS: return QStringLiteral("Some plugins are missing for full discovery"); case GST_DISCOVERER_MISSING_PLUGINS: return u"Some plugins are missing for full discovery"_s;
case GST_DISCOVERER_ERROR: case GST_DISCOVERER_ERROR:
default: return QStringLiteral("An error happened and the GError is set"); default: return u"An error happened and the GError is set"_s;
} }
} }

View File

@ -286,17 +286,17 @@ QString GstEnginePipeline::GstStateText(const GstState state) {
switch (state) { switch (state) {
case GST_STATE_VOID_PENDING: case GST_STATE_VOID_PENDING:
return QStringLiteral("Pending"); return u"Pending"_s;
case GST_STATE_NULL: case GST_STATE_NULL:
return QStringLiteral("Null"); return u"Null"_s;
case GST_STATE_READY: case GST_STATE_READY:
return QStringLiteral("Ready"); return u"Ready"_s;
case GST_STATE_PAUSED: case GST_STATE_PAUSED:
return QStringLiteral("Paused"); return u"Paused"_s;
case GST_STATE_PLAYING: case GST_STATE_PLAYING:
return QStringLiteral("Playing"); return u"Playing"_s;
default: default:
return QStringLiteral("Unknown"); return u"Unknown"_s;
} }
} }
@ -424,10 +424,10 @@ bool GstEnginePipeline::InitFromUrl(const QUrl &media_url, const QUrl &stream_ur
guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0; guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0;
gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano); gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano);
if (QVersionNumber::compare(QVersionNumber(static_cast<int>(version_major), static_cast<int>(version_minor)), QVersionNumber(1, 24)) >= 0) { if (QVersionNumber::compare(QVersionNumber(static_cast<int>(version_major), static_cast<int>(version_minor)), QVersionNumber(1, 24)) >= 0) {
pipeline_ = CreateElement(QStringLiteral("playbin3"), QStringLiteral("pipeline"), nullptr, error); pipeline_ = CreateElement(u"playbin3"_s, u"pipeline"_s, nullptr, error);
} }
else { else {
pipeline_ = CreateElement(QStringLiteral("playbin"), QStringLiteral("pipeline"), nullptr, error); pipeline_ = CreateElement(u"playbin"_s, u"pipeline"_s, nullptr, error);
} }
if (!pipeline_) return false; if (!pipeline_) return false;
@ -602,31 +602,31 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create all the other elements // Create all the other elements
audioqueue_ = CreateElement(QStringLiteral("queue2"), QStringLiteral("audioqueue"), audiobin_, error); audioqueue_ = CreateElement(u"queue2"_s, u"audioqueue"_s, audiobin_, error);
if (!audioqueue_) { if (!audioqueue_) {
return false; return false;
} }
audioqueueconverter_ = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audioqueueconverter"), audiobin_, error); audioqueueconverter_ = CreateElement(u"audioconvert"_s, u"audioqueueconverter"_s, audiobin_, error);
if (!audioqueueconverter_) { if (!audioqueueconverter_) {
return false; return false;
} }
GstElement *audiosinkconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audiosinkconverter"), audiobin_, error); GstElement *audiosinkconverter = CreateElement(u"audioconvert"_s, u"audiosinkconverter"_s, audiobin_, error);
if (!audiosinkconverter) { if (!audiosinkconverter) {
return false; return false;
} }
// Create the volume element if it's enabled. // Create the volume element if it's enabled.
if (volume_enabled_ && !volume_) { if (volume_enabled_ && !volume_) {
volume_sw_ = CreateElement(QStringLiteral("volume"), QStringLiteral("volume_sw"), audiobin_, error); volume_sw_ = CreateElement(u"volume"_s, u"volume_sw"_s, audiobin_, error);
if (!volume_sw_) { if (!volume_sw_) {
return false; return false;
} }
} }
if (fading_enabled_) { if (fading_enabled_) {
volume_fading_ = CreateElement(QStringLiteral("volume"), QStringLiteral("volume_fading"), audiobin_, error); volume_fading_ = CreateElement(u"volume"_s, u"volume_fading"_s, audiobin_, error);
if (!volume_fading_) { if (!volume_fading_) {
return false; return false;
} }
@ -637,7 +637,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the stereo balancer elements if it's enabled. // Create the stereo balancer elements if it's enabled.
if (stereo_balancer_enabled_) { if (stereo_balancer_enabled_) {
audiopanorama_ = CreateElement(QStringLiteral("audiopanorama"), QStringLiteral("audiopanorama"), audiobin_, error); audiopanorama_ = CreateElement(u"audiopanorama"_s, u"audiopanorama"_s, audiobin_, error);
if (!audiopanorama_) { if (!audiopanorama_) {
return false; return false;
} }
@ -647,11 +647,11 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the equalizer elements if it's enabled. // Create the equalizer elements if it's enabled.
if (eq_enabled_) { if (eq_enabled_) {
equalizer_preamp_ = CreateElement(QStringLiteral("volume"), QStringLiteral("equalizer_preamp"), audiobin_, error); equalizer_preamp_ = CreateElement(u"volume"_s, u"equalizer_preamp"_s, audiobin_, error);
if (!equalizer_preamp_) { if (!equalizer_preamp_) {
return false; return false;
} }
equalizer_ = CreateElement(QStringLiteral("equalizer-nbands"), QStringLiteral("equalizer_nbands"), audiobin_, error); equalizer_ = CreateElement(u"equalizer-nbands"_s, u"equalizer_nbands"_s, audiobin_, error);
if (!equalizer_) { if (!equalizer_) {
return false; return false;
} }
@ -701,15 +701,15 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
GstElement *rglimiter = nullptr; GstElement *rglimiter = nullptr;
GstElement *rgconverter = nullptr; GstElement *rgconverter = nullptr;
if (rg_enabled_) { if (rg_enabled_) {
rgvolume = CreateElement(QStringLiteral("rgvolume"), QStringLiteral("rgvolume"), audiobin_, error); rgvolume = CreateElement(u"rgvolume"_s, u"rgvolume"_s, audiobin_, error);
if (!rgvolume) { if (!rgvolume) {
return false; return false;
} }
rglimiter = CreateElement(QStringLiteral("rglimiter"), QStringLiteral("rglimiter"), audiobin_, error); rglimiter = CreateElement(u"rglimiter"_s, u"rglimiter"_s, audiobin_, error);
if (!rglimiter) { if (!rglimiter) {
return false; return false;
} }
rgconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("rgconverter"), audiobin_, error); rgconverter = CreateElement(u"audioconvert"_s, u"rgconverter"_s, audiobin_, error);
if (!rgconverter) { if (!rgconverter) {
return false; return false;
} }
@ -723,7 +723,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the EBU R 128 loudness normalization volume element if enabled. // Create the EBU R 128 loudness normalization volume element if enabled.
if (ebur128_loudness_normalization_) { if (ebur128_loudness_normalization_) {
volume_ebur128_ = CreateElement(QStringLiteral("volume"), QStringLiteral("ebur128_volume"), audiobin_, error); volume_ebur128_ = CreateElement(u"volume"_s, u"ebur128_volume"_s, audiobin_, error);
if (!volume_ebur128_) { if (!volume_ebur128_) {
return false; return false;
} }
@ -735,7 +735,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
GstElement *bs2b = nullptr; GstElement *bs2b = nullptr;
if (bs2b_enabled_) { if (bs2b_enabled_) {
bs2b = CreateElement(QStringLiteral("bs2b"), QStringLiteral("bs2b"), audiobin_, error); bs2b = CreateElement(u"bs2b"_s, u"bs2b"_s, audiobin_, error);
if (!bs2b) { if (!bs2b) {
return false; return false;
} }
@ -781,7 +781,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Link all elements // Link all elements
if (!gst_element_link(audioqueue_, audioqueueconverter_)) { if (!gst_element_link(audioqueue_, audioqueueconverter_)) {
error = QStringLiteral("Failed to link audio queue to audio queue converter."); error = u"Failed to link audio queue to audio queue converter."_s;
return false; return false;
} }
@ -1568,7 +1568,7 @@ void GstEnginePipeline::TagMessageReceived(GstMessage *msg) {
if (!engine_metadata.title.isEmpty() && engine_metadata.artist.isEmpty() && engine_metadata.album.isEmpty()) { if (!engine_metadata.title.isEmpty() && engine_metadata.artist.isEmpty() && engine_metadata.album.isEmpty()) {
QStringList title_splitted; QStringList title_splitted;
if (engine_metadata.title.contains(" - "_L1)) { if (engine_metadata.title.contains(" - "_L1)) {
title_splitted = engine_metadata.title.split(QStringLiteral(" - ")); title_splitted = engine_metadata.title.split(u" - "_s);
} }
else if (engine_metadata.title.contains(u'~')) { else if (engine_metadata.title.contains(u'~')) {
title_splitted = engine_metadata.title.split(u'~'); title_splitted = engine_metadata.title.split(u'~');

View File

@ -65,7 +65,7 @@ std::unique_ptr<T> GetProperty(const AudioDeviceID &device_id, const AudioObject
} // namespace } // namespace
MacOsDeviceFinder::MacOsDeviceFinder() : DeviceFinder(QStringLiteral("osxaudio"), { QStringLiteral("osxaudio"), QStringLiteral("osx"), QStringLiteral("osxaudiosink") }) {} MacOsDeviceFinder::MacOsDeviceFinder() : DeviceFinder(u"osxaudio"_s, { u"osxaudio"_s, u"osx"_s, u"osxaudiosink"_s }) {}
EngineDeviceList MacOsDeviceFinder::ListDevices() { EngineDeviceList MacOsDeviceFinder::ListDevices() {

View File

@ -36,12 +36,14 @@
#include "enginedevice.h" #include "enginedevice.h"
#include "core/logging.h" #include "core/logging.h"
using namespace Qt::Literals::StringLiterals;
#ifdef _MSC_VER #ifdef _MSC_VER
DEFINE_GUID(IID_IMMDeviceEnumerator, 0xa95664d2, 0x9614, 0x4f35, 0xa7, 0x46, 0xde, 0x8d, 0xb6, 0x36, 0x17, 0xe6); DEFINE_GUID(IID_IMMDeviceEnumerator, 0xa95664d2, 0x9614, 0x4f35, 0xa7, 0x46, 0xde, 0x8d, 0xb6, 0x36, 0x17, 0xe6);
DEFINE_GUID(CLSID_MMDeviceEnumerator, 0xbcde0395, 0xe52f, 0x467c, 0x8e, 0x3d, 0xc4, 0x57, 0x92, 0x91, 0x69, 0x2e); DEFINE_GUID(CLSID_MMDeviceEnumerator, 0xbcde0395, 0xe52f, 0x467c, 0x8e, 0x3d, 0xc4, 0x57, 0x92, 0x91, 0x69, 0x2e);
#endif #endif
MMDeviceFinder::MMDeviceFinder() : DeviceFinder(QStringLiteral("mmdevice"), { QStringLiteral("wasapisink") }) {} MMDeviceFinder::MMDeviceFinder() : DeviceFinder(u"mmdevice"_s, { u"wasapisink"_s }) {}
EngineDeviceList MMDeviceFinder::ListDevices() { EngineDeviceList MMDeviceFinder::ListDevices() {

View File

@ -33,7 +33,9 @@
#include "pulsedevicefinder.h" #include "pulsedevicefinder.h"
#include "enginedevice.h" #include "enginedevice.h"
PulseDeviceFinder::PulseDeviceFinder() : DeviceFinder(QStringLiteral("pulseaudio"), { QStringLiteral("pulseaudio"), QStringLiteral("pulse"), QStringLiteral("pulsesink") }), mainloop_(nullptr), context_(nullptr) {} using namespace Qt::Literals::StringLiterals;
PulseDeviceFinder::PulseDeviceFinder() : DeviceFinder(u"pulseaudio"_s, { u"pulseaudio"_s, u"pulse"_s, u"pulsesink"_s }), mainloop_(nullptr), context_(nullptr) {}
bool PulseDeviceFinder::Initialize() { bool PulseDeviceFinder::Initialize() {

View File

@ -45,7 +45,7 @@ using namespace ABI::Windows::Devices::Enumeration;
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
UWPDeviceFinder::UWPDeviceFinder() : DeviceFinder(QStringLiteral("uwpdevice"), { QStringLiteral("wasapi2sink") }) {} UWPDeviceFinder::UWPDeviceFinder() : DeviceFinder(u"uwpdevice"_s, { u"wasapi2sink"_s }) {}
namespace { namespace {

View File

@ -49,6 +49,8 @@
#include "equalizerslider.h" #include "equalizerslider.h"
#include "ui_equalizer.h" #include "ui_equalizer.h"
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr char kSettingsGroup[] = "Equalizer"; constexpr char kSettingsGroup[] = "Equalizer";
const char *kGainText[] = { "60", "170", "310", "600", "1k", "3k", "6k", "12k", "14k", "16k" }; const char *kGainText[] = { "60", "170", "310", "600", "1k", "3k", "6k", "12k", "14k", "16k" };
@ -62,8 +64,8 @@ Equalizer::Equalizer(QWidget *parent)
ui_->setupUi(this); ui_->setupUi(this);
// Icons // Icons
ui_->preset_del->setIcon(IconLoader::Load(QStringLiteral("list-remove"))); ui_->preset_del->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->preset_save->setIcon(IconLoader::Load(QStringLiteral("document-save"))); ui_->preset_save->setIcon(IconLoader::Load(u"document-save"_s));
preamp_ = AddSlider(tr("Pre-amp")); preamp_ = AddSlider(tr("Pre-amp"));
@ -114,7 +116,7 @@ void Equalizer::ReloadSettings() {
if (count == 0) LoadDefaultPresets(); if (count == 0) LoadDefaultPresets();
// Selected preset // Selected preset
QString selected_preset = s.value("selected_preset", QStringLiteral("Custom")).toString(); QString selected_preset = s.value("selected_preset", u"Custom"_s).toString();
QString selected_preset_display_name = tr(qUtf8Printable(selected_preset)); QString selected_preset_display_name = tr(qUtf8Printable(selected_preset));
int selected_index = ui_->preset->findText(selected_preset_display_name); int selected_index = ui_->preset->findText(selected_preset_display_name);
if (selected_index != -1) ui_->preset->setCurrentIndex(selected_index); if (selected_index != -1) ui_->preset->setCurrentIndex(selected_index);

View File

@ -122,9 +122,9 @@ void GlobalShortcutsBackendGnome::GnomeMediaKeyPressed(const QString &applicatio
Q_UNUSED(application) Q_UNUSED(application)
auto shortcuts = manager_->shortcuts(); auto shortcuts = manager_->shortcuts();
if (key == "Play"_L1) shortcuts[QStringLiteral("play_pause")].action->trigger(); if (key == "Play"_L1) shortcuts[u"play_pause"_s].action->trigger();
if (key == "Stop"_L1) shortcuts[QStringLiteral("stop")].action->trigger(); if (key == "Stop"_L1) shortcuts[u"stop"_s].action->trigger();
if (key == "Next"_L1) shortcuts[QStringLiteral("next_track")].action->trigger(); if (key == "Next"_L1) shortcuts[u"next_track"_s].action->trigger();
if (key == "Previous"_L1) shortcuts[QStringLiteral("prev_track")].action->trigger(); if (key == "Previous"_L1) shortcuts[u"prev_track"_s].action->trigger();
} }

View File

@ -38,6 +38,8 @@
#include "kglobalaccel.h" #include "kglobalaccel.h"
#include "kglobalaccelcomponent.h" #include "kglobalaccelcomponent.h"
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr char kKdeService[] = "org.kde.kglobalaccel"; constexpr char kKdeService[] = "org.kde.kglobalaccel";
constexpr char kKdePath[] = "/kglobalaccel"; constexpr char kKdePath[] = "/kglobalaccel";
@ -102,7 +104,7 @@ void GlobalShortcutsBackendKDE::RegisterFinished(QDBusPendingCallWatcher *watche
watcher->deleteLater(); watcher->deleteLater();
if (!reply.isValid()) { if (!reply.isValid()) {
if (reply.error().name() != QStringLiteral("org.kde.kglobalaccel.NoSuchComponent")) { if (reply.error().name() != u"org.kde.kglobalaccel.NoSuchComponent"_s) {
qLog(Error) << "Failed to register:" << reply.error().name() << reply.error().message(); qLog(Error) << "Failed to register:" << reply.error().name() << reply.error().message();
} }
return; return;

View File

@ -122,9 +122,9 @@ void GlobalShortcutsBackendMate::MateMediaKeyPressed(const QString &application,
Q_UNUSED(application) Q_UNUSED(application)
auto shortcuts = manager_->shortcuts(); auto shortcuts = manager_->shortcuts();
if (key == "Play"_L1) shortcuts[QStringLiteral("play_pause")].action->trigger(); if (key == "Play"_L1) shortcuts[u"play_pause"_s].action->trigger();
if (key == "Stop"_L1) shortcuts[QStringLiteral("stop")].action->trigger(); if (key == "Stop"_L1) shortcuts[u"stop"_s].action->trigger();
if (key == "Next"_L1) shortcuts[QStringLiteral("next_track")].action->trigger(); if (key == "Next"_L1) shortcuts[u"next_track"_s].action->trigger();
if (key == "Previous"_L1) shortcuts[QStringLiteral("prev_track")].action->trigger(); if (key == "Previous"_L1) shortcuts[u"prev_track"_s].action->trigger();
} }

View File

@ -25,6 +25,8 @@
#include "globalshortcutsbackend.h" #include "globalshortcutsbackend.h"
#include "globalshortcutsmanager.h" #include "globalshortcutsmanager.h"
using namespace Qt::Literals::StringLiterals;
GlobalShortcutsBackend::GlobalShortcutsBackend(GlobalShortcutsManager *manager, const Type type, QObject *parent) GlobalShortcutsBackend::GlobalShortcutsBackend(GlobalShortcutsManager *manager, const Type type, QObject *parent)
: QObject(parent), : QObject(parent),
manager_(manager), manager_(manager),
@ -35,19 +37,19 @@ QString GlobalShortcutsBackend::name() const {
switch (type_) { switch (type_) {
case Type::None: case Type::None:
return QStringLiteral("None"); return u"None"_s;
case Type::KDE: case Type::KDE:
return QStringLiteral("KDE"); return u"KDE"_s;
case Type::Gnome: case Type::Gnome:
return QStringLiteral("Gnome"); return u"Gnome"_s;
case Type::Mate: case Type::Mate:
return QStringLiteral("Mate"); return u"Mate"_s;
case Type::X11: case Type::X11:
return QStringLiteral("X11"); return u"X11"_s;
case Type::macOS: case Type::macOS:
return QStringLiteral("macOS"); return u"macOS"_s;
case Type::Win: case Type::Win:
return QStringLiteral("Windows"); return u"Windows"_s;
} }
return QString(); return QString();

View File

@ -60,31 +60,33 @@
#include "settings/globalshortcutssettingspage.h" #include "settings/globalshortcutssettingspage.h"
using namespace Qt::Literals::StringLiterals;
GlobalShortcutsManager::GlobalShortcutsManager(QWidget *parent) : QWidget(parent) { GlobalShortcutsManager::GlobalShortcutsManager(QWidget *parent) : QWidget(parent) {
settings_.beginGroup(GlobalShortcutsSettingsPage::kSettingsGroup); settings_.beginGroup(GlobalShortcutsSettingsPage::kSettingsGroup);
// Create actions // Create actions
AddShortcut(QStringLiteral("play"), tr("Play"), std::bind(&GlobalShortcutsManager::Play, this)); AddShortcut(u"play"_s, tr("Play"), std::bind(&GlobalShortcutsManager::Play, this));
AddShortcut(QStringLiteral("pause"), tr("Pause"), std::bind(&GlobalShortcutsManager::Pause, this)); AddShortcut(u"pause"_s, tr("Pause"), std::bind(&GlobalShortcutsManager::Pause, this));
AddShortcut(QStringLiteral("play_pause"), tr("Play/Pause"), std::bind(&GlobalShortcutsManager::PlayPause, this), QKeySequence(Qt::Key_MediaPlay)); AddShortcut(u"play_pause"_s, tr("Play/Pause"), std::bind(&GlobalShortcutsManager::PlayPause, this), QKeySequence(Qt::Key_MediaPlay));
AddShortcut(QStringLiteral("stop"), tr("Stop"), std::bind(&GlobalShortcutsManager::Stop, this), QKeySequence(Qt::Key_MediaStop)); AddShortcut(u"stop"_s, tr("Stop"), std::bind(&GlobalShortcutsManager::Stop, this), QKeySequence(Qt::Key_MediaStop));
AddShortcut(QStringLiteral("stop_after"), tr("Stop playing after current track"), std::bind(&GlobalShortcutsManager::StopAfter, this)); AddShortcut(u"stop_after"_s, tr("Stop playing after current track"), std::bind(&GlobalShortcutsManager::StopAfter, this));
AddShortcut(QStringLiteral("next_track"), tr("Next track"), std::bind(&GlobalShortcutsManager::Next, this), QKeySequence(Qt::Key_MediaNext)); AddShortcut(u"next_track"_s, tr("Next track"), std::bind(&GlobalShortcutsManager::Next, this), QKeySequence(Qt::Key_MediaNext));
AddShortcut(QStringLiteral("prev_track"), tr("Previous track"), std::bind(&GlobalShortcutsManager::Previous, this), QKeySequence(Qt::Key_MediaPrevious)); AddShortcut(u"prev_track"_s, tr("Previous track"), std::bind(&GlobalShortcutsManager::Previous, this), QKeySequence(Qt::Key_MediaPrevious));
AddShortcut(QStringLiteral("restart_or_prev_track"), tr("Restart or previous track"), std::bind(&GlobalShortcutsManager::RestartOrPrevious, this)); AddShortcut(u"restart_or_prev_track"_s, tr("Restart or previous track"), std::bind(&GlobalShortcutsManager::RestartOrPrevious, this));
AddShortcut(QStringLiteral("inc_volume"), tr("Increase volume"), std::bind(&GlobalShortcutsManager::IncVolume, this)); AddShortcut(u"inc_volume"_s, tr("Increase volume"), std::bind(&GlobalShortcutsManager::IncVolume, this));
AddShortcut(QStringLiteral("dec_volume"), tr("Decrease volume"), std::bind(&GlobalShortcutsManager::DecVolume, this)); AddShortcut(u"dec_volume"_s, tr("Decrease volume"), std::bind(&GlobalShortcutsManager::DecVolume, this));
AddShortcut(QStringLiteral("mute"), tr("Mute"), std::bind(&GlobalShortcutsManager::Mute, this)); AddShortcut(u"mute"_s, tr("Mute"), std::bind(&GlobalShortcutsManager::Mute, this));
AddShortcut(QStringLiteral("seek_forward"), tr("Seek forward"), std::bind(&GlobalShortcutsManager::SeekForward, this)); AddShortcut(u"seek_forward"_s, tr("Seek forward"), std::bind(&GlobalShortcutsManager::SeekForward, this));
AddShortcut(QStringLiteral("seek_backward"), tr("Seek backward"), std::bind(&GlobalShortcutsManager::SeekBackward, this)); AddShortcut(u"seek_backward"_s, tr("Seek backward"), std::bind(&GlobalShortcutsManager::SeekBackward, this));
AddShortcut(QStringLiteral("show_hide"), tr("Show/Hide"), std::bind(&GlobalShortcutsManager::ShowHide, this)); AddShortcut(u"show_hide"_s, tr("Show/Hide"), std::bind(&GlobalShortcutsManager::ShowHide, this));
AddShortcut(QStringLiteral("show_osd"), tr("Show OSD"), std::bind(&GlobalShortcutsManager::ShowOSD, this)); AddShortcut(u"show_osd"_s, tr("Show OSD"), std::bind(&GlobalShortcutsManager::ShowOSD, this));
AddShortcut(QStringLiteral("toggle_pretty_osd"), tr("Toggle Pretty OSD"), std::bind(&GlobalShortcutsManager::TogglePrettyOSD, this)); // Toggling possible only for pretty OSD AddShortcut(u"toggle_pretty_osd"_s, tr("Toggle Pretty OSD"), std::bind(&GlobalShortcutsManager::TogglePrettyOSD, this)); // Toggling possible only for pretty OSD
AddShortcut(QStringLiteral("shuffle_mode"), tr("Change shuffle mode"), std::bind(&GlobalShortcutsManager::CycleShuffleMode, this)); AddShortcut(u"shuffle_mode"_s, tr("Change shuffle mode"), std::bind(&GlobalShortcutsManager::CycleShuffleMode, this));
AddShortcut(QStringLiteral("repeat_mode"), tr("Change repeat mode"), std::bind(&GlobalShortcutsManager::CycleRepeatMode, this)); AddShortcut(u"repeat_mode"_s, tr("Change repeat mode"), std::bind(&GlobalShortcutsManager::CycleRepeatMode, this));
AddShortcut(QStringLiteral("toggle_scrobbling"), tr("Enable/disable scrobbling"), std::bind(&GlobalShortcutsManager::ToggleScrobbling, this)); AddShortcut(u"toggle_scrobbling"_s, tr("Enable/disable scrobbling"), std::bind(&GlobalShortcutsManager::ToggleScrobbling, this));
AddShortcut(QStringLiteral("love"), tr("Love"), std::bind(&GlobalShortcutsManager::Love, this)); AddShortcut(u"love"_s, tr("Love"), std::bind(&GlobalShortcutsManager::Love, this));
// Create backends - these do the actual shortcut registration // Create backends - these do the actual shortcut registration

View File

@ -29,6 +29,8 @@
#include "lyricssearchrequest.h" #include "lyricssearchrequest.h"
#include "azlyricscomlyricsprovider.h" #include "azlyricscomlyricsprovider.h"
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr char kUrl[] = "https://www.azlyrics.com/lyrics/"; constexpr char kUrl[] = "https://www.azlyrics.com/lyrics/";
constexpr char kStartTag[] = "<div>"; constexpr char kStartTag[] = "<div>";
@ -37,11 +39,11 @@ constexpr char kLyricsStart[] = "<!-- Usage of azlyrics.com content by any third
} // namespace } // namespace
AzLyricsComLyricsProvider::AzLyricsComLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) AzLyricsComLyricsProvider::AzLyricsComLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent)
: HtmlLyricsProvider(QStringLiteral("azlyrics.com"), true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {} : HtmlLyricsProvider(u"azlyrics.com"_s, true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {}
QUrl AzLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) { QUrl AzLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) {
return QUrl(QLatin1String(kUrl) + StringFixup(request.artist) + QLatin1Char('/') + StringFixup(request.title) + QStringLiteral(".html")); return QUrl(QLatin1String(kUrl) + StringFixup(request.artist) + QLatin1Char('/') + StringFixup(request.title) + u".html"_s);
} }
@ -49,7 +51,7 @@ QString AzLyricsComLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_words_numbers_and_dash(QStringLiteral("[^\\w0-9\\-]")); static const QRegularExpression regex_words_numbers_and_dash(u"[^\\w0-9\\-]"_s);
return Utilities::Transliterate(text).remove(regex_words_numbers_and_dash).toLower(); return Utilities::Transliterate(text).remove(regex_words_numbers_and_dash).toLower();
} }

View File

@ -44,7 +44,7 @@ namespace {
constexpr char kUrlSearch[] = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect"; constexpr char kUrlSearch[] = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect";
} }
ChartLyricsProvider::ChartLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : LyricsProvider(QStringLiteral("ChartLyrics"), false, false, network, parent) {} ChartLyricsProvider::ChartLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : LyricsProvider(u"ChartLyrics"_s, false, false, network, parent) {}
ChartLyricsProvider::~ChartLyricsProvider() { ChartLyricsProvider::~ChartLyricsProvider() {
@ -62,8 +62,8 @@ void ChartLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &r
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("artist"), QString::fromUtf8(QUrl::toPercentEncoding(request.artist))); url_query.addQueryItem(u"artist"_s, QString::fromUtf8(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(QStringLiteral("song"), QString::fromUtf8(QUrl::toPercentEncoding(request.title))); url_query.addQueryItem(u"song"_s, QString::fromUtf8(QUrl::toPercentEncoding(request.title)));
QUrl url(QString::fromUtf8(kUrlSearch)); QUrl url(QString::fromUtf8(kUrlSearch));
url.setQuery(url_query); url.setQuery(url_query);

View File

@ -39,7 +39,7 @@ constexpr char kLyricsStart[] = "<div id='inlyr'>";
} // namespace } // namespace
ElyricsNetLyricsProvider::ElyricsNetLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) ElyricsNetLyricsProvider::ElyricsNetLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent)
: HtmlLyricsProvider(QStringLiteral("elyrics.net"), true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {} : HtmlLyricsProvider(u"elyrics.net"_s, true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {}
QUrl ElyricsNetLyricsProvider::Url(const LyricsSearchRequest &request) { QUrl ElyricsNetLyricsProvider::Url(const LyricsSearchRequest &request) {
@ -51,12 +51,12 @@ QString ElyricsNetLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_,&\\-\\(\\) ]")); static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_,&\\-\\(\\) ]"_s);
static const QRegularExpression regex_duplicate_whitespaces(QStringLiteral(" {2,}")); static const QRegularExpression regex_duplicate_whitespaces(u" {2,}"_s);
return Utilities::Transliterate(text) return Utilities::Transliterate(text)
.replace(regex_illegal_characters, QStringLiteral("_")) .replace(regex_illegal_characters, u"_"_s)
.replace(regex_duplicate_whitespaces, QStringLiteral(" ")) .replace(regex_duplicate_whitespaces, u" "_s)
.simplified() .simplified()
.replace(u' ', u'-') .replace(u' ', u'-')
.toLower(); .toLower();

View File

@ -68,7 +68,7 @@ constexpr char kClientIDB64[] = "RUNTNXU4U1VyMU1KUU5hdTZySEZteUxXY2hkanFiY3lfc2J
constexpr char kClientSecretB64[] = "VE9pMU9vUjNtTXZ3eFR3YVN0QVRyUjVoUlhVWDI1Ylp5X240eEt1M0ZkYlNwRG5JUnd0LXFFbHdGZkZkRWY2VzJ1S011UnQzM3c2Y3hqY0tVZ3NGN2c="; constexpr char kClientSecretB64[] = "VE9pMU9vUjNtTXZ3eFR3YVN0QVRyUjVoUlhVWDI1Ylp5X240eEt1M0ZkYlNwRG5JUnd0LXFFbHdGZkZkRWY2VzJ1S011UnQzM3c2Y3hqY0tVZ3NGN2c=";
} // namespace } // namespace
GeniusLyricsProvider::GeniusLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(QStringLiteral("Genius"), true, true, network, parent), server_(nullptr) { GeniusLyricsProvider::GeniusLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(u"Genius"_s, true, true, network, parent), server_(nullptr) {
Settings s; Settings s;
s.beginGroup(kSettingsGroup); s.beginGroup(kSettingsGroup);
@ -134,11 +134,11 @@ void GeniusLyricsProvider::Authenticate() {
} }
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("client_id"), QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64))))); url_query.addQueryItem(u"client_id"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64)))));
url_query.addQueryItem(QStringLiteral("redirect_uri"), QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString()))); url_query.addQueryItem(u"redirect_uri"_s, QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString())));
url_query.addQueryItem(QStringLiteral("scope"), QStringLiteral("me")); url_query.addQueryItem(u"scope"_s, u"me"_s);
url_query.addQueryItem(QStringLiteral("state"), QString::fromLatin1(QUrl::toPercentEncoding(code_challenge_))); url_query.addQueryItem(u"state"_s, QString::fromLatin1(QUrl::toPercentEncoding(code_challenge_)));
url_query.addQueryItem(QStringLiteral("response_type"), QStringLiteral("code")); url_query.addQueryItem(u"response_type"_s, u"code"_s);
QUrl url(QString::fromLatin1(kOAuthAuthorizeUrl)); QUrl url(QString::fromLatin1(kOAuthAuthorizeUrl));
url.setQuery(url_query); url.setQuery(url_query);
@ -160,10 +160,10 @@ void GeniusLyricsProvider::RedirectArrived() {
QUrl url = server_->request_url(); QUrl url = server_->request_url();
if (url.isValid()) { if (url.isValid()) {
QUrlQuery url_query(url); QUrlQuery url_query(url);
if (url_query.hasQueryItem(QStringLiteral("error"))) { if (url_query.hasQueryItem(u"error"_s)) {
AuthError(QUrlQuery(url).queryItemValue(QStringLiteral("error"))); AuthError(QUrlQuery(url).queryItemValue(u"error"_s));
} }
else if (url_query.hasQueryItem(QStringLiteral("code"))) { else if (url_query.hasQueryItem(u"code"_s)) {
QUrl redirect_url(QString::fromLatin1(kOAuthRedirectUrl)); QUrl redirect_url(QString::fromLatin1(kOAuthRedirectUrl));
redirect_url.setPort(server_->url().port()); redirect_url.setPort(server_->url().port());
RequestAccessToken(url, redirect_url); RequestAccessToken(url, redirect_url);
@ -192,17 +192,17 @@ void GeniusLyricsProvider::RequestAccessToken(const QUrl &url, const QUrl &redir
QUrlQuery url_query(url); QUrlQuery url_query(url);
if (url.hasQuery() && url_query.hasQueryItem(QStringLiteral("code")) && url_query.hasQueryItem(QStringLiteral("state"))) { if (url.hasQuery() && url_query.hasQueryItem(u"code"_s) && url_query.hasQueryItem(u"state"_s)) {
const QString code = url_query.queryItemValue(QStringLiteral("code")); const QString code = url_query.queryItemValue(u"code"_s);
QUrlQuery new_url_query; QUrlQuery new_url_query;
new_url_query.addQueryItem(QStringLiteral("code"), QString::fromLatin1(QUrl::toPercentEncoding(code))); new_url_query.addQueryItem(u"code"_s, QString::fromLatin1(QUrl::toPercentEncoding(code)));
new_url_query.addQueryItem(QStringLiteral("client_id"), QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64))))); new_url_query.addQueryItem(u"client_id"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64)))));
new_url_query.addQueryItem(QStringLiteral("client_secret"), QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientSecretB64))))); new_url_query.addQueryItem(u"client_secret"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientSecretB64)))));
new_url_query.addQueryItem(QStringLiteral("redirect_uri"), QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString()))); new_url_query.addQueryItem(u"redirect_uri"_s, QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString())));
new_url_query.addQueryItem(QStringLiteral("grant_type"), QStringLiteral("authorization_code")); new_url_query.addQueryItem(u"grant_type"_s, u"authorization_code"_s);
new_url_query.addQueryItem(QStringLiteral("response_type"), QStringLiteral("code")); new_url_query.addQueryItem(u"response_type"_s, u"code"_s);
QUrl new_url(QString::fromLatin1(kOAuthAccessTokenUrl)); QUrl new_url(QString::fromLatin1(kOAuthAccessTokenUrl));
QNetworkRequest req(new_url); QNetworkRequest req(new_url);
@ -281,23 +281,23 @@ void GeniusLyricsProvider::AccessTokenRequestFinished(QNetworkReply *reply) {
} }
if (json_doc.isEmpty()) { if (json_doc.isEmpty()) {
AuthError(QStringLiteral("Authentication reply from server has empty Json document.")); AuthError(u"Authentication reply from server has empty Json document."_s);
return; return;
} }
if (!json_doc.isObject()) { if (!json_doc.isObject()) {
AuthError(QStringLiteral("Authentication reply from server has Json document that is not an object."), json_doc); AuthError(u"Authentication reply from server has Json document that is not an object."_s, json_doc);
return; return;
} }
QJsonObject json_obj = json_doc.object(); QJsonObject json_obj = json_doc.object();
if (json_obj.isEmpty()) { if (json_obj.isEmpty()) {
AuthError(QStringLiteral("Authentication reply from server has empty Json object."), json_doc); AuthError(u"Authentication reply from server has empty Json object."_s, json_doc);
return; return;
} }
if (!json_obj.contains("access_token"_L1)) { if (!json_obj.contains("access_token"_L1)) {
AuthError(QStringLiteral("Authentication reply from server is missing access token."), json_obj); AuthError(u"Authentication reply from server is missing access token."_s, json_obj);
return; return;
} }
@ -332,7 +332,7 @@ void GeniusLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &
} }
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("q"), QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("%1 %2").arg(request.artist, request.title)))); url_query.addQueryItem(u"q"_s, QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("%1 %2").arg(request.artist, request.title))));
QUrl url(QString::fromLatin1(kUrlSearch)); QUrl url(QString::fromLatin1(kUrlSearch));
url.setQuery(url_query); url.setQuery(url_query);
@ -364,18 +364,18 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
} }
if (!json_obj.contains("meta"_L1)) { if (!json_obj.contains("meta"_L1)) {
Error(QStringLiteral("Json reply is missing meta object."), json_obj); Error(u"Json reply is missing meta object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!json_obj["meta"_L1].isObject()) { if (!json_obj["meta"_L1].isObject()) {
Error(QStringLiteral("Json reply meta is not an object."), json_obj); Error(u"Json reply meta is not an object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
QJsonObject obj_meta = json_obj["meta"_L1].toObject(); QJsonObject obj_meta = json_obj["meta"_L1].toObject();
if (!obj_meta.contains("status"_L1)) { if (!obj_meta.contains("status"_L1)) {
Error(QStringLiteral("Json reply meta object is missing status."), obj_meta); Error(u"Json reply meta object is missing status."_s, obj_meta);
EndSearch(search); EndSearch(search);
return; return;
} }
@ -392,23 +392,23 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
} }
if (!json_obj.contains("response"_L1)) { if (!json_obj.contains("response"_L1)) {
Error(QStringLiteral("Json reply is missing response."), json_obj); Error(u"Json reply is missing response."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!json_obj["response"_L1].isObject()) { if (!json_obj["response"_L1].isObject()) {
Error(QStringLiteral("Json response is not an object."), json_obj); Error(u"Json response is not an object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
QJsonObject obj_response = json_obj["response"_L1].toObject(); QJsonObject obj_response = json_obj["response"_L1].toObject();
if (!obj_response.contains("hits"_L1)) { if (!obj_response.contains("hits"_L1)) {
Error(QStringLiteral("Json response is missing hits."), obj_response); Error(u"Json response is missing hits."_s, obj_response);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!obj_response["hits"_L1].isArray()) { if (!obj_response["hits"_L1].isArray()) {
Error(QStringLiteral("Json hits is not an array."), obj_response); Error(u"Json hits is not an array."_s, obj_response);
EndSearch(search); EndSearch(search);
return; return;
} }
@ -427,7 +427,7 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
} }
QJsonObject obj_result = obj_hit["result"_L1].toObject(); QJsonObject obj_result = obj_hit["result"_L1].toObject();
if (!obj_result.contains("title"_L1) || !obj_result.contains("primary_artist"_L1) || !obj_result.contains("url"_L1) || !obj_result["primary_artist"_L1].isObject()) { if (!obj_result.contains("title"_L1) || !obj_result.contains("primary_artist"_L1) || !obj_result.contains("url"_L1) || !obj_result["primary_artist"_L1].isObject()) {
Error(QStringLiteral("Missing one or more values in result object"), obj_result); Error(u"Missing one or more values in result object"_s, obj_result);
continue; continue;
} }
QJsonObject primary_artist = obj_result["primary_artist"_L1].toObject(); QJsonObject primary_artist = obj_result["primary_artist"_L1].toObject();
@ -497,15 +497,15 @@ void GeniusLyricsProvider::HandleLyricReply(QNetworkReply *reply, const int sear
const QByteArray data = reply->readAll(); const QByteArray data = reply->readAll();
if (data.isEmpty()) { if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server.")); Error(u"Empty reply received from server."_s);
EndSearch(search, lyric); EndSearch(search, lyric);
return; return;
} }
const QString content = QString::fromUtf8(data); const QString content = QString::fromUtf8(data);
QString lyrics = HtmlLyricsProvider::ParseLyricsFromHTML(content, QRegularExpression(QStringLiteral("<div[^>]*>")), QRegularExpression(QStringLiteral("<\\/div>")), QRegularExpression(QStringLiteral("<div data-lyrics-container=[^>]+>")), true); QString lyrics = HtmlLyricsProvider::ParseLyricsFromHTML(content, QRegularExpression(u"<div[^>]*>"_s), QRegularExpression(u"<\\/div>"_s), QRegularExpression(u"<div data-lyrics-container=[^>]+>"_s), true);
if (lyrics.isEmpty()) { if (lyrics.isEmpty()) {
lyrics = HtmlLyricsProvider::ParseLyricsFromHTML(content, QRegularExpression(QStringLiteral("<div[^>]*>")), QRegularExpression(QStringLiteral("<\\/div>")), QRegularExpression(QStringLiteral("<div class=\"lyrics\">")), true); lyrics = HtmlLyricsProvider::ParseLyricsFromHTML(content, QRegularExpression(u"<div[^>]*>"_s), QRegularExpression(u"<\\/div>"_s), QRegularExpression(u"<div class=\"lyrics\">"_s), true);
} }
if (!lyrics.isEmpty()) { if (!lyrics.isEmpty()) {

View File

@ -69,7 +69,7 @@ void HtmlLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &re
QUrl url(Url(request)); QUrl url(Url(request));
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0")); req.setHeader(QNetworkRequest::UserAgentHeader, u"Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0"_s);
QNetworkReply *reply = network_->get(req); QNetworkReply *reply = network_->get(req);
replies_ << reply; replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, request]() { HandleLyricsReply(reply, id, request); }); QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, request]() { HandleLyricsReply(reply, id, request); });
@ -169,20 +169,20 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR
if (!lyrics.isEmpty()) { if (!lyrics.isEmpty()) {
lyrics.append(u'\n'); lyrics.append(u'\n');
} }
static const QRegularExpression regex_html_tag_a(QStringLiteral("<a [^>]*>[^<]*</a>")); static const QRegularExpression regex_html_tag_a(u"<a [^>]*>[^<]*</a>"_s);
static const QRegularExpression regex_html_tag_script(QStringLiteral("<script>[^>]*</script>")); static const QRegularExpression regex_html_tag_script(u"<script>[^>]*</script>"_s);
static const QRegularExpression regex_html_tag_div(QStringLiteral("<div [^>]*>×</div>")); static const QRegularExpression regex_html_tag_div(u"<div [^>]*>×</div>"_s);
static const QRegularExpression regex_html_tag_br(QStringLiteral("<br[^>]*>")); static const QRegularExpression regex_html_tag_br(u"<br[^>]*>"_s);
static const QRegularExpression regex_html_tag_p_close(QStringLiteral("</p>")); static const QRegularExpression regex_html_tag_p_close(u"</p>"_s);
static const QRegularExpression regex_html_tags(QStringLiteral("<[^>]*>")); static const QRegularExpression regex_html_tags(u"<[^>]*>"_s);
lyrics.append(content.mid(start_lyrics_idx, end_lyrics_idx - start_lyrics_idx) lyrics.append(content.mid(start_lyrics_idx, end_lyrics_idx - start_lyrics_idx)
.remove(u'\r') .remove(u'\r')
.remove(u'\n') .remove(u'\n')
.remove(regex_html_tag_a) .remove(regex_html_tag_a)
.remove(regex_html_tag_script) .remove(regex_html_tag_script)
.remove(regex_html_tag_div) .remove(regex_html_tag_div)
.replace(regex_html_tag_br, QStringLiteral("\n")) .replace(regex_html_tag_br, u"\n"_s)
.replace(regex_html_tag_p_close, QStringLiteral("\n\n")) .replace(regex_html_tag_p_close, u"\n\n"_s)
.remove(regex_html_tags) .remove(regex_html_tags)
.trimmed()); .trimmed());
} }

View File

@ -40,7 +40,7 @@ constexpr char kLyricsStart[] = "<div id=\"letra-cnt\">";
} // namespace } // namespace
LetrasLyricsProvider::LetrasLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) LetrasLyricsProvider::LetrasLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent)
: HtmlLyricsProvider(QStringLiteral("letras.mus.br"), true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {} : HtmlLyricsProvider(u"letras.mus.br"_s, true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {}
QUrl LetrasLyricsProvider::Url(const LyricsSearchRequest &request) { QUrl LetrasLyricsProvider::Url(const LyricsSearchRequest &request) {
@ -52,12 +52,12 @@ QString LetrasLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_,&\\-\\(\\) ]")); static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_,&\\-\\(\\) ]"_s);
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}")); static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
return QString::fromLatin1(QUrl::toPercentEncoding(Utilities::Transliterate(text) return QString::fromLatin1(QUrl::toPercentEncoding(Utilities::Transliterate(text)
.replace(regex_illegal_characters, QStringLiteral("_")) .replace(regex_illegal_characters, u"_"_s)
.replace(regex_multiple_whitespaces, QStringLiteral(" ")) .replace(regex_multiple_whitespaces, u" "_s)
.simplified() .simplified()
.replace(u' ', u'-') .replace(u' ', u'-')
.toLower() .toLower()

View File

@ -44,7 +44,7 @@ namespace {
constexpr char kUrlSearch[] = "http://api.lololyrics.com/0.5/getLyric"; constexpr char kUrlSearch[] = "http://api.lololyrics.com/0.5/getLyric";
} }
LoloLyricsProvider::LoloLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : LyricsProvider(QStringLiteral("LoloLyrics"), true, false, network, parent) {} LoloLyricsProvider::LoloLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : LyricsProvider(u"LoloLyrics"_s, true, false, network, parent) {}
LoloLyricsProvider::~LoloLyricsProvider() { LoloLyricsProvider::~LoloLyricsProvider() {
@ -62,8 +62,8 @@ void LoloLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &re
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("artist"), QString::fromLatin1(QUrl::toPercentEncoding(request.artist))); url_query.addQueryItem(u"artist"_s, QString::fromLatin1(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(QStringLiteral("track"), QString::fromLatin1(QUrl::toPercentEncoding(request.title))); url_query.addQueryItem(u"track"_s, QString::fromLatin1(QUrl::toPercentEncoding(request.title)));
QUrl url(QString::fromLatin1(kUrlSearch)); QUrl url(QString::fromLatin1(kUrlSearch));
url.setQuery(url_query); url.setQuery(url_query);

View File

@ -45,7 +45,7 @@ constexpr char kLyricsStart[] = "<script id=\"__NEXT_DATA__\" type=\"application
constexpr char kLyricsEnd[] = "</script>"; constexpr char kLyricsEnd[] = "</script>";
} // namespace } // namespace
LyricFindLyricsProvider::LyricFindLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(QStringLiteral("lyricfind.com"), true, false, network, parent) {} LyricFindLyricsProvider::LyricFindLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(u"lyricfind.com"_s, true, false, network, parent) {}
LyricFindLyricsProvider::~LyricFindLyricsProvider() { LyricFindLyricsProvider::~LyricFindLyricsProvider() {
@ -68,12 +68,12 @@ QString LyricFindLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_\\- ]")); static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_\\- ]"_s);
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}")); static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
return Utilities::Transliterate(text) return Utilities::Transliterate(text)
.remove(regex_illegal_characters) .remove(regex_illegal_characters)
.replace(regex_multiple_whitespaces, QStringLiteral(" ")) .replace(regex_multiple_whitespaces, u" "_s)
.simplified() .simplified()
.replace(u' ', u'-') .replace(u' ', u'-')
.toLower(); .toLower();
@ -87,7 +87,7 @@ void LyricFindLyricsProvider::StartSearch(const int id, const LyricsSearchReques
const QUrl url = Url(request); const QUrl url = Url(request);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0")); req.setHeader(QNetworkRequest::UserAgentHeader, u"Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0"_s);
QNetworkReply *reply = network_->get(req); QNetworkReply *reply = network_->get(req);
replies_ << reply; replies_ << reply;
QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, request]() { HandleSearchReply(reply, id, request); }); QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, id, request]() { HandleSearchReply(reply, id, request); });
@ -123,13 +123,13 @@ void LyricFindLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int
const QByteArray data = reply->readAll(); const QByteArray data = reply->readAll();
if (data.isEmpty()) { if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server.")); Error(u"Empty reply received from server."_s);
return; return;
} }
const QString content = QString::fromUtf8(data); const QString content = QString::fromUtf8(data);
if (content.isEmpty()) { if (content.isEmpty()) {
Error(QStringLiteral("Empty reply received from server.")); Error(u"Empty reply received from server."_s);
return; return;
} }
@ -145,7 +145,7 @@ void LyricFindLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int
} }
} }
if (content_json.isEmpty()) { if (content_json.isEmpty()) {
Error(QStringLiteral("Could not parse HTML reply.")); Error(u"Could not parse HTML reply."_s);
return; return;
} }
@ -154,36 +154,36 @@ void LyricFindLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int
return; return;
} }
if (!obj.contains("props"_L1) || !obj["props"_L1].isObject()) { if (!obj.contains("props"_L1) || !obj["props"_L1].isObject()) {
Error(QStringLiteral("Missing props.")); Error(u"Missing props."_s);
return; return;
} }
obj = obj["props"_L1].toObject(); obj = obj["props"_L1].toObject();
if (!obj.contains("pageProps"_L1) || !obj["pageProps"_L1].isObject()) { if (!obj.contains("pageProps"_L1) || !obj["pageProps"_L1].isObject()) {
Error(QStringLiteral("Missing pageProps.")); Error(u"Missing pageProps."_s);
return; return;
} }
obj = obj["pageProps"_L1].toObject(); obj = obj["pageProps"_L1].toObject();
if (!obj.contains("songData"_L1) || !obj["songData"_L1].isObject()) { if (!obj.contains("songData"_L1) || !obj["songData"_L1].isObject()) {
Error(QStringLiteral("Missing songData.")); Error(u"Missing songData."_s);
return; return;
} }
obj = obj["songData"_L1].toObject(); obj = obj["songData"_L1].toObject();
if (!obj.contains("response"_L1) || !obj["response"_L1].isObject()) { if (!obj.contains("response"_L1) || !obj["response"_L1].isObject()) {
Error(QStringLiteral("Missing response.")); Error(u"Missing response."_s);
return; return;
} }
//const QJsonObject obj_response = obj[QLatin1String("response")].toObject(); //const QJsonObject obj_response = obj[QLatin1String("response")].toObject();
if (!obj.contains("track"_L1) || !obj["track"_L1].isObject()) { if (!obj.contains("track"_L1) || !obj["track"_L1].isObject()) {
Error(QStringLiteral("Missing track.")); Error(u"Missing track."_s);
return; return;
} }
const QJsonObject obj_track = obj["track"_L1].toObject(); const QJsonObject obj_track = obj["track"_L1].toObject();
if (!obj_track.contains("title"_L1) || if (!obj_track.contains("title"_L1) ||
!obj_track.contains("lyrics"_L1)) { !obj_track.contains("lyrics"_L1)) {
Error(QStringLiteral("Missing title or lyrics.")); Error(u"Missing title or lyrics."_s);
return; return;
} }

View File

@ -48,7 +48,7 @@
using namespace Qt::Literals::StringLiterals; using namespace Qt::Literals::StringLiterals;
using std::make_shared; using std::make_shared;
MusixmatchLyricsProvider::MusixmatchLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(QStringLiteral("Musixmatch"), true, false, network, parent), use_api_(true) {} MusixmatchLyricsProvider::MusixmatchLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(u"Musixmatch"_s, true, false, network, parent), use_api_(true) {}
MusixmatchLyricsProvider::~MusixmatchLyricsProvider() { MusixmatchLyricsProvider::~MusixmatchLyricsProvider() {
@ -82,12 +82,12 @@ void MusixmatchLyricsProvider::StartSearch(const int id, const LyricsSearchReque
bool MusixmatchLyricsProvider::SendSearchRequest(LyricsSearchContextPtr search) { bool MusixmatchLyricsProvider::SendSearchRequest(LyricsSearchContextPtr search) {
QUrlQuery url_query; QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("apikey"), QString::fromLatin1(QByteArray::fromBase64(kApiKey))); url_query.addQueryItem(u"apikey"_s, QString::fromLatin1(QByteArray::fromBase64(kApiKey)));
url_query.addQueryItem(QStringLiteral("q_artist"), QString::fromLatin1(QUrl::toPercentEncoding(search->request.artist))); url_query.addQueryItem(u"q_artist"_s, QString::fromLatin1(QUrl::toPercentEncoding(search->request.artist)));
url_query.addQueryItem(QStringLiteral("q_track"), QString::fromLatin1(QUrl::toPercentEncoding(search->request.title))); url_query.addQueryItem(u"q_track"_s, QString::fromLatin1(QUrl::toPercentEncoding(search->request.title)));
url_query.addQueryItem(QStringLiteral("f_has_lyrics"), QStringLiteral("1")); url_query.addQueryItem(u"f_has_lyrics"_s, u"1"_s);
QUrl url(QString::fromLatin1(kApiUrl) + QStringLiteral("/track.search")); QUrl url(QString::fromLatin1(kApiUrl) + u"/track.search"_s);
url.setQuery(url_query); url.setQuery(url_query);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
@ -142,24 +142,24 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
} }
if (!json_obj.contains("message"_L1)) { if (!json_obj.contains("message"_L1)) {
Error(QStringLiteral("Json reply is missing message object."), json_obj); Error(u"Json reply is missing message object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!json_obj["message"_L1].isObject()) { if (!json_obj["message"_L1].isObject()) {
Error(QStringLiteral("Json reply message is not an object."), json_obj); Error(u"Json reply message is not an object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
QJsonObject obj_message = json_obj["message"_L1].toObject(); QJsonObject obj_message = json_obj["message"_L1].toObject();
if (!obj_message.contains("header"_L1)) { if (!obj_message.contains("header"_L1)) {
Error(QStringLiteral("Json reply message object is missing header."), obj_message); Error(u"Json reply message object is missing header."_s, obj_message);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!obj_message["header"_L1].isObject()) { if (!obj_message["header"_L1].isObject()) {
Error(QStringLiteral("Json reply message header is not an object."), obj_message); Error(u"Json reply message header is not an object."_s, obj_message);
EndSearch(search); EndSearch(search);
return; return;
} }
@ -174,24 +174,24 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
} }
if (!obj_message.contains("body"_L1)) { if (!obj_message.contains("body"_L1)) {
Error(QStringLiteral("Json reply is missing body."), json_obj); Error(u"Json reply is missing body."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!obj_message["body"_L1].isObject()) { if (!obj_message["body"_L1].isObject()) {
Error(QStringLiteral("Json body is not an object."), json_obj); Error(u"Json body is not an object."_s, json_obj);
EndSearch(search); EndSearch(search);
return; return;
} }
QJsonObject obj_body = obj_message["body"_L1].toObject(); QJsonObject obj_body = obj_message["body"_L1].toObject();
if (!obj_body.contains("track_list"_L1)) { if (!obj_body.contains("track_list"_L1)) {
Error(QStringLiteral("Json response is missing body."), obj_body); Error(u"Json response is missing body."_s, obj_body);
EndSearch(search); EndSearch(search);
return; return;
} }
if (!obj_body["track_list"_L1].isArray()) { if (!obj_body["track_list"_L1].isArray()) {
Error(QStringLiteral("Json hits is not an array."), obj_body); Error(u"Json hits is not an array."_s, obj_body);
EndSearch(search); EndSearch(search);
return; return;
} }
@ -212,7 +212,7 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
!obj_track.contains("album_name"_L1) || !obj_track.contains("album_name"_L1) ||
!obj_track.contains("track_name"_L1) || !obj_track.contains("track_name"_L1) ||
!obj_track.contains("track_share_url"_L1)) { !obj_track.contains("track_share_url"_L1)) {
Error(QStringLiteral("Missing one or more values in result object"), obj_track); Error(u"Missing one or more values in result object"_s, obj_track);
continue; continue;
} }
@ -299,7 +299,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
const QByteArray data = reply->readAll(); const QByteArray data = reply->readAll();
if (data.isEmpty()) { if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server.")); Error(u"Empty reply received from server."_s);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
@ -322,7 +322,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
return; 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. if (content_json.contains(regex_html_tag)) { // Make sure it's not HTML code.
EndSearch(search, url); EndSearch(search, url);
return; return;
@ -335,21 +335,21 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
} }
if (!obj_data.contains("props"_L1) || !obj_data["props"_L1].isObject()) { 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);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
obj_data = obj_data["props"_L1].toObject(); obj_data = obj_data["props"_L1].toObject();
if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) { 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);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
obj_data = obj_data["pageProps"_L1].toObject(); obj_data = obj_data["pageProps"_L1].toObject();
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { 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);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
@ -357,21 +357,21 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
if (!obj_data.contains("trackInfo"_L1) || !obj_data["trackInfo"_L1].isObject()) { if (!obj_data.contains("trackInfo"_L1) || !obj_data["trackInfo"_L1].isObject()) {
Error(QStringLiteral("Json data is missing trackInfo."), obj_data); Error(u"Json data is missing trackInfo."_s, obj_data);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
obj_data = obj_data["trackInfo"_L1].toObject(); obj_data = obj_data["trackInfo"_L1].toObject();
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) {
Error(QStringLiteral("Json trackInfo reply is missing data."), obj_data); Error(u"Json trackInfo reply is missing data."_s, obj_data);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
obj_data = obj_data["data"_L1].toObject(); obj_data = obj_data["data"_L1].toObject();
if (!obj_data.contains("track"_L1) || !obj_data["track"_L1].isObject()) { if (!obj_data.contains("track"_L1) || !obj_data["track"_L1].isObject()) {
Error(QStringLiteral("Json data is missing track."), obj_data); Error(u"Json data is missing track."_s, obj_data);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
@ -379,7 +379,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
const QJsonObject obj_track = obj_data["track"_L1].toObject(); const QJsonObject obj_track = obj_data["track"_L1].toObject();
if (!obj_track.contains("hasLyrics"_L1) || !obj_track["hasLyrics"_L1].isBool()) { if (!obj_track.contains("hasLyrics"_L1) || !obj_track["hasLyrics"_L1].isBool()) {
Error(QStringLiteral("Json track is missing hasLyrics."), obj_track); Error(u"Json track is missing hasLyrics."_s, obj_track);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
@ -402,14 +402,14 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
} }
if (!obj_data.contains("lyrics"_L1) || !obj_data["lyrics"_L1].isObject()) { if (!obj_data.contains("lyrics"_L1) || !obj_data["lyrics"_L1].isObject()) {
Error(QStringLiteral("Json data is missing lyrics."), obj_data); Error(u"Json data is missing lyrics."_s, obj_data);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }
QJsonObject obj_lyrics = obj_data["lyrics"_L1].toObject(); QJsonObject obj_lyrics = obj_data["lyrics"_L1].toObject();
if (!obj_lyrics.contains("body"_L1) || !obj_lyrics["body"_L1].isString()) { if (!obj_lyrics.contains("body"_L1) || !obj_lyrics["body"_L1].isString()) {
Error(QStringLiteral("Json lyrics reply is missing body."), obj_lyrics); Error(u"Json lyrics reply is missing body."_s, obj_lyrics);
EndSearch(search, url); EndSearch(search, url);
return; return;
} }

View File

@ -43,7 +43,7 @@ namespace {
constexpr char kUrlSearch[] = "https://api.lyrics.ovh/v1/"; constexpr char kUrlSearch[] = "https://api.lyrics.ovh/v1/";
} }
OVHLyricsProvider::OVHLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(QStringLiteral("Lyrics.ovh"), true, false, network, parent) {} OVHLyricsProvider::OVHLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) : JsonLyricsProvider(u"Lyrics.ovh"_s, true, false, network, parent) {}
OVHLyricsProvider::~OVHLyricsProvider() { OVHLyricsProvider::~OVHLyricsProvider() {

View File

@ -38,7 +38,7 @@ constexpr char kLyricsStart[] = "<p id=\"songLyricsDiv\"[^>]+>";
} // namespace } // namespace
SongLyricsComLyricsProvider::SongLyricsComLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent) SongLyricsComLyricsProvider::SongLyricsComLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent)
: HtmlLyricsProvider(QStringLiteral("songlyrics.com"), true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {} : HtmlLyricsProvider(u"songlyrics.com"_s, true, QLatin1String(kStartTag), QLatin1String(kEndTag), QLatin1String(kLyricsStart), false, network, parent) {}
QUrl SongLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) { QUrl SongLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) {
@ -50,17 +50,17 @@ QString SongLyricsComLyricsProvider::StringFixup(QString text) {
Q_ASSERT(QThread::currentThread() != qApp->thread()); Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9\\- ]")); static const QRegularExpression regex_illegal_characters(u"[^\\w0-9\\- ]"_s);
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}")); static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
static const QRegularExpression regex_multiple_dashes(QStringLiteral("(-)\\1+")); static const QRegularExpression regex_multiple_dashes(u"(-)\\1+"_s);
return text.replace(u'/', u'-') return text.replace(u'/', u'-')
.replace(u'\'', u'-') .replace(u'\'', u'-')
.remove(regex_illegal_characters) .remove(regex_illegal_characters)
.replace(regex_multiple_whitespaces, QStringLiteral(" ")) .replace(regex_multiple_whitespaces, u" "_s)
.simplified() .simplified()
.replace(u' ', u'-') .replace(u' ', u'-')
.replace(regex_multiple_dashes, QStringLiteral("-")) .replace(regex_multiple_dashes, u"-"_s)
.toLower(); .toLower();
} }

View File

@ -51,6 +51,7 @@
#include "settings/moodbarsettingspage.h" #include "settings/moodbarsettingspage.h"
using namespace std::chrono_literals; using namespace std::chrono_literals;
using namespace Qt::Literals::StringLiterals;
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
# include <windows.h> # include <windows.h>
@ -63,7 +64,7 @@ MoodbarLoader::MoodbarLoader(Application *app, QObject *parent)
kMaxActiveRequests(qMax(1, QThread::idealThreadCount() / 2)), kMaxActiveRequests(qMax(1, QThread::idealThreadCount() / 2)),
save_(false) { save_(false) {
cache_->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/moodbar")); cache_->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + u"/moodbar"_s);
cache_->setMaximumCacheSize(60LL * 1024LL * 1024LL); // 60MB - enough for 20,000 moodbars cache_->setMaximumCacheSize(60LL * 1024LL * 1024LL); // 60MB - enough for 20,000 moodbars
QObject::connect(app, &Application::SettingsChanged, this, &MoodbarLoader::ReloadSettings); QObject::connect(app, &Application::SettingsChanged, this, &MoodbarLoader::ReloadSettings);
@ -91,9 +92,9 @@ QStringList MoodbarLoader::MoodFilenames(const QString &song_filename) {
const QFileInfo file_info(song_filename); const QFileInfo file_info(song_filename);
const QString dir_path(file_info.dir().path()); const QString dir_path(file_info.dir().path());
const QString mood_filename = file_info.completeBaseName() + QStringLiteral(".mood"); const QString mood_filename = file_info.completeBaseName() + u".mood"_s;
return QStringList() << dir_path + QStringLiteral("/.") + mood_filename << dir_path + QLatin1Char('/') + mood_filename; return QStringList() << dir_path + u"/."_s + mood_filename << dir_path + QLatin1Char('/') + mood_filename;
} }

View File

@ -97,10 +97,10 @@ void MoodbarPipeline::Start() {
pipeline_ = gst_pipeline_new("moodbar-pipeline"); pipeline_ = gst_pipeline_new("moodbar-pipeline");
GstElement *decodebin = CreateElement(QStringLiteral("uridecodebin")); GstElement *decodebin = CreateElement(u"uridecodebin"_s);
convert_element_ = CreateElement(QStringLiteral("audioconvert")); convert_element_ = CreateElement(u"audioconvert"_s);
GstElement *spectrum = CreateElement(QStringLiteral("strawberry-fastspectrum")); GstElement *spectrum = CreateElement(u"strawberry-fastspectrum"_s);
GstElement *fakesink = CreateElement(QStringLiteral("fakesink")); GstElement *fakesink = CreateElement(u"fakesink"_s);
if (!decodebin || !convert_element_ || !spectrum || !fakesink) { if (!decodebin || !convert_element_ || !spectrum || !fakesink) {
gst_object_unref(GST_OBJECT(pipeline_)); gst_object_unref(GST_OBJECT(pipeline_));

View File

@ -136,11 +136,11 @@ Mpris2::Mpris2(Application *app, QObject *parent)
QStringList data_dirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS")).split(u':'); QStringList data_dirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS")).split(u':');
if (!data_dirs.contains("/usr/local/share"_L1)) { if (!data_dirs.contains("/usr/local/share"_L1)) {
data_dirs.append(QStringLiteral("/usr/local/share")); data_dirs.append(u"/usr/local/share"_s);
} }
if (!data_dirs.contains("/usr/share"_L1)) { if (!data_dirs.contains("/usr/share"_L1)) {
data_dirs.append(QStringLiteral("/usr/share")); data_dirs.append(u"/usr/share"_s);
} }
for (const QString &data_dir : std::as_const(data_dirs)) { for (const QString &data_dir : std::as_const(data_dirs)) {
@ -152,7 +152,7 @@ Mpris2::Mpris2(Application *app, QObject *parent)
} }
if (desktopfilepath_.isEmpty()) { if (desktopfilepath_.isEmpty()) {
desktopfilepath_ = QGuiApplication::desktopFileName() + QStringLiteral(".desktop"); desktopfilepath_ = QGuiApplication::desktopFileName() + u".desktop"_s;
} }
} }
@ -167,37 +167,37 @@ void Mpris2::EngineStateChanged(EngineBase::State newState) {
if (newState != EngineBase::State::Playing && newState != EngineBase::State::Paused) { if (newState != EngineBase::State::Playing && newState != EngineBase::State::Paused) {
last_metadata_ = QVariantMap(); last_metadata_ = QVariantMap();
EmitNotification(QStringLiteral("Metadata")); EmitNotification(u"Metadata"_s);
} }
EmitNotification(QStringLiteral("CanPlay")); EmitNotification(u"CanPlay"_s);
EmitNotification(QStringLiteral("CanPause")); EmitNotification(u"CanPause"_s);
EmitNotification(QStringLiteral("PlaybackStatus"), PlaybackStatus(newState)); EmitNotification(u"PlaybackStatus"_s, PlaybackStatus(newState));
if (newState == EngineBase::State::Playing) EmitNotification(QStringLiteral("CanSeek"), CanSeek(newState)); if (newState == EngineBase::State::Playing) EmitNotification(u"CanSeek"_s, CanSeek(newState));
} }
void Mpris2::VolumeChanged() { void Mpris2::VolumeChanged() {
EmitNotification(QStringLiteral("Volume")); EmitNotification(u"Volume"_s);
} }
void Mpris2::ShuffleModeChanged() { EmitNotification(QStringLiteral("Shuffle")); } void Mpris2::ShuffleModeChanged() { EmitNotification(u"Shuffle"_s); }
void Mpris2::RepeatModeChanged() { void Mpris2::RepeatModeChanged() {
EmitNotification(QStringLiteral("LoopStatus")); EmitNotification(u"LoopStatus"_s);
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext()); EmitNotification(u"CanGoNext"_s, CanGoNext());
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious()); EmitNotification(u"CanGoPrevious"_s, CanGoPrevious());
} }
void Mpris2::EmitNotification(const QString &name, const QVariant &value) { void Mpris2::EmitNotification(const QString &name, const QVariant &value) {
EmitNotification(name, value, QStringLiteral("org.mpris.MediaPlayer2.Player")); EmitNotification(name, value, u"org.mpris.MediaPlayer2.Player"_s);
} }
void Mpris2::EmitNotification(const QString &name, const QVariant &value, const QString &mprisEntity) { void Mpris2::EmitNotification(const QString &name, const QVariant &value, const QString &mprisEntity) {
QDBusMessage msg = QDBusMessage::createSignal(QLatin1String(kMprisObjectPath), QLatin1String(kFreedesktopPath), QStringLiteral("PropertiesChanged")); QDBusMessage msg = QDBusMessage::createSignal(QLatin1String(kMprisObjectPath), QLatin1String(kFreedesktopPath), u"PropertiesChanged"_s);
QVariantMap map; QVariantMap map;
map.insert(name, value); map.insert(name, value);
QVariantList args = QVariantList() << mprisEntity << map << QStringList(); QVariantList args = QVariantList() << mprisEntity << map << QStringList();
@ -246,45 +246,45 @@ QString Mpris2::DesktopEntry() const { return QGuiApplication::desktopFileName()
QStringList Mpris2::SupportedUriSchemes() const { QStringList Mpris2::SupportedUriSchemes() const {
static QStringList res = QStringList() << QStringLiteral("file") static QStringList res = QStringList() << u"file"_s
<< QStringLiteral("http") << u"http"_s
<< QStringLiteral("cdda") << u"cdda"_s
<< QStringLiteral("smb") << u"smb"_s
<< QStringLiteral("sftp"); << u"sftp"_s;
return res; return res;
} }
QStringList Mpris2::SupportedMimeTypes() const { QStringList Mpris2::SupportedMimeTypes() const {
static QStringList res = QStringList() << QStringLiteral("x-content/audio-player") static QStringList res = QStringList() << u"x-content/audio-player"_s
<< QStringLiteral("application/ogg") << u"application/ogg"_s
<< QStringLiteral("application/x-ogg") << u"application/x-ogg"_s
<< QStringLiteral("application/x-ogm-audio") << u"application/x-ogm-audio"_s
<< QStringLiteral("audio/flac") << u"audio/flac"_s
<< QStringLiteral("audio/ogg") << u"audio/ogg"_s
<< QStringLiteral("audio/vorbis") << u"audio/vorbis"_s
<< QStringLiteral("audio/aac") << u"audio/aac"_s
<< QStringLiteral("audio/mp4") << u"audio/mp4"_s
<< QStringLiteral("audio/mpeg") << u"audio/mpeg"_s
<< QStringLiteral("audio/mpegurl") << u"audio/mpegurl"_s
<< QStringLiteral("audio/vnd.rn-realaudio") << u"audio/vnd.rn-realaudio"_s
<< QStringLiteral("audio/x-flac") << u"audio/x-flac"_s
<< QStringLiteral("audio/x-oggflac") << u"audio/x-oggflac"_s
<< QStringLiteral("audio/x-vorbis") << u"audio/x-vorbis"_s
<< QStringLiteral("audio/x-vorbis+ogg") << u"audio/x-vorbis+ogg"_s
<< QStringLiteral("audio/x-speex") << u"audio/x-speex"_s
<< QStringLiteral("audio/x-wav") << u"audio/x-wav"_s
<< QStringLiteral("audio/x-wavpack") << u"audio/x-wavpack"_s
<< QStringLiteral("audio/x-ape") << u"audio/x-ape"_s
<< QStringLiteral("audio/x-mp3") << u"audio/x-mp3"_s
<< QStringLiteral("audio/x-mpeg") << u"audio/x-mpeg"_s
<< QStringLiteral("audio/x-mpegurl") << u"audio/x-mpegurl"_s
<< QStringLiteral("audio/x-ms-wma") << u"audio/x-ms-wma"_s
<< QStringLiteral("audio/x-musepack") << u"audio/x-musepack"_s
<< QStringLiteral("audio/x-pn-realaudio") << u"audio/x-pn-realaudio"_s
<< QStringLiteral("audio/x-scpls") << u"audio/x-scpls"_s
<< QStringLiteral("video/x-ms-asf"); << u"video/x-ms-asf"_s;
return res; return res;
@ -301,9 +301,9 @@ QString Mpris2::PlaybackStatus() const {
QString Mpris2::PlaybackStatus(EngineBase::State state) const { QString Mpris2::PlaybackStatus(EngineBase::State state) const {
switch (state) { switch (state) {
case EngineBase::State::Playing: return QStringLiteral("Playing"); case EngineBase::State::Playing: return u"Playing"_s;
case EngineBase::State::Paused: return QStringLiteral("Paused"); case EngineBase::State::Paused: return u"Paused"_s;
default: return QStringLiteral("Stopped"); default: return u"Stopped"_s;
} }
} }
@ -311,14 +311,14 @@ QString Mpris2::PlaybackStatus(EngineBase::State state) const {
QString Mpris2::LoopStatus() const { QString Mpris2::LoopStatus() const {
if (!app_->playlist_manager()->sequence()) { if (!app_->playlist_manager()->sequence()) {
return QStringLiteral("None"); return u"None"_s;
} }
switch (app_->playlist_manager()->active() ? app_->playlist_manager()->active()->RepeatMode() : app_->playlist_manager()->sequence()->repeat_mode()) { switch (app_->playlist_manager()->active() ? app_->playlist_manager()->active()->RepeatMode() : app_->playlist_manager()->sequence()->repeat_mode()) {
case PlaylistSequence::RepeatMode::Album: case PlaylistSequence::RepeatMode::Album:
case PlaylistSequence::RepeatMode::Playlist: return QStringLiteral("Playlist"); case PlaylistSequence::RepeatMode::Playlist: return u"Playlist"_s;
case PlaylistSequence::RepeatMode::Track: return QStringLiteral("Track"); case PlaylistSequence::RepeatMode::Track: return u"Track"_s;
default: return QStringLiteral("None"); default: return u"None"_s;
} }
} }
@ -390,11 +390,11 @@ QDBusObjectPath Mpris2::current_track_id() const {
void Mpris2::CurrentSongChanged(const Song &song) { void Mpris2::CurrentSongChanged(const Song &song) {
AlbumCoverLoaded(song); AlbumCoverLoaded(song);
EmitNotification(QStringLiteral("CanPlay")); EmitNotification(u"CanPlay"_s);
EmitNotification(QStringLiteral("CanPause")); EmitNotification(u"CanPause"_s);
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext()); EmitNotification(u"CanGoNext"_s, CanGoNext());
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious()); EmitNotification(u"CanGoPrevious"_s, CanGoPrevious());
EmitNotification(QStringLiteral("CanSeek"), CanSeek()); EmitNotification(u"CanSeek"_s, CanSeek());
} }
@ -405,7 +405,7 @@ void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &re
song.ToXesam(&last_metadata_); song.ToXesam(&last_metadata_);
using mpris::AddMetadata; using mpris::AddMetadata;
AddMetadata(QStringLiteral("mpris:trackid"), current_track_id(), &last_metadata_); AddMetadata(u"mpris:trackid"_s, current_track_id(), &last_metadata_);
QUrl cover_url; QUrl cover_url;
if (result.album_cover.cover_url.isValid() && result.album_cover.cover_url.isLocalFile() && QFile(result.album_cover.cover_url.toLocalFile()).exists()) { if (result.album_cover.cover_url.isValid() && result.album_cover.cover_url.isLocalFile() && QFile(result.album_cover.cover_url.toLocalFile()).exists()) {
@ -422,13 +422,13 @@ void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &re
} }
if (cover_url.isValid()) { if (cover_url.isValid()) {
AddMetadata(QStringLiteral("mpris:artUrl"), cover_url.toString(), &last_metadata_); AddMetadata(u"mpris:artUrl"_s, cover_url.toString(), &last_metadata_);
} }
AddMetadata(QStringLiteral("year"), song.year(), &last_metadata_); AddMetadata(u"year"_s, song.year(), &last_metadata_);
AddMetadata(QStringLiteral("bitrate"), song.bitrate(), &last_metadata_); AddMetadata(u"bitrate"_s, song.bitrate(), &last_metadata_);
EmitNotification(QStringLiteral("Metadata"), last_metadata_); EmitNotification(u"Metadata"_s, last_metadata_);
} }
@ -569,7 +569,7 @@ quint32 Mpris2::PlaylistCount() const {
return app_->playlist_manager()->GetAllPlaylists().size(); return app_->playlist_manager()->GetAllPlaylists().size();
} }
QStringList Mpris2::Orderings() const { return QStringList() << QStringLiteral("User"); } QStringList Mpris2::Orderings() const { return QStringList() << u"User"_s; }
namespace { namespace {
@ -650,7 +650,7 @@ void Mpris2::PlaylistChangedSlot(Playlist *playlist) {
void Mpris2::PlaylistCollectionChanged(Playlist *playlist) { void Mpris2::PlaylistCollectionChanged(Playlist *playlist) {
Q_UNUSED(playlist); Q_UNUSED(playlist);
EmitNotification(QStringLiteral("PlaylistCount"), ""_L1, QStringLiteral("org.mpris.MediaPlayer2.Playlists")); EmitNotification(u"PlaylistCount"_s, ""_L1, u"org.mpris.MediaPlayer2.Playlists"_s);
} }
} // namespace mpris } // namespace mpris

View File

@ -75,11 +75,11 @@ void AcoustidClient::Start(const int id, const QString &fingerprint, int duratio
using Param = QPair<QString, QString>; using Param = QPair<QString, QString>;
using ParamList = QList<Param>; using ParamList = QList<Param>;
const ParamList params = ParamList() << Param(QStringLiteral("format"), QStringLiteral("json")) const ParamList params = ParamList() << Param(u"format"_s, u"json"_s)
<< Param(QStringLiteral("client"), QLatin1String(kClientId)) << Param(u"client"_s, QLatin1String(kClientId))
<< Param(QStringLiteral("duration"), QString::number(duration_msec / kMsecPerSec)) << Param(u"duration"_s, QString::number(duration_msec / kMsecPerSec))
<< Param(QStringLiteral("meta"), QStringLiteral("recordingids+sources")) << Param(u"meta"_s, u"recordingids+sources"_s)
<< Param(QStringLiteral("fingerprint"), fingerprint); << Param(u"fingerprint"_s, fingerprint);
QUrlQuery url_query; QUrlQuery url_query;
url_query.setQueryItems(params); url_query.setQueryItems(params);

View File

@ -156,7 +156,7 @@ void MusicBrainzClient::Start(const int id, const QStringList &mbid_list) {
void MusicBrainzClient::StartDiscIdRequest(const QString &discid) { void MusicBrainzClient::StartDiscIdRequest(const QString &discid) {
const ParamList params = ParamList() << Param(QStringLiteral("inc"), QStringLiteral("artists+recordings")); const ParamList params = ParamList() << Param(u"inc"_s, u"artists+recordings"_s);
QUrlQuery url_query; QUrlQuery url_query;
url_query.setQueryItems(params); url_query.setQueryItems(params);
@ -178,7 +178,7 @@ void MusicBrainzClient::FlushRequests() {
Request request = requests_pending_.take(requests_pending_.firstKey()); Request request = requests_pending_.take(requests_pending_.firstKey());
const ParamList params = ParamList() << Param(QStringLiteral("inc"), QStringLiteral("artists+releases+media")); const ParamList params = ParamList() << Param(u"inc"_s, u"artists+releases+media"_s);
QUrlQuery url_query; QUrlQuery url_query;
url_query.setQueryItems(params); url_query.setQueryItems(params);

View File

@ -75,6 +75,7 @@
#include "transcoder/transcoder.h" #include "transcoder/transcoder.h"
using std::make_unique; using std::make_unique;
using namespace Qt::Literals::StringLiterals;
namespace { namespace {
constexpr char kSettingsGroup[] = "OrganizeDialog"; constexpr char kSettingsGroup[] = "OrganizeDialog";
@ -94,35 +95,35 @@ OrganizeDialog::OrganizeDialog(SharedPtr<TaskManager> task_manager, SharedPtr<Co
setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint); setWindowFlags(windowFlags() | Qt::WindowMaximizeButtonHint);
QPushButton *button_save = ui_->button_box->addButton(QStringLiteral("Save settings"), QDialogButtonBox::ApplyRole); QPushButton *button_save = ui_->button_box->addButton(u"Save settings"_s, QDialogButtonBox::ApplyRole);
QObject::connect(button_save, &QPushButton::clicked, this, &OrganizeDialog::SaveSettings); QObject::connect(button_save, &QPushButton::clicked, this, &OrganizeDialog::SaveSettings);
button_save->setIcon(IconLoader::Load(QStringLiteral("document-save"))); button_save->setIcon(IconLoader::Load(u"document-save"_s));
ui_->button_box->button(QDialogButtonBox::RestoreDefaults)->setIcon(IconLoader::Load(QStringLiteral("edit-undo"))); ui_->button_box->button(QDialogButtonBox::RestoreDefaults)->setIcon(IconLoader::Load(u"edit-undo"_s));
QObject::connect(ui_->button_box->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &OrganizeDialog::RestoreDefaults); QObject::connect(ui_->button_box->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &OrganizeDialog::RestoreDefaults);
ui_->aftercopying->setItemIcon(1, IconLoader::Load(QStringLiteral("edit-delete"))); ui_->aftercopying->setItemIcon(1, IconLoader::Load(u"edit-delete"_s));
// Valid tags // Valid tags
QMap<QString, QString> tags; QMap<QString, QString> tags;
tags[tr("Title")] = QStringLiteral("title"); tags[tr("Title")] = u"title"_s;
tags[tr("Album")] = QStringLiteral("album"); tags[tr("Album")] = u"album"_s;
tags[tr("Artist")] = QStringLiteral("artist"); tags[tr("Artist")] = u"artist"_s;
tags[tr("Artist's initial")] = QStringLiteral("artistinitial"); tags[tr("Artist's initial")] = u"artistinitial"_s;
tags[tr("Album artist")] = QStringLiteral("albumartist"); tags[tr("Album artist")] = u"albumartist"_s;
tags[tr("Composer")] = QStringLiteral("composer"); tags[tr("Composer")] = u"composer"_s;
tags[tr("Performer")] = QStringLiteral("performer"); tags[tr("Performer")] = u"performer"_s;
tags[tr("Grouping")] = QStringLiteral("grouping"); tags[tr("Grouping")] = u"grouping"_s;
tags[tr("Track")] = QStringLiteral("track"); tags[tr("Track")] = u"track"_s;
tags[tr("Disc")] = QStringLiteral("disc"); tags[tr("Disc")] = u"disc"_s;
tags[tr("Year")] = QStringLiteral("year"); tags[tr("Year")] = u"year"_s;
tags[tr("Original year")] = QStringLiteral("originalyear"); tags[tr("Original year")] = u"originalyear"_s;
tags[tr("Genre")] = QStringLiteral("genre"); tags[tr("Genre")] = u"genre"_s;
tags[tr("Comment")] = QStringLiteral("comment"); tags[tr("Comment")] = u"comment"_s;
tags[tr("Length")] = QStringLiteral("length"); tags[tr("Length")] = u"length"_s;
tags[tr("Bitrate", "Refers to bitrate in file organize dialog.")] = QStringLiteral("bitrate"); tags[tr("Bitrate", "Refers to bitrate in file organize dialog.")] = u"bitrate"_s;
tags[tr("Sample rate")] = QStringLiteral("samplerate"); tags[tr("Sample rate")] = u"samplerate"_s;
tags[tr("Bit depth")] = QStringLiteral("bitdepth"); tags[tr("Bit depth")] = u"bitdepth"_s;
tags[tr("File extension")] = QStringLiteral("extension"); tags[tr("File extension")] = u"extension"_s;
// Naming scheme input field // Naming scheme input field
new OrganizeSyntaxHighlighter(ui_->naming); new OrganizeSyntaxHighlighter(ui_->naming);
@ -462,7 +463,7 @@ Organize::NewSongInfoList OrganizeDialog::ComputeNewSongsFilenames(const SongLis
if (result.unique_filename) { if (result.unique_filename) {
if (filenames.contains(result.filename)) { if (filenames.contains(result.filename)) {
QString song_number = QString::number(++filenames[result.filename]); QString song_number = QString::number(++filenames[result.filename]);
result.filename = Utilities::PathWithoutFilenameExtension(result.filename) + QStringLiteral("(") + song_number + QStringLiteral(").") + QFileInfo(result.filename).suffix(); result.filename = Utilities::PathWithoutFilenameExtension(result.filename) + u"("_s + song_number + u")."_s + QFileInfo(result.filename).suffix();
} }
else { else {
filenames.insert(result.filename, 1); filenames.insert(result.filename, 1);
@ -541,7 +542,7 @@ void OrganizeDialog::UpdatePreviews() {
if (has_local_destination) { if (has_local_destination) {
for (const Organize::NewSongInfo &song_info : std::as_const(new_songs_info_)) { for (const Organize::NewSongInfo &song_info : std::as_const(new_songs_info_)) {
QString filename = storage->LocalPath() + QLatin1Char('/') + song_info.new_filename_; QString filename = storage->LocalPath() + QLatin1Char('/') + song_info.new_filename_;
QListWidgetItem *item = new QListWidgetItem(song_info.unique_filename_ ? IconLoader::Load(QStringLiteral("dialog-ok-apply")) : IconLoader::Load(QStringLiteral("dialog-warning")), QDir::toNativeSeparators(filename), ui_->preview); QListWidgetItem *item = new QListWidgetItem(song_info.unique_filename_ ? IconLoader::Load(u"dialog-ok-apply"_s) : IconLoader::Load(u"dialog-warning"_s), QDir::toNativeSeparators(filename), ui_->preview);
ui_->preview->addItem(item); ui_->preview->addItem(item);
if (!song_info.unique_filename_) { if (!song_info.unique_filename_) {
ok = false; ok = false;

View File

@ -175,10 +175,10 @@ void OSDBase::ShowPlaying(const Song &song, const QUrl &cover_url, const QImage
if (html_escaped) message = message.toHtmlEscaped(); if (html_escaped) message = message.toHtmlEscaped();
if (show_art_) { if (show_art_) {
ShowMessage(summary, message, QStringLiteral("notification-audio-play"), image); ShowMessage(summary, message, u"notification-audio-play"_s, image);
} }
else { else {
ShowMessage(summary, message, QStringLiteral("notification-audio-play"), QImage()); ShowMessage(summary, message, u"notification-audio-play"_s, QImage());
} }
// Reload the saved settings if they were changed for preview // Reload the saved settings if they were changed for preview

View File

@ -47,6 +47,7 @@
#include "notification.h" #include "notification.h"
using std::make_unique; using std::make_unique;
using namespace Qt::Literals::StringLiterals;
QDBusArgument &operator<<(QDBusArgument &arg, const QImage &image) { QDBusArgument &operator<<(QDBusArgument &arg, const QImage &image) {
@ -117,7 +118,7 @@ OSDDBus::~OSDDBus() = default;
void OSDDBus::Init() { void OSDDBus::Init() {
interface_ = make_unique<OrgFreedesktopNotificationsInterface>(QString::fromUtf8(OrgFreedesktopNotificationsInterface::staticInterfaceName()), QStringLiteral("/org/freedesktop/Notifications"), QDBusConnection::sessionBus()); interface_ = make_unique<OrgFreedesktopNotificationsInterface>(QString::fromUtf8(OrgFreedesktopNotificationsInterface::staticInterfaceName()), u"/org/freedesktop/Notifications"_s, QDBusConnection::sessionBus());
if (!interface_->isValid()) { if (!interface_->isValid()) {
qLog(Warning) << "Error connecting to notifications service."; qLog(Warning) << "Error connecting to notifications service.";
} }
@ -145,22 +146,22 @@ void OSDDBus::ShowMessageNative(const QString &summary, const QString &message,
QVariantMap hints; QVariantMap hints;
QString summary_stripped = summary; QString summary_stripped = summary;
static const QRegularExpression regex_illegal_characters(QStringLiteral("[&\"<>]")); static const QRegularExpression regex_illegal_characters(u"[&\"<>]"_s);
summary_stripped = summary_stripped.remove(regex_illegal_characters).simplified(); summary_stripped = summary_stripped.remove(regex_illegal_characters).simplified();
if (!image.isNull()) { if (!image.isNull()) {
if (version_ >= QVersionNumber(1, 2)) { if (version_ >= QVersionNumber(1, 2)) {
hints[QStringLiteral("image-data")] = QVariant(image); hints[u"image-data"_s] = QVariant(image);
} }
else if (version_ >= QVersionNumber(1, 1)) { else if (version_ >= QVersionNumber(1, 1)) {
hints[QStringLiteral("image_data")] = QVariant(image); hints[u"image_data"_s] = QVariant(image);
} }
else { else {
hints[QStringLiteral("icon_data")] = QVariant(image); hints[u"icon_data"_s] = QVariant(image);
} }
} }
hints[QStringLiteral("transient")] = QVariant(true); hints[u"transient"_s] = QVariant(true);
quint64 id = 0; quint64 id = 0;
if (last_notification_time_.secsTo(QDateTime::currentDateTime()) * 1000 < timeout_msec()) { if (last_notification_time_.secsTo(QDateTime::currentDateTime()) * 1000 < timeout_msec()) {

Some files were not shown because too many files have changed in this diff Show More