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"
using namespace std::chrono_literals;
using namespace Qt::Literals::StringLiterals;
const char *AnalyzerContainer::kSettingsGroup = "Analyzer";
const char *AnalyzerContainer::kSettingsFramerate = "framerate";
@ -185,7 +186,7 @@ void AnalyzerContainer::Load() {
Settings s;
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();
s.endGroup();

View File

@ -41,6 +41,8 @@
#include "fht.h"
#include "analyzerbase.h"
using namespace Qt::Literals::StringLiterals;
const char *NyanCatAnalyzer::kName = "Nyanalyzer Cat";
const char *RainbowDashAnalyzer::kName = "Rainbow Dash";
@ -68,8 +70,8 @@ RainbowAnalyzer::RainbowAnalyzer(const RainbowType rbtype, QWidget *parent)
background_brush_(QColor(0x0f, 0x43, 0x73)) {
rainbowtype = rbtype;
cat_dash_[0] = QPixmap(QStringLiteral(":/pictures/nyancat.png"));
cat_dash_[1] = QPixmap(QStringLiteral(":/pictures/rainbowdash.png"));
cat_dash_[0] = QPixmap(u":/pictures/nyancat.png"_s);
cat_dash_[1] = QPixmap(u":/pictures/rainbowdash.png"_s);
memset(history_, 0, sizeof(history_));
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);
q.prepare(QStringLiteral("UPDATE %1 SET path=:path WHERE ROWID=:id").arg(dirs_table_));
q.BindValue(QStringLiteral(":path"), new_path);
q.BindValue(QStringLiteral(":id"), id);
q.BindValue(u":path"_s, new_path);
q.BindValue(u":id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -227,8 +227,8 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
{
SqlQuery q(db);
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(QStringLiteral(":id"), id);
q.BindValue(u":path"_s, new_url);
q.BindValue(u":id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -239,8 +239,8 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
{
SqlQuery q(db);
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(QStringLiteral(":id"), id);
q.BindValue(u":path"_s, new_url);
q.BindValue(u":id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -288,7 +288,7 @@ CollectionSubdirectoryList CollectionBackend::SubdirsInDirectory(const int id, Q
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return CollectionSubdirectoryList();
@ -379,7 +379,7 @@ void CollectionBackend::AddDirectory(const QString &path) {
{
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -391,7 +391,7 @@ void CollectionBackend::AddDirectory(const QString &path) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -423,7 +423,7 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
{
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -434,7 +434,7 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
{
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -454,7 +454,7 @@ SongList CollectionBackend::FindSongsInDirectory(const int id) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return SongList();
@ -477,7 +477,7 @@ SongList CollectionBackend::SongsWithMissingFingerprint(const int id) {
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.BindValue(QStringLiteral(":directory_id"), id);
q.BindValue(u":directory_id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return SongList();
@ -500,7 +500,7 @@ SongList CollectionBackend::SongsWithMissingLoudnessCharacteristics(const int id
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.BindValue(QStringLiteral(":directory_id"), id);
q.BindValue(u":directory_id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return SongList();
@ -543,8 +543,8 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
// Delete the subdirectory
SqlQuery q(db);
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(QStringLiteral(":path"), subdir.path);
q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -556,8 +556,8 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
{
SqlQuery q(db);
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(QStringLiteral(":path"), subdir.path);
q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -568,9 +568,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
if (exists) {
SqlQuery q(db);
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(QStringLiteral(":id"), subdir.directory_id);
q.BindValue(QStringLiteral(":path"), subdir.path);
q.BindValue(u":mtime"_s, subdir.mtime);
q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(u":path"_s, subdir.path);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -579,9 +579,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
else {
SqlQuery q(db);
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(QStringLiteral(":path"), subdir.path);
q.BindValue(QStringLiteral(":mtime"), subdir.mtime);
q.BindValue(u":id"_s, subdir.directory_id);
q.BindValue(u":path"_s, subdir.path);
q.BindValue(u":mtime"_s, subdir.mtime);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -637,7 +637,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
if (!dirs_table_.isEmpty()) {
SqlQuery check_dir(db);
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()) {
db_->ReportErrors(check_dir);
return;
@ -658,7 +658,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), song.id());
q.BindValue(u":id"_s, song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -685,7 +685,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
new_song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), new_song.id());
q.BindValue(u":id"_s, new_song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -770,7 +770,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
new_song.BindToQuery(&q);
q.BindValue(QStringLiteral(":id"), old_song.id());
q.BindValue(u":id"_s, old_song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -813,7 +813,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
{
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -844,8 +844,8 @@ void CollectionBackend::UpdateMTimesOnly(const SongList &songs) {
for (const Song &song : songs) {
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":mtime"), song.mtime());
q.BindValue(QStringLiteral(":id"), song.id());
q.BindValue(u":mtime"_s, song.mtime());
q.BindValue(u":id"_s, song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -864,7 +864,7 @@ void CollectionBackend::DeleteSongs(const SongList &songs) {
for (const Song &song : songs) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -891,7 +891,7 @@ void CollectionBackend::MarkSongsUnavailable(const SongList &songs, const bool u
ScopedTransaction transaction(&db);
for (const Song &song : songs) {
query.BindValue(QStringLiteral(":id"), song.id());
query.BindValue(u":id"_s, song.id());
if (!query.Exec()) {
db_->ReportErrors(query);
return;
@ -918,7 +918,7 @@ QStringList CollectionBackend::GetAll(const QString &column, const CollectionFil
QSqlDatabase db(db_->Connect());
CollectionQuery query(db, songs_table_, filter_options);
query.SetColumnSpec(QStringLiteral("DISTINCT ") + column);
query.SetColumnSpec(u"DISTINCT "_s + column);
query.AddCompilationRequirement(false);
if (!query.Exec()) {
@ -936,7 +936,8 @@ QStringList CollectionBackend::GetAll(const QString &column, const CollectionFil
QStringList CollectionBackend::GetAllArtists(const CollectionFilterOptions &opt) {
return GetAll(QStringLiteral("artist"), opt);
return GetAll(u"artist"_s, opt);
}
QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOptions &opt) {
@ -946,16 +947,16 @@ QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOpt
// Albums with 'albumartist' field set:
CollectionQuery query(db, songs_table_, opt);
query.SetColumnSpec(QStringLiteral("DISTINCT albumartist"));
query.SetColumnSpec(u"DISTINCT albumartist"_s);
query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!="));
query.AddWhere(u"album"_s, ""_L1, u"!="_s);
// Albums with no 'albumartist' (extract 'artist'):
CollectionQuery query2(db, songs_table_, opt);
query2.SetColumnSpec(QStringLiteral("DISTINCT artist"));
query2.SetColumnSpec(u"DISTINCT artist"_s);
query2.AddCompilationRequirement(false);
query2.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!="));
query2.AddWhere(QStringLiteral("albumartist"), ""_L1, QStringLiteral("="));
query2.AddWhere(u"album"_s, ""_L1, u"!="_s);
query2.AddWhere(u"albumartist"_s, ""_L1, u"="_s);
if (!query.Exec()) {
ReportErrors(query);
@ -994,7 +995,7 @@ SongList CollectionBackend::GetArtistSongs(const QString &effective_albumartist,
CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
query.AddWhere(u"effective_albumartist"_s, effective_albumartist);
SongList songs;
if (!ExecCollectionQuery(&query, songs)) {
@ -1012,8 +1013,8 @@ SongList CollectionBackend::GetAlbumSongs(const QString &effective_albumartist,
CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
query.AddWhere(QStringLiteral("album"), album);
query.AddWhere(u"effective_albumartist"_s, effective_albumartist);
query.AddWhere(u"album"_s, album);
SongList songs;
if (!ExecCollectionQuery(&query, songs)) {
@ -1031,7 +1032,7 @@ SongList CollectionBackend::GetSongsByAlbum(const QString &album, const Collecti
CollectionQuery query(db, songs_table_, opt);
query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("album"), album);
query.AddWhere(u"album"_s, album);
SongList songs;
if (!ExecCollectionQuery(&query, songs)) {
@ -1044,7 +1045,7 @@ SongList CollectionBackend::GetSongsByAlbum(const QString &album, const Collecti
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;
@ -1059,7 +1060,7 @@ bool CollectionBackend::ExecCollectionQuery(CollectionQuery *query, SongList &so
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;
@ -1166,11 +1167,11 @@ Song CollectionBackend::GetSongByUrl(const QUrl &url, const qint64 beginning) {
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.BindValue(QStringLiteral(":url1"), url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":beginning"), beginning);
q.BindValue(u":url1"_s, url.toString());
q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(u":beginning"_s, beginning);
if (!q.Exec()) {
db_->ReportErrors(q);
@ -1195,11 +1196,11 @@ Song CollectionBackend::GetSongByUrlAndTrack(const QUrl &url, const int track) {
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.BindValue(QStringLiteral(":url1"), url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":track"), track);
q.BindValue(u":url1"_s, url.toString());
q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(u":track"_s, track);
if (!q.Exec()) {
db_->ReportErrors(q);
@ -1224,11 +1225,11 @@ SongList CollectionBackend::GetSongsByUrl(const QUrl &url, const bool unavailabl
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.BindValue(QStringLiteral(":url1"), url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":unavailable"), (unavailable ? 1 : 0));
q.BindValue(u":url1"_s, url.toString());
q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
q.BindValue(u":unavailable"_s, (unavailable ? 1 : 0));
SongList songs;
if (!q.Exec()) {
@ -1305,7 +1306,7 @@ SongList CollectionBackend::GetSongsByFingerprint(const QString &fingerprint) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return SongList();
@ -1333,9 +1334,9 @@ SongList CollectionBackend::GetCompilationSongs(const QString &album, const Coll
QSqlDatabase db(db_->Connect());
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.AddWhere(QStringLiteral("album"), album);
query.AddWhere(u"album"_s, album);
if (!query.Exec()) {
ReportErrors(query);
@ -1426,10 +1427,10 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &cha
{ // Get song, so we can tell the model its updated
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.BindValue(QStringLiteral(":url1"), url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded));
q.BindValue(u":url1"_s, url.toString());
q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
if (q.Exec()) {
while (q.next()) {
Song song(source_);
@ -1447,11 +1448,11 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &cha
// Update the song
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.BindValue(QStringLiteral(":compilation_detected"), static_cast<int>(compilation_detected));
q.BindValue(QStringLiteral(":url1"), url.toString());
q.BindValue(QStringLiteral(":url2"), url.toString(QUrl::FullyEncoded));
q.BindValue(QStringLiteral(":url3"), url.toEncoded(QUrl::FullyDecoded));
q.BindValue(QStringLiteral(":url4"), url.toEncoded(QUrl::FullyEncoded));
q.BindValue(u":compilation_detected"_s, static_cast<int>(compilation_detected));
q.BindValue(u":url1"_s, url.toString());
q.BindValue(u":url2"_s, url.toString(QUrl::FullyEncoded));
q.BindValue(u":url3"_s, url.toEncoded(QUrl::FullyDecoded));
q.BindValue(u":url4"_s, url.toEncoded(QUrl::FullyEncoded));
if (!q.Exec()) {
db_->ReportErrors(q);
return false;
@ -1467,15 +1468,15 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
QSqlDatabase db(db_->Connect());
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.SetOrderBy(QStringLiteral("effective_albumartist, album, url"));
query.SetColumnSpec(u"url, filetype, cue_path, effective_albumartist, album, compilation_effective, art_embedded, art_automatic, art_manual, art_unset"_s);
query.SetOrderBy(u"effective_albumartist, album, url"_s);
if (compilation_required) {
query.AddCompilationRequirement(true);
}
else if (!artist.isEmpty()) {
query.AddCompilationRequirement(false);
query.AddWhere(QStringLiteral("effective_albumartist"), artist);
query.AddWhere(u"effective_albumartist"_s, artist);
}
if (!query.Exec()) {
@ -1503,7 +1504,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
album_info.art_embedded = query.Value(6).toBool();
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)) {
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;
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()) {
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()) {
ReportErrors(query);
@ -1596,9 +1597,9 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
{
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.BindValue(QStringLiteral(":art_embedded"), art_embedded ? 1 : 0);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
q.BindValue(QStringLiteral(":album"), album);
q.BindValue(u":art_embedded"_s, art_embedded ? 1 : 0);
q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(u":album"_s, album);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1609,8 +1610,8 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
{
CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
q.AddWhere(QStringLiteral("album"), album);
q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(u"album"_s, album);
if (!q.Exec()) {
ReportErrors(q);
return;
@ -1642,9 +1643,9 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
{
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.BindValue(QStringLiteral(":art_manual"), art_manual.isValid() ? art_manual.toString(QUrl::FullyEncoded) : ""_L1);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
q.BindValue(QStringLiteral(":album"), album);
q.BindValue(u":art_manual"_s, art_manual.isValid() ? art_manual.toString(QUrl::FullyEncoded) : ""_L1);
q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(u":album"_s, album);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1655,8 +1656,8 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
{
CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
q.AddWhere(QStringLiteral("album"), album);
q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(u"album"_s, album);
if (!q.Exec()) {
ReportErrors(q);
return;
@ -1688,8 +1689,8 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
{
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.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
q.BindValue(QStringLiteral(":album"), album);
q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(u":album"_s, album);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1700,8 +1701,8 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
{
CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
q.AddWhere(QStringLiteral("album"), album);
q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(u"album"_s, album);
if (!q.Exec()) {
ReportErrors(q);
return;
@ -1733,9 +1734,9 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
{
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.BindValue(QStringLiteral(":art_unset"), art_unset ? 1 : 0);
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
q.BindValue(QStringLiteral(":album"), album);
q.BindValue(u":art_unset"_s, art_unset ? 1 : 0);
q.BindValue(u":effective_albumartist"_s, effective_albumartist);
q.BindValue(u":album"_s, album);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1746,8 +1747,8 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
{
CollectionQuery q(db, songs_table_);
q.SetColumnSpec(Song::kRowIdColumnSpec);
q.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
q.AddWhere(QStringLiteral("album"), album);
q.AddWhere(u"effective_albumartist"_s, effective_albumartist);
q.AddWhere(u"album"_s, album);
if (!q.Exec()) {
ReportErrors(q);
return;
@ -1779,10 +1780,10 @@ void CollectionBackend::ForceCompilation(const QString &album, const QStringList
SqlQuery q(db);
q.prepare(sql);
q.BindValue(QStringLiteral(":compilation_on"), on ? 1 : 0);
q.BindValue(QStringLiteral(":compilation_off"), on ? 0 : 1);
q.BindValue(QStringLiteral(":album"), album);
if (!artist.isEmpty()) q.BindValue(QStringLiteral(":artist"), artist);
q.BindValue(u":compilation_on"_s, on ? 1 : 0);
q.BindValue(u":compilation_off"_s, on ? 0 : 1);
q.BindValue(u":album"_s, album);
if (!artist.isEmpty()) q.BindValue(u":artist"_s, artist);
if (!q.Exec()) {
db_->ReportErrors(q);
@ -1793,8 +1794,8 @@ void CollectionBackend::ForceCompilation(const QString &album, const QStringList
CollectionQuery query(db, songs_table_);
query.SetColumnSpec(Song::kRowIdColumnSpec);
query.AddWhere(QStringLiteral("album"), album);
if (!artist.isEmpty()) query.AddWhere(QStringLiteral("artist"), artist);
query.AddWhere(u"album"_s, album);
if (!artist.isEmpty()) query.AddWhere(u"artist"_s, artist);
if (!query.Exec()) {
ReportErrors(query);
@ -1823,8 +1824,8 @@ void CollectionBackend::IncrementPlayCount(const int id) {
SqlQuery q(db);
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(QStringLiteral(":id"), id);
q.BindValue(u":now"_s, QDateTime::currentSecsSinceEpoch());
q.BindValue(u":id"_s, id);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1846,7 +1847,7 @@ void CollectionBackend::IncrementSkipCount(const int id, const float progress) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -1892,7 +1893,7 @@ bool CollectionBackend::ResetPlayStatistics(const QStringList &id_str_list) {
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return false;
@ -1917,7 +1918,7 @@ void CollectionBackend::DeleteAll() {
{
SqlQuery q(db);
q.prepare(QStringLiteral("DELETE FROM ") + songs_table_);
q.prepare(u"DELETE FROM "_s + songs_table_);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -1978,9 +1979,9 @@ SongList CollectionBackend::GetSongsBy(const QString &artist, const QString &alb
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.BindValue(QStringLiteral(":artist"), artist);
if (!album.isEmpty()) q.BindValue(QStringLiteral(":album"), album);
q.BindValue(QStringLiteral(":title"), title);
q.BindValue(u":artist"_s, artist);
if (!album.isEmpty()) q.BindValue(u":album"_s, album);
q.BindValue(u":title"_s, title);
if (!q.Exec()) {
db_->ReportErrors(q);
return SongList();
@ -2012,8 +2013,8 @@ void CollectionBackend::UpdateLastPlayed(const QString &artist, const QString &a
}
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET lastplayed = :lastplayed WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":lastplayed"), lastplayed);
q.BindValue(QStringLiteral(":id"), song.id());
q.BindValue(u":lastplayed"_s, lastplayed);
q.BindValue(u":id"_s, song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
continue;
@ -2038,8 +2039,8 @@ void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &ti
for (const Song &song : songs) {
SqlQuery q(db);
q.prepare(QStringLiteral("UPDATE %1 SET playcount = :playcount WHERE ROWID = :id").arg(songs_table_));
q.BindValue(QStringLiteral(":playcount"), playcount);
q.BindValue(QStringLiteral(":id"), song.id());
q.BindValue(u":playcount"_s, playcount);
q.BindValue(u":id"_s, song.id());
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -2073,7 +2074,7 @@ void CollectionBackend::UpdateSongsRating(const QList<int> &id_list, const float
QString ids = id_str_list.join(u',');
SqlQuery q(db);
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()) {
db_->ReportErrors(q);
return;
@ -2101,8 +2102,8 @@ void CollectionBackend::UpdateLastSeen(const int directory_id, const int expire_
SqlQuery q(db);
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(QStringLiteral(":directory_id"), directory_id);
q.BindValue(u":lastseen"_s, QDateTime::currentSecsSinceEpoch());
q.BindValue(u":directory_id"_s, directory_id);
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -2121,8 +2122,8 @@ void CollectionBackend::ExpireSongs(const int directory_id, const int expire_una
QSqlDatabase db(db_->Connect());
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.BindValue(QStringLiteral(":directory_id"), directory_id);
q.BindValue(QStringLiteral(":time"), QDateTime::currentSecsSinceEpoch() - (expire_unavailable_songs_days * 86400LL));
q.BindValue(u":directory_id"_s, directory_id);
q.BindValue(u":time"_s, QDateTime::currentSecsSinceEpoch() - (expire_unavailable_songs_days * 86400LL));
if (!q.Exec()) {
db_->ReportErrors(q);
return;
@ -2137,5 +2138,3 @@ void CollectionBackend::ExpireSongs(const int directory_id, const int expire_una
if (!songs.isEmpty()) DeleteSongs(songs);
}

View File

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

View File

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

View File

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

View File

@ -95,7 +95,7 @@ CollectionModel::CollectionModel(SharedPtr<CollectionBackend> backend, Applicati
filter_(new CollectionFilter(this)),
timer_reload_(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),
total_song_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);
}
QIcon nocover = IconLoader::Load(QStringLiteral("cdcase"));
QIcon nocover = IconLoader::Load(u"cdcase"_s);
if (!nocover.isNull()) {
QList<QSize> nocover_sizes = nocover.availableSizes();
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 {
return QStringList() << QStringLiteral("text/uri-list");
return QStringList() << u"text/uri-list"_s;
}
QMimeData *CollectionModel::mimeData(const QModelIndexList &indexes) const {
@ -823,7 +823,7 @@ SongList CollectionModel::LoadSongsFromSql(const CollectionFilterOptions &filter
QMutexLocker l(backend_->db()->Mutex());
QSqlDatabase db(backend_->db()->Connect());
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()) {
while (q.Next()) {
Song song;
@ -1155,7 +1155,7 @@ QString CollectionModel::SortText(QString text) {
else {
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);
return text;
@ -1338,7 +1338,7 @@ QString CollectionModel::DividerKey(const GroupBy group_by, const Song &song, co
case GroupBy::Format:
case GroupBy::FileType: {
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.decompositionTag() != QChar::NoDecomposition) {
QString decomposition = c.decomposition();
@ -1388,7 +1388,7 @@ QString CollectionModel::DividerDisplayText(const GroupBy group_by, const QStrin
case GroupBy::Genre:
case GroupBy::FileType:
case GroupBy::Format:
if (key == "0"_L1) return QStringLiteral("0-9");
if (key == "0"_L1) return u"0-9"_s;
return key.toUpper();
case GroupBy::YearAlbum:

View File

@ -49,14 +49,14 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
if (filter_options.max_age() != -1) {
qint64 cutoff = QDateTime::currentSecsSinceEpoch() - filter_options.max_age();
where_clauses_ << QStringLiteral("ctime > ?");
where_clauses_ << u"ctime > ?"_s;
bound_values_ << cutoff;
}
duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Duplicates;
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;
final_values.reserve(values.count());
for (const QString &single_value : values) {
final_values.append(QStringLiteral("?"));
final_values.append(u"?"_s);
bound_values_ << single_value;
}
@ -113,7 +113,7 @@ bool CollectionQuery::Exec() {
QStringList where_clauses(where_clauses_);
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);

View File

@ -76,6 +76,7 @@
#include "settings/collectionsettingspage.h"
using std::make_unique;
using namespace Qt::Literals::StringLiterals;
CollectionView::CollectionView(QWidget *parent)
: AutoExpandingTreeView(parent),
@ -84,7 +85,7 @@ CollectionView::CollectionView(QWidget *parent)
total_song_count_(-1),
total_artist_count_(-1),
total_album_count_(-1),
nomusic_(QStringLiteral(":/pictures/nomusic.png")),
nomusic_(u":/pictures/nomusic.png"_s),
context_menu_(nullptr),
action_load_(nullptr),
action_add_to_playlist_(nullptr),
@ -116,7 +117,7 @@ CollectionView::CollectionView(QWidget *parent)
setDragDropMode(QAbstractItemView::DragOnly);
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_) {
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_load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), 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_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(u"media-playback-start"_s), tr("Replace current playlist"), this, &CollectionView::Load);
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();
action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), 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_ = 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(u"go-next"_s), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext);
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();
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
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
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();
action_edit_track_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-rename")), 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_show_in_browser_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), tr("Show in file browser..."), this, &CollectionView::ShowInBrowser);
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(u"edit-rename"_s), tr("Edit tracks information..."), this, &CollectionView::EditTracks);
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();

View File

@ -73,7 +73,7 @@
using namespace std::chrono_literals;
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)
: QObject(parent),
@ -205,7 +205,7 @@ void CollectionWatcher::ReloadSettings() {
scan_on_startup_ = 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) {
song_tracking_ = s.value("song_tracking", 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 {
if (matching_song.url() != new_song.url()) {
changes << QStringLiteral("file path");
changes << u"file path"_s;
notify_new = true;
}
if (matching_song.fingerprint() != new_song.fingerprint()) {
changes << QStringLiteral("fingerprint");
changes << u"fingerprint"_s;
notify_new = true;
}
if (!matching_song.IsMetadataEqual(new_song)) {
changes << QStringLiteral("metadata");
changes << u"metadata"_s;
notify_new = true;
}
if (!matching_song.IsPlayStatisticsEqual(new_song)) {
changes << QStringLiteral("play statistics");
changes << u"play statistics"_s;
notify_new = true;
}
if (!matching_song.IsRatingEqual(new_song)) {
changes << QStringLiteral("rating");
changes << u"rating"_s;
notify_new = true;
}
if (!matching_song.IsArtEqual(new_song)) {
changes << QStringLiteral("album art");
changes << u"album art"_s;
notify_new = true;
}
if (!matching_song.IsAcoustIdEqual(new_song)) {
changes << QStringLiteral("acoustid");
changes << u"acoustid"_s;
notify_new = true;
}
if (!matching_song.IsMusicBrainzEqual(new_song)) {
changes << QStringLiteral("musicbrainz");
changes << u"musicbrainz"_s;
notify_new = true;
}
if (!matching_song.IsEBUR128Equal(new_song)) {
changes << QStringLiteral("ebur128 loudness characteristics");
changes << u"ebur128 loudness characteristics"_s;
notify_new = true;
}
if (matching_song.mtime() != new_song.mtime()) {
changes << QStringLiteral("mtime");
changes << u"mtime"_s;
}
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(3, new QStandardItem(tr("Third Level")));
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->setShortcut(QKeySequence::Delete);

View File

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

View File

@ -57,8 +57,6 @@
#include "utilities/strutils.h"
#include "utilities/timeutils.h"
#include "widgets/resizabletextedit.h"
#include "collection/collectionbackend.h"
#include "collection/collectionquery.h"
#include "collection/collectionview.h"
#include "covermanager/albumcoverchoicecontroller.h"
#include "lyrics/lyricsfetcher.h"
@ -119,25 +117,25 @@ ContextView::ContextView(QWidget *parent)
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_->addWidget(scrollarea_);
scrollarea_->setObjectName(QStringLiteral("context-scrollarea"));
scrollarea_->setObjectName(u"context-scrollarea"_s);
scrollarea_->setWidgetResizable(true);
scrollarea_->setWidget(widget_scrollarea_);
scrollarea_->setContentsMargins(0, 0, 0, 0);
scrollarea_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
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_->setContentsMargins(0, 0, 0, 0);
textedit_top_->setReadOnly(true);
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_->addWidget(textedit_top_);
layout_scrollarea_->addWidget(widget_album_);
@ -306,8 +304,8 @@ void ContextView::ReloadSettings() {
Settings s;
s.beginGroup(ContextSettingsPage::kSettingsGroup);
title_fmt_ = s.value(ContextSettingsPage::kSettingsTitleFmt, QStringLiteral("%title% - %artist%")).toString();
summary_fmt_ = s.value(ContextSettingsPage::kSettingsSummaryFmt, QStringLiteral("%album%")).toString();
title_fmt_ = s.value(ContextSettingsPage::kSettingsTitleFmt, u"%title% - %artist%"_s).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_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());
@ -441,7 +439,7 @@ void ContextView::UpdateFonts() {
void ContextView::SetSong() {
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();
@ -477,7 +475,7 @@ void ContextView::SetSong() {
else {
label_samplerate_title_->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) {
label_bitdepth_title_->hide();
@ -487,7 +485,7 @@ void ContextView::SetSong() {
else {
label_bitdepth_title_->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) {
label_bitrate_title_->hide();
@ -549,7 +547,7 @@ void ContextView::SetSong() {
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()) {
textedit_top_->SetText(top_text);
}
@ -577,7 +575,7 @@ void ContextView::UpdateSong(const Song &song) {
else {
label_samplerate_title_->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()) {
@ -589,7 +587,7 @@ void ContextView::UpdateSong(const Song &song) {
else {
label_bitdepth_title_->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()) {

View File

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

View File

@ -129,12 +129,12 @@ QSqlDatabase Database::Connect() {
db = QSqlDatabase::database(connection_id);
}
else {
db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connection_id);
db = QSqlDatabase::addDatabase(u"QSQLITE"_s, connection_id);
}
if (db.isOpen()) {
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;
if (injected_database_name_.isNull()) {
@ -145,7 +145,7 @@ QSqlDatabase Database::Connect() {
}
if (!db.open()) {
app_->AddError(QStringLiteral("Database: ") + db.lastError().text());
app_->AddError(u"Database: "_s + db.lastError().text());
return db;
}
@ -168,9 +168,9 @@ QSqlDatabase Database::Connect() {
// Attach the db
SqlQuery q(db);
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias"));
q.BindValue(QStringLiteral(":filename"), filename);
q.BindValue(QStringLiteral(":alias"), key);
q.prepare(u"ATTACH DATABASE :filename AS :alias"_s);
q.BindValue(u":filename"_s, filename);
q.BindValue(u":alias"_s, key);
if (!q.Exec()) {
qFatal("Couldn't attach external database '%s'", key.toLatin1().constData());
}
@ -225,7 +225,7 @@ int Database::SchemaVersion(QSqlDatabase *db) {
int schema_version = 0;
{
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()) {
schema_version = q.value(0).toInt();
}
@ -266,8 +266,8 @@ void Database::RecreateAttachedDb(const QString &database_name) {
QSqlDatabase db(Connect());
SqlQuery q(db);
q.prepare(QStringLiteral("DETACH DATABASE :alias"));
q.BindValue(QStringLiteral(":alias"), database_name);
q.prepare(u"DETACH DATABASE :alias"_s);
q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) {
qLog(Warning) << "Failed to detach database" << database_name;
return;
@ -297,9 +297,9 @@ void Database::AttachDatabaseOnDbConnection(const QString &database_name, const
// Attach the db
SqlQuery q(db);
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias"));
q.BindValue(QStringLiteral(":filename"), database.filename_);
q.BindValue(QStringLiteral(":alias"), database_name);
q.prepare(u"ATTACH DATABASE :filename AS :alias"_s);
q.BindValue(u":filename"_s, database.filename_);
q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) {
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());
SqlQuery q(db);
q.prepare(QStringLiteral("DETACH DATABASE :alias"));
q.BindValue(QStringLiteral(":alias"), database_name);
q.prepare(u"DETACH DATABASE :alias"_s);
q.BindValue(u":alias"_s, database_name);
if (!q.Exec()) {
qLog(Warning) << "Failed to detach database" << database_name;
return;
@ -329,7 +329,7 @@ void Database::UpdateDatabaseSchema(int version, QSqlDatabase &db) {
QString filename;
if (version == 0) {
filename = QStringLiteral(":/schema/schema.sql");
filename = u":/schema/schema.sql"_s;
}
else {
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);
update.BindValue(QStringLiteral(":filename"), url.toEncoded());
update.BindValue(QStringLiteral(":id"), rowid);
update.BindValue(u":filename"_s, url.toEncoded());
update.BindValue(u":id"_s, rowid);
if (!update.Exec()) {
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) {
// 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);
// 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;
@ -497,7 +497,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) {
bool ok = false;
// Ask for 10 error messages at most.
SqlQuery q(db);
q.prepare(QStringLiteral("PRAGMA integrity_check(10)"));
q.prepare(u"PRAGMA integrity_check(10)"_s);
if (q.Exec()) {
bool error_reported = false;
while (q.next()) {
@ -510,7 +510,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) {
}
else {
if (!error_reported) { app_->AddError(tr("Database corruption detected.")); }
app_->AddError(QStringLiteral("Database: ") + message);
app_->AddError(u"Database: "_s + message);
error_reported = true;
}
}

View File

@ -36,6 +36,8 @@
#include "settings/appearancesettingspage.h"
#include "iconloader.h"
using namespace Qt::Literals::StringLiterals;
bool IconLoader::system_icons_ = false;
bool IconLoader::custom_icons_ = false;
@ -49,7 +51,7 @@ void IconLoader::Init() {
#endif
QDir dir;
if (dir.exists(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QStringLiteral("/icons"))) {
if (dir.exists(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + u"/icons"_s)) {
custom_icons_ = true;
}
@ -123,7 +125,7 @@ QIcon IconLoader::Load(const QString &name, const bool system_icon, const int fi
}
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)) {
QString filename(custom_icon_path.arg(s).arg(s).arg(name));
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.";
}
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)) {
QString filename(path.arg(s).arg(s).arg(name));
if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s));

View File

@ -57,10 +57,10 @@ bool LocalRedirectServer::Listen() {
return false;
}
url_.setScheme(QStringLiteral("http"));
url_.setHost(QStringLiteral("localhost"));
url_.setScheme(u"http"_s);
url_.setHost(u"localhost"_s);
url_.setPort(serverPort());
url_.setPath(QStringLiteral("/"));
url_.setPath(u"/"_s);
QObject::connect(this, &QTcpServer::newConnection, this, &LocalRedirectServer::NewConnection);
return true;
@ -126,12 +126,12 @@ void LocalRedirectServer::ReadyRead() {
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;
QString page_data = QString::fromUtf8(page_file.readAll());
page_file.close();
static const QRegularExpression tr_regexp(QStringLiteral("tr\\(\"([^\"]+)\"\\)"));
static const QRegularExpression tr_regexp(u"tr\\(\"([^\"]+)\"\\)"_s);
qint64 offset = 0;
Q_FOREVER {
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');
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();
if (d.buf_) {
d.buf_->close();
@ -295,7 +295,7 @@ static T CreateLogger(Level level, const QString &class_name, int line, const ch
}
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();
@ -321,7 +321,7 @@ QString CXXDemangle(const QString &mangled_function) {
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);
if (!match.hasMatch()) {
return symbol;

View File

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

View File

@ -364,7 +364,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
// Initialize the UI
ui_->setupUi(this);
setWindowIcon(IconLoader::Load(QStringLiteral("strawberry")));
setWindowIcon(IconLoader::Load(u"strawberry"_s));
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());
// 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(collection_view_, QStringLiteral("collection"), IconLoader::Load(QStringLiteral("library-music"), true, 0, 32), tr("Collection"));
ui_->tabs->AddTab(queue_view_, QStringLiteral("queue"), IconLoader::Load(QStringLiteral("footsteps"), 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(smartplaylists_view_, QStringLiteral("smartplaylists"), IconLoader::Load(QStringLiteral("view-media-playlist"), 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(radio_view_, QStringLiteral("radios"), IconLoader::Load(QStringLiteral("radio"), true, 0, 32), tr("Radios"));
ui_->tabs->AddTab(context_view_, u"context"_s, IconLoader::Load(u"strawberry"_s, true, 0, 32), tr("Context"));
ui_->tabs->AddTab(collection_view_, u"collection"_s, IconLoader::Load(u"library-music"_s, true, 0, 32), tr("Collection"));
ui_->tabs->AddTab(queue_view_, u"queue"_s, IconLoader::Load(u"footsteps"_s, true, 0, 32), tr("Queue"));
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_, u"smartplaylists"_s, IconLoader::Load(u"view-media-playlist"_s, true, 0, 32), tr("Smart playlists"));
ui_->tabs->AddTab(file_view_, u"files"_s, IconLoader::Load(u"document-open"_s, true, 0, 32), tr("Files"));
ui_->tabs->AddTab(radio_view_, u"radios"_s, IconLoader::Load(u"radio"_s, true, 0, 32), tr("Radios"));
#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
#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
#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
#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
#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
// Add the playing widget to the fancy tab widget
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));
track_position_timer_->setInterval(kTrackPositionUpdateTimeMs);
@ -441,59 +441,59 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
// Help menu
ui_->action_about_strawberry->setIcon(IconLoader::Load(QStringLiteral("strawberry")));
ui_->action_about_qt->setIcon(QIcon(QStringLiteral(":/qt-project.org/qmessagebox/images/qtlogo-64.png")));
ui_->action_about_strawberry->setIcon(IconLoader::Load(u"strawberry"_s));
ui_->action_about_qt->setIcon(QIcon(u":/qt-project.org/qmessagebox/images/qtlogo-64.png"_s));
// Music menu
ui_->action_open_file->setIcon(IconLoader::Load(QStringLiteral("document-open")));
ui_->action_open_cd->setIcon(IconLoader::Load(QStringLiteral("media-optical")));
ui_->action_previous_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-backward")));
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
ui_->action_stop->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop")));
ui_->action_stop_after_this_track->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop")));
ui_->action_next_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward")));
ui_->action_quit->setIcon(IconLoader::Load(QStringLiteral("application-exit")));
ui_->action_open_file->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_open_cd->setIcon(IconLoader::Load(u"media-optical"_s));
ui_->action_previous_track->setIcon(IconLoader::Load(u"media-skip-backward"_s));
ui_->action_play_pause->setIcon(IconLoader::Load(u"media-playback-start"_s));
ui_->action_stop->setIcon(IconLoader::Load(u"media-playback-stop"_s));
ui_->action_stop_after_this_track->setIcon(IconLoader::Load(u"media-playback-stop"_s));
ui_->action_next_track->setIcon(IconLoader::Load(u"media-skip-forward"_s));
ui_->action_quit->setIcon(IconLoader::Load(u"application-exit"_s));
// Playlist
ui_->action_add_file->setIcon(IconLoader::Load(QStringLiteral("document-open")));
ui_->action_add_folder->setIcon(IconLoader::Load(QStringLiteral("document-open-folder")));
ui_->action_add_stream->setIcon(IconLoader::Load(QStringLiteral("document-open-remote")));
ui_->action_shuffle_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle")));
ui_->action_repeat_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-repeat")));
ui_->action_new_playlist->setIcon(IconLoader::Load(QStringLiteral("document-new")));
ui_->action_save_playlist->setIcon(IconLoader::Load(QStringLiteral("document-save")));
ui_->action_load_playlist->setIcon(IconLoader::Load(QStringLiteral("document-open")));
ui_->action_jump->setIcon(IconLoader::Load(QStringLiteral("go-jump")));
ui_->action_clear_playlist->setIcon(IconLoader::Load(QStringLiteral("edit-clear-list")));
ui_->action_shuffle->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle")));
ui_->action_remove_duplicates->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
ui_->action_remove_unavailable->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
ui_->action_remove_from_playlist->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
ui_->action_save_all_playlists->setIcon(IconLoader::Load(QStringLiteral("document-save-all")));
ui_->action_add_file->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_add_folder->setIcon(IconLoader::Load(u"document-open-folder"_s));
ui_->action_add_stream->setIcon(IconLoader::Load(u"document-open-remote"_s));
ui_->action_shuffle_mode->setIcon(IconLoader::Load(u"media-playlist-shuffle"_s));
ui_->action_repeat_mode->setIcon(IconLoader::Load(u"media-playlist-repeat"_s));
ui_->action_new_playlist->setIcon(IconLoader::Load(u"document-new"_s));
ui_->action_save_playlist->setIcon(IconLoader::Load(u"document-save"_s));
ui_->action_load_playlist->setIcon(IconLoader::Load(u"document-open"_s));
ui_->action_jump->setIcon(IconLoader::Load(u"go-jump"_s));
ui_->action_clear_playlist->setIcon(IconLoader::Load(u"edit-clear-list"_s));
ui_->action_shuffle->setIcon(IconLoader::Load(u"media-playlist-shuffle"_s));
ui_->action_remove_duplicates->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_remove_unavailable->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_remove_from_playlist->setIcon(IconLoader::Load(u"list-remove"_s));
ui_->action_save_all_playlists->setIcon(IconLoader::Load(u"document-save-all"_s));
// Configure
ui_->action_cover_manager->setIcon(IconLoader::Load(QStringLiteral("document-download")));
ui_->action_edit_track->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
ui_->action_edit_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
ui_->action_selection_set_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
ui_->action_equalizer->setIcon(IconLoader::Load(QStringLiteral("equalizer")));
ui_->action_transcoder->setIcon(IconLoader::Load(QStringLiteral("tools-wizard")));
ui_->action_update_collection->setIcon(IconLoader::Load(QStringLiteral("view-refresh")));
ui_->action_full_collection_scan->setIcon(IconLoader::Load(QStringLiteral("view-refresh")));
ui_->action_stop_collection_scan->setIcon(IconLoader::Load(QStringLiteral("dialog-error")));
ui_->action_settings->setIcon(IconLoader::Load(QStringLiteral("configure")));
ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load(QStringLiteral("scrobble")));
ui_->action_console->setIcon(IconLoader::Load(QStringLiteral("keyboard")));
ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load(QStringLiteral("view-choose")));
ui_->action_auto_complete_tags->setIcon(IconLoader::Load(QStringLiteral("musicbrainz")));
ui_->action_cover_manager->setIcon(IconLoader::Load(u"document-download"_s));
ui_->action_edit_track->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_edit_value->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_selection_set_value->setIcon(IconLoader::Load(u"edit-rename"_s));
ui_->action_equalizer->setIcon(IconLoader::Load(u"equalizer"_s));
ui_->action_transcoder->setIcon(IconLoader::Load(u"tools-wizard"_s));
ui_->action_update_collection->setIcon(IconLoader::Load(u"view-refresh"_s));
ui_->action_full_collection_scan->setIcon(IconLoader::Load(u"view-refresh"_s));
ui_->action_stop_collection_scan->setIcon(IconLoader::Load(u"dialog-error"_s));
ui_->action_settings->setIcon(IconLoader::Load(u"configure"_s));
ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load(u"scrobble"_s));
ui_->action_console->setIcon(IconLoader::Load(u"keyboard"_s));
ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load(u"view-choose"_s));
ui_->action_auto_complete_tags->setIcon(IconLoader::Load(u"musicbrainz"_s));
// Scrobble
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble-disabled")));
ui_->action_love->setIcon(IconLoader::Load(QStringLiteral("love")));
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(u"scrobble-disabled"_s));
ui_->action_love->setIcon(IconLoader::Load(u"love"_s));
// File view connections
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_stop_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::StopScan);
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_love, &QAction::triggered, this, &MainWindow::Love);
QObject::connect(&*app_->scrobbler(), &AudioScrobbler::ErrorMessage, this, &MainWindow::ShowErrorDialog);
// Playlist view actions
ui_->action_next_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgDown")));
ui_->action_previous_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Shift+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgUp")));
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(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
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);
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);
collection_view_->filter_widget()->SetSettingsGroup(QLatin1String(CollectionSettingsPage::kSettingsGroup));
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);
playlist_play_pause_ = playlist_menu_->addAction(tr("Play"), this, &MainWindow::PlaylistPlay);
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_queue_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue);
playlist_queue_->setShortcut(QKeySequence(QStringLiteral("Ctrl+D")));
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(u"go-next"_s), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue);
playlist_queue_->setShortcut(QKeySequence(u"Ctrl+D"_s));
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_->setShortcut(QKeySequence(QStringLiteral("Ctrl+Shift+D")));
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(u"Ctrl+Shift+D"_s));
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_);
playlist_menu_->addSeparator();
@ -743,20 +743,20 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
#ifdef HAVE_MUSICBRAINZ
playlist_menu_->addAction(ui_->action_auto_complete_tags);
#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(ui_->action_add_files_to_transcoder);
playlist_menu_->addSeparator();
playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), 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_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), 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_copy_to_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), 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_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(u"edit-find"_s), tr("Show in collection..."), this, &MainWindow::ShowInCollection);
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(u"edit-copy"_s), tr("Organize files..."), this, &MainWindow::PlaylistMoveToCollection);
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(u"go-jump"_s), tr("Move to collection..."), this, &MainWindow::PlaylistMoveToCollection);
#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
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();
playlistitem_actions_separator_ = playlist_menu_->addSeparator();
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);
// 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);
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());
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
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);
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);
QObject::connect(action_focus_search, &QAction::triggered, this, &MainWindow::FocusSearchField);
@ -1014,7 +1014,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
#endif
#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;
s.beginGroup(kSettingsGroup);
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) {
MessageDialog *rosetta_message = new MessageDialog(this);
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->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
@ -1061,7 +1061,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
sponsor_message->set_settings_group(QLatin1String(kSettingsGroup));
sponsor_message->set_do_not_show_message_again(QLatin1String(do_not_show_sponsor_message_key));
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() {
setWindowTitle(QStringLiteral("Strawberry Music Player"));
setWindowTitle(u"Strawberry Music Player"_s);
ui_->action_stop->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->setEnabled(true);
@ -1371,7 +1371,7 @@ void MainWindow::MediaPaused() {
ui_->action_stop->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->setEnabled(true);
@ -1391,7 +1391,7 @@ void MainWindow::MediaPlaying() {
ui_->action_stop->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"));
bool enable_play_pause(false);
@ -1713,11 +1713,11 @@ void MainWindow::UpdateTrackSliderPosition() {
void MainWindow::UpdateTaskbarProgress(const bool visible, const double progress) {
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(QStringLiteral("progress"), progress);
msg << QStringLiteral("application://org.strawberrymusicplayer.strawberry.desktop") << map;
map.insert(u"progress-visible"_s, visible);
map.insert(u"progress"_s, progress);
msg << u"application://org.strawberrymusicplayer.strawberry.desktop"_s << map;
QDBusConnection::sessionBus().send(msg);
@ -1849,11 +1849,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
// Is this song currently 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_->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause")));
playlist_play_pause_->setIcon(IconLoader::Load(u"media-playback-pause"_s));
}
else {
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?
@ -1965,11 +1965,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
else playlist_skip_->setText(tr("Toggle skip status"));
}
if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-previous")));
else playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-next")));
if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load(u"go-previous"_s));
else playlist_queue_->setIcon(IconLoader::Load(u"go-next"_s));
if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward")));
else playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load(u"media-skip-forward"_s));
else playlist_skip_->setIcon(IconLoader::Load(u"media-playback-start"_s));
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_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_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.
if (selected > 0) {
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();
for (const int playlist_id : playlist_ids) {
@ -2884,7 +2884,7 @@ void MainWindow::CheckFullRescanRevisions() {
// If we have any...
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) {
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";
// Create a fake song
Song fake(Song::Source::LocalFile);
fake.Init(QStringLiteral("Title"), QStringLiteral("Artist"), QStringLiteral("Album"), 123);
fake.set_genre(QStringLiteral("Classical"));
fake.set_composer(QStringLiteral("Anonymous"));
fake.set_performer(QStringLiteral("Anonymous"));
fake.Init(u"Title"_s, u"Artist"_s, u"Album"_s, 123);
fake.set_genre(u"Classical"_s);
fake.set_composer(u"Anonymous"_s);
fake.set_performer(u"Anonymous"_s);
fake.set_track(1);
fake.set_disc(1);
fake.set_year(2011);
@ -3142,12 +3142,12 @@ void MainWindow::SetToggleScrobblingIcon(const bool value) {
if (value) {
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
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 {
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();
}
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);
QObject::connect(delete_files, &DeleteFiles::Finished, this, &MainWindow::DeleteFilesFinished);
delete_files->Start(selected_songs);

View File

@ -33,6 +33,8 @@
#include "networkaccessmanager.h"
#include "threadsafenetworkdiskcache.h"
using namespace Qt::Literals::StringLiterals;
NetworkAccessManager::NetworkAccessManager(QObject *parent)
: QNetworkAccessManager(parent) {
@ -56,7 +58,7 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, const QNetworkR
new_request.setHeader(QNetworkRequest::UserAgentHeader, user_agent);
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

View File

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

View File

@ -47,11 +47,9 @@
#include "song.h"
#include "songloader.h"
#include "database.h"
#include "sqlrow.h"
#include "engine/enginebase.h"
#include "tagreader/tagreaderclient.h"
#include "collection/collectionbackend.h"
#include "collection/collectionquery.h"
#include "playlistparsers/cueparser.h"
#include "playlistparsers/parserbase.h"
#include "playlistparsers/playlistparser.h"
@ -60,6 +58,8 @@
# include "device/cddasongloader.h"
#endif
using namespace Qt::Literals::StringLiterals;
namespace {
constexpr int kDefaultTimeout = 5000;
}
@ -81,15 +81,15 @@ SongLoader::SongLoader(SharedPtr<CollectionBackendInterface> collection_backend,
success_(false) {
if (sRawUriSchemes.isEmpty()) {
sRawUriSchemes << QStringLiteral("udp")
<< QStringLiteral("mms")
<< QStringLiteral("mmsh")
<< QStringLiteral("mmst")
<< QStringLiteral("mmsu")
<< QStringLiteral("rtsp")
<< QStringLiteral("rtspu")
<< QStringLiteral("rtspt")
<< QStringLiteral("rtsph");
sRawUriSchemes << u"udp"_s
<< u"mms"_s
<< u"mmsh"_s
<< u"mmst"_s
<< u"mmsu"_s
<< u"rtsp"_s
<< u"rtspu"_s
<< u"rtspt"_s
<< u"rtsph"_s;
}
timeout_timer_->setSingleShot(true);
@ -537,7 +537,7 @@ void SongLoader::TypeFound(GstElement *typefind, const uint probability, GstCaps
// Check the mimetype
instance->mime_type_ = QString::fromUtf8(gst_structure_get_name(gst_caps_get_structure(caps, 0)));
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
instance->state_ = State::WaitingForMagic;
return;
@ -688,10 +688,10 @@ void SongLoader::MagicReady() {
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.
parser_ = nullptr;
url_.setScheme(QStringLiteral("mms"));
url_.setScheme(u"mms"_s);
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()));
}
ReplaceColor(&stylesheet, QStringLiteral("Window"), p, QPalette::Window);
ReplaceColor(&stylesheet, QStringLiteral("Background"), p, QPalette::Window);
ReplaceColor(&stylesheet, QStringLiteral("WindowText"), p, QPalette::WindowText);
ReplaceColor(&stylesheet, QStringLiteral("Base"), p, QPalette::Base);
ReplaceColor(&stylesheet, QStringLiteral("AlternateBase"), p, QPalette::AlternateBase);
ReplaceColor(&stylesheet, QStringLiteral("ToolTipBase"), p, QPalette::ToolTipBase);
ReplaceColor(&stylesheet, QStringLiteral("ToolTipText"), p, QPalette::ToolTipText);
ReplaceColor(&stylesheet, QStringLiteral("Text"), p, QPalette::Text);
ReplaceColor(&stylesheet, QStringLiteral("Button"), p, QPalette::Button);
ReplaceColor(&stylesheet, QStringLiteral("ButtonText"), p, QPalette::ButtonText);
ReplaceColor(&stylesheet, QStringLiteral("BrightText"), p, QPalette::BrightText);
ReplaceColor(&stylesheet, QStringLiteral("Light"), p, QPalette::Light);
ReplaceColor(&stylesheet, QStringLiteral("Midlight"), p, QPalette::Midlight);
ReplaceColor(&stylesheet, QStringLiteral("Dark"), p, QPalette::Dark);
ReplaceColor(&stylesheet, QStringLiteral("Mid"), p, QPalette::Mid);
ReplaceColor(&stylesheet, QStringLiteral("Shadow"), p, QPalette::Shadow);
ReplaceColor(&stylesheet, QStringLiteral("Highlight"), p, QPalette::Highlight);
ReplaceColor(&stylesheet, QStringLiteral("HighlightedText"), p, QPalette::HighlightedText);
ReplaceColor(&stylesheet, QStringLiteral("Link"), p, QPalette::Link);
ReplaceColor(&stylesheet, QStringLiteral("LinkVisited"), p, QPalette::LinkVisited);
ReplaceColor(&stylesheet, u"Window"_s, p, QPalette::Window);
ReplaceColor(&stylesheet, u"Background"_s, p, QPalette::Window);
ReplaceColor(&stylesheet, u"WindowText"_s, p, QPalette::WindowText);
ReplaceColor(&stylesheet, u"Base"_s, p, QPalette::Base);
ReplaceColor(&stylesheet, u"AlternateBase"_s, p, QPalette::AlternateBase);
ReplaceColor(&stylesheet, u"ToolTipBase"_s, p, QPalette::ToolTipBase);
ReplaceColor(&stylesheet, u"ToolTipText"_s, p, QPalette::ToolTipText);
ReplaceColor(&stylesheet, u"Text"_s, p, QPalette::Text);
ReplaceColor(&stylesheet, u"Button"_s, p, QPalette::Button);
ReplaceColor(&stylesheet, u"ButtonText"_s, p, QPalette::ButtonText);
ReplaceColor(&stylesheet, u"BrightText"_s, p, QPalette::BrightText);
ReplaceColor(&stylesheet, u"Light"_s, p, QPalette::Light);
ReplaceColor(&stylesheet, u"Midlight"_s, p, QPalette::Midlight);
ReplaceColor(&stylesheet, u"Dark"_s, p, QPalette::Dark);
ReplaceColor(&stylesheet, u"Mid"_s, p, QPalette::Mid);
ReplaceColor(&stylesheet, u"Shadow"_s, p, QPalette::Shadow);
ReplaceColor(&stylesheet, u"Highlight"_s, p, QPalette::Highlight);
ReplaceColor(&stylesheet, u"HighlightedText"_s, p, QPalette::HighlightedText);
ReplaceColor(&stylesheet, u"Link"_s, p, QPalette::Link);
ReplaceColor(&stylesheet, u"LinkVisited"_s, p, QPalette::LinkVisited);
#ifdef Q_OS_MACOS
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) {
css->replace(QStringLiteral("%palette-") + name + QStringLiteral("-lighter"), palette.color(role).lighter().name(), Qt::CaseInsensitive);
css->replace(QStringLiteral("%palette-") + name + QStringLiteral("-darker"), palette.color(role).darker().name(), Qt::CaseInsensitive);
css->replace(QStringLiteral("%palette-") + name, palette.color(role).name(), Qt::CaseInsensitive);
css->replace(u"%palette-"_s + name + u"-lighter"_s, palette.color(role).lighter().name(), Qt::CaseInsensitive);
css->replace(u"%palette-"_s + name + u"-darker"_s, palette.color(role).darker().name(), Qt::CaseInsensitive);
css->replace(u"%palette-"_s + name, palette.color(role).name(), Qt::CaseInsensitive);
}

View File

@ -25,6 +25,8 @@
#include "temporaryfile.h"
using namespace Qt::Literals::StringLiterals;
TemporaryFile::TemporaryFile(const QString &filename_pattern) {
int i = 0;
@ -56,7 +58,7 @@ TemporaryFile::~TemporaryFile() {
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;

View File

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

View File

@ -106,16 +106,16 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget *parent)
search_cover_auto_(nullptr),
save_embedded_cover_override_(false) {
cover_from_file_ = new QAction(IconLoader::Load(QStringLiteral("document-open")), tr("Load cover from disk..."), this);
cover_to_file_ = new QAction(IconLoader::Load(QStringLiteral("document-save")), tr("Save cover to disk..."), this);
cover_from_url_ = new QAction(IconLoader::Load(QStringLiteral("download")), tr("Load cover from URL..."), this);
search_for_cover_ = new QAction(IconLoader::Load(QStringLiteral("search")), tr("Search for album covers..."), this);
unset_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Unset cover"), this);
delete_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Delete cover"), this);
clear_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Clear cover"), this);
cover_from_file_ = new QAction(IconLoader::Load(u"document-open"_s), tr("Load cover from disk..."), this);
cover_to_file_ = new QAction(IconLoader::Load(u"document-save"_s), tr("Save cover to disk..."), this);
cover_from_url_ = new QAction(IconLoader::Load(u"download"_s), tr("Load cover from URL..."), this);
search_for_cover_ = new QAction(IconLoader::Load(u"search"_s), tr("Search for album covers..."), this);
unset_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Unset cover"), this);
delete_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Delete cover"), this);
clear_cover_ = new QAction(IconLoader::Load(u"list-remove"_s), tr("Clear cover"), this);
separator1_ = new QAction(this);
separator1_->setSeparator(true);
show_cover_ = new QAction(IconLoader::Load(QStringLiteral("zoom-in")), tr("Show fullsize..."), this);
show_cover_ = new QAction(IconLoader::Load(u"zoom-in"_s), tr("Show fullsize..."), this);
search_cover_auto_ = new QAction(tr("Search automatically"), this);
search_cover_auto_->setCheckable(true);
@ -135,7 +135,7 @@ void AlbumCoverChoiceController::Init(Application *app) {
app_ = app;
cover_fetcher_ = new AlbumCoverFetcher(app_->cover_providers(), app->network(), this);
cover_searcher_ = new AlbumCoverSearcher(QIcon(QStringLiteral(":/pictures/cdcase.png")), app, this);
cover_searcher_ = new AlbumCoverSearcher(QIcon(u":/pictures/cdcase.png"_s), app, this);
cover_searcher_->Init(cover_fetcher_);
QObject::connect(cover_fetcher_, &AlbumCoverFetcher::AlbumCoverFetched, this, &AlbumCoverChoiceController::AlbumCoverFetched);
@ -148,7 +148,7 @@ void AlbumCoverChoiceController::ReloadSettings() {
s.beginGroup(CoversSettingsPage::kSettingsGroup);
cover_options_.cover_type = static_cast<CoverOptions::CoverType>(s.value(CoversSettingsPage::kSaveType, static_cast<int>(CoverOptions::CoverType::Cache)).toInt());
cover_options_.cover_filename = static_cast<CoverOptions::CoverFilename>(s.value(CoversSettingsPage::kSaveFilename, static_cast<int>(CoverOptions::CoverFilename::Pattern)).toInt());
cover_options_.cover_pattern = s.value(CoversSettingsPage::kSavePattern, QStringLiteral("%albumartist-%album")).toString();
cover_options_.cover_pattern = s.value(CoversSettingsPage::kSavePattern, u"%albumartist-%album"_s).toString();
cover_options_.cover_overwrite = s.value(CoversSettingsPage::kSaveOverwrite, false).toBool();
cover_options_.cover_lowercase = s.value(CoversSettingsPage::kSaveLowercase, false).toBool();
cover_options_.cover_replace_spaces = s.value(CoversSettingsPage::kSaveReplaceSpaces, false).toBool();
@ -179,7 +179,7 @@ AlbumCoverImageResult AlbumCoverChoiceController::LoadImageFromFile(Song *song)
return AlbumCoverImageResult();
}
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
if (cover_file.isEmpty()) return AlbumCoverImageResult();
QFile file(cover_file);
@ -210,7 +210,7 @@ QUrl AlbumCoverChoiceController::LoadCoverFromFile(Song *song) {
if (!song->url().isValid() || !song->url().isLocalFile() || song->effective_albumartist().isEmpty() || song->album().isEmpty()) return QUrl();
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
QString cover_file = QFileDialog::getOpenFileName(this, tr("Load cover from disk"), GetInitialPathForFileDialog(*song, QString()), tr(kLoadImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
if (cover_file.isEmpty() || QImage(cover_file).isNull()) return QUrl();
switch (get_save_album_cover_type()) {
@ -241,12 +241,12 @@ void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const A
}
initial_file_name = initial_file_name + QLatin1Char('-') + (song.effective_album().isEmpty() ? tr("unknown") : song.effective_album()) + ".jpg"_L1;
initial_file_name = initial_file_name.toLower();
static const QRegularExpression regex_whitespaces(QStringLiteral("\\s"));
initial_file_name.replace(regex_whitespaces, QStringLiteral("-"));
static const QRegularExpression regex_whitespaces(u"\\s"_s);
initial_file_name.replace(regex_whitespaces, u"-"_s);
static const QRegularExpression regex_invalid_fat_characters(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption);
initial_file_name.remove(regex_invalid_fat_characters);
QString save_filename = QFileDialog::getSaveFileName(this, tr("Save album cover"), GetInitialPathForFileDialog(song, initial_file_name), tr(kSaveImageFileFilter) + QStringLiteral(";;") + tr(kAllFilesFilter));
QString save_filename = QFileDialog::getSaveFileName(this, tr("Save album cover"), GetInitialPathForFileDialog(song, initial_file_name), tr(kSaveImageFileFilter) + u";;"_s + tr(kAllFilesFilter));
if (save_filename.isEmpty()) return;
@ -659,7 +659,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou
const AlbumCoverImageResult &result,
const bool force_overwrite) {
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, QStringLiteral("jpg"));
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, u"jpg"_s);
if (filepath.isEmpty()) return QUrl();
QFile file(filepath);
@ -745,7 +745,7 @@ bool AlbumCoverChoiceController::IsKnownImageExtension(const QString &suffix) {
if (!sImageExtensions) {
sImageExtensions = new QSet<QString>();
(*sImageExtensions) << QStringLiteral("png") << QStringLiteral("jpg") << QStringLiteral("jpeg") << QStringLiteral("bmp") << QStringLiteral("gif") << QStringLiteral("xpm") << QStringLiteral("pbm") << QStringLiteral("pgm") << QStringLiteral("ppm") << QStringLiteral("xbm");
(*sImageExtensions) << u"png"_s << u"jpg"_s << u"jpeg"_s << u"bmp"_s << u"gif"_s << u"xpm"_s << u"pbm"_s << u"pgm"_s << u"ppm"_s << u"xbm"_s;
}
return sImageExtensions->contains(suffix);

View File

@ -59,7 +59,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
s.beginGroup(kSettingsGroup);
// Restore last accepted settings
ui_->fileName->setText(s.value("fileName", QStringLiteral("cover")).toString());
ui_->fileName->setText(s.value("fileName", u"cover"_s).toString());
ui_->doNotOverwrite->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::None)).toInt()) == OverwriteMode::None);
ui_->overwriteAll->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::All)).toInt()) == OverwriteMode::All);
ui_->overwriteSmaller->setChecked(static_cast<OverwriteMode>(s.value("overwrite", static_cast<int>(OverwriteMode::Smaller)).toInt()) == OverwriteMode::Smaller);
@ -77,7 +77,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
if (!result.cancelled_) {
QString fileName = ui_->fileName->text();
if (fileName.isEmpty()) {
fileName = QStringLiteral("cover");
fileName = u"cover"_s;
}
OverwriteMode overwrite_mode = ui_->doNotOverwrite->isChecked() ? OverwriteMode::None : (ui_->overwriteAll->isChecked() ? OverwriteMode::All : OverwriteMode::Smaller);
bool forceSize = ui_->forceSize->isChecked();

View File

@ -38,7 +38,7 @@ AlbumCoverLoaderOptions::Types AlbumCoverLoaderOptions::LoadTypes() {
Settings s;
s.beginGroup(CoversSettingsPage::kSettingsGroup);
const QStringList all_cover_types = QStringList() << QStringLiteral("art_unset") << QStringLiteral("art_embedded") << QStringLiteral("art_manual") << QStringLiteral("art_automatic");
const QStringList all_cover_types = QStringList() << u"art_unset"_s << u"art_embedded"_s << u"art_manual"_s << u"art_automatic"_s;
const QStringList cover_types_strlist = s.value(CoversSettingsPage::kTypes, all_cover_types).toStringList();
for (const QString &cover_type_str : cover_types_strlist) {
if (cover_type_str == "art_unset"_L1) {

View File

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

View File

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

View File

@ -27,6 +27,8 @@
#include "coversearchstatistics.h"
using namespace Qt::Literals::StringLiterals;
CoverSearchStatistics::CoverSearchStatistics()
: network_requests_made_(0),
bytes_transferred_(0),
@ -62,7 +64,7 @@ CoverSearchStatistics &CoverSearchStatistics::operator+=(const CoverSearchStatis
QString CoverSearchStatistics::AverageDimensions() const {
if (chosen_images_ == 0) {
return QStringLiteral("0x0");
return u"0x0"_s;
}
return QString::number(chosen_width_ / chosen_images_) + QLatin1Char('x') + QString::number(chosen_height_ / chosen_images_);

View File

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

View File

@ -38,18 +38,19 @@
#include "currentalbumcoverloader.h"
using std::make_unique;
using namespace Qt::Literals::StringLiterals;
CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *parent)
: QObject(parent),
app_(app),
temp_file_pattern_(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + QStringLiteral("/strawberry-cover-XXXXXX.jpg")),
temp_file_pattern_(QStandardPaths::writableLocation(QStandardPaths::TempLocation) + u"/strawberry-cover-XXXXXX.jpg"_s),
id_(0) {
setObjectName(QLatin1String(metaObject()->className()));
options_.options = AlbumCoverLoaderOptions::Option::RawImageData | AlbumCoverLoaderOptions::Option::OriginalImage | AlbumCoverLoaderOptions::Option::ScaledImage;
options_.desired_scaled_size = QSize(120, 120);
options_.default_cover = QStringLiteral(":/pictures/cdcase.png");
options_.default_cover = u":/pictures/cdcase.png"_s;
QObject::connect(&*app_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover);
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady);

View File

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

View File

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

View File

@ -31,6 +31,8 @@
#include "coverprovider.h"
#include "jsoncoverprovider.h"
using namespace Qt::Literals::StringLiterals;
JsonCoverProvider::JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
: CoverProvider(name, enabled, authentication_required, quality, batch, allow_missing_album, app, network, parent) {}
@ -45,18 +47,18 @@ QJsonObject JsonCoverProvider::ExtractJsonObj(const QByteArray &data) {
}
if (json_doc.isEmpty()) {
Error(QStringLiteral("Received empty Json document."), data);
Error(u"Received empty Json document."_s, data);
return QJsonObject();
}
if (!json_doc.isObject()) {
Error(QStringLiteral("Json document is not an object."), json_doc);
Error(u"Json document is not an object."_s, json_doc);
return QJsonObject();
}
QJsonObject json_obj = json_doc.object();
if (json_obj.isEmpty()) {
Error(QStringLiteral("Received empty Json object."), json_doc);
Error(u"Received empty Json object."_s, json_doc);
return QJsonObject();
}

View File

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

View File

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

View File

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

View File

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

View File

@ -54,7 +54,7 @@ constexpr int kLimit = 10;
}
QobuzCoverProvider::QobuzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
: JsonCoverProvider(QStringLiteral("Qobuz"), true, true, 2.0, true, true, app, network, parent),
: JsonCoverProvider(u"Qobuz"_s, true, true, 2.0, true, true, app, network, parent),
service_(app->streaming_services()->Service<QobuzService>()) {}
QobuzCoverProvider::~QobuzCoverProvider() {
@ -87,9 +87,9 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
}
}
ParamList params = ParamList() << Param(QStringLiteral("query"), query)
<< Param(QStringLiteral("limit"), QString::number(kLimit))
<< Param(QStringLiteral("app_id"), service_->app_id());
ParamList params = ParamList() << Param(u"query"_s, query)
<< Param(u"limit"_s, QString::number(kLimit))
<< Param(u"app_id"_s, service_->app_id());
std::sort(params.begin(), params.end());
@ -103,7 +103,7 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
req.setRawHeader("X-App-Id", service_->app_id().toUtf8());
req.setRawHeader("X-User-Auth-Token", service_->user_auth_token().toUtf8());
QNetworkReply *reply = network_->get(req);
@ -188,27 +188,27 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
value_type = json_obj["tracks"_L1];
}
else {
Error(QStringLiteral("Json reply is missing albums and tracks object."), json_obj);
Error(u"Json reply is missing albums and tracks object."_s, json_obj);
Q_EMIT SearchFinished(id, results);
return;
}
if (!value_type.isObject()) {
Error(QStringLiteral("Json albums or tracks is not a object."), value_type);
Error(u"Json albums or tracks is not a object."_s, value_type);
Q_EMIT SearchFinished(id, results);
return;
}
QJsonObject obj_type = value_type.toObject();
if (!obj_type.contains("items"_L1)) {
Error(QStringLiteral("Json albums or tracks object does not contain items."), obj_type);
Error(u"Json albums or tracks object does not contain items."_s, obj_type);
Q_EMIT SearchFinished(id, results);
return;
}
QJsonValue value_items = obj_type["items"_L1];
if (!value_items.isArray()) {
Error(QStringLiteral("Json albums or track object items is not a array."), value_items);
Error(u"Json albums or track object items is not a array."_s, value_items);
Q_EMIT SearchFinished(id, results);
return;
}
@ -217,7 +217,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
for (const QJsonValue &value : array_items) {
if (!value.isObject()) {
Error(QStringLiteral("Invalid Json reply, value in items is not a object."));
Error(u"Invalid Json reply, value in items is not a object."_s);
continue;
}
QJsonObject item_obj = value.toObject();
@ -225,7 +225,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
QJsonObject obj_album;
if (item_obj.contains("album"_L1)) {
if (!item_obj["album"_L1].isObject()) {
Error(QStringLiteral("Invalid Json reply, items album is not a object."), item_obj);
Error(u"Invalid Json reply, items album is not a object."_s, item_obj);
continue;
}
obj_album = item_obj["album"_L1].toObject();
@ -235,7 +235,7 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
}
if (!obj_album.contains("artist"_L1) || !obj_album.contains("image"_L1) || !obj_album.contains("title"_L1)) {
Error(QStringLiteral("Invalid Json reply, item is missing artist, title or image."), obj_album);
Error(u"Invalid Json reply, item is missing artist, title or image."_s, obj_album);
continue;
}
@ -244,12 +244,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
// Artist
QJsonValue value_artist = obj_album["artist"_L1];
if (!value_artist.isObject()) {
Error(QStringLiteral("Invalid Json reply, items (album) artist is not a object."), value_artist);
Error(u"Invalid Json reply, items (album) artist is not a object."_s, value_artist);
continue;
}
QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) {
Error(QStringLiteral("Invalid Json reply, items (album) artist is missing name."), obj_artist);
Error(u"Invalid Json reply, items (album) artist is missing name."_s, obj_artist);
continue;
}
QString artist = obj_artist["name"_L1].toString();
@ -257,12 +257,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
// Image
QJsonValue value_image = obj_album["image"_L1];
if (!value_image.isObject()) {
Error(QStringLiteral("Invalid Json reply, items (album) image is not a object."), value_image);
Error(u"Invalid Json reply, items (album) image is not a object."_s, value_image);
continue;
}
QJsonObject obj_image = value_image.toObject();
if (!obj_image.contains("large"_L1)) {
Error(QStringLiteral("Invalid Json reply, items (album) image is missing large."), obj_image);
Error(u"Invalid Json reply, items (album) image is missing large."_s, obj_image);
continue;
}
QUrl cover_url(obj_image["large"_L1].toString());

View File

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

View File

@ -52,7 +52,7 @@ constexpr int kLimit = 10;
}
TidalCoverProvider::TidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
: JsonCoverProvider(QStringLiteral("Tidal"), true, true, 2.5, true, true, app, network, parent),
: JsonCoverProvider(u"Tidal"_s, true, true, 2.5, true, true, app, network, parent),
service_(app->streaming_services()->Service<TidalService>()) {}
TidalCoverProvider::~TidalCoverProvider() {
@ -87,9 +87,9 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
}
}
const ParamList params = ParamList() << Param(QStringLiteral("query"), query)
<< Param(QStringLiteral("limit"), QString::number(kLimit))
<< Param(QStringLiteral("countryCode"), service_->country_code());
const ParamList params = ParamList() << Param(u"query"_s, query)
<< Param(u"limit"_s, QString::number(kLimit))
<< Param(u"countryCode"_s, service_->country_code());
QUrlQuery url_query;
for (const Param &param : params) {
@ -100,7 +100,7 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
url.setQuery(url_query);
QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded"));
req.setHeader(QNetworkRequest::ContentTypeHeader, u"application/x-www-form-urlencoded"_s);
if (service_->oauth() && !service_->access_token().isEmpty()) req.setRawHeader("authorization", "Bearer " + service_->access_token().toUtf8());
else if (!service_->session_id().isEmpty()) req.setRawHeader("X-Tidal-SessionId", service_->session_id().toUtf8());
@ -183,7 +183,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
}
if (!json_obj.contains("items"_L1)) {
Error(QStringLiteral("Json object is missing items."), json_obj);
Error(u"Json object is missing items."_s, json_obj);
Q_EMIT SearchFinished(id, CoverProviderSearchResults());
return;
}
@ -204,23 +204,23 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
for (const QJsonValue &value_item : array_items) {
if (!value_item.isObject()) {
Error(QStringLiteral("Invalid Json reply, items array item is not a object."));
Error(u"Invalid Json reply, items array item is not a object."_s);
continue;
}
QJsonObject obj_item = value_item.toObject();
if (!obj_item.contains("artist"_L1)) {
Error(QStringLiteral("Invalid Json reply, items array item is missing artist."), obj_item);
Error(u"Invalid Json reply, items array item is missing artist."_s, obj_item);
continue;
}
QJsonValue value_artist = obj_item["artist"_L1];
if (!value_artist.isObject()) {
Error(QStringLiteral("Invalid Json reply, items array item artist is not a object."), value_artist);
Error(u"Invalid Json reply, items array item artist is not a object."_s, value_artist);
continue;
}
QJsonObject obj_artist = value_artist.toObject();
if (!obj_artist.contains("name"_L1)) {
Error(QStringLiteral("Invalid Json reply, items array item artist is missing name."), obj_artist);
Error(u"Invalid Json reply, items array item artist is missing name."_s, obj_artist);
continue;
}
QString artist = obj_artist["name"_L1].toString();
@ -232,7 +232,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
obj_album = value_album.toObject();
}
else {
Error(QStringLiteral("Invalid Json reply, items array item album is not a object."), value_album);
Error(u"Invalid Json reply, items array item album is not a object."_s, value_album);
continue;
}
}
@ -241,7 +241,7 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
}
if (!obj_album.contains("title"_L1) || !obj_album.contains("cover"_L1)) {
Error(QStringLiteral("Invalid Json reply, items array item album is missing title or cover."), obj_album);
Error(u"Invalid Json reply, items array item album is missing title or cover."_s, obj_album);
continue;
}
QString album = obj_album["title"_L1].toString();
@ -252,9 +252,9 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
cover_result.album = Song::AlbumRemoveDiscMisc(album);
cover_result.number = ++i;
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("1280x1280"), QSize(1280, 1280))
<< qMakePair(QStringLiteral("750x750"), QSize(750, 750))
<< qMakePair(QStringLiteral("640x640"), QSize(640, 640));
const QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(u"1280x1280"_s, QSize(1280, 1280))
<< qMakePair(u"750x750"_s, QSize(750, 750))
<< qMakePair(u"640x640"_s, QSize(640, 640));
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
QUrl cover_url(QStringLiteral("%1/images/%2/%3.jpg").arg(QLatin1String(TidalService::kResourcesUrl), cover, cover_size.first));
cover_result.image_url = cover_url;

View File

@ -37,6 +37,8 @@
#include "cddalister.h"
#include "core/logging.h"
using namespace Qt::Literals::StringLiterals;
QStringList CddaLister::DeviceUniqueIDs() { return devices_list_; }
QVariantList CddaLister::DeviceIcons(const QString &id) {
@ -44,7 +46,7 @@ QVariantList CddaLister::DeviceIcons(const QString &id) {
Q_UNUSED(id)
QVariantList icons;
icons << QStringLiteral("media-optical");
icons << u"media-optical"_s;
return icons;
}
@ -105,12 +107,12 @@ QString CddaLister::MakeFriendlyName(const QString &id) {
return QString::fromUtf8(cd_info.psz_model);
}
cdio_destroy(cdio);
return QStringLiteral("CD (") + id + QLatin1Char(')');
return u"CD ("_s + id + QLatin1Char(')');
}
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) {
@ -142,7 +144,7 @@ bool CddaLister::Init() {
}
#ifdef Q_OS_MACOS
// 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;
}
#endif

View File

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

View File

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

View File

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

View File

@ -91,7 +91,7 @@ const int DeviceManager::kDeviceIconOverlaySize = 16;
DeviceManager::DeviceManager(Application *app, QObject *parent)
: SimpleTreeModel<DeviceInfo>(new DeviceInfo(this), parent),
app_(app),
not_connected_overlay_(IconLoader::Load(QStringLiteral("edit-delete"))) {
not_connected_overlay_(IconLoader::Load(u"edit-delete"_s)) {
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 (url.scheme() == "mtp"_L1 || url.scheme() == "gphoto2"_L1) {
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."),
QMessageBox::Abort, QMessageBox::Ignore) == QMessageBox::Abort)
return ret;

View File

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

View File

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

View File

@ -228,12 +228,12 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
for (QString uri : std::as_const(uris)) {
// gphoto2 gives invalid hostnames with []:, characters in
static const QRegularExpression regex_url_usb(QStringLiteral("//\\[usb:(\\d+),(\\d+)\\]"));
uri.replace(regex_url_usb, QStringLiteral("//usb-\\1-\\2"));
static const QRegularExpression regex_url_usb(u"//\\[usb:(\\d+),(\\d+)\\]"_s);
uri.replace(regex_url_usb, u"//usb-\\1-\\2"_s);
QUrl url;
static const QRegularExpression regex_url_schema(QStringLiteral("..+:.*"));
static const QRegularExpression regex_url_schema(u"..+:.*"_s);
if (uri.contains(regex_url_schema)) {
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.
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);
QRegularExpressionMatch re_match = device_re.match(unix_device);
if (re_match.hasMatch()) {
QUrlQuery url_query(url);
url_query.addQueryItem(QStringLiteral("busnum"), re_match.captured(1));
url_query.addQueryItem(QStringLiteral("devnum"), re_match.captured(2));
url_query.addQueryItem(u"busnum"_s, re_match.captured(1));
url_query.addQueryItem(u"devnum"_s, re_match.captured(2));
url.setQuery(url_query);
}

View File

@ -52,6 +52,7 @@ class DeviceLister;
class DeviceManager;
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)
: 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;
if (!job.cover_image_.isNull()) {
#ifdef Q_OS_LINUX
QString temp_path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QStringLiteral("/organize");
QString temp_path = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + u"/organize"_s;
#else
QString temp_path = QStandardPaths::writableLocation(QStandardPaths::TempLocation);
#endif
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()) {
const QImage &image = job.cover_image_;
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];
QString str = QString::asprintf("gphoto2://usb-%d-%d/", device.bus, device.address);
QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("vendor"), device.vendor);
url_query.addQueryItem(QStringLiteral("vendor_id"), QString::number(device.vendor_id));
url_query.addQueryItem(QStringLiteral("product"), device.product);
url_query.addQueryItem(QStringLiteral("product_id"), QString::number(device.product_id));
url_query.addQueryItem(QStringLiteral("quirks"), QString::number(device.quirks));
url_query.addQueryItem(u"vendor"_s, device.vendor);
url_query.addQueryItem(u"vendor_id"_s, QString::number(device.vendor_id));
url_query.addQueryItem(u"product"_s, device.product);
url_query.addQueryItem(u"product_id"_s, QString::number(device.product_id));
url_query.addQueryItem(u"quirks"_s, QString::number(device.quirks));
QUrl url(str);
url.setQuery(url_query);
return QList<QUrl>() << url;
}
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];
@ -762,7 +762,7 @@ QVariantList MacOsDeviceLister::DeviceIcons(const QString &serial) {
}
if (IsCDDevice(serial)) {
return QVariantList() << QStringLiteral("media-optical");
return QVariantList() << u"media-optical"_s;
}
QString bsd_name = current_devices_[serial];

View File

@ -33,11 +33,13 @@
#include "core/logging.h"
#include "mtpconnection.h"
using namespace Qt::Literals::StringLiterals;
MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent), device_(nullptr) {
QString hostname = url.host();
// 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 device_num = 0;
@ -49,9 +51,9 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
bus_location = re_match.captured(1).toUInt();
device_num = re_match.captured(2).toUInt();
}
else if (url_query.hasQueryItem(QStringLiteral("busnum"))) {
bus_location = url_query.queryItemValue(QStringLiteral("busnum")).toUInt();
device_num = url_query.queryItemValue(QStringLiteral("devnum")).toUInt();
else if (url_query.hasQueryItem(u"busnum"_s)) {
bus_location = url_query.queryItemValue(u"busnum"_s).toUInt();
device_num = url_query.queryItemValue(u"devnum"_s).toUInt();
}
else {
error_text_ = tr("Invalid MTP device: %1").arg(hostname);
@ -59,13 +61,13 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
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)));
raw_device->device_entry.vendor = url_query.queryItemValue(QStringLiteral("vendor")).toLatin1().data();
raw_device->device_entry.product = url_query.queryItemValue(QStringLiteral("product")).toLatin1().data();
raw_device->device_entry.vendor_id = url_query.queryItemValue(QStringLiteral("vendor_id")).toUShort();
raw_device->device_entry.product_id = url_query.queryItemValue(QStringLiteral("product_id")).toUShort();
raw_device->device_entry.device_flags = url_query.queryItemValue(QStringLiteral("quirks")).toUInt();
raw_device->device_entry.vendor = url_query.queryItemValue(u"vendor"_s).toLatin1().data();
raw_device->device_entry.product = url_query.queryItemValue(u"product"_s).toLatin1().data();
raw_device->device_entry.vendor_id = url_query.queryItemValue(u"vendor_id"_s).toUShort();
raw_device->device_entry.product_id = url_query.queryItemValue(u"product_id"_s).toUShort();
raw_device->device_entry.device_flags = url_query.queryItemValue(u"quirks"_s).toUInt();
raw_device->bus_location = bus_location;
raw_device->devnum = device_num;
@ -122,16 +124,16 @@ QString MtpConnection::ErrorString(const LIBMTP_error_number_t error_number) {
switch(error_number) {
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:
return QStringLiteral("There has been an error connecting.");
return u"There has been an error connecting."_s;
case LIBMTP_ERROR_MEMORY_ALLOCATION:
return QStringLiteral("Memory Allocation Error.");
return u"Memory Allocation Error."_s;
case LIBMTP_ERROR_GENERAL:
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:
return QStringLiteral("Successfully connected.");
return u"Successfully connected."_s;
}
}

View File

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

View File

@ -190,7 +190,7 @@ void Udisks2Lister::UpdateDeviceFreeSpace(const QString &id) {
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();
reply.waitForFinished();
@ -411,7 +411,7 @@ Udisks2Lister::PartitionData Udisks2Lister::ReadPartitionData(const QDBusObjectP
}
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(capacity)
.arg(uuid);

View File

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

View File

@ -40,6 +40,8 @@
#include "core/application.h"
#include "core/database.h"
using namespace Qt::Literals::StringLiterals;
Console::Console(Application *app, QWidget *parent) : QDialog(parent), ui_{}, app_(app) {
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);
QFont font(QStringLiteral("Monospace"));
QFont font(u"Monospace"_s);
font.setStyleHint(QFont::TypeWriter);
ui_.output->setFont(font);
@ -69,7 +71,7 @@ void Console::RunQuery() {
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()) {
QSqlRecord record = query.record();

View File

@ -147,7 +147,7 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
ui_->loading_label->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
ui_->fetch_tag->setEnabled(true);
#else
@ -235,8 +235,8 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
ui_->summary_art->installEventFilter(this);
// Add the next/previous buttons
previous_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-previous")), tr("Previous"), this);
next_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-next")), tr("Next"), this);
previous_button_ = new QPushButton(IconLoader::Load(u"go-previous"_s), tr("Previous"), 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(next_button_, QDialogButtonBox::ResetRole);
@ -315,7 +315,7 @@ void EditTagDialog::hideEvent(QHideEvent *e) {
void EditTagDialog::accept() {
// Show the loading indicator
if (!SetLoading(tr("Saving tracks") + QStringLiteral("..."))) return;
if (!SetLoading(tr("Saving tracks") + u"..."_s)) return;
SaveData();
@ -416,7 +416,7 @@ QList<EditTagDialog::Data> EditTagDialog::LoadData(const SongList &songs) {
void EditTagDialog::SetSongs(const SongList &s, const PlaylistItemPtrList &items) {
// Show the loading indicator
if (!SetLoading(tr("Loading tracks") + QStringLiteral("..."))) return;
if (!SetLoading(tr("Loading tracks") + u"..."_s)) return;
data_.clear();
playlist_items_ = items;
@ -790,12 +790,12 @@ void EditTagDialog::UpdateSummaryTab(const Song &song) {
cover_options.device_pixel_ratio = devicePixelRatioF();
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()));
SetText(ui_->samplerate, song.samplerate(), QStringLiteral("Hz"));
SetText(ui_->bitdepth, song.bitdepth(), QStringLiteral("Bit"));
SetText(ui_->samplerate, song.samplerate(), u"Hz"_s);
SetText(ui_->bitdepth, song.bitdepth(), u"Bit"_s);
SetText(ui_->bitrate, song.bitrate(), tr("kbps"));
ui_->ebur128_integrated_loudness->setText(song.Ebur128LoudnessLUFSToText());
ui_->ebur128_loudness_range->setText(song.Ebur128LoudnessRangeLUToText());

View File

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

View File

@ -31,7 +31,9 @@
#include "alsadevicefinder.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() {

View File

@ -28,7 +28,9 @@
#include "alsapcmdevicefinder.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() {

View File

@ -28,7 +28,9 @@
#include "enginedevice.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() {

View File

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

View File

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

View File

@ -94,9 +94,9 @@ EngineBase::Type EngineBase::TypeFromName(const QString &name) {
QString EngineBase::Name(const Type type) {
switch (type) {
case Type::GStreamer: return QStringLiteral("gstreamer");
case Type::GStreamer: return u"gstreamer"_s;
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) {
switch (type) {
case Type::GStreamer: return QStringLiteral("GStreamer");
case Type::GStreamer: return u"GStreamer"_s;
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();
if (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");
}

View File

@ -26,27 +26,27 @@ EngineDevice::EngineDevice() : card(0), device(0) {}
QString EngineDevice::GuessIconName() const {
if (description.contains("mcintosh"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("mcintosh");
return u"mcintosh"_s;
}
if (description.contains("electrocompaniet"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("electrocompaniet");
return u"electrocompaniet"_s;
}
if (description.contains("intel"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("intel");
return u"intel"_s;
}
if (description.contains("realtek"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("realtek");
return u"realtek"_s;
}
if (description.contains("nvidia"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("nvidia");
return u"nvidia"_s;
}
if (description.contains("headset"_L1, Qt::CaseInsensitive)) {
return QStringLiteral("headset");
return u"headset"_s;
}
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_) {
current_pipeline_->PrepareNextUrl(media_url, stream_url, gst_url, beginning_nanosec, force_stop_at_end ? end_nanosec : 0);
// 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())) {
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
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())) {
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) {
switch (result) {
case GST_DISCOVERER_URI_INVALID: return QStringLiteral("The URI is invalid");
case GST_DISCOVERER_TIMEOUT: return QStringLiteral("The discovery timed-out");
case GST_DISCOVERER_BUSY: return QStringLiteral("The discoverer was already discovering a file");
case GST_DISCOVERER_MISSING_PLUGINS: return QStringLiteral("Some plugins are missing for full discovery");
case GST_DISCOVERER_URI_INVALID: return u"The URI is invalid"_s;
case GST_DISCOVERER_TIMEOUT: return u"The discovery timed-out"_s;
case GST_DISCOVERER_BUSY: return u"The discoverer was already discovering a file"_s;
case GST_DISCOVERER_MISSING_PLUGINS: return u"Some plugins are missing for full discovery"_s;
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) {
case GST_STATE_VOID_PENDING:
return QStringLiteral("Pending");
return u"Pending"_s;
case GST_STATE_NULL:
return QStringLiteral("Null");
return u"Null"_s;
case GST_STATE_READY:
return QStringLiteral("Ready");
return u"Ready"_s;
case GST_STATE_PAUSED:
return QStringLiteral("Paused");
return u"Paused"_s;
case GST_STATE_PLAYING:
return QStringLiteral("Playing");
return u"Playing"_s;
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;
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) {
pipeline_ = CreateElement(QStringLiteral("playbin3"), QStringLiteral("pipeline"), nullptr, error);
pipeline_ = CreateElement(u"playbin3"_s, u"pipeline"_s, nullptr, error);
}
else {
pipeline_ = CreateElement(QStringLiteral("playbin"), QStringLiteral("pipeline"), nullptr, error);
pipeline_ = CreateElement(u"playbin"_s, u"pipeline"_s, nullptr, error);
}
if (!pipeline_) return false;
@ -602,31 +602,31 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// 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_) {
return false;
}
audioqueueconverter_ = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audioqueueconverter"), audiobin_, error);
audioqueueconverter_ = CreateElement(u"audioconvert"_s, u"audioqueueconverter"_s, audiobin_, error);
if (!audioqueueconverter_) {
return false;
}
GstElement *audiosinkconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audiosinkconverter"), audiobin_, error);
GstElement *audiosinkconverter = CreateElement(u"audioconvert"_s, u"audiosinkconverter"_s, audiobin_, error);
if (!audiosinkconverter) {
return false;
}
// Create the volume element if it's enabled.
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_) {
return false;
}
}
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_) {
return false;
}
@ -637,7 +637,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the stereo balancer elements if it's 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_) {
return false;
}
@ -647,11 +647,11 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the equalizer elements if it's 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_) {
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_) {
return false;
}
@ -701,15 +701,15 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
GstElement *rglimiter = nullptr;
GstElement *rgconverter = nullptr;
if (rg_enabled_) {
rgvolume = CreateElement(QStringLiteral("rgvolume"), QStringLiteral("rgvolume"), audiobin_, error);
rgvolume = CreateElement(u"rgvolume"_s, u"rgvolume"_s, audiobin_, error);
if (!rgvolume) {
return false;
}
rglimiter = CreateElement(QStringLiteral("rglimiter"), QStringLiteral("rglimiter"), audiobin_, error);
rglimiter = CreateElement(u"rglimiter"_s, u"rglimiter"_s, audiobin_, error);
if (!rglimiter) {
return false;
}
rgconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("rgconverter"), audiobin_, error);
rgconverter = CreateElement(u"audioconvert"_s, u"rgconverter"_s, audiobin_, error);
if (!rgconverter) {
return false;
}
@ -723,7 +723,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Create the EBU R 128 loudness normalization volume element if enabled.
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_) {
return false;
}
@ -735,7 +735,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
GstElement *bs2b = nullptr;
if (bs2b_enabled_) {
bs2b = CreateElement(QStringLiteral("bs2b"), QStringLiteral("bs2b"), audiobin_, error);
bs2b = CreateElement(u"bs2b"_s, u"bs2b"_s, audiobin_, error);
if (!bs2b) {
return false;
}
@ -781,7 +781,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
// Link all elements
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;
}
@ -1568,7 +1568,7 @@ void GstEnginePipeline::TagMessageReceived(GstMessage *msg) {
if (!engine_metadata.title.isEmpty() && engine_metadata.artist.isEmpty() && engine_metadata.album.isEmpty()) {
QStringList title_splitted;
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'~')) {
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
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() {

View File

@ -36,12 +36,14 @@
#include "enginedevice.h"
#include "core/logging.h"
using namespace Qt::Literals::StringLiterals;
#ifdef _MSC_VER
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);
#endif
MMDeviceFinder::MMDeviceFinder() : DeviceFinder(QStringLiteral("mmdevice"), { QStringLiteral("wasapisink") }) {}
MMDeviceFinder::MMDeviceFinder() : DeviceFinder(u"mmdevice"_s, { u"wasapisink"_s }) {}
EngineDeviceList MMDeviceFinder::ListDevices() {

View File

@ -33,7 +33,9 @@
#include "pulsedevicefinder.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() {

View File

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

View File

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

View File

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

View File

@ -38,6 +38,8 @@
#include "kglobalaccel.h"
#include "kglobalaccelcomponent.h"
using namespace Qt::Literals::StringLiterals;
namespace {
constexpr char kKdeService[] = "org.kde.kglobalaccel";
constexpr char kKdePath[] = "/kglobalaccel";
@ -102,7 +104,7 @@ void GlobalShortcutsBackendKDE::RegisterFinished(QDBusPendingCallWatcher *watche
watcher->deleteLater();
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();
}
return;

View File

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

View File

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

View File

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

View File

@ -29,6 +29,8 @@
#include "lyricssearchrequest.h"
#include "azlyricscomlyricsprovider.h"
using namespace Qt::Literals::StringLiterals;
namespace {
constexpr char kUrl[] = "https://www.azlyrics.com/lyrics/";
constexpr char kStartTag[] = "<div>";
@ -37,11 +39,11 @@ constexpr char kLyricsStart[] = "<!-- Usage of azlyrics.com content by any third
} // namespace
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) {
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());
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();
}

View File

@ -44,7 +44,7 @@ namespace {
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() {
@ -62,8 +62,8 @@ void ChartLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &r
Q_ASSERT(QThread::currentThread() != qApp->thread());
QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("artist"), QString::fromUtf8(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(QStringLiteral("song"), QString::fromUtf8(QUrl::toPercentEncoding(request.title)));
url_query.addQueryItem(u"artist"_s, QString::fromUtf8(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(u"song"_s, QString::fromUtf8(QUrl::toPercentEncoding(request.title)));
QUrl url(QString::fromUtf8(kUrlSearch));
url.setQuery(url_query);

View File

@ -39,7 +39,7 @@ constexpr char kLyricsStart[] = "<div id='inlyr'>";
} // namespace
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) {
@ -51,12 +51,12 @@ QString ElyricsNetLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_,&\\-\\(\\) ]"));
static const QRegularExpression regex_duplicate_whitespaces(QStringLiteral(" {2,}"));
static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_,&\\-\\(\\) ]"_s);
static const QRegularExpression regex_duplicate_whitespaces(u" {2,}"_s);
return Utilities::Transliterate(text)
.replace(regex_illegal_characters, QStringLiteral("_"))
.replace(regex_duplicate_whitespaces, QStringLiteral(" "))
.replace(regex_illegal_characters, u"_"_s)
.replace(regex_duplicate_whitespaces, u" "_s)
.simplified()
.replace(u' ', u'-')
.toLower();

View File

@ -68,7 +68,7 @@ constexpr char kClientIDB64[] = "RUNTNXU4U1VyMU1KUU5hdTZySEZteUxXY2hkanFiY3lfc2J
constexpr char kClientSecretB64[] = "VE9pMU9vUjNtTXZ3eFR3YVN0QVRyUjVoUlhVWDI1Ylp5X240eEt1M0ZkYlNwRG5JUnd0LXFFbHdGZkZkRWY2VzJ1S011UnQzM3c2Y3hqY0tVZ3NGN2c=";
} // 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;
s.beginGroup(kSettingsGroup);
@ -134,11 +134,11 @@ void GeniusLyricsProvider::Authenticate() {
}
QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("client_id"), 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(QStringLiteral("scope"), QStringLiteral("me"));
url_query.addQueryItem(QStringLiteral("state"), QString::fromLatin1(QUrl::toPercentEncoding(code_challenge_)));
url_query.addQueryItem(QStringLiteral("response_type"), QStringLiteral("code"));
url_query.addQueryItem(u"client_id"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64)))));
url_query.addQueryItem(u"redirect_uri"_s, QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString())));
url_query.addQueryItem(u"scope"_s, u"me"_s);
url_query.addQueryItem(u"state"_s, QString::fromLatin1(QUrl::toPercentEncoding(code_challenge_)));
url_query.addQueryItem(u"response_type"_s, u"code"_s);
QUrl url(QString::fromLatin1(kOAuthAuthorizeUrl));
url.setQuery(url_query);
@ -160,10 +160,10 @@ void GeniusLyricsProvider::RedirectArrived() {
QUrl url = server_->request_url();
if (url.isValid()) {
QUrlQuery url_query(url);
if (url_query.hasQueryItem(QStringLiteral("error"))) {
AuthError(QUrlQuery(url).queryItemValue(QStringLiteral("error")));
if (url_query.hasQueryItem(u"error"_s)) {
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));
redirect_url.setPort(server_->url().port());
RequestAccessToken(url, redirect_url);
@ -192,17 +192,17 @@ void GeniusLyricsProvider::RequestAccessToken(const QUrl &url, const QUrl &redir
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;
new_url_query.addQueryItem(QStringLiteral("code"), 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(QStringLiteral("client_secret"), 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(QStringLiteral("grant_type"), QStringLiteral("authorization_code"));
new_url_query.addQueryItem(QStringLiteral("response_type"), QStringLiteral("code"));
new_url_query.addQueryItem(u"code"_s, QString::fromLatin1(QUrl::toPercentEncoding(code)));
new_url_query.addQueryItem(u"client_id"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientIDB64)))));
new_url_query.addQueryItem(u"client_secret"_s, QString::fromLatin1(QUrl::toPercentEncoding(QString::fromLatin1(QByteArray::fromBase64(kClientSecretB64)))));
new_url_query.addQueryItem(u"redirect_uri"_s, QString::fromLatin1(QUrl::toPercentEncoding(redirect_url.toString())));
new_url_query.addQueryItem(u"grant_type"_s, u"authorization_code"_s);
new_url_query.addQueryItem(u"response_type"_s, u"code"_s);
QUrl new_url(QString::fromLatin1(kOAuthAccessTokenUrl));
QNetworkRequest req(new_url);
@ -281,23 +281,23 @@ void GeniusLyricsProvider::AccessTokenRequestFinished(QNetworkReply *reply) {
}
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;
}
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;
}
QJsonObject json_obj = json_doc.object();
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;
}
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;
}
@ -332,7 +332,7 @@ void GeniusLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &
}
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));
url.setQuery(url_query);
@ -364,18 +364,18 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
}
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);
return;
}
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);
return;
}
QJsonObject obj_meta = json_obj["meta"_L1].toObject();
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);
return;
}
@ -392,23 +392,23 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
}
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);
return;
}
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);
return;
}
QJsonObject obj_response = json_obj["response"_L1].toObject();
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);
return;
}
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);
return;
}
@ -427,7 +427,7 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id)
}
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()) {
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;
}
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();
if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server."));
Error(u"Empty reply received from server."_s);
EndSearch(search, lyric);
return;
}
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()) {
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()) {

View File

@ -69,7 +69,7 @@ void HtmlLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &re
QUrl url(Url(request));
QNetworkRequest req(url);
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);
replies_ << reply;
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()) {
lyrics.append(u'\n');
}
static const QRegularExpression regex_html_tag_a(QStringLiteral("<a [^>]*>[^<]*</a>"));
static const QRegularExpression regex_html_tag_script(QStringLiteral("<script>[^>]*</script>"));
static const QRegularExpression regex_html_tag_div(QStringLiteral("<div [^>]*>×</div>"));
static const QRegularExpression regex_html_tag_br(QStringLiteral("<br[^>]*>"));
static const QRegularExpression regex_html_tag_p_close(QStringLiteral("</p>"));
static const QRegularExpression regex_html_tags(QStringLiteral("<[^>]*>"));
static const QRegularExpression regex_html_tag_a(u"<a [^>]*>[^<]*</a>"_s);
static const QRegularExpression regex_html_tag_script(u"<script>[^>]*</script>"_s);
static const QRegularExpression regex_html_tag_div(u"<div [^>]*>×</div>"_s);
static const QRegularExpression regex_html_tag_br(u"<br[^>]*>"_s);
static const QRegularExpression regex_html_tag_p_close(u"</p>"_s);
static const QRegularExpression regex_html_tags(u"<[^>]*>"_s);
lyrics.append(content.mid(start_lyrics_idx, end_lyrics_idx - start_lyrics_idx)
.remove(u'\r')
.remove(u'\n')
.remove(regex_html_tag_a)
.remove(regex_html_tag_script)
.remove(regex_html_tag_div)
.replace(regex_html_tag_br, QStringLiteral("\n"))
.replace(regex_html_tag_p_close, QStringLiteral("\n\n"))
.replace(regex_html_tag_br, u"\n"_s)
.replace(regex_html_tag_p_close, u"\n\n"_s)
.remove(regex_html_tags)
.trimmed());
}

View File

@ -40,7 +40,7 @@ constexpr char kLyricsStart[] = "<div id=\"letra-cnt\">";
} // namespace
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) {
@ -52,12 +52,12 @@ QString LetrasLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_,&\\-\\(\\) ]"));
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}"));
static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_,&\\-\\(\\) ]"_s);
static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
return QString::fromLatin1(QUrl::toPercentEncoding(Utilities::Transliterate(text)
.replace(regex_illegal_characters, QStringLiteral("_"))
.replace(regex_multiple_whitespaces, QStringLiteral(" "))
.replace(regex_illegal_characters, u"_"_s)
.replace(regex_multiple_whitespaces, u" "_s)
.simplified()
.replace(u' ', u'-')
.toLower()

View File

@ -44,7 +44,7 @@ namespace {
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() {
@ -62,8 +62,8 @@ void LoloLyricsProvider::StartSearch(const int id, const LyricsSearchRequest &re
Q_ASSERT(QThread::currentThread() != qApp->thread());
QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("artist"), QString::fromLatin1(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(QStringLiteral("track"), QString::fromLatin1(QUrl::toPercentEncoding(request.title)));
url_query.addQueryItem(u"artist"_s, QString::fromLatin1(QUrl::toPercentEncoding(request.artist)));
url_query.addQueryItem(u"track"_s, QString::fromLatin1(QUrl::toPercentEncoding(request.title)));
QUrl url(QString::fromLatin1(kUrlSearch));
url.setQuery(url_query);

View File

@ -45,7 +45,7 @@ constexpr char kLyricsStart[] = "<script id=\"__NEXT_DATA__\" type=\"application
constexpr char kLyricsEnd[] = "</script>";
} // 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() {
@ -68,12 +68,12 @@ QString LyricFindLyricsProvider::StringFixup(const QString &text) {
Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9_\\- ]"));
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}"));
static const QRegularExpression regex_illegal_characters(u"[^\\w0-9_\\- ]"_s);
static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
return Utilities::Transliterate(text)
.remove(regex_illegal_characters)
.replace(regex_multiple_whitespaces, QStringLiteral(" "))
.replace(regex_multiple_whitespaces, u" "_s)
.simplified()
.replace(u' ', u'-')
.toLower();
@ -87,7 +87,7 @@ void LyricFindLyricsProvider::StartSearch(const int id, const LyricsSearchReques
const QUrl url = Url(request);
QNetworkRequest req(url);
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);
replies_ << reply;
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();
if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server."));
Error(u"Empty reply received from server."_s);
return;
}
const QString content = QString::fromUtf8(data);
if (content.isEmpty()) {
Error(QStringLiteral("Empty reply received from server."));
Error(u"Empty reply received from server."_s);
return;
}
@ -145,7 +145,7 @@ void LyricFindLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int
}
}
if (content_json.isEmpty()) {
Error(QStringLiteral("Could not parse HTML reply."));
Error(u"Could not parse HTML reply."_s);
return;
}
@ -154,36 +154,36 @@ void LyricFindLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int
return;
}
if (!obj.contains("props"_L1) || !obj["props"_L1].isObject()) {
Error(QStringLiteral("Missing props."));
Error(u"Missing props."_s);
return;
}
obj = obj["props"_L1].toObject();
if (!obj.contains("pageProps"_L1) || !obj["pageProps"_L1].isObject()) {
Error(QStringLiteral("Missing pageProps."));
Error(u"Missing pageProps."_s);
return;
}
obj = obj["pageProps"_L1].toObject();
if (!obj.contains("songData"_L1) || !obj["songData"_L1].isObject()) {
Error(QStringLiteral("Missing songData."));
Error(u"Missing songData."_s);
return;
}
obj = obj["songData"_L1].toObject();
if (!obj.contains("response"_L1) || !obj["response"_L1].isObject()) {
Error(QStringLiteral("Missing response."));
Error(u"Missing response."_s);
return;
}
//const QJsonObject obj_response = obj[QLatin1String("response")].toObject();
if (!obj.contains("track"_L1) || !obj["track"_L1].isObject()) {
Error(QStringLiteral("Missing track."));
Error(u"Missing track."_s);
return;
}
const QJsonObject obj_track = obj["track"_L1].toObject();
if (!obj_track.contains("title"_L1) ||
!obj_track.contains("lyrics"_L1)) {
Error(QStringLiteral("Missing title or lyrics."));
Error(u"Missing title or lyrics."_s);
return;
}

View File

@ -48,7 +48,7 @@
using namespace Qt::Literals::StringLiterals;
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() {
@ -82,12 +82,12 @@ void MusixmatchLyricsProvider::StartSearch(const int id, const LyricsSearchReque
bool MusixmatchLyricsProvider::SendSearchRequest(LyricsSearchContextPtr search) {
QUrlQuery url_query;
url_query.addQueryItem(QStringLiteral("apikey"), QString::fromLatin1(QByteArray::fromBase64(kApiKey)));
url_query.addQueryItem(QStringLiteral("q_artist"), QString::fromLatin1(QUrl::toPercentEncoding(search->request.artist)));
url_query.addQueryItem(QStringLiteral("q_track"), QString::fromLatin1(QUrl::toPercentEncoding(search->request.title)));
url_query.addQueryItem(QStringLiteral("f_has_lyrics"), QStringLiteral("1"));
url_query.addQueryItem(u"apikey"_s, QString::fromLatin1(QByteArray::fromBase64(kApiKey)));
url_query.addQueryItem(u"q_artist"_s, QString::fromLatin1(QUrl::toPercentEncoding(search->request.artist)));
url_query.addQueryItem(u"q_track"_s, QString::fromLatin1(QUrl::toPercentEncoding(search->request.title)));
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);
QNetworkRequest req(url);
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
@ -142,24 +142,24 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
}
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);
return;
}
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);
return;
}
QJsonObject obj_message = json_obj["message"_L1].toObject();
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);
return;
}
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);
return;
}
@ -174,24 +174,24 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
}
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);
return;
}
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);
return;
}
QJsonObject obj_body = obj_message["body"_L1].toObject();
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);
return;
}
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);
return;
}
@ -212,7 +212,7 @@ void MusixmatchLyricsProvider::HandleSearchReply(QNetworkReply *reply, LyricsSea
!obj_track.contains("album_name"_L1) ||
!obj_track.contains("track_name"_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;
}
@ -299,7 +299,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
const QByteArray data = reply->readAll();
if (data.isEmpty()) {
Error(QStringLiteral("Empty reply received from server."));
Error(u"Empty reply received from server."_s);
EndSearch(search, url);
return;
}
@ -322,7 +322,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
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.
EndSearch(search, url);
return;
@ -335,21 +335,21 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
}
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);
return;
}
obj_data = obj_data["props"_L1].toObject();
if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) {
Error(QStringLiteral("Json props is missing pageProps."), obj_data);
Error(u"Json props is missing pageProps."_s, obj_data);
EndSearch(search, url);
return;
}
obj_data = obj_data["pageProps"_L1].toObject();
if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) {
Error(QStringLiteral("Json pageProps is missing data."), obj_data);
Error(u"Json pageProps is missing data."_s, obj_data);
EndSearch(search, url);
return;
}
@ -357,21 +357,21 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
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);
return;
}
obj_data = obj_data["trackInfo"_L1].toObject();
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);
return;
}
obj_data = obj_data["data"_L1].toObject();
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);
return;
}
@ -379,7 +379,7 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
const QJsonObject obj_track = obj_data["track"_L1].toObject();
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);
return;
}
@ -402,14 +402,14 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea
}
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);
return;
}
QJsonObject obj_lyrics = obj_data["lyrics"_L1].toObject();
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);
return;
}

View File

@ -43,7 +43,7 @@ namespace {
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() {

View File

@ -38,7 +38,7 @@ constexpr char kLyricsStart[] = "<p id=\"songLyricsDiv\"[^>]+>";
} // namespace
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) {
@ -50,17 +50,17 @@ QString SongLyricsComLyricsProvider::StringFixup(QString text) {
Q_ASSERT(QThread::currentThread() != qApp->thread());
static const QRegularExpression regex_illegal_characters(QStringLiteral("[^\\w0-9\\- ]"));
static const QRegularExpression regex_multiple_whitespaces(QStringLiteral(" {2,}"));
static const QRegularExpression regex_multiple_dashes(QStringLiteral("(-)\\1+"));
static const QRegularExpression regex_illegal_characters(u"[^\\w0-9\\- ]"_s);
static const QRegularExpression regex_multiple_whitespaces(u" {2,}"_s);
static const QRegularExpression regex_multiple_dashes(u"(-)\\1+"_s);
return text.replace(u'/', u'-')
.replace(u'\'', u'-')
.remove(regex_illegal_characters)
.replace(regex_multiple_whitespaces, QStringLiteral(" "))
.replace(regex_multiple_whitespaces, u" "_s)
.simplified()
.replace(u' ', u'-')
.replace(regex_multiple_dashes, QStringLiteral("-"))
.replace(regex_multiple_dashes, u"-"_s)
.toLower();
}

View File

@ -51,6 +51,7 @@
#include "settings/moodbarsettingspage.h"
using namespace std::chrono_literals;
using namespace Qt::Literals::StringLiterals;
#ifdef Q_OS_WIN32
# include <windows.h>
@ -63,7 +64,7 @@ MoodbarLoader::MoodbarLoader(Application *app, QObject *parent)
kMaxActiveRequests(qMax(1, QThread::idealThreadCount() / 2)),
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
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 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");
GstElement *decodebin = CreateElement(QStringLiteral("uridecodebin"));
convert_element_ = CreateElement(QStringLiteral("audioconvert"));
GstElement *spectrum = CreateElement(QStringLiteral("strawberry-fastspectrum"));
GstElement *fakesink = CreateElement(QStringLiteral("fakesink"));
GstElement *decodebin = CreateElement(u"uridecodebin"_s);
convert_element_ = CreateElement(u"audioconvert"_s);
GstElement *spectrum = CreateElement(u"strawberry-fastspectrum"_s);
GstElement *fakesink = CreateElement(u"fakesink"_s);
if (!decodebin || !convert_element_ || !spectrum || !fakesink) {
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':');
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)) {
data_dirs.append(QStringLiteral("/usr/share"));
data_dirs.append(u"/usr/share"_s);
}
for (const QString &data_dir : std::as_const(data_dirs)) {
@ -152,7 +152,7 @@ Mpris2::Mpris2(Application *app, QObject *parent)
}
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) {
last_metadata_ = QVariantMap();
EmitNotification(QStringLiteral("Metadata"));
EmitNotification(u"Metadata"_s);
}
EmitNotification(QStringLiteral("CanPlay"));
EmitNotification(QStringLiteral("CanPause"));
EmitNotification(QStringLiteral("PlaybackStatus"), PlaybackStatus(newState));
if (newState == EngineBase::State::Playing) EmitNotification(QStringLiteral("CanSeek"), CanSeek(newState));
EmitNotification(u"CanPlay"_s);
EmitNotification(u"CanPause"_s);
EmitNotification(u"PlaybackStatus"_s, PlaybackStatus(newState));
if (newState == EngineBase::State::Playing) EmitNotification(u"CanSeek"_s, CanSeek(newState));
}
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() {
EmitNotification(QStringLiteral("LoopStatus"));
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext());
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious());
EmitNotification(u"LoopStatus"_s);
EmitNotification(u"CanGoNext"_s, CanGoNext());
EmitNotification(u"CanGoPrevious"_s, CanGoPrevious());
}
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) {
QDBusMessage msg = QDBusMessage::createSignal(QLatin1String(kMprisObjectPath), QLatin1String(kFreedesktopPath), QStringLiteral("PropertiesChanged"));
QDBusMessage msg = QDBusMessage::createSignal(QLatin1String(kMprisObjectPath), QLatin1String(kFreedesktopPath), u"PropertiesChanged"_s);
QVariantMap map;
map.insert(name, value);
QVariantList args = QVariantList() << mprisEntity << map << QStringList();
@ -246,45 +246,45 @@ QString Mpris2::DesktopEntry() const { return QGuiApplication::desktopFileName()
QStringList Mpris2::SupportedUriSchemes() const {
static QStringList res = QStringList() << QStringLiteral("file")
<< QStringLiteral("http")
<< QStringLiteral("cdda")
<< QStringLiteral("smb")
<< QStringLiteral("sftp");
static QStringList res = QStringList() << u"file"_s
<< u"http"_s
<< u"cdda"_s
<< u"smb"_s
<< u"sftp"_s;
return res;
}
QStringList Mpris2::SupportedMimeTypes() const {
static QStringList res = QStringList() << QStringLiteral("x-content/audio-player")
<< QStringLiteral("application/ogg")
<< QStringLiteral("application/x-ogg")
<< QStringLiteral("application/x-ogm-audio")
<< QStringLiteral("audio/flac")
<< QStringLiteral("audio/ogg")
<< QStringLiteral("audio/vorbis")
<< QStringLiteral("audio/aac")
<< QStringLiteral("audio/mp4")
<< QStringLiteral("audio/mpeg")
<< QStringLiteral("audio/mpegurl")
<< QStringLiteral("audio/vnd.rn-realaudio")
<< QStringLiteral("audio/x-flac")
<< QStringLiteral("audio/x-oggflac")
<< QStringLiteral("audio/x-vorbis")
<< QStringLiteral("audio/x-vorbis+ogg")
<< QStringLiteral("audio/x-speex")
<< QStringLiteral("audio/x-wav")
<< QStringLiteral("audio/x-wavpack")
<< QStringLiteral("audio/x-ape")
<< QStringLiteral("audio/x-mp3")
<< QStringLiteral("audio/x-mpeg")
<< QStringLiteral("audio/x-mpegurl")
<< QStringLiteral("audio/x-ms-wma")
<< QStringLiteral("audio/x-musepack")
<< QStringLiteral("audio/x-pn-realaudio")
<< QStringLiteral("audio/x-scpls")
<< QStringLiteral("video/x-ms-asf");
static QStringList res = QStringList() << u"x-content/audio-player"_s
<< u"application/ogg"_s
<< u"application/x-ogg"_s
<< u"application/x-ogm-audio"_s
<< u"audio/flac"_s
<< u"audio/ogg"_s
<< u"audio/vorbis"_s
<< u"audio/aac"_s
<< u"audio/mp4"_s
<< u"audio/mpeg"_s
<< u"audio/mpegurl"_s
<< u"audio/vnd.rn-realaudio"_s
<< u"audio/x-flac"_s
<< u"audio/x-oggflac"_s
<< u"audio/x-vorbis"_s
<< u"audio/x-vorbis+ogg"_s
<< u"audio/x-speex"_s
<< u"audio/x-wav"_s
<< u"audio/x-wavpack"_s
<< u"audio/x-ape"_s
<< u"audio/x-mp3"_s
<< u"audio/x-mpeg"_s
<< u"audio/x-mpegurl"_s
<< u"audio/x-ms-wma"_s
<< u"audio/x-musepack"_s
<< u"audio/x-pn-realaudio"_s
<< u"audio/x-scpls"_s
<< u"video/x-ms-asf"_s;
return res;
@ -301,9 +301,9 @@ QString Mpris2::PlaybackStatus() const {
QString Mpris2::PlaybackStatus(EngineBase::State state) const {
switch (state) {
case EngineBase::State::Playing: return QStringLiteral("Playing");
case EngineBase::State::Paused: return QStringLiteral("Paused");
default: return QStringLiteral("Stopped");
case EngineBase::State::Playing: return u"Playing"_s;
case EngineBase::State::Paused: return u"Paused"_s;
default: return u"Stopped"_s;
}
}
@ -311,14 +311,14 @@ QString Mpris2::PlaybackStatus(EngineBase::State state) const {
QString Mpris2::LoopStatus() const {
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()) {
case PlaylistSequence::RepeatMode::Album:
case PlaylistSequence::RepeatMode::Playlist: return QStringLiteral("Playlist");
case PlaylistSequence::RepeatMode::Track: return QStringLiteral("Track");
default: return QStringLiteral("None");
case PlaylistSequence::RepeatMode::Playlist: return u"Playlist"_s;
case PlaylistSequence::RepeatMode::Track: return u"Track"_s;
default: return u"None"_s;
}
}
@ -390,11 +390,11 @@ QDBusObjectPath Mpris2::current_track_id() const {
void Mpris2::CurrentSongChanged(const Song &song) {
AlbumCoverLoaded(song);
EmitNotification(QStringLiteral("CanPlay"));
EmitNotification(QStringLiteral("CanPause"));
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext());
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious());
EmitNotification(QStringLiteral("CanSeek"), CanSeek());
EmitNotification(u"CanPlay"_s);
EmitNotification(u"CanPause"_s);
EmitNotification(u"CanGoNext"_s, CanGoNext());
EmitNotification(u"CanGoPrevious"_s, CanGoPrevious());
EmitNotification(u"CanSeek"_s, CanSeek());
}
@ -405,7 +405,7 @@ void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &re
song.ToXesam(&last_metadata_);
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;
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()) {
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(QStringLiteral("bitrate"), song.bitrate(), &last_metadata_);
AddMetadata(u"year"_s, song.year(), &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();
}
QStringList Mpris2::Orderings() const { return QStringList() << QStringLiteral("User"); }
QStringList Mpris2::Orderings() const { return QStringList() << u"User"_s; }
namespace {
@ -650,7 +650,7 @@ void Mpris2::PlaylistChangedSlot(Playlist *playlist) {
void Mpris2::PlaylistCollectionChanged(Playlist *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

View File

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

View File

@ -75,6 +75,7 @@
#include "transcoder/transcoder.h"
using std::make_unique;
using namespace Qt::Literals::StringLiterals;
namespace {
constexpr char kSettingsGroup[] = "OrganizeDialog";
@ -94,35 +95,35 @@ OrganizeDialog::OrganizeDialog(SharedPtr<TaskManager> task_manager, SharedPtr<Co
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);
button_save->setIcon(IconLoader::Load(QStringLiteral("document-save")));
ui_->button_box->button(QDialogButtonBox::RestoreDefaults)->setIcon(IconLoader::Load(QStringLiteral("edit-undo")));
button_save->setIcon(IconLoader::Load(u"document-save"_s));
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);
ui_->aftercopying->setItemIcon(1, IconLoader::Load(QStringLiteral("edit-delete")));
ui_->aftercopying->setItemIcon(1, IconLoader::Load(u"edit-delete"_s));
// Valid tags
QMap<QString, QString> tags;
tags[tr("Title")] = QStringLiteral("title");
tags[tr("Album")] = QStringLiteral("album");
tags[tr("Artist")] = QStringLiteral("artist");
tags[tr("Artist's initial")] = QStringLiteral("artistinitial");
tags[tr("Album artist")] = QStringLiteral("albumartist");
tags[tr("Composer")] = QStringLiteral("composer");
tags[tr("Performer")] = QStringLiteral("performer");
tags[tr("Grouping")] = QStringLiteral("grouping");
tags[tr("Track")] = QStringLiteral("track");
tags[tr("Disc")] = QStringLiteral("disc");
tags[tr("Year")] = QStringLiteral("year");
tags[tr("Original year")] = QStringLiteral("originalyear");
tags[tr("Genre")] = QStringLiteral("genre");
tags[tr("Comment")] = QStringLiteral("comment");
tags[tr("Length")] = QStringLiteral("length");
tags[tr("Bitrate", "Refers to bitrate in file organize dialog.")] = QStringLiteral("bitrate");
tags[tr("Sample rate")] = QStringLiteral("samplerate");
tags[tr("Bit depth")] = QStringLiteral("bitdepth");
tags[tr("File extension")] = QStringLiteral("extension");
tags[tr("Title")] = u"title"_s;
tags[tr("Album")] = u"album"_s;
tags[tr("Artist")] = u"artist"_s;
tags[tr("Artist's initial")] = u"artistinitial"_s;
tags[tr("Album artist")] = u"albumartist"_s;
tags[tr("Composer")] = u"composer"_s;
tags[tr("Performer")] = u"performer"_s;
tags[tr("Grouping")] = u"grouping"_s;
tags[tr("Track")] = u"track"_s;
tags[tr("Disc")] = u"disc"_s;
tags[tr("Year")] = u"year"_s;
tags[tr("Original year")] = u"originalyear"_s;
tags[tr("Genre")] = u"genre"_s;
tags[tr("Comment")] = u"comment"_s;
tags[tr("Length")] = u"length"_s;
tags[tr("Bitrate", "Refers to bitrate in file organize dialog.")] = u"bitrate"_s;
tags[tr("Sample rate")] = u"samplerate"_s;
tags[tr("Bit depth")] = u"bitdepth"_s;
tags[tr("File extension")] = u"extension"_s;
// Naming scheme input field
new OrganizeSyntaxHighlighter(ui_->naming);
@ -462,7 +463,7 @@ Organize::NewSongInfoList OrganizeDialog::ComputeNewSongsFilenames(const SongLis
if (result.unique_filename) {
if (filenames.contains(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 {
filenames.insert(result.filename, 1);
@ -541,7 +542,7 @@ void OrganizeDialog::UpdatePreviews() {
if (has_local_destination) {
for (const Organize::NewSongInfo &song_info : std::as_const(new_songs_info_)) {
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);
if (!song_info.unique_filename_) {
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 (show_art_) {
ShowMessage(summary, message, QStringLiteral("notification-audio-play"), image);
ShowMessage(summary, message, u"notification-audio-play"_s, image);
}
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

View File

@ -47,6 +47,7 @@
#include "notification.h"
using std::make_unique;
using namespace Qt::Literals::StringLiterals;
QDBusArgument &operator<<(QDBusArgument &arg, const QImage &image) {
@ -117,7 +118,7 @@ OSDDBus::~OSDDBus() = default;
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()) {
qLog(Warning) << "Error connecting to notifications service.";
}
@ -145,22 +146,22 @@ void OSDDBus::ShowMessageNative(const QString &summary, const QString &message,
QVariantMap hints;
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();
if (!image.isNull()) {
if (version_ >= QVersionNumber(1, 2)) {
hints[QStringLiteral("image-data")] = QVariant(image);
hints[u"image-data"_s] = QVariant(image);
}
else if (version_ >= QVersionNumber(1, 1)) {
hints[QStringLiteral("image_data")] = QVariant(image);
hints[u"image_data"_s] = QVariant(image);
}
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;
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