diff --git a/ext/libstrawberry-common/core/logging.cpp b/ext/libstrawberry-common/core/logging.cpp index 26ee8531e..35a95fb26 100644 --- a/ext/libstrawberry-common/core/logging.cpp +++ b/ext/libstrawberry-common/core/logging.cpp @@ -61,6 +61,8 @@ #include "logging.h" +using namespace Qt::StringLiterals; + namespace logging { static Level sDefaultLevel = Level_Debug; @@ -159,7 +161,7 @@ static void MessageHandler(QtMsgType type, const QMessageLogContext&, const QStr break; } - const QStringList lines = message.split(QLatin1Char('\n')); + const QStringList lines = message.split(u'\n'); for (const QString &line : lines) { BufferedDebug d = CreateLogger(level, QStringLiteral("unknown"), -1, nullptr); d << line.toLocal8Bit().constData(); @@ -196,9 +198,9 @@ void SetLevels(const QString &levels) { if (!sClassLevels) return; - const QStringList items = levels.split(QLatin1Char(',')); + const QStringList items = levels.split(u','); for (const QString &item : items) { - const QStringList class_level = item.split(QLatin1Char(':')); + const QStringList class_level = item.split(u':'); QString class_name; bool ok = false; @@ -216,7 +218,7 @@ void SetLevels(const QString &levels) { continue; } - if (class_name.isEmpty() || class_name == QLatin1Char('*')) { + if (class_name.isEmpty() || class_name == u'*') { sDefaultLevel = static_cast(level); } else { @@ -230,9 +232,9 @@ static QString ParsePrettyFunction(const char *pretty_function) { // Get the class name out of the function name. QString class_name = QLatin1String(pretty_function); - const qint64 paren = class_name.indexOf(QLatin1Char('(')); + const qint64 paren = class_name.indexOf(u'('); if (paren != -1) { - const qint64 colons = class_name.lastIndexOf(QLatin1String("::"), paren); + const qint64 colons = class_name.lastIndexOf("::"_L1, paren); if (colons != -1) { class_name = class_name.left(colons); } @@ -241,7 +243,7 @@ static QString ParsePrettyFunction(const char *pretty_function) { } } - const qint64 space = class_name.lastIndexOf(QLatin1Char(' ')); + const qint64 space = class_name.lastIndexOf(u' '); if (space != -1) { class_name = class_name.mid(space + 1); } diff --git a/ext/libstrawberry-tagreader/tagreaderbase.cpp b/ext/libstrawberry-tagreader/tagreaderbase.cpp index ddf86d4e0..23722e401 100644 --- a/ext/libstrawberry-tagreader/tagreaderbase.cpp +++ b/ext/libstrawberry-tagreader/tagreaderbase.cpp @@ -31,6 +31,8 @@ #include "core/logging.h" #include "tagreaderbase.h" +using namespace Qt::StringLiterals; + TagReaderBase::TagReaderBase() = default; TagReaderBase::~TagReaderBase() = default; @@ -142,11 +144,11 @@ TagReaderBase::Cover TagReaderBase::LoadCoverFromRequest(const QString &song_fil if (cover_mime_type.isEmpty()) { cover_mime_type = QMimeDatabase().mimeTypeForData(cover_data).name(); } - if (cover_mime_type == QLatin1String("image/jpeg")) { + if (cover_mime_type == "image/jpeg"_L1) { qLog(Debug) << "Using cover from JPEG data for" << song_filename; return Cover(cover_data, cover_mime_type); } - if (cover_mime_type == QLatin1String("image/png")) { + if (cover_mime_type == "image/png"_L1) { qLog(Debug) << "Using cover from PNG data for" << song_filename; return Cover(cover_data, cover_mime_type); } diff --git a/ext/libstrawberry-tagreader/tagreadergme.cpp b/ext/libstrawberry-tagreader/tagreadergme.cpp index 606556aba..9a972481e 100644 --- a/ext/libstrawberry-tagreader/tagreadergme.cpp +++ b/ext/libstrawberry-tagreader/tagreadergme.cpp @@ -34,19 +34,21 @@ #include "tagreaderbase.h" #include "tagreadertaglib.h" +using namespace Qt::StringLiterals; + #undef TStringToQString #undef QStringToTString bool GME::IsSupportedFormat(const QFileInfo &fileinfo) { - return fileinfo.exists() && (fileinfo.completeSuffix().endsWith(QLatin1String("spc"), Qt::CaseInsensitive) || fileinfo.completeSuffix().endsWith(QLatin1String("vgm")), Qt::CaseInsensitive); + return fileinfo.exists() && (fileinfo.completeSuffix().endsWith("spc"_L1, Qt::CaseInsensitive) || fileinfo.completeSuffix().endsWith("vgm"_L1), Qt::CaseInsensitive); } TagReaderBase::Result GME::ReadFile(const QFileInfo &fileinfo, spb::tagreader::SongMetadata *song) { - if (fileinfo.completeSuffix().endsWith(QLatin1String("spc")), Qt::CaseInsensitive) { + if (fileinfo.completeSuffix().endsWith("spc"_L1), Qt::CaseInsensitive) { return SPC::Read(fileinfo, song); } - if (fileinfo.completeSuffix().endsWith(QLatin1String("vgm"), Qt::CaseInsensitive)) { + if (fileinfo.completeSuffix().endsWith("vgm"_L1, Qt::CaseInsensitive)) { return VGM::Read(fileinfo, song); } @@ -239,7 +241,7 @@ TagReaderBase::Result GME::VGM::Read(const QFileInfo &fileinfo, spb::tagreader:: QTextStream fileTagStream(gd3Data, QIODevice::ReadOnly); // Stored as 16 bit UTF string, two bytes per letter. fileTagStream.setEncoding(QStringConverter::Utf16); - QStringList strings = fileTagStream.readLine(0).split(QLatin1Char('\0')); + QStringList strings = fileTagStream.readLine(0).split(u'\0'); if (strings.count() < 10) { return TagReaderBase::Result::ErrorCode::FileParseError; } diff --git a/ext/libstrawberry-tagreader/tagreadertaglib.cpp b/ext/libstrawberry-tagreader/tagreadertaglib.cpp index a80a6600c..464ea883e 100644 --- a/ext/libstrawberry-tagreader/tagreadertaglib.cpp +++ b/ext/libstrawberry-tagreader/tagreadertaglib.cpp @@ -97,6 +97,8 @@ #include "core/messagehandler.h" #include "utilities/timeconstants.h" +using namespace Qt::StringLiterals; + #undef TStringToQString #undef QStringToTString @@ -443,7 +445,7 @@ TagReaderBase::Result TagReaderTagLib::ReadFile(const QString &filename, spb::ta } if (!disc.isEmpty()) { - const qint64 i = disc.indexOf(QLatin1Char('/')); + const qint64 i = disc.indexOf(u'/'); if (i != -1) { // disc.right( i ).toInt() is total number of discs, we don't use this at the moment song->set_disc(disc.left(i).toInt()); @@ -457,7 +459,7 @@ TagReaderBase::Result TagReaderTagLib::ReadFile(const QString &filename, spb::ta // well, it wasn't set, but if the artist is VA assume it's a compilation const QString albumartist = QString::fromStdString(song->albumartist()); const QString artist = QString::fromStdString(song->artist()); - if (artist.compare(QLatin1String("various artists")) == 0 || albumartist.compare(QLatin1String("various artists")) == 0) { + if (artist.compare("various artists"_L1) == 0 || albumartist.compare("various artists"_L1) == 0) { song->set_compilation(true); } } @@ -529,7 +531,7 @@ void TagReaderTagLib::ParseID3v2Tags(TagLib::ID3v2::Tag *tag, QString *disc, QSt for (uint i = 0; i < map[kID3v2_CommercialFrame].size(); ++i) { const TagLib::ID3v2::CommentsFrame *frame = dynamic_cast(map[kID3v2_CommercialFrame][i]); - if (frame && TagLibStringToQString(frame->description()) != QLatin1String("iTunNORM")) { + if (frame && TagLibStringToQString(frame->description()) != "iTunNORM"_L1) { AssignTagLibStringToStdString(frame->text(), song->mutable_comment()); break; } @@ -937,7 +939,7 @@ TagReaderBase::Result TagReaderTagLib::WriteFile(const QString &filename, const save_tags_options << QStringLiteral("embedded cover"); } - qLog(Debug) << "Saving" << save_tags_options.join(QLatin1String(", ")) << "to" << filename; + qLog(Debug) << "Saving" << save_tags_options.join(", "_L1) << "to" << filename; const Cover cover = LoadCoverFromRequest(filename, request); @@ -1501,10 +1503,10 @@ void TagReaderTagLib::SetEmbeddedArt(TagLib::MP4::File *aac_file, TagLib::MP4::T } else { TagLib::MP4::CoverArt::Format cover_format = TagLib::MP4::CoverArt::Format::JPEG; - if (mime_type == QLatin1String("image/jpeg")) { + if (mime_type == "image/jpeg"_L1) { cover_format = TagLib::MP4::CoverArt::Format::JPEG; } - else if (mime_type == QLatin1String("image/png")) { + else if (mime_type == "image/png"_L1) { cover_format = TagLib::MP4::CoverArt::Format::PNG; } else { diff --git a/src/collection/collectionbackend.cpp b/src/collection/collectionbackend.cpp index 694839ce6..f5cae681d 100644 --- a/src/collection/collectionbackend.cpp +++ b/src/collection/collectionbackend.cpp @@ -59,6 +59,8 @@ #include "collectionquery.h" #include "collectiontask.h" +using namespace Qt::StringLiterals; + CollectionBackend::CollectionBackend(QObject *parent) : CollectionBackendInterface(parent), db_(nullptr), @@ -946,14 +948,14 @@ QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOpt CollectionQuery query(db, songs_table_, opt); query.SetColumnSpec(QStringLiteral("DISTINCT albumartist")); query.AddCompilationRequirement(false); - query.AddWhere(QStringLiteral("album"), QLatin1String(""), QStringLiteral("!=")); + query.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!=")); // Albums with no 'albumartist' (extract 'artist'): CollectionQuery query2(db, songs_table_, opt); query2.SetColumnSpec(QStringLiteral("DISTINCT artist")); query2.AddCompilationRequirement(false); - query2.AddWhere(QStringLiteral("album"), QLatin1String(""), QStringLiteral("!=")); - query2.AddWhere(QStringLiteral("albumartist"), QLatin1String(""), QStringLiteral("=")); + query2.AddWhere(QStringLiteral("album"), ""_L1, QStringLiteral("!=")); + query2.AddWhere(QStringLiteral("albumartist"), ""_L1, QStringLiteral("=")); if (!query.Exec()) { ReportErrors(query); @@ -1107,7 +1109,7 @@ SongList CollectionBackend::GetSongsByForeignId(const QStringList &ids, const QS QMutexLocker l(db_->Mutex()); QSqlDatabase db(db_->Connect()); - QString in = ids.join(QLatin1Char(',')); + QString in = ids.join(u','); SqlQuery q(db); q.prepare(QStringLiteral("SELECT %3.ROWID, %2, %3.%4 FROM %3, %1 WHERE %3.%4 IN (in) AND %1.ROWID = %3.ROWID AND unavailable = 0").arg(songs_table_, Song::kColumnSpec, table, column, in)); @@ -1138,7 +1140,7 @@ Song CollectionBackend::GetSongById(const int id, QSqlDatabase &db) { SongList CollectionBackend::GetSongsById(const QStringList &ids, QSqlDatabase &db) { - QString in = ids.join(QLatin1Char(',')); + QString in = ids.join(u','); SqlQuery q(db); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE ROWID IN (%3)").arg(Song::kRowIdColumnSpec, songs_table_, in)); @@ -1276,7 +1278,7 @@ SongList CollectionBackend::GetSongsBySongId(const QStringList &song_ids, QSqlDa for (const QString &song_id : song_ids) { song_ids2 << QLatin1Char('\'') + song_id + QLatin1Char('\''); } - QString in = song_ids2.join(QLatin1Char(',')); + QString in = song_ids2.join(u','); SqlQuery q(db); q.prepare(QStringLiteral("SELECT %1 FROM %2 WHERE SONG_ID IN (%3)").arg(Song::kRowIdColumnSpec, songs_table_, in)); @@ -1524,7 +1526,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist, key.append(album_info.album_artist); } if (!album_info.album.isEmpty()) { - if (!key.isEmpty()) key.append(QLatin1Char('-')); + if (!key.isEmpty()) key.append(u'-'); key.append(album_info.album); } if (!filetype.isEmpty()) { @@ -1640,7 +1642,7 @@ 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) : QLatin1String("")); + 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); if (!q.Exec()) { @@ -1773,7 +1775,7 @@ void CollectionBackend::ForceCompilation(const QString &album, const QStringList // Update the songs QString sql(QStringLiteral("UPDATE %1 SET compilation_on = :compilation_on, compilation_off = :compilation_off, compilation_effective = ((compilation OR compilation_detected OR :compilation_on) AND NOT :compilation_off) + 0 WHERE album = :album AND unavailable = 0").arg(songs_table_)); - if (!artist.isEmpty()) sql += QLatin1String(" AND artist = :artist"); + if (!artist.isEmpty()) sql += " AND artist = :artist"_L1; SqlQuery q(db); q.prepare(sql); @@ -1890,7 +1892,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(QLatin1Char(','))); + q.BindValue(QStringLiteral(":ids"), id_str_list.join(u',')); if (!q.Exec()) { db_->ReportErrors(q); return false; @@ -2068,7 +2070,7 @@ void CollectionBackend::UpdateSongsRating(const QList &id_list, const float for (int i : id_list) { id_str_list << QString::number(i); } - QString ids = id_str_list.join(QLatin1Char(',')); + 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); diff --git a/src/collection/collectionfilterwidget.cpp b/src/collection/collectionfilterwidget.cpp index 3a9ab596e..6efc45fa6 100644 --- a/src/collection/collectionfilterwidget.cpp +++ b/src/collection/collectionfilterwidget.cpp @@ -61,6 +61,8 @@ #include "settings/collectionsettingspage.h" #include "settings/appearancesettingspage.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kFilterDelay = 500; // msec } @@ -296,7 +298,7 @@ QActionGroup *CollectionFilterWidget::CreateGroupByActions(const QString &saved_ if (version == 1) { QStringList saved = s.childKeys(); for (int i = 0; i < saved.size(); ++i) { - if (saved.at(i) == QLatin1String("version")) continue; + if (saved.at(i) == "version"_L1) continue; QByteArray bytes = s.value(saved.at(i)).toByteArray(); QDataStream ds(&bytes, QIODevice::ReadOnly); CollectionModel::Grouping g; @@ -307,7 +309,7 @@ QActionGroup *CollectionFilterWidget::CreateGroupByActions(const QString &saved_ else { QStringList saved = s.childKeys(); for (int i = 0; i < saved.size(); ++i) { - if (saved.at(i) == QLatin1String("version")) continue; + if (saved.at(i) == "version"_L1) continue; s.remove(saved.at(i)); } } diff --git a/src/collection/collectionmodel.cpp b/src/collection/collectionmodel.cpp index a3cd67522..8226c7fcc 100644 --- a/src/collection/collectionmodel.cpp +++ b/src/collection/collectionmodel.cpp @@ -77,6 +77,7 @@ #include "settings/collectionsettingspage.h" using namespace std::chrono_literals; +using namespace Qt::StringLiterals; const int CollectionModel::kPrettyCoverSize = 32; namespace { @@ -119,7 +120,7 @@ CollectionModel::CollectionModel(SharedPtr backend, Applicati if (app_ && !sIconCache) { sIconCache = new QNetworkDiskCache(this); - sIconCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1Char('/') + QLatin1String(kPixmapDiskCacheDir)); + sIconCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + u'/' + QLatin1String(kPixmapDiskCacheDir)); QObject::connect(app_, &Application::ClearPixmapDiskCache, this, &CollectionModel::ClearDiskCache); } @@ -585,7 +586,7 @@ void CollectionModel::AddSongsInternal(const SongList &songs) { container_key = container->container_key; } else { - if (!container_key.isEmpty()) container_key.append(QLatin1Char('-')); + if (!container_key.isEmpty()) container_key.append(u'-'); container_key.append(ContainerKey(group_by, song, has_unique_album_identifier)); if (container_nodes_[i].contains(container_key)) { container = container_nodes_[i][container_key]; @@ -758,7 +759,7 @@ void CollectionModel::CreateDividerItem(const QString ÷r_key, const QStrin CollectionItem *divider = new CollectionItem(CollectionItem::Type::Divider, root_); divider->container_key = divider_key; divider->display_text = display_text; - divider->sort_text = divider_key + QLatin1String(" "); + divider->sort_text = divider_key + " "_L1; divider_nodes_[divider_key] = divider; endInsertRows(); @@ -802,7 +803,7 @@ CollectionItem *CollectionModel::CreateCompilationArtistNode(CollectionItem *par if (parent != root_ && !parent->container_key.isEmpty()) parent->compilation_artist_node_->container_key.append(parent->container_key); parent->compilation_artist_node_->container_key.append(QLatin1String(kVariousArtists)); parent->compilation_artist_node_->display_text = QLatin1String(kVariousArtists); - parent->compilation_artist_node_->sort_text = QLatin1String(" various"); + parent->compilation_artist_node_->sort_text = " various"_L1; parent->compilation_artist_node_->container_level = parent->container_level + 1; endInsertRows(); @@ -1056,14 +1057,14 @@ QString CollectionModel::TextOrUnknown(const QString &text) { QString CollectionModel::PrettyYearAlbum(const int year, const QString &album) { if (year <= 0) return TextOrUnknown(album); - return QString::number(year) + QLatin1String(" - ") + TextOrUnknown(album); + return QString::number(year) + " - "_L1 + TextOrUnknown(album); } QString CollectionModel::PrettyAlbumDisc(const QString &album, const int disc) { if (disc <= 0 || Song::AlbumContainsDisc(album)) return TextOrUnknown(album); - return TextOrUnknown(album) + QLatin1String(" - (Disc ") + QString::number(disc) + QLatin1String(")"); + return TextOrUnknown(album) + " - (Disc "_L1 + QString::number(disc) + ")"_L1; } @@ -1072,9 +1073,9 @@ QString CollectionModel::PrettyYearAlbumDisc(const int year, const QString &albu QString str; if (year <= 0) str = TextOrUnknown(album); - else str = QString::number(year) + QLatin1String(" - ") + TextOrUnknown(album); + else str = QString::number(year) + " - "_L1 + TextOrUnknown(album); - if (!Song::AlbumContainsDisc(album) && disc > 0) str += QLatin1String(" - (Disc ") + QString::number(disc) + QLatin1String(")"); + if (!Song::AlbumContainsDisc(album) && disc > 0) str += " - (Disc "_L1 + QString::number(disc) + ")"_L1; return str; @@ -1082,7 +1083,7 @@ QString CollectionModel::PrettyYearAlbumDisc(const int year, const QString &albu QString CollectionModel::PrettyDisc(const int disc) { - return QLatin1String("Disc ") + QString::number(std::max(1, disc)); + return "Disc "_L1 + QString::number(std::max(1, disc)); } @@ -1159,7 +1160,7 @@ QString CollectionModel::SortText(const GroupBy group_by, const int container_le QString CollectionModel::SortText(QString text) { if (text.isEmpty()) { - text = QLatin1String(" unknown"); + text = " unknown"_L1; } else { text = text.toLower(); @@ -1179,7 +1180,7 @@ QString CollectionModel::SortTextForArtist(QString artist, const bool skip_artic for (const auto &i : Song::kArticles) { if (artist.startsWith(i)) { qint64 ilen = i.length(); - artist = artist.right(artist.length() - ilen) + QLatin1String(", ") + i.left(ilen - 1); + artist = artist.right(artist.length() - ilen) + ", "_L1 + i.left(ilen - 1); break; } } @@ -1190,7 +1191,6 @@ QString CollectionModel::SortTextForArtist(QString artist, const bool skip_artic } QString CollectionModel::SortTextForNumber(const int number) { - return QStringLiteral("%1").arg(number, 4, 10, QLatin1Char('0')); } @@ -1318,7 +1318,7 @@ QString CollectionModel::ContainerKey(const GroupBy group_by, const Song &song, // Make sure we distinguish albums by different artists if the parent group by is not including artist. if (IsAlbumGroupBy(group_by) && !has_unique_album_identifier && !song.is_compilation() && !song.effective_albumartist().isEmpty()) { - key.prepend(QLatin1Char('-')); + key.prepend(u'-'); key.prepend(TextOrUnknown(song.effective_albumartist())); has_unique_album_identifier = true; } @@ -1348,7 +1348,7 @@ QString CollectionModel::DividerKey(const GroupBy group_by, const Song &song, co case GroupBy::FileType: { QChar c = sort_text[0]; if (c.isDigit()) return QStringLiteral("0"); - if (c == QLatin1Char(' ')) return QString(); + if (c == u' ') return QString(); if (c.decompositionTag() != QChar::NoDecomposition) { QString decomposition = c.decomposition(); return QChar(decomposition[0]); @@ -1397,25 +1397,25 @@ QString CollectionModel::DividerDisplayText(const GroupBy group_by, const QStrin case GroupBy::Genre: case GroupBy::FileType: case GroupBy::Format: - if (key == QLatin1String("0")) return QStringLiteral("0-9"); + if (key == "0"_L1) return QStringLiteral("0-9"); return key.toUpper(); case GroupBy::YearAlbum: case GroupBy::YearAlbumDisc: case GroupBy::OriginalYearAlbum: case GroupBy::OriginalYearAlbumDisc: - if (key == QLatin1String("0000")) return tr("Unknown"); + if (key == "0000"_L1) return tr("Unknown"); return key.toUpper(); case GroupBy::Year: case GroupBy::OriginalYear: - if (key == QLatin1String("0000")) return tr("Unknown"); + if (key == "0000"_L1) return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s case GroupBy::Samplerate: case GroupBy::Bitdepth: case GroupBy::Bitrate: - if (key == QLatin1String("000")) return tr("Unknown"); + if (key == "000"_L1) return tr("Unknown"); return QString::number(key.toInt()); // To remove leading 0s case GroupBy::None: diff --git a/src/collection/collectionquery.cpp b/src/collection/collectionquery.cpp index 6a993ba64..642caadd5 100644 --- a/src/collection/collectionquery.cpp +++ b/src/collection/collectionquery.cpp @@ -38,6 +38,8 @@ #include "collectionquery.h" #include "collectionfilteroptions.h" +using namespace Qt::StringLiterals; + CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_table, const CollectionFilterOptions &filter_options) : SqlQuery(db), songs_table_(songs_table), @@ -63,7 +65,7 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta void CollectionQuery::AddWhere(const QString &column, const QVariant &value, const QString &op) { // Ignore 'literal' for IN - if (op.compare(QLatin1String("IN"), Qt::CaseInsensitive) == 0) { + if (op.compare("IN"_L1, Qt::CaseInsensitive) == 0) { const QStringList values = value.toStringList(); QStringList final_values; final_values.reserve(values.count()); @@ -72,7 +74,7 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con bound_values_ << single_value; } - where_clauses_ << QStringLiteral("%1 IN (%2)").arg(column, final_values.join(QLatin1Char(','))); + where_clauses_ << QStringLiteral("%1 IN (%2)").arg(column, final_values.join(u',')); } else { // Do integers inline - sqlite seems to get confused when you pass integers to bound parameters @@ -81,7 +83,7 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con } else if (value.metaType().id() == QMetaType::QString && value.toString().isNull()) { where_clauses_ << QStringLiteral("%1 %2 ?").arg(column, op); - bound_values_ << QLatin1String(""); + bound_values_ << ""_L1; } else { where_clauses_ << QStringLiteral("%1 %2 ?").arg(column, op); @@ -115,13 +117,13 @@ bool CollectionQuery::Exec() { where_clauses << QStringLiteral("unavailable = 0"); } - if (!where_clauses.isEmpty()) sql += QLatin1String(" WHERE ") + where_clauses.join(QLatin1String(" AND ")); + if (!where_clauses.isEmpty()) sql += " WHERE "_L1 + where_clauses.join(" AND "_L1); - if (!order_by_.isEmpty()) sql += QLatin1String(" ORDER BY ") + order_by_; + if (!order_by_.isEmpty()) sql += " ORDER BY "_L1 + order_by_; - if (limit_ != -1) sql += QLatin1String(" LIMIT ") + QString::number(limit_); + if (limit_ != -1) sql += " LIMIT "_L1 + QString::number(limit_); - sql.replace(QLatin1String("%songs_table"), songs_table_); + sql.replace("%songs_table"_L1, songs_table_); if (!QSqlQuery::prepare(sql)) return false; diff --git a/src/collection/collectionwatcher.cpp b/src/collection/collectionwatcher.cpp index cdef7c01c..082f415e4 100644 --- a/src/collection/collectionwatcher.cpp +++ b/src/collection/collectionwatcher.cpp @@ -71,6 +71,7 @@ #endif using namespace std::chrono_literals; +using namespace Qt::StringLiterals; QStringList CollectionWatcher::sValidImages = QStringList() << QStringLiteral("jpg") << QStringLiteral("png") << QStringLiteral("gif") << QStringLiteral("jpeg"); @@ -360,7 +361,7 @@ SongList CollectionWatcher::ScanTransaction::FindSongsInSubdirectory(const QStri if (cached_songs_dirty_) { const SongList songs = watcher_->backend_->FindSongsInDirectory(dir_); for (const Song &song : songs) { - const QString p = song.url().toLocalFile().section(QLatin1Char('/'), 0, -2); + const QString p = song.url().toLocalFile().section(u'/', 0, -2); cached_songs_.insert(p, song); } cached_songs_dirty_ = false; @@ -379,7 +380,7 @@ bool CollectionWatcher::ScanTransaction::HasSongsWithMissingFingerprint(const QS if (cached_songs_missing_fingerprint_dirty_) { const SongList songs = watcher_->backend_->SongsWithMissingFingerprint(dir_); for (const Song &song : songs) { - const QString p = song.url().toLocalFile().section(QLatin1Char('/'), 0, -2); + const QString p = song.url().toLocalFile().section(u'/', 0, -2); cached_songs_missing_fingerprint_.insert(p, song); } cached_songs_missing_fingerprint_dirty_ = false; @@ -394,7 +395,7 @@ bool CollectionWatcher::ScanTransaction::HasSongsWithMissingLoudnessCharacterist if (cached_songs_missing_loudness_characteristics_dirty_) { const SongList songs = watcher_->backend_->SongsWithMissingLoudnessCharacteristics(dir_); for (const Song &song : songs) { - const QString p = song.url().toLocalFile().section(QLatin1Char('/'), 0, -2); + const QString p = song.url().toLocalFile().section(u'/', 0, -2); cached_songs_missing_loudness_characteristics_.insert(p, song); } cached_songs_missing_loudness_characteristics_dirty_ = false; @@ -559,7 +560,7 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const CollectionSu else { QString ext_part(ExtensionPart(child)); QString dir_part(DirectoryPart(child)); - if (Song::kRejectedExtensions.contains(child_info.suffix(), Qt::CaseInsensitive) || child_info.baseName() == QLatin1String("qt_temp")) { + if (Song::kRejectedExtensions.contains(child_info.suffix(), Qt::CaseInsensitive) || child_info.baseName() == "qt_temp"_L1) { t->AddToProgress(1); } else if (sValidImages.contains(ext_part)) { @@ -661,7 +662,7 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const CollectionSu Chromaprinter chromaprinter(file); fingerprint = chromaprinter.CreateFingerprint(); if (fingerprint.isEmpty()) { - fingerprint = QLatin1String("NONE"); + fingerprint = "NONE"_L1; } } #endif @@ -688,11 +689,11 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const CollectionSu Chromaprinter chromaprinter(file); fingerprint = chromaprinter.CreateFingerprint(); if (fingerprint.isEmpty()) { - fingerprint = QLatin1String("NONE"); + fingerprint = "NONE"_L1; } } #endif - if (song_tracking_ && !fingerprint.isEmpty() && fingerprint != QLatin1String("NONE") && FindSongsByFingerprint(file, fingerprint, &matching_songs)) { + if (song_tracking_ && !fingerprint.isEmpty() && fingerprint != "NONE"_L1 && FindSongsByFingerprint(file, fingerprint, &matching_songs)) { // The song is in the database and still on disk. // Check the mtime to see if it's been changed since it was added. @@ -985,7 +986,7 @@ void CollectionWatcher::AddChangedSong(const QString &file, const Song &matching qLog(Debug) << "Song" << file << "unchanged."; } else { - qLog(Debug) << "Song" << file << changes.join(QLatin1String(", ")) << "changed."; + qLog(Debug) << "Song" << file << changes.join(", "_L1) << "changed."; } } @@ -1360,7 +1361,7 @@ void CollectionWatcher::RescanSongs(const SongList &songs) { QStringList scanned_paths; for (const Song &song : songs) { if (stop_or_abort_requested()) break; - const QString song_path = song.url().toLocalFile().section(QLatin1Char('/'), 0, -2); + const QString song_path = song.url().toLocalFile().section(u'/', 0, -2); if (scanned_paths.contains(song_path)) continue; ScanTransaction transaction(this, song.directory_id(), false, true, mark_songs_unavailable_); const CollectionSubdirectoryList subdirs = transaction.GetAllSubdirs(); diff --git a/src/collection/collectionwatcher.h b/src/collection/collectionwatcher.h index fe2c202b4..0ab0bc7ce 100644 --- a/src/collection/collectionwatcher.h +++ b/src/collection/collectionwatcher.h @@ -47,6 +47,8 @@ class FileSystemWatcherInterface; class TaskManager; class CueParser; +using namespace Qt::Literals::StringLiterals; + class CollectionWatcher : public QObject { Q_OBJECT @@ -259,14 +261,14 @@ class CollectionWatcher : public QObject { }; inline QString CollectionWatcher::NoExtensionPart(const QString &fileName) { - return fileName.contains(QLatin1Char('.')) ? fileName.section(QLatin1Char('.'), 0, -2) : QLatin1String(""); + return fileName.contains(u'.') ? fileName.section(u'.', 0, -2) : ""_L1; } // Thanks Amarok inline QString CollectionWatcher::ExtensionPart(const QString &fileName) { - return fileName.contains(QLatin1Char('.')) ? fileName.mid(fileName.lastIndexOf(QLatin1Char('.')) + 1).toLower() : QLatin1String(""); + return fileName.contains(u'.') ? fileName.mid(fileName.lastIndexOf(u'.') + 1).toLower() : ""_L1; } inline QString CollectionWatcher::DirectoryPart(const QString &fileName) { - return fileName.section(QLatin1Char('/'), 0, -2); + return fileName.section(u'/', 0, -2); } #endif // COLLECTIONWATCHER_H diff --git a/src/collection/savedgroupingmanager.cpp b/src/collection/savedgroupingmanager.cpp index 72e006345..5ed2bb85d 100644 --- a/src/collection/savedgroupingmanager.cpp +++ b/src/collection/savedgroupingmanager.cpp @@ -44,6 +44,8 @@ #include "savedgroupingmanager.h" #include "ui_savedgroupingmanager.h" +using namespace Qt::StringLiterals; + const char *SavedGroupingManager::kSavedGroupingsSettingsGroup = "SavedGroupings"; SavedGroupingManager::SavedGroupingManager(const QString &saved_groupings_settings_group, QWidget *parent) @@ -165,7 +167,7 @@ void SavedGroupingManager::UpdateModel() { if (version == 1) { QStringList saved = s.childKeys(); for (int i = 0; i < saved.size(); ++i) { - if (saved.at(i) == QLatin1String("version")) continue; + if (saved.at(i) == "version"_L1) continue; QByteArray bytes = s.value(saved.at(i)).toByteArray(); QDataStream ds(&bytes, QIODevice::ReadOnly); CollectionModel::Grouping g; @@ -183,7 +185,7 @@ void SavedGroupingManager::UpdateModel() { else { QStringList saved = s.childKeys(); for (int i = 0; i < saved.size(); ++i) { - if (saved.at(i) == QLatin1String("version")) continue; + if (saved.at(i) == "version"_L1) continue; s.remove(saved.at(i)); } } diff --git a/src/context/contextview.cpp b/src/context/contextview.cpp index f60b1628a..9cabf582d 100644 --- a/src/context/contextview.cpp +++ b/src/context/contextview.cpp @@ -67,6 +67,8 @@ #include "contextview.h" #include "contextalbum.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kWidgetSpacing = 50; } @@ -410,15 +412,15 @@ void ContextView::NoSong() { QString html; if (collectionview_->TotalSongs() == 1) html += tr("%1 song").arg(collectionview_->TotalSongs()); else html += tr("%1 songs").arg(collectionview_->TotalSongs()); - html += QLatin1String("
"); + html += "
"_L1; if (collectionview_->TotalArtists() == 1) html += tr("%1 artist").arg(collectionview_->TotalArtists()); else html += tr("%1 artists").arg(collectionview_->TotalArtists()); - html += QLatin1String("
"); + html += "
"_L1; if (collectionview_->TotalAlbums() == 1) html += tr("%1 album").arg(collectionview_->TotalAlbums()); else html += tr("%1 albums").arg(collectionview_->TotalAlbums()); - html += QLatin1String("
"); + html += "
"_L1; label_stop_summary_->setFont(font_normal_); label_stop_summary_->setText(html); @@ -636,10 +638,10 @@ void ContextView::UpdateLyrics(const quint64 id, const QString &provider, const if (static_cast(id) != lyrics_id_) return; if (lyrics.isEmpty()) { - lyrics_ = QLatin1String("No lyrics found.\n"); + lyrics_ = "No lyrics found.\n"_L1; } else { - lyrics_ = lyrics + QLatin1String("\n\n(Lyrics from ") + provider + QLatin1String(")\n"); + lyrics_ = lyrics + "\n\n(Lyrics from "_L1 + provider + ")\n"_L1; } lyrics_id_ = -1; diff --git a/src/core/database.cpp b/src/core/database.cpp index 1287f7101..fd95cc092 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -49,6 +49,8 @@ #include "sqlquery.h" #include "scopedtransaction.h" +using namespace Qt::StringLiterals; + const int Database::kSchemaVersion = 20; namespace { @@ -136,7 +138,7 @@ QSqlDatabase Database::Connect() { //qLog(Debug) << "Opened database with connection id" << connection_id; if (injected_database_name_.isNull()) { - db.setDatabaseName(directory_ + QLatin1Char('/') + QLatin1String(kDatabaseFilename)); + db.setDatabaseName(directory_ + u'/' + QLatin1String(kDatabaseFilename)); } else { db.setDatabaseName(injected_database_name_); @@ -352,7 +354,7 @@ void Database::UrlEncodeFilenameColumn(const QString &table, QSqlDatabase &db) { const int rowid = select.value(0).toInt(); const QString filename = select.value(1).toString(); - if (filename.isEmpty() || filename.contains(QLatin1String("://"))) { + if (filename.isEmpty() || filename.contains("://"_L1)) { continue; } @@ -376,8 +378,8 @@ void Database::ExecSchemaCommandsFromFile(QSqlDatabase &db, const QString &filen } QByteArray data = schema_file.readAll(); QString schema = QString::fromUtf8(data); - if (schema.contains(QLatin1String("\r\n"))) { - schema = schema.replace(QLatin1String("\r\n"), QLatin1String("\n")); + if (schema.contains("\r\n"_L1)) { + schema = schema.replace("\r\n"_L1, "\n"_L1); } schema_file.close(); ExecSchemaCommands(db, schema, schema_version, in_transaction); @@ -414,7 +416,7 @@ void Database::ExecSongTablesCommands(QSqlDatabase &db, const QStringList &song_ if (command.contains(QLatin1String(kMagicAllSongsTables))) { for (const QString &table : song_tables) { // Another horrible hack: device songs tables don't have matching _fts tables, so if this command tries to touch one, ignore it. - if (table.startsWith(QLatin1String("device_")) && command.contains(QLatin1String(kMagicAllSongsTables) + QLatin1String("_fts"))) { + if (table.startsWith("device_"_L1) && command.contains(QLatin1String(kMagicAllSongsTables) + "_fts"_L1)) { continue; } @@ -450,7 +452,7 @@ QStringList Database::SongsTables(QSqlDatabase &db, const int schema_version) { // look for the tables in the main db const QStringList &tables = db.tables(); for (const QString &table : tables) { - if (table == QLatin1String("songs") || table.endsWith(QLatin1String("_songs"))) ret << table; + if (table == "songs"_L1 || table.endsWith("_songs"_L1)) ret << table; } // look for the tables in attached dbs @@ -502,7 +504,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) { QString message = q.value(0).toString(); // If no errors are found, a single row with the value "ok" is returned - if (message == QLatin1String("ok")) { + if (message == "ok"_L1) { ok = true; break; } diff --git a/src/core/iconmapper.h b/src/core/iconmapper.h index 6b4848a56..e37305e36 100644 --- a/src/core/iconmapper.h +++ b/src/core/iconmapper.h @@ -27,6 +27,8 @@ namespace IconMapper { +using namespace Qt::Literals::StringLiterals; + struct IconProperties { explicit IconProperties() : min_size(0), max_size(0), allow_system_icon(true) {} IconProperties(const QStringList &_names, const int _min_size = 16, const int _max_size = 512, const bool _allow_system_icon = true) : names(_names), min_size(_min_size), max_size(_max_size), allow_system_icon(_allow_system_icon) {} @@ -100,7 +102,7 @@ static const QMap iconmapper_ = { // clazy:exclude=non { QStringLiteral("media-eject"), { {}} }, { QStringLiteral("media-playback-pause"), { {QStringLiteral("media-pause")}} }, { QStringLiteral("media-playlist-repeat"), { {}} }, - { QStringLiteral("media-playlist-shuffle"), { {QLatin1String("")}} }, + { QStringLiteral("media-playlist-shuffle"), { {""_L1}} }, { QStringLiteral("media-playback-start"), { {QStringLiteral("media-play"), QStringLiteral("media-playback-playing")}} }, { QStringLiteral("media-seek-backward"), { {}} }, { QStringLiteral("media-seek-forward"), { {}} }, diff --git a/src/core/localredirectserver.cpp b/src/core/localredirectserver.cpp index b6a96978e..abc16e517 100644 --- a/src/core/localredirectserver.cpp +++ b/src/core/localredirectserver.cpp @@ -39,6 +39,8 @@ #include #include +using namespace Qt::StringLiterals; + LocalRedirectServer::LocalRedirectServer(QObject *parent) : QTcpServer(parent), port_(0), @@ -86,7 +88,7 @@ void LocalRedirectServer::incomingConnection(qintptr socket_descriptor) { if (!tcp_socket->setSocketDescriptor(socket_descriptor)) { delete tcp_socket; close(); - error_ = QLatin1String("Unable to set socket descriptor"); + error_ = "Unable to set socket descriptor"_L1; Q_EMIT Finished(); return; } @@ -151,7 +153,7 @@ void LocalRedirectServer::WriteTemplate() const { .pixmap(16) .toImage() .save(&image_buffer, "PNG"); - page_data.replace(QLatin1String("@IMAGE_DATA@"), QString::fromUtf8(image_buffer.data().toBase64())); + page_data.replace("@IMAGE_DATA@"_L1, QString::fromUtf8(image_buffer.data().toBase64())); image_buffer.close(); } diff --git a/src/core/macfslistener.mm b/src/core/macfslistener.mm index 72b6a2132..e90465a26 100644 --- a/src/core/macfslistener.mm +++ b/src/core/macfslistener.mm @@ -32,6 +32,8 @@ #include "core/logging.h" #include "scoped_nsobject.h" +using namespace Qt::Literals::StringLiterals; + MacFSListener::MacFSListener(QObject *parent) : FileSystemWatcherInterface(parent), run_loop_(nullptr), @@ -57,7 +59,7 @@ void MacFSListener::EventStreamCallback(ConstFSEventStreamRef stream, void *user for (size_t i = 0; i < num_events; ++i) { QString path = QString::fromUtf8(paths[i]); qLog(Debug) << "Something changed at:" << path; - while (path.endsWith(QLatin1Char('/'))) { + while (path.endsWith(u'/')) { path.chop(1); } Q_EMIT me->PathChanged(path); diff --git a/src/core/mainwindow.cpp b/src/core/mainwindow.cpp index 314d50e05..5206165d8 100644 --- a/src/core/mainwindow.cpp +++ b/src/core/mainwindow.cpp @@ -223,6 +223,7 @@ using std::make_unique; using std::make_shared; using namespace std::chrono_literals; +using namespace Qt::StringLiterals; const char *MainWindow::kSettingsGroup = "MainWindow"; const char *MainWindow::kAllFilesFilterSpec = QT_TR_NOOP("All Files (*)"); @@ -1268,7 +1269,7 @@ void MainWindow::ReloadAllSettings() { void MainWindow::RefreshStyleSheet() { QString contents(styleSheet()); - setStyleSheet(QLatin1String("")); + setStyleSheet(""_L1); setStyleSheet(contents); } @@ -2344,7 +2345,7 @@ void MainWindow::ShowInCollection() { } QString search; if (!songs.isEmpty()) { - search = QLatin1String("artist:") + songs.first().artist() + QLatin1String(" album:") + songs.first().album(); + search = "artist:"_L1 + songs.first().artist() + " album:"_L1 + songs.first().album(); } collection_view_->filter_widget()->ShowInCollection(search); @@ -2437,9 +2438,9 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { break; case CommandlineOptions::PlayerAction::ResizeWindow:{ - if (options.window_size().contains(QLatin1Char('x')) && options.window_size().length() >= 4) { - QString str_w = options.window_size().left(options.window_size().indexOf(QLatin1Char('x'))); - QString str_h = options.window_size().right(options.window_size().length() - options.window_size().indexOf(QLatin1Char('x')) - 1); + if (options.window_size().contains(u'x') && options.window_size().length() >= 4) { + QString str_w = options.window_size().left(options.window_size().indexOf(u'x')); + QString str_h = options.window_size().right(options.window_size().length() - options.window_size().indexOf(u'x') - 1); bool w_ok = false; bool h_ok = false; int w = str_w.toInt(&w_ok); @@ -2479,7 +2480,7 @@ void MainWindow::CommandlineOptionsReceived(const CommandlineOptions &options) { #ifdef HAVE_TIDAL const QList urls = options.urls(); for (const QUrl &url : urls) { - if (url.scheme() == QLatin1String("tidal") && url.host() == QLatin1String("login")) { + if (url.scheme() == "tidal"_L1 && url.host() == "login"_L1) { Q_EMIT AuthorizationUrlReceived(url); return; } @@ -2557,7 +2558,7 @@ bool MainWindow::LoadUrl(const QString &url) { return true; } #ifdef HAVE_TIDAL - if (url.startsWith(QLatin1String("tidal://login"))) { + if (url.startsWith("tidal://login"_L1)) { Q_EMIT AuthorizationUrlReceived(QUrl(url)); return true; } @@ -2927,9 +2928,9 @@ void MainWindow::CheckFullRescanRevisions() { 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("
    "); for (const QString &reason : reasons) { - message += QLatin1String("
  • ") + reason + QLatin1String("
  • "); + message += "
  • "_L1 + reason + "
  • "_L1; } - message += QLatin1String("
") + tr("Would you like to run a full rescan right now?"); + message += ""_L1 + tr("Would you like to run a full rescan right now?"); if (QMessageBox::question(this, tr("Collection rescan notice"), message, QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { app_->collection()->FullScan(); } diff --git a/src/core/mpris2.cpp b/src/core/mpris2.cpp index 80ef6bce4..55cb3ec7d 100644 --- a/src/core/mpris2.cpp +++ b/src/core/mpris2.cpp @@ -64,6 +64,8 @@ #include "mpris2_root.h" #include "mpris2_tracklist.h" +using namespace Qt::StringLiterals; + QDBusArgument &operator<<(QDBusArgument &arg, const MprisPlaylist &playlist) { arg.beginStructure(); arg << playlist.id << playlist.name << playlist.icon; @@ -132,13 +134,13 @@ Mpris2::Mpris2(Application *app, QObject *parent) app_name_[0] = app_name_[0].toUpper(); - QStringList data_dirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS")).split(QLatin1Char(':')); + QStringList data_dirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS")).split(u':'); - if (!data_dirs.contains(QLatin1String("/usr/local/share"))) { + if (!data_dirs.contains("/usr/local/share"_L1)) { data_dirs.append(QStringLiteral("/usr/local/share")); } - if (!data_dirs.contains(QLatin1String("/usr/share"))) { + if (!data_dirs.contains("/usr/share"_L1)) { data_dirs.append(QStringLiteral("/usr/share")); } @@ -208,18 +210,18 @@ void Mpris2::EmitNotification(const QString &name, const QVariant &value, const void Mpris2::EmitNotification(const QString &name) { QVariant value; - if (name == QLatin1String("PlaybackStatus")) value = PlaybackStatus(); - else if (name == QLatin1String("LoopStatus")) value = LoopStatus(); - else if (name == QLatin1String("Shuffle")) value = Shuffle(); - else if (name == QLatin1String("Metadata")) value = Metadata(); - else if (name == QLatin1String("Rating")) value = Rating(); - else if (name == QLatin1String("Volume")) value = Volume(); - else if (name == QLatin1String("Position")) value = Position(); - else if (name == QLatin1String("CanPlay")) value = CanPlay(); - else if (name == QLatin1String("CanPause")) value = CanPause(); - else if (name == QLatin1String("CanSeek")) value = CanSeek(); - else if (name == QLatin1String("CanGoNext")) value = CanGoNext(); - else if (name == QLatin1String("CanGoPrevious")) value = CanGoPrevious(); + if (name == "PlaybackStatus"_L1) value = PlaybackStatus(); + else if (name == "LoopStatus"_L1) value = LoopStatus(); + else if (name == "Shuffle"_L1) value = Shuffle(); + else if (name == "Metadata"_L1) value = Metadata(); + else if (name == "Rating"_L1) value = Rating(); + else if (name == "Volume"_L1) value = Volume(); + else if (name == "Position"_L1) value = Position(); + else if (name == "CanPlay"_L1) value = CanPlay(); + else if (name == "CanPause"_L1) value = CanPause(); + else if (name == "CanSeek"_L1) value = CanSeek(); + else if (name == "CanGoNext"_L1) value = CanGoNext(); + else if (name == "CanGoPrevious"_L1) value = CanGoPrevious(); if (value.isValid()) EmitNotification(name, value); @@ -326,13 +328,13 @@ void Mpris2::SetLoopStatus(const QString &value) { PlaylistSequence::RepeatMode mode = PlaylistSequence::RepeatMode::Off; - if (value == QLatin1String("None")) { + if (value == "None"_L1) { mode = PlaylistSequence::RepeatMode::Off; } - else if (value == QLatin1String("Track")) { + else if (value == "Track"_L1) { mode = PlaylistSequence::RepeatMode::Track; } - else if (value == QLatin1String("Playlist")) { + else if (value == "Playlist"_L1) { mode = PlaylistSequence::RepeatMode::Playlist; } @@ -461,7 +463,7 @@ bool Mpris2::CanPlay() const { // This one's a bit different than MPRIS 1 - we want this to be true even when the song is already paused or stopped. bool Mpris2::CanPause() const { - return (app_->player()->GetCurrentItem() && app_->player()->GetState() == EngineBase::State::Playing && !(app_->player()->GetCurrentItem()->options() & PlaylistItem::Option::PauseDisabled)) || PlaybackStatus() == QLatin1String("Paused") || PlaybackStatus() == QLatin1String("Stopped"); + return (app_->player()->GetCurrentItem() && app_->player()->GetState() == EngineBase::State::Playing && !(app_->player()->GetCurrentItem()->options() & PlaylistItem::Option::PauseDisabled)) || PlaybackStatus() == "Paused"_L1 || PlaybackStatus() == "Stopped"_L1; } bool Mpris2::CanSeek() const { return CanSeek(app_->player()->GetState()); } @@ -595,7 +597,7 @@ MaybePlaylist Mpris2::ActivePlaylist() const { void Mpris2::ActivatePlaylist(const QDBusObjectPath &playlist_id) { - QStringList split_path = playlist_id.path().split(QLatin1Char('/')); + QStringList split_path = playlist_id.path().split(u'/'); qLog(Debug) << Q_FUNC_INFO << playlist_id.path() << split_path; if (split_path.isEmpty()) { return; @@ -649,7 +651,7 @@ void Mpris2::PlaylistChangedSlot(Playlist *playlist) { void Mpris2::PlaylistCollectionChanged(Playlist *playlist) { Q_UNUSED(playlist); - EmitNotification(QStringLiteral("PlaylistCount"), QLatin1String(""), QStringLiteral("org.mpris.MediaPlayer2.Playlists")); + EmitNotification(QStringLiteral("PlaylistCount"), ""_L1, QStringLiteral("org.mpris.MediaPlayer2.Playlists")); } } // namespace mpris diff --git a/src/core/mpris_common.h b/src/core/mpris_common.h index adffabde1..f2cf9ee37 100644 --- a/src/core/mpris_common.h +++ b/src/core/mpris_common.h @@ -32,6 +32,8 @@ namespace mpris { +using namespace Qt::Literals::StringLiterals; + inline void AddMetadata(const QString &key, const QString &metadata, QVariantMap *map) { if (!metadata.isEmpty()) (*map)[key] = metadata; } @@ -61,7 +63,7 @@ inline void AddMetadata(const QString &key, const QDBusObjectPath &metadata, QVa } inline QString AsMPRISDateTimeType(const qint64 time) { - return time != -1 ? QDateTime::fromSecsSinceEpoch(time).toString(Qt::ISODate) : QLatin1String(""); + return time != -1 ? QDateTime::fromSecsSinceEpoch(time).toString(Qt::ISODate) : ""_L1; } } // namespace mpris diff --git a/src/core/networkproxyfactory.cpp b/src/core/networkproxyfactory.cpp index 67a2826ff..4761e6f25 100644 --- a/src/core/networkproxyfactory.cpp +++ b/src/core/networkproxyfactory.cpp @@ -32,6 +32,8 @@ #include "core/settings.h" #include "networkproxyfactory.h" +using namespace Qt::StringLiterals; + NetworkProxyFactory *NetworkProxyFactory::sInstance = nullptr; const char *NetworkProxyFactory::kSettingsGroup = "NetworkProxy"; @@ -112,7 +114,7 @@ QList NetworkProxyFactory::queryProxy(const QNetworkProxyQuery &q ret.setPort(env_url_.port()); ret.setUser(env_url_.userName()); ret.setPassword(env_url_.password()); - if (env_url_.scheme().startsWith(QLatin1String("http"))) { + if (env_url_.scheme().startsWith("http"_L1)) { ret.setType(QNetworkProxy::HttpProxy); } else { diff --git a/src/core/player.cpp b/src/core/player.cpp index 9cae30b63..b23d66134 100644 --- a/src/core/player.cpp +++ b/src/core/player.cpp @@ -70,7 +70,6 @@ #include "settings/playlistsettingspage.h" using namespace std::chrono_literals; - using std::make_shared; const char *Player::kSettingsGroup = "Player"; diff --git a/src/core/song.cpp b/src/core/song.cpp index f19ff0ee0..f03dd5d1e 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -63,6 +63,8 @@ #endif #include "tagreadermessages.pb.h" +using namespace Qt::StringLiterals; + const QStringList Song::kColumns = QStringList() << QStringLiteral("title") << QStringLiteral("album") << QStringLiteral("artist") @@ -144,10 +146,10 @@ const QStringList Song::kColumns = QStringList() << QStringLiteral("title") const QStringList Song::kRowIdColumns = QStringList() << QStringLiteral("ROWID") << kColumns; -const QString Song::kColumnSpec = kColumns.join(QLatin1String(", ")); -const QString Song::kRowIdColumnSpec = kRowIdColumns.join(QLatin1String(", ")); -const QString Song::kBindSpec = Utilities::Prepend(QStringLiteral(":"), kColumns).join(QLatin1String(", ")); -const QString Song::kUpdateSpec = Utilities::Updateify(kColumns).join(QLatin1String(", ")); +const QString Song::kColumnSpec = kColumns.join(", "_L1); +const QString Song::kRowIdColumnSpec = kRowIdColumns.join(", "_L1); +const QString Song::kBindSpec = Utilities::Prepend(QStringLiteral(":"), kColumns).join(", "_L1); +const QString Song::kUpdateSpec = Utilities::Updateify(kColumns).join(", "_L1); const QStringList Song::kTextSearchColumns = QStringList() << QStringLiteral("title") << QStringLiteral("album") @@ -421,9 +423,9 @@ const QString &Song::grouping() const { return d->grouping_; } const QString &Song::comment() const { return d->comment_; } const QString &Song::lyrics() const { return d->lyrics_; } -QString Song::artist_id() const { return d->artist_id_.isNull() ? QLatin1String("") : d->artist_id_; } -QString Song::album_id() const { return d->album_id_.isNull() ? QLatin1String("") : d->album_id_; } -QString Song::song_id() const { return d->song_id_.isNull() ? QLatin1String("") : d->song_id_; } +QString Song::artist_id() const { return d->artist_id_.isNull() ? ""_L1 : d->artist_id_; } +QString Song::album_id() const { return d->album_id_.isNull() ? ""_L1 : d->album_id_; } +QString Song::song_id() const { return d->song_id_.isNull() ? ""_L1 : d->song_id_; } qint64 Song::beginning_nanosec() const { return d->beginning_; } qint64 Song::end_nanosec() const { return d->end_; } @@ -725,7 +727,7 @@ int Song::ColumnIndex(const QString &field) { } QString Song::JoinSpec(const QString &table) { - return Utilities::Prepend(table + QLatin1Char('.'), kRowIdColumns).join(QLatin1String(", ")); + return Utilities::Prepend(table + QLatin1Char('.'), kRowIdColumns).join(", "_L1); } QString Song::PrettyTitle() const { @@ -779,7 +781,7 @@ QString Song::TitleWithCompilationArtist() const { if (title.isEmpty()) title = d->basefilename_; - if (is_compilation() && !d->artist_.isEmpty() && !d->artist_.contains(QLatin1String("various"), Qt::CaseInsensitive)) title = d->artist_ + QStringLiteral(" - ") + title; + if (is_compilation() && !d->artist_.isEmpty() && !d->artist_.contains("various"_L1, Qt::CaseInsensitive)) title = d->artist_ + QStringLiteral(" - ") + title; return title; @@ -787,7 +789,7 @@ QString Song::TitleWithCompilationArtist() const { QString Song::SampleRateBitDepthToText() const { - if (d->samplerate_ == -1) return QLatin1String(""); + if (d->samplerate_ == -1) return ""_L1; if (d->bitdepth_ == -1) return QStringLiteral("%1 hz").arg(d->samplerate_); return QStringLiteral("%1 hz / %2 bit").arg(d->samplerate_).arg(d->bitdepth_); @@ -957,11 +959,11 @@ Song::Source Song::SourceFromURL(const QUrl &url) { if (url.scheme() == QStringLiteral("spotify")) return Source::Spotify; if (url.scheme() == QStringLiteral("qobuz")) return Source::Qobuz; if (url.scheme() == QStringLiteral("http") || url.scheme() == QStringLiteral("https") || url.scheme() == QStringLiteral("rtsp")) { - if (url.host().endsWith(QLatin1String("tidal.com"), Qt::CaseInsensitive)) { return Source::Tidal; } - if (url.host().endsWith(QLatin1String("spotify.com"), Qt::CaseInsensitive)) { return Source::Spotify; } - if (url.host().endsWith(QLatin1String("qobuz.com"), Qt::CaseInsensitive)) { return Source::Qobuz; } - if (url.host().endsWith(QLatin1String("somafm.com"), Qt::CaseInsensitive)) { return Source::SomaFM; } - if (url.host().endsWith(QLatin1String("radioparadise.com"), Qt::CaseInsensitive)) { return Source::RadioParadise; } + if (url.host().endsWith("tidal.com"_L1, Qt::CaseInsensitive)) { return Source::Tidal; } + if (url.host().endsWith("spotify.com"_L1, Qt::CaseInsensitive)) { return Source::Spotify; } + if (url.host().endsWith("qobuz.com"_L1, Qt::CaseInsensitive)) { return Source::Qobuz; } + if (url.host().endsWith("somafm.com"_L1, Qt::CaseInsensitive)) { return Source::SomaFM; } + if (url.host().endsWith("radioparadise.com"_L1, Qt::CaseInsensitive)) { return Source::RadioParadise; } return Source::Stream; } else return Source::Unknown; @@ -1010,17 +1012,17 @@ QString Song::DescriptionForSource(const Source source) { Song::Source Song::SourceFromText(const QString &source) { - if (source.compare(QLatin1String("file"), Qt::CaseInsensitive) == 0) return Source::LocalFile; - if (source.compare(QLatin1String("collection"), Qt::CaseInsensitive) == 0) return Source::Collection; - if (source.compare(QLatin1String("cd"), Qt::CaseInsensitive) == 0) return Source::CDDA; - if (source.compare(QLatin1String("device"), Qt::CaseInsensitive) == 0) return Source::Device; - if (source.compare(QLatin1String("stream"), Qt::CaseInsensitive) == 0) return Source::Stream; - if (source.compare(QLatin1String("subsonic"), Qt::CaseInsensitive) == 0) return Source::Subsonic; - if (source.compare(QLatin1String("tidal"), Qt::CaseInsensitive) == 0) return Source::Tidal; - if (source.compare(QLatin1String("spotify"), Qt::CaseInsensitive) == 0) return Source::Spotify; - if (source.compare(QLatin1String("qobuz"), Qt::CaseInsensitive) == 0) return Source::Qobuz; - if (source.compare(QLatin1String("somafm"), Qt::CaseInsensitive) == 0) return Source::SomaFM; - if (source.compare(QLatin1String("radioparadise"), Qt::CaseInsensitive) == 0) return Source::RadioParadise; + if (source.compare("file"_L1, Qt::CaseInsensitive) == 0) return Source::LocalFile; + if (source.compare("collection"_L1, Qt::CaseInsensitive) == 0) return Source::Collection; + if (source.compare("cd"_L1, Qt::CaseInsensitive) == 0) return Source::CDDA; + if (source.compare("device"_L1, Qt::CaseInsensitive) == 0) return Source::Device; + if (source.compare("stream"_L1, Qt::CaseInsensitive) == 0) return Source::Stream; + if (source.compare("subsonic"_L1, Qt::CaseInsensitive) == 0) return Source::Subsonic; + if (source.compare("tidal"_L1, Qt::CaseInsensitive) == 0) return Source::Tidal; + if (source.compare("spotify"_L1, Qt::CaseInsensitive) == 0) return Source::Spotify; + if (source.compare("qobuz"_L1, Qt::CaseInsensitive) == 0) return Source::Qobuz; + if (source.compare("somafm"_L1, Qt::CaseInsensitive) == 0) return Source::SomaFM; + if (source.compare("radioparadise"_L1, Qt::CaseInsensitive) == 0) return Source::RadioParadise; return Source::Unknown; @@ -1166,26 +1168,26 @@ bool Song::IsFileLossless() const { Song::FileType Song::FiletypeByMimetype(const QString &mimetype) { - if (mimetype.compare(QLatin1String("audio/wav"), Qt::CaseInsensitive) == 0 || mimetype.compare(QLatin1String("audio/x-wav"), Qt::CaseInsensitive) == 0) return FileType::WAV; - if (mimetype.compare(QLatin1String("audio/x-flac"), Qt::CaseInsensitive) == 0) return FileType::FLAC; - if (mimetype.compare(QLatin1String("audio/x-wavpack"), Qt::CaseInsensitive) == 0) return FileType::WavPack; - if (mimetype.compare(QLatin1String("audio/x-vorbis"), Qt::CaseInsensitive) == 0) return FileType::OggVorbis; - if (mimetype.compare(QLatin1String("audio/x-opus"), Qt::CaseInsensitive) == 0) return FileType::OggOpus; - if (mimetype.compare(QLatin1String("audio/x-speex"), Qt::CaseInsensitive) == 0) return FileType::OggSpeex; + if (mimetype.compare("audio/wav"_L1, Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-wav"_L1, Qt::CaseInsensitive) == 0) return FileType::WAV; + if (mimetype.compare("audio/x-flac"_L1, Qt::CaseInsensitive) == 0) return FileType::FLAC; + if (mimetype.compare("audio/x-wavpack"_L1, Qt::CaseInsensitive) == 0) return FileType::WavPack; + if (mimetype.compare("audio/x-vorbis"_L1, Qt::CaseInsensitive) == 0) return FileType::OggVorbis; + if (mimetype.compare("audio/x-opus"_L1, Qt::CaseInsensitive) == 0) return FileType::OggOpus; + if (mimetype.compare("audio/x-speex"_L1, Qt::CaseInsensitive) == 0) return FileType::OggSpeex; // Gstreamer returns audio/mpeg for both MP3 and MP4/AAC. // if (mimetype.compare("audio/mpeg", Qt::CaseInsensitive) == 0) return FileType::MPEG; - if (mimetype.compare(QLatin1String("audio/aac"), Qt::CaseInsensitive) == 0) return FileType::MP4; - if (mimetype.compare(QLatin1String("audio/x-wma"), Qt::CaseInsensitive) == 0) return FileType::ASF; - if (mimetype.compare(QLatin1String("audio/aiff"), Qt::CaseInsensitive) == 0 || mimetype.compare(QLatin1String("audio/x-aiff"), Qt::CaseInsensitive) == 0) return FileType::AIFF; - if (mimetype.compare(QLatin1String("audio/x-musepack"), Qt::CaseInsensitive) == 0) return FileType::MPC; - if (mimetype.compare(QLatin1String("application/x-project"), Qt::CaseInsensitive) == 0) return FileType::MPC; - if (mimetype.compare(QLatin1String("audio/x-dsf"), Qt::CaseInsensitive) == 0) return FileType::DSF; - if (mimetype.compare(QLatin1String("audio/x-dsd"), Qt::CaseInsensitive) == 0) return FileType::DSDIFF; - if (mimetype.compare(QLatin1String("audio/x-ape"), Qt::CaseInsensitive) == 0 || mimetype.compare(QLatin1String("application/x-ape"), Qt::CaseInsensitive) == 0 || mimetype.compare(QLatin1String("audio/x-ffmpeg-parsed-ape"), Qt::CaseInsensitive) == 0) return FileType::APE; - if (mimetype.compare(QLatin1String("audio/x-mod"), Qt::CaseInsensitive) == 0) return FileType::MOD; - if (mimetype.compare(QLatin1String("audio/x-s3m"), Qt::CaseInsensitive) == 0) return FileType::S3M; - if (mimetype.compare(QLatin1String("audio/x-spc"), Qt::CaseInsensitive) == 0) return FileType::SPC; - if (mimetype.compare(QLatin1String("audio/x-vgm"), Qt::CaseInsensitive) == 0) return FileType::VGM; + if (mimetype.compare("audio/aac"_L1, Qt::CaseInsensitive) == 0) return FileType::MP4; + if (mimetype.compare("audio/x-wma"_L1, Qt::CaseInsensitive) == 0) return FileType::ASF; + if (mimetype.compare("audio/aiff"_L1, Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-aiff"_L1, Qt::CaseInsensitive) == 0) return FileType::AIFF; + if (mimetype.compare("audio/x-musepack"_L1, Qt::CaseInsensitive) == 0) return FileType::MPC; + if (mimetype.compare("application/x-project"_L1, Qt::CaseInsensitive) == 0) return FileType::MPC; + if (mimetype.compare("audio/x-dsf"_L1, Qt::CaseInsensitive) == 0) return FileType::DSF; + if (mimetype.compare("audio/x-dsd"_L1, Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + if (mimetype.compare("audio/x-ape"_L1, Qt::CaseInsensitive) == 0 || mimetype.compare("application/x-ape"_L1, Qt::CaseInsensitive) == 0 || mimetype.compare("audio/x-ffmpeg-parsed-ape"_L1, Qt::CaseInsensitive) == 0) return FileType::APE; + if (mimetype.compare("audio/x-mod"_L1, Qt::CaseInsensitive) == 0) return FileType::MOD; + if (mimetype.compare("audio/x-s3m"_L1, Qt::CaseInsensitive) == 0) return FileType::S3M; + if (mimetype.compare("audio/x-spc"_L1, Qt::CaseInsensitive) == 0) return FileType::SPC; + if (mimetype.compare("audio/x-vgm"_L1, Qt::CaseInsensitive) == 0) return FileType::VGM; return FileType::Unknown; @@ -1193,26 +1195,26 @@ Song::FileType Song::FiletypeByMimetype(const QString &mimetype) { Song::FileType Song::FiletypeByDescription(const QString &text) { - if (text.compare(QLatin1String("WAV"), Qt::CaseInsensitive) == 0) return FileType::WAV; - if (text.compare(QLatin1String("Free Lossless Audio Codec (FLAC)"), Qt::CaseInsensitive) == 0) return FileType::FLAC; - if (text.compare(QLatin1String("Wavpack"), Qt::CaseInsensitive) == 0) return FileType::WavPack; - if (text.compare(QLatin1String("Vorbis"), Qt::CaseInsensitive) == 0) return FileType::OggVorbis; - if (text.compare(QLatin1String("Opus"), Qt::CaseInsensitive) == 0) return FileType::OggOpus; - if (text.compare(QLatin1String("Speex"), Qt::CaseInsensitive) == 0) return FileType::OggSpeex; - if (text.compare(QLatin1String("MPEG-1 Layer 2 (MP2)"), Qt::CaseInsensitive) == 0) return FileType::MPEG; - if (text.compare(QLatin1String("MPEG-1 Layer 3 (MP3)"), Qt::CaseInsensitive) == 0) return FileType::MPEG; - if (text.compare(QLatin1String("MPEG-4 AAC"), Qt::CaseInsensitive) == 0) return FileType::MP4; - if (text.compare(QLatin1String("WMA"), Qt::CaseInsensitive) == 0) return FileType::ASF; - if (text.compare(QLatin1String("Audio Interchange File Format"), Qt::CaseInsensitive) == 0) return FileType::AIFF; - if (text.compare(QLatin1String("MPC"), Qt::CaseInsensitive) == 0) return FileType::MPC; - if (text.compare(QLatin1String("Musepack (MPC)"), Qt::CaseInsensitive) == 0) return FileType::MPC; - if (text.compare(QLatin1String("audio/x-dsf"), Qt::CaseInsensitive) == 0) return FileType::DSF; - if (text.compare(QLatin1String("audio/x-dsd"), Qt::CaseInsensitive) == 0) return FileType::DSDIFF; - if (text.compare(QLatin1String("audio/x-ffmpeg-parsed-ape"), Qt::CaseInsensitive) == 0) return FileType::APE; - if (text.compare(QLatin1String("Module Music Format (MOD)"), Qt::CaseInsensitive) == 0) return FileType::MOD; - if (text.compare(QLatin1String("Module Music Format (MOD)"), Qt::CaseInsensitive) == 0) return FileType::S3M; - if (text.compare(QLatin1String("SNES SPC700"), Qt::CaseInsensitive) == 0) return FileType::SPC; - if (text.compare(QLatin1String("VGM"), Qt::CaseInsensitive) == 0) return FileType::VGM; + if (text.compare("WAV"_L1, Qt::CaseInsensitive) == 0) return FileType::WAV; + if (text.compare("Free Lossless Audio Codec (FLAC)"_L1, Qt::CaseInsensitive) == 0) return FileType::FLAC; + if (text.compare("Wavpack"_L1, Qt::CaseInsensitive) == 0) return FileType::WavPack; + if (text.compare("Vorbis"_L1, Qt::CaseInsensitive) == 0) return FileType::OggVorbis; + if (text.compare("Opus"_L1, Qt::CaseInsensitive) == 0) return FileType::OggOpus; + if (text.compare("Speex"_L1, Qt::CaseInsensitive) == 0) return FileType::OggSpeex; + if (text.compare("MPEG-1 Layer 2 (MP2)"_L1, Qt::CaseInsensitive) == 0) return FileType::MPEG; + if (text.compare("MPEG-1 Layer 3 (MP3)"_L1, Qt::CaseInsensitive) == 0) return FileType::MPEG; + if (text.compare("MPEG-4 AAC"_L1, Qt::CaseInsensitive) == 0) return FileType::MP4; + if (text.compare("WMA"_L1, Qt::CaseInsensitive) == 0) return FileType::ASF; + if (text.compare("Audio Interchange File Format"_L1, Qt::CaseInsensitive) == 0) return FileType::AIFF; + if (text.compare("MPC"_L1, Qt::CaseInsensitive) == 0) return FileType::MPC; + if (text.compare("Musepack (MPC)"_L1, Qt::CaseInsensitive) == 0) return FileType::MPC; + if (text.compare("audio/x-dsf"_L1, Qt::CaseInsensitive) == 0) return FileType::DSF; + if (text.compare("audio/x-dsd"_L1, Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + if (text.compare("audio/x-ffmpeg-parsed-ape"_L1, Qt::CaseInsensitive) == 0) return FileType::APE; + if (text.compare("Module Music Format (MOD)"_L1, Qt::CaseInsensitive) == 0) return FileType::MOD; + if (text.compare("Module Music Format (MOD)"_L1, Qt::CaseInsensitive) == 0) return FileType::S3M; + if (text.compare("SNES SPC700"_L1, Qt::CaseInsensitive) == 0) return FileType::SPC; + if (text.compare("VGM"_L1, Qt::CaseInsensitive) == 0) return FileType::VGM; return FileType::Unknown; @@ -1220,29 +1222,29 @@ Song::FileType Song::FiletypeByDescription(const QString &text) { Song::FileType Song::FiletypeByExtension(const QString &ext) { - if (ext.compare(QLatin1String("wav"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("wave"), Qt::CaseInsensitive) == 0) return FileType::WAV; - if (ext.compare(QLatin1String("flac"), Qt::CaseInsensitive) == 0) return FileType::FLAC; - if (ext.compare(QLatin1String("wavpack"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("wv"), Qt::CaseInsensitive) == 0) return FileType::WavPack; - if (ext.compare(QLatin1String("opus"), Qt::CaseInsensitive) == 0) return FileType::OggOpus; - if (ext.compare(QLatin1String("speex"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("spx"), Qt::CaseInsensitive) == 0) return FileType::OggSpeex; - if (ext.compare(QLatin1String("mp2"), Qt::CaseInsensitive) == 0) return FileType::MPEG; - if (ext.compare(QLatin1String("mp3"), Qt::CaseInsensitive) == 0) return FileType::MPEG; - if (ext.compare(QLatin1String("mp4"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("m4a"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("aac"), Qt::CaseInsensitive) == 0) return FileType::MP4; - if (ext.compare(QLatin1String("asf"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("wma"), Qt::CaseInsensitive) == 0) return FileType::ASF; - if (ext.compare(QLatin1String("aiff"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("aif"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("aifc"), Qt::CaseInsensitive) == 0) return FileType::AIFF; - if (ext.compare(QLatin1String("mpc"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("mp+"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("mpp"), Qt::CaseInsensitive) == 0) return FileType::MPC; - if (ext.compare(QLatin1String("dsf"), Qt::CaseInsensitive) == 0) return FileType::DSF; - if (ext.compare(QLatin1String("dsd"), Qt::CaseInsensitive) == 0 || ext.compare(QLatin1String("dff"), Qt::CaseInsensitive) == 0) return FileType::DSDIFF; - if (ext.compare(QLatin1String("ape"), Qt::CaseInsensitive) == 0) return FileType::APE; - if (ext.compare(QLatin1String("mod"), Qt::CaseInsensitive) == 0 || - ext.compare(QLatin1String("module"), Qt::CaseInsensitive) == 0 || - ext.compare(QLatin1String("nst"), Qt::CaseInsensitive) == 0|| - ext.compare(QLatin1String("wow"), Qt::CaseInsensitive) == 0) return FileType::MOD; - if (ext.compare(QLatin1String("s3m"), Qt::CaseInsensitive) == 0) return FileType::S3M; - if (ext.compare(QLatin1String("xm"), Qt::CaseInsensitive) == 0) return FileType::XM; - if (ext.compare(QLatin1String("it"), Qt::CaseInsensitive) == 0) return FileType::IT; - if (ext.compare(QLatin1String("spc"), Qt::CaseInsensitive) == 0) return FileType::SPC; - if (ext.compare(QLatin1String("vgm"), Qt::CaseInsensitive) == 0) return FileType::VGM; + if (ext.compare("wav"_L1, Qt::CaseInsensitive) == 0 || ext.compare("wave"_L1, Qt::CaseInsensitive) == 0) return FileType::WAV; + if (ext.compare("flac"_L1, Qt::CaseInsensitive) == 0) return FileType::FLAC; + if (ext.compare("wavpack"_L1, Qt::CaseInsensitive) == 0 || ext.compare("wv"_L1, Qt::CaseInsensitive) == 0) return FileType::WavPack; + if (ext.compare("opus"_L1, Qt::CaseInsensitive) == 0) return FileType::OggOpus; + if (ext.compare("speex"_L1, Qt::CaseInsensitive) == 0 || ext.compare("spx"_L1, Qt::CaseInsensitive) == 0) return FileType::OggSpeex; + if (ext.compare("mp2"_L1, Qt::CaseInsensitive) == 0) return FileType::MPEG; + if (ext.compare("mp3"_L1, Qt::CaseInsensitive) == 0) return FileType::MPEG; + if (ext.compare("mp4"_L1, Qt::CaseInsensitive) == 0 || ext.compare("m4a"_L1, Qt::CaseInsensitive) == 0 || ext.compare("aac"_L1, Qt::CaseInsensitive) == 0) return FileType::MP4; + if (ext.compare("asf"_L1, Qt::CaseInsensitive) == 0 || ext.compare("wma"_L1, Qt::CaseInsensitive) == 0) return FileType::ASF; + if (ext.compare("aiff"_L1, Qt::CaseInsensitive) == 0 || ext.compare("aif"_L1, Qt::CaseInsensitive) == 0 || ext.compare("aifc"_L1, Qt::CaseInsensitive) == 0) return FileType::AIFF; + if (ext.compare("mpc"_L1, Qt::CaseInsensitive) == 0 || ext.compare("mp+"_L1, Qt::CaseInsensitive) == 0 || ext.compare("mpp"_L1, Qt::CaseInsensitive) == 0) return FileType::MPC; + if (ext.compare("dsf"_L1, Qt::CaseInsensitive) == 0) return FileType::DSF; + if (ext.compare("dsd"_L1, Qt::CaseInsensitive) == 0 || ext.compare("dff"_L1, Qt::CaseInsensitive) == 0) return FileType::DSDIFF; + if (ext.compare("ape"_L1, Qt::CaseInsensitive) == 0) return FileType::APE; + if (ext.compare("mod"_L1, Qt::CaseInsensitive) == 0 || + ext.compare("module"_L1, Qt::CaseInsensitive) == 0 || + ext.compare("nst"_L1, Qt::CaseInsensitive) == 0|| + ext.compare("wow"_L1, Qt::CaseInsensitive) == 0) return FileType::MOD; + if (ext.compare("s3m"_L1, Qt::CaseInsensitive) == 0) return FileType::S3M; + if (ext.compare("xm"_L1, Qt::CaseInsensitive) == 0) return FileType::XM; + if (ext.compare("it"_L1, Qt::CaseInsensitive) == 0) return FileType::IT; + if (ext.compare("spc"_L1, Qt::CaseInsensitive) == 0) return FileType::SPC; + if (ext.compare("vgm"_L1, Qt::CaseInsensitive) == 0) return FileType::VGM; return FileType::Unknown; @@ -1588,8 +1590,8 @@ void Song::InitFromItdb(Itdb_Track *track, const QString &prefix) { d->source_ = Source::Device; QString filename = QString::fromLocal8Bit(track->ipod_path); - filename.replace(QLatin1Char(':'), QLatin1Char('/')); - if (prefix.contains(QLatin1String("://"))) { + filename.replace(u':', u'/'); + if (prefix.contains("://"_L1)) { set_url(QUrl(prefix + filename)); } else { @@ -1935,7 +1937,7 @@ void Song::MergeUserSetData(const Song &other, const bool merge_playcount, const } QString Song::AlbumKey() const { - return QStringLiteral("%1|%2|%3").arg(is_compilation() ? QStringLiteral("_compilation") : effective_albumartist(), has_cue() ? cue_path() : QLatin1String(""), effective_album()); + return QStringLiteral("%1|%2|%3").arg(is_compilation() ? QStringLiteral("_compilation") : effective_albumartist(), has_cue() ? cue_path() : ""_L1, effective_album()); } size_t qHash(const Song &song) { diff --git a/src/core/songloader.cpp b/src/core/songloader.cpp index aa69ae47c..257875b27 100644 --- a/src/core/songloader.cpp +++ b/src/core/songloader.cpp @@ -307,7 +307,7 @@ SongLoader::Result SongLoader::LoadLocalAsync(const QString &filename) { // It's a CUE - create virtual tracks QFile cue(matching_cue); if (cue.open(QIODevice::ReadOnly)) { - const SongList songs = cue_parser_->Load(&cue, matching_cue, QDir(filename.section(QLatin1Char('/'), 0, -2))); + const SongList songs = cue_parser_->Load(&cue, matching_cue, QDir(filename.section(u'/', 0, -2))); cue.close(); for (const Song &song : songs) { if (song.is_valid()) songs_ << song; diff --git a/src/core/sqlquery.cpp b/src/core/sqlquery.cpp index 068dc15a1..f78f1577d 100644 --- a/src/core/sqlquery.cpp +++ b/src/core/sqlquery.cpp @@ -26,6 +26,8 @@ #include "sqlquery.h" +using namespace Qt::StringLiterals; + void SqlQuery::BindValue(const QString &placeholder, const QVariant &value) { bound_values_.insert(placeholder, value); @@ -36,13 +38,13 @@ void SqlQuery::BindValue(const QString &placeholder, const QVariant &value) { void SqlQuery::BindStringValue(const QString &placeholder, const QString &value) { - BindValue(placeholder, value.isNull() ? QLatin1String("") : value); + BindValue(placeholder, value.isNull() ? ""_L1 : value); } void SqlQuery::BindUrlValue(const QString &placeholder, const QUrl &value) { - BindValue(placeholder, value.isValid() ? value.toString(QUrl::FullyEncoded) : QLatin1String("")); + BindValue(placeholder, value.isValid() ? value.toString(QUrl::FullyEncoded) : ""_L1); } diff --git a/src/core/stylehelper.cpp b/src/core/stylehelper.cpp index 69ecb3f09..c27e6b484 100644 --- a/src/core/stylehelper.cpp +++ b/src/core/stylehelper.cpp @@ -34,6 +34,8 @@ #include #include +using namespace Qt::StringLiterals; + // Clamps float color values within (0, 255) static int clamp(float x) { const int val = x > 255 ? 255 : static_cast(x); @@ -461,7 +463,7 @@ QString StyleHelper::dpiSpecificImageFile(const QString &fileName) { QString StyleHelper::imageFileWithResolution(const QString &fileName, int dpr) { const QFileInfo fi(fileName); - return dpr == 1 ? fileName : fi.path() + QLatin1Char('/') + fi.completeBaseName() + QLatin1Char('@') + QString::number(dpr) + QLatin1String("x.") + fi.suffix(); + return dpr == 1 ? fileName : fi.path() + QLatin1Char('/') + fi.completeBaseName() + QLatin1Char('@') + QString::number(dpr) + "x."_L1 + fi.suffix(); } diff --git a/src/core/stylesheetloader.cpp b/src/core/stylesheetloader.cpp index 86cb90256..5eedcc2a6 100644 --- a/src/core/stylesheetloader.cpp +++ b/src/core/stylesheetloader.cpp @@ -39,6 +39,8 @@ #include "core/logging.h" #include "stylesheetloader.h" +using namespace Qt::StringLiterals; + using std::make_shared; StyleSheetLoader::StyleSheetLoader(QObject *parent) : QObject(parent) {} @@ -90,7 +92,7 @@ void StyleSheetLoader::UpdateStyleSheet(QWidget *widget, SharedPtrclassName())); diff --git a/src/core/temporaryfile.cpp b/src/core/temporaryfile.cpp index 188c57015..0dd35b35d 100644 --- a/src/core/temporaryfile.cpp +++ b/src/core/temporaryfile.cpp @@ -61,7 +61,7 @@ QString TemporaryFile::GenerateFilename(const QString &filename_pattern) const { QString filename = filename_pattern; Q_FOREVER { - const int i = static_cast(filename.indexOf(QLatin1Char('X'))); + const int i = static_cast(filename.indexOf(u'X')); if (i == -1) break; const qint64 index = QRandomGenerator::global()->bounded(0, random_chars.length()); const QChar random_char = random_chars.at(index); diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 996614901..d6d406bc1 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -79,6 +79,8 @@ #include "coverfromurldialog.h" #include "currentalbumcoverloader.h" +using namespace Qt::StringLiterals; + const char *AlbumCoverChoiceController::kLoadImageFileFilter = QT_TR_NOOP("Images (*.png *.jpg *.jpeg *.bmp *.gif *.xpm *.pbm *.pgm *.ppm *.xbm)"); const char *AlbumCoverChoiceController::kSaveImageFileFilter = QT_TR_NOOP("Images (*.png *.jpg *.jpeg *.bmp *.xpm *.pbm *.ppm *.xbm)"); const char *AlbumCoverChoiceController::kAllFilesFilter = QT_TR_NOOP("All files (*)"); @@ -233,12 +235,12 @@ QUrl AlbumCoverChoiceController::LoadCoverFromFile(Song *song) { void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const AlbumCoverImageResult &result) { - QString initial_file_name = QLatin1String("/"); + QString initial_file_name = "/"_L1; if (!song.effective_albumartist().isEmpty()) { initial_file_name = initial_file_name + song.effective_albumartist(); } - initial_file_name = initial_file_name + QLatin1Char('-') + (song.effective_album().isEmpty() ? tr("unknown") : song.effective_album()) + QLatin1String(".jpg"); + 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("-")); @@ -251,16 +253,16 @@ void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const A QFileInfo fileinfo(save_filename); if (fileinfo.suffix().isEmpty()) { - save_filename.append(QLatin1String(".jpg")); + save_filename.append(".jpg"_L1); fileinfo.setFile(save_filename); } if (!QImageWriter::supportedImageFormats().contains(fileinfo.completeSuffix().toUtf8().toLower())) { - save_filename = Utilities::PathWithoutFilenameExtension(save_filename) + QLatin1String(".jpg"); + save_filename = Utilities::PathWithoutFilenameExtension(save_filename) + ".jpg"_L1; fileinfo.setFile(save_filename); } - if (result.is_jpeg() && fileinfo.completeSuffix().compare(QLatin1String("jpg"), Qt::CaseInsensitive) == 0) { + if (result.is_jpeg() && fileinfo.completeSuffix().compare("jpg"_L1, Qt::CaseInsensitive) == 0) { QFile file(save_filename); if (!file.open(QIODevice::WriteOnly)) { qLog(Error) << "Failed to open cover file" << save_filename << "for writing:" << file.errorString(); @@ -294,8 +296,8 @@ QString AlbumCoverChoiceController::GetInitialPathForFileDialog(const Song &song } // If no automatic art, start in the song's folder - if (!song.url().isEmpty() && song.url().isValid() && song.url().isLocalFile() && song.url().toLocalFile().contains(QLatin1Char('/'))) { - return song.url().toLocalFile().section(QLatin1Char('/'), 0, -2) + filename; + if (!song.url().isEmpty() && song.url().isValid() && song.url().isLocalFile() && song.url().toLocalFile().contains(u'/')) { + return song.url().toLocalFile().section(u'/', 0, -2) + filename; } return QDir::home().absolutePath() + filename; @@ -478,13 +480,13 @@ void AlbumCoverChoiceController::ShowCover(const Song &song, const QPixmap &pixm // Use Artist - Album as the window title QString title_text(song.effective_albumartist()); - if (!song.effective_album().isEmpty()) title_text += QLatin1String(" - ") + song.effective_album(); + if (!song.effective_album().isEmpty()) title_text += " - "_L1 + song.effective_album(); QLabel *label = new QLabel(dialog); label->setPixmap(pixmap); // Add (WxHpx) to the title before possibly resizing - title_text += QLatin1String(" (") + QString::number(pixmap.width()) + QLatin1Char('x') + QString::number(pixmap.height()) + QLatin1String("px)"); + title_text += QLatin1String(" (") + QString::number(pixmap.width()) + QLatin1Char('x') + QString::number(pixmap.height()) + "px)"_L1; // If the cover is larger than the screen, resize the window 85% seems to be enough to account for title bar and taskbar etc. QScreen *screen = Utilities::GetScreen(this); @@ -666,7 +668,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou if (source == Song::Source::Collection && !cover_options_.cover_overwrite && !force_overwrite && get_save_album_cover_type() == CoverOptions::CoverType::Album && cover_options_.cover_filename == CoverOptions::CoverFilename::Pattern && file.exists()) { while (file.exists()) { QFileInfo fileinfo(file.fileName()); - file.setFileName(fileinfo.path() + QLatin1String("/0") + fileinfo.fileName()); + file.setFileName(fileinfo.path() + "/0"_L1 + fileinfo.fileName()); } filepath = file.fileName(); } diff --git a/src/covermanager/albumcoverexport.cpp b/src/covermanager/albumcoverexport.cpp index 5b45f6b2c..602745645 100644 --- a/src/covermanager/albumcoverexport.cpp +++ b/src/covermanager/albumcoverexport.cpp @@ -35,6 +35,8 @@ #include "core/settings.h" +using namespace Qt::StringLiterals; + const char *AlbumCoverExport::kSettingsGroup = "AlbumCoverExport"; AlbumCoverExport::AlbumCoverExport(QWidget *parent) : QDialog(parent), ui_(new Ui_AlbumCoverExport) { @@ -62,8 +64,8 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() { ui_->overwriteAll->setChecked(static_cast(s.value("overwrite", static_cast(OverwriteMode::All)).toInt()) == OverwriteMode::All); ui_->overwriteSmaller->setChecked(static_cast(s.value("overwrite", static_cast(OverwriteMode::Smaller)).toInt()) == OverwriteMode::Smaller); ui_->forceSize->setChecked(s.value("forceSize", false).toBool()); - ui_->width->setText(s.value("width", QLatin1String("")).toString()); - ui_->height->setText(s.value("height", QLatin1String("")).toString()); + ui_->width->setText(s.value("width", ""_L1).toString()); + ui_->height->setText(s.value("height", ""_L1).toString()); ui_->export_downloaded->setChecked(s.value("export_downloaded", true).toBool()); ui_->export_embedded->setChecked(s.value("export_embedded", false).toBool()); diff --git a/src/covermanager/albumcoverfetchersearch.cpp b/src/covermanager/albumcoverfetchersearch.cpp index 331270dfd..ea3d64a30 100644 --- a/src/covermanager/albumcoverfetchersearch.cpp +++ b/src/covermanager/albumcoverfetchersearch.cpp @@ -48,6 +48,8 @@ #include "coverproviders.h" #include "albumcoverimageresult.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kSearchTimeoutMs = 20000; constexpr int kImageLoadTimeoutMs = 6000; @@ -86,7 +88,7 @@ void AlbumCoverFetcherSearch::TerminateSearch() { void AlbumCoverFetcherSearch::Start(SharedPtr cover_providers) { // Ignore Radio Paradise "commercial" break. - if (request_.artist.compare(QLatin1String("commercial-free"), Qt::CaseInsensitive) == 0 && request_.title.compare(QLatin1String("listener-supported"), Qt::CaseInsensitive) == 0) { + if (request_.artist.compare("commercial-free"_L1, Qt::CaseInsensitive) == 0 && request_.title.compare("listener-supported"_L1, Qt::CaseInsensitive) == 0) { TerminateSearch(); return; } @@ -170,51 +172,51 @@ void AlbumCoverFetcherSearch::ProviderSearchResults(CoverProvider *provider, con // This is done since we can't match the album titles, and we want to prevent compilation or live albums from being picked before studio albums for streams. // TODO: Make these regular expressions. if (request_album.isEmpty() && ( - result_album.contains(QLatin1String("hits"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("greatest"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("best"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("collection"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("classics"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("singles"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("bootleg"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("live"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("concert"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("essential"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("ultimate"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("karaoke"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("mixtape"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("country rock"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("indie folk"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("soft rock"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("folk music"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("60's rock"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("60's romance"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("60s music"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("late 60s"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("the 60s"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("folk and blues"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("60 from the 60's"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("classic psychedelic"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("playlist: acoustic"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("90's rnb playlist"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("rock 80s"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("classic 80s"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("rock anthems"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("rock songs"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("rock 2019"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("guitar anthems"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("driving anthems"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("traffic jam jams"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("perfect background music"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("70's gold"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("rockfluence"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("acoustic dinner accompaniment"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("complete studio albums"), Qt::CaseInsensitive) || - result_album.contains(QLatin1String("mellow rock"), Qt::CaseInsensitive) + result_album.contains("hits"_L1, Qt::CaseInsensitive) || + result_album.contains("greatest"_L1, Qt::CaseInsensitive) || + result_album.contains("best"_L1, Qt::CaseInsensitive) || + result_album.contains("collection"_L1, Qt::CaseInsensitive) || + result_album.contains("classics"_L1, Qt::CaseInsensitive) || + result_album.contains("singles"_L1, Qt::CaseInsensitive) || + result_album.contains("bootleg"_L1, Qt::CaseInsensitive) || + result_album.contains("live"_L1, Qt::CaseInsensitive) || + result_album.contains("concert"_L1, Qt::CaseInsensitive) || + result_album.contains("essential"_L1, Qt::CaseInsensitive) || + result_album.contains("ultimate"_L1, Qt::CaseInsensitive) || + result_album.contains("karaoke"_L1, Qt::CaseInsensitive) || + result_album.contains("mixtape"_L1, Qt::CaseInsensitive) || + result_album.contains("country rock"_L1, Qt::CaseInsensitive) || + result_album.contains("indie folk"_L1, Qt::CaseInsensitive) || + result_album.contains("soft rock"_L1, Qt::CaseInsensitive) || + result_album.contains("folk music"_L1, Qt::CaseInsensitive) || + result_album.contains("60's rock"_L1, Qt::CaseInsensitive) || + result_album.contains("60's romance"_L1, Qt::CaseInsensitive) || + result_album.contains("60s music"_L1, Qt::CaseInsensitive) || + result_album.contains("late 60s"_L1, Qt::CaseInsensitive) || + result_album.contains("the 60s"_L1, Qt::CaseInsensitive) || + result_album.contains("folk and blues"_L1, Qt::CaseInsensitive) || + result_album.contains("60 from the 60's"_L1, Qt::CaseInsensitive) || + result_album.contains("classic psychedelic"_L1, Qt::CaseInsensitive) || + result_album.contains("playlist: acoustic"_L1, Qt::CaseInsensitive) || + result_album.contains("90's rnb playlist"_L1, Qt::CaseInsensitive) || + result_album.contains("rock 80s"_L1, Qt::CaseInsensitive) || + result_album.contains("classic 80s"_L1, Qt::CaseInsensitive) || + result_album.contains("rock anthems"_L1, Qt::CaseInsensitive) || + result_album.contains("rock songs"_L1, Qt::CaseInsensitive) || + result_album.contains("rock 2019"_L1, Qt::CaseInsensitive) || + result_album.contains("guitar anthems"_L1, Qt::CaseInsensitive) || + result_album.contains("driving anthems"_L1, Qt::CaseInsensitive) || + result_album.contains("traffic jam jams"_L1, Qt::CaseInsensitive) || + result_album.contains("perfect background music"_L1, Qt::CaseInsensitive) || + result_album.contains("70's gold"_L1, Qt::CaseInsensitive) || + result_album.contains("rockfluence"_L1, Qt::CaseInsensitive) || + result_album.contains("acoustic dinner accompaniment"_L1, Qt::CaseInsensitive) || + result_album.contains("complete studio albums"_L1, Qt::CaseInsensitive) || + result_album.contains("mellow rock"_L1, Qt::CaseInsensitive) )) { results_copy[i].score_match -= 1; } - else if (request_album.isEmpty() && result_album.contains(QLatin1String("soundtrack"), Qt::CaseInsensitive)) { + else if (request_album.isEmpty() && result_album.contains("soundtrack"_L1, Qt::CaseInsensitive)) { results_copy[i].score_match -= 0.5; } @@ -323,8 +325,8 @@ void AlbumCoverFetcherSearch::ProviderCoverFetchFinished(QNetworkReply *reply) { } else { QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - if (mimetype.contains(QLatin1Char(';'))) { - mimetype = mimetype.left(mimetype.indexOf(QLatin1Char(';'))); + if (mimetype.contains(u';')) { + mimetype = mimetype.left(mimetype.indexOf(u';')); } if (ImageUtils::SupportedImageMimeTypes().contains(mimetype, Qt::CaseInsensitive) || ImageUtils::SupportedImageFormats().contains(mimetype, Qt::CaseInsensitive)) { QByteArray image_data = reply->readAll(); diff --git a/src/covermanager/albumcoverloaderoptions.cpp b/src/covermanager/albumcoverloaderoptions.cpp index 8eb638cbf..70be50414 100644 --- a/src/covermanager/albumcoverloaderoptions.cpp +++ b/src/covermanager/albumcoverloaderoptions.cpp @@ -24,6 +24,8 @@ #include "core/settings.h" #include "settings/coverssettingspage.h" +using namespace Qt::StringLiterals; + AlbumCoverLoaderOptions::AlbumCoverLoaderOptions(const Options _options, const QSize _desired_scaled_size, const qreal _device_pixel_ratio, const Types &_types) : options(_options), desired_scaled_size(_desired_scaled_size), @@ -39,16 +41,16 @@ AlbumCoverLoaderOptions::Types AlbumCoverLoaderOptions::LoadTypes() { const QStringList all_cover_types = QStringList() << QStringLiteral("art_unset") << QStringLiteral("art_embedded") << QStringLiteral("art_manual") << QStringLiteral("art_automatic"); 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 == QLatin1String("art_unset")) { + if (cover_type_str == "art_unset"_L1) { cover_types << AlbumCoverLoaderOptions::Type::Unset; } - else if (cover_type_str == QLatin1String("art_embedded")) { + else if (cover_type_str == "art_embedded"_L1) { cover_types << AlbumCoverLoaderOptions::Type::Embedded; } - else if (cover_type_str == QLatin1String("art_manual")) { + else if (cover_type_str == "art_manual"_L1) { cover_types << AlbumCoverLoaderOptions::Type::Manual; } - else if (cover_type_str == QLatin1String("art_automatic")) { + else if (cover_type_str == "art_automatic"_L1) { cover_types << AlbumCoverLoaderOptions::Type::Automatic; } } diff --git a/src/covermanager/albumcovermanager.cpp b/src/covermanager/albumcovermanager.cpp index bf8fc45e6..817b8f6e4 100644 --- a/src/covermanager/albumcovermanager.cpp +++ b/src/covermanager/albumcovermanager.cpp @@ -95,6 +95,7 @@ #include "ui_albumcovermanager.h" using namespace std::literals::chrono_literals; +using namespace Qt::StringLiterals; namespace { constexpr char kSettingsGroup[] = "CoverManager"; @@ -289,10 +290,10 @@ void AlbumCoverManager::LoadGeometry() { Settings s; s.beginGroup(kSettingsGroup); - if (s.contains(QLatin1String("geometry"))) { + if (s.contains("geometry"_L1)) { restoreGeometry(s.value("geometry").toByteArray()); } - if (s.contains(QLatin1String("splitter_state"))) { + if (s.contains("splitter_state"_L1)) { ui_->splitter->restoreState(s.value("splitter_state").toByteArray()); } else { @@ -402,7 +403,7 @@ void AlbumCoverManager::ArtistChanged(QListWidgetItem *current) { display_text = album_info.album; } else { - display_text = album_info.album_artist + QLatin1String(" - ") + album_info.album; + display_text = album_info.album_artist + " - "_L1 + album_info.album; } AlbumItem *album_item = new AlbumItem(icon_nocover_item_, display_text, ui_->albums); @@ -418,7 +419,7 @@ void AlbumCoverManager::ArtistChanged(QListWidgetItem *current) { album_item->setToolTip(album_info.album); } else { - album_item->setToolTip(album_info.album_artist + QLatin1String(" - ") + album_info.album); + album_item->setToolTip(album_info.album_artist + " - "_L1 + album_info.album); } album_item->setData(Role_ArtEmbedded, album_info.art_embedded); @@ -536,7 +537,7 @@ bool AlbumCoverManager::ShouldHide(const AlbumItem &album_item, const QString &f return false; } - const QStringList query = filter.split(QLatin1Char(' ')); + const QStringList query = filter.split(u' '); for (const QString &s : query) { bool in_text = album_item.text().contains(s, Qt::CaseInsensitive); bool in_albumartist = album_item.data(Role_AlbumArtist).toString().contains(s, Qt::CaseInsensitive); @@ -597,7 +598,7 @@ void AlbumCoverManager::UpdateStatusText() { .arg(fetch_statistics_.missing_images_); if (fetch_statistics_.bytes_transferred_ > 0) { - message += QLatin1String(", ") + tr("%1 transferred").arg(Utilities::PrettySize(fetch_statistics_.bytes_transferred_)); + message += ", "_L1 + tr("%1 transferred").arg(Utilities::PrettySize(fetch_statistics_.bytes_transferred_)); } statusBar()->showMessage(message); @@ -671,7 +672,7 @@ Song AlbumCoverManager::AlbumItemAsSong(AlbumItem *album_item) { QString title = album_item->data(Role_Album).toString(); QString artist_name = album_item->data(Role_AlbumArtist).toString(); if (!artist_name.isEmpty()) { - result.set_title(artist_name + QLatin1String(" - ") + title); + result.set_title(artist_name + " - "_L1 + title); } else { result.set_title(title); diff --git a/src/covermanager/coverexportrunnable.cpp b/src/covermanager/coverexportrunnable.cpp index df9a04915..bfb6f4b43 100644 --- a/src/covermanager/coverexportrunnable.cpp +++ b/src/covermanager/coverexportrunnable.cpp @@ -34,6 +34,8 @@ #include "albumcoverexport.h" #include "coverexportrunnable.h" +using namespace Qt::StringLiterals; + CoverExportRunnable::CoverExportRunnable(const AlbumCoverExport::DialogResult &dialog_result, const AlbumCoverLoaderOptions::Types &cover_types, const Song &song, QObject *parent) : QObject(parent), dialog_result_(dialog_result), @@ -78,7 +80,7 @@ void CoverExportRunnable::ProcessAndExportCover() { if (song_.art_embedded() && dialog_result_.export_embedded_) { const TagReaderClient::Result result = TagReaderClient::Instance()->LoadEmbeddedArtAsImageBlocking(song_.url().toLocalFile(), image); if (result.success() && !image.isNull()) { - extension = QLatin1String("jpg"); + extension = "jpg"_L1; } } break; @@ -86,7 +88,7 @@ void CoverExportRunnable::ProcessAndExportCover() { if (dialog_result_.export_downloaded_ && song_.art_manual_is_valid()) { const QString cover_path = song_.art_manual().toLocalFile(); if (image.load(cover_path)) { - extension = cover_path.section(QLatin1Char('.'), -1); + extension = cover_path.section(u'.', -1); } } break; @@ -94,7 +96,7 @@ void CoverExportRunnable::ProcessAndExportCover() { if (dialog_result_.export_downloaded_ && song_.art_automatic_is_valid()) { const QString cover_path = song_.art_automatic().toLocalFile(); if (image.load(cover_path)) { - extension = cover_path.section(QLatin1Char('.'), -1); + extension = cover_path.section(u'.', -1); } } break; @@ -112,8 +114,8 @@ void CoverExportRunnable::ProcessAndExportCover() { image = image.scaled(QSize(dialog_result_.width_, dialog_result_.height_), Qt::IgnoreAspectRatio); } - QString cover_dir = song_.url().toLocalFile().section(QLatin1Char('/'), 0, -2); - QString new_file = cover_dir + QLatin1Char('/') + dialog_result_.filename_ + QLatin1Char('.') + (song_.art_embedded() ? QLatin1String("jpg") : extension); + QString cover_dir = song_.url().toLocalFile().section(u'/', 0, -2); + QString new_file = cover_dir + QLatin1Char('/') + dialog_result_.filename_ + QLatin1Char('.') + (song_.art_embedded() ? "jpg"_L1 : extension); // If the file exists, do not override! if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode::None && QFile::exists(new_file)) { @@ -171,7 +173,7 @@ void CoverExportRunnable::ExportCover() { const TagReaderClient::Result result = TagReaderClient::Instance()->LoadEmbeddedArtAsImageBlocking(song_.url().toLocalFile(), image); if (result.success() && !image.isNull()) { embedded_cover = true; - extension = QLatin1String("jpg"); + extension = "jpg"_L1; } } break; @@ -179,7 +181,7 @@ void CoverExportRunnable::ExportCover() { if (dialog_result_.export_downloaded_ && song_.art_manual_is_valid()) { cover_path = song_.art_manual().toLocalFile(); if (image.load(cover_path)) { - extension = cover_path.section(QLatin1Char('.'), -1); + extension = cover_path.section(u'.', -1); } } break; @@ -187,7 +189,7 @@ void CoverExportRunnable::ExportCover() { if (dialog_result_.export_downloaded_ && song_.art_automatic_is_valid()) { cover_path = song_.art_automatic().toLocalFile(); if (image.load(cover_path)) { - extension = cover_path.section(QLatin1Char('.'), -1); + extension = cover_path.section(u'.', -1); } } break; @@ -200,7 +202,7 @@ void CoverExportRunnable::ExportCover() { return; } - QString cover_dir = song_.url().toLocalFile().section(QLatin1Char('/'), 0, -2); + QString cover_dir = song_.url().toLocalFile().section(u'/', 0, -2); QString new_file = cover_dir + QLatin1Char('/') + dialog_result_.filename_ + QLatin1Char('.') + extension; // If the file exists, do not override! diff --git a/src/covermanager/coverfromurldialog.cpp b/src/covermanager/coverfromurldialog.cpp index d97e57c98..9418c4404 100644 --- a/src/covermanager/coverfromurldialog.cpp +++ b/src/covermanager/coverfromurldialog.cpp @@ -39,6 +39,8 @@ #include "coverfromurldialog.h" #include "ui_coverfromurldialog.h" +using namespace Qt::StringLiterals; + CoverFromURLDialog::CoverFromURLDialog(SharedPtr network, QWidget *parent) : QDialog(parent), network_(network), @@ -56,7 +58,7 @@ CoverFromURLDialog::~CoverFromURLDialog() { AlbumCoverImageResult CoverFromURLDialog::Exec() { // reset state - ui_->url->setText(QLatin1String("")); + ui_->url->setText(""_L1); last_album_cover_ = AlbumCoverImageResult(); QClipboard *clipboard = QApplication::clipboard(); diff --git a/src/covermanager/deezercoverprovider.cpp b/src/covermanager/deezercoverprovider.cpp index d357868a7..8b3d3e152 100644 --- a/src/covermanager/deezercoverprovider.cpp +++ b/src/covermanager/deezercoverprovider.cpp @@ -48,6 +48,8 @@ #include "jsoncoverprovider.h" #include "deezercoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kApiUrl[] = "https://api.deezer.com"; constexpr int kLimit = 10; @@ -74,14 +76,14 @@ bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &albu QString resource; QString query = artist; if (album.isEmpty() && !title.isEmpty()) { - resource = QLatin1String("search/track"); - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + resource = "search/track"_L1; + if (!query.isEmpty()) query.append(u' '); query.append(title); } else { - resource = QLatin1String("search/album"); + resource = "search/album"_L1; if (!album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(album); } } @@ -130,12 +132,12 @@ QByteArray DeezerCoverProvider::GetReplyData(QNetworkReply *reply) { QString error; if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue value_error = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue value_error = json_obj["error"_L1]; if (value_error.isObject()) { QJsonObject obj_error = value_error.toObject(); - int code = obj_error[QLatin1String("code")].toInt(); - QString message = obj_error[QLatin1String("message")].toString(); + int code = obj_error["code"_L1].toInt(); + QString message = obj_error["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -162,27 +164,27 @@ QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) { QJsonObject json_obj = ExtractJsonObj(data); if (json_obj.isEmpty()) return QJsonObject(); - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue value_error = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue value_error = json_obj["error"_L1]; if (!value_error.isObject()) { Error(QStringLiteral("Error missing object"), json_obj); return QJsonValue(); } QJsonObject obj_error = value_error.toObject(); - const int code = obj_error[QLatin1String("code")].toInt(); - QString message = obj_error[QLatin1String("message")].toString(); + const int code = obj_error["code"_L1].toInt(); + QString message = obj_error["message"_L1].toString(); Error(QStringLiteral("%1 (%2)").arg(message).arg(code)); return QJsonValue(); } - if (!json_obj.contains(QLatin1String("data")) && !json_obj.contains(QLatin1String("DATA"))) { + if (!json_obj.contains("data"_L1) && !json_obj.contains("DATA"_L1)) { Error(QStringLiteral("Json reply object is missing data."), json_obj); return QJsonValue(); } QJsonValue value_data; - if (json_obj.contains(QLatin1String("data"))) value_data = json_obj[QLatin1String("data")]; - else value_data = json_obj[QLatin1String("DATA")]; + if (json_obj.contains("data"_L1)) value_data = json_obj["data"_L1]; + else value_data = json_obj["DATA"_L1]; return value_data; @@ -223,50 +225,50 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) } QJsonObject json_obj = json_value.toObject(); QJsonObject obj_album; - if (json_obj.contains(QLatin1String("album")) && json_obj[QLatin1String("album")].isObject()) { // Song search, so extract the album. - obj_album = json_obj[QLatin1String("album")].toObject(); + if (json_obj.contains("album"_L1) && json_obj["album"_L1].isObject()) { // Song search, so extract the album. + obj_album = json_obj["album"_L1].toObject(); } else { obj_album = json_obj; } - if (!json_obj.contains(QLatin1String("id")) || !obj_album.contains(QLatin1String("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); continue; } - if (!obj_album.contains(QLatin1String("type"))) { + if (!obj_album.contains("type"_L1)) { Error(QStringLiteral("Invalid Json reply, data array value album object is missing type."), obj_album); continue; } - QString type = obj_album[QLatin1String("type")].toString(); - if (type != QLatin1String("album")) { + 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); continue; } - if (!json_obj.contains(QLatin1String("artist"))) { + if (!json_obj.contains("artist"_L1)) { Error(QStringLiteral("Invalid Json reply, data array value object is missing artist."), json_obj); continue; } - QJsonValue value_artist = json_obj[QLatin1String("artist")]; + 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); continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, data array value artist object is missing name."), obj_artist); continue; } - QString artist = obj_artist[QLatin1String("name")].toString(); + QString artist = obj_artist["name"_L1].toString(); - if (!obj_album.contains(QLatin1String("title"))) { + if (!obj_album.contains("title"_L1)) { Error(QStringLiteral("Invalid Json reply, data array value album object is missing title."), obj_album); continue; } - QString album = obj_album[QLatin1String("title")].toString(); + QString album = obj_album["title"_L1].toString(); CoverProviderSearchResult cover_result; cover_result.artist = artist; diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index 89ce866f4..b9cc8eb30 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -50,6 +50,7 @@ #include "jsoncoverprovider.h" #include "discogscoverprovider.h" +using namespace Qt::StringLiterals; using std::make_shared; const char *DiscogsCoverProvider::kUrlSearch = "https://api.discogs.com/database/search"; @@ -163,7 +164,7 @@ QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList &pa url.setQuery(url_query); // Sign the request - const QByteArray data_to_sign = QStringLiteral("GET\n%1\n%2\n%3").arg(url.host(), url.path(), query_items.join(QLatin1Char('&'))).toUtf8(); + const QByteArray data_to_sign = QStringLiteral("GET\n%1\n%2\n%3").arg(url.host(), url.path(), query_items.join(u'&')).toUtf8(); const QByteArray signature(Utilities::HmacSha256(QByteArray::fromBase64(kSecretKeyB64), data_to_sign)); // Add the signature to the request @@ -201,8 +202,8 @@ QByteArray DiscogsCoverProvider::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (json_obj.contains(QLatin1String("message"))) { - error = json_obj[QLatin1String("message")].toString(); + if (json_obj.contains("message"_L1)) { + error = json_obj["message"_L1].toString(); } } if (error.isEmpty()) { @@ -245,11 +246,11 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) } QJsonValue value_results; - if (json_obj.contains(QLatin1String("results"))) { - value_results = json_obj[QLatin1String("results")]; + if (json_obj.contains("results"_L1)) { + value_results = json_obj["results"_L1]; } - else if (json_obj.contains(QLatin1String("message"))) { - QString message = json_obj[QLatin1String("message")].toString(); + else if (json_obj.contains("message"_L1)) { + QString message = json_obj["message"_L1].toString(); Error(QStringLiteral("%1").arg(message)); EndSearch(search); return; @@ -274,15 +275,15 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) continue; } QJsonObject obj_result = value_result.toObject(); - if (!obj_result.contains(QLatin1String("id")) || !obj_result.contains(QLatin1String("title")) || !obj_result.contains(QLatin1String("resource_url"))) { + if (!obj_result.contains("id"_L1) || !obj_result.contains("title"_L1) || !obj_result.contains("resource_url"_L1)) { Error(QStringLiteral("Invalid Json reply, results value object is missing ID, title or resource_url."), obj_result); continue; } - quint64 release_id = obj_result[QLatin1String("id")].toInt(); - QUrl resource_url(obj_result[QLatin1String("resource_url")].toString()); - QString title = obj_result[QLatin1String("title")].toString(); + quint64 release_id = obj_result["id"_L1].toInt(); + QUrl resource_url(obj_result["resource_url"_L1].toString()); + QString title = obj_result["title"_L1].toString(); - if (title.contains(QLatin1String(" - "))) { + if (title.contains(" - "_L1)) { QStringList title_splitted = title.split(QStringLiteral(" - ")); if (title_splitted.count() == 2) { QString artist = title_splitted.first(); @@ -354,18 +355,18 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se return; } - if (!json_obj.contains(QLatin1String("artists")) || !json_obj.contains(QLatin1String("title"))) { + if (!json_obj.contains("artists"_L1) || !json_obj.contains("title"_L1)) { Error(QStringLiteral("Json reply object is missing artists or title."), json_obj); EndSearch(search, release.id); return; } - if (!json_obj.contains(QLatin1String("images"))) { + if (!json_obj.contains("images"_L1)) { EndSearch(search, release.id); return; } - QJsonValue value_artists = json_obj[QLatin1String("artists")]; + QJsonValue value_artists = json_obj["artists"_L1]; if (!value_artists.isArray()) { Error(QStringLiteral("Json reply object artists is not a array."), value_artists); EndSearch(search, release.id); @@ -380,11 +381,11 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, artists array value object is missing name."), obj_artist); continue; } - artist = obj_artist[QLatin1String("name")].toString(); + artist = obj_artist["name"_L1].toString(); ++i; if (artist == search->artist) break; } @@ -393,15 +394,15 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se EndSearch(search, release.id); return; } - if (i > 1 && artist != search->artist) artist = QLatin1String("Various artists"); + if (i > 1 && artist != search->artist) artist = "Various artists"_L1; - QString album = json_obj[QLatin1String("title")].toString(); + QString album = json_obj["title"_L1].toString(); if (artist != search->artist && album != search->album) { EndSearch(search, release.id); return; } - QJsonValue value_images = json_obj[QLatin1String("images")]; + QJsonValue value_images = json_obj["images"_L1]; if (!value_images.isArray()) { Error(QStringLiteral("Json images is not an array.")); EndSearch(search, release.id); @@ -422,23 +423,23 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se continue; } QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("type")) || !obj_image.contains(QLatin1String("resource_url")) || !obj_image.contains(QLatin1String("width")) || !obj_image.contains(QLatin1String("height"))) { + 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); continue; } - QString type = obj_image[QLatin1String("type")].toString(); - if (type != QLatin1String("primary")) { + QString type = obj_image["type"_L1].toString(); + if (type != "primary"_L1) { continue; } - int width = obj_image[QLatin1String("width")].toInt(); - int height = obj_image[QLatin1String("height")].toInt(); + int width = obj_image["width"_L1].toInt(); + int height = obj_image["height"_L1].toInt(); if (width < 300 || height < 300) continue; const float aspect_score = static_cast(1.0) - static_cast(std::max(width, height) - std::min(width, height)) / static_cast(std::max(height, width)); if (aspect_score < 0.85) continue; CoverProviderSearchResult result; result.artist = artist; result.album = album; - result.image_url = QUrl(obj_image[QLatin1String("resource_url")].toString()); + result.image_url = QUrl(obj_image["resource_url"_L1].toString()); if (result.image_url.isEmpty()) continue; search->results.append(result); } diff --git a/src/covermanager/lastfmcoverprovider.cpp b/src/covermanager/lastfmcoverprovider.cpp index 759efc861..5e0dd3b6f 100644 --- a/src/covermanager/lastfmcoverprovider.cpp +++ b/src/covermanager/lastfmcoverprovider.cpp @@ -47,6 +47,8 @@ #include "albumcoverfetcher.h" #include "lastfmcoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrl[] = "https://ws.audioscrobbler.com/2.0/"; constexpr char kApiKey[] = "211990b4c96782c05d1536e7219eb56e"; @@ -75,16 +77,16 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu QString type; QString query = artist; if (album.isEmpty() && !title.isEmpty()) { - method = QLatin1String("track.search"); - type = QLatin1String("track"); - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + method = "track.search"_L1; + type = "track"_L1; + if (!query.isEmpty()) query.append(u' '); query.append(title); } else { - method = QLatin1String("album.search"); - type = QLatin1String("album"); + method = "album.search"_L1; + type = "album"_L1; if (!album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(album); } } @@ -105,7 +107,7 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu data_to_sign += QLatin1String(kSecret); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5); - QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, QLatin1Char('0')).toLower(); + QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower(); url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("api_sig"))), QString::fromLatin1(QUrl::toPercentEncoding(signature))); url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("format"))), QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("json")))); @@ -144,12 +146,12 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons } QJsonValue value_results; - if (json_obj.contains(QLatin1String("results"))) { - value_results = json_obj[QLatin1String("results")]; + if (json_obj.contains("results"_L1)) { + value_results = json_obj["results"_L1]; } - else if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - int error = json_obj[QLatin1String("error")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + else if (json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + int error = json_obj["error"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); Error(QStringLiteral("Error: %1: %2").arg(QString::number(error), message)); Q_EMIT SearchFinished(id, results); return; @@ -175,9 +177,9 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons QJsonValue value_matches; - if (type == QLatin1String("album")) { - if (obj_results.contains(QLatin1String("albummatches"))) { - value_matches = obj_results[QLatin1String("albummatches")]; + if (type == "album"_L1) { + if (obj_results.contains("albummatches"_L1)) { + value_matches = obj_results["albummatches"_L1]; } else { Error(QStringLiteral("Json results object is missing albummatches."), obj_results); @@ -185,9 +187,9 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons return; } } - else if (type == QLatin1String("track")) { - if (obj_results.contains(QLatin1String("trackmatches"))) { - value_matches = obj_results[QLatin1String("trackmatches")]; + else if (type == "track"_L1) { + if (obj_results.contains("trackmatches"_L1)) { + value_matches = obj_results["trackmatches"_L1]; } else { Error(QStringLiteral("Json results object is missing trackmatches."), obj_results); @@ -231,17 +233,17 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons continue; } QJsonObject obj = value.toObject(); - if (!obj.contains(QLatin1String("artist")) || !obj.contains(QLatin1String("image")) || !obj.contains(QLatin1String("name"))) { + 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); continue; } - QString artist = obj[QLatin1String("artist")].toString(); + QString artist = obj["artist"_L1].toString(); QString album; - if (type == QLatin1String("album")) { - album = obj[QLatin1String("name")].toString(); + if (type == "album"_L1) { + album = obj["name"_L1].toString(); } - QJsonValue json_image = obj[QLatin1String("image")]; + QJsonValue json_image = obj["image"_L1]; if (!json_image.isArray()) { Error(QStringLiteral("Invalid Json reply, album image is not a array."), json_image); continue; @@ -255,13 +257,13 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons continue; } QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("#text")) || !obj_image.contains(QLatin1String("size"))) { + 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); continue; } - QString image_url = obj_image[QLatin1String("#text")].toString(); + QString image_url = obj_image["#text"_L1].toString(); if (image_url.isEmpty()) continue; - LastFmImageSize image_size = ImageSizeFromString(obj_image[QLatin1String("size")].toString().toLower()); + LastFmImageSize image_size = ImageSizeFromString(obj_image["size"_L1].toString().toLower()); if (image_url_use.isEmpty() || image_size > image_size_use) { image_url_use = image_url; image_size_use = image_size; @@ -271,8 +273,8 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons if (image_url_use.isEmpty()) continue; // Workaround for API limiting to 300x300 images. - if (image_url_use.contains(QLatin1String("/300x300/"))) { - image_url_use = image_url_use.replace(QLatin1String("/300x300/"), QLatin1String("/740x0/")); + if (image_url_use.contains("/300x300/"_L1)) { + image_url_use = image_url_use.replace("/300x300/"_L1, "/740x0/"_L1); } QUrl url(image_url_use); if (!url.isValid()) continue; @@ -308,10 +310,10 @@ QByteArray LastFmCoverProvider::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("error")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); - error = QLatin1String("Error: ") + QString::number(code) + QLatin1String(": ") + message; + if (json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["error"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); + error = "Error: "_L1 + QString::number(code) + ": "_L1 + message; } } if (error.isEmpty()) { @@ -340,10 +342,10 @@ void LastFmCoverProvider::Error(const QString &error, const QVariant &debug) { LastFmCoverProvider::LastFmImageSize LastFmCoverProvider::ImageSizeFromString(const QString &size) { - if (size == QLatin1String("small")) return LastFmImageSize::Small; - if (size == QLatin1String("medium")) return LastFmImageSize::Medium; - if (size == QLatin1String("large")) return LastFmImageSize::Large; - if (size == QLatin1String("extralarge")) return LastFmImageSize::ExtraLarge; + if (size == "small"_L1) return LastFmImageSize::Small; + if (size == "medium"_L1) return LastFmImageSize::Medium; + if (size == "large"_L1) return LastFmImageSize::Large; + if (size == "extralarge"_L1) return LastFmImageSize::ExtraLarge; return LastFmImageSize::Unknown; diff --git a/src/covermanager/musicbrainzcoverprovider.cpp b/src/covermanager/musicbrainzcoverprovider.cpp index d18579868..01463d2ba 100644 --- a/src/covermanager/musicbrainzcoverprovider.cpp +++ b/src/covermanager/musicbrainzcoverprovider.cpp @@ -44,6 +44,8 @@ #include "jsoncoverprovider.h" #include "musicbrainzcoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kReleaseSearchUrl[] = "https://musicbrainz.org/ws/2/release/"; constexpr char kAlbumCoverUrl[] = "https://coverartarchive.org/release/%1/front"; @@ -91,7 +93,7 @@ bool MusicbrainzCoverProvider::StartSearch(const QString &artist, const QString void MusicbrainzCoverProvider::SendSearchRequest(const SearchRequest &request) { - QString query = QStringLiteral("release:\"%1\" AND artist:\"%2\"").arg(request.album.trimmed().replace(QLatin1Char('"'), QLatin1String("\\\"")), request.artist.trimmed().replace(QLatin1Char('"'), QLatin1String("\\\""))); + 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); @@ -140,9 +142,9 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int return; } - if (!json_obj.contains(QLatin1String("releases"))) { - if (json_obj.contains(QLatin1String("error"))) { - QString error = json_obj[QLatin1String("error")].toString(); + if (!json_obj.contains("releases"_L1)) { + if (json_obj.contains("error"_L1)) { + QString error = json_obj["error"_L1].toString(); Error(error); } else { @@ -151,7 +153,7 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int Q_EMIT SearchFinished(search_id, results); return; } - QJsonValue value_releases = json_obj[QLatin1String("releases")]; + QJsonValue value_releases = json_obj["releases"_L1]; if (!value_releases.isArray()) { Error(QStringLiteral("Json releases is not an array."), value_releases); @@ -172,12 +174,12 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int continue; } QJsonObject obj_release = value_release.toObject(); - if (!obj_release.contains(QLatin1String("id")) || !obj_release.contains(QLatin1String("artist-credit")) || !obj_release.contains(QLatin1String("title"))) { + 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); continue; } - QJsonValue json_artists = obj_release[QLatin1String("artist-credit")]; + 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); continue; @@ -192,28 +194,28 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("artist"))) { + if (!obj_artist.contains("artist"_L1)) { Error(QStringLiteral("Invalid Json reply, artist is missing."), obj_artist); continue; } - QJsonValue value_artist2 = obj_artist[QLatin1String("artist")]; + QJsonValue value_artist2 = obj_artist["artist"_L1]; if (!value_artist2.isObject()) { Error(QStringLiteral("Invalid Json reply, artist is not an object."), value_artist2); continue; } QJsonObject obj_artist2 = value_artist2.toObject(); - if (!obj_artist2.contains(QLatin1String("name"))) { + if (!obj_artist2.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, artist is missing name."), value_artist2); continue; } - artist = obj_artist2[QLatin1String("name")].toString(); + artist = obj_artist2["name"_L1].toString(); ++i; } - if (i > 1) artist = QLatin1String("Various artists"); + if (i > 1) artist = "Various artists"_L1; - QString id = obj_release[QLatin1String("id")].toString(); - QString album = obj_release[QLatin1String("title")].toString(); + QString id = obj_release["id"_L1].toString(); + QString album = obj_release["title"_L1].toString(); CoverProviderSearchResult cover_result; QUrl url(QString::fromLatin1(kAlbumCoverUrl).arg(id)); @@ -247,8 +249,8 @@ QByteArray MusicbrainzCoverProvider::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (json_obj.contains(QLatin1String("error"))) { - error = json_obj[QLatin1String("error")].toString(); + if (json_obj.contains("error"_L1)) { + error = json_obj["error"_L1].toString(); } } if (error.isEmpty()) { diff --git a/src/covermanager/musixmatchcoverprovider.cpp b/src/covermanager/musixmatchcoverprovider.cpp index 20e51fb09..abda0b7d4 100644 --- a/src/covermanager/musixmatchcoverprovider.cpp +++ b/src/covermanager/musixmatchcoverprovider.cpp @@ -40,6 +40,8 @@ #include "jsoncoverprovider.h" #include "musixmatchcoverprovider.h" +using namespace Qt::StringLiterals; + MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, SharedPtr network, QObject *parent) : JsonCoverProvider(QStringLiteral("Musixmatch"), true, false, 1.0, true, false, app, network, parent) {} @@ -107,8 +109,8 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int return; } const QString content = QString::fromUtf8(data); - const QString data_begin = QLatin1String(""); + const QString data_begin = ""_L1; if (!content.contains(data_begin) || !content.contains(data_end)) { Q_EMIT SearchFinished(id, results); return; @@ -162,47 +164,47 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int return; } - if (!obj_data.contains(QLatin1String("props")) || !obj_data[QLatin1String("props")].isObject()) { + if (!obj_data.contains("props"_L1) || !obj_data["props"_L1].isObject()) { Error(QStringLiteral("Json reply is missing props."), obj_data); Q_EMIT SearchFinished(id, results); return; } - obj_data = obj_data[QLatin1String("props")].toObject(); + obj_data = obj_data["props"_L1].toObject(); - if (!obj_data.contains(QLatin1String("pageProps")) || !obj_data[QLatin1String("pageProps")].isObject()) { + if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) { Error(QStringLiteral("Json props is missing pageProps."), obj_data); Q_EMIT SearchFinished(id, results); return; } - obj_data = obj_data[QLatin1String("pageProps")].toObject(); + obj_data = obj_data["pageProps"_L1].toObject(); - if (!obj_data.contains(QLatin1String("data")) || !obj_data[QLatin1String("data")].isObject()) { + if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { Error(QStringLiteral("Json pageProps is missing data."), obj_data); Q_EMIT SearchFinished(id, results); return; } - obj_data = obj_data[QLatin1String("data")].toObject(); + obj_data = obj_data["data"_L1].toObject(); - if (!obj_data.contains(QLatin1String("albumGet")) || !obj_data[QLatin1String("albumGet")].isObject()) { + if (!obj_data.contains("albumGet"_L1) || !obj_data["albumGet"_L1].isObject()) { Error(QStringLiteral("Json data is missing albumGet."), obj_data); Q_EMIT SearchFinished(id, results); return; } - obj_data = obj_data[QLatin1String("albumGet")].toObject(); + obj_data = obj_data["albumGet"_L1].toObject(); - if (!obj_data.contains(QLatin1String("data")) || !obj_data[QLatin1String("data")].isObject()) { + if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { Error(QStringLiteral("Json albumGet reply is missing data."), obj_data); Q_EMIT SearchFinished(id, results); return; } - obj_data = obj_data[QLatin1String("data")].toObject(); + obj_data = obj_data["data"_L1].toObject(); CoverProviderSearchResult result; - if (obj_data.contains(QLatin1String("artistName")) && obj_data[QLatin1String("artistName")].isString()) { - result.artist = obj_data[QLatin1String("artistName")].toString(); + if (obj_data.contains("artistName"_L1) && obj_data["artistName"_L1].isString()) { + result.artist = obj_data["artistName"_L1].toString(); } - if (obj_data.contains(QLatin1String("name")) && obj_data[QLatin1String("name")].isString()) { - result.album = obj_data[QLatin1String("name")].toString(); + if (obj_data.contains("name"_L1) && obj_data["name"_L1].isString()) { + result.album = obj_data["name"_L1].toString(); } if (result.artist.compare(artist, Qt::CaseInsensitive) != 0 && result.album.compare(album, Qt::CaseInsensitive) != 0) { diff --git a/src/covermanager/opentidalcoverprovider.cpp b/src/covermanager/opentidalcoverprovider.cpp index 29da2a47d..1f90f1ab6 100644 --- a/src/covermanager/opentidalcoverprovider.cpp +++ b/src/covermanager/opentidalcoverprovider.cpp @@ -47,6 +47,8 @@ #include "jsoncoverprovider.h" #include "opentidalcoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kSettingsGroup[] = "OpenTidal"; constexpr char kAuthUrl[] = "https://auth.tidal.com/v1/oauth2/token"; @@ -208,21 +210,21 @@ void OpenTidalCoverProvider::LoginFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("access_token")) || - !json_obj.contains(QLatin1String("token_type")) || - !json_obj.contains(QLatin1String("expires_in")) || - !json_obj[QLatin1String("access_token")].isString() || - !json_obj[QLatin1String("token_type")].isString()) { + if (!json_obj.contains("access_token"_L1) || + !json_obj.contains("token_type"_L1) || + !json_obj.contains("expires_in"_L1) || + !json_obj["access_token"_L1].isString() || + !json_obj["token_type"_L1].isString()) { qLog(Error) << "OpenTidal: Invalid login reply."; FinishAllSearches(); return; } have_login_ = true; - token_type_ = json_obj[QLatin1String("token_type")].toString(); - access_token_ = json_obj[QLatin1String("access_token")].toString(); + token_type_ = json_obj["token_type"_L1].toString(); + access_token_ = json_obj["access_token"_L1].toString(); login_time_ = QDateTime::currentSecsSinceEpoch(); - expires_in_ = json_obj[QLatin1String("expires_in")].toInt(); + expires_in_ = json_obj["expires_in"_L1].toInt(); Settings s; s.beginGroup(kSettingsGroup); @@ -285,21 +287,21 @@ QJsonObject OpenTidalCoverProvider::GetJsonObject(QNetworkReply *reply) { return QJsonObject(); } QJsonObject json_obj = ExtractJsonObj(data); - if (json_obj.contains(QLatin1String("errors")) && json_obj[QLatin1String("errors")].isArray()) { - const QJsonArray array = json_obj[QLatin1String("errors")].toArray(); + if (json_obj.contains("errors"_L1) && json_obj["errors"_L1].isArray()) { + const QJsonArray array = json_obj["errors"_L1].toArray(); for (const QJsonValue &value : array) { if (!value.isObject()) continue; QJsonObject obj = value.toObject(); - if (!obj.contains(QLatin1String("category")) || - !obj.contains(QLatin1String("code")) || - !obj.contains(QLatin1String("detail"))) { + if (!obj.contains("category"_L1) || + !obj.contains("code"_L1) || + !obj.contains("detail"_L1)) { continue; } - QString category = obj[QLatin1String("category")].toString(); - QString code = obj[QLatin1String("code")].toString(); - QString detail = obj[QLatin1String("detail")].toString(); + QString category = obj["category"_L1].toString(); + QString code = obj["code"_L1].toString(); + QString detail = obj["detail"_L1].toString(); qLog(Error) << "OpenTidal:" << category << code << detail; - if (category == QLatin1String("AUTHENTICATION_ERROR")) { + if (category == "AUTHENTICATION_ERROR"_L1) { LoginCheck(); } } @@ -320,11 +322,11 @@ void OpenTidalCoverProvider::SendSearchRequest(SearchRequestPtr search_request) QString query = search_request->artist; if (!search_request->album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(search_request->album); } else if (!search_request->title.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(search_request->title); } @@ -332,7 +334,7 @@ void OpenTidalCoverProvider::SendSearchRequest(SearchRequestPtr search_request) 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")); - QUrl url(QLatin1String(kApiUrl) + QLatin1String("/search")); + QUrl url(QLatin1String(kApiUrl) + "/search"_L1); url.setQuery(url_query); QNetworkRequest req(url); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); @@ -363,13 +365,13 @@ void OpenTidalCoverProvider::HandleSearchReply(QNetworkReply *reply, SearchReque return; } - if (!json_obj.contains(QLatin1String("albums")) || !json_obj[QLatin1String("albums")].isArray()) { + if (!json_obj.contains("albums"_L1) || !json_obj["albums"_L1].isArray()) { qLog(Debug) << "OpenTidal: Json object is missing albums."; Q_EMIT SearchFinished(search_request->id, CoverProviderSearchResults()); return; } - const QJsonArray array_albums = json_obj[QLatin1String("albums")].toArray(); + const QJsonArray array_albums = json_obj["albums"_L1].toArray(); if (array_albums.isEmpty()) { Q_EMIT SearchFinished(search_request->id, CoverProviderSearchResults()); return; @@ -385,55 +387,55 @@ void OpenTidalCoverProvider::HandleSearchReply(QNetworkReply *reply, SearchReque } QJsonObject obj_album = value_album.toObject(); - if (!obj_album.contains(QLatin1String("resource")) || !obj_album[QLatin1String("resource")].isObject()) { + if (!obj_album.contains("resource"_L1) || !obj_album["resource"_L1].isObject()) { qLog(Debug) << "OpenTidal: Invalid Json reply: Albums array album is missing resource object."; continue; } - QJsonObject obj_resource = obj_album[QLatin1String("resource")].toObject(); + QJsonObject obj_resource = obj_album["resource"_L1].toObject(); - if (!obj_resource.contains(QLatin1String("artists")) || !obj_resource[QLatin1String("artists")].isArray()) { + if (!obj_resource.contains("artists"_L1) || !obj_resource["artists"_L1].isArray()) { qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing artists array."; continue; } - if (!obj_resource.contains(QLatin1String("title")) || !obj_resource[QLatin1String("title")].isString()) { + if (!obj_resource.contains("title"_L1) || !obj_resource["title"_L1].isString()) { qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing title."; continue; } - if (!obj_resource.contains(QLatin1String("imageCover")) || !obj_resource[QLatin1String("imageCover")].isArray()) { + if (!obj_resource.contains("imageCover"_L1) || !obj_resource["imageCover"_L1].isArray()) { qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing imageCover array."; continue; } QString artist; - const QString album = obj_resource[QLatin1String("title")].toString(); + const QString album = obj_resource["title"_L1].toString(); - const QJsonArray array_artists = obj_resource[QLatin1String("artists")].toArray(); + const QJsonArray array_artists = obj_resource["artists"_L1].toArray(); for (const QJsonValue &value_artist : array_artists) { if (!value_artist.isObject()) { continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("name"_L1)) { continue; } - artist = obj_artist[QLatin1String("name")].toString(); + artist = obj_artist["name"_L1].toString(); break; } - const QJsonArray array_covers = obj_resource[QLatin1String("imageCover")].toArray(); + const QJsonArray array_covers = obj_resource["imageCover"_L1].toArray(); for (const QJsonValue &value_cover : array_covers) { if (!value_cover.isObject()) { continue; } QJsonObject obj_cover = value_cover.toObject(); - if (!obj_cover.contains(QLatin1String("url")) || !obj_cover.contains(QLatin1String("width")) || !obj_cover.contains(QLatin1String("height"))) { + if (!obj_cover.contains("url"_L1) || !obj_cover.contains("width"_L1) || !obj_cover.contains("height"_L1)) { continue; } - const QUrl url(obj_cover[QLatin1String("url")].toString()); - const int width = obj_cover[QLatin1String("width")].toInt(); - const int height = obj_cover[QLatin1String("height")].toInt(); + const QUrl url(obj_cover["url"_L1].toString()); + const int width = obj_cover["width"_L1].toInt(); + const int height = obj_cover["height"_L1].toInt(); if (!url.isValid()) continue; if (width < 640 || height < 640) continue; CoverProviderSearchResult cover_result; diff --git a/src/covermanager/qobuzcoverprovider.cpp b/src/covermanager/qobuzcoverprovider.cpp index bff615f4c..35b60cebc 100644 --- a/src/covermanager/qobuzcoverprovider.cpp +++ b/src/covermanager/qobuzcoverprovider.cpp @@ -47,6 +47,8 @@ #include "jsoncoverprovider.h" #include "qobuzcoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kLimit = 10; } @@ -73,14 +75,14 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album QString resource; QString query = artist; if (album.isEmpty() && !title.isEmpty()) { - resource = QLatin1String("track/search"); - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + resource = "track/search"_L1; + if (!query.isEmpty()) query.append(u' '); query.append(title); } else { - resource = QLatin1String("album/search"); + resource = "album/search"_L1; if (!album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(album); } } @@ -134,9 +136,9 @@ QByteArray QobuzCoverProvider::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &parse_error); if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -179,11 +181,11 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { } QJsonValue value_type; - if (json_obj.contains(QLatin1String("albums"))) { - value_type = json_obj[QLatin1String("albums")]; + if (json_obj.contains("albums"_L1)) { + value_type = json_obj["albums"_L1]; } - else if (json_obj.contains(QLatin1String("tracks"))) { - value_type = json_obj[QLatin1String("tracks")]; + else if (json_obj.contains("tracks"_L1)) { + value_type = json_obj["tracks"_L1]; } else { Error(QStringLiteral("Json reply is missing albums and tracks object."), json_obj); @@ -198,12 +200,12 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { } QJsonObject obj_type = value_type.toObject(); - if (!obj_type.contains(QLatin1String("items"))) { + if (!obj_type.contains("items"_L1)) { Error(QStringLiteral("Json albums or tracks object does not contain items."), obj_type); Q_EMIT SearchFinished(id, results); return; } - QJsonValue value_items = obj_type[QLatin1String("items")]; + 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); @@ -221,49 +223,49 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { QJsonObject item_obj = value.toObject(); QJsonObject obj_album; - if (item_obj.contains(QLatin1String("album"))) { - if (!item_obj[QLatin1String("album")].isObject()) { + 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); continue; } - obj_album = item_obj[QLatin1String("album")].toObject(); + obj_album = item_obj["album"_L1].toObject(); } else { obj_album = item_obj; } - if (!obj_album.contains(QLatin1String("artist")) || !obj_album.contains(QLatin1String("image")) || !obj_album.contains(QLatin1String("title"))) { + 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); continue; } - QString album = obj_album[QLatin1String("title")].toString(); + QString album = obj_album["title"_L1].toString(); // Artist - QJsonValue value_artist = obj_album[QLatin1String("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); continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, items (album) artist is missing name."), obj_artist); continue; } - QString artist = obj_artist[QLatin1String("name")].toString(); + QString artist = obj_artist["name"_L1].toString(); // Image - QJsonValue value_image = obj_album[QLatin1String("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); continue; } QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("large"))) { + if (!obj_image.contains("large"_L1)) { Error(QStringLiteral("Invalid Json reply, items (album) image is missing large."), obj_image); continue; } - QUrl cover_url(obj_image[QLatin1String("large")].toString()); + QUrl cover_url(obj_image["large"_L1].toString()); CoverProviderSearchResult cover_result; cover_result.artist = artist; diff --git a/src/covermanager/spotifycoverprovider.cpp b/src/covermanager/spotifycoverprovider.cpp index 6ece328aa..76d473ff9 100644 --- a/src/covermanager/spotifycoverprovider.cpp +++ b/src/covermanager/spotifycoverprovider.cpp @@ -52,6 +52,8 @@ #include "jsoncoverprovider.h" #include "spotifycoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kApiUrl[] = "https://api.spotify.com/v1"; constexpr int kLimit = 10; @@ -82,16 +84,16 @@ bool SpotifyCoverProvider::StartSearch(const QString &artist, const QString &alb QString extract; QString query = artist; if (album.isEmpty() && !title.isEmpty()) { - type = QLatin1String("track"); - extract = QLatin1String("tracks"); - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + type = "track"_L1; + extract = "tracks"_L1; + if (!query.isEmpty()) query.append(u' '); query.append(title); } else { - type = QLatin1String("album"); - extract = QLatin1String("albums"); + type = "album"_L1; + extract = "albums"_L1; if (!album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(album); } } @@ -141,11 +143,11 @@ QByteArray SpotifyCoverProvider::GetReplyData(QNetworkReply *reply) { QString error; if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error")) && json_obj[QLatin1String("error")].isObject()) { - QJsonObject obj_error = json_obj[QLatin1String("error")].toObject(); - if (obj_error.contains(QLatin1String("status")) && obj_error.contains(QLatin1String("message"))) { - int status = obj_error[QLatin1String("status")].toInt(); - QString message = obj_error[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("error"_L1) && json_obj["error"_L1].isObject()) { + QJsonObject obj_error = json_obj["error"_L1].toObject(); + if (obj_error.contains("status"_L1) && obj_error.contains("message"_L1)) { + int status = obj_error["status"_L1].toInt(); + QString message = obj_error["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(message).arg(status); if (status == 401) Deauthenticate(); } @@ -195,13 +197,13 @@ void SpotifyCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id, } json_obj = json_obj[extract].toObject(); - if (!json_obj.contains(QLatin1String("items")) || !json_obj[QLatin1String("items")].isArray()) { + if (!json_obj.contains("items"_L1) || !json_obj["items"_L1].isArray()) { Error(QStringLiteral("%1 object is missing items array.").arg(extract), json_obj); Q_EMIT SearchFinished(id, CoverProviderSearchResults()); return; } - const QJsonArray array_items = json_obj[QLatin1String("items")].toArray(); + const QJsonArray array_items = json_obj["items"_L1].toArray(); if (array_items.isEmpty()) { Q_EMIT SearchFinished(id, CoverProviderSearchResults()); return; @@ -216,33 +218,33 @@ void SpotifyCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id, QJsonObject obj_item = value_item.toObject(); QJsonObject obj_album = obj_item; - if (obj_item.contains(QLatin1String("album")) && obj_item[QLatin1String("album")].isObject()) { - obj_album = obj_item[QLatin1String("album")].toObject(); + if (obj_item.contains("album"_L1) && obj_item["album"_L1].isObject()) { + obj_album = obj_item["album"_L1].toObject(); } - if (!obj_album.contains(QLatin1String("artists")) || !obj_album.contains(QLatin1String("name")) || !obj_album.contains(QLatin1String("images")) || !obj_album[QLatin1String("artists")].isArray() || !obj_album[QLatin1String("images")].isArray()) { + if (!obj_album.contains("artists"_L1) || !obj_album.contains("name"_L1) || !obj_album.contains("images"_L1) || !obj_album["artists"_L1].isArray() || !obj_album["images"_L1].isArray()) { continue; } - const QJsonArray array_artists = obj_album[QLatin1String("artists")].toArray(); - const QJsonArray array_images = obj_album[QLatin1String("images")].toArray(); - QString album = obj_album[QLatin1String("name")].toString(); + const QJsonArray array_artists = obj_album["artists"_L1].toArray(); + const QJsonArray array_images = obj_album["images"_L1].toArray(); + QString album = obj_album["name"_L1].toString(); QStringList artists; for (const QJsonValue &value_artist : array_artists) { if (!value_artist.isObject()) continue; QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) continue; - artists << obj_artist[QLatin1String("name")].toString(); + if (!obj_artist.contains("name"_L1)) continue; + artists << obj_artist["name"_L1].toString(); } for (const QJsonValue &value_image : array_images) { if (!value_image.isObject()) continue; QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("url")) || !obj_image.contains(QLatin1String("width")) || !obj_image.contains(QLatin1String("height"))) continue; - int width = obj_image[QLatin1String("width")].toInt(); - int height = obj_image[QLatin1String("height")].toInt(); + if (!obj_image.contains("url"_L1) || !obj_image.contains("width"_L1) || !obj_image.contains("height"_L1)) continue; + int width = obj_image["width"_L1].toInt(); + int height = obj_image["height"_L1].toInt(); if (width < 300 || height < 300) continue; - QUrl url(obj_image[QLatin1String("url")].toString()); + QUrl url(obj_image["url"_L1].toString()); CoverProviderSearchResult result; result.album = album; result.image_url = url; diff --git a/src/covermanager/tidalcoverprovider.cpp b/src/covermanager/tidalcoverprovider.cpp index 10e7e4d23..37592f3e6 100644 --- a/src/covermanager/tidalcoverprovider.cpp +++ b/src/covermanager/tidalcoverprovider.cpp @@ -45,6 +45,8 @@ #include "jsoncoverprovider.h" #include "tidalcoverprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kLimit = 10; } @@ -73,14 +75,14 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album QString resource; QString query = artist; if (album.isEmpty() && !title.isEmpty()) { - resource = QLatin1String("search/tracks"); - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + resource = "search/tracks"_L1; + if (!query.isEmpty()) query.append(u' '); query.append(title); } else { - resource = QLatin1String("search/albums"); + resource = "search/albums"_L1; if (!album.isEmpty()) { - if (!query.isEmpty()) query.append(QLatin1Char(' ')); + if (!query.isEmpty()) query.append(u' '); query.append(album); } } @@ -134,10 +136,10 @@ QByteArray TidalCoverProvider::GetReplyData(QNetworkReply *reply) { QString error; if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("userMessage"))) { - status = json_obj[QLatin1String("status")].toInt(); - sub_status = json_obj[QLatin1String("subStatus")].toInt(); - QString user_message = json_obj[QLatin1String("userMessage")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("userMessage"_L1)) { + status = json_obj["status"_L1].toInt(); + sub_status = json_obj["subStatus"_L1].toInt(); + QString user_message = json_obj["userMessage"_L1].toString(); error = QStringLiteral("%1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status); } } @@ -180,12 +182,12 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { return; } - if (!json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object is missing items."), json_obj); Q_EMIT SearchFinished(id, CoverProviderSearchResults()); return; } - QJsonValue value_items = json_obj[QLatin1String("items")]; + QJsonValue value_items = json_obj["items"_L1]; if (!value_items.isArray()) { Q_EMIT SearchFinished(id, CoverProviderSearchResults()); @@ -207,25 +209,25 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { } QJsonObject obj_item = value_item.toObject(); - if (!obj_item.contains(QLatin1String("artist"))) { + if (!obj_item.contains("artist"_L1)) { Error(QStringLiteral("Invalid Json reply, items array item is missing artist."), obj_item); continue; } - QJsonValue value_artist = obj_item[QLatin1String("artist")]; + 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); continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, items array item artist is missing name."), obj_artist); continue; } - QString artist = obj_artist[QLatin1String("name")].toString(); + QString artist = obj_artist["name"_L1].toString(); QJsonObject obj_album; - if (obj_item.contains(QLatin1String("album"))) { - QJsonValue value_album = obj_item[QLatin1String("album")]; + if (obj_item.contains("album"_L1)) { + QJsonValue value_album = obj_item["album"_L1]; if (value_album.isObject()) { obj_album = value_album.toObject(); } @@ -238,12 +240,12 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { obj_album = obj_item; } - if (!obj_album.contains(QLatin1String("title")) || !obj_album.contains(QLatin1String("cover"))) { + 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); continue; } - QString album = obj_album[QLatin1String("title")].toString(); - QString cover = obj_album[QLatin1String("cover")].toString().replace(QLatin1String("-"), QLatin1String("/")); + QString album = obj_album["title"_L1].toString(); + QString cover = obj_album["cover"_L1].toString().replace("-"_L1, "/"_L1); CoverProviderSearchResult cover_result; cover_result.artist = artist; diff --git a/src/device/connecteddevice.cpp b/src/device/connecteddevice.cpp index 51ca93c1c..f4ddfd010 100644 --- a/src/device/connecteddevice.cpp +++ b/src/device/connecteddevice.cpp @@ -38,6 +38,7 @@ #include "devicemanager.h" #include "deviceinfo.h" +using namespace Qt::StringLiterals; using std::make_shared; ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, SharedPtr manager, Application *app, const int database_id, const bool first_time, QObject *parent) @@ -60,7 +61,7 @@ ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QS backend_->moveToThread(app_->database()->thread()); qLog(Debug) << &*backend_ << "for device" << unique_id_ << "moved to thread" << app_->database()->thread(); - if (url_.scheme() != QLatin1String("cdda")) { + if (url_.scheme() != "cdda"_L1) { QObject::connect(&*backend_, &CollectionBackend::TotalSongCountUpdated, this, &ConnectedDevice::BackendTotalSongCountUpdated); } diff --git a/src/device/devicedatabasebackend.cpp b/src/device/devicedatabasebackend.cpp index 9309384b4..3fd1f6b12 100644 --- a/src/device/devicedatabasebackend.cpp +++ b/src/device/devicedatabasebackend.cpp @@ -38,6 +38,8 @@ #include "core/scopedtransaction.h" #include "devicedatabasebackend.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kDeviceSchemaVersion = 5; } @@ -144,13 +146,13 @@ int DeviceDatabaseBackend::AddDevice(const Device &device) { int id = q.lastInsertId().toInt(); // Create the songs tables for the device - QString filename(QLatin1String(":/schema/device-schema.sql")); + QString filename(":/schema/device-schema.sql"_L1); QFile schema_file(filename); if (!schema_file.open(QIODevice::ReadOnly)) { qFatal("Couldn't open schema file %s: %s", filename.toUtf8().constData(), schema_file.errorString().toUtf8().constData()); } QString schema = QString::fromUtf8(schema_file.readAll()); - schema.replace(QLatin1String("%deviceid"), QString::number(id)); + schema.replace("%deviceid"_L1, QString::number(id)); db_->ExecSchemaCommands(db, schema, 0, true); diff --git a/src/device/deviceinfo.cpp b/src/device/deviceinfo.cpp index 1398a8778..5ee3445b8 100644 --- a/src/device/deviceinfo.cpp +++ b/src/device/deviceinfo.cpp @@ -34,6 +34,8 @@ #include "devicedatabasebackend.h" #include "deviceinfo.h" +using namespace Qt::StringLiterals; + DeviceDatabaseBackend::Device DeviceInfo::SaveToDb() const { DeviceDatabaseBackend::Device ret; @@ -49,7 +51,7 @@ DeviceDatabaseBackend::Device DeviceInfo::SaveToDb() const { for (const Backend &backend : backends_) { unique_ids << backend.unique_id_; } - ret.unique_id_ = unique_ids.join(QLatin1Char(',')); + ret.unique_id_ = unique_ids.join(u','); return ret; @@ -64,7 +66,7 @@ void DeviceInfo::InitFromDb(const DeviceDatabaseBackend::Device &dev) { transcode_format_ = dev.transcode_format_; icon_name_ = dev.icon_name_; - const QStringList unique_ids = dev.unique_id_.split(QLatin1Char(',')); + const QStringList unique_ids = dev.unique_id_.split(u','); for (const QString &id : unique_ids) { backends_ << Backend(nullptr, id); } @@ -90,7 +92,7 @@ const DeviceInfo::Backend *DeviceInfo::BestBackend() const { void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) { - icon_name_ = QLatin1String("device"); + icon_name_ = "device"_L1; if (icons.isEmpty()) { icon_ = IconLoader::Load(icon_name_); @@ -121,10 +123,10 @@ void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) { QString icon_name = icon.toString(); if (!icon_name.isEmpty()) { QString hint = icons.first().toString().toLower() + name_hint.toLower(); - if (hint.contains(QLatin1String("phone"))) icon_name_ = QLatin1String("device-phone"); - else if (hint.contains(QLatin1String("ipod")) || hint.contains(QLatin1String("apple"))) icon_name_ = QLatin1String("device-ipod"); - else if ((hint.contains(QLatin1String("usb"))) && (hint.contains(QLatin1String("reader")))) icon_name_ = QLatin1String("device-usb-flash"); - else if (hint.contains(QLatin1String("usb"))) icon_name_ = QLatin1String("device-usb-drive"); + if (hint.contains("phone"_L1)) icon_name_ = "device-phone"_L1; + else if (hint.contains("ipod"_L1) || hint.contains("apple"_L1)) icon_name_ = "device-ipod"_L1; + else if ((hint.contains("usb"_L1)) && (hint.contains("reader"_L1))) icon_name_ = "device-usb-flash"_L1; + else if (hint.contains("usb"_L1)) icon_name_ = "device-usb-drive"_L1; icon_ = IconLoader::Load(icon_name_); if (!icon_.isNull()) { return; @@ -133,7 +135,7 @@ void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) { } } - icon_name_ = QLatin1String("device"); + icon_name_ = "device"_L1; icon_ = IconLoader::Load(icon_name_); } diff --git a/src/device/devicelister.cpp b/src/device/devicelister.cpp index f4c1a1397..cea3e1822 100644 --- a/src/device/devicelister.cpp +++ b/src/device/devicelister.cpp @@ -37,6 +37,8 @@ #include "core/logging.h" +using namespace Qt::StringLiterals; + DeviceLister::DeviceLister(QObject *parent) : QObject(parent), thread_(nullptr), @@ -226,9 +228,9 @@ QUrl DeviceLister::MakeUrlFromLocalPath(const QString &path) const { } bool DeviceLister::IsIpod(const QString &path) { - return QFile::exists(path + QLatin1String("/iTunes_Control")) || - QFile::exists(path + QLatin1String("/iPod_Control")) || - QFile::exists(path + QLatin1String("/iTunes/iTunes_Control")); + return QFile::exists(path + "/iTunes_Control"_L1) || + QFile::exists(path + "/iPod_Control"_L1) || + QFile::exists(path + "/iTunes/iTunes_Control"_L1); } QVariantList DeviceLister::GuessIconForPath(const QString &path) { @@ -277,7 +279,7 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) { QVariantList DeviceLister::GuessIconForModel(const QString &vendor, const QString &model) { QVariantList ret; - if (vendor.startsWith(QLatin1String("Google")) && model.contains(QLatin1String("Nexus"))) { + if (vendor.startsWith("Google"_L1) && model.contains("Nexus"_L1)) { ret << QStringLiteral("phone-google-nexus-one"); } return ret; diff --git a/src/device/devicemanager.cpp b/src/device/devicemanager.cpp index 6a68d1f21..911500ba0 100644 --- a/src/device/devicemanager.cpp +++ b/src/device/devicemanager.cpp @@ -84,6 +84,7 @@ # include "gpoddevice.h" #endif +using namespace Qt::StringLiterals; using std::make_unique; const int DeviceManager::kDeviceIconSize = 32; @@ -244,7 +245,7 @@ void DeviceManager::LoadAllDevices() { void DeviceManager::AddDeviceFromDB(DeviceInfo *info) { - const QStringList icon_names = info->icon_name_.split(QLatin1Char(',')); + const QStringList icon_names = info->icon_name_.split(u','); QVariantList icons; icons.reserve(icon_names.count()); for (const QString &icon_name : icon_names) { @@ -603,7 +604,7 @@ SharedPtr DeviceManager::Connect(DeviceInfo *info) { // If we get here it means that this URL scheme wasn't supported. // If it was "ipod" or "mtp" then the user compiled out support and the device won't work properly. - if (url.scheme() == QLatin1String("mtp") || url.scheme() == QLatin1String("gphoto2")) { + 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("If you continue, this device will work slowly and songs copied to it may not work."), @@ -611,9 +612,9 @@ SharedPtr DeviceManager::Connect(DeviceInfo *info) { return ret; } - if (url.scheme() == QLatin1String("ipod")) { + if (url.scheme() == "ipod"_L1) { if (QMessageBox::critical(nullptr, tr("This device will not work properly"), - tr("This is an iPod, but you compiled Strawberry without libgpod support.") + QLatin1String(" ") + + tr("This is an iPod, but you compiled Strawberry without libgpod support.") + " "_L1 + 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; @@ -628,7 +629,7 @@ SharedPtr DeviceManager::Connect(DeviceInfo *info) { url_strings << url.toString(); } - app_->AddError(tr("This type of device is not supported: %1").arg(url_strings.join(QLatin1String(", ")))); + app_->AddError(tr("This type of device is not supported: %1").arg(url_strings.join(", "_L1))); return ret; } diff --git a/src/device/deviceview.cpp b/src/device/deviceview.cpp index ff57616d2..2d8230ea6 100644 --- a/src/device/deviceview.cpp +++ b/src/device/deviceview.cpp @@ -67,6 +67,7 @@ #include "deviceproperties.h" #include "deviceview.h" +using namespace Qt::StringLiterals; using std::make_unique; const int DeviceItemDelegate::kIconPadding = 6; @@ -143,7 +144,7 @@ void DeviceItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op QVariant song_count = idx.data(DeviceManager::Role_SongCount); if (song_count.isValid()) { int count = song_count.toInt(); - status_text = tr("%1 song%2").arg(count).arg(count == 1 ? QLatin1String("") : QLatin1String("s")); + status_text = tr("%1 song%2").arg(count).arg(count == 1 ? ""_L1 : "s"_L1); } else { status_text = idx.data(DeviceManager::Role_MountPath).toString(); diff --git a/src/device/giolister.cpp b/src/device/giolister.cpp index 04e73686f..bb3280b5f 100644 --- a/src/device/giolister.cpp +++ b/src/device/giolister.cpp @@ -47,6 +47,8 @@ #include "devicelister.h" #include "giolister.h" +using namespace Qt::StringLiterals; + QString GioLister::DeviceInfo::unique_id() const { if (!volume_root_uri.isEmpty()) return volume_root_uri; @@ -69,7 +71,7 @@ bool GioLister::DeviceInfo::is_suitable() const { if (filesystem_type.isEmpty()) return true; - return filesystem_type != QLatin1String("udf") && filesystem_type != QLatin1String("smb") && filesystem_type != QLatin1String("cifs") && filesystem_type != QLatin1String("ssh") && filesystem_type != QLatin1String("isofs"); + return filesystem_type != "udf"_L1 && filesystem_type != "smb"_L1 && filesystem_type != "cifs"_L1 && filesystem_type != "ssh"_L1 && filesystem_type != "isofs"_L1; } @@ -295,12 +297,12 @@ void GioLister::VolumeAdded(GVolume *volume) { DeviceInfo info; info.ReadVolumeInfo(volume); - if (info.volume_root_uri.startsWith(QLatin1String("afc://")) || info.volume_root_uri.startsWith(QLatin1String("gphoto2://"))) { + if (info.volume_root_uri.startsWith("afc://"_L1) || info.volume_root_uri.startsWith("gphoto2://"_L1)) { // Handled by iLister. return; } #ifdef HAVE_AUDIOCD - if (info.volume_root_uri.startsWith(QLatin1String("cdda"))) { + if (info.volume_root_uri.startsWith("cdda"_L1)) { // Audio CD devices are already handled by CDDA lister return; } @@ -339,12 +341,12 @@ void GioLister::MountAdded(GMount *mount) { DeviceInfo info; info.ReadVolumeInfo(g_mount_get_volume(mount)); - if (info.volume_root_uri.startsWith(QLatin1String("afc://")) || info.volume_root_uri.startsWith(QLatin1String("gphoto2://"))) { + if (info.volume_root_uri.startsWith("afc://"_L1) || info.volume_root_uri.startsWith("gphoto2://"_L1)) { // Handled by iLister. return; } #ifdef HAVE_AUDIOCD - if (info.volume_root_uri.startsWith(QLatin1String("cdda"))) { + if (info.volume_root_uri.startsWith("cdda"_L1)) { // Audio CD devices are already handled by CDDA lister return; } @@ -506,7 +508,7 @@ void GioLister::DeviceInfo::ReadMountInfo(GMount *mount) { // Query the file's info for a filesystem ID // Only afc devices (that I know of) give reliably unique IDs - if (filesystem_type == QLatin1String("afc")) { + if (filesystem_type == "afc"_L1) { error = nullptr; info = g_file_query_info(root, G_FILE_ATTRIBUTE_ID_FILESYSTEM, G_FILE_QUERY_INFO_NONE, nullptr, &error); if (error) { @@ -580,7 +582,7 @@ void GioLister::UpdateDeviceFreeSpace(const QString &id) { { QMutexLocker l(&mutex_); - if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_.value(id).volume_root_uri.startsWith(QLatin1String("mtp://"))) return; + if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_.value(id).volume_root_uri.startsWith("mtp://"_L1)) return; GFile *root = g_mount_get_root(devices_.value(id).mount_ptr); @@ -605,7 +607,7 @@ void GioLister::UpdateDeviceFreeSpace(const QString &id) { bool GioLister::DeviceNeedsMount(const QString &id) { QMutexLocker l(&mutex_); - return devices_.contains(id) && !devices_[id].mount_ptr && !devices_[id].volume_root_uri.startsWith(QLatin1String("mtp://")) && !devices_[id].volume_root_uri.startsWith(QLatin1String("gphoto2://")); + return devices_.contains(id) && !devices_[id].mount_ptr && !devices_[id].volume_root_uri.startsWith("mtp://"_L1) && !devices_[id].volume_root_uri.startsWith("gphoto2://"_L1); } @@ -632,7 +634,7 @@ void GioLister::MountDevice(const QString &id, const int request_id) { void GioLister::UnmountDevice(const QString &id) { QMutexLocker l(&mutex_); - if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_.value(id).volume_root_uri.startsWith(QLatin1String("mtp://"))) return; + if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_.value(id).volume_root_uri.startsWith("mtp://"_L1)) return; const DeviceInfo device_info = devices_.value(id); diff --git a/src/device/gpoddevice.cpp b/src/device/gpoddevice.cpp index 3c591afc1..eee333c9b 100644 --- a/src/device/gpoddevice.cpp +++ b/src/device/gpoddevice.cpp @@ -325,10 +325,10 @@ bool GPodDevice::RemoveTrackFromITunesDb(const QString &path, const QString &rel QString ipod_filename = path; if (!relative_to.isEmpty() && path.startsWith(relative_to)) { - ipod_filename.remove(0, relative_to.length() + (relative_to.endsWith(QLatin1Char('/')) ? -1 : 0)); + ipod_filename.remove(0, relative_to.length() + (relative_to.endsWith(u'/') ? -1 : 0)); } - ipod_filename.replace(QLatin1Char('/'), QLatin1Char(':')); + ipod_filename.replace(u'/', u':'); // Find the track in the itdb, identify it by its filename Itdb_Track *track = nullptr; diff --git a/src/device/macosdevicelister.mm b/src/device/macosdevicelister.mm index 75b42301f..dbc55107c 100644 --- a/src/device/macosdevicelister.mm +++ b/src/device/macosdevicelister.mm @@ -53,6 +53,8 @@ #import #import +using namespace Qt::Literals::StringLiterals; + #ifndef kUSBSerialNumberString #define kUSBSerialNumberString "USB Serial Number" #endif @@ -134,9 +136,9 @@ bool MacOsDeviceLister::Init() { } MTPDevice d; - d.vendor = QLatin1String("SanDisk"); + d.vendor = "SanDisk"_L1; d.vendor_id = 0x781; - d.product = QLatin1String("Sansa Clip+"); + d.product = "Sansa Clip+"_L1; d.product_id = 0x74d0; d.quirks = 0x2 | 0x4 | 0x40 | 0x4000; @@ -299,7 +301,7 @@ QString GetIconForDevice(io_object_t device) { scoped_nsobject bundle_url(reinterpret_cast(KextManagerCreateURLForBundleIdentifier(kCFAllocatorDefault, reinterpret_cast(bundle)))); QString path = QString::fromUtf8([[bundle_url path] UTF8String]); - path += QLatin1String("/Contents/Resources/"); + path += "/Contents/Resources/"_L1; path += QString::fromUtf8([file UTF8String]); return path; } @@ -312,7 +314,7 @@ QString GetSerialForDevice(io_object_t device) { const QString serial = GetUSBRegistryEntryString(device, CFSTR(kUSBSerialNumberString)); if (!serial.isEmpty()) { - return QLatin1String("USB/") + serial; + return "USB/"_L1 + serial; } return QString(); @@ -322,7 +324,7 @@ QString GetSerialForDevice(io_object_t device) { QString GetSerialForMTPDevice(io_object_t device) { scoped_nsobject serial(reinterpret_cast(GetPropertyForDevice(device, CFSTR(kUSBSerialNumberString)))); - return QLatin1String("MTP/") + QString::fromUtf8([serial UTF8String]); + return "MTP/"_L1 + QString::fromUtf8([serial UTF8String]); } @@ -596,14 +598,14 @@ void MacOsDeviceLister::USBDeviceAddedCallback(void *refcon, io_iterator_t it) { // Because this was designed by MS, the characters are in UTF-16 (LE?). QString str = QString::fromUtf16(reinterpret_cast(data.data() + 2), (data.size() / 2) - 2); - if (str.startsWith(QLatin1String("MSFT100"))) { + if (str.startsWith("MSFT100"_L1)) { // We got the OS descriptor! char vendor_code = data[16]; ret = DeviceRequest(dev, kUSBIn, kUSBVendor, kUSBDevice, vendor_code, 0, 4, 256, &data); if (!ret || data.at(0) != 0x28) continue; - if (QString::fromLatin1(data.data() + 0x12, 3) != QLatin1String("MTP")) { + if (QString::fromLatin1(data.data() + 0x12, 3) != "MTP"_L1) { // Not quite. continue; } @@ -613,7 +615,7 @@ void MacOsDeviceLister::USBDeviceAddedCallback(void *refcon, io_iterator_t it) { continue; } - if (QString::fromLatin1(data.data() + 0x12, 3) != QLatin1String("MTP")) { + if (QString::fromLatin1(data.data() + 0x12, 3) != "MTP"_L1) { // Not quite. continue; } @@ -674,7 +676,7 @@ void MacOsDeviceLister::FoundMTPDevice(const MTPDevice &device, const QString &s } -bool IsMTPSerial(const QString &serial) { return serial.startsWith(QLatin1String("MTP")); } +bool IsMTPSerial(const QString &serial) { return serial.startsWith("MTP"_L1); } bool MacOsDeviceLister::IsCDDevice(const QString &serial) const { return cd_devices_.contains(serial); diff --git a/src/device/mtpdevice.cpp b/src/device/mtpdevice.cpp index 30fbbe799..2c98e1b1f 100644 --- a/src/device/mtpdevice.cpp +++ b/src/device/mtpdevice.cpp @@ -44,6 +44,8 @@ #include "mtploader.h" #include "mtpconnection.h" +using namespace Qt::StringLiterals; + class DeviceLister; class DeviceManager; @@ -187,7 +189,7 @@ bool MtpDevice::CopyToStorage(const CopyJob &job, QString &error_text) { metadata_on_device.InitFromMTP(&track, url_.host()); metadata_on_device.set_directory_id(1); metadata_on_device.set_artist(metadata_on_device.effective_albumartist()); - metadata_on_device.set_albumartist(QLatin1String("")); + metadata_on_device.set_albumartist(""_L1); songs_to_add_ << metadata_on_device; // Remove the original if requested @@ -226,7 +228,7 @@ bool MtpDevice::DeleteFromStorage(const DeleteJob &job) { // Extract the ID from the song's URL QString filename = job.metadata_.url().path(); - filename.remove(QLatin1Char('/')); + filename.remove(u'/'); bool ok = false; uint32_t id = filename.toUInt(&ok); diff --git a/src/device/udisks2lister.cpp b/src/device/udisks2lister.cpp index 92ef80113..f62f51415 100644 --- a/src/device/udisks2lister.cpp +++ b/src/device/udisks2lister.cpp @@ -54,6 +54,7 @@ #include "udisks2filesystem.h" #include "udisks2job.h" +using namespace Qt::StringLiterals; using std::make_unique; using std::make_shared; @@ -83,7 +84,7 @@ QVariantList Udisks2Lister::DeviceIcons(const QString &id) { QString Udisks2Lister::DeviceManufacturer(const QString &id) { QReadLocker locker(&device_data_lock_); - if (!device_data_.contains(id)) return QLatin1String(""); + if (!device_data_.contains(id)) return ""_L1; return device_data_.value(id).vendor; } @@ -91,7 +92,7 @@ QString Udisks2Lister::DeviceManufacturer(const QString &id) { QString Udisks2Lister::DeviceModel(const QString &id) { QReadLocker locker(&device_data_lock_); - if (!device_data_.contains(id)) return QLatin1String(""); + if (!device_data_.contains(id)) return ""_L1; return device_data_.value(id).model; } @@ -122,7 +123,7 @@ QVariantMap Udisks2Lister::DeviceHardwareInfo(const QString &id) { const PartitionData data = device_data_.value(id); result[QStringLiteral(QT_TR_NOOP("D-Bus path"))] = data.dbus_path; result[QStringLiteral(QT_TR_NOOP("Serial number"))] = data.serial; - result[QStringLiteral(QT_TR_NOOP("Mount points"))] = data.mount_paths.join(QLatin1String(", ")); + result[QStringLiteral(QT_TR_NOOP("Mount points"))] = data.mount_paths.join(", "_L1); result[QStringLiteral(QT_TR_NOOP("Partition label"))] = data.label; result[QStringLiteral(QT_TR_NOOP("UUID"))] = data.uuid; @@ -133,7 +134,7 @@ QVariantMap Udisks2Lister::DeviceHardwareInfo(const QString &id) { QString Udisks2Lister::MakeFriendlyName(const QString &id) { QReadLocker locker(&device_data_lock_); - if (!device_data_.contains(id)) return QLatin1String(""); + if (!device_data_.contains(id)) return ""_L1; return device_data_.value(id).friendly_name; } @@ -226,17 +227,17 @@ void Udisks2Lister::DBusInterfaceAdded(const QDBusObjectPath &path, const Interf for (auto interface = interfaces.constBegin(); interface != interfaces.constEnd(); ++interface) { - if (interface.key() != QLatin1String("org.freedesktop.UDisks2.Job")) continue; + if (interface.key() != "org.freedesktop.UDisks2.Job"_L1) continue; SharedPtr job = make_shared(QLatin1String(kUDisks2Service), path.path(), QDBusConnection::systemBus()); if (!job->isValid()) continue; bool is_mount_job = false; - if (job->operation() == QLatin1String("filesystem-mount")) { + if (job->operation() == "filesystem-mount"_L1) { is_mount_job = true; } - else if (job->operation() == QLatin1String("filesystem-unmount")) { + else if (job->operation() == "filesystem-unmount"_L1) { is_mount_job = false; } else { diff --git a/src/dialogs/about.cpp b/src/dialogs/about.cpp index 5117d2685..a4361f15f 100644 --- a/src/dialogs/about.cpp +++ b/src/dialogs/about.cpp @@ -36,6 +36,8 @@ #include "about.h" #include "ui_about.h" +using namespace Qt::StringLiterals; + About::About(QWidget *parent) : QDialog(parent), ui_{} { ui_.setupUi(this); @@ -106,31 +108,31 @@ QString About::MainHtml() const { QString ret; - ret += QLatin1String("

"); + ret += "

"_L1; ret += tr("Version %1").arg(QCoreApplication::applicationVersion()); - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); + ret += "

"_L1; ret += tr("Strawberry is a music player and music collection organizer."); - ret += QLatin1String("
"); + ret += "
"_L1; ret += tr("It is a fork of Clementine released in 2018 aimed at music collectors and audiophiles."); - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); + ret += "

"_L1; ret += tr("Strawberry is free software released under GPL. The source code is available on %1").arg(QStringLiteral("GitHub.").arg(palette().text().color().name())); - ret += QLatin1String("
"); + ret += "
"_L1; ret += tr("You should have received a copy of the GNU General Public License along with this program. If not, see %1").arg(QStringLiteral("http://www.gnu.org/licenses/").arg(palette().text().color().name())); - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); + ret += "

"_L1; ret += tr("If you like Strawberry and can make use of it, consider sponsoring or donating."); - ret += QLatin1String("
"); + ret += "
"_L1; ret += tr("You can sponsor the author on %1. You can also make a one-time payment through %2.").arg( QStringLiteral("GitHub sponsors").arg(palette().text().color().name()), QStringLiteral("paypal.me/jonaskvinge").arg(palette().text().color().name()) ); - ret += QLatin1String("

"); + ret += "

"_L1; return ret; @@ -140,54 +142,54 @@ QString About::ContributorsHtml() const { QString ret; - ret += QLatin1String("

"); - ret += QLatin1String(""); + ret += "

"_L1; + ret += ""_L1; ret += tr("Author and maintainer"); - ret += QLatin1String(""); + ret += ""_L1; for (const Person &person : strawberry_authors_) { - ret += QLatin1String("
") + PersonToHtml(person); + ret += "
"_L1 + PersonToHtml(person); } - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); - ret += QLatin1String(""); + ret += "

"_L1; + ret += ""_L1; ret += tr("Contributors"); - ret += QLatin1String(""); + ret += ""_L1; for (const Person &person : strawberry_contributors_) { - ret += QLatin1String("
") + PersonToHtml(person); + ret += "
"_L1 + PersonToHtml(person); } - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); - ret += QLatin1String(""); + ret += "

"_L1; + ret += ""_L1; ret += tr("Clementine authors"); - ret += QLatin1String(""); + ret += ""_L1; for (const Person &person : clementine_authors_) { - ret += QLatin1String("
") + PersonToHtml(person); + ret += "
"_L1 + PersonToHtml(person); } - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); - ret += QLatin1String(""); + ret += "

"_L1; + ret += ""_L1; ret += tr("Clementine contributors"); - ret += QLatin1String(""); + ret += ""_L1; for (const Person &person : clementine_contributors_) { - ret += QLatin1String("
") + PersonToHtml(person); + ret += "
"_L1 + PersonToHtml(person); } - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); - ret += QLatin1String(""); + ret += "

"_L1; + ret += ""_L1; ret += tr("Thanks to"); - ret += QLatin1String(""); + ret += ""_L1; for (const Person &person : strawberry_thanks_) { - ret += QLatin1String("
") + PersonToHtml(person); + ret += "
"_L1 + PersonToHtml(person); } - ret += QLatin1String("

"); + ret += "

"_L1; - ret += QLatin1String("

"); + ret += "

"_L1; ret += tr("Thanks to all the other Amarok and Clementine contributors."); - ret += QLatin1String("

"); + ret += "

"_L1; return ret; } diff --git a/src/dialogs/console.cpp b/src/dialogs/console.cpp index 5c6f4a06e..bd138ed4e 100644 --- a/src/dialogs/console.cpp +++ b/src/dialogs/console.cpp @@ -79,7 +79,7 @@ void Console::RunQuery() { values.append(record.value(i).toString()); } - ui_.output->append(values.join(QLatin1Char('|'))); + ui_.output->append(values.join(u'|')); } diff --git a/src/dialogs/edittagdialog.cpp b/src/dialogs/edittagdialog.cpp index 3a43c8fa6..10db15b27 100644 --- a/src/dialogs/edittagdialog.cpp +++ b/src/dialogs/edittagdialog.cpp @@ -101,6 +101,8 @@ #include "ui_edittagdialog.h" #include "tagreadermessages.pb.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kTagsDifferentHintText[] = QT_TR_NOOP("(different across multiple songs)"); constexpr char kArtDifferentHintText[] = QT_TR_NOOP("Different art across multiple songs."); @@ -476,21 +478,21 @@ void EditTagDialog::SetSongListVisibility(bool visible) { QVariant EditTagDialog::Data::value(const Song &song, const QString &id) { - if (id == QLatin1String("title")) return song.title(); - if (id == QLatin1String("artist")) return song.artist(); - if (id == QLatin1String("album")) return song.album(); - if (id == QLatin1String("albumartist")) return song.albumartist(); - if (id == QLatin1String("composer")) return song.composer(); - if (id == QLatin1String("performer")) return song.performer(); - if (id == QLatin1String("grouping")) return song.grouping(); - if (id == QLatin1String("genre")) return song.genre(); - if (id == QLatin1String("comment")) return song.comment(); - if (id == QLatin1String("lyrics")) return song.lyrics(); - if (id == QLatin1String("track")) return song.track(); - if (id == QLatin1String("disc")) return song.disc(); - if (id == QLatin1String("year")) return song.year(); - if (id == QLatin1String("compilation")) return song.compilation(); - if (id == QLatin1String("rating")) { return song.rating(); } + if (id == "title"_L1) return song.title(); + if (id == "artist"_L1) return song.artist(); + if (id == "album"_L1) return song.album(); + if (id == "albumartist"_L1) return song.albumartist(); + if (id == "composer"_L1) return song.composer(); + if (id == "performer"_L1) return song.performer(); + if (id == "grouping"_L1) return song.grouping(); + if (id == "genre"_L1) return song.genre(); + if (id == "comment"_L1) return song.comment(); + if (id == "lyrics"_L1) return song.lyrics(); + if (id == "track"_L1) return song.track(); + if (id == "disc"_L1) return song.disc(); + if (id == "year"_L1) return song.year(); + if (id == "compilation"_L1) return song.compilation(); + if (id == "rating"_L1) { return song.rating(); } qLog(Warning) << "Unknown ID" << id; return QVariant(); @@ -498,21 +500,21 @@ QVariant EditTagDialog::Data::value(const Song &song, const QString &id) { void EditTagDialog::Data::set_value(const QString &id, const QVariant &value) { - if (id == QLatin1String("title")) current_.set_title(value.toString()); - else if (id == QLatin1String("artist")) current_.set_artist(value.toString()); - else if (id == QLatin1String("album")) current_.set_album(value.toString()); - else if (id == QLatin1String("albumartist")) current_.set_albumartist(value.toString()); - else if (id == QLatin1String("composer")) current_.set_composer(value.toString()); - else if (id == QLatin1String("performer")) current_.set_performer(value.toString()); - else if (id == QLatin1String("grouping")) current_.set_grouping(value.toString()); - else if (id == QLatin1String("genre")) current_.set_genre(value.toString()); - else if (id == QLatin1String("comment")) current_.set_comment(value.toString()); - else if (id == QLatin1String("lyrics")) current_.set_lyrics(value.toString()); - else if (id == QLatin1String("track")) current_.set_track(value.toInt()); - else if (id == QLatin1String("disc")) current_.set_disc(value.toInt()); - else if (id == QLatin1String("year")) current_.set_year(value.toInt()); - else if (id == QLatin1String("compilation")) current_.set_compilation(value.toBool()); - else if (id == QLatin1String("rating")) { current_.set_rating(value.toFloat()); } + if (id == "title"_L1) current_.set_title(value.toString()); + else if (id == "artist"_L1) current_.set_artist(value.toString()); + else if (id == "album"_L1) current_.set_album(value.toString()); + else if (id == "albumartist"_L1) current_.set_albumartist(value.toString()); + else if (id == "composer"_L1) current_.set_composer(value.toString()); + else if (id == "performer"_L1) current_.set_performer(value.toString()); + else if (id == "grouping"_L1) current_.set_grouping(value.toString()); + else if (id == "genre"_L1) current_.set_genre(value.toString()); + else if (id == "comment"_L1) current_.set_comment(value.toString()); + else if (id == "lyrics"_L1) current_.set_lyrics(value.toString()); + else if (id == "track"_L1) current_.set_track(value.toInt()); + else if (id == "disc"_L1) current_.set_disc(value.toInt()); + else if (id == "year"_L1) current_.set_year(value.toInt()); + else if (id == "compilation"_L1) current_.set_compilation(value.toBool()); + else if (id == "rating"_L1) { current_.set_rating(value.toFloat()); } else qLog(Warning) << "Unknown ID" << id; } @@ -692,12 +694,12 @@ void EditTagDialog::SelectionChanged() { QString summary; if (indexes.count() == 1) { - summary += QLatin1String("

") + first_song.PrettyTitleWithArtist().toHtmlEscaped() + QLatin1String("

"); + summary += "

"_L1 + first_song.PrettyTitleWithArtist().toHtmlEscaped() + "

"_L1; } else { - summary += QLatin1String("

"); + summary += "

"_L1; summary += tr("%1 songs selected.").arg(indexes.count()); - summary += QLatin1String("

"); + summary += "

"_L1; } ui_->tags_summary->setText(summary); @@ -864,7 +866,7 @@ QString EditTagDialog::GetArtSummary(const Song &song, const AlbumCoverLoaderRes } if (!song.is_collection_song()) { - if (!summary.isEmpty()) summary += QLatin1String("
"); + if (!summary.isEmpty()) summary += "
"_L1; summary = tr("Album cover editing is only available for collection songs."); } @@ -911,8 +913,8 @@ void EditTagDialog::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderRes if (ui_->song_list->selectionModel()->selectedIndexes().count() > 0) { const QModelIndex idx = ui_->song_list->selectionModel()->selectedIndexes().first(); QString summary = ui_->summary->toPlainText(); - summary += QLatin1String("
"); - summary += QLatin1String("
"); + summary += "
"_L1; + summary += "
"_L1; summary += GetArtSummary(data_[idx.row()].current_, result.type); ui_->summary->setText(summary); } @@ -938,8 +940,8 @@ void EditTagDialog::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderRes bool enable_change_art = false; if (first_song.is_valid()) { QString summary = ui_->tags_summary->toPlainText(); - summary += QLatin1String("
"); - summary += QLatin1String("
"); + summary += "
"_L1; + summary += "
"_L1; if (cover_action == UpdateCoverAction::None) { summary += GetArtSummary(first_song, result.type); } diff --git a/src/dialogs/errordialog.cpp b/src/dialogs/errordialog.cpp index 3c3381877..abb6d4f5a 100644 --- a/src/dialogs/errordialog.cpp +++ b/src/dialogs/errordialog.cpp @@ -35,6 +35,8 @@ #include "errordialog.h" #include "ui_errordialog.h" +using namespace Qt::StringLiterals; + ErrorDialog::ErrorDialog(QWidget *parent) : QDialog(parent), ui_(new Ui_ErrorDialog) { @@ -83,7 +85,7 @@ void ErrorDialog::UpdateContent() { QString html; for (const QString &message : std::as_const(current_messages_)) { if (!html.isEmpty()) { - html += QLatin1String("
"); + html += "
"_L1; } html += message.toHtmlEscaped(); } diff --git a/src/dialogs/snapdialog.cpp b/src/dialogs/snapdialog.cpp index f73f334f1..ea79cf139 100644 --- a/src/dialogs/snapdialog.cpp +++ b/src/dialogs/snapdialog.cpp @@ -25,6 +25,8 @@ #include "snapdialog.h" #include "ui_messagedialog.h" +using namespace Qt::StringLiterals; + SnapDialog::SnapDialog(QWidget *parent) : MessageDialog(parent) { setWindowTitle(tr("Strawberry is running as a Snap")); @@ -34,56 +36,56 @@ SnapDialog::SnapDialog(QWidget *parent) : MessageDialog(parent) { ui_->label_logo->setPixmap(pixmap); QString text; - text += QLatin1String("

"); + text += "

"_L1; text += tr("It is detected that Strawberry is running as a Snap"); - text += QLatin1String("

"); + text += "

"_L1; - text += QLatin1String("

"); + text += "

"_L1; text += tr("Strawberry is slower, and has restrictions when running as a Snap. Accessing the root filesystem (/) will not work. There also might be other restrictions such as accessing certain devices or network shares."); - text += QLatin1String("

"); + text += "

"_L1; - text += QLatin1String("

"); - text += QLatin1String("Strawberry is available natively in the official package repositories for Fedora, openSUSE, Mageia, Arch, Manjaro, MX Linux and most other popular Linux distributions."); - text += QLatin1String("

"); + text += "

"_L1; + text += "Strawberry is available natively in the official package repositories for Fedora, openSUSE, Mageia, Arch, Manjaro, MX Linux and most other popular Linux distributions."_L1; + text += "

"_L1; - text += QLatin1String("

"); + text += "

"_L1; text += tr("For Ubuntu there is an official PPA repository available at %1.").arg(QStringLiteral("https://launchpad.net/~jonaski/+archive/ubuntu/strawberry").arg(palette().text().color().name())); - text += QLatin1String("

"); + text += "

"_L1; - text += QLatin1String("

"); + text += "

"_L1; text += tr("Official releases are available for Debian and Ubuntu which also work on most of their derivatives. See %1 for more information.").arg(QStringLiteral("https://www.strawberrymusicplayer.org/").arg(palette().text().color().name())); - text += QLatin1String("

"); + text += "

"_L1; - text += QLatin1String("

"); + text += "

"_L1; text += tr("For a better experience please consider the other options above."); - text += QLatin1String("

"); + text += "

"_L1; - text += QLatin1String("

"); + text += "

"_L1; text += tr("Copy your strawberry.conf and strawberry.db from your ~/snap directory to avoid losing configuration before you uninstall the snap:"); - text += QLatin1String("
"); - text += QLatin1String("cp ~/snap/strawberry/current/.config/strawberry/strawberry.conf ~/.config/strawberry/strawberry.conf
"); - text += QLatin1String("cp ~/snap/strawberry/current/.local/share/strawberry/strawberry/strawberry.db ~/.local/share/strawberry/strawberry/strawberry.db
"); - text += QLatin1String("

"); - text += QLatin1String("

"); + text += "
"_L1; + text += "cp ~/snap/strawberry/current/.config/strawberry/strawberry.conf ~/.config/strawberry/strawberry.conf
"_L1; + text += "cp ~/snap/strawberry/current/.local/share/strawberry/strawberry/strawberry.db ~/.local/share/strawberry/strawberry/strawberry.db
"_L1; + text += "

"_L1; + text += "

"_L1; text += tr("Uninstall the snap with:"); - text += QLatin1String("
"); - text += QLatin1String("snap remove strawberry"); - text += QLatin1String("

"); - text += QLatin1String("

"); + text += "
"_L1; + text += "snap remove strawberry"_L1; + text += "

"_L1; + text += "

"_L1; text += tr("Install strawberry through PPA:"); - text += QLatin1String("
"); - text += QLatin1String("sudo add-apt-repository ppa:jonaski/strawberry
"); - text += QLatin1String("sudo apt-get update
"); - text += QLatin1String("sudo apt install strawberry"); - text += QLatin1String("

"); - text += QLatin1String("

"); + text += "
"_L1; + text += "sudo add-apt-repository ppa:jonaski/strawberry
"_L1; + text += "sudo apt-get update
"_L1; + text += "sudo apt install strawberry"_L1; + text += "

"_L1; + text += "

"_L1; ui_->label_text->setText(text); ui_->label_text->adjustSize(); adjustSize(); settings_group_ = QLatin1String(MainWindow::kSettingsGroup); - do_not_show_message_again_ = QLatin1String("ignore_snap"); + do_not_show_message_again_ = "ignore_snap"_L1; if (parent) { Utilities::CenterWidgetOnScreen(Utilities::GetScreen(parent), this); diff --git a/src/engine/alsapcmdevicefinder.cpp b/src/engine/alsapcmdevicefinder.cpp index 9bfa964c4..bdba97175 100644 --- a/src/engine/alsapcmdevicefinder.cpp +++ b/src/engine/alsapcmdevicefinder.cpp @@ -52,14 +52,14 @@ EngineDeviceList AlsaPCMDeviceFinder::ListDevices() { for (char *desc_i = hint_desc; desc_i && *desc_i != '\0'; ++desc_i) { if (*desc_i == '\n') { *desc_i = '\0'; - if (!description.isEmpty()) description.append(QLatin1Char(' ')); + if (!description.isEmpty()) description.append(u' '); description.append(QString::fromUtf8(desc_last)); desc_last = desc_i + 1; } } if (desc_last) { - if (!description.isEmpty()) description.append(QLatin1Char(' ')); + if (!description.isEmpty()) description.append(u' '); description.append(QString::fromUtf8(desc_last)); } diff --git a/src/engine/devicefinders.cpp b/src/engine/devicefinders.cpp index c99ea38b6..0de6183c1 100644 --- a/src/engine/devicefinders.cpp +++ b/src/engine/devicefinders.cpp @@ -49,6 +49,8 @@ # endif // _MSC_VER #endif // Q_OS_WIN32 +using namespace Qt::StringLiterals; + DeviceFinders::DeviceFinders(QObject *parent) : QObject(parent) { setObjectName(QLatin1String(metaObject()->className())); diff --git a/src/engine/ebur128analysis.cpp b/src/engine/ebur128analysis.cpp index 19cb113e7..83a095e43 100644 --- a/src/engine/ebur128analysis.cpp +++ b/src/engine/ebur128analysis.cpp @@ -45,6 +45,7 @@ #include "ebur128analysis.h" +using namespace Qt::StringLiterals; using std::unique_ptr; namespace { @@ -216,16 +217,16 @@ FrameFormat::FrameFormat(GstCaps *caps) : channels(0), channel_mask(0), samplera channel_mask = gst_value_get_bitmask(value); } - if (format_str == QLatin1String("S16LE")) { + if (format_str == "S16LE"_L1) { format = DataFormat::S16; } - else if (format_str == QLatin1String("S32LE")) { + else if (format_str == "S32LE"_L1) { format = DataFormat::S32; } - else if (format_str == QLatin1String("F32LE")) { + else if (format_str == "F32LE"_L1) { format = DataFormat::FP32; } - else if (format_str == QLatin1String("F64LE")) { + else if (format_str == "F64LE"_L1) { format = DataFormat::FP64; } else { diff --git a/src/engine/enginebase.cpp b/src/engine/enginebase.cpp index b772f4348..c78da34c4 100644 --- a/src/engine/enginebase.cpp +++ b/src/engine/enginebase.cpp @@ -41,6 +41,8 @@ # include "settings/spotifysettingspage.h" #endif +using namespace Qt::StringLiterals; + EngineBase::EngineBase(QObject *parent) : QObject(parent), exclusive_mode_(false), @@ -83,8 +85,8 @@ EngineBase::~EngineBase() = default; EngineBase::Type EngineBase::TypeFromName(const QString &name) { - if (name.compare(QLatin1String("gstreamer"), Qt::CaseInsensitive) == 0) return Type::GStreamer; - if (name.compare(QLatin1String("vlc"), Qt::CaseInsensitive) == 0) return Type::VLC; + if (name.compare("gstreamer"_L1, Qt::CaseInsensitive) == 0) return Type::GStreamer; + if (name.compare("vlc"_L1, Qt::CaseInsensitive) == 0) return Type::VLC; return Type::None; @@ -207,7 +209,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_ ? QLatin1String("") : QStringLiteral("1")); + Utilities::SetEnv("SOUP_FORCE_HTTP1", http2_enabled_ ? ""_L1 : QStringLiteral("1")); qLog(Debug) << "SOUP_FORCE_HTTP1:" << (http2_enabled_ ? "OFF" : "ON"); } diff --git a/src/engine/enginedevice.cpp b/src/engine/enginedevice.cpp index f618492c0..133245f79 100644 --- a/src/engine/enginedevice.cpp +++ b/src/engine/enginedevice.cpp @@ -19,29 +19,31 @@ #include "enginedevice.h" +using namespace Qt::StringLiterals; + EngineDevice::EngineDevice() : card(0), device(0) {} QString EngineDevice::GuessIconName() const { - if (description.contains(QLatin1String("mcintosh"), Qt::CaseInsensitive)) { + if (description.contains("mcintosh"_L1, Qt::CaseInsensitive)) { return QStringLiteral("mcintosh"); } - if (description.contains(QLatin1String("electrocompaniet"), Qt::CaseInsensitive)) { + if (description.contains("electrocompaniet"_L1, Qt::CaseInsensitive)) { return QStringLiteral("electrocompaniet"); } - if (description.contains(QLatin1String("intel"), Qt::CaseInsensitive)) { + if (description.contains("intel"_L1, Qt::CaseInsensitive)) { return QStringLiteral("intel"); } - if (description.contains(QLatin1String("realtek"), Qt::CaseInsensitive)) { + if (description.contains("realtek"_L1, Qt::CaseInsensitive)) { return QStringLiteral("realtek"); } - if (description.contains(QLatin1String("nvidia"), Qt::CaseInsensitive)) { + if (description.contains("nvidia"_L1, Qt::CaseInsensitive)) { return QStringLiteral("nvidia"); } - if (description.contains(QLatin1String("headset"), Qt::CaseInsensitive)) { + if (description.contains("headset"_L1, Qt::CaseInsensitive)) { return QStringLiteral("headset"); } - if (description.contains(QLatin1String("pulseaudio"), Qt::CaseInsensitive)) { + if (description.contains("pulseaudio"_L1, Qt::CaseInsensitive)) { return QStringLiteral("pulseaudio"); } diff --git a/src/engine/gstengine.cpp b/src/engine/gstengine.cpp index 854a2255d..3ce7f0752 100644 --- a/src/engine/gstengine.cpp +++ b/src/engine/gstengine.cpp @@ -61,6 +61,7 @@ #include "gstbufferconsumer.h" #include "enginemetadata.h" +using namespace Qt::StringLiterals; using std::make_shared; const char *GstEngine::kAutoSink = "autoaudiosink"; @@ -455,24 +456,24 @@ EngineBase::OutputDetailsList GstEngine::GetOutputsList() const { GstElementFactory *factory = GST_ELEMENT_FACTORY(future->data); const QString metadata = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_KLASS)); const QString name = QString::fromUtf8(gst_plugin_feature_get_name(future->data)); - const QStringList classes = metadata.split(QLatin1Char('/')); - if (classes.contains(QLatin1String("Audio"), Qt::CaseInsensitive) && (classes.contains(QLatin1String("Sink"), Qt::CaseInsensitive) || (classes.contains(QLatin1String("Source"), Qt::CaseInsensitive) && name.contains(QLatin1String("sink"))))) { + const QStringList classes = metadata.split(u'/'); + if (classes.contains("Audio"_L1, Qt::CaseInsensitive) && (classes.contains("Sink"_L1, Qt::CaseInsensitive) || (classes.contains("Source"_L1, Qt::CaseInsensitive) && name.contains("sink"_L1)))) { QString description = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_DESCRIPTION)); - if (name == QLatin1String("wasapi2sink") && description == QLatin1String("Stream audio to an audio capture device through WASAPI")) { - description.append(QLatin1Char('2')); + if (name == "wasapi2sink"_L1 && description == "Stream audio to an audio capture device through WASAPI"_L1) { + description.append(u'2'); } - else if (name == QLatin1String("pipewiresink") && description == QLatin1String("Send video to PipeWire")) { - description = QLatin1String("Send audio to PipeWire"); + else if (name == "pipewiresink"_L1 && description == "Send video to PipeWire"_L1) { + description = "Send audio to PipeWire"_L1; } OutputDetails output; output.name = name; output.description = description; - if (output.name == QLatin1String(kAutoSink)) output.iconname = QLatin1String("soundcard"); - else if (output.name == QLatin1String(kALSASink) || output.name == QLatin1String(kOSS4Sink)) output.iconname = QLatin1String("alsa"); - else if (output.name == QLatin1String(kJackAudioSink)) output.iconname = QLatin1String("jack"); - else if (output.name == QLatin1String(kPulseSink)) output.iconname = QLatin1String("pulseaudio"); - else if (output.name == QLatin1String(kA2DPSink) || output.name == QLatin1String(kAVDTPSink)) output.iconname = QLatin1String("bluetooth"); - else output.iconname = QLatin1String("soundcard"); + if (output.name == QLatin1String(kAutoSink)) output.iconname = "soundcard"_L1; + else if (output.name == QLatin1String(kALSASink) || output.name == QLatin1String(kOSS4Sink)) output.iconname = "alsa"_L1; + else if (output.name == QLatin1String(kJackAudioSink)) output.iconname = "jack"_L1; + else if (output.name == QLatin1String(kPulseSink)) output.iconname = "pulseaudio"_L1; + else if (output.name == QLatin1String(kA2DPSink) || output.name == QLatin1String(kAVDTPSink)) output.iconname = "bluetooth"_L1; + else output.iconname = "soundcard"_L1; outputs << output; } } @@ -796,22 +797,22 @@ QByteArray GstEngine::FixupUrl(const QUrl &url) { // QUrl::fromLocalFile does this when given a \\host\share\file path on Windows. // Munge it back into a path that gstreamer will recognise. if (url.isLocalFile() && !url.host().isEmpty()) { - QString str = QLatin1String("file:////") + url.host() + url.path(); + QString str = "file:////"_L1 + url.host() + url.path(); uri = str.toUtf8(); } - else if (url.scheme() == QLatin1String("cdda")) { + else if (url.scheme() == "cdda"_L1) { QString str; if (url.path().isEmpty()) { str = url.toString(); - str.remove(str.lastIndexOf(QLatin1Char('a')), 1); + str.remove(str.lastIndexOf(u'a'), 1); } else { // Currently, Gstreamer can't handle input CD devices inside cdda URL. // So we handle them ourselves: we extract the track number and re-create a URL with only cdda:// + the track number (which can be handled by Gstreamer). // We keep the device in mind, and we will set it later using SourceSetupCallback - QStringList path = url.path().split(QLatin1Char('/')); + QStringList path = url.path().split(u'/'); str = QStringLiteral("cdda://%1").arg(path.takeLast()); - QString device = path.join(QLatin1Char('/')); + QString device = path.join(u'/'); if (current_pipeline_) current_pipeline_->SetSourceDevice(device); } uri = str.toUtf8(); @@ -1030,12 +1031,12 @@ void GstEngine::UpdateScope(const int chunk_length) { scope_chunk_++; - if (buffer_format_.startsWith(QLatin1String("S16LE")) || - buffer_format_.startsWith(QLatin1String("U16LE")) || - buffer_format_.startsWith(QLatin1String("S24LE")) || - buffer_format_.startsWith(QLatin1String("S24_32LE")) || - buffer_format_.startsWith(QLatin1String("S32LE")) || - buffer_format_.startsWith(QLatin1String("F32LE")) + if (buffer_format_.startsWith("S16LE"_L1) || + buffer_format_.startsWith("U16LE"_L1) || + buffer_format_.startsWith("S24LE"_L1) || + buffer_format_.startsWith("S24_32LE"_L1) || + buffer_format_.startsWith("S32LE"_L1) || + buffer_format_.startsWith("F32LE"_L1) ) { memcpy(dest, source, bytes); } @@ -1102,7 +1103,7 @@ void GstEngine::StreamDiscovered(GstDiscoverer*, GstDiscovererInfo *info, GError GstStructure *gst_structure = gst_caps_get_structure(caps, i); if (!gst_structure) continue; QString mimetype = QString::fromUtf8(gst_structure_get_name(gst_structure)); - if (!mimetype.isEmpty() && mimetype != QLatin1String("audio/mpeg")) { + if (!mimetype.isEmpty() && mimetype != "audio/mpeg"_L1) { engine_metadata.filetype = Song::FiletypeByMimetype(mimetype); if (engine_metadata.filetype == Song::FileType::Unknown) { qLog(Error) << "Unknown mimetype" << mimetype; diff --git a/src/engine/gstenginepipeline.cpp b/src/engine/gstenginepipeline.cpp index 4a60cd41d..5926b81be 100644 --- a/src/engine/gstenginepipeline.cpp +++ b/src/engine/gstenginepipeline.cpp @@ -67,6 +67,8 @@ #include "gstenginepipeline.h" #include "gstbufferconsumer.h" +using namespace Qt::StringLiterals; + namespace { constexpr int GST_PLAY_FLAG_VIDEO = 0x00000001; @@ -296,7 +298,7 @@ QString GstEnginePipeline::GstStateText(const GstState state) { GstElement *GstEnginePipeline::CreateElement(const QString &factory_name, const QString &name, GstElement *bin, QString &error) const { - QString unique_name = QLatin1String("pipeline") + QLatin1Char('-') + QString::number(id()) + QLatin1Char('-') + (name.isEmpty() ? factory_name : name); + QString unique_name = "pipeline"_L1 + u'-' + QString::number(id()) + u'-' + (name.isEmpty() ? factory_name : name); GstElement *element = gst_element_factory_make(factory_name.toUtf8().constData(), unique_name.toUtf8().constData()); if (!element) { @@ -491,7 +493,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { if (!device.isEmpty()) { qLog(Debug) << "Setting device" << device << "for" << output_; g_object_set(G_OBJECT(audiosink_), "device", device.toUtf8().constData(), nullptr); - if (output_ == QLatin1String(GstEngine::kALSASink) && (device.startsWith(QLatin1String("hw:")) || device.startsWith(QLatin1String("plughw:")))) { + if (output_ == QLatin1String(GstEngine::kALSASink) && (device.startsWith("hw:"_L1) || device.startsWith("plughw:"_L1))) { exclusive_mode_ = true; } } @@ -783,7 +785,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { // Link replaygain elements if enabled. if (rg_enabled_ && rgvolume && rglimiter && rgconverter) { if (!gst_element_link_many(element_link, rgvolume, rglimiter, rgconverter, nullptr)) { - error = QLatin1String("Failed to link replaygain volume, limiter and converter elements."); + error = "Failed to link replaygain volume, limiter and converter elements."_L1; return false; } element_link = rgconverter; @@ -796,7 +798,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { "format = (string) { F32LE, F64LE }"); GstCaps *raw_fp_audio_caps = gst_static_caps_get(&static_raw_fp_audio_caps); if (!gst_element_link_filtered(element_link, volume_ebur128_, raw_fp_audio_caps)) { - error = QLatin1String("Failed to link EBU R 128 volume element."); + error = "Failed to link EBU R 128 volume element."_L1; return false; } gst_caps_unref(raw_fp_audio_caps); @@ -806,7 +808,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { // Link equalizer elements if enabled. if (eq_enabled_ && equalizer_ && equalizer_preamp_) { if (!gst_element_link_many(element_link, equalizer_preamp_, equalizer_, nullptr)) { - error = QLatin1String("Failed to link equalizer and equalizer preamp elements."); + error = "Failed to link equalizer and equalizer preamp elements."_L1; return false; } element_link = equalizer_; @@ -815,7 +817,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { // Link stereo balancer elements if enabled. if (stereo_balancer_enabled_ && audiopanorama_) { if (!gst_element_link(element_link, audiopanorama_)) { - error = QLatin1String("Failed to link audio panorama (stereo balancer)."); + error = "Failed to link audio panorama (stereo balancer)."_L1; return false; } element_link = audiopanorama_; @@ -824,7 +826,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { // Link software volume element if enabled. if (volume_enabled_ && volume_sw_) { if (!gst_element_link(element_link, volume_sw_)) { - error = QLatin1String("Failed to link software volume."); + error = "Failed to link software volume."_L1; return false; } element_link = volume_sw_; @@ -833,7 +835,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { // Link fading volume element if enabled. if (fading_enabled_ && volume_fading_) { if (!gst_element_link(element_link, volume_fading_)) { - error = QLatin1String("Failed to link fading volume."); + error = "Failed to link fading volume."_L1; return false; } element_link = volume_fading_; @@ -843,21 +845,21 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { if (bs2b_enabled_ && bs2b) { qLog(Debug) << "Enabling bs2b"; if (!gst_element_link(element_link, bs2b)) { - error = QLatin1String("Failed to link bs2b."); + error = "Failed to link bs2b."_L1; return false; } element_link = bs2b; } if (!gst_element_link(element_link, audiosinkconverter)) { - error = QLatin1String("Failed to link audio sink converter."); + error = "Failed to link audio sink converter."_L1; return false; } { GstCaps *caps = gst_caps_new_empty_simple("audio/x-raw"); if (!caps) { - error = QLatin1String("Failed to create caps for raw audio."); + error = "Failed to create caps for raw audio."_L1; return false; } if (channels_enabled_ && channels_ > 0) { @@ -867,7 +869,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) { const bool link_filtered_result = gst_element_link_filtered(audiosinkconverter, audiosink_, caps); gst_caps_unref(caps); if (!link_filtered_result) { - error = QLatin1String("Failed to link audio sink converter to audio sink with filter for ") + output_; + error = "Failed to link audio sink converter to audio sink with filter for "_L1 + output_; return false; } } @@ -960,7 +962,7 @@ void GstEnginePipeline::ElementAddedCallback(GstBin *bin, GstBin *sub_bin, GstEl const QString element_name = QString::fromUtf8(element_name_char); g_free(element_name_char); - if (bin != GST_BIN(instance->audiobin_) || element_name == QLatin1String("fake-audio-sink") || GST_ELEMENT(gst_element_get_parent(element)) != instance->audiosink_) return; + if (bin != GST_BIN(instance->audiobin_) || element_name == "fake-audio-sink"_L1 || GST_ELEMENT(gst_element_get_parent(element)) != instance->audiosink_) return; GstElement *volume = nullptr; if (GST_IS_STREAM_VOLUME(element)) { @@ -1186,10 +1188,10 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb quint64 duration = GST_BUFFER_DURATION(buf); qint64 end_time = static_cast(start_time + duration); - if (format.startsWith(QLatin1String("S16LE"))) { + if (format.startsWith("S16LE"_L1)) { instance->logged_unsupported_analyzer_format_ = false; } - else if (format.startsWith(QLatin1String("S32LE"))) { + else if (format.startsWith("S32LE"_L1)) { GstMapInfo map_info; gst_buffer_map(buf, &map_info, GST_MAP_READ); @@ -1210,7 +1212,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb instance->logged_unsupported_analyzer_format_ = false; } - else if (format.startsWith(QLatin1String("F32LE"))) { + else if (format.startsWith("F32LE"_L1)) { GstMapInfo map_info; gst_buffer_map(buf, &map_info, GST_MAP_READ); @@ -1231,7 +1233,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb instance->logged_unsupported_analyzer_format_ = false; } - else if (format.startsWith(QLatin1String("S24LE"))) { + else if (format.startsWith("S24LE"_L1)) { GstMapInfo map_info; gst_buffer_map(buf, &map_info, GST_MAP_READ); @@ -1254,7 +1256,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb instance->logged_unsupported_analyzer_format_ = false; } - else if (format.startsWith(QLatin1String("S24_32LE"))) { + else if (format.startsWith("S24_32LE"_L1)) { GstMapInfo map_info; gst_buffer_map(buf, &map_info, GST_MAP_READ); @@ -1526,7 +1528,7 @@ void GstEnginePipeline::ErrorMessageReceived(GstMessage *msg) { { QMutexLocker l(&mutex_redirect_url_); - if (!redirect_url_.isEmpty() && debugstr.contains(QLatin1String("A redirect message was posted on the bus and should have been handled by the application."))) { + if (!redirect_url_.isEmpty() && debugstr.contains("A redirect message was posted on the bus and should have been handled by the application."_L1)) { // mmssrc posts a message on the bus *and* makes an error message when it wants to do a redirect. // We handle the message, but now we have to ignore the error too. return; @@ -1567,11 +1569,11 @@ 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(QLatin1String(" - "))) { + if (engine_metadata.title.contains(" - "_L1)) { title_splitted = engine_metadata.title.split(QStringLiteral(" - ")); } - else if (engine_metadata.title.contains(QLatin1Char('~'))) { - title_splitted = engine_metadata.title.split(QLatin1Char('~')); + else if (engine_metadata.title.contains(u'~')) { + title_splitted = engine_metadata.title.split(u'~'); } if (!title_splitted.isEmpty() && title_splitted.count() >= 2) { int i = 0; diff --git a/src/engine/gststartup.cpp b/src/engine/gststartup.cpp index 6316f32b8..819e91c91 100644 --- a/src/engine/gststartup.cpp +++ b/src/engine/gststartup.cpp @@ -44,6 +44,8 @@ #include "gststartup.h" +using namespace Qt::Literals::StringLiterals; + GThread *GstStartup::kGThread = nullptr; gpointer GstStartup::GLibMainLoopThreadFunc(gpointer) { @@ -115,28 +117,28 @@ void GstStartup::SetEnvironment() { // Set plugin root path QString plugin_root_path; # if defined(Q_OS_MACOS) - plugin_root_path = QDir::cleanPath(app_path + QLatin1String("/../PlugIns")); + plugin_root_path = QDir::cleanPath(app_path + "/../PlugIns"_L1); # elif defined(Q_OS_UNIX) - plugin_root_path = QDir::cleanPath(app_path + QLatin1String("/../plugins")); + plugin_root_path = QDir::cleanPath(app_path + "/../plugins"_L1); # elif defined(Q_OS_WIN32) plugin_root_path = app_path; # endif // Set GIO module path - const QString gio_module_path = plugin_root_path + QLatin1String("/gio-modules"); + const QString gio_module_path = plugin_root_path + "/gio-modules"_L1; // Set GStreamer plugin scanner path QString gst_plugin_scanner; # if defined(Q_OS_UNIX) - gst_plugin_scanner = plugin_root_path + QLatin1String("/gst-plugin-scanner"); + gst_plugin_scanner = plugin_root_path + "/gst-plugin-scanner"_L1; # endif // Set GStreamer plugin path QString gst_plugin_path; # if defined(Q_OS_WIN32) - gst_plugin_path = plugin_root_path + QLatin1String("/gstreamer-plugins"); + gst_plugin_path = plugin_root_path + "/gstreamer-plugins"_L1; # else - gst_plugin_path = plugin_root_path + QLatin1String("/gstreamer"); + gst_plugin_path = plugin_root_path + "/gstreamer"_L1; # endif if (!gio_module_path.isEmpty()) { diff --git a/src/engine/macosdevicefinder.cpp b/src/engine/macosdevicefinder.cpp index de9c3e036..de63e7d9a 100644 --- a/src/engine/macosdevicefinder.cpp +++ b/src/engine/macosdevicefinder.cpp @@ -33,6 +33,8 @@ #include "macosdevicefinder.h" #include "enginedevice.h" +using namespace Qt::Literals::StringLiterals; + namespace { template @@ -107,7 +109,7 @@ EngineDeviceList MacOsDeviceFinder::ListDevices() { EngineDevice device; device.value = id; device.description = QString::fromUtf8(CFStringGetCStringPtr(*device_name, CFStringGetSystemEncoding())); - if (device.description.isEmpty()) device.description = QLatin1String("Unknown device ") + device.value.toString(); + if (device.description.isEmpty()) device.description = "Unknown device "_L1 + device.value.toString(); device.iconname = device.GuessIconName(); device_list.append(device); } diff --git a/src/engine/uwpdevicefinder.cpp b/src/engine/uwpdevicefinder.cpp index 787c5c1ba..e3d3d2556 100644 --- a/src/engine/uwpdevicefinder.cpp +++ b/src/engine/uwpdevicefinder.cpp @@ -41,6 +41,8 @@ using namespace ABI::Windows::Foundation; using namespace ABI::Windows::Foundation::Collections; using namespace ABI::Windows::Devices::Enumeration; +using namespace Qt::Literals::StringLiterals; + UWPDeviceFinder::UWPDeviceFinder() : DeviceFinder(QStringLiteral("uwpdevice"), { QStringLiteral("wasapi2sink") }) {} namespace { @@ -107,7 +109,7 @@ EngineDeviceList UWPDeviceFinder::ListDevices() { { EngineDevice default_device; - default_device.description = QStringLiteral("Default device"); + default_device.description = "Default device"_L1; default_device.iconname = default_device.GuessIconName(); devices.append(default_device); } diff --git a/src/engine/vlcengine.cpp b/src/engine/vlcengine.cpp index aa18758ae..9d3f0bcb1 100644 --- a/src/engine/vlcengine.cpp +++ b/src/engine/vlcengine.cpp @@ -40,6 +40,8 @@ #include "vlcengine.h" #include "vlcscopedref.h" +using namespace Qt::StringLiterals; + VLCEngine::VLCEngine(SharedPtr task_manager, QObject *parent) : EngineBase(parent), instance_(nullptr), @@ -131,7 +133,7 @@ bool VLCEngine::Play(const bool pause, const quint64 offset_nanosec) { if (!Initialized()) return false; // Set audio output - if (!output_.isEmpty() && output_ != QLatin1String("auto")) { + if (!output_.isEmpty() && output_ != "auto"_L1) { int result = libvlc_audio_output_set(player_, output_.toUtf8().constData()); if (result != 0) qLog(Error) << "Failed to set output to" << output_; } @@ -221,8 +223,8 @@ EngineBase::OutputDetailsList VLCEngine::GetOutputsList() const { OutputDetailsList outputs; OutputDetails output_auto; - output_auto.name = QLatin1String("auto"); - output_auto.description = QLatin1String("Automatically detected"); + output_auto.name = "auto"_L1; + output_auto.description = "Automatically detected"_L1; outputs << output_auto; libvlc_audio_output_t *audio_output_list = libvlc_audio_output_list_get(instance_); @@ -230,12 +232,12 @@ EngineBase::OutputDetailsList VLCEngine::GetOutputsList() const { OutputDetails output; output.name = QString::fromUtf8(audio_output->psz_name); output.description = QString::fromUtf8(audio_output->psz_description); - if (output.name == QLatin1String("auto")) output.iconname = QLatin1String("soundcard"); - else if ((output.name == QLatin1String("alsa"))||(output.name == QLatin1String("oss"))) output.iconname = QLatin1String("alsa"); - else if (output.name== QLatin1String("jack")) output.iconname = QLatin1String("jack"); - else if (output.name == QLatin1String("pulse")) output.iconname = QLatin1String("pulseaudio"); - else if (output.name == QLatin1String("afile")) output.iconname = QLatin1String("document-new"); - else output.iconname = QLatin1String("soundcard"); + if (output.name == "auto"_L1) output.iconname = "soundcard"_L1; + else if ((output.name == "alsa"_L1)||(output.name == "oss"_L1)) output.iconname = "alsa"_L1; + else if (output.name== "jack"_L1) output.iconname = "jack"_L1; + else if (output.name == "pulse"_L1) output.iconname = "pulseaudio"_L1; + else if (output.name == "afile"_L1) output.iconname = "document-new"_L1; + else output.iconname = "soundcard"_L1; outputs << output; } libvlc_audio_output_list_release(audio_output_list); @@ -252,11 +254,11 @@ bool VLCEngine::ValidOutput(const QString &output) { } bool VLCEngine::CustomDeviceSupport(const QString &output) const { - return output != QLatin1String("auto"); + return output != "auto"_L1; } bool VLCEngine::ALSADeviceSupport(const QString &output) const { - return output == QLatin1String("alsa"); + return output == "alsa"_L1; } bool VLCEngine::ExclusiveModeSupport(const QString &output) const { diff --git a/src/engine/vlcengine.h b/src/engine/vlcengine.h index 8ed09b85e..95e4ecb27 100644 --- a/src/engine/vlcengine.h +++ b/src/engine/vlcengine.h @@ -37,6 +37,8 @@ #include "enginebase.h" +using namespace Qt::Literals::StringLiterals; + struct libvlc_event_t; class TaskManager; @@ -67,7 +69,7 @@ class VLCEngine : public EngineBase { OutputDetailsList GetOutputsList() const override; bool ValidOutput(const QString &output) override; - QString DefaultOutput() const override { return QLatin1String(""); } + QString DefaultOutput() const override { return ""_L1; } bool CustomDeviceSupport(const QString &output) const override; bool ALSADeviceSupport(const QString &output) const override; bool ExclusiveModeSupport(const QString &output) const override; diff --git a/src/filterparser/filterparser.cpp b/src/filterparser/filterparser.cpp index 5854d5fe5..30854e9cd 100644 --- a/src/filterparser/filterparser.cpp +++ b/src/filterparser/filterparser.cpp @@ -28,6 +28,8 @@ #include "filtertree.h" #include "filterparsersearchcomparators.h" +using namespace Qt::StringLiterals; + FilterParser::FilterParser(const QString &filter_string) : filter_string_(filter_string), iter_{}, end_{} {} FilterTree *FilterParser::parse() { @@ -73,7 +75,7 @@ FilterTree *FilterParser::parseAndGroup() { do { group->add(parseSearchExpression()); advance(); - if (iter_ != end_ && *iter_ == QLatin1Char(')')) break; + if (iter_ != end_ && *iter_ == u')') break; if (checkOr(false)) { break; } @@ -87,16 +89,16 @@ FilterTree *FilterParser::parseAndGroup() { bool FilterParser::checkAnd() { if (iter_ != end_) { - if (*iter_ == QLatin1Char('A')) { + if (*iter_ == u'A') { buf_ += *iter_; ++iter_; - if (iter_ != end_ && *iter_ == QLatin1Char('N')) { + if (iter_ != end_ && *iter_ == u'N') { buf_ += *iter_; ++iter_; - if (iter_ != end_ && *iter_ == QLatin1Char('D')) { + if (iter_ != end_ && *iter_ == u'D') { buf_ += *iter_; ++iter_; - if (iter_ != end_ && (iter_->isSpace() || *iter_ == QLatin1Char('-') || *iter_ == QLatin1Char('('))) { + if (iter_ != end_ && (iter_->isSpace() || *iter_ == u'-' || *iter_ == u'(')) { advance(); buf_.clear(); return true; @@ -113,7 +115,7 @@ bool FilterParser::checkAnd() { bool FilterParser::checkOr(const bool step_over) { if (!buf_.isEmpty()) { - if (buf_ == QLatin1String("OR")) { + if (buf_ == "OR"_L1) { if (step_over) { buf_.clear(); advance(); @@ -123,13 +125,13 @@ bool FilterParser::checkOr(const bool step_over) { } else { if (iter_ != end_) { - if (*iter_ == QLatin1Char('O')) { + if (*iter_ == u'O') { buf_ += *iter_; ++iter_; - if (iter_ != end_ && *iter_ == QLatin1Char('R')) { + if (iter_ != end_ && *iter_ == u'R') { buf_ += *iter_; ++iter_; - if (iter_ != end_ && (iter_->isSpace() || *iter_ == QLatin1Char('-') || *iter_ == QLatin1Char('('))) { + if (iter_ != end_ && (iter_->isSpace() || *iter_ == u'-' || *iter_ == u'(')) { if (step_over) { buf_.clear(); advance(); @@ -149,19 +151,19 @@ FilterTree *FilterParser::parseSearchExpression() { advance(); if (iter_ == end_) return new NopFilter; - if (*iter_ == QLatin1Char('(')) { + if (*iter_ == u'(') { ++iter_; advance(); FilterTree *tree = parseOrGroup(); advance(); if (iter_ != end_) { - if (*iter_ == QLatin1Char(')')) { + if (*iter_ == u')') { ++iter_; } } return tree; } - else if (*iter_ == QLatin1Char('-')) { + else if (*iter_ == u'-') { ++iter_; FilterTree *tree = parseSearchExpression(); if (tree->type() != FilterTree::FilterType::Nop) return new NotFilter(tree); @@ -183,7 +185,7 @@ FilterTree *FilterParser::parseSearchTerm() { for (; iter_ != end_; ++iter_) { if (in_quotes) { - if (*iter_ == QLatin1Char('"')) { + if (*iter_ == u'"') { in_quotes = false; } else { @@ -191,23 +193,23 @@ FilterTree *FilterParser::parseSearchTerm() { } } else { - if (*iter_ == QLatin1Char('"')) { + if (*iter_ == u'"') { in_quotes = true; } - else if (column.isEmpty() && *iter_ == QLatin1Char(':')) { + else if (column.isEmpty() && *iter_ == u':') { column = buf_.toLower(); buf_.clear(); prefix.clear(); // Prefix isn't allowed here - let's ignore it } - else if (iter_->isSpace() || *iter_ == QLatin1Char('(') || *iter_ == QLatin1Char(')') || *iter_ == QLatin1Char('-')) { + else if (iter_->isSpace() || *iter_ == u'(' || *iter_ == u')' || *iter_ == u'-') { break; } else if (buf_.isEmpty()) { // We don't know whether there is a column part in this search term thus we assume the latter and just try and read a prefix - if (prefix.isEmpty() && (*iter_ == QLatin1Char('>') || *iter_ == QLatin1Char('<') || *iter_ == QLatin1Char('=') || *iter_ == QLatin1Char('!'))) { + if (prefix.isEmpty() && (*iter_ == u'>' || *iter_ == u'<' || *iter_ == u'=' || *iter_ == u'!')) { prefix += *iter_; } - else if (prefix != QLatin1Char('=') && *iter_ == QLatin1Char('=')) { + else if (prefix != u'=' && *iter_ == u'=') { prefix += *iter_; } else { @@ -229,17 +231,17 @@ FilterTree *FilterParser::parseSearchTerm() { FilterTree *FilterParser::createSearchTermTreeNode(const QString &column, const QString &prefix, const QString &value) const { - if (value.isEmpty() && prefix != QLatin1Char('=')) { + if (value.isEmpty() && prefix != u'=') { return new NopFilter; } FilterParserSearchTermComparator *cmp = nullptr; if (Song::kTextSearchColumns.contains(column, Qt::CaseInsensitive)) { - if (prefix == QLatin1Char('=') || prefix == QLatin1String("==")) { + if (prefix == u'=' || prefix == "=="_L1) { cmp = new FilterParserTextEqComparator(value); } - else if (prefix == QLatin1String("!=") || prefix == QLatin1String("<>")) { + else if (prefix == "!="_L1 || prefix == "<>"_L1) { cmp = new FilterParserTextNeComparator(value); } else { @@ -250,22 +252,22 @@ FilterTree *FilterParser::createSearchTermTreeNode(const QString &column, const bool ok = false; int number = value.toInt(&ok); if (ok) { - if (prefix == QLatin1Char('=') || prefix == QLatin1String("==")) { + if (prefix == u'=' || prefix == "=="_L1) { cmp = new FilterParserIntEqComparator(number); } - else if (prefix == QLatin1String("!=") || prefix == QLatin1String("<>")) { + else if (prefix == "!="_L1 || prefix == "<>"_L1) { cmp = new FilterParserIntNeComparator(number); } - else if (prefix == QLatin1Char('>')) { + else if (prefix == u'>') { cmp = new FilterParserIntGtComparator(number); } - else if (prefix == QLatin1String(">=")) { + else if (prefix == ">="_L1) { cmp = new FilterParserIntGeComparator(number); } - else if (prefix == QLatin1Char('<')) { + else if (prefix == u'<') { cmp = new FilterParserIntLtComparator(number); } - else if (prefix == QLatin1String("<=")) { + else if (prefix == "<="_L1) { cmp = new FilterParserIntLeComparator(number); } else { @@ -277,22 +279,22 @@ FilterTree *FilterParser::createSearchTermTreeNode(const QString &column, const bool ok = false; uint number = value.toUInt(&ok); if (ok) { - if (prefix == QLatin1Char('=') || prefix == QLatin1String("==")) { + if (prefix == u'=' || prefix == "=="_L1) { cmp = new FilterParserUIntEqComparator(number); } - else if (prefix == QLatin1String("!=") || prefix == QLatin1String("<>")) { + else if (prefix == "!="_L1 || prefix == "<>"_L1) { cmp = new FilterParserUIntNeComparator(number); } - else if (prefix == QLatin1Char('>')) { + else if (prefix == u'>') { cmp = new FilterParserUIntGtComparator(number); } - else if (prefix == QLatin1String(">=")) { + else if (prefix == ">="_L1) { cmp = new FilterParserUIntGeComparator(number); } - else if (prefix == QLatin1Char('<')) { + else if (prefix == u'<') { cmp = new FilterParserUIntLtComparator(number); } - else if (prefix == QLatin1String("<=")) { + else if (prefix == "<="_L1) { cmp = new FilterParserUIntLeComparator(number); } else { @@ -302,28 +304,28 @@ FilterTree *FilterParser::createSearchTermTreeNode(const QString &column, const } else if (Song::kInt64SearchColumns.contains(column, Qt::CaseInsensitive)) { qint64 number = 0; - if (column == QLatin1String("length")) { + if (column == "length"_L1) { number = ParseTime(value); } else { number = value.toLongLong(); } - if (prefix == QLatin1Char('=') || prefix == QLatin1String("==")) { + if (prefix == u'=' || prefix == "=="_L1) { cmp = new FilterParserInt64EqComparator(number); } - else if (prefix == QLatin1String("!=") || prefix == QLatin1String("<>")) { + else if (prefix == "!="_L1 || prefix == "<>"_L1) { cmp = new FilterParserInt64NeComparator(number); } - else if (prefix == QLatin1Char('>')) { + else if (prefix == u'>') { cmp = new FilterParserInt64GtComparator(number); } - else if (prefix == QLatin1String(">=")) { + else if (prefix == ">="_L1) { cmp = new FilterParserInt64GeComparator(number); } - else if (prefix == QLatin1Char('<')) { + else if (prefix == u'<') { cmp = new FilterParserInt64LtComparator(number); } - else if (prefix == QLatin1String("<=")) { + else if (prefix == "<="_L1) { cmp = new FilterParserInt64LeComparator(number); } else { @@ -332,22 +334,22 @@ FilterTree *FilterParser::createSearchTermTreeNode(const QString &column, const } else if (Song::kFloatSearchColumns.contains(column, Qt::CaseInsensitive)) { const float rating = ParseRating(value); - if (prefix == QLatin1Char('=') || prefix == QLatin1String("==")) { + if (prefix == u'=' || prefix == "=="_L1) { cmp = new FilterParserFloatEqComparator(rating); } - else if (prefix == QLatin1String("!=") || prefix == QLatin1String("<>")) { + else if (prefix == "!="_L1 || prefix == "<>"_L1) { cmp = new FilterParserFloatNeComparator(rating); } - else if (prefix == QLatin1Char('>')) { + else if (prefix == u'>') { cmp = new FilterParserFloatGtComparator(rating); } - else if (prefix == QLatin1String(">=")) { + else if (prefix == ">="_L1) { cmp = new FilterParserFloatGeComparator(rating); } - else if (prefix == QLatin1Char('<')) { + else if (prefix == u'<') { cmp = new FilterParserFloatLtComparator(rating); } - else if (prefix == QLatin1String("<=")) { + else if (prefix == "<="_L1) { cmp = new FilterParserFloatLeComparator(rating); } else { @@ -385,7 +387,7 @@ qint64 FilterParser::ParseTime(const QString &time_str) { if (c.isDigit()) { accum = accum * 10LL + static_cast(c.digitValue()); } - else if (c == QLatin1Char(':')) { + else if (c == u':') { seconds = seconds * 60LL + accum; accum = 0LL; ++colon_count; @@ -419,15 +421,15 @@ float FilterParser::ParseRating(const QString &rating_str) { float rating = -1.0F; // Check if the search is a float - if (rating_str.contains(QLatin1Char('f'), Qt::CaseInsensitive)) { - if (rating_str.count(QLatin1Char('f'), Qt::CaseInsensitive) > 1) { + if (rating_str.contains(u'f', Qt::CaseInsensitive)) { + if (rating_str.count(u'f', Qt::CaseInsensitive) > 1) { return rating; } QString rating_float_str = rating_str; - if (rating_str.at(0) == QLatin1Char('f') || rating_str.at(0) == QLatin1Char('F')) { + if (rating_str.at(0) == u'f' || rating_str.at(0) == u'F') { rating_float_str = rating_float_str.remove(0, 1); } - if (rating_str.right(1) == QLatin1Char('f') || rating_str.right(1) == QLatin1Char('F')) { + if (rating_str.right(1) == u'f' || rating_str.right(1) == u'F') { rating_float_str.chop(1); } bool ok = false; @@ -459,29 +461,29 @@ QString FilterParser::ToolTip() { return QLatin1String("

") + QObject::tr("Prefix a search term with a field name to limit the search to that field, e.g.:") + QLatin1Char(' ') + - QLatin1String("") + + ""_L1 + QObject::tr("artist") + - QLatin1String(":Strawbs ") + - QObject::tr("searches for all artists containing the word %1. ").arg(QLatin1String("Strawbs")) + - QLatin1String("

") + + ":Strawbs "_L1 + + QObject::tr("searches for all artists containing the word %1. ").arg("Strawbs"_L1) + + "

"_L1 + QObject::tr("Search terms for numerical fields can be prefixed with %1 or %2 to refine the search, e.g.: ") - .arg(QLatin1String(" =, !=, <, >, <="), QLatin1String(">=")) + - QLatin1String("") + + .arg(" =, !=, <, >, <="_L1, ">="_L1) + + ""_L1 + QObject::tr("rating") + - QLatin1String("") + - QLatin1String(":>=") + - QLatin1String("4") + - QLatin1String("

") + + ""_L1 + + ":>="_L1 + + "4"_L1 + + "

"_L1 + QObject::tr("Multiple search terms can also be combined with \"%1\" (default) and \"%2\", as well as grouped with parentheses. ") - .arg(QLatin1String("AND"), QLatin1String("OR")) + + .arg("AND"_L1, "OR"_L1) + - QLatin1String("

") + + "

"_L1 + QObject::tr("Available fields") + - QLatin1String(": ") + QLatin1String("") + - Song::kSearchColumns.join(QLatin1String(", ")) + - QLatin1String(".") + - QLatin1String("

"); + ": "_L1 + ""_L1 + + Song::kSearchColumns.join(", "_L1) + + "."_L1 + + "

"_L1; } diff --git a/src/filterparser/filtertree.cpp b/src/filterparser/filtertree.cpp index ab6d5fb37..6e5e6afc6 100644 --- a/src/filterparser/filtertree.cpp +++ b/src/filterparser/filtertree.cpp @@ -23,31 +23,33 @@ #include "filtertree.h" +using namespace Qt::StringLiterals; + FilterTree::FilterTree() = default; FilterTree::~FilterTree() = default; QVariant FilterTree::DataFromColumn(const QString &column, const Song &metadata) { - if (column == QLatin1String("albumartist")) return metadata.effective_albumartist(); - if (column == QLatin1String("artist")) return metadata.artist(); - if (column == QLatin1String("album")) return metadata.album(); - if (column == QLatin1String("title")) return metadata.PrettyTitle(); - if (column == QLatin1String("composer")) return metadata.composer(); - if (column == QLatin1String("performer")) return metadata.performer(); - if (column == QLatin1String("grouping")) return metadata.grouping(); - if (column == QLatin1String("genre")) return metadata.genre(); - if (column == QLatin1String("comment")) return metadata.comment(); - if (column == QLatin1String("track")) return metadata.track(); - if (column == QLatin1String("year")) return metadata.year(); - if (column == QLatin1String("length")) return metadata.length_nanosec(); - if (column == QLatin1String("samplerate")) return metadata.samplerate(); - if (column == QLatin1String("bitdepth")) return metadata.bitdepth(); - if (column == QLatin1String("bitrate")) return metadata.bitrate(); - if (column == QLatin1String("rating")) return metadata.rating(); - if (column == QLatin1String("playcount")) return metadata.playcount(); - if (column == QLatin1String("skipcount")) return metadata.skipcount(); - if (column == QLatin1String("filename")) return metadata.basefilename(); - if (column == QLatin1String("url")) return metadata.effective_stream_url().toString(); + if (column == "albumartist"_L1) return metadata.effective_albumartist(); + if (column == "artist"_L1) return metadata.artist(); + if (column == "album"_L1) return metadata.album(); + if (column == "title"_L1) return metadata.PrettyTitle(); + if (column == "composer"_L1) return metadata.composer(); + if (column == "performer"_L1) return metadata.performer(); + if (column == "grouping"_L1) return metadata.grouping(); + if (column == "genre"_L1) return metadata.genre(); + if (column == "comment"_L1) return metadata.comment(); + if (column == "track"_L1) return metadata.track(); + if (column == "year"_L1) return metadata.year(); + if (column == "length"_L1) return metadata.length_nanosec(); + if (column == "samplerate"_L1) return metadata.samplerate(); + if (column == "bitdepth"_L1) return metadata.bitdepth(); + if (column == "bitrate"_L1) return metadata.bitrate(); + if (column == "rating"_L1) return metadata.rating(); + if (column == "playcount"_L1) return metadata.playcount(); + if (column == "skipcount"_L1) return metadata.skipcount(); + if (column == "filename"_L1) return metadata.basefilename(); + if (column == "url"_L1) return metadata.effective_stream_url().toString(); return QVariant(); diff --git a/src/globalshortcuts/globalshortcutgrabber.cpp b/src/globalshortcuts/globalshortcutgrabber.cpp index d71a3556a..de3fabf3f 100644 --- a/src/globalshortcuts/globalshortcutgrabber.cpp +++ b/src/globalshortcuts/globalshortcutgrabber.cpp @@ -34,6 +34,8 @@ #include "globalshortcutgrabber.h" #include "ui_globalshortcutgrabber.h" +using namespace Qt::StringLiterals; + GlobalShortcutGrabber::GlobalShortcutGrabber(QWidget *parent) : QDialog(parent), ui_(new Ui::GlobalShortcutGrabber), @@ -110,7 +112,7 @@ bool GlobalShortcutGrabber::event(QEvent *e) { } void GlobalShortcutGrabber::UpdateText() { - ui_->label_key->setText(QLatin1String("") + ret_.toString(QKeySequence::NativeText) + QLatin1String("")); + ui_->label_key->setText(""_L1 + ret_.toString(QKeySequence::NativeText) + ""_L1); } void GlobalShortcutGrabber::Accepted() { diff --git a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp index 15a24144f..fb41b1ce6 100644 --- a/src/globalshortcuts/globalshortcutsbackend-gnome.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-gnome.cpp @@ -37,6 +37,8 @@ #include "gnomesettingsdaemon.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kService1[] = "org.gnome.SettingsDaemon.MediaKeys"; constexpr char kService2[] = "org.gnome.SettingsDaemon"; @@ -118,9 +120,9 @@ void GlobalShortcutsBackendGnome::DoUnregister() { void GlobalShortcutsBackendGnome::GnomeMediaKeyPressed(const QString&, const QString &key) { auto shortcuts = manager_->shortcuts(); - if (key == QLatin1String("Play")) shortcuts[QStringLiteral("play_pause")].action->trigger(); - if (key == QLatin1String("Stop")) shortcuts[QStringLiteral("stop")].action->trigger(); - if (key == QLatin1String("Next")) shortcuts[QStringLiteral("next_track")].action->trigger(); - if (key == QLatin1String("Previous")) shortcuts[QStringLiteral("prev_track")].action->trigger(); + 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(); } diff --git a/src/globalshortcuts/globalshortcutsbackend-kde.cpp b/src/globalshortcuts/globalshortcutsbackend-kde.cpp index 3c6d99f8b..742a6ca17 100644 --- a/src/globalshortcuts/globalshortcutsbackend-kde.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-kde.cpp @@ -176,7 +176,7 @@ QStringList GlobalShortcutsBackendKDE::GetActionId(const QString &id, const QAct ret << QCoreApplication::applicationName(); ret << id; ret << QCoreApplication::applicationName(); - ret << action->text().remove(QLatin1Char('&')); + ret << action->text().remove(u'&'); if (ret.back().isEmpty()) ret.back() = id; return ret; diff --git a/src/globalshortcuts/globalshortcutsbackend-mate.cpp b/src/globalshortcuts/globalshortcutsbackend-mate.cpp index 612f018d0..0f29f6555 100644 --- a/src/globalshortcuts/globalshortcutsbackend-mate.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-mate.cpp @@ -35,6 +35,8 @@ #include "matesettingsdaemon.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kService1[] = "org.mate.SettingsDaemon.MediaKeys"; constexpr char kService2[] = "org.mate.SettingsDaemon"; @@ -118,9 +120,9 @@ void GlobalShortcutsBackendMate::DoUnregister() { void GlobalShortcutsBackendMate::MateMediaKeyPressed(const QString&, const QString &key) { auto shortcuts = manager_->shortcuts(); - if (key == QLatin1String("Play")) shortcuts[QStringLiteral("play_pause")].action->trigger(); - if (key == QLatin1String("Stop")) shortcuts[QStringLiteral("stop")].action->trigger(); - if (key == QLatin1String("Next")) shortcuts[QStringLiteral("next_track")].action->trigger(); - if (key == QLatin1String("Previous")) shortcuts[QStringLiteral("prev_track")].action->trigger(); + 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(); } diff --git a/src/globalshortcuts/globalshortcutsbackend-x11.cpp b/src/globalshortcuts/globalshortcutsbackend-x11.cpp index 97b2f09e2..80257a694 100644 --- a/src/globalshortcuts/globalshortcutsbackend-x11.cpp +++ b/src/globalshortcuts/globalshortcutsbackend-x11.cpp @@ -33,6 +33,8 @@ #include "globalshortcutsbackend.h" #include "globalshortcut.h" +using namespace Qt::StringLiterals; + GlobalShortcutsBackendX11::GlobalShortcutsBackendX11(GlobalShortcutsManager *manager, QObject *parent) : GlobalShortcutsBackend(manager, GlobalShortcutsBackend::Type::X11, parent), gshortcut_init_(nullptr) {} @@ -45,7 +47,7 @@ bool GlobalShortcutsBackendX11::IsAvailable() const { bool GlobalShortcutsBackendX11::IsX11Available() { - return QApplication::platformName() == QLatin1String("xcb"); + return QApplication::platformName() == "xcb"_L1; } diff --git a/src/lyrics/chartlyricsprovider.cpp b/src/lyrics/chartlyricsprovider.cpp index fe0df2f22..35384cc10 100644 --- a/src/lyrics/chartlyricsprovider.cpp +++ b/src/lyrics/chartlyricsprovider.cpp @@ -38,6 +38,8 @@ #include "lyricssearchresult.h" #include "chartlyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrlSearch[] = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect"; } @@ -100,21 +102,21 @@ void ChartLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id, QXmlStreamReader::TokenType type = reader.readNext(); QString name = reader.name().toString(); if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("GetLyricResult")) { + if (name == "GetLyricResult"_L1) { result = LyricsSearchResult(); } - if (name == QLatin1String("LyricArtist")) { + if (name == "LyricArtist"_L1) { result.artist = reader.readElementText(); } - else if (name == QLatin1String("LyricSong")) { + else if (name == "LyricSong"_L1) { result.title = reader.readElementText(); } - else if (name == QLatin1String("Lyric")) { + else if (name == "Lyric"_L1) { result.lyrics = reader.readElementText(); } } else if (type == QXmlStreamReader::EndElement) { - if (name == QLatin1String("GetLyricResult")) { + if (name == "GetLyricResult"_L1) { if (!result.artist.isEmpty() && !result.title.isEmpty() && !result.lyrics.isEmpty() && (result.artist.compare(request.albumartist, Qt::CaseInsensitive) == 0 || result.artist.compare(request.artist, Qt::CaseInsensitive) == 0 || diff --git a/src/lyrics/elyricsnetlyricsprovider.cpp b/src/lyrics/elyricsnetlyricsprovider.cpp index 70a4a9b08..86606a66c 100644 --- a/src/lyrics/elyricsnetlyricsprovider.cpp +++ b/src/lyrics/elyricsnetlyricsprovider.cpp @@ -29,6 +29,8 @@ #include "lyricssearchrequest.h" #include "elyricsnetlyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrl[] = "https://www.elyrics.net/read/"; constexpr char kStartTag[] = "]*>"; @@ -41,7 +43,7 @@ ElyricsNetLyricsProvider::ElyricsNetLyricsProvider(SharedPtrrequest.albumartist, Qt::CaseInsensitive) && @@ -442,7 +443,7 @@ void GeniusLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id) continue; } - QUrl url(obj_result[QLatin1String("url")].toString()); + QUrl url(obj_result["url"_L1].toString()); if (!url.isValid()) continue; if (search->requests_lyric_.contains(url)) continue; diff --git a/src/lyrics/htmllyricsprovider.cpp b/src/lyrics/htmllyricsprovider.cpp index 33bbc93b5..d65b62d46 100644 --- a/src/lyrics/htmllyricsprovider.cpp +++ b/src/lyrics/htmllyricsprovider.cpp @@ -36,6 +36,8 @@ #include "htmllyricsprovider.h" #include "lyricssearchrequest.h" +using namespace Qt::StringLiterals; + HtmlLyricsProvider::HtmlLyricsProvider(const QString &name, const bool enabled, const QString &start_tag, const QString &end_tag, const QString &lyrics_start, const bool multiple, SharedPtr network, QObject *parent) : LyricsProvider(name, enabled, false, network, parent), start_tag_(start_tag), end_tag_(end_tag), lyrics_start_(lyrics_start), multiple_(multiple) {} @@ -110,7 +112,7 @@ void HtmlLyricsProvider::HandleLyricsReply(QNetworkReply *reply, const int id, c } const QString lyrics = ParseLyricsFromHTML(QString::fromUtf8(data), QRegularExpression(start_tag_), QRegularExpression(end_tag_), QRegularExpression(lyrics_start_), multiple_); - if (lyrics.isEmpty() || lyrics.contains(QLatin1String("we do not have the lyrics for"), Qt::CaseInsensitive)) { + if (lyrics.isEmpty() || lyrics.contains("we do not have the lyrics for"_L1, Qt::CaseInsensitive)) { qLog(Debug) << name_ << "No lyrics for" << request.artist << request.album << request.title; Q_EMIT SearchFinished(id); return; @@ -165,7 +167,7 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR if (end_lyrics_idx != -1 && start_lyrics_idx < end_lyrics_idx) { if (!lyrics.isEmpty()) { - lyrics.append(QLatin1Char('\n')); + lyrics.append(u'\n'); } static const QRegularExpression regex_html_tag_a(QStringLiteral("]*>[^<]*")); static const QRegularExpression regex_html_tag_script(QStringLiteral("")); @@ -174,8 +176,8 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR static const QRegularExpression regex_html_tag_p_close(QStringLiteral("

")); static const QRegularExpression regex_html_tags(QStringLiteral("<[^>]*>")); lyrics.append(content.mid(start_lyrics_idx, end_lyrics_idx - start_lyrics_idx) - .remove(QLatin1Char('\r')) - .remove(QLatin1Char('\n')) + .remove(u'\r') + .remove(u'\n') .remove(regex_html_tag_a) .remove(regex_html_tag_script) .remove(regex_html_tag_div) @@ -191,7 +193,7 @@ QString HtmlLyricsProvider::ParseLyricsFromHTML(const QString &content, const QR } while (start_idx > 0 && multiple); - if (lyrics.length() > 6000 || lyrics.contains(QLatin1String("there are no lyrics to"), Qt::CaseInsensitive)) { + if (lyrics.length() > 6000 || lyrics.contains("there are no lyrics to"_L1, Qt::CaseInsensitive)) { return QString(); } diff --git a/src/lyrics/letraslyricsprovider.cpp b/src/lyrics/letraslyricsprovider.cpp index 88be00eee..05cb65c58 100644 --- a/src/lyrics/letraslyricsprovider.cpp +++ b/src/lyrics/letraslyricsprovider.cpp @@ -30,6 +30,8 @@ #include "lyricssearchrequest.h" #include "letraslyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrl[] = "https://www.letras.mus.br/winamp.php"; constexpr char kStartTag[] = "]*>"; @@ -42,7 +44,7 @@ LetrasLyricsProvider::LetrasLyricsProvider(SharedPtr netwo QUrl LetrasLyricsProvider::Url(const LyricsSearchRequest &request) { - return QUrl(QLatin1String(kUrl) + QLatin1String("?musica=") + StringFixup(request.artist) + QLatin1String("&artista=") + StringFixup(request.title)); + return QUrl(QLatin1String(kUrl) + "?musica="_L1 + StringFixup(request.artist) + "&artista="_L1 + StringFixup(request.title)); } @@ -57,7 +59,7 @@ QString LetrasLyricsProvider::StringFixup(const QString &text) { .replace(regex_illegal_characters, QStringLiteral("_")) .replace(regex_multiple_whitespaces, QStringLiteral(" ")) .simplified() - .replace(QLatin1Char(' '), QLatin1Char('-')) + .replace(u' ', u'-') .toLower() )); diff --git a/src/lyrics/lololyricsprovider.cpp b/src/lyrics/lololyricsprovider.cpp index 5fc47f7e2..6593d17e1 100644 --- a/src/lyrics/lololyricsprovider.cpp +++ b/src/lyrics/lololyricsprovider.cpp @@ -38,6 +38,8 @@ #include "lyricssearchresult.h" #include "lololyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrlSearch[] = "http://api.lololyrics.com/0.5/getLyric"; } @@ -104,15 +106,15 @@ void LoloLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id, c QXmlStreamReader::TokenType type = reader.readNext(); QString name = reader.name().toString(); if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("result")) { + if (name == "result"_L1) { status.clear(); result = LyricsSearchResult(); } - else if (name == QLatin1String("status")) { + else if (name == "status"_L1) { status = reader.readElementText(); } - else if (name == QLatin1String("response")) { - if (status == QLatin1String("OK")) { + else if (name == "response"_L1) { + if (status == "OK"_L1) { result.lyrics = reader.readElementText(); } else { @@ -122,7 +124,7 @@ void LoloLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id, c } } else if (type == QXmlStreamReader::EndElement) { - if (name == QLatin1String("result")) { + if (name == "result"_L1) { if (!result.lyrics.isEmpty()) { result.lyrics = Utilities::DecodeHtmlEntities(result.lyrics); results << result; diff --git a/src/lyrics/lyricfindlyricsprovider.cpp b/src/lyrics/lyricfindlyricsprovider.cpp index 21ed7e6d9..784d12ac8 100644 --- a/src/lyrics/lyricfindlyricsprovider.cpp +++ b/src/lyrics/lyricfindlyricsprovider.cpp @@ -37,6 +37,8 @@ #include "utilities/transliterate.h" #include "lyricfindlyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrl[] = "https://lyrics.lyricfind.com/lyrics"; constexpr char kLyricsStart[] = ""); + const QString data_begin = ""_L1; qint64 begin_idx = content.indexOf(data_begin); QString content_json; if (begin_idx > 0) { @@ -333,86 +334,86 @@ void MusixmatchLyricsProvider::HandleLyricsReply(QNetworkReply *reply, LyricsSea return; } - if (!obj_data.contains(QLatin1String("props")) || !obj_data[QLatin1String("props")].isObject()) { + if (!obj_data.contains("props"_L1) || !obj_data["props"_L1].isObject()) { Error(QStringLiteral("Json reply is missing props."), obj_data); EndSearch(search, url); return; } - obj_data = obj_data[QLatin1String("props")].toObject(); + obj_data = obj_data["props"_L1].toObject(); - if (!obj_data.contains(QLatin1String("pageProps")) || !obj_data[QLatin1String("pageProps")].isObject()) { + if (!obj_data.contains("pageProps"_L1) || !obj_data["pageProps"_L1].isObject()) { Error(QStringLiteral("Json props is missing pageProps."), obj_data); EndSearch(search, url); return; } - obj_data = obj_data[QLatin1String("pageProps")].toObject(); + obj_data = obj_data["pageProps"_L1].toObject(); - if (!obj_data.contains(QLatin1String("data")) || !obj_data[QLatin1String("data")].isObject()) { + if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { Error(QStringLiteral("Json pageProps is missing data."), obj_data); EndSearch(search, url); return; } - obj_data = obj_data[QLatin1String("data")].toObject(); + obj_data = obj_data["data"_L1].toObject(); - if (!obj_data.contains(QLatin1String("trackInfo")) || !obj_data[QLatin1String("trackInfo")].isObject()) { + if (!obj_data.contains("trackInfo"_L1) || !obj_data["trackInfo"_L1].isObject()) { Error(QStringLiteral("Json data is missing trackInfo."), obj_data); EndSearch(search, url); return; } - obj_data = obj_data[QLatin1String("trackInfo")].toObject(); + obj_data = obj_data["trackInfo"_L1].toObject(); - if (!obj_data.contains(QLatin1String("data")) || !obj_data[QLatin1String("data")].isObject()) { + if (!obj_data.contains("data"_L1) || !obj_data["data"_L1].isObject()) { Error(QStringLiteral("Json trackInfo reply is missing data."), obj_data); EndSearch(search, url); return; } - obj_data = obj_data[QLatin1String("data")].toObject(); + obj_data = obj_data["data"_L1].toObject(); - if (!obj_data.contains(QLatin1String("track")) || !obj_data[QLatin1String("track")].isObject()) { + if (!obj_data.contains("track"_L1) || !obj_data["track"_L1].isObject()) { Error(QStringLiteral("Json data is missing track."), obj_data); EndSearch(search, url); return; } - const QJsonObject obj_track = obj_data[QLatin1String("track")].toObject(); + const QJsonObject obj_track = obj_data["track"_L1].toObject(); - if (!obj_track.contains(QLatin1String("hasLyrics")) || !obj_track[QLatin1String("hasLyrics")].isBool()) { + if (!obj_track.contains("hasLyrics"_L1) || !obj_track["hasLyrics"_L1].isBool()) { Error(QStringLiteral("Json track is missing hasLyrics."), obj_track); EndSearch(search, url); return; } - const bool has_lyrics = obj_track[QLatin1String("hasLyrics")].toBool(); + const bool has_lyrics = obj_track["hasLyrics"_L1].toBool(); if (!has_lyrics) { EndSearch(search, url); return; } LyricsSearchResult result; - if (obj_track.contains(QLatin1String("artistName")) && obj_track[QLatin1String("artistName")].isString()) { - result.artist = obj_track[QLatin1String("artistName")].toString(); + if (obj_track.contains("artistName"_L1) && obj_track["artistName"_L1].isString()) { + result.artist = obj_track["artistName"_L1].toString(); } - if (obj_track.contains(QLatin1String("albumName")) && obj_track[QLatin1String("albumName")].isString()) { - result.album = obj_track[QLatin1String("albumName")].toString(); + if (obj_track.contains("albumName"_L1) && obj_track["albumName"_L1].isString()) { + result.album = obj_track["albumName"_L1].toString(); } - if (obj_track.contains(QLatin1String("name")) && obj_track[QLatin1String("name")].isString()) { - result.title = obj_track[QLatin1String("name")].toString(); + if (obj_track.contains("name"_L1) && obj_track["name"_L1].isString()) { + result.title = obj_track["name"_L1].toString(); } - if (!obj_data.contains(QLatin1String("lyrics")) || !obj_data[QLatin1String("lyrics")].isObject()) { + if (!obj_data.contains("lyrics"_L1) || !obj_data["lyrics"_L1].isObject()) { Error(QStringLiteral("Json data is missing lyrics."), obj_data); EndSearch(search, url); return; } - QJsonObject obj_lyrics = obj_data[QLatin1String("lyrics")].toObject(); + QJsonObject obj_lyrics = obj_data["lyrics"_L1].toObject(); - if (!obj_lyrics.contains(QLatin1String("body")) || !obj_lyrics[QLatin1String("body")].isString()) { + if (!obj_lyrics.contains("body"_L1) || !obj_lyrics["body"_L1].isString()) { Error(QStringLiteral("Json lyrics reply is missing body."), obj_lyrics); EndSearch(search, url); return; } - result.lyrics = obj_lyrics[QLatin1String("body")].toString(); + result.lyrics = obj_lyrics["body"_L1].toString(); if (!result.lyrics.isEmpty()) { result.lyrics = Utilities::DecodeHtmlEntities(result.lyrics); diff --git a/src/lyrics/ovhlyricsprovider.cpp b/src/lyrics/ovhlyricsprovider.cpp index 9fc8fe7f3..ef4ddc979 100644 --- a/src/lyrics/ovhlyricsprovider.cpp +++ b/src/lyrics/ovhlyricsprovider.cpp @@ -37,6 +37,8 @@ #include "jsonlyricsprovider.h" #include "ovhlyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrlSearch[] = "https://api.lyrics.ovh/v1/"; } @@ -80,20 +82,20 @@ void OVHLyricsProvider::HandleSearchReply(QNetworkReply *reply, const int id, co return; } - if (json_obj.contains(QLatin1String("error"))) { - Error(json_obj[QLatin1String("error")].toString()); + if (json_obj.contains("error"_L1)) { + Error(json_obj["error"_L1].toString()); qLog(Debug) << "OVHLyrics: No lyrics for" << request.artist << request.title; Q_EMIT SearchFinished(id); return; } - if (!json_obj.contains(QLatin1String("lyrics"))) { + if (!json_obj.contains("lyrics"_L1)) { Q_EMIT SearchFinished(id); return; } LyricsSearchResult result; - result.lyrics = json_obj[QLatin1String("lyrics")].toString(); + result.lyrics = json_obj["lyrics"_L1].toString(); if (result.lyrics.isEmpty()) { qLog(Debug) << "OVHLyrics: No lyrics for" << request.artist << request.title; diff --git a/src/lyrics/songlyricscomlyricsprovider.cpp b/src/lyrics/songlyricscomlyricsprovider.cpp index 9c7c1a75e..55302aee5 100644 --- a/src/lyrics/songlyricscomlyricsprovider.cpp +++ b/src/lyrics/songlyricscomlyricsprovider.cpp @@ -28,6 +28,8 @@ #include "lyricssearchrequest.h" #include "songlyricscomlyricsprovider.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kUrl[] = "https://www.songlyrics.com/"; constexpr char kStartTag[] = "]*>"; @@ -40,7 +42,7 @@ SongLyricsComLyricsProvider::SongLyricsComLyricsProvider(SharedPtrobjectName(); @@ -258,7 +259,7 @@ int main(int argc, char *argv[]) { QString system_language = QLocale::system().uiLanguages().empty() ? QLocale::system().name() : QLocale::system().uiLanguages().first(); // uiLanguages returns strings with "-" as separators for language/region; however QTranslator needs "_" separators - system_language.replace(QLatin1Char('-'), QLatin1Char('_')); + system_language.replace(u'-', u'_'); const QString language = override_language.isEmpty() ? system_language : override_language; diff --git a/src/moodbar/moodbarpipeline.cpp b/src/moodbar/moodbarpipeline.cpp index c5e3631e7..55cfa096c 100644 --- a/src/moodbar/moodbarpipeline.cpp +++ b/src/moodbar/moodbarpipeline.cpp @@ -39,6 +39,7 @@ #include "ext/gstmoodbar/gstfastspectrum.h" +using namespace Qt::StringLiterals; using std::make_unique; namespace { @@ -73,7 +74,7 @@ GstElement *MoodbarPipeline::CreateElement(const QString &factory_name) { QByteArray MoodbarPipeline::ToGstUrl(const QUrl &url) { if (url.isLocalFile() && !url.host().isEmpty()) { - QString str = QLatin1String("file:////") + url.host() + url.path(); + QString str = "file:////"_L1 + url.host() + url.path(); return str.toUtf8(); } diff --git a/src/musicbrainz/acoustidclient.cpp b/src/musicbrainz/acoustidclient.cpp index e11aaa4f0..dd9ef87ed 100644 --- a/src/musicbrainz/acoustidclient.cpp +++ b/src/musicbrainz/acoustidclient.cpp @@ -49,6 +49,8 @@ #include "acoustidclient.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kClientId[] = "0qjUoxbowg"; constexpr char kUrl[] = "https://api.acoustid.org/v2/lookup"; @@ -151,8 +153,8 @@ void AcoustidClient::RequestFinished(QNetworkReply *reply, const int request_id) QJsonObject json_object = json_document.object(); - QString status = json_object[QLatin1String("status")].toString(); - if (status != QLatin1String("ok")) { + QString status = json_object["status"_L1].toString(); + if (status != "ok"_L1) { Q_EMIT Finished(request_id, QStringList(), status); return; } @@ -162,19 +164,19 @@ void AcoustidClient::RequestFinished(QNetworkReply *reply, const int request_id) // -then sort results by number of sources (the results are originally // unsorted but results with more sources are likely to be more accurate) // -keep only the ids, as sources where useful only to sort the results - const QJsonArray json_results = json_object[QLatin1String("results")].toArray(); + const QJsonArray json_results = json_object["results"_L1].toArray(); // List of pairs QList id_source_list; for (const QJsonValue &v : json_results) { QJsonObject r = v.toObject(); - if (!r[QLatin1String("recordings")].isUndefined()) { - const QJsonArray json_recordings = r[QLatin1String("recordings")].toArray(); + if (!r["recordings"_L1].isUndefined()) { + const QJsonArray json_recordings = r["recordings"_L1].toArray(); for (const QJsonValue &recording : json_recordings) { QJsonObject o = recording.toObject(); - if (!o[QLatin1String("id")].isUndefined()) { - id_source_list << IdSource(o[QLatin1String("id")].toString(), o[QLatin1String("sources")].toInt()); + if (!o["id"_L1].isUndefined()) { + id_source_list << IdSource(o["id"_L1].toString(), o["sources"_L1].toInt()); } } } diff --git a/src/musicbrainz/musicbrainzclient.cpp b/src/musicbrainz/musicbrainzclient.cpp index c08114b0c..6812e6d16 100644 --- a/src/musicbrainz/musicbrainzclient.cpp +++ b/src/musicbrainz/musicbrainzclient.cpp @@ -50,6 +50,8 @@ #include "utilities/xmlutils.h" #include "musicbrainzclient.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kTrackUrl[] = "https://musicbrainz.org/ws/2/recording/"; constexpr char kDiscUrl[] = "https://musicbrainz.org/ws/2/discid/"; @@ -96,8 +98,8 @@ QByteArray MusicBrainzClient::GetReplyData(QNetworkReply *reply, QString &error) QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error"))) { - error = json_obj[QLatin1String("error")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("error"_L1)) { + error = json_obj["error"_L1].toString(); } } if (error.isEmpty()) { @@ -213,7 +215,7 @@ void MusicBrainzClient::RequestFinished(QNetworkReply *reply, const int id, cons QXmlStreamReader reader(data); ResultList res; while (!reader.atEnd()) { - if (reader.readNext() == QXmlStreamReader::StartElement && reader.name().toString() == QLatin1String("recording")) { + if (reader.readNext() == QXmlStreamReader::StartElement && reader.name().toString() == "recording"_L1) { const ResultList tracks = ParseTrack(&reader); for (const Result &track : tracks) { if (!track.title_.isEmpty()) { @@ -268,20 +270,20 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString &discid, QNetworkRep QXmlStreamReader::TokenType type = reader.readNext(); if (type == QXmlStreamReader::StartElement) { QString name = reader.name().toString(); - if (name == QLatin1String("title")) { + if (name == "title"_L1) { album = reader.readElementText(); } - else if (name == QLatin1String("date")) { + else if (name == "date"_L1) { QRegularExpression regex(QString::fromLatin1(kDateRegex)); QRegularExpressionMatch re_match = regex.match(reader.readElementText()); if (re_match.capturedStart() == 0) { year = re_match.captured(0).toInt(); } } - else if (name == QLatin1String("artist-credit")) { + else if (name == "artist-credit"_L1) { ParseArtist(&reader, &artist); } - else if (name == QLatin1String("medium-list")) { + else if (name == "medium-list"_L1) { break; } } @@ -290,7 +292,7 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString &discid, QNetworkRep while (!reader.atEnd()) { QXmlStreamReader::TokenType token = reader.readNext(); QString name = reader.name().toString(); - if (token == QXmlStreamReader::StartElement && name == QLatin1String("medium")) { + if (token == QXmlStreamReader::StartElement && name == "medium"_L1) { // Get the medium with a matching discid. if (MediumHasDiscid(discid, &reader)) { const ResultList tracks = ParseMedium(&reader); @@ -304,7 +306,7 @@ void MusicBrainzClient::DiscIdRequestFinished(const QString &discid, QNetworkRep Utilities::ConsumeCurrentElement(&reader); } } - else if (token == QXmlStreamReader::EndElement && name == QLatin1String("medium-list")) { + else if (token == QXmlStreamReader::EndElement && name == "medium-list"_L1) { break; } } @@ -326,10 +328,10 @@ bool MusicBrainzClient::MediumHasDiscid(const QString &discid, QXmlStreamReader QXmlStreamReader::TokenType type = reader->readNext(); QString name = reader->name().toString(); - if (type == QXmlStreamReader::StartElement && name == QLatin1String("disc") && reader->attributes().value(QLatin1String("id")).toString() == discid) { + if (type == QXmlStreamReader::StartElement && name == "disc"_L1 && reader->attributes().value("id"_L1).toString() == discid) { return true; } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("disc-list")) { + if (type == QXmlStreamReader::EndElement && name == "disc-list"_L1) { return false; } } @@ -346,14 +348,14 @@ MusicBrainzClient::ResultList MusicBrainzClient::ParseMedium(QXmlStreamReader *r QString name = reader->name().toString(); if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("track")) { + if (name == "track"_L1) { Result result; result = ParseTrackFromDisc(reader); ret << result; } } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("track-list")) { + if (type == QXmlStreamReader::EndElement && name == "track-list"_L1) { break; } } @@ -371,18 +373,18 @@ MusicBrainzClient::Result MusicBrainzClient::ParseTrackFromDisc(QXmlStreamReader QString name = reader->name().toString(); if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("position")) { + if (name == "position"_L1) { result.track_ = reader->readElementText().toInt(); } - else if (name == QLatin1String("length")) { + else if (name == "length"_L1) { result.duration_msec_ = reader->readElementText().toInt(); } - else if (name == QLatin1String("title")) { + else if (name == "title"_L1) { result.title_ = reader->readElementText(); } } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("track")) { + if (type == QXmlStreamReader::EndElement && name == "track"_L1) { break; } } @@ -402,21 +404,21 @@ MusicBrainzClient::ResultList MusicBrainzClient::ParseTrack(QXmlStreamReader *re if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("title")) { + if (name == "title"_L1) { result.title_ = reader->readElementText(); } - else if (name == QLatin1String("length")) { + else if (name == "length"_L1) { result.duration_msec_ = reader->readElementText().toInt(); } - else if (name == QLatin1String("artist-credit")) { + else if (name == "artist-credit"_L1) { ParseArtist(reader, &result.artist_); } - else if (name == QLatin1String("release")) { + else if (name == "release"_L1) { releases << ParseRelease(reader); } } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("recording")) { + if (type == QXmlStreamReader::EndElement && name == "recording"_L1) { break; } } @@ -445,15 +447,15 @@ void MusicBrainzClient::ParseArtist(QXmlStreamReader *reader, QString *artist) { while (!reader->atEnd()) { QXmlStreamReader::TokenType type = reader->readNext(); QString name = reader->name().toString(); - if (type == QXmlStreamReader::StartElement && name == QLatin1String("name-credit")) { - join_phrase = reader->attributes().value(QLatin1String("joinphrase")).toString(); + if (type == QXmlStreamReader::StartElement && name == "name-credit"_L1) { + join_phrase = reader->attributes().value("joinphrase"_L1).toString(); } - if (type == QXmlStreamReader::StartElement && name == QLatin1String("name")) { + if (type == QXmlStreamReader::StartElement && name == "name"_L1) { *artist += reader->readElementText() + join_phrase; } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("artist-credit")) { + if (type == QXmlStreamReader::EndElement && name == "artist-credit"_L1) { return; } } @@ -468,26 +470,26 @@ MusicBrainzClient::Release MusicBrainzClient::ParseRelease(QXmlStreamReader *rea QString name = reader->name().toString(); if (type == QXmlStreamReader::StartElement) { - if (name == QLatin1String("title")) { + if (name == "title"_L1) { ret.album_ = reader->readElementText(); } - else if (name == QLatin1String("status")) { + else if (name == "status"_L1) { ret.SetStatusFromString(reader->readElementText()); } - else if (name == QLatin1String("date")) { + else if (name == "date"_L1) { QRegularExpression regex(QString::fromLatin1(kDateRegex)); QRegularExpressionMatch re_match = regex.match(reader->readElementText()); if (re_match.capturedStart() == 0) { ret.year_ = re_match.captured(0).toInt(); } } - else if (name == QLatin1String("track-list")) { - ret.track_ = reader->attributes().value(QLatin1String("offset")).toString().toInt() + 1; + else if (name == "track-list"_L1) { + ret.track_ = reader->attributes().value("offset"_L1).toString().toInt() + 1; Utilities::ConsumeCurrentElement(reader); } } - if (type == QXmlStreamReader::EndElement && name == QLatin1String("release")) { + if (type == QXmlStreamReader::EndElement && name == "release"_L1) { break; } } diff --git a/src/musicbrainz/musicbrainzclient.h b/src/musicbrainz/musicbrainzclient.h index 1bb5eab97..ef9de7099 100644 --- a/src/musicbrainz/musicbrainzclient.h +++ b/src/musicbrainz/musicbrainzclient.h @@ -35,6 +35,8 @@ #include "core/shared_ptr.h" +using namespace Qt::Literals::StringLiterals; + class QNetworkReply; class QTimer; class QXmlStreamReader; @@ -152,16 +154,16 @@ class MusicBrainzClient : public QObject { } void SetStatusFromString(const QString &s) { - if (s.compare(QLatin1String("Official"), Qt::CaseInsensitive) == 0) { + if (s.compare("Official"_L1, Qt::CaseInsensitive) == 0) { status_ = Status::Official; } - else if (s.compare(QLatin1String("Promotion"), Qt::CaseInsensitive) == 0) { + else if (s.compare("Promotion"_L1, Qt::CaseInsensitive) == 0) { status_ = Status::Promotional; } - else if (s.compare(QLatin1String("Bootleg"), Qt::CaseInsensitive) == 0) { + else if (s.compare("Bootleg"_L1, Qt::CaseInsensitive) == 0) { status_ = Status::Bootleg; } - else if (s.compare(QLatin1String("Pseudo-release"), Qt::CaseInsensitive) == 0) { + else if (s.compare("Pseudo-release"_L1, Qt::CaseInsensitive) == 0) { status_ = Status::PseudoRelease; } else { diff --git a/src/organize/organizeformat.cpp b/src/organize/organizeformat.cpp index 7d0238a3b..41bc0b9af 100644 --- a/src/organize/organizeformat.cpp +++ b/src/organize/organizeformat.cpp @@ -36,6 +36,8 @@ #include "organizeformat.h" #include "organizeformatvalidator.h" +using namespace Qt::StringLiterals; + const char OrganizeFormat::kBlockPattern[] = "\\{([^{}]+)\\}"; const char OrganizeFormat::kTagPattern[] = "\\%([a-zA-Z]*)"; @@ -73,7 +75,7 @@ OrganizeFormat::OrganizeFormat(const QString &format) void OrganizeFormat::set_format(const QString &v) { format_ = v; - format_.replace(QLatin1Char('\\'), QLatin1Char('/')); + format_.replace(u'\\', u'/'); } bool OrganizeFormat::IsValid() const { @@ -104,15 +106,15 @@ OrganizeFormat::GetFilenameForSongResult OrganizeFormat::GetFilenameForSong(cons filepath.clear(); if (!path.isEmpty()) { filepath.append(path); - if (path.right(1) != QLatin1Char('/')) { - filepath.append(QLatin1Char('/')); + if (path.right(1) != u'/') { + filepath.append(u'/'); } } filepath.append(song.basefilename()); } } - if (filepath.isEmpty() || (filepath.contains(QLatin1Char('/')) && (filepath.section(QLatin1Char('/'), 0, -2).isEmpty() || filepath.section(QLatin1Char('/'), 0, -2).isEmpty()))) { + if (filepath.isEmpty() || (filepath.contains(u'/') && (filepath.section(u'/', 0, -2).isEmpty() || filepath.section(u'/', 0, -2).isEmpty()))) { return GetFilenameForSongResult(); } @@ -159,14 +161,14 @@ OrganizeFormat::GetFilenameForSongResult OrganizeFormat::GetFilenameForSong(cons extension = info.suffix(); } } - if (!info.path().isEmpty() && info.path() != QLatin1Char('.')) { + if (!info.path().isEmpty() && info.path() != u'.') { filepath.append(info.path()); - filepath.append(QLatin1Char('/')); + filepath.append(u'/'); } filepath.append(info.completeBaseName()); // Fix any parts of the path that start with dots. - QStringList parts_old = filepath.split(QLatin1Char('/')); + QStringList parts_old = filepath.split(u'/'); QStringList parts_new; for (int i = 0; i < parts_old.count(); ++i) { QString part = parts_old[i]; @@ -179,7 +181,7 @@ OrganizeFormat::GetFilenameForSongResult OrganizeFormat::GetFilenameForSong(cons part = part.trimmed(); parts_new.append(part); } - filepath = parts_new.join(QLatin1Char('/')); + filepath = parts_new.join(u'/'); if (replace_spaces_) { static const QRegularExpression regex_whitespaces(QStringLiteral("\\s")); @@ -205,7 +207,7 @@ QString OrganizeFormat::ParseBlock(QString block, const Song &song, bool *have_t // Recursively parse the block bool empty = false; QString value = ParseBlock(re_match.captured(1), song, have_tagdata, &empty); - if (empty) value = QLatin1String(""); + if (empty) value = ""_L1; // Replace the block's value block.replace(pos, re_match.capturedLength(), value); @@ -243,61 +245,61 @@ QString OrganizeFormat::TagValue(const QString &tag, const Song &song) const { QString value; - if (tag == QLatin1String("title")) { + if (tag == "title"_L1) { value = song.title(); } - else if (tag == QLatin1String("album")) { + else if (tag == "album"_L1) { value = song.album(); } - else if (tag == QLatin1String("artist")) { + else if (tag == "artist"_L1) { value = song.artist(); } - else if (tag == QLatin1String("composer")) { + else if (tag == "composer"_L1) { value = song.composer(); } - else if (tag == QLatin1String("performer")) { + else if (tag == "performer"_L1) { value = song.performer(); } - else if (tag == QLatin1String("grouping")) { + else if (tag == "grouping"_L1) { value = song.grouping(); } - else if (tag == QLatin1String("lyrics")) { + else if (tag == "lyrics"_L1) { value = song.lyrics(); } - else if (tag == QLatin1String("genre")) { + else if (tag == "genre"_L1) { value = song.genre(); } - else if (tag == QLatin1String("comment")) { + else if (tag == "comment"_L1) { value = song.comment(); } - else if (tag == QLatin1String("year")) { + else if (tag == "year"_L1) { value = QString::number(song.year()); } - else if (tag == QLatin1String("originalyear")) { + else if (tag == "originalyear"_L1) { value = QString::number(song.effective_originalyear()); } - else if (tag == QLatin1String("track")) { + else if (tag == "track"_L1) { value = QString::number(song.track()); } - else if (tag == QLatin1String("disc")) { + else if (tag == "disc"_L1) { value = QString::number(song.disc()); } - else if (tag == QLatin1String("length")) { + else if (tag == "length"_L1) { value = QString::number(song.length_nanosec() / kNsecPerSec); } - else if (tag == QLatin1String("bitrate")) { + else if (tag == "bitrate"_L1) { value = QString::number(song.bitrate()); } - else if (tag == QLatin1String("samplerate")) { + else if (tag == "samplerate"_L1) { value = QString::number(song.samplerate()); } - else if (tag == QLatin1String("bitdepth")) { + else if (tag == "bitdepth"_L1) { value = QString::number(song.bitdepth()); } - else if (tag == QLatin1String("extension")) { + else if (tag == "extension"_L1) { value = QFileInfo(song.url().toLocalFile()).suffix(); } - else if (tag == QLatin1String("artistinitial")) { + else if (tag == "artistinitial"_L1) { value = song.effective_albumartist().trimmed(); if (!value.isEmpty()) { static const QRegularExpression regex_the(QStringLiteral("^the\\s+"), QRegularExpression::CaseInsensitiveOption); @@ -305,19 +307,19 @@ QString OrganizeFormat::TagValue(const QString &tag, const Song &song) const { value = value[0].toUpper(); } } - else if (tag == QLatin1String("albumartist")) { + else if (tag == "albumartist"_L1) { value = song.is_compilation() ? QStringLiteral("Various Artists") : song.effective_albumartist(); } - if (value == QLatin1Char('0') || value == QLatin1String("-1")) value = QLatin1String(""); + if (value == u'0' || value == "-1"_L1) value = ""_L1; // Prepend a 0 to single-digit track numbers - if (tag == QLatin1String("track") && value.length() == 1) value.prepend(QLatin1Char('0')); + if (tag == "track"_L1 && value.length() == 1) value.prepend(u'0'); // Replace characters that really shouldn't be in paths static const QRegularExpression regex_invalid_dir_characters(QString::fromLatin1(kInvalidDirCharactersRegex), QRegularExpression::PatternOption::CaseInsensitiveOption); value = value.remove(regex_invalid_dir_characters); - if (remove_problematic_) value = value.remove(QLatin1Char('.')); + if (remove_problematic_) value = value.remove(u'.'); value = value.trimmed(); return value; diff --git a/src/organize/organizeformatvalidator.cpp b/src/organize/organizeformatvalidator.cpp index 9b9e276bd..ee20dad7a 100644 --- a/src/organize/organizeformatvalidator.cpp +++ b/src/organize/organizeformatvalidator.cpp @@ -34,10 +34,10 @@ QValidator::State OrganizeFormatValidator::validate(QString &input, int &_pos) c // Make sure all the blocks match up int block_level = 0; for (int i = 0; i < input.length(); ++i) { - if (input[i] == QLatin1Char('{')) { + if (input[i] == u'{') { ++block_level; } - else if (input[i] == QLatin1Char('}')) { + else if (input[i] == u'}') { --block_level; } diff --git a/src/osd/osdbase.cpp b/src/osd/osdbase.cpp index d79892edf..61b8d4790 100644 --- a/src/osd/osdbase.cpp +++ b/src/osd/osdbase.cpp @@ -43,6 +43,8 @@ #include "utilities/strutils.h" #include "covermanager/currentalbumcoverloader.h" +using namespace Qt::StringLiterals; + const char *OSDBase::kSettingsGroup = "OSD"; OSDBase::OSDBase(SharedPtr tray_icon, Application *app, QObject *parent) @@ -169,7 +171,7 @@ void OSDBase::ShowPlaying(const Song &song, const QUrl &cover_url, const QImage #endif } - QString message = message_parts.join(QLatin1String(", ")); + QString message = message_parts.join(", "_L1); if (html_escaped) message = message.toHtmlEscaped(); if (show_art_) { @@ -201,7 +203,7 @@ void OSDBase::Paused() { else { summary = last_song_.PrettyTitle(); if (!last_song_.artist().isEmpty()) { - summary.prepend(QLatin1String(" - ")); + summary.prepend(" - "_L1); summary.prepend(last_song_.artist()); } if (behaviour_ == Behaviour::Pretty) { @@ -246,7 +248,7 @@ void OSDBase::Stopped() { else { summary = last_song_.PrettyTitle(); if (!last_song_.artist().isEmpty()) { - summary.prepend(QLatin1String(" - ")); + summary.prepend(" - "_L1); summary.prepend(last_song_.artist()); } if (behaviour_ == Behaviour::Pretty) { @@ -379,7 +381,7 @@ QString OSDBase::ReplaceMessage(const MessageType type, const QString &message, #endif bool html_escaped = false; - QString newline = QLatin1String(""); + QString newline = ""_L1; // We need different strings depending on notification type switch (behaviour_) { @@ -392,12 +394,12 @@ QString OSDBase::ReplaceMessage(const MessageType type, const QString &message, switch (type) { case MessageType::Summary:{ html_escaped = false; - newline = QLatin1String(""); + newline = ""_L1; break; } case MessageType::Message:{ html_escaped = true; - newline = QLatin1String("
"); + newline = "
"_L1; break; } } @@ -412,12 +414,12 @@ QString OSDBase::ReplaceMessage(const MessageType type, const QString &message, case Behaviour::TrayPopup: qLog(Debug) << "New line not supported by this notification type."; html_escaped = false; - newline = QLatin1String(""); + newline = ""_L1; break; case Behaviour::Disabled: // When notifications are disabled, we force the PrettyOSD case Behaviour::Pretty: html_escaped = true; - newline = QLatin1String("
"); + newline = "
"_L1; break; } diff --git a/src/osd/osdpretty.cpp b/src/osd/osdpretty.cpp index f9746b844..96f63aa2d 100644 --- a/src/osd/osdpretty.cpp +++ b/src/osd/osdpretty.cpp @@ -62,6 +62,8 @@ #include "osdpretty.h" #include "ui_osdpretty.h" +using namespace Qt::StringLiterals; + #ifdef Q_OS_WIN # include #endif @@ -248,7 +250,7 @@ void OSDPretty::Load() { fading_enabled_ = s.value("fading", false).toBool(); #endif - if (s.contains(QLatin1String("popup_screen"))) { + if (s.contains("popup_screen"_L1)) { popup_screen_name_ = s.value("popup_screen").toString(); if (screens_.contains(popup_screen_name_)) { popup_screen_ = screens_.value(popup_screen_name_); @@ -264,7 +266,7 @@ void OSDPretty::Load() { if (current_screen()) popup_screen_name_ = current_screen()->name(); } - if (s.contains(QLatin1String("popup_pos"))) { + if (s.contains("popup_pos"_L1)) { popup_pos_ = s.value("popup_pos").toPoint(); } else { diff --git a/src/playlist/dynamicplaylistcontrols.cpp b/src/playlist/dynamicplaylistcontrols.cpp index f8eae4ede..69a8cf326 100644 --- a/src/playlist/dynamicplaylistcontrols.cpp +++ b/src/playlist/dynamicplaylistcontrols.cpp @@ -29,6 +29,8 @@ #include "dynamicplaylistcontrols.h" #include "ui_dynamicplaylistcontrols.h" +using namespace Qt::StringLiterals; + DynamicPlaylistControls::DynamicPlaylistControls(QWidget *parent) : QWidget(parent), ui_(new Ui_DynamicPlaylistControls) { @@ -45,7 +47,7 @@ DynamicPlaylistControls::DynamicPlaylistControls(QWidget *parent) stylesheet_file.close(); QColor color = palette().color(QPalette::Light); color.setAlpha(50); - stylesheet.replace(QLatin1String("%background"), QStringLiteral("rgba(%1, %2, %3, %4%5)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue()), QString::number(color.alpha())).arg(QLatin1Char('%'))); + stylesheet.replace("%background"_L1, QStringLiteral("rgba(%1, %2, %3, %4%5)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue()), QString::number(color.alpha())).arg(u'%')); setStyleSheet(stylesheet); } diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 286f66158..238d0ebf7 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -96,6 +96,7 @@ using std::make_shared; using namespace std::chrono_literals; +using namespace Qt::StringLiterals; const char *Playlist::kSettingsGroup = "Playlist"; const char *Playlist::kCddaMimeType = "x-content/audio-cdda"; @@ -1410,7 +1411,7 @@ QString Playlist::column_name(const Column column) { break; } - return QLatin1String(""); + return ""_L1; } @@ -1428,7 +1429,7 @@ QString Playlist::abbreviated_column_name(const Column column) { return column_name; } - return QLatin1String(""); + return ""_L1; } diff --git a/src/playlist/playlistbackend.cpp b/src/playlist/playlistbackend.cpp index dda409c50..88246f9db 100644 --- a/src/playlist/playlistbackend.cpp +++ b/src/playlist/playlistbackend.cpp @@ -53,6 +53,7 @@ #include "playlistparsers/cueparser.h" #include "smartplaylists/playlistgenerator.h" +using namespace Qt::StringLiterals; using std::make_shared; namespace { @@ -121,7 +122,7 @@ PlaylistBackend::PlaylistList PlaylistBackend::GetPlaylists(const GetPlaylistsFl } QString condition; if (!condition_list.isEmpty()) { - condition = QLatin1String(" WHERE ") + condition_list.join(QLatin1String(" OR ")); + condition = " WHERE "_L1 + condition_list.join(" OR "_L1); } SqlQuery q(db); @@ -302,7 +303,7 @@ PlaylistItemPtr PlaylistBackend::RestoreCueData(PlaylistItemPtr item, SharedPtr< QFile cue_file(cue_path); if (!cue_file.open(QIODevice::ReadOnly)) return item; - song_list = cue_parser.Load(&cue_file, cue_path, QDir(cue_path.section(QLatin1Char('/'), 0, -2))); + song_list = cue_parser.Load(&cue_file, cue_path, QDir(cue_path.section(u'/', 0, -2))); cue_file.close(); state->cached_cues_[cue_path] = song_list; } diff --git a/src/playlist/playlistdelegates.cpp b/src/playlist/playlistdelegates.cpp index a3981c405..e96f1ea75 100644 --- a/src/playlist/playlistdelegates.cpp +++ b/src/playlist/playlistdelegates.cpp @@ -71,6 +71,8 @@ #include "playlist/playlist.h" #include "playlistdelegates.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kQueueBoxBorder = 1; constexpr int kQueueBoxCornerRadius = 3; @@ -258,10 +260,10 @@ bool PlaylistDelegateBase::helpEvent(QHelpEvent *event, QAbstractItemView *view, // Special case: we want newlines in the comment tooltip if (idx.column() == static_cast(Playlist::Column::Comment)) { text = idx.data(Qt::ToolTipRole).toString().toHtmlEscaped(); - text.replace(QLatin1String("\\r\\n"), QLatin1String("
")); - text.replace(QLatin1String("\\n"), QLatin1String("
")); - text.replace(QLatin1String("\r\n"), QLatin1String("
")); - text.replace(QLatin1String("\n"), QLatin1String("
")); + text.replace("\\r\\n"_L1, "
"_L1); + text.replace("\\n"_L1, "
"_L1); + text.replace("\r\n"_L1, "
"_L1); + text.replace("\n"_L1, "
"_L1); } if (text.isEmpty() || !event) return false; @@ -440,7 +442,7 @@ QString NativeSeparatorsDelegate::displayText(const QVariant &value, const QLoca if (value.metaType().id() == QMetaType::QUrl) { url = value.toUrl(); } - else if (string_value.contains(QLatin1String("://"))) { + else if (string_value.contains("://"_L1)) { url = QUrl::fromEncoded(string_value.toLatin1()); } else { diff --git a/src/playlist/playlistlistcontainer.cpp b/src/playlist/playlistlistcontainer.cpp index 5f0604f57..ac383ea2a 100644 --- a/src/playlist/playlistlistcontainer.cpp +++ b/src/playlist/playlistlistcontainer.cpp @@ -218,7 +218,7 @@ void PlaylistListContainer::NewFolderClicked() { return; } - name.replace(QLatin1Char('/'), QLatin1Char(' ')); + name.replace(u'/', u' '); model_->invisibleRootItem()->appendRow(model_->NewFolder(name)); diff --git a/src/playlist/playlistlistmodel.cpp b/src/playlist/playlistlistmodel.cpp index 62b4e2240..ddedacfb4 100644 --- a/src/playlist/playlistlistmodel.cpp +++ b/src/playlist/playlistlistmodel.cpp @@ -68,7 +68,7 @@ QString PlaylistListModel::ItemPath(const QStandardItem *item) { current = current->parent(); } - return components.join(QLatin1Char('/')); + return components.join(u'/'); } @@ -164,7 +164,7 @@ QStandardItem *PlaylistListModel::FolderByPath(const QString &path) { // inefficient but maintaining a path -> item map is difficult. QStandardItem *parent = invisibleRootItem(); - const QStringList parts = path.split(QLatin1Char('/'), Qt::SkipEmptyParts); + const QStringList parts = path.split(u'/', Qt::SkipEmptyParts); for (const QString &part : parts) { QStandardItem *matching_child = nullptr; diff --git a/src/playlist/playlistmanager.cpp b/src/playlist/playlistmanager.cpp index 790d39392..755fad073 100644 --- a/src/playlist/playlistmanager.cpp +++ b/src/playlist/playlistmanager.cpp @@ -61,6 +61,8 @@ #include "playlistparsers/playlistparser.h" #include "dialogs/saveplaylistsdialog.h" +using namespace Qt::StringLiterals; + class ParserBase; PlaylistManager::PlaylistManager(Application *app, QObject *parent) @@ -453,7 +455,7 @@ void PlaylistManager::UpdateSummaryText() { summary += tr("%n track(s)", "", tracks); if (nanoseconds > 0) { - summary += QLatin1String(" - [ ") + Utilities::WordyTimeNanosec(nanoseconds) + QLatin1String(" ]"); + summary += " - [ "_L1 + Utilities::WordyTimeNanosec(nanoseconds) + " ]"_L1; } Q_EMIT SummaryTextChanged(summary); @@ -571,7 +573,7 @@ QString PlaylistManager::GetNameForNewPlaylist(const SongList &songs) { if (!various_artists && albums.size() == 1) { QStringList album_names = albums.values(); - result += QLatin1String(" - ") + album_names.first(); + result += " - "_L1 + album_names.first(); } return result; diff --git a/src/playlist/playlisttabbar.cpp b/src/playlist/playlisttabbar.cpp index 99c6b31a9..3c1656cbc 100644 --- a/src/playlist/playlisttabbar.cpp +++ b/src/playlist/playlisttabbar.cpp @@ -54,6 +54,8 @@ #include "playlistmanager.h" #include "playlisttabbar.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kSettingsGroup[] = "PlaylistTabBar"; constexpr int kDragHoverTimeout = 500; @@ -334,7 +336,7 @@ void PlaylistTabBar::RemoveTab(const int id) { void PlaylistTabBar::set_text_by_id(const int id, const QString &text) { QString new_text = text; - new_text = new_text.replace(QLatin1Char('&'), QLatin1String("&&")); + new_text = new_text.replace(u'&', "&&"_L1); setTabText(index_of(id), new_text); setTabToolTip(index_of(id), text); @@ -347,8 +349,8 @@ void PlaylistTabBar::CurrentIndexChanged(const int index) { void PlaylistTabBar::InsertTab(const int id, const int index, const QString &text, const bool favorite) { QString new_text = text; - if (new_text.contains(QLatin1Char('&'))) { - new_text = new_text.replace(QLatin1Char('&'), QLatin1String("&&")); + if (new_text.contains(u'&')) { + new_text = new_text.replace(u'&', "&&"_L1); } suppress_current_changed_ = true; diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index f636fea18..18633568a 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -81,6 +81,8 @@ # include "moodbar/moodbaritemdelegate.h" #endif +using namespace Qt::StringLiterals; + namespace { constexpr int kGlowIntensitySteps = 24; constexpr int kAutoscrollGraceTimeout = 30; // seconds @@ -1387,7 +1389,7 @@ void PlaylistView::CopyCurrentSongToClipboard() const { QMimeData *mime_data = new QMimeData; mime_data->setUrls(QList() << url); - mime_data->setText(columns.join(QLatin1String(" - "))); + mime_data->setText(columns.join(" - "_L1)); QApplication::clipboard()->setMimeData(mime_data); diff --git a/src/playlistparsers/asxiniparser.cpp b/src/playlistparsers/asxiniparser.cpp index 7624834fc..ff22c882f 100644 --- a/src/playlistparsers/asxiniparser.cpp +++ b/src/playlistparsers/asxiniparser.cpp @@ -31,6 +31,8 @@ #include "parserbase.h" #include "asxiniparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; AsxIniParser::AsxIniParser(SharedPtr collection_backend, QObject *parent) @@ -48,11 +50,11 @@ SongList AsxIniParser::Load(QIODevice *device, const QString &playlist_path, con while (!device->atEnd()) { QString line = QString::fromUtf8(device->readLine()).trimmed(); - qint64 equals = line.indexOf(QLatin1Char('=')); + qint64 equals = line.indexOf(u'='); QString key = line.left(equals).toLower(); QString value = line.mid(equals + 1); - if (key.startsWith(QLatin1String("ref"))) { + if (key.startsWith("ref"_L1)) { Song song = LoadSong(value, 0, 0, dir, collection_lookup); if (song.is_valid()) { ret << song; diff --git a/src/playlistparsers/asxiniparser.h b/src/playlistparsers/asxiniparser.h index 25886e49b..e0a82274f 100644 --- a/src/playlistparsers/asxiniparser.h +++ b/src/playlistparsers/asxiniparser.h @@ -50,7 +50,7 @@ class AsxIniParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; }; diff --git a/src/playlistparsers/asxparser.cpp b/src/playlistparsers/asxparser.cpp index 2d2c5f9d6..8b93f803b 100644 --- a/src/playlistparsers/asxparser.cpp +++ b/src/playlistparsers/asxparser.cpp @@ -35,6 +35,8 @@ #include "xmlparser.h" #include "asxparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; ASXParser::ASXParser(SharedPtr collection_backend, QObject *parent) @@ -94,20 +96,20 @@ Song ASXParser::ParseTrack(QXmlStreamReader *reader, const QDir &dir, const bool switch (type) { case QXmlStreamReader::StartElement:{ const QString name = reader->name().toString().toLower(); - if (name == QLatin1String("ref")) { - ref = reader->attributes().value(QLatin1String("href")).toString(); + if (name == "ref"_L1) { + ref = reader->attributes().value("href"_L1).toString(); } - else if (name == QLatin1String("title")) { + else if (name == "title"_L1) { title = reader->readElementText(); } - else if (name == QLatin1String("author")) { + else if (name == "author"_L1) { artist = reader->readElementText(); } break; } case QXmlStreamReader::EndElement:{ const QString name = reader->name().toString().toLower(); - if (name == QLatin1String("entry")) { + if (name == "entry"_L1) { goto return_song; } break; @@ -139,16 +141,16 @@ void ASXParser::Save(const SongList &songs, QIODevice *device, const QDir&, cons writer.writeStartDocument(); { StreamElement asx(QStringLiteral("asx"), &writer); - writer.writeAttribute(QLatin1String("version"), QLatin1String("3.0")); + writer.writeAttribute("version"_L1, "3.0"_L1); for (const Song &song : songs) { StreamElement entry(QStringLiteral("entry"), &writer); - writer.writeTextElement(QLatin1String("title"), song.title()); + writer.writeTextElement("title"_L1, song.title()); { StreamElement ref(QStringLiteral("ref"), &writer); - writer.writeAttribute(QLatin1String("href"), song.url().toString()); + writer.writeAttribute("href"_L1, song.url().toString()); } if (!song.artist().isEmpty()) { - writer.writeTextElement(QLatin1String("author"), song.artist()); + writer.writeTextElement("author"_L1, song.artist()); } } } diff --git a/src/playlistparsers/asxparser.h b/src/playlistparsers/asxparser.h index 095ab8357..fb3026b12 100644 --- a/src/playlistparsers/asxparser.h +++ b/src/playlistparsers/asxparser.h @@ -52,7 +52,7 @@ class ASXParser : public XMLParser { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: diff --git a/src/playlistparsers/cueparser.cpp b/src/playlistparsers/cueparser.cpp index 6601c7f82..3b4ab1b00 100644 --- a/src/playlistparsers/cueparser.cpp +++ b/src/playlistparsers/cueparser.cpp @@ -40,6 +40,8 @@ #include "parserbase.h" #include "cueparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; namespace { @@ -161,7 +163,7 @@ SongList CueParser::Load(QIODevice *device, const QString &playlist_path, const } // If this is a data file, all of its tracks will be ignored - bool valid_file = file_type.compare(QLatin1String("BINARY"), Qt::CaseInsensitive) != 0 && file_type.compare(QLatin1String("MOTOROLA"), Qt::CaseInsensitive) != 0; + bool valid_file = file_type.compare("BINARY"_L1, Qt::CaseInsensitive) != 0 && file_type.compare("MOTOROLA"_L1, Qt::CaseInsensitive) != 0; QString track_type; QString index; @@ -182,7 +184,7 @@ SongList CueParser::Load(QIODevice *device, const QString &playlist_path, const const QString &line_name = splitted[0]; const QString &line_value = splitted[1]; - QString line_additional = splitted.size() > 2 ? splitted[2].toLower() : QLatin1String(""); + QString line_additional = splitted.size() > 2 ? splitted[2].toLower() : ""_L1; if (line_name.compare(QLatin1String(kTrack), Qt::CaseInsensitive) == 0) { @@ -193,7 +195,7 @@ SongList CueParser::Load(QIODevice *device, const QString &playlist_path, const } // Clear the state - track_type = index = artist = composer = title = date = genre = QLatin1String(""); + track_type = index = artist = composer = title = date = genre = ""_L1; if (!line_additional.isEmpty()) { track_type = line_additional; @@ -206,7 +208,7 @@ SongList CueParser::Load(QIODevice *device, const QString &playlist_path, const if (!line_additional.isEmpty()) { // If there's none "01" index, we'll just take the first one also, we'll take the "01" index even if it's the last one - if (line_value == QLatin1String("01") || index.isEmpty()) { + if (line_value == "01"_L1 || index.isEmpty()) { index = line_additional; } @@ -300,7 +302,7 @@ QStringList CueParser::SplitCueLine(const QString &line) { // Let's remove the empty entries while we're at it static const QRegularExpression regex_entry(QStringLiteral(".+")); static const QRegularExpression regex_exclude(QStringLiteral("^\"\"$")); - return re_match.capturedTexts().filter(regex_entry).mid(1, -1).replaceInStrings(regex_exclude, QLatin1String("")); + return re_match.capturedTexts().filter(regex_entry).mid(1, -1).replaceInStrings(regex_exclude, ""_L1); } @@ -392,7 +394,7 @@ void CueParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, // Looks for a track starting with one of the .cue's keywords. bool CueParser::TryMagic(const QByteArray &data) const { - QStringList splitted = QString::fromUtf8(data.constData()).split(QLatin1Char('\n')); + QStringList splitted = QString::fromUtf8(data.constData()).split(u'\n'); for (int i = 0; i < splitted.length(); i++) { QString line = splitted.at(i).trimmed(); @@ -411,7 +413,7 @@ bool CueParser::TryMagic(const QByteArray &data) const { QString CueParser::FindCueFilename(const QString &filename) { const QStringList cue_files = QStringList() << filename + QStringLiteral(".cue") - << filename.section(QLatin1Char('.'), 0, -2) + QStringLiteral(".cue"); + << filename.section(u'.', 0, -2) + QStringLiteral(".cue"); for (const QString &cuefile : cue_files) { if (QFileInfo::exists(cuefile)) return cuefile; diff --git a/src/playlistparsers/cueparser.h b/src/playlistparsers/cueparser.h index 35c30ed71..b517de628 100644 --- a/src/playlistparsers/cueparser.h +++ b/src/playlistparsers/cueparser.h @@ -36,6 +36,8 @@ #include "settings/playlistsettingspage.h" #include "parserbase.h" +using namespace Qt::Literals::StringLiterals; + class QIODevice; class CollectionBackendInterface; @@ -55,7 +57,7 @@ class CueParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; static QString FindCueFilename(const QString &filename); diff --git a/src/playlistparsers/m3uparser.cpp b/src/playlistparsers/m3uparser.cpp index d95e6ae60..f4ad09369 100644 --- a/src/playlistparsers/m3uparser.cpp +++ b/src/playlistparsers/m3uparser.cpp @@ -35,6 +35,8 @@ #include "parserbase.h" #include "m3uparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; M3UParser::M3UParser(SharedPtr collection_backend, QObject *parent) @@ -48,14 +50,14 @@ SongList M3UParser::Load(QIODevice *device, const QString &playlist_path, const Metadata current_metadata; QString data = QString::fromUtf8(device->readAll()); - data.replace(QLatin1Char('\r'), QLatin1Char('\n')); - data.replace(QLatin1String("\n\n"), QLatin1String("\n")); + data.replace(u'\r', u'\n'); + data.replace("\n\n"_L1, "\n"_L1); QByteArray bytes = data.toUtf8(); QBuffer buffer(&bytes); if (!buffer.open(QIODevice::ReadOnly)) return SongList(); QString line = QString::fromUtf8(buffer.readLine()).trimmed(); - if (line.startsWith(QLatin1String("#EXTM3U"))) { + if (line.startsWith("#EXTM3U"_L1)) { // This is in extended M3U format. type = M3UType::EXTENDED; line = QString::fromUtf8(buffer.readLine()).trimmed(); @@ -63,9 +65,9 @@ SongList M3UParser::Load(QIODevice *device, const QString &playlist_path, const SongList ret; Q_FOREVER { - if (line.startsWith(QLatin1Char('#'))) { + if (line.startsWith(u'#')) { // Extended info or comment. - if (type == M3UType::EXTENDED && line.startsWith(QLatin1String("#EXT"))) { + if (type == M3UType::EXTENDED && line.startsWith("#EXT"_L1)) { if (!ParseMetadata(line, ¤t_metadata)) { qLog(Warning) << "Failed to parse metadata: " << line; } @@ -102,8 +104,8 @@ bool M3UParser::ParseMetadata(const QString &line, M3UParser::Metadata *metadata // Extended info, eg. // #EXTINF:123,Sample Artist - Sample title - QString info = line.section(QLatin1Char(':'), 1); - QString l = info.section(QLatin1Char(','), 0, 0); + QString info = line.section(u':', 1); + QString l = info.section(u',', 0, 0); bool ok = false; int length = l.toInt(&ok); if (!ok) { @@ -111,7 +113,7 @@ bool M3UParser::ParseMetadata(const QString &line, M3UParser::Metadata *metadata } metadata->length = length * kNsecPerSec; - QString track_info = info.section(QLatin1Char(','), 1); + QString track_info = info.section(u',', 1); QStringList list = track_info.split(QStringLiteral(" - ")); if (list.size() <= 1) { metadata->title = track_info; diff --git a/src/playlistparsers/m3uparser.h b/src/playlistparsers/m3uparser.h index c270d7136..048a3b88f 100644 --- a/src/playlistparsers/m3uparser.h +++ b/src/playlistparsers/m3uparser.h @@ -52,7 +52,7 @@ class M3UParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: diff --git a/src/playlistparsers/parserbase.cpp b/src/playlistparsers/parserbase.cpp index 17f3f06c0..bc5244b83 100644 --- a/src/playlistparsers/parserbase.cpp +++ b/src/playlistparsers/parserbase.cpp @@ -34,6 +34,8 @@ #include "settings/playlistsettingspage.h" #include "parserbase.h" +using namespace Qt::StringLiterals; + ParserBase::ParserBase(SharedPtr collection_backend, QObject *parent) : QObject(parent), collection_backend_(collection_backend) {} @@ -128,7 +130,7 @@ QString ParserBase::URLOrFilename(const QUrl &url, const QDir &dir, const Playli if (path_type != PlaylistSettingsPage::PathType::Absolute && QDir::isAbsolutePath(filename)) { const QString relative = dir.relativeFilePath(filename); - if (!relative.startsWith(QLatin1String("../")) || path_type == PlaylistSettingsPage::PathType::Relative) { + if (!relative.startsWith("../"_L1) || path_type == PlaylistSettingsPage::PathType::Relative) { return relative; } } diff --git a/src/playlistparsers/parserbase.h b/src/playlistparsers/parserbase.h index a0cd2d97f..2a32e1cd6 100644 --- a/src/playlistparsers/parserbase.h +++ b/src/playlistparsers/parserbase.h @@ -36,6 +36,8 @@ #include "core/song.h" #include "settings/playlistsettingspage.h" +using namespace Qt::Literals::StringLiterals; + class QIODevice; class CollectionBackendInterface; @@ -58,7 +60,7 @@ class ParserBase : public QObject { // This method might not return all the songs found in the playlist. // Any playlist parser may decide to leave out some entries if it finds them incomplete or invalid. // This means that the final resulting SongList should be considered valid (at least from the parser's point of view). - virtual SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const = 0; + virtual SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const = 0; virtual void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const = 0; Q_SIGNALS: diff --git a/src/playlistparsers/playlistparser.cpp b/src/playlistparsers/playlistparser.cpp index a832e1b96..d8d9053ce 100644 --- a/src/playlistparsers/playlistparser.cpp +++ b/src/playlistparsers/playlistparser.cpp @@ -42,6 +42,8 @@ #include "wplparser.h" #include "xspfparser.h" +using namespace Qt::StringLiterals; + const int PlaylistParser::kMagicSize = 512; PlaylistParser::PlaylistParser(SharedPtr collection_backend, QObject *parent) : QObject(parent), default_parser_(nullptr) { @@ -110,10 +112,10 @@ QString PlaylistParser::filters(const Type type) const { } if (type == Type::Load) { - filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(QLatin1Char(' ')))); + filters.prepend(tr("All playlists (%1)").arg(all_extensions.join(u' '))); } - return filters.join(QLatin1String(";;")); + return filters.join(";;"_L1); } @@ -128,7 +130,7 @@ QString PlaylistParser::FilterForParser(const ParserBase *parser, QStringList *a if (all_extensions) *all_extensions << extensions; - return tr("%1 playlists (%2)").arg(parser->name(), extensions.join(QLatin1Char(' '))); + return tr("%1 playlists (%2)").arg(parser->name(), extensions.join(u' ')); } diff --git a/src/playlistparsers/plsparser.cpp b/src/playlistparsers/plsparser.cpp index ba2d50568..5da707b88 100644 --- a/src/playlistparsers/plsparser.cpp +++ b/src/playlistparsers/plsparser.cpp @@ -34,6 +34,8 @@ #include "parserbase.h" #include "plsparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; PLSParser::PLSParser(SharedPtr collection_backend, QObject *parent) @@ -48,14 +50,14 @@ SongList PLSParser::Load(QIODevice *device, const QString &playlist_path, const while (!device->atEnd()) { QString line = QString::fromUtf8(device->readLine()).trimmed(); - qint64 equals = line.indexOf(QLatin1Char('=')); + qint64 equals = line.indexOf(u'='); QString key = line.left(equals).toLower(); QString value = line.mid(equals + 1); QRegularExpressionMatch re_match = n_re.match(key); int n = re_match.captured(0).toInt(); - if (key.startsWith(QLatin1String("file"))) { + if (key.startsWith("file"_L1)) { Song song = LoadSong(value, 0, 0, dir, collection_lookup); // Use the title and length we've already loaded if any @@ -66,10 +68,10 @@ SongList PLSParser::Load(QIODevice *device, const QString &playlist_path, const songs[n] = song; } - else if (key.startsWith(QLatin1String("title"))) { + else if (key.startsWith("title"_L1)) { songs[n].set_title(value); } - else if (key.startsWith(QLatin1String("length"))) { + else if (key.startsWith("length"_L1)) { qint64 seconds = value.toLongLong(); if (seconds > 0) { songs[n].set_length_nanosec(seconds * kNsecPerSec); diff --git a/src/playlistparsers/plsparser.h b/src/playlistparsers/plsparser.h index efca35033..429047b83 100644 --- a/src/playlistparsers/plsparser.h +++ b/src/playlistparsers/plsparser.h @@ -51,7 +51,7 @@ class PLSParser : public ParserBase { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; }; diff --git a/src/playlistparsers/wplparser.cpp b/src/playlistparsers/wplparser.cpp index 8baac5121..d7c2258f5 100644 --- a/src/playlistparsers/wplparser.cpp +++ b/src/playlistparsers/wplparser.cpp @@ -35,6 +35,8 @@ #include "xmlparser.h" #include "wplparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; WplParser::WplParser(SharedPtr collection_backend, QObject *parent) @@ -69,8 +71,8 @@ void WplParser::ParseSeq(const QDir &dir, QXmlStreamReader *reader, SongList *so QString name = reader->name().toString(); switch (type) { case QXmlStreamReader::StartElement:{ - if (name == QLatin1String("media")) { - QString src = reader->attributes().value(QLatin1String("src")).toString(); + if (name == "media"_L1) { + QString src = reader->attributes().value("src"_L1).toString(); if (!src.isEmpty()) { Song song = LoadSong(src, 0, 0, dir, collection_lookup); if (song.is_valid()) { @@ -84,7 +86,7 @@ void WplParser::ParseSeq(const QDir &dir, QXmlStreamReader *reader, SongList *so break; } case QXmlStreamReader::EndElement:{ - if (name == QLatin1String("seq")) { + if (name == "seq"_L1) { return; } break; @@ -101,14 +103,14 @@ void WplParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, QXmlStreamWriter writer(device); writer.setAutoFormatting(true); writer.setAutoFormattingIndent(2); - writer.writeProcessingInstruction(QLatin1String("wpl"), QLatin1String("version=\"1.0\"")); + writer.writeProcessingInstruction("wpl"_L1, "version=\"1.0\""_L1); StreamElement smil(QStringLiteral("smil"), &writer); { StreamElement head(QStringLiteral("head"), &writer); - WriteMeta(QLatin1String("Generator"), QLatin1String("Strawberry -- ") + QLatin1String(STRAWBERRY_VERSION_DISPLAY), &writer); - WriteMeta(QLatin1String("ItemCount"), QString::number(songs.count()), &writer); + WriteMeta("Generator"_L1, "Strawberry -- "_L1 + QLatin1String(STRAWBERRY_VERSION_DISPLAY), &writer); + WriteMeta("ItemCount"_L1, QString::number(songs.count()), &writer); } { @@ -116,8 +118,8 @@ void WplParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, { StreamElement seq(QStringLiteral("seq"), &writer); for (const Song &song : songs) { - writer.writeStartElement(QLatin1String("media")); - writer.writeAttribute(QLatin1String("src"), URLOrFilename(song.url(), dir, path_type)); + writer.writeStartElement("media"_L1); + writer.writeAttribute("src"_L1, URLOrFilename(song.url(), dir, path_type)); writer.writeEndElement(); } } @@ -126,9 +128,9 @@ void WplParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, void WplParser::WriteMeta(const QString &name, const QString &content, QXmlStreamWriter *writer) { - writer->writeStartElement(QLatin1String("meta")); - writer->writeAttribute(QLatin1String("name"), name); - writer->writeAttribute(QLatin1String("content"), content); + writer->writeStartElement("meta"_L1); + writer->writeAttribute("name"_L1, name); + writer->writeAttribute("content"_L1, content); writer->writeEndElement(); } diff --git a/src/playlistparsers/xspfparser.cpp b/src/playlistparsers/xspfparser.cpp index f3903cdb0..a990709ef 100644 --- a/src/playlistparsers/xspfparser.cpp +++ b/src/playlistparsers/xspfparser.cpp @@ -37,6 +37,8 @@ #include "xmlparser.h" #include "xspfparser.h" +using namespace Qt::StringLiterals; + class CollectionBackendInterface; XSPFParser::XSPFParser(SharedPtr collection_backend, QObject *parent) @@ -75,22 +77,22 @@ Song XSPFParser::ParseTrack(QXmlStreamReader *reader, const QDir &dir, const boo QString name = reader->name().toString(); switch (type) { case QXmlStreamReader::StartElement:{ - if (name == QLatin1String("location")) { + if (name == "location"_L1) { location = QUrl::fromPercentEncoding(reader->readElementText().toUtf8()); } - else if (name == QLatin1String("title")) { + else if (name == "title"_L1) { title = reader->readElementText(); } - else if (name == QLatin1String("creator")) { + else if (name == "creator"_L1) { artist = reader->readElementText(); } - else if (name == QLatin1String("album")) { + else if (name == "album"_L1) { album = reader->readElementText(); } - else if (name == QLatin1String("image")) { + else if (name == "image"_L1) { art = QUrl::fromPercentEncoding(reader->readElementText().toUtf8()); } - else if (name == QLatin1String("duration")) { // in milliseconds. + else if (name == "duration"_L1) { // in milliseconds. const QString duration = reader->readElementText(); bool ok = false; nanosec = duration.toInt(&ok) * kNsecPerMsec; @@ -98,7 +100,7 @@ Song XSPFParser::ParseTrack(QXmlStreamReader *reader, const QDir &dir, const boo nanosec = -1; } } - else if (name == QLatin1String("trackNum")) { + else if (name == "trackNum"_L1) { const QString track_num_str = reader->readElementText(); bool ok = false; track_num = track_num_str.toInt(&ok); @@ -106,13 +108,13 @@ Song XSPFParser::ParseTrack(QXmlStreamReader *reader, const QDir &dir, const boo track_num = -1; } } - else if (name == QLatin1String("info")) { + else if (name == "info"_L1) { // TODO: Do something with extra info? } break; } case QXmlStreamReader::EndElement:{ - if (name == QLatin1String("track")) { + if (name == "track"_L1) { goto return_song; } } @@ -145,8 +147,8 @@ void XSPFParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, writer.setAutoFormattingIndent(2); writer.writeStartDocument(); StreamElement playlist(QStringLiteral("playlist"), &writer); - writer.writeAttribute(QLatin1String("version"), QLatin1String("1")); - writer.writeDefaultNamespace(QLatin1String("http://xspf.org/ns/0/")); + writer.writeAttribute("version"_L1, "1"_L1); + writer.writeDefaultNamespace("http://xspf.org/ns/0/"_L1); Settings s; s.beginGroup(PlaylistSettingsPage::kSettingsGroup); @@ -158,23 +160,23 @@ void XSPFParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, QString filename_or_url = QString::fromLatin1(QUrl::toPercentEncoding(URLOrFilename(song.url(), dir, path_type), "/ ")); StreamElement track(QStringLiteral("track"), &writer); - writer.writeTextElement(QLatin1String("location"), filename_or_url); + writer.writeTextElement("location"_L1, filename_or_url); if (write_metadata || (song.is_stream() && !song.is_radio())) { - writer.writeTextElement(QLatin1String("title"), song.title()); + writer.writeTextElement("title"_L1, song.title()); if (!song.artist().isEmpty()) { - writer.writeTextElement(QLatin1String("creator"), song.artist()); + writer.writeTextElement("creator"_L1, song.artist()); } if (!song.album().isEmpty()) { - writer.writeTextElement(QLatin1String("album"), song.album()); + writer.writeTextElement("album"_L1, song.album()); } if (song.length_nanosec() != -1) { - writer.writeTextElement(QLatin1String("duration"), QString::number(song.length_nanosec() / kNsecPerMsec)); + writer.writeTextElement("duration"_L1, QString::number(song.length_nanosec() / kNsecPerMsec)); } } if ((write_metadata || song.has_cue() || (song.is_stream() && !song.is_radio())) && song.track() > 0) { - writer.writeTextElement(QLatin1String("trackNum"), QString::number(song.track())); + writer.writeTextElement("trackNum"_L1, QString::number(song.track())); } if (write_metadata || (song.is_stream() && !song.is_radio())) { @@ -182,7 +184,7 @@ void XSPFParser::Save(const SongList &songs, QIODevice *device, const QDir &dir, // Ignore images that are in our resource bundle. if (!cover_url.isEmpty() && cover_url.isValid()) { const QString cover_filename = QString::fromLatin1(QUrl::toPercentEncoding(URLOrFilename(cover_url, dir, path_type), "/ ")); - writer.writeTextElement(QLatin1String("image"), cover_filename); + writer.writeTextElement("image"_L1, cover_filename); } } } diff --git a/src/playlistparsers/xspfparser.h b/src/playlistparsers/xspfparser.h index 84a3014d1..e65ff35cd 100644 --- a/src/playlistparsers/xspfparser.h +++ b/src/playlistparsers/xspfparser.h @@ -51,7 +51,7 @@ class XSPFParser : public XMLParser { bool TryMagic(const QByteArray &data) const override; - SongList Load(QIODevice *device, const QString &playlist_path = QLatin1String(""), const QDir &dir = QDir(), const bool collection_lookup = true) const override; + SongList Load(QIODevice *device, const QString &playlist_path = ""_L1, const QDir &dir = QDir(), const bool collection_lookup = true) const override; void Save(const SongList &songs, QIODevice *device, const QDir &dir = QDir(), const PlaylistSettingsPage::PathType path_type = PlaylistSettingsPage::PathType::Automatic) const override; private: diff --git a/src/providers/musixmatchprovider.cpp b/src/providers/musixmatchprovider.cpp index d97b8ba6a..7cd6b3671 100644 --- a/src/providers/musixmatchprovider.cpp +++ b/src/providers/musixmatchprovider.cpp @@ -31,12 +31,12 @@ QString MusixmatchProvider::StringFixup(QString text) { static const QRegularExpression regex_duplicate_whitespaces(QStringLiteral(" {2,}")); static const QRegularExpression regex_duplicate_dashes(QStringLiteral("(-)\\1+")); - return text.replace(QLatin1Char('/'), QLatin1Char('-')) - .replace(QLatin1Char('\''), QLatin1Char('-')) + return text.replace(u'/', u'-') + .replace(u'\'', u'-') .remove(regex_illegal_characters) .replace(regex_duplicate_whitespaces, QStringLiteral(" ")) .simplified() - .replace(QLatin1Char(' '), QLatin1Char('-')) + .replace(u' ', u'-') .replace(regex_duplicate_dashes, QStringLiteral("-")) .toLower(); diff --git a/src/qobuz/qobuzbaserequest.cpp b/src/qobuz/qobuzbaserequest.cpp index d4e95189c..a0780018d 100644 --- a/src/qobuz/qobuzbaserequest.cpp +++ b/src/qobuz/qobuzbaserequest.cpp @@ -43,6 +43,8 @@ #include "qobuzservice.h" #include "qobuzbaserequest.h" +using namespace Qt::StringLiterals; + QobuzBaseRequest::QobuzBaseRequest(QobuzService *service, SharedPtr network, QObject *parent) : QObject(parent), service_(service), @@ -107,9 +109,9 @@ QByteArray QobuzBaseRequest::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &parse_error); if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -170,11 +172,11 @@ QJsonValue QobuzBaseRequest::ExtractItems(QByteArray &data) { QJsonValue QobuzBaseRequest::ExtractItems(QJsonObject &json_obj) { - if (!json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("items"_L1)) { Error(QStringLiteral("Json reply is missing items."), json_obj); return QJsonArray(); } - QJsonValue json_items = json_obj[QLatin1String("items")]; + QJsonValue json_items = json_obj["items"_L1]; return json_items; } diff --git a/src/qobuz/qobuzfavoriterequest.cpp b/src/qobuz/qobuzfavoriterequest.cpp index 829380b70..dfbcc949e 100644 --- a/src/qobuz/qobuzfavoriterequest.cpp +++ b/src/qobuz/qobuzfavoriterequest.cpp @@ -134,7 +134,7 @@ void QobuzFavoriteRequest::AddFavoritesRequest(const FavoriteType type, const QS const ParamList params = ParamList() << Param(QStringLiteral("app_id"), app_id()) << Param(QStringLiteral("user_auth_token"), user_auth_token()) - << Param(FavoriteMethod(type), ids_list.join(QLatin1Char(','))); + << Param(FavoriteMethod(type), ids_list.join(u',')); QUrlQuery url_query; for (const Param ¶m : params) { @@ -229,7 +229,7 @@ void QobuzFavoriteRequest::RemoveFavoritesRequest(const FavoriteType type, const const ParamList params = ParamList() << Param(QStringLiteral("app_id"), app_id()) << Param(QStringLiteral("user_auth_token"), user_auth_token()) - << Param(FavoriteMethod(type), ids_list.join(QLatin1Char(','))); + << Param(FavoriteMethod(type), ids_list.join(u',')); QUrlQuery url_query; for (const Param ¶m : params) { diff --git a/src/qobuz/qobuzrequest.cpp b/src/qobuz/qobuzrequest.cpp index 574bd0290..d2204dbaa 100644 --- a/src/qobuz/qobuzrequest.cpp +++ b/src/qobuz/qobuzrequest.cpp @@ -49,6 +49,8 @@ #include "qobuzbaserequest.h" #include "qobuzrequest.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kMaxConcurrentArtistsRequests = 3; constexpr int kMaxConcurrentAlbumsRequests = 3; @@ -423,12 +425,12 @@ void QobuzRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re return; } - if (!json_obj.contains(QLatin1String("artists"))) { + if (!json_obj.contains("artists"_L1)) { ArtistsFinishCheck(); Error(QStringLiteral("Json object is missing artists."), json_obj); return; } - QJsonValue value_artists = json_obj[QLatin1String("artists")]; + QJsonValue value_artists = json_obj["artists"_L1]; if (!value_artists.isObject()) { Error(QStringLiteral("Json artists is not an object."), json_obj); ArtistsFinishCheck(); @@ -436,17 +438,17 @@ void QobuzRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re } QJsonObject obj_artists = value_artists.toObject(); - if (!obj_artists.contains(QLatin1String("limit")) || - !obj_artists.contains(QLatin1String("offset")) || - !obj_artists.contains(QLatin1String("total")) || - !obj_artists.contains(QLatin1String("items"))) { + if (!obj_artists.contains("limit"_L1) || + !obj_artists.contains("offset"_L1) || + !obj_artists.contains("total"_L1) || + !obj_artists.contains("items"_L1)) { ArtistsFinishCheck(); Error(QStringLiteral("Json artists object is missing values."), json_obj); return; } //int limit = obj_artists["limit"].toInt(); - int offset = obj_artists[QLatin1String("offset")].toInt(); - int artists_total = obj_artists[QLatin1String("total")].toInt(); + int offset = obj_artists["offset"_L1].toInt(); + int artists_total = obj_artists["total"_L1].toInt(); if (offset_requested == 0) { artists_total_ = artists_total; @@ -491,8 +493,8 @@ void QobuzRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue json_item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue json_item = obj_item["item"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, item not a object."), json_item); continue; @@ -500,19 +502,19 @@ void QobuzRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re obj_item = json_item.toObject(); } - if (!obj_item.contains(QLatin1String("id")) || !obj_item.contains(QLatin1String("name"))) { + if (!obj_item.contains("id"_L1) || !obj_item.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item missing id or album."), obj_item); continue; } Artist artist; - if (obj_item[QLatin1String("id")].isString()) { - artist.artist_id = obj_item[QLatin1String("id")].toString(); + if (obj_item["id"_L1].isString()) { + artist.artist_id = obj_item["id"_L1].toString(); } else { - artist.artist_id = QString::number(obj_item[QLatin1String("id")].toInt()); + artist.artist_id = QString::number(obj_item["id"_L1].toInt()); } - artist.artist = obj_item[QLatin1String("name")].toString(); + artist.artist = obj_item["name"_L1].toString(); if (artist_albums_requests_pending_.contains(artist.artist_id)) continue; @@ -636,14 +638,14 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req Artist artist = artist_requested; - if (json_obj.contains(QLatin1String("id")) && json_obj.contains(QLatin1String("name"))) { - if (json_obj[QLatin1String("id")].isString()) { - artist.artist_id = json_obj[QLatin1String("id")].toString(); + if (json_obj.contains("id"_L1) && json_obj.contains("name"_L1)) { + if (json_obj["id"_L1].isString()) { + artist.artist_id = json_obj["id"_L1].toString(); } else { - artist.artist_id = QString::number(json_obj[QLatin1String("id")].toInt()); + artist.artist_id = QString::number(json_obj["id"_L1].toInt()); } - artist.artist = json_obj[QLatin1String("name")].toString(); + artist.artist = json_obj["name"_L1].toString(); } if (artist.artist_id != artist_requested.artist_id) { @@ -652,12 +654,12 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req return; } - if (!json_obj.contains(QLatin1String("albums"))) { + if (!json_obj.contains("albums"_L1)) { AlbumsFinishCheck(artist_requested); Error(QStringLiteral("Json object is missing albums."), json_obj); return; } - QJsonValue value_albums = json_obj[QLatin1String("albums")]; + QJsonValue value_albums = json_obj["albums"_L1]; if (!value_albums.isObject()) { Error(QStringLiteral("Json albums is not an object."), json_obj); AlbumsFinishCheck(artist_requested); @@ -665,18 +667,18 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } QJsonObject obj_albums = value_albums.toObject(); - if (!obj_albums.contains(QLatin1String("limit")) || - !obj_albums.contains(QLatin1String("offset")) || - !obj_albums.contains(QLatin1String("total")) || - !obj_albums.contains(QLatin1String("items"))) { + if (!obj_albums.contains("limit"_L1) || + !obj_albums.contains("offset"_L1) || + !obj_albums.contains("total"_L1) || + !obj_albums.contains("items"_L1)) { AlbumsFinishCheck(artist_requested); Error(QStringLiteral("Json albums object is missing values."), json_obj); return; } //int limit = obj_albums["limit"].toInt(); - int offset = obj_albums[QLatin1String("offset")].toInt(); - int albums_total = obj_albums[QLatin1String("total")].toInt(); + int offset = obj_albums["offset"_L1].toInt(); + int albums_total = obj_albums["total"_L1].toInt(); if (offset != offset_requested) { Error(QStringLiteral("Offset returned does not match offset requested! %1 != %2").arg(offset).arg(offset_requested)); @@ -709,41 +711,41 @@ void QobuzRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } QJsonObject obj_item = value_item.toObject(); - if (!obj_item.contains(QLatin1String("artist")) || !obj_item.contains(QLatin1String("title")) || !obj_item.contains(QLatin1String("id"))) { + if (!obj_item.contains("artist"_L1) || !obj_item.contains("title"_L1) || !obj_item.contains("id"_L1)) { Error(QStringLiteral("Invalid Json reply, item missing artist, title or id."), obj_item); continue; } Album album; - if (obj_item[QLatin1String("id")].isString()) { - album.album_id = obj_item[QLatin1String("id")].toString(); + if (obj_item["id"_L1].isString()) { + album.album_id = obj_item["id"_L1].toString(); } else { - album.album_id = QString::number(obj_item[QLatin1String("id")].toInt()); + album.album_id = QString::number(obj_item["id"_L1].toInt()); } - album.album = obj_item[QLatin1String("title")].toString(); + album.album = obj_item["title"_L1].toString(); if (album_songs_requests_pending_.contains(album.album_id)) continue; - QJsonValue value_artist = obj_item[QLatin1String("artist")]; + QJsonValue value_artist = obj_item["artist"_L1]; if (!value_artist.isObject()) { Error(QStringLiteral("Invalid Json reply, item artist is not a object."), value_artist); continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item artist missing id or name."), obj_artist); continue; } Artist album_artist; - if (obj_artist[QLatin1String("id")].isString()) { - album_artist.artist_id = obj_artist[QLatin1String("id")].toString(); + if (obj_artist["id"_L1].isString()) { + album_artist.artist_id = obj_artist["id"_L1].toString(); } else { - album_artist.artist_id = QString::number(obj_artist[QLatin1String("id")].toInt()); + album_artist.artist_id = QString::number(obj_artist["id"_L1].toInt()); } - album_artist.artist = obj_artist[QLatin1String("name")].toString(); + album_artist.artist = obj_artist["name"_L1].toString(); if (!artist_requested.artist_id.isEmpty() && album_artist.artist_id != artist_requested.artist_id) { qLog(Debug) << "Skipping artist" << album_artist.artist << album_artist.artist_id << "does not match album artist" << artist_requested.artist_id << artist_requested.artist; @@ -891,7 +893,7 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ return; } - if (!json_obj.contains(QLatin1String("tracks"))) { + if (!json_obj.contains("tracks"_L1)) { Error(QStringLiteral("Json object is missing tracks."), json_obj); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); return; @@ -900,58 +902,58 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ Artist album_artist = artist_requested; Album album = album_requested; - if (json_obj.contains(QLatin1String("id")) && json_obj.contains(QLatin1String("title"))) { - if (json_obj[QLatin1String("id")].isString()) { - album.album_id = json_obj[QLatin1String("id")].toString(); + if (json_obj.contains("id"_L1) && json_obj.contains("title"_L1)) { + if (json_obj["id"_L1].isString()) { + album.album_id = json_obj["id"_L1].toString(); } else { - album.album_id = QString::number(json_obj[QLatin1String("id")].toInt()); + album.album_id = QString::number(json_obj["id"_L1].toInt()); } - album.album = json_obj[QLatin1String("title")].toString(); + album.album = json_obj["title"_L1].toString(); } - if (json_obj.contains(QLatin1String("artist"))) { - QJsonValue value_artist = json_obj[QLatin1String("artist")]; + if (json_obj.contains("artist"_L1)) { + QJsonValue value_artist = json_obj["artist"_L1]; if (!value_artist.isObject()) { Error(QStringLiteral("Invalid Json reply, album artist is not a object."), value_artist); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); return; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, album artist is missing id or name."), obj_artist); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); return; } - if (obj_artist[QLatin1String("id")].isString()) { - album_artist.artist_id = obj_artist[QLatin1String("id")].toString(); + if (obj_artist["id"_L1].isString()) { + album_artist.artist_id = obj_artist["id"_L1].toString(); } else { - album_artist.artist_id = QString::number(obj_artist[QLatin1String("id")].toInt()); + album_artist.artist_id = QString::number(obj_artist["id"_L1].toInt()); } - album_artist.artist = obj_artist[QLatin1String("name")].toString(); + album_artist.artist = obj_artist["name"_L1].toString(); } - if (json_obj.contains(QLatin1String("image"))) { - QJsonValue value_image = json_obj[QLatin1String("image")]; + if (json_obj.contains("image"_L1)) { + QJsonValue value_image = json_obj["image"_L1]; if (!value_image.isObject()) { Error(QStringLiteral("Invalid Json reply, album image is not a object."), value_image); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); return; } QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("large"))) { + if (!obj_image.contains("large"_L1)) { Error(QStringLiteral("Invalid Json reply, album image is missing large."), obj_image); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); return; } - QString album_image = obj_image[QLatin1String("large")].toString(); + QString album_image = obj_image["large"_L1].toString(); if (!album_image.isEmpty()) { album.cover_url = QUrl(album_image); } } - QJsonValue value_tracks = json_obj[QLatin1String("tracks")]; + QJsonValue value_tracks = json_obj["tracks"_L1]; if (!value_tracks.isObject()) { Error(QStringLiteral("Json tracks is not an object."), json_obj); SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); @@ -959,18 +961,18 @@ void QobuzRequest::SongsReceived(QNetworkReply *reply, const Artist &artist_requ } QJsonObject obj_tracks = value_tracks.toObject(); - if (!obj_tracks.contains(QLatin1String("limit")) || - !obj_tracks.contains(QLatin1String("offset")) || - !obj_tracks.contains(QLatin1String("total")) || - !obj_tracks.contains(QLatin1String("items"))) { + if (!obj_tracks.contains("limit"_L1) || + !obj_tracks.contains("offset"_L1) || + !obj_tracks.contains("total"_L1) || + !obj_tracks.contains("items"_L1)) { SongsFinishCheck(artist_requested, album_requested, limit_requested, offset_requested); Error(QStringLiteral("Json songs object is missing values."), json_obj); return; } //int limit = obj_tracks["limit"].toInt(); - int offset = obj_tracks[QLatin1String("offset")].toInt(); - int songs_total = obj_tracks[QLatin1String("total")].toInt(); + int offset = obj_tracks["offset"_L1].toInt(); + int songs_total = obj_tracks["total"_L1].toInt(); if (offset != offset_requested) { Error(QStringLiteral("Offset returned does not match offset requested! %1 != %2").arg(offset).arg(offset_requested)); @@ -1063,126 +1065,126 @@ void QobuzRequest::SongsFinishCheck(const Artist &artist, const Album &album, co void QobuzRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Artist &album_artist, const Album &album) { if ( - !json_obj.contains(QLatin1String("id")) || - !json_obj.contains(QLatin1String("title")) || - !json_obj.contains(QLatin1String("track_number")) || - !json_obj.contains(QLatin1String("duration")) || - !json_obj.contains(QLatin1String("copyright")) || - !json_obj.contains(QLatin1String("streamable")) + !json_obj.contains("id"_L1) || + !json_obj.contains("title"_L1) || + !json_obj.contains("track_number"_L1) || + !json_obj.contains("duration"_L1) || + !json_obj.contains("copyright"_L1) || + !json_obj.contains("streamable"_L1) ) { Error(QStringLiteral("Invalid Json reply, track is missing one or more values."), json_obj); return; } QString song_id; - if (json_obj[QLatin1String("id")].isString()) { - song_id = json_obj[QLatin1String("id")].toString(); + if (json_obj["id"_L1].isString()) { + song_id = json_obj["id"_L1].toString(); } else { - song_id = QString::number(json_obj[QLatin1String("id")].toInt()); + song_id = QString::number(json_obj["id"_L1].toInt()); } - QString title = json_obj[QLatin1String("title")].toString(); - int track = json_obj[QLatin1String("track_number")].toInt(); + QString title = json_obj["title"_L1].toString(); + int track = json_obj["track_number"_L1].toInt(); int disc = 0; - QString copyright = json_obj[QLatin1String("copyright")].toString(); - qint64 duration = json_obj[QLatin1String("duration")].toInt() * kNsecPerSec; + QString copyright = json_obj["copyright"_L1].toString(); + qint64 duration = json_obj["duration"_L1].toInt() * kNsecPerSec; //bool streamable = json_obj["streamable"].toBool(); QString composer; QString performer; - if (json_obj.contains(QLatin1String("media_number"))) { - disc = json_obj[QLatin1String("media_number")].toInt(); + if (json_obj.contains("media_number"_L1)) { + disc = json_obj["media_number"_L1].toInt(); } Artist song_artist = album_artist; Album song_album = album; - if (json_obj.contains(QLatin1String("album"))) { + if (json_obj.contains("album"_L1)) { - QJsonValue value_album = json_obj[QLatin1String("album")]; + QJsonValue value_album = json_obj["album"_L1]; if (!value_album.isObject()) { Error(QStringLiteral("Invalid Json reply, album is not an object."), value_album); return; } QJsonObject obj_album = value_album.toObject(); - if (obj_album.contains(QLatin1String("id"))) { - if (obj_album[QLatin1String("id")].isString()) { - song_album.album_id = obj_album[QLatin1String("id")].toString(); + if (obj_album.contains("id"_L1)) { + if (obj_album["id"_L1].isString()) { + song_album.album_id = obj_album["id"_L1].toString(); } else { - song_album.album_id = QString::number(obj_album[QLatin1String("id")].toInt()); + song_album.album_id = QString::number(obj_album["id"_L1].toInt()); } } - if (obj_album.contains(QLatin1String("title"))) { - song_album.album = obj_album[QLatin1String("title")].toString(); + if (obj_album.contains("title"_L1)) { + song_album.album = obj_album["title"_L1].toString(); } - if (obj_album.contains(QLatin1String("artist"))) { - QJsonValue value_artist = obj_album[QLatin1String("artist")]; + if (obj_album.contains("artist"_L1)) { + QJsonValue value_artist = obj_album["artist"_L1]; if (!value_artist.isObject()) { Error(QStringLiteral("Invalid Json reply, album artist is not a object."), value_artist); return; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, album artist is missing id or name."), obj_artist); return; } - if (obj_artist[QLatin1String("id")].isString()) { - song_artist.artist_id = obj_artist[QLatin1String("id")].toString(); + if (obj_artist["id"_L1].isString()) { + song_artist.artist_id = obj_artist["id"_L1].toString(); } else { - song_artist.artist_id = QString::number(obj_artist[QLatin1String("id")].toInt()); + song_artist.artist_id = QString::number(obj_artist["id"_L1].toInt()); } - song_artist.artist = obj_artist[QLatin1String("name")].toString(); + song_artist.artist = obj_artist["name"_L1].toString(); } - if (obj_album.contains(QLatin1String("image"))) { - QJsonValue value_image = obj_album[QLatin1String("image")]; + if (obj_album.contains("image"_L1)) { + QJsonValue value_image = obj_album["image"_L1]; if (!value_image.isObject()) { Error(QStringLiteral("Invalid Json reply, album image is not a object."), value_image); return; } QJsonObject obj_image = value_image.toObject(); - if (!obj_image.contains(QLatin1String("large"))) { + if (!obj_image.contains("large"_L1)) { Error(QStringLiteral("Invalid Json reply, album image is missing large."), obj_image); return; } - QString album_image = obj_image[QLatin1String("large")].toString(); + QString album_image = obj_image["large"_L1].toString(); if (!album_image.isEmpty()) { song_album.cover_url.setUrl(album_image); } } } - if (json_obj.contains(QLatin1String("composer"))) { - QJsonValue value_composer = json_obj[QLatin1String("composer")]; + if (json_obj.contains("composer"_L1)) { + QJsonValue value_composer = json_obj["composer"_L1]; if (!value_composer.isObject()) { Error(QStringLiteral("Invalid Json reply, track composer is not a object."), value_composer); return; } QJsonObject obj_composer = value_composer.toObject(); - if (!obj_composer.contains(QLatin1String("id")) || !obj_composer.contains(QLatin1String("name"))) { + if (!obj_composer.contains("id"_L1) || !obj_composer.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, track composer is missing id or name."), obj_composer); return; } - composer = obj_composer[QLatin1String("name")].toString(); + composer = obj_composer["name"_L1].toString(); } - if (json_obj.contains(QLatin1String("performer"))) { - QJsonValue value_performer = json_obj[QLatin1String("performer")]; + if (json_obj.contains("performer"_L1)) { + QJsonValue value_performer = json_obj["performer"_L1]; if (!value_performer.isObject()) { Error(QStringLiteral("Invalid Json reply, track performer is not a object."), value_performer); return; } QJsonObject obj_performer = value_performer.toObject(); - if (!obj_performer.contains(QLatin1String("id")) || !obj_performer.contains(QLatin1String("name"))) { + if (!obj_performer.contains("id"_L1) || !obj_performer.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, track performer is missing id or name."), obj_performer); return; } - performer = obj_performer[QLatin1String("name")].toString(); + performer = obj_performer["name"_L1].toString(); } //if (!streamable) { @@ -1345,8 +1347,8 @@ void QobuzRequest::AlbumCoverReceived(QNetworkReply *reply, const QUrl &cover_ur } QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - if (mimetype.contains(QLatin1Char(';'))) { - mimetype = mimetype.left(mimetype.indexOf(QLatin1Char(';'))); + if (mimetype.contains(u';')) { + mimetype = mimetype.left(mimetype.indexOf(u';')); } if (!ImageUtils::SupportedImageMimeTypes().contains(mimetype, Qt::CaseInsensitive) && !ImageUtils::SupportedImageFormats().contains(mimetype, Qt::CaseInsensitive)) { Error(QStringLiteral("Unsupported mimetype for image reader %1 for %2").arg(mimetype, cover_url.toString())); diff --git a/src/qobuz/qobuzservice.cpp b/src/qobuz/qobuzservice.cpp index a94e45b86..2c3846830 100644 --- a/src/qobuz/qobuzservice.cpp +++ b/src/qobuz/qobuzservice.cpp @@ -60,6 +60,7 @@ #include "settings/settingsdialog.h" #include "settings/qobuzsettingspage.h" +using namespace Qt::StringLiterals; using std::make_shared; const Song::Source QobuzService::kSource = Song::Source::Qobuz; @@ -330,9 +331,9 @@ void QobuzService::HandleAuthReply(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); login_errors_ << QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -376,62 +377,62 @@ void QobuzService::HandleAuthReply(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("user_auth_token"))) { + if (!json_obj.contains("user_auth_token"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing user_auth_token"), json_obj); return; } - user_auth_token_ = json_obj[QLatin1String("user_auth_token")].toString(); + user_auth_token_ = json_obj["user_auth_token"_L1].toString(); - if (!json_obj.contains(QLatin1String("user"))) { + if (!json_obj.contains("user"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing user"), json_obj); return; } - QJsonValue value_user = json_obj[QLatin1String("user")]; + QJsonValue value_user = json_obj["user"_L1]; if (!value_user.isObject()) { LoginError(QStringLiteral("Authentication reply user is not a object"), json_obj); return; } QJsonObject obj_user = value_user.toObject(); - if (!obj_user.contains(QLatin1String("id"))) { + if (!obj_user.contains("id"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing user id"), obj_user); return; } - user_id_ = obj_user[QLatin1String("id")].toInt(); + user_id_ = obj_user["id"_L1].toInt(); - if (!obj_user.contains(QLatin1String("device"))) { + if (!obj_user.contains("device"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing user device"), obj_user); return; } - QJsonValue value_device = obj_user[QLatin1String("device")]; + QJsonValue value_device = obj_user["device"_L1]; if (!value_device.isObject()) { LoginError(QStringLiteral("Authentication reply from server user device is not a object"), value_device); return; } QJsonObject obj_device = value_device.toObject(); - if (!obj_device.contains(QLatin1String("device_manufacturer_id"))) { + if (!obj_device.contains("device_manufacturer_id"_L1)) { LoginError(QStringLiteral("Authentication reply from server device is missing device_manufacturer_id"), obj_device); return; } - device_id_ = obj_device[QLatin1String("device_manufacturer_id")].toString(); + device_id_ = obj_device["device_manufacturer_id"_L1].toString(); - if (!obj_user.contains(QLatin1String("credential"))) { + if (!obj_user.contains("credential"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing user credential"), obj_user); return; } - QJsonValue value_credential = obj_user[QLatin1String("credential")]; + QJsonValue value_credential = obj_user["credential"_L1]; if (!value_credential.isObject()) { LoginError(QStringLiteral("Authentication reply from serve userr credential is not a object"), value_device); return; } QJsonObject obj_credential = value_credential.toObject(); - if (!obj_credential.contains(QLatin1String("id"))) { + if (!obj_credential.contains("id"_L1)) { LoginError(QStringLiteral("Authentication reply user credential from server is missing user credential id"), obj_credential); return; } - credential_id_ = obj_credential[QLatin1String("id")].toInt(); + credential_id_ = obj_credential["id"_L1].toInt(); Settings s; s.beginGroup(QobuzSettingsPage::kSettingsGroup); diff --git a/src/qobuz/qobuzstreamurlrequest.cpp b/src/qobuz/qobuzstreamurlrequest.cpp index 68bb93065..272ede1a0 100644 --- a/src/qobuz/qobuzstreamurlrequest.cpp +++ b/src/qobuz/qobuzstreamurlrequest.cpp @@ -43,6 +43,8 @@ #include "qobuzbaserequest.h" #include "qobuzstreamurlrequest.h" +using namespace Qt::StringLiterals; + QobuzStreamURLRequest::QobuzStreamURLRequest(QobuzService *service, SharedPtr network, const QUrl &media_url, const uint id, QObject *parent) : QobuzBaseRequest(service, network, parent), service_(service), @@ -122,7 +124,7 @@ void QobuzStreamURLRequest::GetStreamURL() { std::sort(params_to_sign.begin(), params_to_sign.end()); QString data_to_sign; - data_to_sign += QLatin1String("trackgetFileUrl"); + data_to_sign += "trackgetFileUrl"_L1; for (const Param ¶m : std::as_const(params_to_sign)) { data_to_sign += param.first + param.second; } @@ -130,7 +132,7 @@ void QobuzStreamURLRequest::GetStreamURL() { data_to_sign += app_secret(); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5); - const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, QLatin1Char('0')).toLower(); + const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower(); ParamList params = params_to_sign; params << Param(QStringLiteral("request_ts"), QString::number(timestamp)); @@ -169,27 +171,27 @@ void QobuzStreamURLRequest::StreamURLReceived() { return; } - if (!json_obj.contains(QLatin1String("track_id"))) { + if (!json_obj.contains("track_id"_L1)) { Error(QStringLiteral("Invalid Json reply, stream url is missing track_id."), json_obj); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); return; } - int track_id = json_obj[QLatin1String("track_id")].toInt(); + int track_id = json_obj["track_id"_L1].toInt(); if (track_id != song_id_) { Error(QStringLiteral("Incorrect track ID returned."), json_obj); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); return; } - if (!json_obj.contains(QLatin1String("mime_type")) || !json_obj.contains(QLatin1String("url"))) { + if (!json_obj.contains("mime_type"_L1) || !json_obj.contains("url"_L1)) { Error(QStringLiteral("Invalid Json reply, stream url is missing url or mime_type."), json_obj); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); return; } - QUrl url(json_obj[QLatin1String("url")].toString()); - QString mimetype = json_obj[QLatin1String("mime_type")].toString(); + QUrl url(json_obj["url"_L1].toString()); + QString mimetype = json_obj["mime_type"_L1].toString(); Song::FileType filetype(Song::FileType::Unknown); QMimeDatabase mimedb; @@ -210,16 +212,16 @@ void QobuzStreamURLRequest::StreamURLReceived() { } qint64 duration = -1; - if (json_obj.contains(QLatin1String("duration"))) { - duration = json_obj[QLatin1String("duration")].toInt() * kNsecPerSec; + if (json_obj.contains("duration"_L1)) { + duration = json_obj["duration"_L1].toInt() * kNsecPerSec; } int samplerate = -1; - if (json_obj.contains(QLatin1String("sampling_rate"))) { - samplerate = static_cast(json_obj[QLatin1String("sampling_rate")].toDouble()) * 1000; + if (json_obj.contains("sampling_rate"_L1)) { + samplerate = static_cast(json_obj["sampling_rate"_L1].toDouble()) * 1000; } int bit_depth = -1; - if (json_obj.contains(QLatin1String("bit_depth"))) { - bit_depth = static_cast(json_obj[QLatin1String("bit_depth")].toDouble()); + if (json_obj.contains("bit_depth"_L1)) { + bit_depth = static_cast(json_obj["bit_depth"_L1].toDouble()); } Q_EMIT StreamURLSuccess(id_, media_url_, url, filetype, samplerate, bit_depth, duration); diff --git a/src/queue/queue.cpp b/src/queue/queue.cpp index 4ba69b17b..ad5bbfc57 100644 --- a/src/queue/queue.cpp +++ b/src/queue/queue.cpp @@ -40,6 +40,8 @@ #include "playlist/playlist.h" #include "queue.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kRowsMimetype[] = "application/x-strawberry-queue-rows"; } @@ -255,7 +257,7 @@ void Queue::UpdateSummaryText() { summary += tr("%n track(s)", "", tracks); if (nanoseconds > 0) { - summary += QLatin1String(" - [ ") + Utilities::WordyTimeNanosec(nanoseconds) + QLatin1String(" ]"); + summary += " - [ "_L1 + Utilities::WordyTimeNanosec(nanoseconds) + " ]"_L1; } Q_EMIT SummaryTextChanged(summary); diff --git a/src/radios/radiomodel.cpp b/src/radios/radiomodel.cpp index 34ca72b1b..2390c6c85 100644 --- a/src/radios/radiomodel.cpp +++ b/src/radios/radiomodel.cpp @@ -39,6 +39,8 @@ #include "radiomimedata.h" #include "radiochannel.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kTreeIconSize = 22; } @@ -179,7 +181,7 @@ void RadioModel::AddChannels(const RadioChannelList &channels) { RadioItem *item = new RadioItem(RadioItem::Type::Channel, container); item->source = channel.source; item->display_text = channel.name; - item->sort_text = SortText(Song::TextForSource(channel.source) + QLatin1String(" - ") + channel.name); + item->sort_text = SortText(Song::TextForSource(channel.source) + " - "_L1 + channel.name); item->channel = channel; items_ << item; endInsertRows(); @@ -251,7 +253,7 @@ QString RadioModel::ChannelIconPixmapCacheKey(const QModelIndex &idx) const { idx_copy = idx_copy.parent(); } - return path.join(QLatin1Char('/')); + return path.join(u'/'); } @@ -323,7 +325,7 @@ void RadioModel::AlbumCoverLoaded(const quint64 id, const AlbumCoverLoaderResult QString RadioModel::SortText(QString text) { if (text.isEmpty()) { - text = QLatin1String(" unknown"); + text = " unknown"_L1; } else { text = text.toLower(); diff --git a/src/radios/radioparadiseservice.cpp b/src/radios/radioparadiseservice.cpp index ac396c344..021d94d9d 100644 --- a/src/radios/radioparadiseservice.cpp +++ b/src/radios/radioparadiseservice.cpp @@ -32,6 +32,8 @@ #include "radioparadiseservice.h" #include "radiochannel.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kApiChannelsUrl[] = "https://api.radioparadise.com/api/list_streams"; } @@ -80,42 +82,42 @@ void RadioParadiseService::GetChannelsReply(QNetworkReply *reply, const int task return; } - if (!object.contains(QLatin1String("channels")) || !object[QLatin1String("channels")].isArray()) { + if (!object.contains("channels"_L1) || !object["channels"_L1].isArray()) { Error(QStringLiteral("Missing JSON channels array."), object); app_->task_manager()->SetTaskFinished(task_id); Q_EMIT NewChannels(); return; } - const QJsonArray array_channels = object[QLatin1String("channels")].toArray(); + const QJsonArray array_channels = object["channels"_L1].toArray(); RadioChannelList channels; for (const QJsonValue &value_channel : array_channels) { if (!value_channel.isObject()) continue; QJsonObject obj_channel = value_channel.toObject(); - if (!obj_channel.contains(QLatin1String("chan_name")) || !obj_channel.contains(QLatin1String("streams"))) { + if (!obj_channel.contains("chan_name"_L1) || !obj_channel.contains("streams"_L1)) { continue; } - QString name = obj_channel[QLatin1String("chan_name")].toString(); - QJsonValue value_streams = obj_channel[QLatin1String("streams")]; + QString name = obj_channel["chan_name"_L1].toString(); + QJsonValue value_streams = obj_channel["streams"_L1]; if (!value_streams.isArray()) { continue; } - const QJsonArray array_streams = obj_channel[QLatin1String("streams")].toArray(); + const QJsonArray array_streams = obj_channel["streams"_L1].toArray(); for (const QJsonValue &value_stream : array_streams) { if (!value_stream.isObject()) continue; QJsonObject obj_stream = value_stream.toObject(); - if (!obj_stream.contains(QLatin1String("label")) || !obj_stream.contains(QLatin1String("url"))) { + if (!obj_stream.contains("label"_L1) || !obj_stream.contains("url"_L1)) { continue; } - QString label = obj_stream[QLatin1String("label")].toString(); - QString url = obj_stream[QLatin1String("url")].toString(); + QString label = obj_stream["label"_L1].toString(); + QString url = obj_stream["url"_L1].toString(); static const QRegularExpression regex_url_schema(QStringLiteral("^[0-9a-zA-Z]*:\\/\\/"), QRegularExpression::CaseInsensitiveOption); if (!url.contains(regex_url_schema)) { - url.prepend(QLatin1String("https://")); + url.prepend("https://"_L1); } RadioChannel channel; channel.source = source_; - channel.name = name + QLatin1String(" - ") + label; + channel.name = name + " - "_L1 + label; channel.url.setUrl(url); channels << channel; } diff --git a/src/radios/somafmservice.cpp b/src/radios/somafmservice.cpp index f1a14e32f..90c477c9d 100644 --- a/src/radios/somafmservice.cpp +++ b/src/radios/somafmservice.cpp @@ -36,6 +36,8 @@ #include "somafmservice.h" #include "radiochannel.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kApiChannelsUrl[] = "https://somafm.com/channels.json"; } @@ -88,38 +90,38 @@ void SomaFMService::GetChannelsReply(QNetworkReply *reply, const int task_id) { return; } - if (!object.contains(QLatin1String("channels")) || !object[QLatin1String("channels")].isArray()) { + if (!object.contains("channels"_L1) || !object["channels"_L1].isArray()) { Error(QStringLiteral("Missing JSON channels array."), object); app_->task_manager()->SetTaskFinished(task_id); Q_EMIT NewChannels(); return; } - const QJsonArray array_channels = object[QLatin1String("channels")].toArray(); + const QJsonArray array_channels = object["channels"_L1].toArray(); RadioChannelList channels; for (const QJsonValue &value_channel : array_channels) { if (!value_channel.isObject()) continue; QJsonObject obj_channel = value_channel.toObject(); - if (!obj_channel.contains(QLatin1String("title")) || !obj_channel.contains(QLatin1String("image"))) { + if (!obj_channel.contains("title"_L1) || !obj_channel.contains("image"_L1)) { continue; } - QString name = obj_channel[QLatin1String("title")].toString(); - QString image = obj_channel[QLatin1String("image")].toString(); - const QJsonArray playlists = obj_channel[QLatin1String("playlists")].toArray(); + QString name = obj_channel["title"_L1].toString(); + QString image = obj_channel["image"_L1].toString(); + const QJsonArray playlists = obj_channel["playlists"_L1].toArray(); for (const QJsonValue &playlist : playlists) { if (!playlist.isObject()) continue; QJsonObject obj_playlist = playlist.toObject(); - if (!obj_playlist.contains(QLatin1String("url")) || !obj_playlist.contains(QLatin1String("quality"))) { + if (!obj_playlist.contains("url"_L1) || !obj_playlist.contains("quality"_L1)) { continue; } RadioChannel channel; - QString quality = obj_playlist[QLatin1String("quality")].toString(); - if (quality != QLatin1String("highest")) continue; + QString quality = obj_playlist["quality"_L1].toString(); + if (quality != "highest"_L1) continue; channel.source = source_; channel.name = name; - channel.url.setUrl(obj_playlist[QLatin1String("url")].toString()); + channel.url.setUrl(obj_playlist["url"_L1].toString()); channel.thumbnail_url.setUrl(image); - if (obj_playlist.contains(QLatin1String("format"))) { + if (obj_playlist.contains("format"_L1)) { channel.name.append(QLatin1Char(' ') + obj_playlist[QLatin1String("format")].toString().toUpper()); } channels << channel; diff --git a/src/scrobbler/lastfmimport.cpp b/src/scrobbler/lastfmimport.cpp index 49d6908ce..e74da508f 100644 --- a/src/scrobbler/lastfmimport.cpp +++ b/src/scrobbler/lastfmimport.cpp @@ -48,6 +48,8 @@ #include "scrobblingapi20.h" #include "lastfmscrobbler.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kRequestsDelay = 2000; } @@ -155,9 +157,9 @@ QByteArray LastFMImport::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - int error_code = json_obj[QLatin1String("error")].toInt(); - QString error_message = json_obj[QLatin1String("message")].toString(); + if (json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + int error_code = json_obj["error"_L1].toInt(); + QString error_message = json_obj["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(error_message).arg(error_code); } } @@ -287,62 +289,62 @@ void LastFMImport::GetRecentTracksRequestFinished(QNetworkReply *reply, const in return; } - if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - int error_code = json_obj[QLatin1String("error")].toInt(); - QString error_message = json_obj[QLatin1String("message")].toString(); + if (json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + int error_code = json_obj["error"_L1].toInt(); + QString error_message = json_obj["message"_L1].toString(); QString error_reason = QStringLiteral("%1 (%2)").arg(error_message).arg(error_code); Error(error_reason); return; } - if (!json_obj.contains(QLatin1String("recenttracks"))) { + if (!json_obj.contains("recenttracks"_L1)) { Error(QStringLiteral("JSON reply from server is missing recenttracks."), json_obj); return; } - if (!json_obj[QLatin1String("recenttracks")].isObject()) { + if (!json_obj["recenttracks"_L1].isObject()) { Error(QStringLiteral("Failed to parse JSON: recenttracks is not an object!"), json_obj); return; } - json_obj = json_obj[QLatin1String("recenttracks")].toObject(); + json_obj = json_obj["recenttracks"_L1].toObject(); - if (!json_obj.contains(QLatin1String("@attr"))) { + if (!json_obj.contains("@attr"_L1)) { Error(QStringLiteral("JSON reply from server is missing @attr."), json_obj); return; } - if (!json_obj.contains(QLatin1String("track"))) { + if (!json_obj.contains("track"_L1)) { Error(QStringLiteral("JSON reply from server is missing track."), json_obj); return; } - if (!json_obj[QLatin1String("@attr")].isObject()) { + if (!json_obj["@attr"_L1].isObject()) { Error(QStringLiteral("Failed to parse JSON: @attr is not an object."), json_obj); return; } - if (!json_obj[QLatin1String("track")].isArray()) { + if (!json_obj["track"_L1].isArray()) { Error(QStringLiteral("Failed to parse JSON: track is not an object."), json_obj); return; } - QJsonObject obj_attr = json_obj[QLatin1String("@attr")].toObject(); + QJsonObject obj_attr = json_obj["@attr"_L1].toObject(); - if (!obj_attr.contains(QLatin1String("page"))) { + if (!obj_attr.contains("page"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing page."), json_obj); return; } - if (!obj_attr.contains(QLatin1String("totalPages"))) { + if (!obj_attr.contains("totalPages"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing totalPages."), json_obj); return; } - if (!obj_attr.contains(QLatin1String("total"))) { + if (!obj_attr.contains("total"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing total."), json_obj); return; } - int total = obj_attr[QLatin1String("total")].toString().toInt(); - int pages = obj_attr[QLatin1String("totalPages")].toString().toInt(); + int total = obj_attr["total"_L1].toString().toInt(); + int pages = obj_attr["totalPages"_L1].toString().toInt(); if (page == 0) { lastplayed_total_ = total; @@ -351,7 +353,7 @@ void LastFMImport::GetRecentTracksRequestFinished(QNetworkReply *reply, const in } else { - const QJsonArray array_track = json_obj[QLatin1String("track")].toArray(); + const QJsonArray array_track = json_obj["track"_L1].toArray(); for (const QJsonValue &value_track : array_track) { @@ -361,29 +363,29 @@ void LastFMImport::GetRecentTracksRequestFinished(QNetworkReply *reply, const in continue; } QJsonObject obj_track = value_track.toObject(); - if (!obj_track.contains(QLatin1String("artist")) || - !obj_track.contains(QLatin1String("album")) || - !obj_track.contains(QLatin1String("name")) || - !obj_track.contains(QLatin1String("date")) || - !obj_track[QLatin1String("artist")].isObject() || - !obj_track[QLatin1String("album")].isObject() || - !obj_track[QLatin1String("date")].isObject() + if (!obj_track.contains("artist"_L1) || + !obj_track.contains("album"_L1) || + !obj_track.contains("name"_L1) || + !obj_track.contains("date"_L1) || + !obj_track["artist"_L1].isObject() || + !obj_track["album"_L1].isObject() || + !obj_track["date"_L1].isObject() ) { continue; } - QJsonObject obj_artist = obj_track[QLatin1String("artist")].toObject(); - QJsonObject obj_album = obj_track[QLatin1String("album")].toObject(); - QJsonObject obj_date = obj_track[QLatin1String("date")].toObject(); + QJsonObject obj_artist = obj_track["artist"_L1].toObject(); + QJsonObject obj_album = obj_track["album"_L1].toObject(); + QJsonObject obj_date = obj_track["date"_L1].toObject(); - if (!obj_artist.contains(QLatin1String("#text")) || !obj_album.contains(QLatin1String("#text")) || !obj_date.contains(QLatin1String("#text"))) { + if (!obj_artist.contains("#text"_L1) || !obj_album.contains("#text"_L1) || !obj_date.contains("#text"_L1)) { continue; } - QString artist = obj_artist[QLatin1String("#text")].toString(); - QString album = obj_album[QLatin1String("#text")].toString(); - QString date = obj_date[QLatin1String("#text")].toString(); - QString title = obj_track[QLatin1String("name")].toString(); + QString artist = obj_artist["#text"_L1].toString(); + QString album = obj_album["#text"_L1].toString(); + QString date = obj_date["#text"_L1].toString(); + QString title = obj_track["name"_L1].toString(); QDateTime datetime = QDateTime::fromString(date, QStringLiteral("dd MMM yyyy, hh:mm")); if (datetime.isValid()) { Q_EMIT UpdateLastPlayed(artist, album, title, datetime.toSecsSinceEpoch()); @@ -450,62 +452,62 @@ void LastFMImport::GetTopTracksRequestFinished(QNetworkReply *reply, const int p return; } - if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - int error_code = json_obj[QLatin1String("error")].toInt(); - QString error_message = json_obj[QLatin1String("message")].toString(); + if (json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + int error_code = json_obj["error"_L1].toInt(); + QString error_message = json_obj["message"_L1].toString(); QString error_reason = QStringLiteral("%1 (%2)").arg(error_message).arg(error_code); Error(error_reason); return; } - if (!json_obj.contains(QLatin1String("toptracks"))) { + if (!json_obj.contains("toptracks"_L1)) { Error(QStringLiteral("JSON reply from server is missing toptracks."), json_obj); return; } - if (!json_obj[QLatin1String("toptracks")].isObject()) { + if (!json_obj["toptracks"_L1].isObject()) { Error(QStringLiteral("Failed to parse JSON: toptracks is not an object!"), json_obj); return; } - json_obj = json_obj[QLatin1String("toptracks")].toObject(); + json_obj = json_obj["toptracks"_L1].toObject(); - if (!json_obj.contains(QLatin1String("@attr"))) { + if (!json_obj.contains("@attr"_L1)) { Error(QStringLiteral("JSON reply from server is missing @attr."), json_obj); return; } - if (!json_obj.contains(QLatin1String("track"))) { + if (!json_obj.contains("track"_L1)) { Error(QStringLiteral("JSON reply from server is missing track."), json_obj); return; } - if (!json_obj[QLatin1String("@attr")].isObject()) { + if (!json_obj["@attr"_L1].isObject()) { Error(QStringLiteral("Failed to parse JSON: @attr is not an object."), json_obj); return; } - if (!json_obj[QLatin1String("track")].isArray()) { + if (!json_obj["track"_L1].isArray()) { Error(QStringLiteral("Failed to parse JSON: track is not an object."), json_obj); return; } - QJsonObject obj_attr = json_obj[QLatin1String("@attr")].toObject(); + QJsonObject obj_attr = json_obj["@attr"_L1].toObject(); - if (!obj_attr.contains(QLatin1String("page"))) { + if (!obj_attr.contains("page"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing page."), json_obj); return; } - if (!obj_attr.contains(QLatin1String("totalPages"))) { + if (!obj_attr.contains("totalPages"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing page."), json_obj); return; } - if (!obj_attr.contains(QLatin1String("total"))) { + if (!obj_attr.contains("total"_L1)) { Error(QStringLiteral("Failed to parse JSON: attr object is missing total."), json_obj); return; } - int pages = obj_attr[QLatin1String("totalPages")].toString().toInt(); - int total = obj_attr[QLatin1String("total")].toString().toInt(); + int pages = obj_attr["totalPages"_L1].toString().toInt(); + int total = obj_attr["total"_L1].toString().toInt(); if (page == 0) { playcount_total_ = total; @@ -514,7 +516,7 @@ void LastFMImport::GetTopTracksRequestFinished(QNetworkReply *reply, const int p } else { - QJsonArray array_track = json_obj[QLatin1String("track")].toArray(); + QJsonArray array_track = json_obj["track"_L1].toArray(); for (QJsonArray::iterator it = array_track.begin(); it != array_track.end(); ++it) { const QJsonValue &value_track = *it; @@ -526,22 +528,22 @@ void LastFMImport::GetTopTracksRequestFinished(QNetworkReply *reply, const int p } QJsonObject obj_track = value_track.toObject(); - if (!obj_track.contains(QLatin1String("artist")) || - !obj_track.contains(QLatin1String("name")) || - !obj_track.contains(QLatin1String("playcount")) || - !obj_track[QLatin1String("artist")].isObject() + if (!obj_track.contains("artist"_L1) || + !obj_track.contains("name"_L1) || + !obj_track.contains("playcount"_L1) || + !obj_track["artist"_L1].isObject() ) { continue; } - QJsonObject obj_artist = obj_track[QLatin1String("artist")].toObject(); - if (!obj_artist.contains(QLatin1String("name"))) { + QJsonObject obj_artist = obj_track["artist"_L1].toObject(); + if (!obj_artist.contains("name"_L1)) { continue; } - QString artist = obj_artist[QLatin1String("name")].toString(); - QString title = obj_track[QLatin1String("name")].toString(); - int playcount = obj_track[QLatin1String("playcount")].toString().toInt(); + QString artist = obj_artist["name"_L1].toString(); + QString title = obj_track["name"_L1].toString(); + int playcount = obj_track["playcount"_L1].toString().toInt(); if (playcount <= 0) continue; diff --git a/src/scrobbler/listenbrainzscrobbler.cpp b/src/scrobbler/listenbrainzscrobbler.cpp index 9a45b4fd6..77f8337d8 100644 --- a/src/scrobbler/listenbrainzscrobbler.cpp +++ b/src/scrobbler/listenbrainzscrobbler.cpp @@ -57,6 +57,8 @@ #include "scrobblemetadata.h" #include "listenbrainzscrobbler.h" +using namespace Qt::StringLiterals; + const char *ListenBrainzScrobbler::kName = "ListenBrainz"; const char *ListenBrainzScrobbler::kSettingsGroup = "ListenBrainz"; @@ -250,12 +252,12 @@ ListenBrainzScrobbler::ReplyResult ListenBrainzScrobbler::GetJsonObject(QNetwork if (reply->error() == QNetworkReply::NoError || reply->error() >= 200) { const QByteArray data = reply->readAll(); if (!data.isEmpty() && ExtractJsonObj(data, json_obj, error_description)) { - if (json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("error_description"))) { - error_description = json_obj[QLatin1String("error_description")].toString(); + if (json_obj.contains("error"_L1) && json_obj.contains("error_description"_L1)) { + error_description = json_obj["error_description"_L1].toString(); reply_error_type = ReplyResult::APIError; } - else if (json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("error"))) { - error_description = QStringLiteral("%1 (%2)").arg(json_obj[QLatin1String("error")].toString()).arg(json_obj[QLatin1String("code")].toInt()); + else if (json_obj.contains("code"_L1) && json_obj.contains("error"_L1)) { + error_description = QStringLiteral("%1 (%2)").arg(json_obj["error"_L1].toString()).arg(json_obj["code"_L1].toInt()); reply_error_type = ReplyResult::APIError; } } @@ -320,16 +322,16 @@ void ListenBrainzScrobbler::AuthenticateReplyFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("access_token")) || !json_obj.contains(QLatin1String("expires_in")) || !json_obj.contains(QLatin1String("token_type"))) { + if (!json_obj.contains("access_token"_L1) || !json_obj.contains("expires_in"_L1) || !json_obj.contains("token_type"_L1)) { AuthError(QStringLiteral("Json access_token, expires_in or token_type is missing.")); return; } - access_token_ = json_obj[QLatin1String("access_token")].toString(); - expires_in_ = json_obj[QLatin1String("expires_in")].toInt(); - token_type_ = json_obj[QLatin1String("token_type")].toString(); - if (json_obj.contains(QLatin1String("refresh_token"))) { - refresh_token_ = json_obj[QLatin1String("refresh_token")].toString(); + access_token_ = json_obj["access_token"_L1].toString(); + expires_in_ = json_obj["expires_in"_L1].toInt(); + token_type_ = json_obj["token_type"_L1].toString(); + if (json_obj.contains("refresh_token"_L1)) { + refresh_token_ = json_obj["refresh_token"_L1].toString(); } login_time_ = QDateTime::currentSecsSinceEpoch(); @@ -374,42 +376,42 @@ QJsonObject ListenBrainzScrobbler::JsonTrackMetadata(const ScrobbleMetadata &met QJsonObject object_track_metadata; if (prefer_albumartist_) { - object_track_metadata.insert(QLatin1String("artist_name"), QJsonValue::fromVariant(metadata.effective_albumartist())); + object_track_metadata.insert("artist_name"_L1, QJsonValue::fromVariant(metadata.effective_albumartist())); } else { - object_track_metadata.insert(QLatin1String("artist_name"), QJsonValue::fromVariant(metadata.artist)); + object_track_metadata.insert("artist_name"_L1, QJsonValue::fromVariant(metadata.artist)); } if (!metadata.album.isEmpty()) { - object_track_metadata.insert(QLatin1String("release_name"), QJsonValue::fromVariant(StripAlbum(metadata.album))); + object_track_metadata.insert("release_name"_L1, QJsonValue::fromVariant(StripAlbum(metadata.album))); } - object_track_metadata.insert(QLatin1String("track_name"), QJsonValue::fromVariant(StripTitle(metadata.title))); + object_track_metadata.insert("track_name"_L1, QJsonValue::fromVariant(StripTitle(metadata.title))); QJsonObject object_additional_info; if (metadata.length_nanosec > 0) { - object_additional_info.insert(QLatin1String("duration_ms"), metadata.length_nanosec / kNsecPerMsec); + object_additional_info.insert("duration_ms"_L1, metadata.length_nanosec / kNsecPerMsec); } if (metadata.track > 0) { - object_additional_info.insert(QLatin1String("tracknumber"), metadata.track); + object_additional_info.insert("tracknumber"_L1, metadata.track); } - object_additional_info.insert(QLatin1String("media_player"), QCoreApplication::applicationName()); - object_additional_info.insert(QLatin1String("media_player_version"), QCoreApplication::applicationVersion()); - object_additional_info.insert(QLatin1String("submission_client"), QCoreApplication::applicationName()); - object_additional_info.insert(QLatin1String("submission_client_version"), QCoreApplication::applicationVersion()); + object_additional_info.insert("media_player"_L1, QCoreApplication::applicationName()); + object_additional_info.insert("media_player_version"_L1, QCoreApplication::applicationVersion()); + object_additional_info.insert("submission_client"_L1, QCoreApplication::applicationName()); + object_additional_info.insert("submission_client_version"_L1, QCoreApplication::applicationVersion()); QStringList artist_mbids_list; if (!metadata.musicbrainz_album_artist_id.isEmpty()) { - artist_mbids_list << metadata.musicbrainz_album_artist_id.split(QLatin1Char('/')); + artist_mbids_list << metadata.musicbrainz_album_artist_id.split(u'/'); } if (!metadata.musicbrainz_artist_id.isEmpty()) { - artist_mbids_list << metadata.musicbrainz_artist_id.split(QLatin1Char('/')); + artist_mbids_list << metadata.musicbrainz_artist_id.split(u'/'); } if (!metadata.musicbrainz_original_artist_id.isEmpty()) { - artist_mbids_list << metadata.musicbrainz_original_artist_id.split(QLatin1Char('/')); + artist_mbids_list << metadata.musicbrainz_original_artist_id.split(u'/'); } if (!artist_mbids_list.isEmpty()) { QJsonArray artist_mbids_array; @@ -419,33 +421,33 @@ QJsonObject ListenBrainzScrobbler::JsonTrackMetadata(const ScrobbleMetadata &met } } if (!artist_mbids_array.isEmpty()) { - object_additional_info.insert(QLatin1String("artist_mbids"), artist_mbids_array); + object_additional_info.insert("artist_mbids"_L1, artist_mbids_array); } } if (!metadata.musicbrainz_album_id.isEmpty()) { - object_additional_info.insert(QLatin1String("release_mbid"), metadata.musicbrainz_album_id); + object_additional_info.insert("release_mbid"_L1, metadata.musicbrainz_album_id); } else if (!metadata.musicbrainz_original_album_id.isEmpty()) { - object_additional_info.insert(QLatin1String("release_mbid"), metadata.musicbrainz_original_album_id); + object_additional_info.insert("release_mbid"_L1, metadata.musicbrainz_original_album_id); } if (!metadata.musicbrainz_recording_id.isEmpty()) { - object_additional_info.insert(QLatin1String("recording_mbid"), metadata.musicbrainz_recording_id); + object_additional_info.insert("recording_mbid"_L1, metadata.musicbrainz_recording_id); } if (!metadata.musicbrainz_track_id.isEmpty()) { - object_additional_info.insert(QLatin1String("track_mbid"), metadata.musicbrainz_track_id); + object_additional_info.insert("track_mbid"_L1, metadata.musicbrainz_track_id); } if (!metadata.musicbrainz_work_id.isEmpty()) { - const QStringList musicbrainz_work_id_list = metadata.musicbrainz_work_id.split(QLatin1Char('/')); + const QStringList musicbrainz_work_id_list = metadata.musicbrainz_work_id.split(u'/'); QJsonArray array_musicbrainz_work_id; for (const QString &musicbrainz_work_id : musicbrainz_work_id_list) { array_musicbrainz_work_id << musicbrainz_work_id; } - object_additional_info.insert(QLatin1String("work_mbids"), array_musicbrainz_work_id); + object_additional_info.insert("work_mbids"_L1, array_musicbrainz_work_id); } - object_track_metadata.insert(QLatin1String("additional_info"), object_additional_info); + object_track_metadata.insert("additional_info"_L1, object_additional_info); return object_track_metadata; @@ -462,12 +464,12 @@ void ListenBrainzScrobbler::UpdateNowPlaying(const Song &song) { if (!song.is_metadata_good() || !authenticated() || settings_->offline()) return; QJsonObject object_listen; - object_listen.insert(QLatin1String("track_metadata"), JsonTrackMetadata(ScrobbleMetadata(song))); + object_listen.insert("track_metadata"_L1, JsonTrackMetadata(ScrobbleMetadata(song))); QJsonArray array_payload; array_payload.append(object_listen); QJsonObject object; - object.insert(QLatin1String("listen_type"), QLatin1String("playing_now")); - object.insert(QLatin1String("payload"), array_payload); + object.insert("listen_type"_L1, "playing_now"_L1); + object.insert("payload"_L1, array_payload); QJsonDocument doc(object); QUrl url(QStringLiteral("%1/1/submit-listens").arg(QLatin1String(kApiUrl))); @@ -490,13 +492,13 @@ void ListenBrainzScrobbler::UpdateNowPlayingRequestFinished(QNetworkReply *reply return; } - if (!json_obj.contains(QLatin1String("status"))) { + if (!json_obj.contains("status"_L1)) { Error(QStringLiteral("Now playing request is missing status from server.")); return; } - QString status = json_obj[QLatin1String("status")].toString(); - if (status.compare(QLatin1String("ok"), Qt::CaseInsensitive) != 0) { + QString status = json_obj["status"_L1].toString(); + if (status.compare("ok"_L1, Qt::CaseInsensitive) != 0) { Error(QStringLiteral("Received %1 status for now playing.").arg(status)); } @@ -558,8 +560,8 @@ void ListenBrainzScrobbler::Submit() { cache_item->sent = true; cache_items_sent << cache_item; QJsonObject object_listen; - object_listen.insert(QLatin1String("listened_at"), QJsonValue::fromVariant(cache_item->timestamp)); - object_listen.insert(QLatin1String("track_metadata"), JsonTrackMetadata(cache_item->metadata)); + object_listen.insert("listened_at"_L1, QJsonValue::fromVariant(cache_item->timestamp)); + object_listen.insert("track_metadata"_L1, JsonTrackMetadata(cache_item->metadata)); array.append(QJsonValue::fromVariant(object_listen)); if (cache_items_sent.count() >= kScrobblesPerRequest || cache_item->error) break; } @@ -569,8 +571,8 @@ void ListenBrainzScrobbler::Submit() { submitted_ = true; QJsonObject object; - object.insert(QLatin1String("listen_type"), QLatin1String("import")); - object.insert(QLatin1String("payload"), array); + object.insert("listen_type"_L1, "import"_L1); + object.insert("payload"_L1, array); QJsonDocument doc(object); QUrl url(QStringLiteral("%1/1/submit-listens").arg(QLatin1String(kApiUrl))); @@ -592,8 +594,8 @@ void ListenBrainzScrobbler::ScrobbleRequestFinished(QNetworkReply *reply, Scrobb QString error_message; const ReplyResult reply_result = GetJsonObject(reply, json_obj, error_message); if (reply_result == ReplyResult::Success) { - if (json_obj.contains(QLatin1String("status"))) { - QString status = json_obj[QLatin1String("status")].toString(); + if (json_obj.contains("status"_L1)) { + QString status = json_obj["status"_L1].toString(); qLog(Debug) << "ListenBrainz: Received scrobble status:" << status; } else { @@ -640,8 +642,8 @@ void ListenBrainzScrobbler::Love() { qLog(Debug) << "ListenBrainz: Sending love for song" << song_playing_.artist() << song_playing_.album() << song_playing_.title(); QJsonObject object; - object.insert(QLatin1String("recording_mbid"), song_playing_.musicbrainz_recording_id()); - object.insert(QLatin1String("score"), 1); + object.insert("recording_mbid"_L1, song_playing_.musicbrainz_recording_id()); + object.insert("score"_L1, 1); QUrl url(QStringLiteral("%1/1/feedback/recording-feedback").arg(QLatin1String(kApiUrl))); QNetworkReply *reply = CreateRequest(url, QJsonDocument(object)); @@ -663,8 +665,8 @@ void ListenBrainzScrobbler::LoveRequestFinished(QNetworkReply *reply) { return; } - if (json_obj.contains(QLatin1String("status"))) { - qLog(Debug) << "ListenBrainz: Received recording-feedback status:" << json_obj[QLatin1String("status")].toString(); + if (json_obj.contains("status"_L1)) { + qLog(Debug) << "ListenBrainz: Received recording-feedback status:" << json_obj["status"_L1].toString(); } } diff --git a/src/scrobbler/scrobblercache.cpp b/src/scrobbler/scrobblercache.cpp index ee9a35a17..9407f5e1d 100644 --- a/src/scrobbler/scrobblercache.cpp +++ b/src/scrobbler/scrobblercache.cpp @@ -42,8 +42,9 @@ #include "scrobblercache.h" #include "scrobblercacheitem.h" -using std::make_shared; using namespace std::chrono_literals; +using namespace Qt::StringLiterals; +using std::make_shared; ScrobblerCache::ScrobblerCache(const QString &filename, QObject *parent) : QObject(parent), @@ -96,11 +97,11 @@ void ScrobblerCache::ReadCache() { qLog(Error) << "Scrobbler cache has empty JSON object."; return; } - if (!json_obj.contains(QLatin1String("tracks"))) { + if (!json_obj.contains("tracks"_L1)) { qLog(Error) << "Scrobbler cache is missing JSON tracks."; return; } - QJsonValue json_tracks = json_obj[QLatin1String("tracks")]; + QJsonValue json_tracks = json_obj["tracks"_L1]; if (!json_tracks.isArray()) { qLog(Error) << "Scrobbler cache JSON tracks is not an array."; return; @@ -118,13 +119,13 @@ void ScrobblerCache::ReadCache() { } QJsonObject json_obj_track = value.toObject(); if ( - !json_obj_track.contains(QLatin1String("timestamp")) || - !json_obj_track.contains(QLatin1String("artist")) || - !json_obj_track.contains(QLatin1String("album")) || - !json_obj_track.contains(QLatin1String("title")) || - !json_obj_track.contains(QLatin1String("track")) || - !json_obj_track.contains(QLatin1String("albumartist")) || - !json_obj_track.contains(QLatin1String("length_nanosec")) + !json_obj_track.contains("timestamp"_L1) || + !json_obj_track.contains("artist"_L1) || + !json_obj_track.contains("album"_L1) || + !json_obj_track.contains("title"_L1) || + !json_obj_track.contains("track"_L1) || + !json_obj_track.contains("albumartist"_L1) || + !json_obj_track.contains("length_nanosec"_L1) ) { qLog(Error) << "Scrobbler cache JSON tracks array value is missing data."; qLog(Debug) << value; @@ -132,52 +133,52 @@ void ScrobblerCache::ReadCache() { } ScrobbleMetadata metadata; - quint64 timestamp = json_obj_track[QLatin1String("timestamp")].toVariant().toULongLong(); - metadata.artist = json_obj_track[QLatin1String("artist")].toString(); - metadata.album = json_obj_track[QLatin1String("album")].toString(); - metadata.title = json_obj_track[QLatin1String("title")].toString(); - metadata.track = json_obj_track[QLatin1String("track")].toInt(); - metadata.albumartist = json_obj_track[QLatin1String("albumartist")].toString(); - metadata.length_nanosec = json_obj_track[QLatin1String("length_nanosec")].toVariant().toLongLong(); + quint64 timestamp = json_obj_track["timestamp"_L1].toVariant().toULongLong(); + metadata.artist = json_obj_track["artist"_L1].toString(); + metadata.album = json_obj_track["album"_L1].toString(); + metadata.title = json_obj_track["title"_L1].toString(); + metadata.track = json_obj_track["track"_L1].toInt(); + metadata.albumartist = json_obj_track["albumartist"_L1].toString(); + metadata.length_nanosec = json_obj_track["length_nanosec"_L1].toVariant().toLongLong(); if (timestamp == 0 || metadata.artist.isEmpty() || metadata.title.isEmpty() || metadata.length_nanosec <= 0) { qLog(Error) << "Invalid cache data" << "for song" << metadata.title; continue; } - if (json_obj_track.contains(QLatin1String("grouping"))) { - metadata.grouping = json_obj_track[QLatin1String("grouping")].toString(); + if (json_obj_track.contains("grouping"_L1)) { + metadata.grouping = json_obj_track["grouping"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_album_artist_id"))) { - metadata.musicbrainz_album_artist_id = json_obj_track[QLatin1String("musicbrainz_album_artist_id")].toString(); + if (json_obj_track.contains("musicbrainz_album_artist_id"_L1)) { + metadata.musicbrainz_album_artist_id = json_obj_track["musicbrainz_album_artist_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_artist_id"))) { - metadata.musicbrainz_artist_id = json_obj_track[QLatin1String("musicbrainz_artist_id")].toString(); + if (json_obj_track.contains("musicbrainz_artist_id"_L1)) { + metadata.musicbrainz_artist_id = json_obj_track["musicbrainz_artist_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_original_artist_id"))) { - metadata.musicbrainz_original_artist_id = json_obj_track[QLatin1String("musicbrainz_original_artist_id")].toString(); + if (json_obj_track.contains("musicbrainz_original_artist_id"_L1)) { + metadata.musicbrainz_original_artist_id = json_obj_track["musicbrainz_original_artist_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_album_id"))) { - metadata.musicbrainz_album_id = json_obj_track[QLatin1String("musicbrainz_album_id")].toString(); + if (json_obj_track.contains("musicbrainz_album_id"_L1)) { + metadata.musicbrainz_album_id = json_obj_track["musicbrainz_album_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_original_album_id"))) { - metadata.musicbrainz_original_album_id = json_obj_track[QLatin1String("musicbrainz_original_album_id")].toString(); + if (json_obj_track.contains("musicbrainz_original_album_id"_L1)) { + metadata.musicbrainz_original_album_id = json_obj_track["musicbrainz_original_album_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_recording_id"))) { - metadata.musicbrainz_recording_id = json_obj_track[QLatin1String("musicbrainz_recording_id")].toString(); + if (json_obj_track.contains("musicbrainz_recording_id"_L1)) { + metadata.musicbrainz_recording_id = json_obj_track["musicbrainz_recording_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_track_id"))) { - metadata.musicbrainz_track_id = json_obj_track[QLatin1String("musicbrainz_track_id")].toString(); + if (json_obj_track.contains("musicbrainz_track_id"_L1)) { + metadata.musicbrainz_track_id = json_obj_track["musicbrainz_track_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_disc_id"))) { - metadata.musicbrainz_disc_id = json_obj_track[QLatin1String("musicbrainz_disc_id")].toString(); + if (json_obj_track.contains("musicbrainz_disc_id"_L1)) { + metadata.musicbrainz_disc_id = json_obj_track["musicbrainz_disc_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_release_group_id"))) { - metadata.musicbrainz_release_group_id = json_obj_track[QLatin1String("musicbrainz_release_group_id")].toString(); + if (json_obj_track.contains("musicbrainz_release_group_id"_L1)) { + metadata.musicbrainz_release_group_id = json_obj_track["musicbrainz_release_group_id"_L1].toString(); } - if (json_obj_track.contains(QLatin1String("musicbrainz_work_id"))) { - metadata.musicbrainz_work_id = json_obj_track[QLatin1String("musicbrainz_work_id")].toString(); + if (json_obj_track.contains("musicbrainz_work_id"_L1)) { + metadata.musicbrainz_work_id = json_obj_track["musicbrainz_work_id"_L1].toString(); } ScrobblerCacheItemPtr cache_item = make_shared(metadata, timestamp); @@ -202,29 +203,29 @@ void ScrobblerCache::WriteCache() { QJsonArray array; for (ScrobblerCacheItemPtr cache_item : std::as_const(scrobbler_cache_)) { QJsonObject object; - object.insert(QLatin1String("timestamp"), QJsonValue::fromVariant(cache_item->timestamp)); - object.insert(QLatin1String("artist"), QJsonValue::fromVariant(cache_item->metadata.artist)); - object.insert(QLatin1String("album"), QJsonValue::fromVariant(cache_item->metadata.album)); - object.insert(QLatin1String("title"), QJsonValue::fromVariant(cache_item->metadata.title)); - object.insert(QLatin1String("track"), QJsonValue::fromVariant(cache_item->metadata.track)); - object.insert(QLatin1String("albumartist"), QJsonValue::fromVariant(cache_item->metadata.albumartist)); - object.insert(QLatin1String("grouping"), QJsonValue::fromVariant(cache_item->metadata.grouping)); - object.insert(QLatin1String("musicbrainz_album_artist_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_album_artist_id)); - object.insert(QLatin1String("musicbrainz_artist_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_artist_id)); - object.insert(QLatin1String("musicbrainz_original_artist_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_original_artist_id)); - object.insert(QLatin1String("musicbrainz_album_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_album_id)); - object.insert(QLatin1String("musicbrainz_original_album_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_original_album_id)); - object.insert(QLatin1String("musicbrainz_recording_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_recording_id)); - object.insert(QLatin1String("musicbrainz_track_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_track_id)); - object.insert(QLatin1String("musicbrainz_disc_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_disc_id)); - object.insert(QLatin1String("musicbrainz_release_group_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_release_group_id)); - object.insert(QLatin1String("musicbrainz_work_id"), QJsonValue::fromVariant(cache_item->metadata.musicbrainz_work_id)); - object.insert(QLatin1String("length_nanosec"), QJsonValue::fromVariant(cache_item->metadata.length_nanosec)); + object.insert("timestamp"_L1, QJsonValue::fromVariant(cache_item->timestamp)); + object.insert("artist"_L1, QJsonValue::fromVariant(cache_item->metadata.artist)); + object.insert("album"_L1, QJsonValue::fromVariant(cache_item->metadata.album)); + object.insert("title"_L1, QJsonValue::fromVariant(cache_item->metadata.title)); + object.insert("track"_L1, QJsonValue::fromVariant(cache_item->metadata.track)); + object.insert("albumartist"_L1, QJsonValue::fromVariant(cache_item->metadata.albumartist)); + object.insert("grouping"_L1, QJsonValue::fromVariant(cache_item->metadata.grouping)); + object.insert("musicbrainz_album_artist_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_album_artist_id)); + object.insert("musicbrainz_artist_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_artist_id)); + object.insert("musicbrainz_original_artist_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_original_artist_id)); + object.insert("musicbrainz_album_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_album_id)); + object.insert("musicbrainz_original_album_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_original_album_id)); + object.insert("musicbrainz_recording_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_recording_id)); + object.insert("musicbrainz_track_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_track_id)); + object.insert("musicbrainz_disc_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_disc_id)); + object.insert("musicbrainz_release_group_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_release_group_id)); + object.insert("musicbrainz_work_id"_L1, QJsonValue::fromVariant(cache_item->metadata.musicbrainz_work_id)); + object.insert("length_nanosec"_L1, QJsonValue::fromVariant(cache_item->metadata.length_nanosec)); array.append(QJsonValue::fromVariant(object)); } QJsonObject object; - object.insert(QLatin1String("tracks"), array); + object.insert("tracks"_L1, array); QJsonDocument doc(object); QFile file(filename_); diff --git a/src/scrobbler/scrobblingapi20.cpp b/src/scrobbler/scrobblingapi20.cpp index 23bd04b99..150ad5ab9 100644 --- a/src/scrobbler/scrobblingapi20.cpp +++ b/src/scrobbler/scrobblingapi20.cpp @@ -61,6 +61,8 @@ #include "scrobblercacheitem.h" #include "scrobblemetadata.h" +using namespace Qt::StringLiterals; + const char *ScrobblingAPI20::kApiKey = "211990b4c96782c05d1536e7219eb56e"; namespace { @@ -171,9 +173,9 @@ ScrobblingAPI20::ReplyResult ScrobblingAPI20::GetJsonObject(QNetworkReply *reply if (reply->error() == QNetworkReply::NoError || reply->error() >= 200) { const QByteArray data = reply->readAll(); int error_code = 0; - if (!data.isEmpty() && ExtractJsonObj(data, json_obj, error_description) && json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("message"))) { - error_code = json_obj[QLatin1String("error")].toInt(); - QString error_message = json_obj[QLatin1String("message")].toString(); + if (!data.isEmpty() && ExtractJsonObj(data, json_obj, error_description) && json_obj.contains("error"_L1) && json_obj.contains("message"_L1)) { + error_code = json_obj["error"_L1].toInt(); + QString error_message = json_obj["message"_L1].toString(); error_description = QStringLiteral("%1 (%2)").arg(error_message).arg(error_code); reply_error_type = ReplyResult::APIError; } @@ -286,7 +288,7 @@ void ScrobblingAPI20::RequestSession(const QString &token) { } data_to_sign += QLatin1String(kSecret); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5); - const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, QLatin1Char('0')).toLower(); + const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower(); session_url_query.addQueryItem(QStringLiteral("api_sig"), signature); session_url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("format"))), QString::fromLatin1(QUrl::toPercentEncoding(QStringLiteral("json")))); session_url.setQuery(session_url_query); @@ -313,12 +315,12 @@ void ScrobblingAPI20::AuthenticateReplyFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("session"))) { + if (!json_obj.contains("session"_L1)) { AuthError(QStringLiteral("Json reply from server is missing session.")); return; } - QJsonValue json_session = json_obj[QLatin1String("session")]; + QJsonValue json_session = json_obj["session"_L1]; if (!json_session.isObject()) { AuthError(QStringLiteral("Json session is not an object.")); return; @@ -328,14 +330,14 @@ void ScrobblingAPI20::AuthenticateReplyFinished(QNetworkReply *reply) { AuthError(QStringLiteral("Json session object is empty.")); return; } - if (!json_obj.contains(QLatin1String("subscriber")) || !json_obj.contains(QLatin1String("name")) || !json_obj.contains(QLatin1String("key"))) { + if (!json_obj.contains("subscriber"_L1) || !json_obj.contains("name"_L1) || !json_obj.contains("key"_L1)) { AuthError(QStringLiteral("Json session object is missing values.")); return; } - subscriber_ = json_obj[QLatin1String("subscriber")].toBool(); - username_ = json_obj[QLatin1String("name")].toString(); - session_key_ = json_obj[QLatin1String("key")].toString(); + subscriber_ = json_obj["subscriber"_L1].toBool(); + username_ = json_obj["name"_L1].toString(); + session_key_ = json_obj["key"_L1].toString(); Settings s; s.beginGroup(settings_group_); @@ -370,7 +372,7 @@ QNetworkReply *ScrobblingAPI20::CreateRequest(const ParamList &request_params) { data_to_sign += QLatin1String(kSecret); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5); - const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, QLatin1Char('0')).toLower(); + const QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, u'0').toLower(); url_query.addQueryItem(QStringLiteral("api_sig"), QString::fromLatin1(QUrl::toPercentEncoding(signature))); url_query.addQueryItem(QStringLiteral("format"), QStringLiteral("json")); @@ -431,7 +433,7 @@ void ScrobblingAPI20::UpdateNowPlayingRequestFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("nowplaying"))) { + if (!json_obj.contains("nowplaying"_L1)) { Error(QStringLiteral("Json reply from server is missing nowplaying."), json_obj); return; } @@ -510,13 +512,13 @@ void ScrobblingAPI20::Submit() { params << Param(QStringLiteral("%1[%2]").arg(QStringLiteral("timestamp")).arg(i), QString::number(cache_item->timestamp)); params << Param(QStringLiteral("%1[%2]").arg(QStringLiteral("duration")).arg(i), QString::number(cache_item->metadata.length_nanosec / kNsecPerSec)); if (!cache_item->metadata.album.isEmpty()) { - params << Param(QStringLiteral("%1[%2]").arg(QLatin1String("album")).arg(i), StripAlbum(cache_item->metadata.album)); + params << Param(QStringLiteral("%1[%2]").arg("album"_L1).arg(i), StripAlbum(cache_item->metadata.album)); } if (!prefer_albumartist_ && !cache_item->metadata.albumartist.isEmpty()) { - params << Param(QStringLiteral("%1[%2]").arg(QLatin1String("albumArtist")).arg(i), cache_item->metadata.albumartist); + params << Param(QStringLiteral("%1[%2]").arg("albumArtist"_L1).arg(i), cache_item->metadata.albumartist); } if (cache_item->metadata.track > 0) { - params << Param(QStringLiteral("%1[%2]").arg(QLatin1String("trackNumber")).arg(i), QString::number(cache_item->metadata.track)); + params << Param(QStringLiteral("%1[%2]").arg("trackNumber"_L1).arg(i), QString::number(cache_item->metadata.track)); } ++i; if (cache_items_sent.count() >= kScrobblesPerRequest) break; @@ -553,13 +555,13 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, ScrobblerCac cache_->Flush(cache_items); submit_error_ = false; - if (!json_obj.contains(QLatin1String("scrobbles"))) { + if (!json_obj.contains("scrobbles"_L1)) { Error(QStringLiteral("Json reply from server is missing scrobbles."), json_obj); StartSubmit(); return; } - QJsonValue value_scrobbles = json_obj[QLatin1String("scrobbles")]; + QJsonValue value_scrobbles = json_obj["scrobbles"_L1]; if (!value_scrobbles.isObject()) { Error(QStringLiteral("Json scrobbles is not an object."), json_obj); StartSubmit(); @@ -571,13 +573,13 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, ScrobblerCac StartSubmit(); return; } - if (!json_obj.contains(QLatin1String("@attr")) || !json_obj.contains(QLatin1String("scrobble"))) { + if (!json_obj.contains("@attr"_L1) || !json_obj.contains("scrobble"_L1)) { Error(QStringLiteral("Json scrobbles object is missing values."), json_obj); StartSubmit(); return; } - QJsonValue value_attr = json_obj[QLatin1String("@attr")]; + QJsonValue value_attr = json_obj["@attr"_L1]; if (!value_attr.isObject()) { Error(QStringLiteral("Json scrobbles attr is not an object."), value_attr); StartSubmit(); @@ -589,19 +591,19 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, ScrobblerCac StartSubmit(); return; } - if (!obj_attr.contains(QLatin1String("accepted")) || !obj_attr.contains(QLatin1String("ignored"))) { + if (!obj_attr.contains("accepted"_L1) || !obj_attr.contains("ignored"_L1)) { Error(QStringLiteral("Json scrobbles attr is missing values."), obj_attr); StartSubmit(); return; } - int accepted = obj_attr[QLatin1String("accepted")].toInt(); - int ignored = obj_attr[QLatin1String("ignored")].toInt(); + int accepted = obj_attr["accepted"_L1].toInt(); + int ignored = obj_attr["ignored"_L1].toInt(); qLog(Debug) << name_ << "Scrobbles accepted:" << accepted << "ignored:" << ignored; QJsonArray array_scrobble; - QJsonValue value_scrobble = json_obj[QLatin1String("scrobble")]; + QJsonValue value_scrobble = json_obj["scrobble"_L1]; if (value_scrobble.isObject()) { QJsonObject obj_scrobble = value_scrobble.toObject(); if (obj_scrobble.isEmpty()) { @@ -636,21 +638,21 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, ScrobblerCac continue; } - if (!json_track.contains(QLatin1String("artist")) || - !json_track.contains(QLatin1String("album")) || - !json_track.contains(QLatin1String("albumArtist")) || - !json_track.contains(QLatin1String("track")) || - !json_track.contains(QLatin1String("timestamp")) || - !json_track.contains(QLatin1String("ignoredMessage")) + if (!json_track.contains("artist"_L1) || + !json_track.contains("album"_L1) || + !json_track.contains("albumArtist"_L1) || + !json_track.contains("track"_L1) || + !json_track.contains("timestamp"_L1) || + !json_track.contains("ignoredMessage"_L1) ) { Error(QStringLiteral("Json scrobbles scrobble is missing values."), json_track); continue; } - QJsonValue value_artist = json_track[QLatin1String("artist")]; - QJsonValue value_album = json_track[QLatin1String("album")]; - QJsonValue value_song = json_track[QLatin1String("track")]; - QJsonValue value_ignoredmessage = json_track[QLatin1String("ignoredMessage")]; + QJsonValue value_artist = json_track["artist"_L1]; + QJsonValue value_album = json_track["album"_L1]; + QJsonValue value_song = json_track["track"_L1]; + QJsonValue value_ignoredmessage = json_track["ignoredMessage"_L1]; //quint64 timestamp = json_track[QLatin1String("timestamp")].toVariant().toULongLong(); if (!value_artist.isObject() || !value_album.isObject() || !value_song.isObject() || !value_ignoredmessage.isObject()) { @@ -668,15 +670,15 @@ void ScrobblingAPI20::ScrobbleRequestFinished(QNetworkReply *reply, ScrobblerCac continue; } - if (!obj_artist.contains(QLatin1String("#text")) || !obj_album.contains(QLatin1String("#text")) || !obj_song.contains(QLatin1String("#text"))) { + if (!obj_artist.contains("#text"_L1) || !obj_album.contains("#text"_L1) || !obj_song.contains("#text"_L1)) { continue; } //QString artist = obj_artist["#text"].toString(); //QString album = obj_album["#text"].toString(); - QString song = obj_song[QLatin1String("#text")].toString(); - bool ignoredmessage = obj_ignoredmessage[QLatin1String("code")].toVariant().toBool(); - QString ignoredmessage_text = obj_ignoredmessage[QLatin1String("#text")].toString(); + QString song = obj_song["#text"_L1].toString(); + bool ignoredmessage = obj_ignoredmessage["code"_L1].toVariant().toBool(); + QString ignoredmessage_text = obj_ignoredmessage["#text"_L1].toString(); if (ignoredmessage) { Error(QStringLiteral("Scrobble for \"%1\" ignored: %2").arg(song, ignoredmessage_text)); @@ -730,7 +732,7 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb return; } - if (!json_obj.contains(QLatin1String("scrobbles"))) { + if (!json_obj.contains("scrobbles"_L1)) { Error(QStringLiteral("Json reply from server is missing scrobbles."), json_obj); cache_item->sent = false; return; @@ -738,7 +740,7 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb cache_->Remove(cache_item); - QJsonValue value_scrobbles = json_obj[QLatin1String("scrobbles")]; + QJsonValue value_scrobbles = json_obj["scrobbles"_L1]; if (!value_scrobbles.isObject()) { Error(QStringLiteral("Json scrobbles is not an object."), json_obj); return; @@ -748,12 +750,12 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb Error(QStringLiteral("Json scrobbles object is empty."), value_scrobbles); return; } - if (!json_obj.contains(QLatin1String("@attr")) || !json_obj.contains(QLatin1String("scrobble"))) { + if (!json_obj.contains("@attr"_L1) || !json_obj.contains("scrobble"_L1)) { Error(QStringLiteral("Json scrobbles object is missing values."), json_obj); return; } - QJsonValue value_attr = json_obj[QLatin1String("@attr")]; + QJsonValue value_attr = json_obj["@attr"_L1]; if (!value_attr.isObject()) { Error(QStringLiteral("Json scrobbles attr is not an object."), value_attr); return; @@ -764,7 +766,7 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb return; } - QJsonValue value_scrobble = json_obj[QLatin1String("scrobble")]; + QJsonValue value_scrobble = json_obj["scrobble"_L1]; if (!value_scrobble.isObject()) { Error(QStringLiteral("Json scrobbles scrobble is not an object."), value_scrobble); return; @@ -775,19 +777,19 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb return; } - if (!obj_attr.contains(QLatin1String("accepted")) || !obj_attr.contains(QLatin1String("ignored"))) { + if (!obj_attr.contains("accepted"_L1) || !obj_attr.contains("ignored"_L1)) { Error(QStringLiteral("Json scrobbles attr is missing values."), obj_attr); return; } - if (!json_obj_scrobble.contains(QLatin1String("artist")) || !json_obj_scrobble.contains(QLatin1String("album")) || !json_obj_scrobble.contains(QLatin1String("albumArtist")) || !json_obj_scrobble.contains(QLatin1String("track")) || !json_obj_scrobble.contains(QLatin1String("timestamp"))) { + if (!json_obj_scrobble.contains("artist"_L1) || !json_obj_scrobble.contains("album"_L1) || !json_obj_scrobble.contains("albumArtist"_L1) || !json_obj_scrobble.contains("track"_L1) || !json_obj_scrobble.contains("timestamp"_L1)) { Error(QStringLiteral("Json scrobbles scrobble is missing values."), json_obj_scrobble); return; } - QJsonValue json_value_artist = json_obj_scrobble[QLatin1String("artist")]; - QJsonValue json_value_album = json_obj_scrobble[QLatin1String("album")]; - QJsonValue json_value_song = json_obj_scrobble[QLatin1String("track")]; + QJsonValue json_value_artist = json_obj_scrobble["artist"_L1]; + QJsonValue json_value_album = json_obj_scrobble["album"_L1]; + QJsonValue json_value_song = json_obj_scrobble["track"_L1]; if (!json_value_artist.isObject() || !json_value_album.isObject() || !json_value_song.isObject()) { Error(QStringLiteral("Json scrobbles scrobble values are not objects."), json_obj_scrobble); @@ -803,16 +805,16 @@ void ScrobblingAPI20::SingleScrobbleRequestFinished(QNetworkReply *reply, Scrobb return; } - if (!json_obj_artist.contains(QLatin1String("#text")) || !json_obj_album.contains(QLatin1String("#text")) || !json_obj_song.contains(QLatin1String("#text"))) { + if (!json_obj_artist.contains("#text"_L1) || !json_obj_album.contains("#text"_L1) || !json_obj_song.contains("#text"_L1)) { Error(QStringLiteral("Json scrobbles scrobble values objects are missing #text."), json_obj_artist); return; } //QString artist = json_obj_artist["#text"].toString(); //QString album = json_obj_album["#text"].toString(); - QString song = json_obj_song[QLatin1String("#text")].toString(); + QString song = json_obj_song["#text"_L1].toString(); - int accepted = obj_attr[QLatin1String("accepted")].toVariant().toInt(); + int accepted = obj_attr["accepted"_L1].toVariant().toInt(); if (accepted == 1) { qLog(Debug) << name_ << "Scrobble for" << song << "accepted"; } @@ -862,8 +864,8 @@ void ScrobblingAPI20::LoveRequestFinished(QNetworkReply *reply) { return; } - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue json_value = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue json_value = json_obj["error"_L1]; if (!json_value.isObject()) { Error(QStringLiteral("Error is not on object.")); return; @@ -873,21 +875,21 @@ void ScrobblingAPI20::LoveRequestFinished(QNetworkReply *reply) { Error(QStringLiteral("Received empty json error object."), json_obj); return; } - if (json_obj_error.contains(QLatin1String("code")) && json_obj_error.contains(QLatin1String("#text"))) { - int code = json_obj_error[QLatin1String("code")].toInt(); - QString text = json_obj_error[QLatin1String("#text")].toString(); + if (json_obj_error.contains("code"_L1) && json_obj_error.contains("#text"_L1)) { + int code = json_obj_error["code"_L1].toInt(); + QString text = json_obj_error["#text"_L1].toString(); QString error_reason = QStringLiteral("%1 (%2)").arg(text).arg(code); Error(error_reason); return; } } - if (json_obj.contains(QLatin1String("lfm"))) { - QJsonValue json_value = json_obj[QLatin1String("lfm")]; + if (json_obj.contains("lfm"_L1)) { + QJsonValue json_value = json_obj["lfm"_L1]; if (json_value.isObject()) { QJsonObject json_obj_lfm = json_value.toObject(); - if (json_obj_lfm.contains(QLatin1String("status"))) { - QString status = json_obj_lfm[QLatin1String("status")].toString(); + if (json_obj_lfm.contains("status"_L1)) { + QString status = json_obj_lfm["status"_L1].toString(); qLog(Debug) << name_ << "Received love status:" << status; return; } diff --git a/src/settings/behavioursettingspage.cpp b/src/settings/behavioursettingspage.cpp index 0f6cddc9d..8114f601f 100644 --- a/src/settings/behavioursettingspage.cpp +++ b/src/settings/behavioursettingspage.cpp @@ -46,6 +46,8 @@ #include "behavioursettingspage.h" #include "ui_behavioursettingspage.h" +using namespace Qt::StringLiterals; + class SettingsDialog; const char *BehaviourSettingsPage::kSettingsGroup = "Behaviour"; @@ -95,9 +97,9 @@ BehaviourSettingsPage::BehaviourSettingsPage(SettingsDialog *dialog, QWidget *pa QString code = re_match.captured(1); QString lookup_code = QString(code) - .replace(QLatin1String("@latin"), QLatin1String("_Latn")) - .replace(QLatin1String("_CN"), QLatin1String("_Hans_CN")) - .replace(QLatin1String("_TW"), QLatin1String("_Hant_TW")); + .replace("@latin"_L1, "_Latn"_L1) + .replace("_CN"_L1, "_Hans_CN"_L1) + .replace("_TW"_L1, "_Hant_TW"_L1); QString language_name = QLocale::languageToString(QLocale(lookup_code).language()); QString native_name = QLocale(lookup_code).nativeLanguageName(); diff --git a/src/settings/collectionsettingspage.cpp b/src/settings/collectionsettingspage.cpp index 64677e7dc..11080ad0e 100644 --- a/src/settings/collectionsettingspage.cpp +++ b/src/settings/collectionsettingspage.cpp @@ -158,7 +158,7 @@ void CollectionSettingsPage::Load() { ui_->expire_unavailable_songs_days->setValue(s.value("expire_unavailable_songs", 60).toInt()); QStringList filters = s.value("cover_art_patterns", QStringList() << QStringLiteral("front") << QStringLiteral("cover")).toStringList(); - ui_->cover_art_patterns->setText(filters.join(QLatin1Char(','))); + ui_->cover_art_patterns->setText(filters.join(u',')); ui_->spinbox_cache_size->setValue(s.value(kSettingsCacheSize, kSettingsCacheSizeDefault).toInt()); ui_->combobox_cache_size->setCurrentIndex(ui_->combobox_cache_size->findData(s.value(kSettingsCacheSizeUnit, static_cast(CacheSizeUnit::MB)).toInt())); @@ -203,7 +203,7 @@ void CollectionSettingsPage::Save() { QString filter_text = ui_->cover_art_patterns->text(); - const QStringList filters = filter_text.split(QLatin1Char(','), Qt::SkipEmptyParts); + const QStringList filters = filter_text.split(u',', Qt::SkipEmptyParts); s.setValue("cover_art_patterns", filters); diff --git a/src/settings/coverssettingspage.cpp b/src/settings/coverssettingspage.cpp index fd40bfa5c..de520abc1 100644 --- a/src/settings/coverssettingspage.cpp +++ b/src/settings/coverssettingspage.cpp @@ -46,6 +46,8 @@ #include "covermanager/coverprovider.h" #include "widgets/loginstatewidget.h" +using namespace Qt::StringLiterals; + const char *CoversSettingsPage::kSettingsGroup = "Covers"; const char *CoversSettingsPage::kProviders = "providers"; const char *CoversSettingsPage::kTypes = "types"; @@ -222,15 +224,15 @@ void CoversSettingsPage::ProvidersCurrentItemChanged(QListWidgetItem *item_curre CoverProvider *provider = dialog()->app()->cover_providers()->ProviderByName(item_current->text()); if (provider) { if (provider->AuthenticationRequired()) { - if (provider->name() == QLatin1String("Tidal") && !provider->IsAuthenticated()) { + if (provider->name() == "Tidal"_L1 && !provider->IsAuthenticated()) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Tidal settings to authenticate.")); } - else if (provider->name() == QLatin1String("Spotify") && !provider->IsAuthenticated()) { + else if (provider->name() == "Spotify"_L1 && !provider->IsAuthenticated()) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Spotify settings to authenticate.")); } - else if (provider->name() == QLatin1String("Qobuz") && !provider->IsAuthenticated()) { + else if (provider->name() == "Qobuz"_L1 && !provider->IsAuthenticated()) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Qobuz settings to authenticate.")); } @@ -339,15 +341,15 @@ void CoversSettingsPage::LogoutClicked() { if (!provider) return; provider->Deauthenticate(); - if (provider->name() == QLatin1String("Tidal")) { + if (provider->name() == "Tidal"_L1) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Tidal settings to authenticate.")); } - else if (provider->name() == QLatin1String("Spotify")) { + else if (provider->name() == "Spotify"_L1) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Spotify settings to authenticate.")); } - else if (provider->name() == QLatin1String("Qobuz")) { + else if (provider->name() == "Qobuz"_L1) { DisableAuthentication(); ui_->label_auth_info->setText(tr("Use Qobuz settings to authenticate.")); } @@ -379,7 +381,7 @@ void CoversSettingsPage::AuthenticationFailure(const QStringList &errors) { if (!isVisible() || !ui_->providers->currentItem() || ui_->providers->currentItem()->text() != provider->name()) return; - QMessageBox::warning(this, tr("Authentication failed"), errors.join(QLatin1Char('\n'))); + QMessageBox::warning(this, tr("Authentication failed"), errors.join(u'\n')); ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); @@ -429,16 +431,16 @@ void CoversSettingsPage::AddAlbumCoverArtType(const QString &name, const QString QString CoversSettingsPage::AlbumCoverArtTypeDescription(const QString &type) const { - if (type == QLatin1String("art_unset")) { + if (type == "art_unset"_L1) { return tr("Manually unset (%1)").arg(type); } - if (type == QLatin1String("art_manual")) { + if (type == "art_manual"_L1) { return tr("Set through album cover search (%1)").arg(type); } - if (type == QLatin1String("art_automatic")) { + if (type == "art_automatic"_L1) { return tr("Automatically picked up from album directory (%1)").arg(type); } - if (type == QLatin1String("art_embedded")) { + if (type == "art_embedded"_L1) { return tr("Embedded album cover art (%1)").arg(type); } diff --git a/src/settings/globalshortcutssettingspage.cpp b/src/settings/globalshortcutssettingspage.cpp index d36a2c5f6..1a7f5ea83 100644 --- a/src/settings/globalshortcutssettingspage.cpp +++ b/src/settings/globalshortcutssettingspage.cpp @@ -49,6 +49,8 @@ #include "globalshortcutssettingspage.h" #include "ui_globalshortcutssettingspage.h" +using namespace Qt::StringLiterals; + const char *GlobalShortcutsSettingsPage::kSettingsGroup = "GlobalShortcuts"; GlobalShortcutsSettingsPage::GlobalShortcutsSettingsPage(SettingsDialog *dialog, QWidget *parent) @@ -260,7 +262,7 @@ void GlobalShortcutsSettingsPage::OpenGnomeKeybindingProperties() { if (!QProcess::startDetached(QStringLiteral("gnome-keybinding-properties"), QStringList())) { if (!QProcess::startDetached(QStringLiteral("gnome-control-center"), QStringList() << QStringLiteral("keyboard"))) { - QMessageBox::warning(this, QStringLiteral("Error"), tr("The \"%1\" command could not be started.").arg(QLatin1String("gnome-keybinding-properties"))); + QMessageBox::warning(this, QStringLiteral("Error"), tr("The \"%1\" command could not be started.").arg("gnome-keybinding-properties"_L1)); } } @@ -270,7 +272,7 @@ void GlobalShortcutsSettingsPage::OpenMateKeybindingProperties() { if (!QProcess::startDetached(QStringLiteral("mate-keybinding-properties"), QStringList())) { if (!QProcess::startDetached(QStringLiteral("mate-control-center"), QStringList() << QStringLiteral("keyboard"))) { - QMessageBox::warning(this, QStringLiteral("Error"), tr("The \"%1\" command could not be started.").arg(QLatin1String("mate-keybinding-properties"))); + QMessageBox::warning(this, QStringLiteral("Error"), tr("The \"%1\" command could not be started.").arg("mate-keybinding-properties"_L1)); } } @@ -347,18 +349,18 @@ void GlobalShortcutsSettingsPage::ChangeClicked() { void GlobalShortcutsSettingsPage::X11Warning() { QString de = de_.toLower(); - if (de == QLatin1String("kde") || de == QLatin1String("gnome") || de == QLatin1String("x-cinnamon") || de == QLatin1String("mate")) { + if (de == "kde"_L1 || de == "gnome"_L1 || de == "x-cinnamon"_L1 || de == "mate"_L1) { QString text(tr("Using X11 shortcuts on %1 is not recommended and can cause keyboard to become unresponsive!").arg(de_)); - if (de == QLatin1String("kde")) { + if (de == "kde"_L1) { text += tr(" Shortcuts on %1 are usually used through MPRIS and KGlobalAccel.").arg(de_); } - else if (de == QLatin1String("gnome")) { + else if (de == "gnome"_L1) { text += tr(" Shortcuts on %1 are usually used through Gnome Settings Daemon and should be configured in gnome-settings-daemon instead.").arg(de_); } - else if (de == QLatin1String("x-cinnamon")) { + else if (de == "x-cinnamon"_L1) { text += tr(" Shortcuts on %1 are usually used through Gnome Settings Daemon and should be configured in cinnamon-settings-daemon instead.").arg(de_); } - else if (de == QLatin1String("mate")) { + else if (de == "mate"_L1) { text += tr(" Shortcuts on %1 are usually used through MATE Settings Daemon and should be configured there instead.").arg(de_); } ui_->label_warn_text->setText(text); diff --git a/src/settings/lyricssettingspage.cpp b/src/settings/lyricssettingspage.cpp index 4dbbe342a..4bbcc3f5c 100644 --- a/src/settings/lyricssettingspage.cpp +++ b/src/settings/lyricssettingspage.cpp @@ -253,7 +253,7 @@ void LyricsSettingsPage::AuthenticationFailure(const QStringList &errors) { if (!isVisible() || !ui_->providers->currentItem() || ui_->providers->currentItem()->text() != provider->name()) return; - QMessageBox::warning(this, tr("Authentication failed"), errors.join(QLatin1Char('\n'))); + QMessageBox::warning(this, tr("Authentication failed"), errors.join(u'\n')); ui_->login_state->SetLoggedIn(LoginStateWidget::State::LoggedOut); ui_->button_authenticate->setEnabled(true); diff --git a/src/smartplaylists/smartplaylistsearch.cpp b/src/smartplaylists/smartplaylistsearch.cpp index 963428c4d..b18b068c6 100644 --- a/src/smartplaylists/smartplaylistsearch.cpp +++ b/src/smartplaylists/smartplaylistsearch.cpp @@ -28,6 +28,8 @@ #include "smartplaylistsearch.h" +using namespace Qt::StringLiterals; + SmartPlaylistSearch::SmartPlaylistSearch() : search_type_(SearchType::And), sort_type_(SortType::Random), sort_field_(SmartPlaylistSearchTerm::Field::Title), limit_(-1), first_item_(0) { Reset(); } SmartPlaylistSearch::SmartPlaylistSearch(const SearchType type, const TermList &terms, const SortType sort_type, const SmartPlaylistSearchTerm::Field sort_field, const int limit) @@ -62,7 +64,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { } if (!terms_.isEmpty() && search_type_ != SearchType::All) { - QString boolean_op = search_type_ == SearchType::And ? QLatin1String(" AND ") : QLatin1String(" OR "); + QString boolean_op = search_type_ == SearchType::And ? " AND "_L1 : " OR "_L1; where_clauses << QStringLiteral("(") + term_where_clauses.join(boolean_op) + QStringLiteral(")"); } @@ -70,7 +72,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { if (!id_not_in_.isEmpty()) { QString numbers; for (int id : id_not_in_) { - numbers += (numbers.isEmpty() ? QLatin1String("") : QLatin1String(",")) + QString::number(id); + numbers += (numbers.isEmpty() ? ""_L1 : ","_L1) + QString::number(id); } where_clauses << QStringLiteral("(ROWID NOT IN (") + numbers + QStringLiteral("))"); } @@ -80,15 +82,15 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { where_clauses << QStringLiteral("unavailable = 0"); if (!where_clauses.isEmpty()) { - sql += QLatin1String(" WHERE ") + where_clauses.join(QLatin1String(" AND ")); + sql += " WHERE "_L1 + where_clauses.join(" AND "_L1); } // Add sort by if (sort_type_ == SortType::Random) { - sql += QLatin1String(" ORDER BY random()"); + sql += " ORDER BY random()"_L1; } else { - sql += QLatin1String(" ORDER BY ") + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == SortType::FieldAsc ? QLatin1String(" ASC") : QLatin1String(" DESC")); + sql += " ORDER BY "_L1 + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == SortType::FieldAsc ? " ASC"_L1 : " DESC"_L1); } // Add limit @@ -96,7 +98,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const { sql += QStringLiteral(" LIMIT %1 OFFSET %2").arg(limit_).arg(first_item_); } else if (limit_ != -1) { - sql += QLatin1String(" LIMIT ") + QString::number(limit_); + sql += " LIMIT "_L1 + QString::number(limit_); } //qLog(Debug) << sql; diff --git a/src/smartplaylists/smartplaylistsearchterm.cpp b/src/smartplaylists/smartplaylistsearchterm.cpp index 3d2bed11d..789127a71 100644 --- a/src/smartplaylists/smartplaylistsearchterm.cpp +++ b/src/smartplaylists/smartplaylistsearchterm.cpp @@ -29,6 +29,8 @@ #include "smartplaylistsearchterm.h" #include "playlist/playlist.h" +using namespace Qt::StringLiterals; + SmartPlaylistSearchTerm::SmartPlaylistSearchTerm() : field_(Field::Title), operator_(Operator::Equals), datetype_(DateType::Hour) {} SmartPlaylistSearchTerm::SmartPlaylistSearchTerm(Field field, Operator op, const QVariant &value) @@ -39,7 +41,7 @@ QString SmartPlaylistSearchTerm::ToSql() const { QString col = FieldColumnName(field_); QString date = DateName(datetype_, true); QString value = value_.toString(); - value.replace(QLatin1Char('\''), QLatin1String("''")); + value.replace(u'\'', "''"_L1); if (field_ == Field::Filetype) { Song::FileType filetype = Song::FiletypeByExtension(value); @@ -62,12 +64,12 @@ QString SmartPlaylistSearchTerm::ToSql() const { if (TypeOf(field_) == Type::Date) { if (special_date_query) { // We have a numeric date, consider also the time for more precision - col = QLatin1String("DATETIME(") + col + QLatin1String(", 'unixepoch', 'localtime')"); + col = "DATETIME("_L1 + col + ", 'unixepoch', 'localtime')"_L1; second_value = second_value_.toString(); - second_value.replace(QLatin1Char('\''), QLatin1String("''")); - if (date == QLatin1String("weeks")) { + second_value.replace(u'\'', "''"_L1); + if (date == "weeks"_L1) { // Sqlite doesn't know weeks, transform them to days - date = QLatin1String("days"); + date = "days"_L1; value = QString::number(value_.toInt() * 7); second_value = QString::number(second_value_.toInt() * 7); } @@ -76,13 +78,13 @@ QString SmartPlaylistSearchTerm::ToSql() const { // We have the exact date // The calendar widget specifies no time so ditch the possible time part // from integers representing the dates. - col = QLatin1String("DATE(") + col + QLatin1String(", 'unixepoch', 'localtime')"); - value = QLatin1String("DATE(") + value + QLatin1String(", 'unixepoch', 'localtime')"); + col = "DATE("_L1 + col + ", 'unixepoch', 'localtime')"_L1; + value = "DATE("_L1 + value + ", 'unixepoch', 'localtime')"_L1; } } else if (TypeOf(field_) == Type::Time) { // Convert seconds to nanoseconds - value = QLatin1String("CAST (") + value + QLatin1String(" *1000000000 AS INTEGER)"); + value = "CAST ("_L1 + value + " *1000000000 AS INTEGER)"_L1; } // File paths need some extra processing since they are stored as encoded urls in the database. @@ -95,61 +97,61 @@ QString SmartPlaylistSearchTerm::ToSql() const { } } else if (TypeOf(field_) == Type::Rating) { - col = QLatin1String("CAST ((replace(") + col + QLatin1String(", -1, 0) + 0.05) * 10 AS INTEGER)"); - value = QLatin1String("CAST ((") + value + QLatin1String(" + 0.05) * 10 AS INTEGER)"); + col = "CAST ((replace("_L1 + col + ", -1, 0) + 0.05) * 10 AS INTEGER)"_L1; + value = "CAST (("_L1 + value + " + 0.05) * 10 AS INTEGER)"_L1; } switch (operator_) { case Operator::Contains: - return col + QLatin1String(" LIKE '%") + value + QLatin1String("%'"); + return col + " LIKE '%"_L1 + value + "%'"_L1; case Operator::NotContains: - return col + QLatin1String(" NOT LIKE '%") + value + QLatin1String("%'"); + return col + " NOT LIKE '%"_L1 + value + "%'"_L1; case Operator::StartsWith: - return col + QLatin1String(" LIKE '") + value + QLatin1String("%'"); + return col + " LIKE '"_L1 + value + "%'"_L1; case Operator::EndsWith: - return col + QLatin1String(" LIKE '%") + value + QLatin1Char('\''); + return col + " LIKE '%"_L1 + value + u'\''; case Operator::Equals: if (TypeOf(field_) == Type::Text) { - return col + QLatin1String(" LIKE '") + value + QLatin1Char('\''); + return col + " LIKE '"_L1 + value + u'\''; } else if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { - return col + QLatin1String(" = ") + value; + return col + " = "_L1 + value; } else { - return col + QLatin1String(" = '") + value + QLatin1Char('\''); + return col + " = '"_L1 + value + u'\''; } case Operator::GreaterThan: if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { - return col + QLatin1String(" > ") + value; + return col + " > "_L1 + value; } else { - return col + QLatin1String(" > '") + value + QLatin1Char('\''); + return col + " > '"_L1 + value + u'\''; } case Operator::LessThan: if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) { - return col + QLatin1String(" < ") + value; + return col + " < "_L1 + value; } else { - return col + QLatin1String(" < '") + value + QLatin1Char('\''); + return col + " < '"_L1 + value + u'\''; } case Operator::NumericDate: - return col + QLatin1String(" > ") + QLatin1String("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QLatin1String("', 'localtime')"); + return col + " > "_L1 + "DATETIME('now', '-"_L1 + value + u' ' + date + "', 'localtime')"_L1; case Operator::NumericDateNot: - return col + QLatin1String(" < ") + QLatin1String("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QLatin1String("', 'localtime')"); + return col + " < "_L1 + "DATETIME('now', '-"_L1 + value + u' ' + date + "', 'localtime')"_L1; case Operator::RelativeDate: // Consider the time range before the first date but after the second one - return QLatin1String("(") + col + QLatin1String(" < ") + QLatin1String("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QLatin1String("', 'localtime') AND ") + col + QLatin1String(" > ") + QLatin1String("DATETIME('now', '-") + second_value + QLatin1Char(' ') + date + QLatin1String("', 'localtime'))"); + return "("_L1 + col + " < "_L1 + "DATETIME('now', '-"_L1 + value + u' ' + date + "', 'localtime') AND "_L1 + col + " > "_L1 + "DATETIME('now', '-"_L1 + second_value + u' ' + date + "', 'localtime'))"_L1; case Operator::NotEquals: if (TypeOf(field_) == Type::Text) { - return col + QLatin1String(" <> '") + value + QLatin1Char('\''); + return col + " <> '"_L1 + value + u'\''; } else { - return col + QLatin1String(" <> ") + value; + return col + " <> "_L1 + value; } case Operator::Empty: - return col + QLatin1String(" = ''"); + return col + " = ''"_L1; case Operator::NotEmpty: - return col + QLatin1String(" <> ''"); + return col + " <> ''"_L1; } return QString(); diff --git a/src/smartplaylists/smartplaylistsearchtermwidget.cpp b/src/smartplaylists/smartplaylistsearchtermwidget.cpp index 47c498c54..7ff7e8d9c 100644 --- a/src/smartplaylists/smartplaylistsearchtermwidget.cpp +++ b/src/smartplaylists/smartplaylistsearchtermwidget.cpp @@ -41,6 +41,8 @@ #include "smartplaylistsearchtermwidgetoverlay.h" #include "ui_smartplaylistsearchtermwidget.h" +using namespace Qt::StringLiterals; + SmartPlaylistSearchTermWidget::SmartPlaylistSearchTermWidget(SharedPtr collection_backend, QWidget *parent) : QWidget(parent), ui_(new Ui_SmartPlaylistSearchTermWidget), @@ -97,10 +99,10 @@ SmartPlaylistSearchTermWidget::SmartPlaylistSearchTermWidget(SharedPtrvalue_stack->currentWidget() == ui_->page_empty) { - ui_->value_text->setText(QLatin1String("")); + ui_->value_text->setText(""_L1); } else { ui_->value_text->setText(term.value_.toString()); @@ -350,7 +352,7 @@ SmartPlaylistSearchTerm SmartPlaylistSearchTermWidget::Term() const { ret.value_ = ui_->value_text->text(); } else if (value_page == ui_->page_empty) { - ret.value_ = QLatin1String(""); + ret.value_ = ""_L1; } else if (value_page == ui_->page_number) { ret.value_ = ui_->value_number->value(); diff --git a/src/spotify/spotifybaserequest.cpp b/src/spotify/spotifybaserequest.cpp index b28861861..a3095e833 100644 --- a/src/spotify/spotifybaserequest.cpp +++ b/src/spotify/spotifybaserequest.cpp @@ -39,6 +39,8 @@ #include "spotifyservice.h" #include "spotifybaserequest.h" +using namespace Qt::StringLiterals; + SpotifyBaseRequest::SpotifyBaseRequest(SpotifyService *service, NetworkAccessManager *network, QObject *parent) : QObject(parent), service_(service), @@ -96,11 +98,11 @@ QByteArray SpotifyBaseRequest::GetReplyData(QNetworkReply *reply) { int status = 0; if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error")) && json_obj[QLatin1String("error")].isObject()) { - QJsonObject obj_error = json_obj[QLatin1String("error")].toObject(); - if (!obj_error.isEmpty() && obj_error.contains(QLatin1String("status")) && obj_error.contains(QLatin1String("message"))) { - status = obj_error[QLatin1String("status")].toInt(); - QString user_message = obj_error[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("error"_L1) && json_obj["error"_L1].isObject()) { + QJsonObject obj_error = json_obj["error"_L1].toObject(); + if (!obj_error.isEmpty() && obj_error.contains("status"_L1) && obj_error.contains("message"_L1)) { + status = obj_error["status"_L1].toInt(); + QString user_message = obj_error["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(user_message).arg(status); } } @@ -162,11 +164,11 @@ QJsonValue SpotifyBaseRequest::ExtractItems(const QByteArray &data) { QJsonValue SpotifyBaseRequest::ExtractItems(const QJsonObject &json_obj) { - if (!json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("items"_L1)) { Error(QStringLiteral("Json reply is missing items."), json_obj); return QJsonArray(); } - QJsonValue json_items = json_obj[QLatin1String("items")]; + QJsonValue json_items = json_obj["items"_L1]; return json_items; } @@ -175,7 +177,7 @@ QString SpotifyBaseRequest::ErrorsToHTML(const QStringList &errors) { QString error_html; for (const QString &error : errors) { - error_html += error + QLatin1String("
"); + error_html += error + "
"_L1; } return error_html; diff --git a/src/spotify/spotifyfavoriterequest.cpp b/src/spotify/spotifyfavoriterequest.cpp index e4e6834b6..db34cf1ed 100644 --- a/src/spotify/spotifyfavoriterequest.cpp +++ b/src/spotify/spotifyfavoriterequest.cpp @@ -119,7 +119,7 @@ void SpotifyFavoriteRequest::AddFavorites(const FavoriteType type, const SongLis if (list_ids.isEmpty() || array_ids.isEmpty()) return; QByteArray json_data = QJsonDocument(array_ids).toJson(); - QString ids_list = list_ids.join(QLatin1Char(',')); + QString ids_list = list_ids.join(u','); AddFavoritesRequest(type, ids_list, json_data, songs); @@ -231,7 +231,7 @@ void SpotifyFavoriteRequest::RemoveFavorites(const FavoriteType type, const Song if (list_ids.isEmpty() || array_ids.isEmpty()) return; QByteArray json_data = QJsonDocument(array_ids).toJson(); - QString ids_list = list_ids.join(QLatin1Char(',')); + QString ids_list = list_ids.join(u','); RemoveFavoritesRequest(type, ids_list, json_data, songs); diff --git a/src/spotify/spotifyrequest.cpp b/src/spotify/spotifyrequest.cpp index 119b3fde8..829a390b5 100644 --- a/src/spotify/spotifyrequest.cpp +++ b/src/spotify/spotifyrequest.cpp @@ -45,6 +45,8 @@ #include "spotifybaserequest.h" #include "spotifyrequest.h" +using namespace Qt::StringLiterals; + namespace { const int kMaxConcurrentArtistsRequests = 1; const int kMaxConcurrentAlbumsRequests = 1; @@ -437,26 +439,26 @@ void SpotifyRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_ return; } - if (!json_obj.contains(QLatin1String("artists")) || !json_obj[QLatin1String("artists")].isObject()) { + if (!json_obj.contains("artists"_L1) || !json_obj["artists"_L1].isObject()) { Error(QStringLiteral("Json object missing values."), json_obj); ArtistsFinishCheck(); return; } - QJsonObject obj_artists = json_obj[QLatin1String("artists")].toObject(); + QJsonObject obj_artists = json_obj["artists"_L1].toObject(); - if (!obj_artists.contains(QLatin1String("limit")) || - !obj_artists.contains(QLatin1String("total")) || - !obj_artists.contains(QLatin1String("items"))) { + if (!obj_artists.contains("limit"_L1) || + !obj_artists.contains("total"_L1) || + !obj_artists.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), obj_artists); ArtistsFinishCheck(); return; } int offset = 0; - if (obj_artists.contains(QLatin1String("offset"))) { - offset = obj_artists[QLatin1String("offset")].toInt(); + if (obj_artists.contains("offset"_L1)) { + offset = obj_artists["offset"_L1].toInt(); } - int artists_total = obj_artists[QLatin1String("total")].toInt(); + int artists_total = obj_artists["total"_L1].toInt(); if (offset_requested == 0) { artists_total_ = artists_total; @@ -501,8 +503,8 @@ void SpotifyRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_ } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue json_item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue json_item = obj_item["item"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item); continue; @@ -510,13 +512,13 @@ void SpotifyRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_ obj_item = json_item.toObject(); } - if (!obj_item.contains(QLatin1String("id")) || !obj_item.contains(QLatin1String("name"))) { + if (!obj_item.contains("id"_L1) || !obj_item.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item missing id or album."), obj_item); continue; } - QString artist_id = obj_item[QLatin1String("id")].toString(); - QString artist = obj_item[QLatin1String("name")].toString(); + QString artist_id = obj_item["id"_L1].toString(); + QString artist = obj_item["name"_L1].toString(); if (artist_albums_requests_pending_.contains(artist_id)) continue; @@ -637,25 +639,25 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a return; } - if (json_obj.contains(QLatin1String("albums")) && json_obj[QLatin1String("albums")].isObject()) { - json_obj = json_obj[QLatin1String("albums")].toObject(); + if (json_obj.contains("albums"_L1) && json_obj["albums"_L1].isObject()) { + json_obj = json_obj["albums"_L1].toObject(); } - if (json_obj.contains(QLatin1String("tracks")) && json_obj[QLatin1String("tracks")].isObject()) { - json_obj = json_obj[QLatin1String("tracks")].toObject(); + if (json_obj.contains("tracks"_L1) && json_obj["tracks"_L1].isObject()) { + json_obj = json_obj["tracks"_L1].toObject(); } - if (!json_obj.contains(QLatin1String("limit")) || - !json_obj.contains(QLatin1String("offset")) || - !json_obj.contains(QLatin1String("total")) || - !json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("limit"_L1) || + !json_obj.contains("offset"_L1) || + !json_obj.contains("total"_L1) || + !json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), json_obj); AlbumsFinishCheck(artist_artist); return; } - int offset = json_obj[QLatin1String("offset")].toInt(); - int albums_total = json_obj[QLatin1String("total")].toInt(); + int offset = json_obj["offset"_L1].toInt(); + int albums_total = json_obj["total"_L1].toInt(); if (type_ == Type::FavouriteAlbums || type_ == Type::SearchAlbums) { albums_total_ = albums_total; @@ -692,8 +694,8 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue json_item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue json_item = obj_item["item"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item); continue; @@ -701,8 +703,8 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a obj_item = json_item.toObject(); } - if (obj_item.contains(QLatin1String("album"))) { - QJsonValue json_item = obj_item[QLatin1String("album")]; + if (obj_item.contains("album"_L1)) { + QJsonValue json_item = obj_item["album"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, album in array is not a object."), json_item); continue; @@ -713,33 +715,33 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a Artist artist; Album album; - if (!obj_item.contains(QLatin1String("id"))) { + if (!obj_item.contains("id"_L1)) { Error(QStringLiteral("Invalid Json reply, item is missing ID."), obj_item); continue; } - if (!obj_item.contains(QLatin1String("name"))) { + if (!obj_item.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item is missing name."), obj_item); continue; } - if (!obj_item.contains(QLatin1String("images"))) { + if (!obj_item.contains("images"_L1)) { Error(QStringLiteral("Invalid Json reply, item is missing images."), obj_item); continue; } - album.album_id = obj_item[QLatin1String("id")].toString(); - album.album = obj_item[QLatin1String("name")].toString(); + album.album_id = obj_item["id"_L1].toString(); + album.album = obj_item["name"_L1].toString(); - if (obj_item.contains(QLatin1String("artists")) && obj_item[QLatin1String("artists")].isArray()) { - const QJsonArray array_artists = obj_item[QLatin1String("artists")].toArray(); + if (obj_item.contains("artists"_L1) && obj_item["artists"_L1].isArray()) { + const QJsonArray array_artists = obj_item["artists"_L1].toArray(); bool artist_matches = false; for (const QJsonValue &value : array_artists) { if (!value.isObject()) { continue; } QJsonObject obj_artist = value.toObject(); - if (obj_artist.isEmpty() || !obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) continue; + if (obj_artist.isEmpty() || !obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) continue; if (artist.artist_id.isEmpty() || artist.artist_id == artist_artist.artist_id) { - artist.artist_id = obj_artist[QLatin1String("id")].toString(); - artist.artist = obj_artist[QLatin1String("name")].toString(); + artist.artist_id = obj_artist["id"_L1].toString(); + artist.artist = obj_artist["name"_L1].toString(); if (artist.artist_id == artist_artist.artist_id) { artist_matches = true; break; @@ -756,27 +758,27 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a artist = artist_artist; } - if (obj_item.contains(QLatin1String("images")) && obj_item[QLatin1String("images")].isArray()) { - const QJsonArray array_images = obj_item[QLatin1String("images")].toArray(); + if (obj_item.contains("images"_L1) && obj_item["images"_L1].isArray()) { + const QJsonArray array_images = obj_item["images"_L1].toArray(); for (const QJsonValue &value : array_images) { if (!value.isObject()) { continue; } QJsonObject obj_image = value.toObject(); - if (obj_image.isEmpty() || !obj_image.contains(QLatin1String("url")) || !obj_image.contains(QLatin1String("width")) || !obj_image.contains(QLatin1String("height"))) continue; - int width = obj_image[QLatin1String("width")].toInt(); - int height = obj_image[QLatin1String("height")].toInt(); + if (obj_image.isEmpty() || !obj_image.contains("url"_L1) || !obj_image.contains("width"_L1) || !obj_image.contains("height"_L1)) continue; + int width = obj_image["width"_L1].toInt(); + int height = obj_image["height"_L1].toInt(); if (width <= 300 || height <= 300) { continue; } - album.cover_url = QUrl(obj_image[QLatin1String("url")].toString()); + album.cover_url = QUrl(obj_image["url"_L1].toString()); } } - if (obj_item.contains(QLatin1String("tracks")) && obj_item[QLatin1String("tracks")].isObject()) { - QJsonObject obj_tracks = obj_item[QLatin1String("tracks")].toObject(); - if (obj_tracks.contains(QLatin1String("items")) && obj_tracks[QLatin1String("items")].isArray()) { - const QJsonArray array_tracks = obj_tracks[QLatin1String("items")].toArray(); + if (obj_item.contains("tracks"_L1) && obj_item["tracks"_L1].isObject()) { + QJsonObject obj_tracks = obj_item["tracks"_L1].toObject(); + if (obj_tracks.contains("items"_L1) && obj_tracks["items"_L1].isArray()) { + const QJsonArray array_tracks = obj_tracks["items"_L1].toArray(); bool compilation = false; bool multidisc = false; SongList songs; @@ -785,8 +787,8 @@ void SpotifyRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_a continue; } QJsonObject obj_track = value.toObject(); - if (obj_track.contains(QLatin1String("track")) && obj_track[QLatin1String("track")].isObject()) { - obj_track = obj_track[QLatin1String("track")].toObject(); + if (obj_track.contains("track"_L1) && obj_track["track"_L1].isObject()) { + obj_track = obj_track["track"_L1].toObject(); } Song song(Song::Source::Spotify); ParseSong(song, obj_track, artist, album); @@ -950,21 +952,21 @@ void SpotifyRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, c return; } - if (json_obj.contains(QLatin1String("tracks")) && json_obj[QLatin1String("tracks")].isObject()) { - json_obj = json_obj[QLatin1String("tracks")].toObject(); + if (json_obj.contains("tracks"_L1) && json_obj["tracks"_L1].isObject()) { + json_obj = json_obj["tracks"_L1].toObject(); } - if (!json_obj.contains(QLatin1String("limit")) || - !json_obj.contains(QLatin1String("offset")) || - !json_obj.contains(QLatin1String("total")) || - !json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("limit"_L1) || + !json_obj.contains("offset"_L1) || + !json_obj.contains("total"_L1) || + !json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), json_obj); SongsFinishCheck(artist, album, limit_requested, offset_requested, 0, 0); return; } - int offset = json_obj[QLatin1String("offset")].toInt(); - int songs_total = json_obj[QLatin1String("total")].toInt(); + int offset = json_obj["offset"_L1].toInt(); + int songs_total = json_obj["total"_L1].toInt(); if (type_ == Type::FavouriteSongs || type_ == Type::SearchSongs) { songs_total_ = songs_total; @@ -1003,12 +1005,12 @@ void SpotifyRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, c } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item")) && obj_item[QLatin1String("item")].isObject()) { - obj_item = obj_item[QLatin1String("item")].toObject(); + if (obj_item.contains("item"_L1) && obj_item["item"_L1].isObject()) { + obj_item = obj_item["item"_L1].toObject(); } - if (obj_item.contains(QLatin1String("track")) && obj_item[QLatin1String("track")].isObject()) { - obj_item = obj_item[QLatin1String("track")].toObject(); + if (obj_item.contains("track"_L1) && obj_item["track"_L1].isObject()) { + obj_item = obj_item["track"_L1].toObject(); } ++songs_received; @@ -1074,13 +1076,13 @@ void SpotifyRequest::SongsFinishCheck(const Artist &artist, const Album &album, void SpotifyRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Artist &album_artist, const Album &album) { if ( - !json_obj.contains(QLatin1String("type")) || - !json_obj.contains(QLatin1String("id")) || - !json_obj.contains(QLatin1String("name")) || - !json_obj.contains(QLatin1String("uri")) || - !json_obj.contains(QLatin1String("duration_ms")) || - !json_obj.contains(QLatin1String("track_number")) || - !json_obj.contains(QLatin1String("disc_number")) + !json_obj.contains("type"_L1) || + !json_obj.contains("id"_L1) || + !json_obj.contains("name"_L1) || + !json_obj.contains("uri"_L1) || + !json_obj.contains("duration_ms"_L1) || + !json_obj.contains("track_number"_L1) || + !json_obj.contains("disc_number"_L1) ) { Error(QStringLiteral("Invalid Json reply, track is missing one or more values."), json_obj); return; @@ -1088,16 +1090,16 @@ void SpotifyRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Ar QString artist_id; QString artist_title; - if (json_obj.contains(QLatin1String("artists")) && json_obj[QLatin1String("artists")].isArray()) { - const QJsonArray array_artists = json_obj[QLatin1String("artists")].toArray(); + if (json_obj.contains("artists"_L1) && json_obj["artists"_L1].isArray()) { + const QJsonArray array_artists = json_obj["artists"_L1].toArray(); for (const QJsonValue &value_artist : array_artists) { if (!value_artist.isObject()) continue; QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("type")) || !obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("type"_L1) || !obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { continue; } - artist_id = obj_artist[QLatin1String("id")].toString(); - artist_title = obj_artist[QLatin1String("name")].toString(); + artist_id = obj_artist["id"_L1].toString(); + artist_title = obj_artist["name"_L1].toString(); break; } } @@ -1105,25 +1107,25 @@ void SpotifyRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Ar QString album_id; QString album_title; QUrl cover_url; - if (json_obj.contains(QLatin1String("album")) && json_obj[QLatin1String("album")].isObject()) { - QJsonObject obj_album = json_obj[QLatin1String("album")].toObject(); - if (obj_album.contains(QLatin1String("type")) && obj_album.contains(QLatin1String("id")) && obj_album.contains(QLatin1String("name"))) { - album_id = obj_album[QLatin1String("id")].toString(); - album_title = obj_album[QLatin1String("name")].toString(); - if (obj_album.contains(QLatin1String("images")) && obj_album[QLatin1String("images")].isArray()) { - const QJsonArray array_images = obj_album[QLatin1String("images")].toArray(); + if (json_obj.contains("album"_L1) && json_obj["album"_L1].isObject()) { + QJsonObject obj_album = json_obj["album"_L1].toObject(); + if (obj_album.contains("type"_L1) && obj_album.contains("id"_L1) && obj_album.contains("name"_L1)) { + album_id = obj_album["id"_L1].toString(); + album_title = obj_album["name"_L1].toString(); + if (obj_album.contains("images"_L1) && obj_album["images"_L1].isArray()) { + const QJsonArray array_images = obj_album["images"_L1].toArray(); for (const QJsonValue &value : array_images) { if (!value.isObject()) { continue; } QJsonObject obj_image = value.toObject(); - if (obj_image.isEmpty() || !obj_image.contains(QLatin1String("url")) || !obj_image.contains(QLatin1String("width")) || !obj_image.contains(QLatin1String("height"))) continue; - int width = obj_image[QLatin1String("width")].toInt(); - int height = obj_image[QLatin1String("height")].toInt(); + if (obj_image.isEmpty() || !obj_image.contains("url"_L1) || !obj_image.contains("width"_L1) || !obj_image.contains("height"_L1)) continue; + int width = obj_image["width"_L1].toInt(); + int height = obj_image["height"_L1].toInt(); if (width <= 300 || height <= 300) { continue; } - cover_url = QUrl(obj_image[QLatin1String("url")].toString()); + cover_url = QUrl(obj_image["url"_L1].toString()); } } } @@ -1140,12 +1142,12 @@ void SpotifyRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Ar cover_url = album.cover_url; } - QString song_id = json_obj[QLatin1String("id")].toString(); - QString title = json_obj[QLatin1String("name")].toString(); - QString uri = json_obj[QLatin1String("uri")].toString(); - qint64 duration = json_obj[QLatin1String("duration_ms")].toVariant().toLongLong() * kNsecPerMsec; - int track = json_obj[QLatin1String("track_number")].toInt(); - int disc = json_obj[QLatin1String("disc_number")].toInt(); + QString song_id = json_obj["id"_L1].toString(); + QString title = json_obj["name"_L1].toString(); + QString uri = json_obj["uri"_L1].toString(); + qint64 duration = json_obj["duration_ms"_L1].toVariant().toLongLong() * kNsecPerMsec; + int track = json_obj["track_number"_L1].toInt(); + int disc = json_obj["disc_number"_L1].toInt(); QUrl url(uri); @@ -1294,8 +1296,8 @@ void SpotifyRequest::AlbumCoverReceived(QNetworkReply *reply, const QString &alb } QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - if (mimetype.contains(QLatin1Char(';'))) { - mimetype = mimetype.left(mimetype.indexOf(QLatin1Char(';'))); + if (mimetype.contains(u';')) { + mimetype = mimetype.left(mimetype.indexOf(u';')); } if (!ImageUtils::SupportedImageMimeTypes().contains(mimetype, Qt::CaseInsensitive) && !ImageUtils::SupportedImageFormats().contains(mimetype, Qt::CaseInsensitive)) { Error(QStringLiteral("Unsupported mimetype for image reader %1 for %2").arg(mimetype, url.toString())); diff --git a/src/spotify/spotifyservice.cpp b/src/spotify/spotifyservice.cpp index a8ea92f1d..beabc52e2 100644 --- a/src/spotify/spotifyservice.cpp +++ b/src/spotify/spotifyservice.cpp @@ -65,6 +65,8 @@ #include "settings/settingsdialog.h" #include "settings/spotifysettingspage.h" +using namespace Qt::StringLiterals; + const Song::Source SpotifyService::kSource = Song::Source::Spotify; const char SpotifyService::kApiUrl[] = "https://api.spotify.com/v1"; @@ -273,7 +275,7 @@ void SpotifyService::Authenticate() { code_verifier_ = Utilities::CryptographicRandomString(44); code_challenge_ = QString::fromLatin1(QCryptographicHash::hash(code_verifier_.toUtf8(), QCryptographicHash::Sha256).toBase64(QByteArray::Base64UrlEncoding)); - if (code_challenge_.lastIndexOf(QLatin1Char('=')) == code_challenge_.length() - 1) { + if (code_challenge_.lastIndexOf(u'=') == code_challenge_.length() - 1) { code_challenge_.chop(1); } @@ -424,9 +426,9 @@ void SpotifyService::AccessTokenRequestFinished(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error")) && json_obj.contains(QLatin1String("error_description"))) { - QString error = json_obj[QLatin1String("error")].toString(); - QString error_description = json_obj[QLatin1String("error_description")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("error"_L1) && json_obj.contains("error_description"_L1)) { + QString error = json_obj["error"_L1].toString(); + QString error_description = json_obj["error_description"_L1].toString(); login_errors_ << QStringLiteral("Authentication failure: %1 (%2)").arg(error, error_description); } } @@ -469,16 +471,16 @@ void SpotifyService::AccessTokenRequestFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("access_token")) || !json_obj.contains(QLatin1String("expires_in"))) { + if (!json_obj.contains("access_token"_L1) || !json_obj.contains("expires_in"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing access token or expires in."), json_obj); return; } - access_token_ = json_obj[QLatin1String("access_token")].toString(); - if (json_obj.contains(QLatin1String("refresh_token"))) { - refresh_token_ = json_obj[QLatin1String("refresh_token")].toString(); + access_token_ = json_obj["access_token"_L1].toString(); + if (json_obj.contains("refresh_token"_L1)) { + refresh_token_ = json_obj["refresh_token"_L1].toString(); } - expires_in_ = json_obj[QLatin1String("expires_in")].toInt(); + expires_in_ = json_obj["expires_in"_L1].toInt(); login_time_ = QDateTime::currentSecsSinceEpoch(); Settings s; @@ -738,7 +740,7 @@ void SpotifyService::LoginError(const QString &error, const QVariant &debug) { QString error_html; for (const QString &e : std::as_const(login_errors_)) { qLog(Error) << "Spotify:" << e; - error_html += e + QLatin1String("
"); + error_html += e + "
"_L1; } if (debug.isValid()) qLog(Debug) << debug; diff --git a/src/streaming/streamingsearchmodel.cpp b/src/streaming/streamingsearchmodel.cpp index 370da629c..320d3de8b 100644 --- a/src/streaming/streamingsearchmodel.cpp +++ b/src/streaming/streamingsearchmodel.cpp @@ -37,6 +37,8 @@ #include "streamingsearchmodel.h" #include "streamingsearchview.h" +using namespace Qt::StringLiterals; + StreamingSearchModel::StreamingSearchModel(StreamingServicePtr service, QObject *parent) : QStandardItemModel(parent), service_(service), @@ -91,7 +93,7 @@ QStandardItem *StreamingSearchModel::BuildContainers(const Song &s, QStandardIte case CollectionModel::GroupBy::AlbumArtist: if (s.is_compilation()) { display_text = tr("Various artists"); - sort_text = QLatin1String("aaaaaa"); + sort_text = "aaaaaa"_L1; } else { display_text = CollectionModel::TextOrUnknown(s.effective_albumartist()); @@ -103,7 +105,7 @@ QStandardItem *StreamingSearchModel::BuildContainers(const Song &s, QStandardIte case CollectionModel::GroupBy::Artist: if (s.is_compilation()) { display_text = tr("Various artists"); - sort_text = QLatin1String("aaaaaa"); + sort_text = "aaaaaa"_L1; } else { display_text = CollectionModel::TextOrUnknown(s.artist()); @@ -251,7 +253,7 @@ QStandardItem *StreamingSearchModel::BuildContainers(const Song &s, QStandardIte } if (display_text.isEmpty() || sort_text.isEmpty()) { - display_text = QLatin1String("Unknown"); + display_text = "Unknown"_L1; } // Find a container for this level diff --git a/src/streaming/streamingsearchview.cpp b/src/streaming/streamingsearchview.cpp index 43c4359ad..e2af60930 100644 --- a/src/streaming/streamingsearchview.cpp +++ b/src/streaming/streamingsearchview.cpp @@ -440,11 +440,11 @@ QStringList StreamingSearchView::TokenizeQuery(const QString &query) { QStringList tokens = query.split(regex_whitespaces); for (QStringList::iterator it = tokens.begin(); it != tokens.end(); ++it) { - (*it).remove(QLatin1Char('(')); - (*it).remove(QLatin1Char(')')); - (*it).remove(QLatin1Char('"')); + (*it).remove(u'('); + (*it).remove(u')'); + (*it).remove(u'"'); - const qint64 colon = (*it).indexOf(QLatin1Char(':')); + const qint64 colon = (*it).indexOf(u':'); if (colon != -1) { (*it).remove(0, colon + 1); } diff --git a/src/streaming/streamingtabsview.cpp b/src/streaming/streamingtabsview.cpp index 3b692327a..59bb0be57 100644 --- a/src/streaming/streamingtabsview.cpp +++ b/src/streaming/streamingtabsview.cpp @@ -46,6 +46,8 @@ #include "streamingcollectionviewcontainer.h" #include "ui_streamingtabsview.h" +using namespace Qt::StringLiterals; + StreamingTabsView::StreamingTabsView(Application *app, StreamingServicePtr service, const QString &settings_group, const SettingsDialog::Page settings_page, QWidget *parent) : QWidget(parent), app_(app), @@ -165,16 +167,16 @@ StreamingTabsView::StreamingTabsView(Application *app, StreamingServicePtr servi QString tab = s.value("tab", QStringLiteral("artists")).toString().toLower(); s.endGroup(); - if (tab == QLatin1String("artists")) { + if (tab == "artists"_L1) { ui_->tabs->setCurrentWidget(ui_->artists); } - else if (tab == QLatin1String("albums")) { + else if (tab == "albums"_L1) { ui_->tabs->setCurrentWidget(ui_->albums); } - else if (tab == QLatin1String("songs")) { + else if (tab == "songs"_L1) { ui_->tabs->setCurrentWidget(ui_->songs); } - else if (tab == QLatin1String("search")) { + else if (tab == "search"_L1) { ui_->tabs->setCurrentWidget(ui_->search); } diff --git a/src/subsonic/subsonicbaserequest.cpp b/src/subsonic/subsonicbaserequest.cpp index f00c65075..34a004f0c 100644 --- a/src/subsonic/subsonicbaserequest.cpp +++ b/src/subsonic/subsonicbaserequest.cpp @@ -45,6 +45,8 @@ #include "settings/subsonicsettingspage.h" +using namespace Qt::StringLiterals; + SubsonicBaseRequest::SubsonicBaseRequest(SubsonicService *service, QObject *parent) : QObject(parent), service_(service), @@ -81,11 +83,11 @@ QUrl SubsonicBaseRequest::CreateUrl(const QUrl &server_url, const SubsonicSettin QUrl url(server_url); - if (!url.path().isEmpty() && url.path().right(1) == QLatin1Char('/')) { - url.setPath(url.path() + QLatin1String("rest/") + ressource_name + QLatin1String(".view")); + if (!url.path().isEmpty() && url.path().right(1) == u'/') { + url.setPath(url.path() + "rest/"_L1 + ressource_name + ".view"_L1); } else { - url.setPath(url.path() + QLatin1String("/rest/") + ressource_name + QLatin1String(".view")); + url.setPath(url.path() + "/rest/"_L1 + ressource_name + ".view"_L1); } url.setQuery(url_query); @@ -99,7 +101,7 @@ QNetworkReply *SubsonicBaseRequest::CreateGetRequest(const QString &ressource_na QUrl url = CreateUrl(server_url(), auth_method(), username(), password(), ressource_name, params_provided); QNetworkRequest req(url); - if (url.scheme() == QLatin1String("https") && !verify_certificate()) { + if (url.scheme() == "https"_L1 && !verify_certificate()) { QSslConfiguration sslconfig = QSslConfiguration::defaultConfiguration(); sslconfig.setPeerVerifyMode(QSslSocket::VerifyNone); req.setSslConfiguration(sslconfig); @@ -147,13 +149,13 @@ QByteArray SubsonicBaseRequest::GetReplyData(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &parse_error); if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error"))) { - QJsonValue json_error = json_obj[QLatin1String("error")]; + if (!json_obj.isEmpty() && json_obj.contains("error"_L1)) { + QJsonValue json_error = json_obj["error"_L1]; if (json_error.isObject()) { json_obj = json_error.toObject(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); error = QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -201,12 +203,12 @@ QJsonObject SubsonicBaseRequest::ExtractJsonObj(QByteArray &data) { return QJsonObject(); } - if (!json_obj.contains(QLatin1String("subsonic-response"))) { + if (!json_obj.contains("subsonic-response"_L1)) { Error(QStringLiteral("Json reply is missing subsonic-response."), json_obj); return QJsonObject(); } - QJsonValue json_response = json_obj[QLatin1String("subsonic-response")]; + QJsonValue json_response = json_obj["subsonic-response"_L1]; if (!json_response.isObject()) { Error(QStringLiteral("Json response is not an object."), json_response); return QJsonObject(); @@ -221,7 +223,7 @@ QString SubsonicBaseRequest::ErrorsToHTML(const QStringList &errors) { QString error_html; for (const QString &error : errors) { - error_html += error + QLatin1String("
"); + error_html += error + "
"_L1; } return error_html; diff --git a/src/subsonic/subsonicrequest.cpp b/src/subsonic/subsonicrequest.cpp index 59aa230f9..2c48fecdf 100644 --- a/src/subsonic/subsonicrequest.cpp +++ b/src/subsonic/subsonicrequest.cpp @@ -50,6 +50,8 @@ #include "subsonicbaserequest.h" #include "subsonicrequest.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kMaxConcurrentAlbumsRequests = 3; constexpr int kMaxConcurrentAlbumSongsRequests = 3; @@ -184,17 +186,17 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset return; } - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue json_error = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue json_error = json_obj["error"_L1]; if (!json_error.isObject()) { Error(QStringLiteral("Json error is not an object."), json_obj); AlbumsFinishCheck(offset_requested, size_requested); return; } json_obj = json_error.toObject(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); Error(QStringLiteral("%1 (%2)").arg(message).arg(code)); AlbumsFinishCheck(offset_requested, size_requested); } @@ -205,14 +207,14 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset return; } - if (!json_obj.contains(QLatin1String("albumList")) && !json_obj.contains(QLatin1String("albumList2"))) { + if (!json_obj.contains("albumList"_L1) && !json_obj.contains("albumList2"_L1)) { Error(QStringLiteral("Json reply is missing albumList."), json_obj); AlbumsFinishCheck(offset_requested, size_requested); return; } QJsonValue value_albumlist; - if (json_obj.contains(QLatin1String("albumList"))) value_albumlist = json_obj[QLatin1String("albumList")]; - else if (json_obj.contains(QLatin1String("albumList2"))) value_albumlist = json_obj[QLatin1String("albumList2")]; + if (json_obj.contains("albumList"_L1)) value_albumlist = json_obj["albumList"_L1]; + else if (json_obj.contains("albumList2"_L1)) value_albumlist = json_obj["albumList2"_L1]; if (!value_albumlist.isObject()) { Error(QStringLiteral("Json album list is not an object."), value_albumlist); @@ -225,11 +227,11 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset return; } - if (!json_obj.contains(QLatin1String("album"))) { + if (!json_obj.contains("album"_L1)) { Error(QStringLiteral("Json album list does not contain album array."), json_obj); AlbumsFinishCheck(offset_requested, size_requested); } - QJsonValue json_album = json_obj[QLatin1String("album")]; + QJsonValue json_album = json_obj["album"_L1]; if (json_album.isNull()) { if (offset_requested == 0) no_results_ = true; AlbumsFinishCheck(offset_requested, size_requested); @@ -258,25 +260,25 @@ void SubsonicRequest::AlbumsReplyReceived(QNetworkReply *reply, const int offset } QJsonObject obj_album = value_album.toObject(); - if (!obj_album.contains(QLatin1String("id")) || !obj_album.contains(QLatin1String("artist"))) { + if (!obj_album.contains("id"_L1) || !obj_album.contains("artist"_L1)) { Error(QStringLiteral("Invalid Json reply, album object in array is missing ID or artist."), obj_album); continue; } - if (!obj_album.contains(QLatin1String("album")) && !obj_album.contains(QLatin1String("name"))) { + if (!obj_album.contains("album"_L1) && !obj_album.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, album object in array is missing album or name."), obj_album); continue; } - QString album_id = obj_album[QLatin1String("id")].toString(); + QString album_id = obj_album["id"_L1].toString(); if (album_id.isEmpty()) { - album_id = QString::number(obj_album[QLatin1String("id")].toInt()); + album_id = QString::number(obj_album["id"_L1].toInt()); } - QString artist = obj_album[QLatin1String("artist")].toString(); + QString artist = obj_album["artist"_L1].toString(); QString album; - if (obj_album.contains(QLatin1String("album"))) album = obj_album[QLatin1String("album")].toString(); - else if (obj_album.contains(QLatin1String("name"))) album = obj_album[QLatin1String("name")].toString(); + if (obj_album.contains("album"_L1)) album = obj_album["album"_L1].toString(); + else if (obj_album.contains("name"_L1)) album = obj_album["name"_L1].toString(); if (album_songs_requests_pending_.contains(album_id)) continue; @@ -379,17 +381,17 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin return; } - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue json_error = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue json_error = json_obj["error"_L1]; if (!json_error.isObject()) { Error(QStringLiteral("Json error is not an object."), json_obj); SongsFinishCheck(); return; } json_obj = json_error.toObject(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); Error(QStringLiteral("%1 (%2)").arg(message).arg(code)); SongsFinishCheck(); } @@ -400,12 +402,12 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin return; } - if (!json_obj.contains(QLatin1String("album"))) { + if (!json_obj.contains("album"_L1)) { Error(QStringLiteral("Json reply is missing albumList."), json_obj); SongsFinishCheck(); return; } - QJsonValue value_album = json_obj[QLatin1String("album")]; + QJsonValue value_album = json_obj["album"_L1]; if (!value_album.isObject()) { Error(QStringLiteral("Json album is not an object."), value_album); @@ -414,12 +416,12 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin } QJsonObject obj_album = value_album.toObject(); - if (!obj_album.contains(QLatin1String("song"))) { + if (!obj_album.contains("song"_L1)) { Error(QStringLiteral("Json album object does not contain song array."), json_obj); SongsFinishCheck(); return; } - QJsonValue json_song = obj_album[QLatin1String("song")]; + QJsonValue json_song = obj_album["song"_L1]; if (!json_song.isArray()) { Error(QStringLiteral("Json song is not an array."), obj_album); SongsFinishCheck(); @@ -428,8 +430,8 @@ void SubsonicRequest::AlbumSongsReplyReceived(QNetworkReply *reply, const QStrin const QJsonArray array_songs = json_song.toArray(); qint64 created = 0; - if (obj_album.contains(QLatin1String("created"))) { - created = QDateTime::fromString(obj_album[QLatin1String("created")].toString(), Qt::ISODate).toSecsSinceEpoch(); + if (obj_album.contains("created"_L1)) { + created = QDateTime::fromString(obj_album["created"_L1].toString(), Qt::ISODate).toSecsSinceEpoch(); } bool compilation = false; @@ -491,133 +493,133 @@ QString SubsonicRequest::ParseSong(Song &song, const QJsonObject &json_obj, cons Q_UNUSED(album_id_requested); if ( - !json_obj.contains(QLatin1String("id")) || - !json_obj.contains(QLatin1String("title")) || - !json_obj.contains(QLatin1String("size")) || - !json_obj.contains(QLatin1String("suffix")) || - !json_obj.contains(QLatin1String("duration")) || - !json_obj.contains(QLatin1String("type")) + !json_obj.contains("id"_L1) || + !json_obj.contains("title"_L1) || + !json_obj.contains("size"_L1) || + !json_obj.contains("suffix"_L1) || + !json_obj.contains("duration"_L1) || + !json_obj.contains("type"_L1) ) { Error(QStringLiteral("Invalid Json reply, song is missing one or more values."), json_obj); return QString(); } QString song_id; - if (json_obj[QLatin1String("id")].type() == QJsonValue::String) { - song_id = json_obj[QLatin1String("id")].toString(); + if (json_obj["id"_L1].type() == QJsonValue::String) { + song_id = json_obj["id"_L1].toString(); } else { - song_id = QString::number(json_obj[QLatin1String("id")].toInt()); + song_id = QString::number(json_obj["id"_L1].toInt()); } QString album_id; - if (json_obj.contains(QLatin1String("albumId"))) { - if (json_obj[QLatin1String("albumId")].type() == QJsonValue::String) { - album_id = json_obj[QLatin1String("albumId")].toString(); + if (json_obj.contains("albumId"_L1)) { + if (json_obj["albumId"_L1].type() == QJsonValue::String) { + album_id = json_obj["albumId"_L1].toString(); } else { - album_id = QString::number(json_obj[QLatin1String("albumId")].toInt()); + album_id = QString::number(json_obj["albumId"_L1].toInt()); } } QString artist_id; - if (json_obj.contains(QLatin1String("artistId"))) { - if (json_obj[QLatin1String("artistId")].type() == QJsonValue::String) { - artist_id = json_obj[QLatin1String("artistId")].toString(); + if (json_obj.contains("artistId"_L1)) { + if (json_obj["artistId"_L1].type() == QJsonValue::String) { + artist_id = json_obj["artistId"_L1].toString(); } else { - artist_id = QString::number(json_obj[QLatin1String("artistId")].toInt()); + artist_id = QString::number(json_obj["artistId"_L1].toInt()); } } - QString title = json_obj[QLatin1String("title")].toString(); + QString title = json_obj["title"_L1].toString(); QString album; - if (json_obj.contains(QLatin1String("album"))) { - album = json_obj[QLatin1String("album")].toString(); + if (json_obj.contains("album"_L1)) { + album = json_obj["album"_L1].toString(); } QString artist; - if (json_obj.contains(QLatin1String("artist"))) { - artist = json_obj[QLatin1String("artist")].toString(); + if (json_obj.contains("artist"_L1)) { + artist = json_obj["artist"_L1].toString(); } int size = 0; - if (json_obj[QLatin1String("size")].type() == QJsonValue::String) { - size = json_obj[QLatin1String("size")].toString().toInt(); + if (json_obj["size"_L1].type() == QJsonValue::String) { + size = json_obj["size"_L1].toString().toInt(); } else { - size = json_obj[QLatin1String("size")].toInt(); + size = json_obj["size"_L1].toInt(); } qint64 duration = 0; - if (json_obj[QLatin1String("duration")].type() == QJsonValue::String) { - duration = json_obj[QLatin1String("duration")].toString().toInt() * kNsecPerSec; + if (json_obj["duration"_L1].type() == QJsonValue::String) { + duration = json_obj["duration"_L1].toString().toInt() * kNsecPerSec; } else { - duration = json_obj[QLatin1String("duration")].toInt() * kNsecPerSec; + duration = json_obj["duration"_L1].toInt() * kNsecPerSec; } int bitrate = 0; - if (json_obj.contains(QLatin1String("bitRate"))) { - if (json_obj[QLatin1String("bitRate")].type() == QJsonValue::String) { - bitrate = json_obj[QLatin1String("bitRate")].toString().toInt(); + if (json_obj.contains("bitRate"_L1)) { + if (json_obj["bitRate"_L1].type() == QJsonValue::String) { + bitrate = json_obj["bitRate"_L1].toString().toInt(); } else { - bitrate = json_obj[QLatin1String("bitRate")].toInt(); + bitrate = json_obj["bitRate"_L1].toInt(); } } QString mimetype; - if (json_obj.contains(QLatin1String("contentType"))) { - mimetype = json_obj[QLatin1String("contentType")].toString(); + if (json_obj.contains("contentType"_L1)) { + mimetype = json_obj["contentType"_L1].toString(); } int year = 0; - if (json_obj.contains(QLatin1String("year"))) { - if (json_obj[QLatin1String("year")].type() == QJsonValue::String) { - year = json_obj[QLatin1String("year")].toString().toInt(); + if (json_obj.contains("year"_L1)) { + if (json_obj["year"_L1].type() == QJsonValue::String) { + year = json_obj["year"_L1].toString().toInt(); } else { - year = json_obj[QLatin1String("year")].toInt(); + year = json_obj["year"_L1].toInt(); } } int disc = 0; - if (json_obj.contains(QLatin1String("discNumber"))) { - if (json_obj[QLatin1String("discNumber")].type() == QJsonValue::String) { - disc = json_obj[QLatin1String("discNumber")].toString().toInt(); + if (json_obj.contains("discNumber"_L1)) { + if (json_obj["discNumber"_L1].type() == QJsonValue::String) { + disc = json_obj["discNumber"_L1].toString().toInt(); } else { - disc = json_obj[QLatin1String("discNumber")].toInt(); + disc = json_obj["discNumber"_L1].toInt(); } } int track = 0; - if (json_obj.contains(QLatin1String("track"))) { - if (json_obj[QLatin1String("track")].type() == QJsonValue::String) { - track = json_obj[QLatin1String("track")].toString().toInt(); + if (json_obj.contains("track"_L1)) { + if (json_obj["track"_L1].type() == QJsonValue::String) { + track = json_obj["track"_L1].toString().toInt(); } else { - track = json_obj[QLatin1String("track")].toInt(); + track = json_obj["track"_L1].toInt(); } } QString genre; - if (json_obj.contains(QLatin1String("genre"))) genre = json_obj[QLatin1String("genre")].toString(); + if (json_obj.contains("genre"_L1)) genre = json_obj["genre"_L1].toString(); QString cover_id; - if (json_obj.contains(QLatin1String("coverArt"))) { - if (json_obj[QLatin1String("coverArt")].type() == QJsonValue::String) { - cover_id = json_obj[QLatin1String("coverArt")].toString(); + if (json_obj.contains("coverArt"_L1)) { + if (json_obj["coverArt"_L1].type() == QJsonValue::String) { + cover_id = json_obj["coverArt"_L1].toString(); } else { - cover_id = QString::number(json_obj[QLatin1String("coverArt")].toInt()); + cover_id = QString::number(json_obj["coverArt"_L1].toInt()); } } qint64 created = 0; - if (json_obj.contains(QLatin1String("created"))) { - created = QDateTime::fromString(json_obj[QLatin1String("created")].toString(), Qt::ISODate).toSecsSinceEpoch(); + if (json_obj.contains("created"_L1)) { + created = QDateTime::fromString(json_obj["created"_L1].toString(), Qt::ISODate).toSecsSinceEpoch(); } else { created = album_created; @@ -723,7 +725,7 @@ void SubsonicRequest::AddAlbumCoverRequest(const Song &song) { request.album_id = song.album_id(); request.cover_id = cover_id; request.url = cover_url; - request.filename = cover_path + QLatin1Char('/') + cover_id + QLatin1String(".jpg"); + request.filename = cover_path + QLatin1Char('/') + cover_id + ".jpg"_L1; if (request.filename.isEmpty()) return; album_covers_requests_sent_.insert(cover_id, song.song_id()); @@ -798,8 +800,8 @@ void SubsonicRequest::AlbumCoverReceived(QNetworkReply *reply, const AlbumCoverR } QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - if (mimetype.contains(QLatin1Char(';'))) { - mimetype = mimetype.left(mimetype.indexOf(QLatin1Char(';'))); + if (mimetype.contains(u';')) { + mimetype = mimetype.left(mimetype.indexOf(u';')); } if (!ImageUtils::SupportedImageMimeTypes().contains(mimetype, Qt::CaseInsensitive) && !ImageUtils::SupportedImageFormats().contains(mimetype, Qt::CaseInsensitive)) { Error(QStringLiteral("Unsupported mimetype for image reader %1 for %2").arg(mimetype, request.url.toString())); diff --git a/src/subsonic/subsonicscrobblerequest.cpp b/src/subsonic/subsonicscrobblerequest.cpp index a24651c7f..5cdc480d1 100644 --- a/src/subsonic/subsonicscrobblerequest.cpp +++ b/src/subsonic/subsonicscrobblerequest.cpp @@ -35,6 +35,8 @@ #include "subsonicbaserequest.h" #include "subsonicscrobblerequest.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kMaxConcurrentScrobbleRequests = 3; } @@ -111,17 +113,17 @@ void SubsonicScrobbleRequest::ScrobbleReplyReceived(QNetworkReply *reply) { return; } - if (json_obj.contains(QLatin1String("error"))) { - QJsonValue json_error = json_obj[QLatin1String("error")]; + if (json_obj.contains("error"_L1)) { + QJsonValue json_error = json_obj["error"_L1]; if (!json_error.isObject()) { Error(QStringLiteral("Json error is not an object."), json_obj); FinishCheck(); return; } json_obj = json_error.toObject(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); Error(QStringLiteral("%1 (%2)").arg(message).arg(code)); FinishCheck(); } diff --git a/src/subsonic/subsonicservice.cpp b/src/subsonic/subsonicservice.cpp index 32d8d1e41..9af5b12d3 100644 --- a/src/subsonic/subsonicservice.cpp +++ b/src/subsonic/subsonicservice.cpp @@ -60,6 +60,7 @@ #include "settings/settingsdialog.h" #include "settings/subsonicsettingspage.h" +using namespace Qt::StringLiterals; using std::make_unique; using std::make_shared; @@ -175,11 +176,11 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username, } if (!redirect) { - if (!url.path().isEmpty() && url.path().right(1) == QLatin1Char('/')) { - url.setPath(url.path() + QLatin1String("rest/ping.view")); + if (!url.path().isEmpty() && url.path().right(1) == u'/') { + url.setPath(url.path() + "rest/ping.view"_L1); } else { - url.setPath(url.path() + QLatin1String("/rest/ping.view")); + url.setPath(url.path() + "/rest/ping.view"_L1); } } @@ -187,7 +188,7 @@ void SubsonicService::SendPingWithCredentials(QUrl url, const QString &username, QNetworkRequest req(url); - if (url.scheme() == QLatin1String("https") && !verify_certificate_) { + if (url.scheme() == "https"_L1 && !verify_certificate_) { QSslConfiguration sslconfig = QSslConfiguration::defaultConfiguration(); sslconfig.setPeerVerifyMode(QSslSocket::VerifyNone); req.setSslConfiguration(sslconfig); @@ -258,13 +259,13 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con QJsonDocument json_doc = QJsonDocument::fromJson(data, &parse_error); if (parse_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("error"))) { - QJsonValue json_error = json_obj[QLatin1String("error")]; + if (!json_obj.isEmpty() && json_obj.contains("error"_L1)) { + QJsonValue json_error = json_obj["error"_L1]; if (json_error.isObject()) { json_obj = json_error.toObject(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("code")) && json_obj.contains(QLatin1String("message"))) { - int code = json_obj[QLatin1String("code")].toInt(); - QString message = json_obj[QLatin1String("message")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("code"_L1) && json_obj.contains("message"_L1)) { + int code = json_obj["code"_L1].toInt(); + QString message = json_obj["message"_L1].toString(); errors_ << QStringLiteral("%1 (%2)").arg(message).arg(code); } } @@ -311,49 +312,49 @@ void SubsonicService::HandlePingReply(QNetworkReply *reply, const QUrl &url, con return; } - if (!json_obj.contains(QLatin1String("subsonic-response"))) { + if (!json_obj.contains("subsonic-response"_L1)) { PingError(QStringLiteral("Ping reply from server is missing subsonic-response"), json_obj); return; } - QJsonValue value_response = json_obj[QLatin1String("subsonic-response")]; + QJsonValue value_response = json_obj["subsonic-response"_L1]; if (!value_response.isObject()) { PingError(QStringLiteral("Ping reply from server subsonic-response is not an object"), value_response); return; } QJsonObject obj_response = value_response.toObject(); - if (obj_response.contains(QLatin1String("error"))) { - QJsonValue value_error = obj_response[QLatin1String("error")]; + if (obj_response.contains("error"_L1)) { + QJsonValue value_error = obj_response["error"_L1]; if (!value_error.isObject()) { PingError(QStringLiteral("Authentication error reply from server is not an object"), value_error); return; } QJsonObject obj_error = value_error.toObject(); - if (!obj_error.contains(QLatin1String("code")) || !obj_error.contains(QLatin1String("message"))) { + if (!obj_error.contains("code"_L1) || !obj_error.contains("message"_L1)) { PingError(QStringLiteral("Authentication error reply from server is missing status or message"), json_obj); return; } //int status = obj_error["code"].toInt(); - QString message = obj_error[QLatin1String("message")].toString(); + QString message = obj_error["message"_L1].toString(); Q_EMIT TestComplete(false, message); Q_EMIT TestFailure(message); return; } - if (!obj_response.contains(QLatin1String("status"))) { + if (!obj_response.contains("status"_L1)) { PingError(QStringLiteral("Ping reply from server is missing status"), obj_response); return; } - QString status = obj_response[QLatin1String("status")].toString().toLower(); - QString message = obj_response[QLatin1String("message")].toString(); + QString status = obj_response["status"_L1].toString().toLower(); + QString message = obj_response["message"_L1].toString(); - if (status == QLatin1String("failed")) { + if (status == "failed"_L1) { Q_EMIT TestComplete(false, message); Q_EMIT TestFailure(message); return; } - if (status == QLatin1String("ok")) { + if (status == "ok"_L1) { Q_EMIT TestComplete(true); Q_EMIT TestSuccess(); return; @@ -449,7 +450,7 @@ void SubsonicService::PingError(const QString &error, const QVariant &debug) { QString error_html; for (const QString &e : std::as_const(errors_)) { qLog(Error) << "Subsonic:" << e; - error_html += e + QLatin1String("
"); + error_html += e + "
"_L1; } if (debug.isValid()) qLog(Debug) << debug; diff --git a/src/tidal/tidalbaserequest.cpp b/src/tidal/tidalbaserequest.cpp index dbe115b15..9fef9d4bf 100644 --- a/src/tidal/tidalbaserequest.cpp +++ b/src/tidal/tidalbaserequest.cpp @@ -40,6 +40,8 @@ #include "tidalservice.h" #include "tidalbaserequest.h" +using namespace Qt::StringLiterals; + TidalBaseRequest::TidalBaseRequest(TidalService *service, SharedPtr network, QObject *parent) : QObject(parent), service_(service), @@ -102,10 +104,10 @@ QByteArray TidalBaseRequest::GetReplyData(QNetworkReply *reply, const bool send_ int sub_status = 0; if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("userMessage"))) { - status = json_obj[QLatin1String("status")].toInt(); - sub_status = json_obj[QLatin1String("subStatus")].toInt(); - QString user_message = json_obj[QLatin1String("userMessage")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("userMessage"_L1)) { + status = json_obj["status"_L1].toInt(); + sub_status = json_obj["subStatus"_L1].toInt(); + QString user_message = json_obj["userMessage"_L1].toString(); error = QStringLiteral("%1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status); } } @@ -185,11 +187,11 @@ QJsonValue TidalBaseRequest::ExtractItems(const QByteArray &data) { QJsonValue TidalBaseRequest::ExtractItems(const QJsonObject &json_obj) { - if (!json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("items"_L1)) { Error(QStringLiteral("Json reply is missing items."), json_obj); return QJsonArray(); } - QJsonValue json_items = json_obj[QLatin1String("items")]; + QJsonValue json_items = json_obj["items"_L1]; return json_items; } @@ -198,7 +200,7 @@ QString TidalBaseRequest::ErrorsToHTML(const QStringList &errors) { QString error_html; for (const QString &error : errors) { - error_html += error + QLatin1String("
"); + error_html += error + "
"_L1; } return error_html; diff --git a/src/tidal/tidalfavoriterequest.cpp b/src/tidal/tidalfavoriterequest.cpp index 3aa56f9cd..bdc358619 100644 --- a/src/tidal/tidalfavoriterequest.cpp +++ b/src/tidal/tidalfavoriterequest.cpp @@ -39,6 +39,8 @@ #include "tidalbaserequest.h" #include "tidalfavoriterequest.h" +using namespace Qt::StringLiterals; + TidalFavoriteRequest::TidalFavoriteRequest(TidalService *service, SharedPtr network, QObject *parent) : TidalBaseRequest(service, network, parent), service_(service), @@ -135,14 +137,14 @@ void TidalFavoriteRequest::AddFavorites(const FavoriteType type, const SongList void TidalFavoriteRequest::AddFavoritesRequest(const FavoriteType type, const QStringList &id_list, const SongList &songs) { const ParamList params = ParamList() << Param(QStringLiteral("countryCode"), country_code()) - << Param(FavoriteMethod(type), id_list.join(QLatin1Char(','))); + << Param(FavoriteMethod(type), id_list.join(u',')); QUrlQuery url_query; for (const Param ¶m : params) { url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(param.first)), QString::fromLatin1(QUrl::toPercentEncoding(param.second))); } - QUrl url(QLatin1String(TidalService::kApiUrl) + QLatin1Char('/') + QLatin1String("users/") + QString::number(service_->user_id()) + QLatin1String("/favorites/") + FavoriteText(type)); + QUrl url(QLatin1String(TidalService::kApiUrl) + QLatin1Char('/') + "users/"_L1 + QString::number(service_->user_id()) + "/favorites/"_L1 + FavoriteText(type)); QNetworkRequest req(url); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); req.setHeader(QNetworkRequest::ContentTypeHeader, QStringLiteral("application/x-www-form-urlencoded")); @@ -251,7 +253,7 @@ void TidalFavoriteRequest::RemoveFavoritesRequest(const FavoriteType type, const url_query.addQueryItem(QString::fromLatin1(QUrl::toPercentEncoding(param.first)), QString::fromLatin1(QUrl::toPercentEncoding(param.second))); } - QUrl url(QLatin1String(TidalService::kApiUrl) + QLatin1String("/users/") + QString::number(service_->user_id()) + QLatin1String("/favorites/") + FavoriteText(type) + QLatin1String("/") + id); + QUrl url(QLatin1String(TidalService::kApiUrl) + "/users/"_L1 + QString::number(service_->user_id()) + "/favorites/"_L1 + FavoriteText(type) + "/"_L1 + id); url.setQuery(url_query); QNetworkRequest req(url); req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); diff --git a/src/tidal/tidalrequest.cpp b/src/tidal/tidalrequest.cpp index ab0cde024..581b67f78 100644 --- a/src/tidal/tidalrequest.cpp +++ b/src/tidal/tidalrequest.cpp @@ -49,6 +49,8 @@ #include "tidalbaserequest.h" #include "tidalrequest.h" +using namespace Qt::StringLiterals; + namespace { constexpr char kResourcesUrl[] = "https://resources.tidal.com"; constexpr int kMaxConcurrentArtistsRequests = 3; @@ -435,17 +437,17 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re return; } - if (!json_obj.contains(QLatin1String("limit")) || - !json_obj.contains(QLatin1String("offset")) || - !json_obj.contains(QLatin1String("totalNumberOfItems")) || - !json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("limit"_L1) || + !json_obj.contains("offset"_L1) || + !json_obj.contains("totalNumberOfItems"_L1) || + !json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), json_obj); ArtistsFinishCheck(); return; } //int limit = json_obj["limit"].toInt(); - int offset = json_obj[QLatin1String("offset")].toInt(); - int artists_total = json_obj[QLatin1String("totalNumberOfItems")].toInt(); + int offset = json_obj["offset"_L1].toInt(); + int artists_total = json_obj["totalNumberOfItems"_L1].toInt(); if (offset_requested == 0) { artists_total_ = artists_total; @@ -489,8 +491,8 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue json_item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue json_item = obj_item["item"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item); continue; @@ -498,19 +500,19 @@ void TidalRequest::ArtistsReplyReceived(QNetworkReply *reply, const int limit_re obj_item = json_item.toObject(); } - if (!obj_item.contains(QLatin1String("id")) || !obj_item.contains(QLatin1String("name"))) { + if (!obj_item.contains("id"_L1) || !obj_item.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item missing id or album."), obj_item); continue; } Artist artist; - if (obj_item[QLatin1String("id")].isString()) { - artist.artist_id = obj_item[QLatin1String("id")].toString(); + if (obj_item["id"_L1].isString()) { + artist.artist_id = obj_item["id"_L1].toString(); } else { - artist.artist_id = QString::number(obj_item[QLatin1String("id")].toInt()); + artist.artist_id = QString::number(obj_item["id"_L1].toInt()); } - artist.artist = obj_item[QLatin1String("name")].toString(); + artist.artist = obj_item["name"_L1].toString(); if (artist_albums_requests_pending_.contains(artist.artist_id)) continue; @@ -630,18 +632,18 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req return; } - if (!json_obj.contains(QLatin1String("limit")) || - !json_obj.contains(QLatin1String("offset")) || - !json_obj.contains(QLatin1String("totalNumberOfItems")) || - !json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("limit"_L1) || + !json_obj.contains("offset"_L1) || + !json_obj.contains("totalNumberOfItems"_L1) || + !json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), json_obj); AlbumsFinishCheck(artist_requested); return; } //int limit = json_obj["limit"].toInt(); - int offset = json_obj[QLatin1String("offset")].toInt(); - int albums_total = json_obj[QLatin1String("totalNumberOfItems")].toInt(); + int offset = json_obj["offset"_L1].toInt(); + int albums_total = json_obj["totalNumberOfItems"_L1].toInt(); if (offset != offset_requested) { Error(QStringLiteral("Offset returned does not match offset requested! %1 != %2").arg(offset).arg(offset_requested)); @@ -671,8 +673,8 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue json_item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue json_item = obj_item["item"_L1]; if (!json_item.isObject()) { Error(QStringLiteral("Invalid Json reply, item in array is not a object."), json_item); continue; @@ -681,47 +683,47 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req } Album album; - if (obj_item.contains(QLatin1String("type"))) { // This was an albums request or search - if (!obj_item.contains(QLatin1String("id")) || !obj_item.contains(QLatin1String("title"))) { + if (obj_item.contains("type"_L1)) { // This was an albums request or search + if (!obj_item.contains("id"_L1) || !obj_item.contains("title"_L1)) { Error(QStringLiteral("Invalid Json reply, item is missing ID or title."), obj_item); continue; } - if (obj_item[QLatin1String("id")].isString()) { - album.album_id = obj_item[QLatin1String("id")].toString(); + if (obj_item["id"_L1].isString()) { + album.album_id = obj_item["id"_L1].toString(); } else { - album.album_id = QString::number(obj_item[QLatin1String("id")].toInt()); + album.album_id = QString::number(obj_item["id"_L1].toInt()); } - album.album = obj_item[QLatin1String("title")].toString(); - if (service_->album_explicit() && obj_item.contains(QLatin1String("explicit"))) { - album.album_explicit = obj_item[QLatin1String("explicit")].toVariant().toBool(); + album.album = obj_item["title"_L1].toString(); + if (service_->album_explicit() && obj_item.contains("explicit"_L1)) { + album.album_explicit = obj_item["explicit"_L1].toVariant().toBool(); if (album.album_explicit && !album.album.isEmpty()) { - album.album.append(QLatin1String(" (Explicit)")); + album.album.append(" (Explicit)"_L1); } } } - else if (obj_item.contains(QLatin1String("album"))) { // This was a tracks request or search - QJsonValue value_album = obj_item[QLatin1String("album")]; + else if (obj_item.contains("album"_L1)) { // This was a tracks request or search + QJsonValue value_album = obj_item["album"_L1]; if (!value_album.isObject()) { Error(QStringLiteral("Invalid Json reply, item album is not a object."), value_album); continue; } QJsonObject obj_album = value_album.toObject(); - if (!obj_album.contains(QLatin1String("id")) || !obj_album.contains(QLatin1String("title"))) { + if (!obj_album.contains("id"_L1) || !obj_album.contains("title"_L1)) { Error(QStringLiteral("Invalid Json reply, item album is missing ID or title."), obj_album); continue; } - if (obj_album[QLatin1String("id")].isString()) { - album.album_id = obj_album[QLatin1String("id")].toString(); + if (obj_album["id"_L1].isString()) { + album.album_id = obj_album["id"_L1].toString(); } else { - album.album_id = QString::number(obj_album[QLatin1String("id")].toInt()); + album.album_id = QString::number(obj_album["id"_L1].toInt()); } - album.album = obj_album[QLatin1String("title")].toString(); - if (service_->album_explicit() && obj_album.contains(QLatin1String("explicit"))) { - album.album_explicit = obj_album[QLatin1String("explicit")].toVariant().toBool(); + album.album = obj_album["title"_L1].toString(); + if (service_->album_explicit() && obj_album.contains("explicit"_L1)) { + album.album_explicit = obj_album["explicit"_L1].toVariant().toBool(); if (album.album_explicit && !album.album.isEmpty()) { - album.album.append(QLatin1String(" (Explicit)")); + album.album.append(" (Explicit)"_L1); } } } @@ -732,29 +734,29 @@ void TidalRequest::AlbumsReceived(QNetworkReply *reply, const Artist &artist_req if (album_songs_requests_pending_.contains(album.album_id)) continue; - if (!obj_item.contains(QLatin1String("artist")) || !obj_item.contains(QLatin1String("title")) || !obj_item.contains(QLatin1String("audioQuality"))) { + if (!obj_item.contains("artist"_L1) || !obj_item.contains("title"_L1) || !obj_item.contains("audioQuality"_L1)) { Error(QStringLiteral("Invalid Json reply, item missing artist, title or audioQuality."), obj_item); continue; } - QJsonValue value_artist = obj_item[QLatin1String("artist")]; + QJsonValue value_artist = obj_item["artist"_L1]; if (!value_artist.isObject()) { Error(QStringLiteral("Invalid Json reply, item artist is not a object."), value_artist); continue; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, item artist missing id or name."), obj_artist); continue; } Artist album_artist; - if (obj_artist[QLatin1String("id")].isString()) { - album_artist.artist_id = obj_artist[QLatin1String("id")].toString(); + if (obj_artist["id"_L1].isString()) { + album_artist.artist_id = obj_artist["id"_L1].toString(); } else { - album_artist.artist_id = QString::number(obj_artist[QLatin1String("id")].toInt()); + album_artist.artist_id = QString::number(obj_artist["id"_L1].toInt()); } - album_artist.artist = obj_artist[QLatin1String("name")].toString(); + album_artist.artist = obj_artist["name"_L1].toString(); //QString quality = obj_item["audioQuality"].toString(); //QString copyright = obj_item["copyright"].toString(); @@ -907,18 +909,18 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con return; } - if (!json_obj.contains(QLatin1String("limit")) || - !json_obj.contains(QLatin1String("offset")) || - !json_obj.contains(QLatin1String("totalNumberOfItems")) || - !json_obj.contains(QLatin1String("items"))) { + if (!json_obj.contains("limit"_L1) || + !json_obj.contains("offset"_L1) || + !json_obj.contains("totalNumberOfItems"_L1) || + !json_obj.contains("items"_L1)) { Error(QStringLiteral("Json object missing values."), json_obj); SongsFinishCheck(artist, album, limit_requested, offset_requested); return; } //int limit = json_obj["limit"].toInt(); - int offset = json_obj[QLatin1String("offset")].toInt(); - int songs_total = json_obj[QLatin1String("totalNumberOfItems")].toInt(); + int offset = json_obj["offset"_L1].toInt(); + int songs_total = json_obj["totalNumberOfItems"_L1].toInt(); if (offset != offset_requested) { Error(QStringLiteral("Offset returned does not match offset requested! %1 != %2").arg(offset).arg(offset_requested)); @@ -950,8 +952,8 @@ void TidalRequest::SongsReceived(QNetworkReply *reply, const Artist &artist, con } QJsonObject obj_item = value_item.toObject(); - if (obj_item.contains(QLatin1String("item"))) { - QJsonValue item = obj_item[QLatin1String("item")]; + if (obj_item.contains("item"_L1)) { + QJsonValue item = obj_item["item"_L1]; if (!item.isObject()) { Error(QStringLiteral("Invalid Json reply, item is not a object."), item); continue; @@ -1021,85 +1023,85 @@ void TidalRequest::SongsFinishCheck(const Artist &artist, const Album &album, co void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Artist &album_artist, const Album &album) { if ( - !json_obj.contains(QLatin1String("album")) || - !json_obj.contains(QLatin1String("allowStreaming")) || - !json_obj.contains(QLatin1String("artist")) || - !json_obj.contains(QLatin1String("artists")) || - !json_obj.contains(QLatin1String("audioQuality")) || - !json_obj.contains(QLatin1String("duration")) || - !json_obj.contains(QLatin1String("id")) || - !json_obj.contains(QLatin1String("streamReady")) || - !json_obj.contains(QLatin1String("title")) || - !json_obj.contains(QLatin1String("trackNumber")) || - !json_obj.contains(QLatin1String("url")) || - !json_obj.contains(QLatin1String("volumeNumber")) || - !json_obj.contains(QLatin1String("copyright")) + !json_obj.contains("album"_L1) || + !json_obj.contains("allowStreaming"_L1) || + !json_obj.contains("artist"_L1) || + !json_obj.contains("artists"_L1) || + !json_obj.contains("audioQuality"_L1) || + !json_obj.contains("duration"_L1) || + !json_obj.contains("id"_L1) || + !json_obj.contains("streamReady"_L1) || + !json_obj.contains("title"_L1) || + !json_obj.contains("trackNumber"_L1) || + !json_obj.contains("url"_L1) || + !json_obj.contains("volumeNumber"_L1) || + !json_obj.contains("copyright"_L1) ) { Error(QStringLiteral("Invalid Json reply, track is missing one or more values."), json_obj); return; } - QJsonValue value_artist = json_obj[QLatin1String("artist")]; - QJsonValue value_album = json_obj[QLatin1String("album")]; - QJsonValue json_duration = json_obj[QLatin1String("duration")]; + QJsonValue value_artist = json_obj["artist"_L1]; + QJsonValue value_album = json_obj["album"_L1]; + QJsonValue json_duration = json_obj["duration"_L1]; //QJsonArray array_artists = json_obj["artists"].toArray(); QString song_id; - if (json_obj[QLatin1String("id")].isString()) { - song_id = json_obj[QLatin1String("id")].toString(); + if (json_obj["id"_L1].isString()) { + song_id = json_obj["id"_L1].toString(); } else { - song_id = QString::number(json_obj[QLatin1String("id")].toInt()); + song_id = QString::number(json_obj["id"_L1].toInt()); } - QString title = json_obj[QLatin1String("title")].toString(); + QString title = json_obj["title"_L1].toString(); //QString urlstr = json_obj["url"].toString(); - int track = json_obj[QLatin1String("trackNumber")].toInt(); - int disc = json_obj[QLatin1String("volumeNumber")].toInt(); - bool allow_streaming = json_obj[QLatin1String("allowStreaming")].toBool(); - bool stream_ready = json_obj[QLatin1String("streamReady")].toBool(); - QString copyright = json_obj[QLatin1String("copyright")].toString(); + int track = json_obj["trackNumber"_L1].toInt(); + int disc = json_obj["volumeNumber"_L1].toInt(); + bool allow_streaming = json_obj["allowStreaming"_L1].toBool(); + bool stream_ready = json_obj["streamReady"_L1].toBool(); + QString copyright = json_obj["copyright"_L1].toString(); if (!value_artist.isObject()) { Error(QStringLiteral("Invalid Json reply, track artist is not a object."), value_artist); return; } QJsonObject obj_artist = value_artist.toObject(); - if (!obj_artist.contains(QLatin1String("id")) || !obj_artist.contains(QLatin1String("name"))) { + if (!obj_artist.contains("id"_L1) || !obj_artist.contains("name"_L1)) { Error(QStringLiteral("Invalid Json reply, track artist is missing id or name."), obj_artist); return; } QString artist_id; - if (obj_artist[QLatin1String("id")].isString()) { - artist_id = obj_artist[QLatin1String("id")].toString(); + if (obj_artist["id"_L1].isString()) { + artist_id = obj_artist["id"_L1].toString(); } else { - artist_id = QString::number(obj_artist[QLatin1String("id")].toInt()); + artist_id = QString::number(obj_artist["id"_L1].toInt()); } - QString artist = obj_artist[QLatin1String("name")].toString(); + QString artist = obj_artist["name"_L1].toString(); if (!value_album.isObject()) { Error(QStringLiteral("Invalid Json reply, track album is not a object."), value_album); return; } QJsonObject obj_album = value_album.toObject(); - if (!obj_album.contains(QLatin1String("id")) || !obj_album.contains(QLatin1String("title"))) { + if (!obj_album.contains("id"_L1) || !obj_album.contains("title"_L1)) { Error(QStringLiteral("Invalid Json reply, track album is missing ID or title."), obj_album); return; } QString album_id; - if (obj_album[QLatin1String("id")].isString()) { - album_id = obj_album[QLatin1String("id")].toString(); + if (obj_album["id"_L1].isString()) { + album_id = obj_album["id"_L1].toString(); } else { - album_id = QString::number(obj_album[QLatin1String("id")].toInt()); + album_id = QString::number(obj_album["id"_L1].toInt()); } if (!album.album_id.isEmpty() && album.album_id != album_id) { Error(QStringLiteral("Invalid Json reply, track album id is wrong."), obj_album); return; } - QString album_title = obj_album[QLatin1String("title")].toString(); - if (album.album_explicit) album_title.append(QLatin1String(" (Explicit)")); + QString album_title = obj_album["title"_L1].toString(); + if (album.album_explicit) album_title.append(" (Explicit)"_L1); if (!allow_streaming) { Warn(QStringLiteral("Song %1 %2 %3 is not allowStreaming").arg(artist, album_title, title)); @@ -1126,8 +1128,8 @@ void TidalRequest::ParseSong(Song &song, const QJsonObject &json_obj, const Arti } QUrl cover_url; - if (obj_album.contains(QLatin1String("cover"))) { - const QString cover = obj_album[QLatin1String("cover")].toString().replace(QLatin1Char('-'), QLatin1Char('/')); + if (obj_album.contains("cover"_L1)) { + const QString cover = obj_album["cover"_L1].toString().replace(u'-', u'/'); if (!cover.isEmpty()) { cover_url.setUrl(QStringLiteral("%1/images/%2/%3.jpg").arg(QLatin1String(kResourcesUrl), cover, coversize_)); } @@ -1281,8 +1283,8 @@ void TidalRequest::AlbumCoverReceived(QNetworkReply *reply, const QString &album } QString mimetype = reply->header(QNetworkRequest::ContentTypeHeader).toString(); - if (mimetype.contains(QLatin1Char(';'))) { - mimetype = mimetype.left(mimetype.indexOf(QLatin1Char(';'))); + if (mimetype.contains(u';')) { + mimetype = mimetype.left(mimetype.indexOf(u';')); } if (!ImageUtils::SupportedImageMimeTypes().contains(mimetype, Qt::CaseInsensitive) && !ImageUtils::SupportedImageFormats().contains(mimetype, Qt::CaseInsensitive)) { Error(QStringLiteral("Unsupported mimetype for image reader %1 for %2").arg(mimetype, url.toString())); diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index 3d012c737..2378b19f0 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -65,8 +65,9 @@ #include "settings/settingsdialog.h" #include "settings/tidalsettingspage.h" -using std::make_shared; using namespace std::chrono_literals; +using namespace Qt::StringLiterals; +using std::make_shared; const Song::Source TidalService::kSource = Song::Source::Tidal; @@ -292,7 +293,7 @@ void TidalService::StartAuthorization(const QString &client_id) { code_verifier_ = Utilities::CryptographicRandomString(44); code_challenge_ = QString::fromLatin1(QCryptographicHash::hash(code_verifier_.toUtf8(), QCryptographicHash::Sha256).toBase64(QByteArray::Base64UrlEncoding)); - if (code_challenge_.lastIndexOf(QLatin1Char('=')) == code_challenge_.length() - 1) { + if (code_challenge_.lastIndexOf(u'=') == code_challenge_.length() - 1) { code_challenge_.chop(1); } @@ -425,10 +426,10 @@ void TidalService::AccessTokenRequestFinished(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("userMessage"))) { - int status = json_obj[QLatin1String("status")].toInt(); - int sub_status = json_obj[QLatin1String("subStatus")].toInt(); - QString user_message = json_obj[QLatin1String("userMessage")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("userMessage"_L1)) { + int status = json_obj["status"_L1].toInt(); + int sub_status = json_obj["subStatus"_L1].toInt(); + QString user_message = json_obj["userMessage"_L1].toString(); login_errors_ << QStringLiteral("Authentication failure: %1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status); } } @@ -470,23 +471,23 @@ void TidalService::AccessTokenRequestFinished(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("access_token")) || !json_obj.contains(QLatin1String("expires_in"))) { + if (!json_obj.contains("access_token"_L1) || !json_obj.contains("expires_in"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing access_token or expires_in"), json_obj); return; } - access_token_ = json_obj[QLatin1String("access_token")].toString(); - expires_in_ = json_obj[QLatin1String("expires_in")].toInt(); - if (json_obj.contains(QLatin1String("refresh_token"))) { - refresh_token_ = json_obj[QLatin1String("refresh_token")].toString(); + access_token_ = json_obj["access_token"_L1].toString(); + expires_in_ = json_obj["expires_in"_L1].toInt(); + if (json_obj.contains("refresh_token"_L1)) { + refresh_token_ = json_obj["refresh_token"_L1].toString(); } login_time_ = QDateTime::currentSecsSinceEpoch(); - if (json_obj.contains(QLatin1String("user")) && json_obj[QLatin1String("user")].isObject()) { - QJsonObject obj_user = json_obj[QLatin1String("user")].toObject(); - if (obj_user.contains(QLatin1String("countryCode")) && obj_user.contains(QLatin1String("userId"))) { - country_code_ = obj_user[QLatin1String("countryCode")].toString(); - user_id_ = obj_user[QLatin1String("userId")].toInt(); + if (json_obj.contains("user"_L1) && json_obj["user"_L1].isObject()) { + QJsonObject obj_user = json_obj["user"_L1].toObject(); + if (obj_user.contains("countryCode"_L1) && obj_user.contains("userId"_L1)) { + country_code_ = obj_user["countryCode"_L1].toString(); + user_id_ = obj_user["userId"_L1].toInt(); } } @@ -575,10 +576,10 @@ void TidalService::HandleAuthReply(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error == QJsonParseError::NoError && !json_doc.isEmpty() && json_doc.isObject()) { QJsonObject json_obj = json_doc.object(); - if (!json_obj.isEmpty() && json_obj.contains(QLatin1String("status")) && json_obj.contains(QLatin1String("userMessage"))) { - int status = json_obj[QLatin1String("status")].toInt(); - int sub_status = json_obj[QLatin1String("subStatus")].toInt(); - QString user_message = json_obj[QLatin1String("userMessage")].toString(); + if (!json_obj.isEmpty() && json_obj.contains("status"_L1) && json_obj.contains("userMessage"_L1)) { + int status = json_obj["status"_L1].toInt(); + int sub_status = json_obj["subStatus"_L1].toInt(); + QString user_message = json_obj["userMessage"_L1].toString(); login_errors_ << QStringLiteral("Authentication failure: %1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status); } } @@ -623,14 +624,14 @@ void TidalService::HandleAuthReply(QNetworkReply *reply) { return; } - if (!json_obj.contains(QLatin1String("userId")) || !json_obj.contains(QLatin1String("sessionId")) || !json_obj.contains(QLatin1String("countryCode"))) { + if (!json_obj.contains("userId"_L1) || !json_obj.contains("sessionId"_L1) || !json_obj.contains("countryCode"_L1)) { LoginError(QStringLiteral("Authentication reply from server is missing userId, sessionId or countryCode"), json_obj); return; } - country_code_ = json_obj[QLatin1String("countryCode")].toString(); - session_id_ = json_obj[QLatin1String("sessionId")].toString(); - user_id_ = json_obj[QLatin1String("userId")].toInt(); + country_code_ = json_obj["countryCode"_L1].toString(); + session_id_ = json_obj["sessionId"_L1].toString(); + user_id_ = json_obj["userId"_L1].toInt(); access_token_.clear(); refresh_token_.clear(); @@ -1009,7 +1010,7 @@ void TidalService::LoginError(const QString &error, const QVariant &debug) { QString error_html; for (const QString &e : std::as_const(login_errors_)) { qLog(Error) << "Tidal:" << e; - error_html += e + QLatin1String("
"); + error_html += e + "
"_L1; } if (debug.isValid()) qLog(Debug) << debug; diff --git a/src/tidal/tidalstreamurlrequest.cpp b/src/tidal/tidalstreamurlrequest.cpp index 14aae8e2b..117185549 100644 --- a/src/tidal/tidalstreamurlrequest.cpp +++ b/src/tidal/tidalstreamurlrequest.cpp @@ -42,6 +42,8 @@ #include "tidalbaserequest.h" #include "tidalstreamurlrequest.h" +using namespace Qt::StringLiterals; + TidalStreamURLRequest::TidalStreamURLRequest(TidalService *service, SharedPtr network, const QUrl &media_url, const uint id, QObject *parent) : TidalBaseRequest(service, network, parent), service_(service), @@ -169,22 +171,22 @@ void TidalStreamURLRequest::StreamURLReceived() { return; } - if (!json_obj.contains(QLatin1String("trackId"))) { + if (!json_obj.contains("trackId"_L1)) { Error(QStringLiteral("Invalid Json reply, stream missing trackId."), json_obj); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); return; } - int track_id = json_obj[QLatin1String("trackId")].toInt(); + int track_id = json_obj["trackId"_L1].toInt(); if (track_id != song_id_) { qLog(Debug) << "Tidal returned track ID" << track_id << "for" << media_url_; } Song::FileType filetype(Song::FileType::Stream); - if (json_obj.contains(QLatin1String("codec")) || json_obj.contains(QLatin1String("codecs"))) { + if (json_obj.contains("codec"_L1) || json_obj.contains("codecs"_L1)) { QString codec; - if (json_obj.contains(QLatin1String("codec"))) codec = json_obj[QLatin1String("codec")].toString().toLower(); - if (json_obj.contains(QLatin1String("codecs"))) codec = json_obj[QLatin1String("codecs")].toString().toLower(); + if (json_obj.contains("codec"_L1)) codec = json_obj["codec"_L1].toString().toLower(); + if (json_obj.contains("codecs"_L1)) codec = json_obj["codecs"_L1].toString().toLower(); filetype = Song::FiletypeByExtension(codec); if (filetype == Song::FileType::Unknown) { qLog(Debug) << "Tidal: Unknown codec" << codec; @@ -194,9 +196,9 @@ void TidalStreamURLRequest::StreamURLReceived() { QList urls; - if (json_obj.contains(QLatin1String("manifest"))) { + if (json_obj.contains("manifest"_L1)) { - QString manifest(json_obj[QLatin1String("manifest")].toString()); + QString manifest(json_obj["manifest"_L1].toString()); QByteArray data_manifest = QByteArray::fromBase64(manifest.toUtf8()); QXmlStreamReader xml_reader(data_manifest); @@ -215,9 +217,9 @@ void TidalStreamURLRequest::StreamURLReceived() { return; } - if (json_obj.contains(QLatin1String("encryptionType")) && json_obj.contains(QLatin1String("keyId"))) { - QString encryption_type = json_obj[QLatin1String("encryptionType")].toString(); - QString key_id = json_obj[QLatin1String("keyId")].toString(); + if (json_obj.contains("encryptionType"_L1) && json_obj.contains("keyId"_L1)) { + QString encryption_type = json_obj["encryptionType"_L1].toString(); + QString key_id = json_obj["keyId"_L1].toString(); if (!encryption_type.isEmpty() && !key_id.isEmpty()) { Error(tr("Received URL with %1 encrypted stream from Tidal. Strawberry does not currently support encrypted streams.").arg(encryption_type)); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); @@ -225,13 +227,13 @@ void TidalStreamURLRequest::StreamURLReceived() { } } - if (!json_obj.contains(QLatin1String("mimeType"))) { + if (!json_obj.contains("mimeType"_L1)) { Error(QStringLiteral("Invalid Json reply, stream url reply manifest is missing mimeType."), json_obj); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); return; } - QString mimetype = json_obj[QLatin1String("mimeType")].toString(); + QString mimetype = json_obj["mimeType"_L1].toString(); QMimeDatabase mimedb; const QStringList suffixes = mimedb.mimeTypeForName(mimetype).suffixes(); for (const QString &suffix : suffixes) { @@ -246,8 +248,8 @@ void TidalStreamURLRequest::StreamURLReceived() { } - if (json_obj.contains(QLatin1String("urls"))) { - QJsonValue json_urls = json_obj[QLatin1String("urls")]; + if (json_obj.contains("urls"_L1)) { + QJsonValue json_urls = json_obj["urls"_L1]; if (!json_urls.isArray()) { Error(QStringLiteral("Invalid Json reply, urls is not an array."), json_urls); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); @@ -259,8 +261,8 @@ void TidalStreamURLRequest::StreamURLReceived() { urls << QUrl(value.toString()); } } - else if (json_obj.contains(QLatin1String("url"))) { - QUrl new_url(json_obj[QLatin1String("url")].toString()); + else if (json_obj.contains("url"_L1)) { + QUrl new_url(json_obj["url"_L1].toString()); urls << new_url; if (filetype == Song::FileType::Stream) { // Guess filetype by filename extension in URL. @@ -269,8 +271,8 @@ void TidalStreamURLRequest::StreamURLReceived() { } } - if (json_obj.contains(QLatin1String("encryptionKey"))) { - QString encryption_key = json_obj[QLatin1String("encryptionKey")].toString(); + if (json_obj.contains("encryptionKey"_L1)) { + QString encryption_key = json_obj["encryptionKey"_L1].toString(); if (!encryption_key.isEmpty()) { Error(tr("Received URL with encrypted stream from Tidal. Strawberry does not currently support encrypted streams.")); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); @@ -278,9 +280,9 @@ void TidalStreamURLRequest::StreamURLReceived() { } } - if (json_obj.contains(QLatin1String("securityType")) && json_obj.contains(QLatin1String("securityToken"))) { - QString security_type = json_obj[QLatin1String("securityType")].toString(); - QString security_token = json_obj[QLatin1String("securityToken")].toString(); + if (json_obj.contains("securityType"_L1) && json_obj.contains("securityToken"_L1)) { + QString security_type = json_obj["securityType"_L1].toString(); + QString security_token = json_obj["securityToken"_L1].toString(); if (!security_type.isEmpty() && !security_token.isEmpty()) { Error(tr("Received URL with encrypted stream from Tidal. Strawberry does not currently support encrypted streams.")); Q_EMIT StreamURLFailure(id_, media_url_, errors_.constFirst()); diff --git a/src/transcoder/transcodedialog.cpp b/src/transcoder/transcodedialog.cpp index 709a0f267..ab52aa28c 100644 --- a/src/transcoder/transcodedialog.cpp +++ b/src/transcoder/transcodedialog.cpp @@ -67,6 +67,8 @@ #include "ui_transcodedialog.h" #include "ui_transcodelogdialog.h" +using namespace Qt::StringLiterals; + // winspool.h defines this :( #ifdef AddJob # undef AddJob @@ -315,7 +317,7 @@ void TranscodeDialog::UpdateStatusText() { sections << QStringLiteral("") + tr("%n failed", "", finished_failed_) + QStringLiteral(""); } - ui_->progress_text->setText(sections.join(QLatin1String(", "))); + ui_->progress_text->setText(sections.join(", "_L1)); } @@ -349,7 +351,7 @@ void TranscodeDialog::Import() { QStringList filenames; - const QStringList audio_types = QString::fromLatin1(FileView::kFileFilter).split(QLatin1Char(' '), Qt::SkipEmptyParts); + const QStringList audio_types = QString::fromLatin1(FileView::kFileFilter).split(u' ', Qt::SkipEmptyParts); QDirIterator files(path, audio_types, QDir::Files | QDir::Readable, QDirIterator::Subdirectories); while (files.hasNext()) { @@ -369,8 +371,8 @@ void TranscodeDialog::Import() { void TranscodeDialog::SetFilenames(const QStringList &filenames) { for (const QString &filename : filenames) { - QString name = filename.section(QLatin1Char('/'), -1, -1); - QString path = filename.section(QLatin1Char('/'), 0, -2); + QString name = filename.section(u'/', -1, -1); + QString path = filename.section(u'/', 0, -2); QTreeWidgetItem *item = new QTreeWidgetItem(ui_->files, QStringList() << name << path); item->setData(0, Qt::UserRole, filename); @@ -438,7 +440,7 @@ void TranscodeDialog::AddDestination() { // Returns the rightmost non-empty part of 'path'. QString TranscodeDialog::TrimPath(const QString &path) { - return path.section(QLatin1Char('/'), -1, -1, QString::SectionSkipEmpty); + return path.section(u'/', -1, -1, QString::SectionSkipEmpty); } QString TranscodeDialog::GetOutputFileName(const QString &input_filepath, const TranscoderPreset &preset) const { @@ -451,7 +453,7 @@ QString TranscodeDialog::GetOutputFileName(const QString &input_filepath, const } else { QString filename = TrimPath(input_filepath); - filename = filename.section(QLatin1Char('.'), 0, -2); + filename = filename.section(u'.', 0, -2); output_filepath = destination_path + QLatin1Char('/') + filename + QLatin1Char('.') + preset.extension_; } diff --git a/src/transcoder/transcoder.cpp b/src/transcoder/transcoder.cpp index 5c0a8343c..3b55fcef9 100644 --- a/src/transcoder/transcoder.cpp +++ b/src/transcoder/transcoder.cpp @@ -48,6 +48,7 @@ #include "core/settings.h" #include "transcoder.h" +using namespace Qt::StringLiterals; using std::make_shared; int Transcoder::JobFinishedEvent::sEventType = -1; @@ -95,8 +96,8 @@ GstElement *Transcoder::CreateElementForMimeType(GstElementFactoryListType eleme if (mime_type.isEmpty()) return nullptr; // HACK: Force mp4mux because it doesn't set any useful src caps - if (mime_type == QLatin1String("audio/mp4")) { - Q_EMIT LogLine(QStringLiteral("Using '%1' (rank %2)").arg(QLatin1String("mp4mux")).arg(-1)); + if (mime_type == "audio/mp4"_L1) { + Q_EMIT LogLine(QStringLiteral("Using '%1' (rank %2)").arg("mp4mux"_L1).arg(-1)); return CreateElement(QStringLiteral("mp4mux"), bin); } @@ -118,7 +119,7 @@ GstElement *Transcoder::CreateElementForMimeType(GstElementFactoryListType eleme if (gst_element_factory_can_src_any_caps(factory, target_caps)) { const QString name = QString::fromUtf8(GST_OBJECT_NAME(factory)); int rank = static_cast(gst_plugin_feature_get_rank(GST_PLUGIN_FEATURE(factory))); - if (name.startsWith(QLatin1String("avmux")) || name.startsWith(QLatin1String("avenc"))) { + if (name.startsWith("avmux"_L1) || name.startsWith("avenc"_L1)) { rank = -1; // ffmpeg usually sucks } suitable_elements_ << SuitableElement(name, rank); @@ -137,7 +138,7 @@ GstElement *Transcoder::CreateElementForMimeType(GstElementFactoryListType eleme Q_EMIT LogLine(QStringLiteral("Using '%1' (rank %2)").arg(best.name_).arg(best.rank_)); - if (best.name_ == QLatin1String("lamemp3enc")) { + if (best.name_ == "lamemp3enc"_L1) { // Special case: we need to add xingmux and id3v2mux to the pipeline when using lamemp3enc because it doesn't write the VBR or ID3v2 headers itself. Q_EMIT LogLine(QStringLiteral("Adding xingmux and id3v2mux to the pipeline")); @@ -198,7 +199,7 @@ Transcoder::Transcoder(QObject *parent, const QString &settings_postfix) // Initialize some settings for the lamemp3enc element. Settings s; - s.beginGroup(QLatin1String("Transcoder/lamemp3enc") + settings_postfix_); + s.beginGroup("Transcoder/lamemp3enc"_L1 + settings_postfix_); if (s.value("target").isNull()) { s.setValue("target", 1); // 1 == bitrate @@ -282,7 +283,7 @@ QString Transcoder::GetFile(const QString &input, const TranscoderPreset &preset if (!fileinfo_output.isFile() || fileinfo_output.filePath().isEmpty() || fileinfo_output.path().isEmpty() || fileinfo_output.fileName().isEmpty() || fileinfo_output.suffix().isEmpty()) { QFileInfo fileinfo_input(input); - QString temp_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/transcoder"); + QString temp_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + "/transcoder"_L1; if (!QDir(temp_dir).exists()) QDir().mkpath(temp_dir); QString filename = fileinfo_input.completeBaseName() + QLatin1Char('.') + preset.extension_; fileinfo_output.setFile(temp_dir + QLatin1Char('/') + filename); @@ -553,7 +554,7 @@ QMap Transcoder::GetProgress() const { void Transcoder::SetElementProperties(const QString &name, GObject *object) { Settings s; - s.beginGroup(QLatin1String("Transcoder/") + name + settings_postfix_); + s.beginGroup("Transcoder/"_L1 + name + settings_postfix_); guint properties_count = 0; GParamSpec **properties = g_object_class_list_properties(G_OBJECT_GET_CLASS(object), &properties_count); diff --git a/src/transcoder/transcoder.h b/src/transcoder/transcoder.h index 087e27164..31123718d 100644 --- a/src/transcoder/transcoder.h +++ b/src/transcoder/transcoder.h @@ -39,6 +39,8 @@ #include "core/shared_ptr.h" #include "core/song.h" +using namespace Qt::Literals::StringLiterals; + struct TranscoderPreset { explicit TranscoderPreset() : filetype_(Song::FileType::Unknown) {} TranscoderPreset(const Song::FileType filetype, const QString &name, const QString &extension, const QString &codec_mimetype, const QString &muxer_mimetype_ = QString()); @@ -55,7 +57,7 @@ class Transcoder : public QObject { Q_OBJECT public: - explicit Transcoder(QObject *parent = nullptr, const QString &settings_postfix = QLatin1String("")); + explicit Transcoder(QObject *parent = nullptr, const QString &settings_postfix = ""_L1); static TranscoderPreset PresetForFileType(const Song::FileType filetype); static QList GetAllPresets(); diff --git a/src/utilities/coverutils.cpp b/src/utilities/coverutils.cpp index 7057cfbd2..b9a029f61 100644 --- a/src/utilities/coverutils.cpp +++ b/src/utilities/coverutils.cpp @@ -31,6 +31,8 @@ #include "coverutils.h" #include "core/logging.h" +using namespace Qt::StringLiterals; + QByteArray CoverUtils::Sha1CoverHash(const QString &artist, const QString &album) { QCryptographicHash hash(QCryptographicHash::Sha1); @@ -43,18 +45,18 @@ QByteArray CoverUtils::Sha1CoverHash(const QString &artist, const QString &album QString CoverUtils::AlbumCoverFilename(QString artist, QString album, const QString &extension) { - artist.remove(QLatin1Char('/')).remove(QLatin1Char('\\')); - album.remove(QLatin1Char('/')).remove(QLatin1Char('\\')); + artist.remove(u'/').remove(u'\\'); + album.remove(u'/').remove(u'\\'); QString filename = artist + QLatin1Char('-') + album; filename = Utilities::Transliterate(filename.toLower()); - filename = filename.replace(QLatin1Char(' '), QLatin1Char('-')) - .replace(QLatin1String("--"), QLatin1String("-")) + filename = filename.replace(u' ', u'-') + .replace("--"_L1, "-"_L1) .remove(QRegularExpression(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption)) .simplified(); if (!extension.isEmpty()) { - filename.append(QLatin1Char('.')); + filename.append(u'.'); filename.append(extension); } @@ -76,7 +78,7 @@ QString CoverUtils::CoverFilePath(const CoverOptions &options, const Song::Sourc path = Song::ImageCacheDir(source); } - if (path.right(1) == QDir::separator() || path.right(1) == QLatin1Char('/')) { + if (path.right(1) == QDir::separator() || path.right(1) == u'/') { path.chop(1); } @@ -92,14 +94,14 @@ QString CoverUtils::CoverFilePath(const CoverOptions &options, const Song::Sourc options.cover_filename == CoverOptions::CoverFilename::Pattern && !options.cover_pattern.isEmpty()) { filename = CoverFilenameFromVariable(options, artist, album); - filename.remove(QRegularExpression(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption)).remove(QLatin1Char('/')).remove(QLatin1Char('\\')); + filename.remove(QRegularExpression(QLatin1String(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption)).remove(u'/').remove(u'\\'); if (options.cover_lowercase) filename = filename.toLower(); if (options.cover_replace_spaces) { static const QRegularExpression regex_whitespaces(QStringLiteral("\\s")); filename.replace(regex_whitespaces, QStringLiteral("-")); } if (!extension.isEmpty()) { - filename.append(QLatin1Char('.')); + filename.append(u'.'); filename.append(extension); } } @@ -146,7 +148,7 @@ QString CoverUtils::CoverFilenameFromSource(const Song::Source source, const QUr } if (!extension.isEmpty()) { - filename.append(QLatin1Char('.')); + filename.append(u'.'); filename.append(extension); } @@ -159,11 +161,11 @@ QString CoverUtils::CoverFilenameFromVariable(const CoverOptions &options, const album = Song::AlbumRemoveDisc(album); QString filename(options.cover_pattern); - filename.replace(QLatin1String("%albumartist"), artist); - filename.replace(QLatin1String("%artist"), artist); - filename.replace(QLatin1String("%album"), album); + filename.replace("%albumartist"_L1, artist); + filename.replace("%artist"_L1, artist); + filename.replace("%album"_L1, album); if (!extension.isEmpty()) { - filename.append(QLatin1Char('.')); + filename.append(u'.'); filename.append(extension); } return filename; diff --git a/src/utilities/envutils.cpp b/src/utilities/envutils.cpp index 8bf420742..bc1b51ccf 100644 --- a/src/utilities/envutils.cpp +++ b/src/utilities/envutils.cpp @@ -26,6 +26,8 @@ #include "envutils.h" +using namespace Qt::StringLiterals; + namespace Utilities { QString GetEnv(const QString &key) { @@ -52,7 +54,7 @@ QString DesktopEnvironment() { if (!qEnvironmentVariableIsEmpty("GNOME_DESKTOP_SESSION_ID")) return QStringLiteral("Gnome"); QString session = GetEnv(QStringLiteral("DESKTOP_SESSION")); - qint64 slash = session.lastIndexOf(QLatin1Char('/')); + qint64 slash = session.lastIndexOf(u'/'); if (slash != -1) { QSettings desktop_file(QStringLiteral("%1.desktop").arg(session), QSettings::IniFormat); desktop_file.beginGroup(QStringLiteral("Desktop Entry")); @@ -62,9 +64,9 @@ QString DesktopEnvironment() { session = session.mid(slash + 1); } - if (session == QLatin1String("kde")) return QStringLiteral("KDE"); - else if (session == QLatin1String("gnome")) return QStringLiteral("Gnome"); - else if (session == QLatin1String("xfce")) return QStringLiteral("XFCE"); + if (session == "kde"_L1) return QStringLiteral("KDE"); + else if (session == "gnome"_L1) return QStringLiteral("Gnome"); + else if (session == "xfce"_L1) return QStringLiteral("XFCE"); return QStringLiteral("Unknown"); diff --git a/src/utilities/filemanagerutils.cpp b/src/utilities/filemanagerutils.cpp index 9d920e124..0b7098b18 100644 --- a/src/utilities/filemanagerutils.cpp +++ b/src/utilities/filemanagerutils.cpp @@ -34,6 +34,8 @@ #include "filemanagerutils.h" +using namespace Qt::StringLiterals; + namespace Utilities { #if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS) @@ -48,9 +50,9 @@ void OpenInFileManager(const QString &path, const QUrl &url) { QString desktop_file = QString::fromUtf8(proc.readLine()).simplified(); QString xdg_data_dirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS")); if (xdg_data_dirs.isEmpty()) { - xdg_data_dirs = QLatin1String("/usr/local/share/:/usr/share/"); + xdg_data_dirs = "/usr/local/share/:/usr/share/"_L1; } - const QStringList data_dirs = xdg_data_dirs.split(QLatin1Char(':')); + const QStringList data_dirs = xdg_data_dirs.split(u':'); QString command; QStringList command_params; @@ -59,12 +61,12 @@ void OpenInFileManager(const QString &path, const QUrl &url) { if (!QFile::exists(desktop_file_path)) continue; QSettings setting(desktop_file_path, QSettings::IniFormat); setting.beginGroup(QStringLiteral("Desktop Entry")); - if (setting.contains(QLatin1String("Exec"))) { + if (setting.contains("Exec"_L1)) { QString cmd = setting.value(QStringLiteral("Exec")).toString(); if (cmd.isEmpty()) break; static const QRegularExpression regex(QStringLiteral("[%][a-zA-Z]*( |$)"), QRegularExpression::CaseInsensitiveOption); cmd = cmd.remove(regex); - command_params = cmd.split(QLatin1Char(' '), Qt::SkipEmptyParts); + command_params = cmd.split(u' ', Qt::SkipEmptyParts); command = command_params.first(); command_params.removeFirst(); } @@ -72,23 +74,23 @@ void OpenInFileManager(const QString &path, const QUrl &url) { if (!command.isEmpty()) break; } - if (command.startsWith(QLatin1String("/usr/bin/"))) { - command = command.split(QLatin1Char('/')).last(); + if (command.startsWith("/usr/bin/"_L1)) { + command = command.split(u'/').last(); } - if (command.isEmpty() || command == QLatin1String("exo-open")) { + if (command.isEmpty() || command == "exo-open"_L1) { QDesktopServices::openUrl(QUrl::fromLocalFile(path)); } - else if (command.startsWith(QLatin1String("nautilus")) || - command.startsWith(QLatin1String("dolphin")) || - command.startsWith(QLatin1String("konqueror")) || - command.startsWith(QLatin1String("kfmclient"))) { + else if (command.startsWith("nautilus"_L1) || + command.startsWith("dolphin"_L1) || + command.startsWith("konqueror"_L1) || + command.startsWith("kfmclient"_L1)) { proc.startDetached(command, QStringList() << command_params << QStringLiteral("--select") << url.toLocalFile()); } - else if (command.startsWith(QLatin1String("caja"))) { + else if (command.startsWith("caja"_L1)) { proc.startDetached(command, QStringList() << command_params << QStringLiteral("--no-desktop") << path); } - else if (command.startsWith(QLatin1String("pcmanfm")) || command.startsWith(QLatin1String("thunar")) || command.startsWith(QLatin1String("spacefm"))) { + else if (command.startsWith("pcmanfm"_L1) || command.startsWith("thunar"_L1) || command.startsWith("spacefm"_L1)) { proc.startDetached(command, QStringList() << command_params << path); } else { diff --git a/src/utilities/fileutils.cpp b/src/utilities/fileutils.cpp index 7110e6521..0be0b3499 100644 --- a/src/utilities/fileutils.cpp +++ b/src/utilities/fileutils.cpp @@ -86,7 +86,7 @@ bool Copy(QIODevice *source, QIODevice *destination) { bool CopyRecursive(const QString &source, const QString &destination) { // Make the destination directory - QString dir_name = source.section(QLatin1Char('/'), -1, -1); + QString dir_name = source.section(u'/', -1, -1); QString dest_path = destination + QLatin1Char('/') + dir_name; QDir().mkpath(dest_path); diff --git a/src/utilities/macaddrutils.cpp b/src/utilities/macaddrutils.cpp index 7bf6ac3f3..1c7ec45ed 100644 --- a/src/utilities/macaddrutils.cpp +++ b/src/utilities/macaddrutils.cpp @@ -23,6 +23,8 @@ #include "macaddrutils.h" +using namespace Qt::StringLiterals; + namespace Utilities { QString MacAddress() { @@ -31,7 +33,7 @@ QString MacAddress() { for (QNetworkInterface &netif : QNetworkInterface::allInterfaces()) { if ( - (netif.hardwareAddress() == QLatin1String("00:00:00:00:00:00")) || + (netif.hardwareAddress() == "00:00:00:00:00:00"_L1) || (netif.flags() & QNetworkInterface::IsLoopBack) || !(netif.flags() & QNetworkInterface::IsUp) || !(netif.flags() & QNetworkInterface::IsRunning) @@ -41,7 +43,7 @@ QString MacAddress() { } } - if (ret.isEmpty()) ret = QLatin1String("00:00:00:00:00:00"); + if (ret.isEmpty()) ret = "00:00:00:00:00:00"_L1; return ret; diff --git a/src/utilities/strutils.cpp b/src/utilities/strutils.cpp index f98562a31..f3d4b4afe 100644 --- a/src/utilities/strutils.cpp +++ b/src/utilities/strutils.cpp @@ -27,6 +27,8 @@ #include "strutils.h" #include "core/song.h" +using namespace Qt::StringLiterals; + namespace Utilities { QString PrettySize(const quint64 bytes) { @@ -35,7 +37,7 @@ QString PrettySize(const quint64 bytes) { if (bytes > 0LL) { if (bytes <= 1000LL) { - ret = QString::number(bytes) + QLatin1String(" bytes"); + ret = QString::number(bytes) + " bytes"_L1; } else if (bytes <= 1000LL * 1000LL) { ret = QString::asprintf("%.1f KB", static_cast(bytes) / 1000.0F); @@ -56,7 +58,7 @@ QString PrettySize(const QSize size) { } QString PathWithoutFilenameExtension(const QString &filename) { - if (filename.section(QLatin1Char('/'), -1, -1).contains(QLatin1Char('.'))) return filename.section(QLatin1Char('.'), 0, -2); + if (filename.section(u'/', -1, -1).contains(u'.')) return filename.section(u'.', 0, -2); return filename; } @@ -86,7 +88,7 @@ QStringList Prepend(const QString &text, const QStringList &list) { QStringList Updateify(const QStringList &list) { QStringList ret(list); - for (int i = 0; i < ret.count(); ++i) ret[i].prepend(ret[i] + QLatin1String(" = :")); + for (int i = 0; i < ret.count(); ++i) ret[i].prepend(ret[i] + " = :"_L1); return ret; } @@ -94,17 +96,17 @@ QStringList Updateify(const QStringList &list) { QString DecodeHtmlEntities(const QString &text) { QString copy(text); - copy.replace(QLatin1String("&"), QLatin1String("&")) - .replace(QLatin1String("&"), QLatin1String("&")) - .replace(QLatin1String("""), QLatin1String("\"")) - .replace(QLatin1String("""), QLatin1String("\"")) - .replace(QLatin1String("'"), QLatin1String("'")) - .replace(QLatin1String("'"), QLatin1String("'")) - .replace(QLatin1String("<"), QLatin1String("<")) - .replace(QLatin1String("<"), QLatin1String("<")) - .replace(QLatin1String(">"), QLatin1String(">")) - .replace(QLatin1String(">"), QLatin1String(">")) - .replace(QLatin1String("'"), QLatin1String("'")); + copy.replace("&"_L1, "&"_L1) + .replace("&"_L1, "&"_L1) + .replace("""_L1, "\""_L1) + .replace("""_L1, "\""_L1) + .replace("'"_L1, "'"_L1) + .replace("'"_L1, "'"_L1) + .replace("<"_L1, "<"_L1) + .replace("<"_L1, "<"_L1) + .replace(">"_L1, ">"_L1) + .replace(">"_L1, ">"_L1) + .replace("'"_L1, "'"_L1); return copy; @@ -137,61 +139,61 @@ QString ReplaceVariable(const QString &variable, const Song &song, const QString QString value = variable; - if (variable == QLatin1String("%title%")) { + if (variable == "%title%"_L1) { value = song.PrettyTitle(); } - else if (variable == QLatin1String("%album%")) { + else if (variable == "%album%"_L1) { value = song.album(); } - else if (variable == QLatin1String("%artist%")) { + else if (variable == "%artist%"_L1) { value = song.artist(); } - else if (variable == QLatin1String("%albumartist%")) { + else if (variable == "%albumartist%"_L1) { value = song.effective_albumartist(); } - else if (variable == QLatin1String("%track%")) { + else if (variable == "%track%"_L1) { value.setNum(song.track()); } - else if (variable == QLatin1String("%disc%")) { + else if (variable == "%disc%"_L1) { value.setNum(song.disc()); } - else if (variable == QLatin1String("%year%")) { + else if (variable == "%year%"_L1) { value = song.PrettyYear(); } - else if (variable == QLatin1String("%originalyear%")) { + else if (variable == "%originalyear%"_L1) { value = song.PrettyOriginalYear(); } - else if (variable == QLatin1String("%genre%")) { + else if (variable == "%genre%"_L1) { value = song.genre(); } - else if (variable == QLatin1String("%composer%")) { + else if (variable == "%composer%"_L1) { value = song.composer(); } - else if (variable == QLatin1String("%performer%")) { + else if (variable == "%performer%"_L1) { value = song.performer(); } - else if (variable == QLatin1String("%grouping%")) { + else if (variable == "%grouping%"_L1) { value = song.grouping(); } - else if (variable == QLatin1String("%length%")) { + else if (variable == "%length%"_L1) { value = song.PrettyLength(); } - else if (variable == QLatin1String("%filename%")) { + else if (variable == "%filename%"_L1) { value = song.basefilename(); } - else if (variable == QLatin1String("%url%")) { + else if (variable == "%url%"_L1) { value = song.url().toString(); } - else if (variable == QLatin1String("%playcount%")) { + else if (variable == "%playcount%"_L1) { value.setNum(song.playcount()); } - else if (variable == QLatin1String("%skipcount%")) { + else if (variable == "%skipcount%"_L1) { value.setNum(song.skipcount()); } - else if (variable == QLatin1String("%rating%")) { + else if (variable == "%rating%"_L1) { value = song.PrettyRating(); } - else if (variable == QLatin1String("%newline%")) { + else if (variable == "%newline%"_L1) { return QString(newline); // No HTML escaping, return immediately. } diff --git a/src/utilities/timeutils.cpp b/src/utilities/timeutils.cpp index 3b52cc7e6..817409c47 100644 --- a/src/utilities/timeutils.cpp +++ b/src/utilities/timeutils.cpp @@ -67,7 +67,7 @@ QString WordyTime(const quint64 seconds) { if (days > 0) parts << (days == 1 ? QObject::tr("1 day") : QObject::tr("%1 days").arg(days)); parts << PrettyTime(static_cast(seconds - days * 60 * 60 * 24)); - return parts.join(QLatin1Char(' ')); + return parts.join(u' '); } diff --git a/src/widgets/fancytabbar.cpp b/src/widgets/fancytabbar.cpp index 5b8ba3a88..c7e085fb6 100644 --- a/src/widgets/fancytabbar.cpp +++ b/src/widgets/fancytabbar.cpp @@ -37,6 +37,8 @@ #include "fancytabwidget.h" #include "fancytabdata.h" +using namespace Qt::StringLiterals; + namespace { constexpr int TabSize_LargeSidebarMinWidth = 70; } // namespace @@ -50,7 +52,7 @@ FancyTabBar::FancyTabBar(QWidget *parent) : } QString FancyTabBar::TabText(const int index) const { - return tabText(index).isEmpty() ? QLatin1String("") : tabData(index).value()->label(); + return tabText(index).isEmpty() ? ""_L1 : tabData(index).value()->label(); } QSize FancyTabBar::sizeHint() const { diff --git a/src/widgets/fancytabwidget.cpp b/src/widgets/fancytabwidget.cpp index d27057c7d..3a468bd12 100644 --- a/src/widgets/fancytabwidget.cpp +++ b/src/widgets/fancytabwidget.cpp @@ -49,6 +49,7 @@ #include "settings/appearancesettingspage.h" using namespace std::chrono_literals; +using namespace Qt::StringLiterals; namespace { constexpr int IconSize_LargeSidebar = 40; @@ -209,12 +210,12 @@ void FancyTabWidget::SetMode(const Mode mode) { if (previous_mode == Mode::IconOnlyTabs && mode != Mode::IconOnlyTabs) { for (int i = 0; i < count(); ++i) { tabBar()->setTabText(i, tabBar()->tabData(i).value()->label()); - tabBar()->setTabToolTip(i, QLatin1String("")); + tabBar()->setTabToolTip(i, ""_L1); } } else if (previous_mode != Mode::IconOnlyTabs && mode == Mode::IconOnlyTabs) { for (int i = 0; i < count(); ++i) { - tabBar()->setTabText(i, QLatin1String("")); + tabBar()->setTabText(i, ""_L1); tabBar()->setTabToolTip(i, tabBar()->tabData(i).value()->label()); } } diff --git a/src/widgets/fileview.cpp b/src/widgets/fileview.cpp index d5089ef66..acd29e29d 100644 --- a/src/widgets/fileview.cpp +++ b/src/widgets/fileview.cpp @@ -95,7 +95,7 @@ FileView::FileView(QWidget *parent) QObject::connect(ui_->list, &FileViewList::EditTags, this, &FileView::EditTags); QString filter = QLatin1String(FileView::kFileFilter); - filter_list_ << filter.split(QLatin1Char(' ')); + filter_list_ << filter.split(u' '); ReloadSettings(); diff --git a/src/widgets/multiloadingindicator.cpp b/src/widgets/multiloadingindicator.cpp index 58efaaf12..5c6db849e 100644 --- a/src/widgets/multiloadingindicator.cpp +++ b/src/widgets/multiloadingindicator.cpp @@ -34,6 +34,8 @@ #include "multiloadingindicator.h" #include "widgets/busyindicator.h" +using namespace Qt::StringLiterals; + namespace { constexpr int kVerticalPadding = 4; constexpr int kHorizontalPadding = 6; @@ -84,10 +86,10 @@ void MultiLoadingIndicator::UpdateText() { strings << task_text; } - text_ = strings.join(QLatin1String(", ")); + text_ = strings.join(", "_L1); if (!text_.isEmpty()) { text_[0] = text_[0].toUpper(); - text_ += QLatin1String("..."); + text_ += "..."_L1; } Q_EMIT TaskCountChange(static_cast(tasks.count())); diff --git a/src/widgets/playingwidget.cpp b/src/widgets/playingwidget.cpp index 3d7cb6c27..008d374d7 100644 --- a/src/widgets/playingwidget.cpp +++ b/src/widgets/playingwidget.cpp @@ -45,6 +45,7 @@ #include "covermanager/albumcoverchoicecontroller.h" #include "playingwidget.h" +using namespace Qt::StringLiterals; using std::make_unique; namespace { @@ -407,16 +408,16 @@ void PlayingWidget::UpdateDetailsText() { switch (mode_) { case Mode::SmallSongDetails: details_->setTextWidth(-1); - html += QLatin1String("

"); + html += "

"_L1; break; case Mode::LargeSongDetails: details_->setTextWidth(desired_height_); - html += QLatin1String("

"); + html += "

"_L1; break; } html += QStringLiteral("%1
%2
%3").arg(song_.PrettyTitle().toHtmlEscaped(), song_.artist().toHtmlEscaped(), song_.album().toHtmlEscaped()); - html += QLatin1String("

"); + html += "

"_L1; details_->setHtml(html); diff --git a/src/widgets/searchfield_mac.mm b/src/widgets/searchfield_mac.mm index 95fd72bf5..cc66d110d 100644 --- a/src/widgets/searchfield_mac.mm +++ b/src/widgets/searchfield_mac.mm @@ -37,6 +37,8 @@ THE SOFTWARE. #include "searchfield.h" #include "qocoa_mac.h" +using namespace Qt::Literals::StringLiterals; + class SearchFieldPrivate : public QObject { public: @@ -156,19 +158,19 @@ class SearchFieldPrivate : public QObject { if ([event type] == NSEventTypeKeyDown && [event modifierFlags] & NSEventModifierFlagCommand) { const QString keyString = toQString([event characters]); - if (keyString == QLatin1String("a")) { // Cmd+a + if (keyString == "a"_L1) { // Cmd+a [self performSelector:@selector(selectText:)]; return YES; } - else if (keyString == QLatin1String("c")) { // Cmd+c + else if (keyString == "c"_L1) { // Cmd+c [[self currentEditor] copy: nil]; return YES; } - else if (keyString == QLatin1String("v")) { // Cmd+v + else if (keyString == "v"_L1) { // Cmd+v [[self currentEditor] paste: nil]; return YES; } - else if (keyString == QLatin1String("x")) { // Cmd+x + else if (keyString == "x"_L1) { // Cmd+x [[self currentEditor] cut: nil]; return YES; } diff --git a/tests/src/collectionbackend_test.cpp b/tests/src/collectionbackend_test.cpp index 2d568920c..5fc6c4d0c 100644 --- a/tests/src/collectionbackend_test.cpp +++ b/tests/src/collectionbackend_test.cpp @@ -36,6 +36,7 @@ #include "collection/collectionbackend.h" #include "collection/collection.h" +using namespace Qt::StringLiterals; using std::make_unique; using std::make_shared; @@ -158,7 +159,7 @@ class SingleSong : public CollectionBackendTest { TEST_F(SingleSong, GetSongWithNoAlbum) { - song_.set_album(QLatin1String("")); + song_.set_album(""_L1); AddDummySong(); if (HasFatalFailure()) return; @@ -166,7 +167,7 @@ TEST_F(SingleSong, GetSongWithNoAlbum) { CollectionBackend::AlbumList albums = backend_->GetAllAlbums(); EXPECT_EQ(1, albums.size()); EXPECT_EQ(QStringLiteral("Artist"), albums[0].album_artist); - EXPECT_EQ(QLatin1String(""), albums[0].album); + EXPECT_EQ(""_L1, albums[0].album); } diff --git a/tests/src/collectionmodel_test.cpp b/tests/src/collectionmodel_test.cpp index 2eabd4d74..78c68b974 100644 --- a/tests/src/collectionmodel_test.cpp +++ b/tests/src/collectionmodel_test.cpp @@ -39,6 +39,7 @@ #include "collection/collectionmodel.h" #include "collection/collectionfilter.h" +using namespace Qt::StringLiterals; using std::make_unique; using std::make_shared; @@ -171,7 +172,7 @@ TEST_F(CollectionModelTest, MixedCaseHeaders) { TEST_F(CollectionModelTest, UnknownArtists) { - AddSong(QStringLiteral("Title"), QLatin1String(""), QStringLiteral("Album"), 123); + AddSong(QStringLiteral("Title"), ""_L1, QStringLiteral("Album"), 123); ASSERT_EQ(1, model_->rowCount(QModelIndex())); QModelIndex unknown_index = model_->index(0, 0, QModelIndex()); @@ -184,7 +185,7 @@ TEST_F(CollectionModelTest, UnknownArtists) { TEST_F(CollectionModelTest, UnknownAlbums) { - AddSong(QStringLiteral("Title"), QStringLiteral("Artist"), QLatin1String(""), 123); + AddSong(QStringLiteral("Title"), QStringLiteral("Artist"), ""_L1, 123); AddSong(QStringLiteral("Title"), QStringLiteral("Artist"), QStringLiteral("Album"), 123); QModelIndex artist_index = model_->index(1, 0, QModelIndex()); diff --git a/tests/src/organizeformat_test.cpp b/tests/src/organizeformat_test.cpp index b407c0648..65f491c39 100644 --- a/tests/src/organizeformat_test.cpp +++ b/tests/src/organizeformat_test.cpp @@ -29,6 +29,8 @@ #include +using namespace Qt::StringLiterals; + // clazy:excludeall=returning-void-expression class OrganizeFormatTest : public ::testing::Test { @@ -148,7 +150,7 @@ TEST_F(OrganizeFormatTest, ReplaceNonAscii) { format_.set_remove_non_ascii(true); EXPECT_EQ(QStringLiteral("Royksopp"), format_.GetFilenameForSong(song_).filename); - song_.set_artist(QLatin1String("")); + song_.set_artist(""_L1); EXPECT_EQ(QLatin1String(""), format_.GetFilenameForSong(song_).filename); song_.set_artist(QStringLiteral("Владимир Высоцкий")); diff --git a/tests/src/songplaylistitem_test.cpp b/tests/src/songplaylistitem_test.cpp index 7ec37ca48..e26a1bc04 100644 --- a/tests/src/songplaylistitem_test.cpp +++ b/tests/src/songplaylistitem_test.cpp @@ -54,8 +54,8 @@ class SongPlaylistItemTest : public ::testing::TestWithParam { item_ = make_unique(song_); - if (!absolute_file_name_.startsWith(QLatin1Char('/'))) - absolute_file_name_.prepend(QLatin1Char('/')); + if (!absolute_file_name_.startsWith(u'/')) + absolute_file_name_.prepend(u'/'); } Song song_; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) diff --git a/tests/src/test_utils.cpp b/tests/src/test_utils.cpp index 31428d9cb..72f9f2b5b 100644 --- a/tests/src/test_utils.cpp +++ b/tests/src/test_utils.cpp @@ -62,7 +62,7 @@ void PrintTo(const ::QUrl &url, std::ostream &os) { TemporaryResource::TemporaryResource(const QString &filename, QObject *parent) : QTemporaryFile(parent) { - setFileTemplate(QDir::tempPath() + QStringLiteral("/strawberry_test-XXXXXX.") + filename.section(QLatin1Char('.'), -1, -1)); + setFileTemplate(QDir::tempPath() + QStringLiteral("/strawberry_test-XXXXXX.") + filename.section(u'.', -1, -1)); open(); QFile resource(filename); diff --git a/tests/src/utilities_test.cpp b/tests/src/utilities_test.cpp index 7a163c03a..01e0888de 100644 --- a/tests/src/utilities_test.cpp +++ b/tests/src/utilities_test.cpp @@ -38,6 +38,8 @@ #include "core/logging.h" #include "core/temporaryfile.h" +using namespace Qt::StringLiterals; + TEST(UtilitiesTest, PrettyTimeDelta) { ASSERT_EQ(Utilities::PrettyTimeDelta(60), QStringLiteral("+1:00")); @@ -158,7 +160,7 @@ TEST(UtilitiesTest, SetEnvGetEnv) { Utilities::SetEnv(var.toUtf8().constData(), value); ASSERT_EQ(Utilities::GetEnv(var), value); - Utilities::SetEnv(var.toUtf8().constData(), QLatin1String("")); + Utilities::SetEnv(var.toUtf8().constData(), ""_L1); } @@ -201,24 +203,24 @@ TEST(UtilitiesTest, ReplaceVariable) { song.set_playcount(90); song.set_rating(1.0); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%title%"), song, QLatin1String("")), song.title()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%album%"), song, QLatin1String("")), song.album()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%artist%"), song, QLatin1String("")), song.artist()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%albumartist%"), song, QLatin1String("")), song.effective_albumartist()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%track%"), song, QLatin1String("")), QString::number(song.track())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%disc%"), song, QLatin1String("")), QString::number(song.disc())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%year%"), song, QLatin1String("")), QString::number(song.year())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%originalyear%"), song, QLatin1String("")), QString::number(song.originalyear())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%genre%"), song, QLatin1String("")), song.genre()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%composer%"), song, QLatin1String("")), song.composer()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%performer%"), song, QLatin1String("")), song.performer()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%grouping%"), song, QLatin1String("")), song.grouping()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%length%"), song, QLatin1String("")), song.PrettyLength()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%filename%"), song, QLatin1String("")), song.basefilename()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%url%"), song, QLatin1String("")), song.url().toString()); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%playcount%"), song, QLatin1String("")), QString::number(song.playcount())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%skipcount%"), song, QLatin1String("")), QString::number(song.skipcount())); - ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%rating%"), song, QLatin1String("")), song.PrettyRating()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%title%"), song, ""_L1), song.title()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%album%"), song, ""_L1), song.album()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%artist%"), song, ""_L1), song.artist()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%albumartist%"), song, ""_L1), song.effective_albumartist()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%track%"), song, ""_L1), QString::number(song.track())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%disc%"), song, ""_L1), QString::number(song.disc())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%year%"), song, ""_L1), QString::number(song.year())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%originalyear%"), song, ""_L1), QString::number(song.originalyear())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%genre%"), song, ""_L1), song.genre()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%composer%"), song, ""_L1), song.composer()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%performer%"), song, ""_L1), song.performer()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%grouping%"), song, ""_L1), song.grouping()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%length%"), song, ""_L1), song.PrettyLength()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%filename%"), song, ""_L1), song.basefilename()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%url%"), song, ""_L1), song.url().toString()); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%playcount%"), song, ""_L1), QString::number(song.playcount())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%skipcount%"), song, ""_L1), QString::number(song.skipcount())); + ASSERT_EQ(Utilities::ReplaceVariable(QStringLiteral("%rating%"), song, ""_L1), song.PrettyRating()); } @@ -243,7 +245,7 @@ TEST(UtilitiesTest, ReplaceMessage) { song.set_playcount(90); song.set_rating(1.0); - ASSERT_EQ(Utilities::ReplaceMessage(QStringLiteral("%title% - %artist%"), song, QLatin1String("")), song.title() + QStringLiteral(" - ") + song.artist()); + ASSERT_EQ(Utilities::ReplaceMessage(QStringLiteral("%title% - %artist%"), song, ""_L1), song.title() + QStringLiteral(" - ") + song.artist()); }