Use QStringLiteral
This commit is contained in:
parent
3cfffa5fbb
commit
58944993b8
@ -158,7 +158,7 @@ static void MessageHandler(QtMsgType type, const QMessageLogContext&, const QStr
|
||||
}
|
||||
|
||||
for (const QString &line : message.split('\n')) {
|
||||
BufferedDebug d = CreateLogger<BufferedDebug>(level, "unknown", -1, nullptr);
|
||||
BufferedDebug d = CreateLogger<BufferedDebug>(level, QStringLiteral("unknown"), -1, nullptr);
|
||||
d << line.toLocal8Bit().constData();
|
||||
if (d.buf_) {
|
||||
d.buf_->close();
|
||||
@ -228,7 +228,7 @@ static QString ParsePrettyFunction(const char *pretty_function) {
|
||||
QString class_name = pretty_function;
|
||||
const qint64 paren = class_name.indexOf('(');
|
||||
if (paren != -1) {
|
||||
const qint64 colons = class_name.lastIndexOf("::", paren);
|
||||
const qint64 colons = class_name.lastIndexOf(QLatin1String("::"), paren);
|
||||
if (colons != -1) {
|
||||
class_name = class_name.left(colons);
|
||||
}
|
||||
@ -284,7 +284,7 @@ static T CreateLogger(Level level, const QString &class_name, int line, const ch
|
||||
}
|
||||
|
||||
T ret(type);
|
||||
ret.nospace() << QDateTime::currentDateTime().toString("hh:mm:ss.zzz").toLatin1().constData() << level_name << function_line.leftJustified(32).toLatin1().constData();
|
||||
ret.nospace() << QDateTime::currentDateTime().toString(QStringLiteral("hh:mm:ss.zzz")).toLatin1().constData() << level_name << function_line.leftJustified(32).toLatin1().constData();
|
||||
|
||||
return ret.space();
|
||||
|
||||
@ -310,7 +310,7 @@ QString CXXDemangle(const QString &mangled_function) {
|
||||
QString LinuxDemangle(const QString &symbol);
|
||||
QString LinuxDemangle(const QString &symbol) {
|
||||
|
||||
QRegularExpression regex("\\(([^+]+)");
|
||||
QRegularExpression regex(QStringLiteral("\\(([^+]+)"));
|
||||
QRegularExpressionMatch match = regex.match(symbol);
|
||||
if (!match.hasMatch()) {
|
||||
return symbol;
|
||||
@ -392,7 +392,7 @@ namespace {
|
||||
|
||||
template<typename T>
|
||||
QString print_duration(T duration, const std::string &unit) {
|
||||
return QString("%1%2").arg(duration.count()).arg(unit.c_str());
|
||||
return QStringLiteral("%1%2").arg(duration.count()).arg(unit.c_str());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
@ -171,7 +171,7 @@ WorkerPool<HandlerType>::WorkerPool(QObject *parent)
|
||||
local_server_name_ = qApp->applicationName().toLower();
|
||||
|
||||
if (local_server_name_.isEmpty()) {
|
||||
local_server_name_ = "workerpool";
|
||||
local_server_name_ = QStringLiteral("workerpool");
|
||||
}
|
||||
|
||||
}
|
||||
@ -243,8 +243,8 @@ void WorkerPool<HandlerType>::DoStart() {
|
||||
QStringList search_path;
|
||||
search_path << QCoreApplication::applicationDirPath();
|
||||
#if defined(Q_OS_UNIX)
|
||||
search_path << "/usr/libexec";
|
||||
search_path << "/usr/local/libexec";
|
||||
search_path << QStringLiteral("/usr/libexec");
|
||||
search_path << QStringLiteral("/usr/local/libexec");
|
||||
#endif
|
||||
#if defined(Q_OS_MACOS)
|
||||
search_path << QDir::cleanPath(QCoreApplication::applicationDirPath() + "/../PlugIns");
|
||||
@ -294,7 +294,7 @@ void WorkerPool<HandlerType>::StartOneWorker(Worker *worker) {
|
||||
// Create a server, find an unused name and start listening
|
||||
forever {
|
||||
const quint32 unique_number = QRandomGenerator::global()->bounded(static_cast<quint32>(quint64(this) & 0xFFFFFFFF));
|
||||
const QString name = QString("%1_%2").arg(local_server_name_).arg(unique_number);
|
||||
const QString name = QStringLiteral("%1_%2").arg(local_server_name_).arg(unique_number);
|
||||
|
||||
if (worker->local_server_->listen(name)) {
|
||||
break;
|
||||
|
@ -135,7 +135,7 @@ TagReaderBase::Cover TagReaderBase::LoadCoverFromRequest(const QString &song_fil
|
||||
cover_image.save(&buffer, "JPEG");
|
||||
buffer.close();
|
||||
}
|
||||
return Cover(cover_data, "image/jpeg");
|
||||
return Cover(cover_data, QStringLiteral("image/jpeg"));
|
||||
}
|
||||
|
||||
return Cover();
|
||||
|
@ -36,16 +36,16 @@
|
||||
#include "tagreadertaglib.h"
|
||||
|
||||
bool GME::IsSupportedFormat(const QFileInfo &file_info) {
|
||||
return file_info.exists() && (file_info.completeSuffix().endsWith("spc", Qt::CaseInsensitive) || file_info.completeSuffix().endsWith("vgm"), Qt::CaseInsensitive);
|
||||
return file_info.exists() && (file_info.completeSuffix().endsWith(QLatin1String("spc"), Qt::CaseInsensitive) || file_info.completeSuffix().endsWith(QLatin1String("vgm")), Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
bool GME::ReadFile(const QFileInfo &file_info, spb::tagreader::SongMetadata *song_info) {
|
||||
|
||||
if (file_info.completeSuffix().endsWith("spc"), Qt::CaseInsensitive) {
|
||||
if (file_info.completeSuffix().endsWith(QLatin1String("spc")), Qt::CaseInsensitive) {
|
||||
SPC::Read(file_info, song_info);
|
||||
return true;
|
||||
}
|
||||
if (file_info.completeSuffix().endsWith("vgm", Qt::CaseInsensitive)) {
|
||||
if (file_info.completeSuffix().endsWith(QLatin1String("vgm"), Qt::CaseInsensitive)) {
|
||||
VGM::Read(file_info, song_info);
|
||||
return true;
|
||||
}
|
||||
@ -75,7 +75,7 @@ void GME::SPC::Read(const QFileInfo &file_info, spb::tagreader::SongMetadata *so
|
||||
qLog(Debug) << "Reading tags from SPC file" << file_info.fileName();
|
||||
|
||||
// Check for header -- more reliable than file name alone.
|
||||
if (!file.read(33).startsWith(QString("SNES-SPC700").toLatin1())) return;
|
||||
if (!file.read(33).startsWith(QStringLiteral("SNES-SPC700").toLatin1())) return;
|
||||
|
||||
// First order of business -- get any tag values that exist within the core file information.
|
||||
// These only allow for a certain number of bytes per field,
|
||||
@ -125,7 +125,7 @@ void GME::SPC::Read(const QFileInfo &file_info, spb::tagreader::SongMetadata *so
|
||||
// Check for XID6 data -- this is infrequently used, but being able to fill in data from this is ideal before trying to rely on APETAG values.
|
||||
// XID6 format follows EA's binary file format standard named "IFF"
|
||||
file.seek(XID6_OFFSET);
|
||||
if (has_id6 && file.read(4) == QString("xid6").toLatin1()) {
|
||||
if (has_id6 && file.read(4) == QStringLiteral("xid6").toLatin1()) {
|
||||
QByteArray xid6_head_data = file.read(4);
|
||||
if (xid6_head_data.size() >= 4) {
|
||||
qint64 xid6_size = xid6_head_data[0] | (xid6_head_data[1] << 8) | (xid6_head_data[2] << 16) | xid6_head_data[3];
|
||||
@ -195,7 +195,7 @@ void GME::VGM::Read(const QFileInfo &file_info, spb::tagreader::SongMetadata *so
|
||||
|
||||
qLog(Debug) << "Reading tags from VGM file" << file_info.fileName();
|
||||
|
||||
if (!file.read(4).startsWith(QString("Vgm ").toLatin1())) return;
|
||||
if (!file.read(4).startsWith(QStringLiteral("Vgm ").toLatin1())) return;
|
||||
|
||||
file.seek(GD3_TAG_PTR);
|
||||
QByteArray gd3_head = file.read(4);
|
||||
|
@ -677,7 +677,7 @@ bool TagReaderTagLib::ReadFile(const QString &filename, spb::tagreader::SongMeta
|
||||
// well, it wasn't set, but if the artist is VA assume it's a compilation
|
||||
const QString albumartist = QString::fromUtf8(song->albumartist().data(), static_cast<qint64>(song->albumartist().size()));
|
||||
const QString artist = QString::fromUtf8(song->artist().data(), static_cast<qint64>(song->artist().size()));
|
||||
if (artist.compare("various artists") == 0 || albumartist.compare("various artists") == 0) {
|
||||
if (artist.compare(QLatin1String("various artists")) == 0 || albumartist.compare(QLatin1String("various artists")) == 0) {
|
||||
song->set_compilation(true);
|
||||
}
|
||||
}
|
||||
@ -824,7 +824,7 @@ void TagReaderTagLib::SetVorbisComments(TagLib::Ogg::XiphComment *vorbis_comment
|
||||
vorbis_comment->addField("PERFORMER", StdStringToTaglibString(song.performer()), true);
|
||||
vorbis_comment->addField("GROUPING", StdStringToTaglibString(song.grouping()), true);
|
||||
vorbis_comment->addField("DISCNUMBER", QStringToTaglibString(song.disc() <= 0 ? QString() : QString::number(song.disc())), true);
|
||||
vorbis_comment->addField("COMPILATION", QStringToTaglibString(song.compilation() ? "1" : QString()), true);
|
||||
vorbis_comment->addField("COMPILATION", QStringToTaglibString(song.compilation() ? QStringLiteral("1") : QString()), true);
|
||||
|
||||
// Try to be coherent, the two forms are used but the first one is preferred
|
||||
|
||||
@ -849,19 +849,19 @@ bool TagReaderTagLib::SaveFile(const spb::tagreader::SaveFileRequest &request) c
|
||||
|
||||
QStringList save_tags_options;
|
||||
if (save_tags) {
|
||||
save_tags_options << "tags";
|
||||
save_tags_options << QStringLiteral("tags");
|
||||
}
|
||||
if (save_playcount) {
|
||||
save_tags_options << "playcount";
|
||||
save_tags_options << QStringLiteral("playcount");
|
||||
}
|
||||
if (save_rating) {
|
||||
save_tags_options << "rating";
|
||||
save_tags_options << QStringLiteral("rating");
|
||||
}
|
||||
if (save_cover) {
|
||||
save_tags_options << "embedded cover";
|
||||
save_tags_options << QStringLiteral("embedded cover");
|
||||
}
|
||||
|
||||
qLog(Debug) << "Saving" << save_tags_options.join(", ") << "to" << filename;
|
||||
qLog(Debug) << "Saving" << save_tags_options.join(QStringLiteral(", ")) << "to" << filename;
|
||||
|
||||
const Cover cover = LoadCoverFromRequest(request);
|
||||
|
||||
@ -1427,7 +1427,7 @@ void TagReaderTagLib::SetPlaycount(TagLib::APE::Tag *tag, const spb::tagreader::
|
||||
|
||||
void TagReaderTagLib::SetPlaycount(TagLib::ID3v2::Tag *tag, const spb::tagreader::SongMetadata &song) const {
|
||||
|
||||
SetUserTextFrame("FMPS_Playcount", QString::number(song.playcount()), tag);
|
||||
SetUserTextFrame(QStringLiteral("FMPS_Playcount"), QString::number(song.playcount()), tag);
|
||||
TagLib::ID3v2::PopularimeterFrame *frame = GetPOPMFrameFromTag(tag);
|
||||
if (frame) {
|
||||
frame->setCounter(song.playcount());
|
||||
@ -1546,7 +1546,7 @@ void TagReaderTagLib::SetRating(TagLib::APE::Tag *tag, const spb::tagreader::Son
|
||||
|
||||
void TagReaderTagLib::SetRating(TagLib::ID3v2::Tag *tag, const spb::tagreader::SongMetadata &song) const {
|
||||
|
||||
SetUserTextFrame("FMPS_Rating", QString::number(song.rating()), tag);
|
||||
SetUserTextFrame(QStringLiteral("FMPS_Rating"), QString::number(song.rating()), tag);
|
||||
TagLib::ID3v2::PopularimeterFrame *frame = GetPOPMFrameFromTag(tag);
|
||||
if (frame) {
|
||||
frame->setRating(ConvertToPOPMRating(song.rating()));
|
||||
|
@ -65,8 +65,8 @@ RainbowAnalyzer::RainbowAnalyzer(const RainbowType rbtype, QWidget *parent)
|
||||
background_brush_(QColor(0x0f, 0x43, 0x73)) {
|
||||
|
||||
rainbowtype = rbtype;
|
||||
cat_dash_[0] = QPixmap(":/pictures/nyancat.png");
|
||||
cat_dash_[1] = QPixmap(":/pictures/rainbowdash.png");
|
||||
cat_dash_[0] = QPixmap(QStringLiteral(":/pictures/nyancat.png"));
|
||||
cat_dash_[1] = QPixmap(QStringLiteral(":/pictures/rainbowdash.png"));
|
||||
memset(history_, 0, sizeof(history_));
|
||||
|
||||
for (int i = 0; i < kRainbowBands; ++i) {
|
||||
|
@ -175,9 +175,9 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
|
||||
// Do the dirs table
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET path=:path WHERE ROWID=:id").arg(dirs_table_));
|
||||
q.BindValue(":path", new_path);
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET path=:path WHERE ROWID=:id").arg(dirs_table_));
|
||||
q.BindValue(QStringLiteral(":path"), new_path);
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -192,9 +192,9 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
|
||||
// Do the subdirs table
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET path=:path || substr(path, %2) WHERE directory=:id").arg(subdirs_table_).arg(path_len));
|
||||
q.BindValue(":path", new_url);
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET path=:path || substr(path, %2) WHERE directory=:id").arg(subdirs_table_).arg(path_len));
|
||||
q.BindValue(QStringLiteral(":path"), new_url);
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -204,9 +204,9 @@ void CollectionBackend::ChangeDirPath(const int id, const QString &old_path, con
|
||||
// Do the songs table
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET url=:path || substr(url, %2) WHERE directory=:id").arg(songs_table_).arg(path_len));
|
||||
q.BindValue(":path", new_url);
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET url=:path || substr(url, %2) WHERE directory=:id").arg(songs_table_).arg(path_len));
|
||||
q.BindValue(QStringLiteral(":path"), new_url);
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -225,7 +225,7 @@ CollectionDirectoryList CollectionBackend::GetAllDirectories() {
|
||||
CollectionDirectoryList ret;
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, path FROM %1").arg(dirs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, path FROM %1").arg(dirs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return ret;
|
||||
@ -253,8 +253,8 @@ CollectionSubdirectoryList CollectionBackend::SubdirsInDirectory(const int id) {
|
||||
CollectionSubdirectoryList CollectionBackend::SubdirsInDirectory(const int id, QSqlDatabase &db) {
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT path, mtime FROM %1 WHERE directory_id = :dir").arg(subdirs_table_));
|
||||
q.BindValue(":dir", id);
|
||||
q.prepare(QStringLiteral("SELECT path, mtime FROM %1 WHERE directory_id = :dir").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":dir"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return CollectionSubdirectoryList();
|
||||
@ -279,7 +279,7 @@ void CollectionBackend::UpdateTotalSongCount() {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT COUNT(*) FROM %1 WHERE unavailable = 0").arg(songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT COUNT(*) FROM %1 WHERE unavailable = 0").arg(songs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -299,7 +299,7 @@ void CollectionBackend::UpdateTotalArtistCount() {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT COUNT(DISTINCT artist) FROM %1 WHERE unavailable = 0").arg(songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT COUNT(DISTINCT artist) FROM %1 WHERE unavailable = 0").arg(songs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -319,7 +319,7 @@ void CollectionBackend::UpdateTotalAlbumCount() {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT COUNT(*) FROM (SELECT DISTINCT effective_albumartist, album FROM %1 WHERE unavailable = 0)").arg(songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT COUNT(*) FROM (SELECT DISTINCT effective_albumartist, album FROM %1 WHERE unavailable = 0)").arg(songs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -342,8 +342,8 @@ void CollectionBackend::AddDirectory(const QString &path) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (path, subdirs) VALUES (:path, 1)").arg(dirs_table_));
|
||||
q.BindValue(":path", db_path);
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (path, subdirs) VALUES (:path, 1)").arg(dirs_table_));
|
||||
q.BindValue(QStringLiteral(":path"), db_path);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -370,8 +370,8 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
|
||||
// Delete the subdirs that were in this directory
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DELETE FROM %1 WHERE directory_id = :id").arg(subdirs_table_));
|
||||
q.BindValue(":id", dir.id);
|
||||
q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), dir.id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -381,8 +381,8 @@ void CollectionBackend::RemoveDirectory(const CollectionDirectory &dir) {
|
||||
// Now remove the directory itself
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DELETE FROM %1 WHERE ROWID = :id").arg(dirs_table_));
|
||||
q.BindValue(":id", dir.id);
|
||||
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(dirs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), dir.id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -401,8 +401,8 @@ SongList CollectionBackend::FindSongsInDirectory(const int id) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(":directory_id", id);
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(QStringLiteral(":directory_id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -424,8 +424,8 @@ SongList CollectionBackend::SongsWithMissingFingerprint(const int id) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (fingerprint IS NULL OR fingerprint = '')").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(":directory_id", id);
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (fingerprint IS NULL OR fingerprint = '')").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(QStringLiteral(":directory_id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -447,8 +447,8 @@ SongList CollectionBackend::SongsWithMissingLoudnessCharacteristics(const int id
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (ebur128_integrated_loudness_lufs IS NULL OR ebur128_loudness_range_lu IS NULL)").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(":directory_id", id);
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE directory_id = :directory_id AND unavailable = 0 AND (ebur128_integrated_loudness_lufs IS NULL OR ebur128_loudness_range_lu IS NULL)").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(QStringLiteral(":directory_id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -490,9 +490,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
|
||||
if (subdir.mtime == 0) {
|
||||
// Delete the subdirectory
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DELETE FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(":id", subdir.directory_id);
|
||||
q.BindValue(":path", subdir.path);
|
||||
q.prepare(QStringLiteral("DELETE FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), subdir.directory_id);
|
||||
q.BindValue(QStringLiteral(":path"), subdir.path);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -503,9 +503,9 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
|
||||
bool exists = false;
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(":id", subdir.directory_id);
|
||||
q.BindValue(":path", subdir.path);
|
||||
q.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), subdir.directory_id);
|
||||
q.BindValue(QStringLiteral(":path"), subdir.path);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -515,10 +515,10 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
|
||||
|
||||
if (exists) {
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET mtime = :mtime WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(":mtime", subdir.mtime);
|
||||
q.BindValue(":id", subdir.directory_id);
|
||||
q.BindValue(":path", subdir.path);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE directory_id = :id AND path = :path").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":mtime"), subdir.mtime);
|
||||
q.BindValue(QStringLiteral(":id"), subdir.directory_id);
|
||||
q.BindValue(QStringLiteral(":path"), subdir.path);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -526,10 +526,10 @@ void CollectionBackend::AddOrUpdateSubdirs(const CollectionSubdirectoryList &sub
|
||||
}
|
||||
else {
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (directory_id, path, mtime) VALUES (:id, :path, :mtime)").arg(subdirs_table_));
|
||||
q.BindValue(":id", subdir.directory_id);
|
||||
q.BindValue(":path", subdir.path);
|
||||
q.BindValue(":mtime", subdir.mtime);
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (directory_id, path, mtime) VALUES (:id, :path, :mtime)").arg(subdirs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), subdir.directory_id);
|
||||
q.BindValue(QStringLiteral(":path"), subdir.path);
|
||||
q.BindValue(QStringLiteral(":mtime"), subdir.mtime);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -548,7 +548,7 @@ SongList CollectionBackend::GetAllSongs() {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2").arg(Song::kColumnSpec, songs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -584,8 +584,8 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
// This is to fix a possible race condition when a directory is removed while CollectionWatcher is scanning it.
|
||||
if (!dirs_table_.isEmpty()) {
|
||||
SqlQuery check_dir(db);
|
||||
check_dir.prepare(QString("SELECT ROWID FROM %1 WHERE ROWID = :id").arg(dirs_table_));
|
||||
check_dir.BindValue(":id", song.directory_id());
|
||||
check_dir.prepare(QStringLiteral("SELECT ROWID FROM %1 WHERE ROWID = :id").arg(dirs_table_));
|
||||
check_dir.BindValue(QStringLiteral(":id"), song.directory_id());
|
||||
if (!check_dir.Exec()) {
|
||||
db_->ReportErrors(check_dir);
|
||||
return;
|
||||
@ -604,9 +604,9 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
// Update
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
song.BindToQuery(&q);
|
||||
q.BindValue(":id", song.id());
|
||||
q.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -615,9 +615,9 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
song.BindToFtsQuery(&q);
|
||||
q.BindValue(":id", song.id());
|
||||
q.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -643,9 +643,9 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
// Update
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
new_song.BindToQuery(&q);
|
||||
q.BindValue(":id", new_song.id());
|
||||
q.BindValue(QStringLiteral(":id"), new_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -654,9 +654,9 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
new_song.BindToFtsQuery(&q);
|
||||
q.BindValue(":id", new_song.id());
|
||||
q.BindValue(QStringLiteral(":id"), new_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -675,7 +675,7 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
int id = -1;
|
||||
{ // Insert the row and create a new ID
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (%2) VALUES (%3)").arg(songs_table_, Song::kColumnSpec, Song::kBindSpec));
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (%2) VALUES (%3)").arg(songs_table_, Song::kColumnSpec, Song::kBindSpec));
|
||||
song.BindToQuery(&q);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -689,8 +689,8 @@ void CollectionBackend::AddOrUpdateSongs(const SongList &songs) {
|
||||
|
||||
{ // Add to the FTS index
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (ROWID, %2) VALUES (:id, %3)").arg(fts_table_, Song::kFtsColumnSpec, Song::kFtsBindSpec));
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (ROWID, %2) VALUES (:id, %3)").arg(fts_table_, Song::kFtsColumnSpec, Song::kFtsBindSpec));
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
song.BindToFtsQuery(&q);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -750,9 +750,9 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(songs_table_, Song::kUpdateSpec));
|
||||
new_song.BindToQuery(&q);
|
||||
q.BindValue(":id", old_song.id());
|
||||
q.BindValue(QStringLiteral(":id"), old_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -760,9 +760,9 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
}
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET %2 WHERE ROWID = :id").arg(fts_table_, Song::kFtsUpdateSpec));
|
||||
new_song.BindToFtsQuery(&q);
|
||||
q.BindValue(":id", old_song.id());
|
||||
q.BindValue(QStringLiteral(":id"), old_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -781,7 +781,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
int id = -1;
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (%2) VALUES (%3)").arg(songs_table_, Song::kColumnSpec, Song::kBindSpec));
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (%2) VALUES (%3)").arg(songs_table_, Song::kColumnSpec, Song::kBindSpec));
|
||||
new_song.BindToQuery(&q);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -795,8 +795,8 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
|
||||
{ // Add to the FTS index
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("INSERT INTO %1 (ROWID, %2) VALUES (:id, %3)").arg(fts_table_, Song::kFtsColumnSpec, Song::kFtsBindSpec));
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("INSERT INTO %1 (ROWID, %2) VALUES (:id, %3)").arg(fts_table_, Song::kFtsColumnSpec, Song::kFtsBindSpec));
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
new_song.BindToFtsQuery(&q);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -816,8 +816,8 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
if (!new_songs.contains(old_song.song_id())) {
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(":id", old_song.id());
|
||||
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), old_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -825,8 +825,8 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
|
||||
}
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DELETE FROM %1 WHERE ROWID = :id").arg(fts_table_));
|
||||
q.BindValue(":id", old_song.id());
|
||||
q.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(fts_table_));
|
||||
q.BindValue(QStringLiteral(":id"), old_song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -853,12 +853,12 @@ void CollectionBackend::UpdateMTimesOnly(const SongList &songs) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET mtime = :mtime WHERE ROWID = :id").arg(songs_table_));
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET mtime = :mtime WHERE ROWID = :id").arg(songs_table_));
|
||||
|
||||
ScopedTransaction transaction(&db);
|
||||
for (const Song &song : songs) {
|
||||
q.BindValue(":mtime", song.mtime());
|
||||
q.BindValue(":id", song.id());
|
||||
q.BindValue(QStringLiteral(":mtime"), song.mtime());
|
||||
q.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -874,19 +874,19 @@ void CollectionBackend::DeleteSongs(const SongList &songs) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery remove(db);
|
||||
remove.prepare(QString("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
|
||||
remove.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(songs_table_));
|
||||
SqlQuery remove_fts(db);
|
||||
remove_fts.prepare(QString("DELETE FROM %1 WHERE ROWID = :id").arg(fts_table_));
|
||||
remove_fts.prepare(QStringLiteral("DELETE FROM %1 WHERE ROWID = :id").arg(fts_table_));
|
||||
|
||||
ScopedTransaction transaction(&db);
|
||||
for (const Song &song : songs) {
|
||||
remove.BindValue(":id", song.id());
|
||||
remove.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!remove.Exec()) {
|
||||
db_->ReportErrors(remove);
|
||||
return;
|
||||
}
|
||||
|
||||
remove_fts.BindValue(":id", song.id());
|
||||
remove_fts.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!remove_fts.Exec()) {
|
||||
db_->ReportErrors(remove_fts);
|
||||
return;
|
||||
@ -908,11 +908,11 @@ void CollectionBackend::MarkSongsUnavailable(const SongList &songs, const bool u
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery query(db);
|
||||
query.prepare(QString("UPDATE %1 SET unavailable = %2 WHERE ROWID = :id").arg(songs_table_).arg(static_cast<int>(unavailable)));
|
||||
query.prepare(QStringLiteral("UPDATE %1 SET unavailable = %2 WHERE ROWID = :id").arg(songs_table_).arg(static_cast<int>(unavailable)));
|
||||
|
||||
ScopedTransaction transaction(&db);
|
||||
for (const Song &song : songs) {
|
||||
query.BindValue(":id", song.id());
|
||||
query.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!query.Exec()) {
|
||||
db_->ReportErrors(query);
|
||||
return;
|
||||
@ -957,7 +957,7 @@ QStringList CollectionBackend::GetAll(const QString &column, const CollectionFil
|
||||
|
||||
QStringList CollectionBackend::GetAllArtists(const CollectionFilterOptions &opt) {
|
||||
|
||||
return GetAll("artist", opt);
|
||||
return GetAll(QStringLiteral("artist"), opt);
|
||||
}
|
||||
|
||||
QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOptions &opt) {
|
||||
@ -967,16 +967,16 @@ QStringList CollectionBackend::GetAllArtistsWithAlbums(const CollectionFilterOpt
|
||||
|
||||
// Albums with 'albumartist' field set:
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.SetColumnSpec("DISTINCT albumartist");
|
||||
query.SetColumnSpec(QStringLiteral("DISTINCT albumartist"));
|
||||
query.AddCompilationRequirement(false);
|
||||
query.AddWhere("album", "", "!=");
|
||||
query.AddWhere(QStringLiteral("album"), "", QStringLiteral("!="));
|
||||
|
||||
// Albums with no 'albumartist' (extract 'artist'):
|
||||
CollectionQuery query2(db, songs_table_, fts_table_, opt);
|
||||
query2.SetColumnSpec("DISTINCT artist");
|
||||
query2.SetColumnSpec(QStringLiteral("DISTINCT artist"));
|
||||
query2.AddCompilationRequirement(false);
|
||||
query2.AddWhere("album", "", "!=");
|
||||
query2.AddWhere("albumartist", "", "=");
|
||||
query2.AddWhere(QStringLiteral("album"), "", QStringLiteral("!="));
|
||||
query2.AddWhere(QStringLiteral("albumartist"), "", QStringLiteral("="));
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1015,7 +1015,7 @@ SongList CollectionBackend::GetArtistSongs(const QString &effective_albumartist,
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.AddCompilationRequirement(false);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
|
||||
SongList songs;
|
||||
if (!ExecCollectionQuery(&query, songs)) {
|
||||
@ -1033,8 +1033,8 @@ SongList CollectionBackend::GetAlbumSongs(const QString &effective_albumartist,
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.AddCompilationRequirement(false);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
SongList songs;
|
||||
if (!ExecCollectionQuery(&query, songs)) {
|
||||
@ -1052,7 +1052,7 @@ SongList CollectionBackend::GetSongsByAlbum(const QString &album, const Collecti
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.AddCompilationRequirement(false);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
SongList songs;
|
||||
if (!ExecCollectionQuery(&query, songs)) {
|
||||
@ -1130,10 +1130,10 @@ SongList CollectionBackend::GetSongsByForeignId(const QStringList &ids, const QS
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
QString in = ids.join(",");
|
||||
QString in = ids.join(QStringLiteral(","));
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("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));
|
||||
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));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -1161,10 +1161,10 @@ Song CollectionBackend::GetSongById(const int id, QSqlDatabase &db) {
|
||||
|
||||
SongList CollectionBackend::GetSongsById(const QStringList &ids, QSqlDatabase &db) {
|
||||
|
||||
QString in = ids.join(",");
|
||||
QString in = ids.join(QStringLiteral(","));
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE ROWID IN (%3)").arg(Song::kColumnSpec, songs_table_, in));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE ROWID IN (%3)").arg(Song::kColumnSpec, songs_table_, in));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -1186,13 +1186,13 @@ Song CollectionBackend::GetSongByUrl(const QUrl &url, const qint64 beginning) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND beginning = :beginning AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND beginning = :beginning AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
|
||||
q.BindValue(":url1", url);
|
||||
q.BindValue(":url2", url.toString());
|
||||
q.BindValue(":url3", url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(":url4", url.toEncoded());
|
||||
q.BindValue(":beginning", beginning);
|
||||
q.BindValue(QStringLiteral(":url1"), url);
|
||||
q.BindValue(QStringLiteral(":url2"), url.toString());
|
||||
q.BindValue(QStringLiteral(":url3"), url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(QStringLiteral(":url4"), url.toEncoded());
|
||||
q.BindValue(QStringLiteral(":beginning"), beginning);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1216,13 +1216,13 @@ Song CollectionBackend::GetSongByUrlAndTrack(const QUrl &url, const int track) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND track = :track AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND track = :track AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
|
||||
q.BindValue(":url1", url);
|
||||
q.BindValue(":url2", url.toString());
|
||||
q.BindValue(":url3", url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(":url4", url.toEncoded());
|
||||
q.BindValue(":track", track);
|
||||
q.BindValue(QStringLiteral(":url1"), url);
|
||||
q.BindValue(QStringLiteral(":url2"), url.toString());
|
||||
q.BindValue(QStringLiteral(":url3"), url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(QStringLiteral(":url4"), url.toEncoded());
|
||||
q.BindValue(QStringLiteral(":track"), track);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1246,13 +1246,13 @@ SongList CollectionBackend::GetSongsByUrl(const QUrl &url, const bool unavailabl
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = :unavailable").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = :unavailable").arg(Song::kColumnSpec, songs_table_));
|
||||
|
||||
q.BindValue(":url1", url);
|
||||
q.BindValue(":url2", url.toString());
|
||||
q.BindValue(":url3", url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(":url4", url.toEncoded());
|
||||
q.BindValue(":unavailable", (unavailable ? 1 : 0));
|
||||
q.BindValue(QStringLiteral(":url1"), url);
|
||||
q.BindValue(QStringLiteral(":url2"), url.toString());
|
||||
q.BindValue(QStringLiteral(":url3"), url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(QStringLiteral(":url4"), url.toEncoded());
|
||||
q.BindValue(QStringLiteral(":unavailable"), (unavailable ? 1 : 0));
|
||||
|
||||
SongList songs;
|
||||
if (q.Exec()) {
|
||||
@ -1303,10 +1303,10 @@ SongList CollectionBackend::GetSongsBySongId(const QStringList &song_ids, QSqlDa
|
||||
for (const QString &song_id : song_ids) {
|
||||
song_ids2 << "'" + song_id + "'";
|
||||
}
|
||||
QString in = song_ids2.join(",");
|
||||
QString in = song_ids2.join(QStringLiteral(","));
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE SONG_ID IN (%3)").arg(Song::kColumnSpec, songs_table_, in));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE SONG_ID IN (%3)").arg(Song::kColumnSpec, songs_table_, in));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -1329,8 +1329,8 @@ SongList CollectionBackend::GetSongsByFingerprint(const QString &fingerprint) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE fingerprint = :fingerprint").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(":fingerprint", fingerprint);
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE fingerprint = :fingerprint").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(QStringLiteral(":fingerprint"), fingerprint);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -1360,7 +1360,7 @@ SongList CollectionBackend::GetCompilationSongs(const QString &album, const Coll
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.SetColumnSpec("%songs_table.ROWID, " + Song::kColumnSpec);
|
||||
query.AddCompilationRequirement(true);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1385,7 +1385,7 @@ void CollectionBackend::CompilationsNeedUpdating() {
|
||||
// Look for albums that have songs by more than one 'effective album artist' in the same directory
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT effective_albumartist, album, url, compilation_detected FROM %1 WHERE unavailable = 0 ORDER BY album").arg(songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT effective_albumartist, album, url, compilation_detected FROM %1 WHERE unavailable = 0 ORDER BY album").arg(songs_table_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -1452,11 +1452,11 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &del
|
||||
|
||||
{ // Get song, so we can tell the model its updated
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(":url1", url);
|
||||
q.BindValue(":url2", url.toString());
|
||||
q.BindValue(":url3", url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(":url4", url.toEncoded());
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(Song::kColumnSpec, songs_table_));
|
||||
q.BindValue(QStringLiteral(":url1"), url);
|
||||
q.BindValue(QStringLiteral(":url2"), url.toString());
|
||||
q.BindValue(QStringLiteral(":url3"), url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(QStringLiteral(":url4"), url.toEncoded());
|
||||
if (q.Exec()) {
|
||||
while (q.next()) {
|
||||
Song song(source_);
|
||||
@ -1474,12 +1474,12 @@ bool CollectionBackend::UpdateCompilations(const QSqlDatabase &db, SongList &del
|
||||
|
||||
// Update the song
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET compilation_detected = :compilation_detected, compilation_effective = ((compilation OR :compilation_detected OR compilation_on) AND NOT compilation_off) + 0 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(":compilation_detected", static_cast<int>(compilation_detected));
|
||||
q.BindValue(":url1", url);
|
||||
q.BindValue(":url2", url.toString());
|
||||
q.BindValue(":url3", url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(":url4", url.toEncoded());
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET compilation_detected = :compilation_detected, compilation_effective = ((compilation OR :compilation_detected OR compilation_on) AND NOT compilation_off) + 0 WHERE (url = :url1 OR url = :url2 OR url = :url3 OR url = :url4) AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":compilation_detected"), static_cast<int>(compilation_detected));
|
||||
q.BindValue(QStringLiteral(":url1"), url);
|
||||
q.BindValue(QStringLiteral(":url2"), url.toString());
|
||||
q.BindValue(QStringLiteral(":url3"), url.toString(QUrl::FullyEncoded));
|
||||
q.BindValue(QStringLiteral(":url4"), url.toEncoded());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return false;
|
||||
@ -1495,15 +1495,15 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_, opt);
|
||||
query.SetColumnSpec("url, filetype, cue_path, effective_albumartist, album, compilation_effective, art_embedded, art_automatic, art_manual, art_unset");
|
||||
query.SetOrderBy("effective_albumartist, album, url");
|
||||
query.SetColumnSpec(QStringLiteral("url, filetype, cue_path, effective_albumartist, album, compilation_effective, art_embedded, art_automatic, art_manual, art_unset"));
|
||||
query.SetOrderBy(QStringLiteral("effective_albumartist, album, url"));
|
||||
|
||||
if (compilation_required) {
|
||||
query.AddCompilationRequirement(true);
|
||||
}
|
||||
else if (!artist.isEmpty()) {
|
||||
query.AddCompilationRequirement(false);
|
||||
query.AddWhere("effective_albumartist", artist);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), artist);
|
||||
}
|
||||
|
||||
if (!query.Exec()) {
|
||||
@ -1531,7 +1531,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
|
||||
album_info.art_embedded = query.Value(6).toBool();
|
||||
|
||||
const QString art_automatic = query.Value(7).toString();
|
||||
if (art_automatic.contains(QRegularExpression("..+:.*"))) {
|
||||
if (art_automatic.contains(QRegularExpression(QStringLiteral("..+:.*")))) {
|
||||
album_info.art_automatic = QUrl::fromEncoded(art_automatic.toUtf8());
|
||||
}
|
||||
else {
|
||||
@ -1539,7 +1539,7 @@ CollectionBackend::AlbumList CollectionBackend::GetAlbums(const QString &artist,
|
||||
}
|
||||
|
||||
const QString art_manual = query.Value(8).toString();
|
||||
if (art_manual.contains(QRegularExpression("..+:.*"))) {
|
||||
if (art_manual.contains(QRegularExpression(QStringLiteral("..+:.*")))) {
|
||||
album_info.art_manual = QUrl::fromEncoded(art_manual.toUtf8());
|
||||
}
|
||||
else {
|
||||
@ -1586,11 +1586,11 @@ CollectionBackend::Album CollectionBackend::GetAlbumArt(const QString &effective
|
||||
ret.album_artist = effective_albumartist;
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("url, art_embedded, art_automatic, art_manual, art_unset");
|
||||
query.SetColumnSpec(QStringLiteral("url, art_embedded, art_automatic, art_manual, art_unset"));
|
||||
if (!effective_albumartist.isEmpty()) {
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
}
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1623,8 +1623,8 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
|
||||
// Get the songs before they're updated
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1639,13 +1639,13 @@ void CollectionBackend::UpdateEmbeddedAlbumArt(const QString &effective_albumart
|
||||
}
|
||||
|
||||
// Update the songs
|
||||
QString sql = QString("UPDATE %1 SET art_embedded = :art_embedded, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_);
|
||||
QString sql = QStringLiteral("UPDATE %1 SET art_embedded = :art_embedded, art_unset = 0 WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_);
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(sql);
|
||||
q.BindValue(":art_embedded", art_embedded ? 1 : 0);
|
||||
q.BindValue(":effective_albumartist", effective_albumartist);
|
||||
q.BindValue(":album", album);
|
||||
q.BindValue(QStringLiteral(":art_embedded"), art_embedded ? 1 : 0);
|
||||
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
|
||||
q.BindValue(QStringLiteral(":album"), album);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1685,8 +1685,8 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1701,10 +1701,10 @@ void CollectionBackend::UpdateManualAlbumArt(const QString &effective_albumartis
|
||||
}
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("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(":art_manual", art_manual.isValid() ? art_manual.toString(QUrl::FullyEncoded) : "");
|
||||
q.BindValue(":effective_albumartist", effective_albumartist);
|
||||
q.BindValue(":album", album);
|
||||
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(":effective_albumartist"), effective_albumartist);
|
||||
q.BindValue(QStringLiteral(":album"), album);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1743,8 +1743,8 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1759,9 +1759,9 @@ void CollectionBackend::UnsetAlbumArt(const QString &effective_albumartist, cons
|
||||
}
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET art_unset = 1, art_manual = '', art_automatic = '', art_embedded = '' WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(":effective_albumartist", effective_albumartist);
|
||||
q.BindValue(":album", album);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET art_unset = 1, art_manual = '', art_automatic = '', art_embedded = '' WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
|
||||
q.BindValue(QStringLiteral(":album"), album);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1800,8 +1800,8 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
|
||||
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("effective_albumartist", effective_albumartist);
|
||||
query.AddWhere("album", album);
|
||||
query.AddWhere(QStringLiteral("effective_albumartist"), effective_albumartist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1816,10 +1816,10 @@ void CollectionBackend::ClearAlbumArt(const QString &effective_albumartist, cons
|
||||
}
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET art_embedded = 0, art_automatic = '', art_manual = '', art_unset = :art_unset WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(":art_unset", art_unset ? 1 : 0);
|
||||
q.BindValue(":effective_albumartist", effective_albumartist);
|
||||
q.BindValue(":album", album);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET art_embedded = 0, art_automatic = '', art_manual = '', art_unset = :art_unset WHERE effective_albumartist = :effective_albumartist AND album = :album AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":art_unset"), art_unset ? 1 : 0);
|
||||
q.BindValue(QStringLiteral(":effective_albumartist"), effective_albumartist);
|
||||
q.BindValue(QStringLiteral(":album"), album);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1855,8 +1855,8 @@ void CollectionBackend::ForceCompilation(const QString &album, const QList<QStri
|
||||
// Get the songs before they're updated
|
||||
CollectionQuery query(db, songs_table_, fts_table_);
|
||||
query.SetColumnSpec("ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("album", album);
|
||||
if (!artist.isEmpty()) query.AddWhere("artist", artist);
|
||||
query.AddWhere(QStringLiteral("album"), album);
|
||||
if (!artist.isEmpty()) query.AddWhere(QStringLiteral("artist"), artist);
|
||||
|
||||
if (!query.Exec()) {
|
||||
ReportErrors(query);
|
||||
@ -1870,15 +1870,15 @@ void CollectionBackend::ForceCompilation(const QString &album, const QList<QStri
|
||||
}
|
||||
|
||||
// Update the songs
|
||||
QString sql(QString("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 += " AND artist = :artist";
|
||||
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");
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(sql);
|
||||
q.BindValue(":compilation_on", on ? 1 : 0);
|
||||
q.BindValue(":compilation_off", on ? 0 : 1);
|
||||
q.BindValue(":album", album);
|
||||
if (!artist.isEmpty()) q.BindValue(":artist", artist);
|
||||
q.BindValue(QStringLiteral(":compilation_on"), on ? 1 : 0);
|
||||
q.BindValue(QStringLiteral(":compilation_off"), on ? 0 : 1);
|
||||
q.BindValue(QStringLiteral(":album"), album);
|
||||
if (!artist.isEmpty()) q.BindValue(QStringLiteral(":artist"), artist);
|
||||
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
@ -1913,9 +1913,9 @@ void CollectionBackend::IncrementPlayCount(const int id) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET playcount = playcount + 1, lastplayed = :now WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(":now", QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET playcount = playcount + 1, lastplayed = :now WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":now"), QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -1936,8 +1936,8 @@ void CollectionBackend::IncrementSkipCount(const int id, const float progress) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET skipcount = skipcount + 1 WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET skipcount = skipcount + 1 WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -1982,8 +1982,8 @@ bool CollectionBackend::ResetPlayStatistics(const QStringList &id_str_list) {
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET playcount = 0, skipcount = 0, lastplayed = -1 WHERE ROWID IN (:ids)").arg(songs_table_));
|
||||
q.BindValue(":ids", id_str_list.join(","));
|
||||
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(QStringLiteral(",")));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return false;
|
||||
@ -2073,14 +2073,14 @@ SongList CollectionBackend::GetSongsBy(const QString &artist, const QString &alb
|
||||
SongList songs;
|
||||
SqlQuery q(db);
|
||||
if (album.isEmpty()) {
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kColumnSpec, songs_table_));
|
||||
}
|
||||
else {
|
||||
q.prepare(QString("SELECT ROWID, %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND album = :album COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kColumnSpec, songs_table_));
|
||||
q.prepare(QStringLiteral("SELECT ROWID, %1 FROM %2 WHERE artist = :artist COLLATE NOCASE AND album = :album COLLATE NOCASE AND title = :title COLLATE NOCASE").arg(Song::kColumnSpec, songs_table_));
|
||||
}
|
||||
q.BindValue(":artist", artist);
|
||||
if (!album.isEmpty()) q.BindValue(":album", album);
|
||||
q.BindValue(":title", title);
|
||||
q.BindValue(QStringLiteral(":artist"), artist);
|
||||
if (!album.isEmpty()) q.BindValue(QStringLiteral(":album"), album);
|
||||
q.BindValue(QStringLiteral(":title"), title);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return SongList();
|
||||
@ -2111,9 +2111,9 @@ void CollectionBackend::UpdateLastPlayed(const QString &artist, const QString &a
|
||||
continue;
|
||||
}
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET lastplayed = :lastplayed WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(":lastplayed", lastplayed);
|
||||
q.BindValue(":id", song.id());
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET lastplayed = :lastplayed WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":lastplayed"), lastplayed);
|
||||
q.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
continue;
|
||||
@ -2137,9 +2137,9 @@ void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &ti
|
||||
|
||||
for (const Song &song : songs) {
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET playcount = :playcount WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(":playcount", playcount);
|
||||
q.BindValue(":id", song.id());
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET playcount = :playcount WHERE ROWID = :id").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":playcount"), playcount);
|
||||
q.BindValue(QStringLiteral(":id"), song.id());
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -2170,10 +2170,10 @@ void CollectionBackend::UpdateSongsRating(const QList<int> &id_list, const float
|
||||
for (int i : id_list) {
|
||||
id_str_list << QString::number(i);
|
||||
}
|
||||
QString ids = id_str_list.join(",");
|
||||
QString ids = id_str_list.join(QStringLiteral(","));
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET rating = :rating WHERE ROWID IN (%2)").arg(songs_table_, ids));
|
||||
q.BindValue(":rating", rating);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET rating = :rating WHERE ROWID IN (%2)").arg(songs_table_, ids));
|
||||
q.BindValue(QStringLiteral(":rating"), rating);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -2200,9 +2200,9 @@ void CollectionBackend::UpdateLastSeen(const int directory_id, const int expire_
|
||||
QSqlDatabase db(db_->Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("UPDATE %1 SET lastseen = :lastseen WHERE directory_id = :directory_id AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(":lastseen", QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||
q.BindValue(":directory_id", directory_id);
|
||||
q.prepare(QStringLiteral("UPDATE %1 SET lastseen = :lastseen WHERE directory_id = :directory_id AND unavailable = 0").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":lastseen"), QDateTime::currentDateTime().toSecsSinceEpoch());
|
||||
q.BindValue(QStringLiteral(":directory_id"), directory_id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -2220,9 +2220,9 @@ void CollectionBackend::ExpireSongs(const int directory_id, const int expire_una
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT %1.ROWID, " + Song::JoinSpec("%1") + " FROM %1 LEFT JOIN playlist_items ON %1.ROWID = playlist_items.collection_id WHERE %1.directory_id = :directory_id AND %1.unavailable = 1 AND %1.lastseen > 0 AND %1.lastseen < :time AND playlist_items.collection_id IS NULL").arg(songs_table_));
|
||||
q.BindValue(":directory_id", directory_id);
|
||||
q.BindValue(":time", QDateTime::currentDateTime().toSecsSinceEpoch() - (expire_unavailable_songs_days * 86400));
|
||||
q.prepare(QString("SELECT %1.ROWID, " + Song::JoinSpec(QStringLiteral("%1")) + " FROM %1 LEFT JOIN playlist_items ON %1.ROWID = playlist_items.collection_id WHERE %1.directory_id = :directory_id AND %1.unavailable = 1 AND %1.lastseen > 0 AND %1.lastseen < :time AND playlist_items.collection_id IS NULL").arg(songs_table_));
|
||||
q.BindValue(QStringLiteral(":directory_id"), directory_id);
|
||||
q.BindValue(QStringLiteral(":time"), QDateTime::currentDateTime().toSecsSinceEpoch() - (expire_unavailable_songs_days * 86400));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
|
@ -41,7 +41,7 @@ using std::make_shared;
|
||||
|
||||
CollectionDirectoryModel::CollectionDirectoryModel(SharedPtr<CollectionBackend> backend, QObject *parent)
|
||||
: QStandardItemModel(parent),
|
||||
dir_icon_(IconLoader::Load("document-open-folder")),
|
||||
dir_icon_(IconLoader::Load(QStringLiteral("document-open-folder"))),
|
||||
backend_(backend) {
|
||||
|
||||
QObject::connect(&*backend_, &CollectionBackend::DirectoryDiscovered, this, &CollectionDirectoryModel::DirectoryDiscovered);
|
||||
|
@ -72,34 +72,34 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent)
|
||||
|
||||
ui_->setupUi(this);
|
||||
|
||||
QString available_fields = Song::kFtsColumns.join(", ").replace(QRegularExpression("\\bfts"), "");
|
||||
available_fields += QString(", ") + Song::kNumericalColumns.join(", ");
|
||||
QString available_fields = Song::kFtsColumns.join(QStringLiteral(", ")).replace(QRegularExpression(QStringLiteral("\\bfts")), QLatin1String(""));
|
||||
available_fields += QStringLiteral(", ") + Song::kNumericalColumns.join(QStringLiteral(", "));
|
||||
|
||||
ui_->search_field->setToolTip(
|
||||
QString("<html><head/><body><p>") +
|
||||
QStringLiteral("<html><head/><body><p>") +
|
||||
tr("Prefix a word with a field name to limit the search to that field, e.g.:") +
|
||||
QString(" ") +
|
||||
QString("<span style=\"font-weight:600;\">") +
|
||||
QStringLiteral(" ") +
|
||||
QStringLiteral("<span style=\"font-weight:600;\">") +
|
||||
tr("artist") +
|
||||
QString(":</span><span style=\"font-style:italic;\">Strawbs</span> ") +
|
||||
tr("searches the collection for all artists that contain the word %1. ").arg("Strawbs") +
|
||||
QString("</p><p>") +
|
||||
QStringLiteral(":</span><span style=\"font-style:italic;\">Strawbs</span> ") +
|
||||
tr("searches the collection for all artists that contain the word %1. ").arg(QStringLiteral("Strawbs")) +
|
||||
QStringLiteral("</p><p>") +
|
||||
tr("Search terms for numerical fields can be prefixed with %1 or %2 to refine the search, e.g.: ")
|
||||
.arg(" =, !=, <, >, <=", ">=") +
|
||||
QString("<span style=\"font-weight:600;\">") +
|
||||
QStringLiteral("<span style=\"font-weight:600;\">") +
|
||||
tr("rating") +
|
||||
QString("</span>") +
|
||||
QString(":>=") +
|
||||
QString("<span style=\"font-weight:italic;\">4</span>") +
|
||||
QStringLiteral("</span>") +
|
||||
QStringLiteral(":>=") +
|
||||
QStringLiteral("<span style=\"font-weight:italic;\">4</span>") +
|
||||
|
||||
QString("</p><p><span style=\"font-weight:600;\">") +
|
||||
QStringLiteral("</p><p><span style=\"font-weight:600;\">") +
|
||||
tr("Available fields") +
|
||||
QString(": ") +
|
||||
QString("</span>") +
|
||||
QString("<span style=\"font-style:italic;\">") +
|
||||
QStringLiteral(": ") +
|
||||
QStringLiteral("</span>") +
|
||||
QStringLiteral("<span style=\"font-style:italic;\">") +
|
||||
available_fields +
|
||||
QString("</span>.") +
|
||||
QString("</p></body></html>")
|
||||
QStringLiteral("</span>.") +
|
||||
QStringLiteral("</p></body></html>")
|
||||
);
|
||||
|
||||
QObject::connect(ui_->search_field, &QSearchField::returnPressed, this, &CollectionFilterWidget::ReturnPressed);
|
||||
@ -109,7 +109,7 @@ CollectionFilterWidget::CollectionFilterWidget(QWidget *parent)
|
||||
filter_delay_->setSingleShot(true);
|
||||
|
||||
// Icons
|
||||
ui_->options->setIcon(IconLoader::Load("configure"));
|
||||
ui_->options->setIcon(IconLoader::Load(QStringLiteral("configure")));
|
||||
|
||||
// Filter by age
|
||||
QActionGroup *filter_age_group = new QActionGroup(this);
|
||||
@ -229,10 +229,10 @@ void CollectionFilterWidget::ReloadSettings() {
|
||||
QString CollectionFilterWidget::group_by_version() const {
|
||||
|
||||
if (settings_prefix_.isEmpty()) {
|
||||
return "group_by_version";
|
||||
return QStringLiteral("group_by_version");
|
||||
}
|
||||
else {
|
||||
return QString("%1_group_by_version").arg(settings_prefix_);
|
||||
return QStringLiteral("%1_group_by_version").arg(settings_prefix_);
|
||||
}
|
||||
|
||||
}
|
||||
@ -240,10 +240,10 @@ QString CollectionFilterWidget::group_by_version() const {
|
||||
QString CollectionFilterWidget::group_by_key() const {
|
||||
|
||||
if (settings_prefix_.isEmpty()) {
|
||||
return "group_by";
|
||||
return QStringLiteral("group_by");
|
||||
}
|
||||
else {
|
||||
return QString("%1_group_by").arg(settings_prefix_);
|
||||
return QStringLiteral("%1_group_by").arg(settings_prefix_);
|
||||
}
|
||||
|
||||
}
|
||||
@ -253,10 +253,10 @@ QString CollectionFilterWidget::group_by_key(const int number) const { return gr
|
||||
QString CollectionFilterWidget::separate_albums_by_grouping_key() const {
|
||||
|
||||
if (settings_prefix_.isEmpty()) {
|
||||
return "separate_albums_by_grouping";
|
||||
return QStringLiteral("separate_albums_by_grouping");
|
||||
}
|
||||
else {
|
||||
return QString("%1_separate_albums_by_grouping").arg(settings_prefix_);
|
||||
return QStringLiteral("%1_separate_albums_by_grouping").arg(settings_prefix_);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -91,8 +91,8 @@ CollectionModel::CollectionModel(SharedPtr<CollectionBackend> backend, Applicati
|
||||
total_artist_count_(0),
|
||||
total_album_count_(0),
|
||||
separate_albums_by_grouping_(false),
|
||||
artist_icon_(IconLoader::Load("folder-sound")),
|
||||
album_icon_(IconLoader::Load("cdcase")),
|
||||
artist_icon_(IconLoader::Load(QStringLiteral("folder-sound"))),
|
||||
album_icon_(IconLoader::Load(QStringLiteral("cdcase"))),
|
||||
init_task_id_(-1),
|
||||
use_pretty_covers_(true),
|
||||
show_dividers_(true),
|
||||
@ -109,7 +109,7 @@ CollectionModel::CollectionModel(SharedPtr<CollectionBackend> backend, Applicati
|
||||
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CollectionModel::AlbumCoverLoaded);
|
||||
}
|
||||
|
||||
QIcon nocover = IconLoader::Load("cdcase");
|
||||
QIcon nocover = IconLoader::Load(QStringLiteral("cdcase"));
|
||||
if (!nocover.isNull()) {
|
||||
QList<QSize> nocover_sizes = nocover.availableSizes();
|
||||
no_cover_icon_ = nocover.pixmap(nocover_sizes.last()).scaled(kPrettyCoverSize, kPrettyCoverSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
@ -307,7 +307,7 @@ CollectionItem *CollectionModel::CreateCompilationArtistNode(const bool signal,
|
||||
if (parent != root_ && !parent->key.isEmpty()) parent->compilation_artist_node_->key.append(parent->key);
|
||||
parent->compilation_artist_node_->key.append(tr("Various artists"));
|
||||
parent->compilation_artist_node_->display_text = tr("Various artists");
|
||||
parent->compilation_artist_node_->sort_text = " various";
|
||||
parent->compilation_artist_node_->sort_text = QStringLiteral(" various");
|
||||
parent->compilation_artist_node_->container_level = parent->container_level + 1;
|
||||
|
||||
if (signal) endInsertRows();
|
||||
@ -396,10 +396,10 @@ QString CollectionModel::ContainerKey(const GroupBy group_by, const bool separat
|
||||
}
|
||||
else {
|
||||
if (song.bitdepth() <= 0) {
|
||||
key = QString("%1 (%2)").arg(song.TextForFiletype(), QString::number(song.samplerate() / 1000.0, 'G', 5));
|
||||
key = QStringLiteral("%1 (%2)").arg(song.TextForFiletype(), QString::number(song.samplerate() / 1000.0, 'G', 5));
|
||||
}
|
||||
else {
|
||||
key = QString("%1 (%2/%3)").arg(song.TextForFiletype(), QString::number(song.samplerate() / 1000.0, 'G', 5)).arg(song.bitdepth());
|
||||
key = QStringLiteral("%1 (%2/%3)").arg(song.TextForFiletype(), QString::number(song.samplerate() / 1000.0, 'G', 5)).arg(song.bitdepth());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -432,7 +432,7 @@ QString CollectionModel::DividerKey(const GroupBy group_by, CollectionItem *item
|
||||
case GroupBy::Format:
|
||||
case GroupBy::FileType: {
|
||||
QChar c = item->sort_text[0];
|
||||
if (c.isDigit()) return "0";
|
||||
if (c.isDigit()) return QStringLiteral("0");
|
||||
if (c == ' ') return QString();
|
||||
if (c.decompositionTag() != QChar::NoDecomposition) {
|
||||
QString decomposition = c.decomposition();
|
||||
@ -487,7 +487,7 @@ QString CollectionModel::DividerDisplayText(const GroupBy group_by, const QStrin
|
||||
case GroupBy::Genre:
|
||||
case GroupBy::FileType:
|
||||
case GroupBy::Format:
|
||||
if (key == "0") return "0-9";
|
||||
if (key == "0") return QStringLiteral("0-9");
|
||||
return key.toUpper();
|
||||
|
||||
case GroupBy::YearAlbum:
|
||||
@ -631,7 +631,7 @@ QString CollectionModel::AlbumIconPixmapCacheKey(const QModelIndex &idx) const {
|
||||
idx_copy = idx_copy.parent();
|
||||
}
|
||||
|
||||
return Song::TextForSource(backend_->source()) + "/" + path.join("/");
|
||||
return Song::TextForSource(backend_->source()) + "/" + path.join(QStringLiteral("/"));
|
||||
|
||||
}
|
||||
|
||||
@ -1054,82 +1054,82 @@ void CollectionModel::SetQueryColumnSpec(const GroupBy group_by, const bool sepa
|
||||
// Say what group_by of thing we want to get back from the database.
|
||||
switch (group_by) {
|
||||
case GroupBy::AlbumArtist:
|
||||
query_options->set_column_spec("DISTINCT effective_albumartist");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT effective_albumartist"));
|
||||
break;
|
||||
case GroupBy::Artist:
|
||||
query_options->set_column_spec("DISTINCT artist");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT artist"));
|
||||
break;
|
||||
case GroupBy::Album:{
|
||||
QString query("DISTINCT album, album_id");
|
||||
QString query(QStringLiteral("DISTINCT album, album_id"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::AlbumDisc:{
|
||||
QString query("DISTINCT album, album_id, disc");
|
||||
QString query(QStringLiteral("DISTINCT album, album_id, disc"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::YearAlbum:{
|
||||
QString query("DISTINCT year, album, album_id");
|
||||
QString query(QStringLiteral("DISTINCT year, album, album_id"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::YearAlbumDisc:{
|
||||
QString query("DISTINCT year, album, album_id, disc");
|
||||
QString query(QStringLiteral("DISTINCT year, album, album_id, disc"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::OriginalYearAlbum:{
|
||||
QString query("DISTINCT year, originalyear, album, album_id");
|
||||
QString query(QStringLiteral("DISTINCT year, originalyear, album, album_id"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::OriginalYearAlbumDisc:{
|
||||
QString query("DISTINCT year, originalyear, album, album_id, disc");
|
||||
QString query(QStringLiteral("DISTINCT year, originalyear, album, album_id, disc"));
|
||||
if (separate_albums_by_grouping) query.append(", grouping");
|
||||
query_options->set_column_spec(query);
|
||||
break;
|
||||
}
|
||||
case GroupBy::Disc:
|
||||
query_options->set_column_spec("DISTINCT disc");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT disc"));
|
||||
break;
|
||||
case GroupBy::Year:
|
||||
query_options->set_column_spec("DISTINCT year");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT year"));
|
||||
break;
|
||||
case GroupBy::OriginalYear:
|
||||
query_options->set_column_spec("DISTINCT effective_originalyear");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT effective_originalyear"));
|
||||
break;
|
||||
case GroupBy::Genre:
|
||||
query_options->set_column_spec("DISTINCT genre");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT genre"));
|
||||
break;
|
||||
case GroupBy::Composer:
|
||||
query_options->set_column_spec("DISTINCT composer");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT composer"));
|
||||
break;
|
||||
case GroupBy::Performer:
|
||||
query_options->set_column_spec("DISTINCT performer");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT performer"));
|
||||
break;
|
||||
case GroupBy::Grouping:
|
||||
query_options->set_column_spec("DISTINCT grouping");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT grouping"));
|
||||
break;
|
||||
case GroupBy::FileType:
|
||||
query_options->set_column_spec("DISTINCT filetype");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT filetype"));
|
||||
break;
|
||||
case GroupBy::Format:
|
||||
query_options->set_column_spec("DISTINCT filetype, samplerate, bitdepth");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT filetype, samplerate, bitdepth"));
|
||||
break;
|
||||
case GroupBy::Samplerate:
|
||||
query_options->set_column_spec("DISTINCT samplerate");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT samplerate"));
|
||||
break;
|
||||
case GroupBy::Bitdepth:
|
||||
query_options->set_column_spec("DISTINCT bitdepth");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT bitdepth"));
|
||||
break;
|
||||
case GroupBy::Bitrate:
|
||||
query_options->set_column_spec("DISTINCT bitrate");
|
||||
query_options->set_column_spec(QStringLiteral("DISTINCT bitrate"));
|
||||
break;
|
||||
case GroupBy::None:
|
||||
case GroupBy::GroupByCount:
|
||||
@ -1151,7 +1151,7 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_
|
||||
else {
|
||||
// Don't duplicate compilations outside the Various artists node
|
||||
query_options->set_compilation_requirement(CollectionQueryOptions::CompilationRequirement::Off);
|
||||
query_options->AddWhere("effective_albumartist", item->metadata.effective_albumartist());
|
||||
query_options->AddWhere(QStringLiteral("effective_albumartist"), item->metadata.effective_albumartist());
|
||||
}
|
||||
break;
|
||||
case GroupBy::Artist:
|
||||
@ -1161,85 +1161,85 @@ void CollectionModel::AddQueryWhere(const GroupBy group_by, const bool separate_
|
||||
else {
|
||||
// Don't duplicate compilations outside the Various artists node
|
||||
query_options->set_compilation_requirement(CollectionQueryOptions::CompilationRequirement::Off);
|
||||
query_options->AddWhere("artist", item->metadata.artist());
|
||||
query_options->AddWhere(QStringLiteral("artist"), item->metadata.artist());
|
||||
}
|
||||
break;
|
||||
case GroupBy::Album:
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::AlbumDisc:
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
query_options->AddWhere("disc", item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
query_options->AddWhere(QStringLiteral("disc"), item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::YearAlbum:
|
||||
query_options->AddWhere("year", item->metadata.year());
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("year"), item->metadata.year());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::YearAlbumDisc:
|
||||
query_options->AddWhere("year", item->metadata.year());
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
query_options->AddWhere("disc", item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("year"), item->metadata.year());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
query_options->AddWhere(QStringLiteral("disc"), item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::OriginalYearAlbum:
|
||||
query_options->AddWhere("year", item->metadata.year());
|
||||
query_options->AddWhere("originalyear", item->metadata.originalyear());
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("year"), item->metadata.year());
|
||||
query_options->AddWhere(QStringLiteral("originalyear"), item->metadata.originalyear());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::OriginalYearAlbumDisc:
|
||||
query_options->AddWhere("year", item->metadata.year());
|
||||
query_options->AddWhere("originalyear", item->metadata.originalyear());
|
||||
query_options->AddWhere("album", item->metadata.album());
|
||||
query_options->AddWhere("album_id", item->metadata.album_id());
|
||||
query_options->AddWhere("disc", item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("year"), item->metadata.year());
|
||||
query_options->AddWhere(QStringLiteral("originalyear"), item->metadata.originalyear());
|
||||
query_options->AddWhere(QStringLiteral("album"), item->metadata.album());
|
||||
query_options->AddWhere(QStringLiteral("album_id"), item->metadata.album_id());
|
||||
query_options->AddWhere(QStringLiteral("disc"), item->metadata.disc());
|
||||
if (separate_albums_by_grouping) query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::Disc:
|
||||
query_options->AddWhere("disc", item->metadata.disc());
|
||||
query_options->AddWhere(QStringLiteral("disc"), item->metadata.disc());
|
||||
break;
|
||||
case GroupBy::Year:
|
||||
query_options->AddWhere("year", item->metadata.year());
|
||||
query_options->AddWhere(QStringLiteral("year"), item->metadata.year());
|
||||
break;
|
||||
case GroupBy::OriginalYear:
|
||||
query_options->AddWhere("effective_originalyear", item->metadata.effective_originalyear());
|
||||
query_options->AddWhere(QStringLiteral("effective_originalyear"), item->metadata.effective_originalyear());
|
||||
break;
|
||||
case GroupBy::Genre:
|
||||
query_options->AddWhere("genre", item->metadata.genre());
|
||||
query_options->AddWhere(QStringLiteral("genre"), item->metadata.genre());
|
||||
break;
|
||||
case GroupBy::Composer:
|
||||
query_options->AddWhere("composer", item->metadata.composer());
|
||||
query_options->AddWhere(QStringLiteral("composer"), item->metadata.composer());
|
||||
break;
|
||||
case GroupBy::Performer:
|
||||
query_options->AddWhere("performer", item->metadata.performer());
|
||||
query_options->AddWhere(QStringLiteral("performer"), item->metadata.performer());
|
||||
break;
|
||||
case GroupBy::Grouping:
|
||||
query_options->AddWhere("grouping", item->metadata.grouping());
|
||||
query_options->AddWhere(QStringLiteral("grouping"), item->metadata.grouping());
|
||||
break;
|
||||
case GroupBy::FileType:
|
||||
query_options->AddWhere("filetype", static_cast<int>(item->metadata.filetype()));
|
||||
query_options->AddWhere(QStringLiteral("filetype"), static_cast<int>(item->metadata.filetype()));
|
||||
break;
|
||||
case GroupBy::Format:
|
||||
query_options->AddWhere("filetype", static_cast<int>(item->metadata.filetype()));
|
||||
query_options->AddWhere("samplerate", item->metadata.samplerate());
|
||||
query_options->AddWhere("bitdepth", item->metadata.bitdepth());
|
||||
query_options->AddWhere(QStringLiteral("filetype"), static_cast<int>(item->metadata.filetype()));
|
||||
query_options->AddWhere(QStringLiteral("samplerate"), item->metadata.samplerate());
|
||||
query_options->AddWhere(QStringLiteral("bitdepth"), item->metadata.bitdepth());
|
||||
break;
|
||||
case GroupBy::Samplerate:
|
||||
query_options->AddWhere("samplerate", item->metadata.samplerate());
|
||||
query_options->AddWhere(QStringLiteral("samplerate"), item->metadata.samplerate());
|
||||
break;
|
||||
case GroupBy::Bitdepth:
|
||||
query_options->AddWhere("bitdepth", item->metadata.bitdepth());
|
||||
query_options->AddWhere(QStringLiteral("bitdepth"), item->metadata.bitdepth());
|
||||
break;
|
||||
case GroupBy::Bitrate:
|
||||
query_options->AddWhere("bitrate", item->metadata.bitrate());
|
||||
query_options->AddWhere(QStringLiteral("bitrate"), item->metadata.bitrate());
|
||||
break;
|
||||
case GroupBy::None:
|
||||
case GroupBy::GroupByCount:
|
||||
@ -1745,12 +1745,12 @@ QString CollectionModel::PrettyDisc(const int disc) {
|
||||
QString CollectionModel::SortText(QString text) {
|
||||
|
||||
if (text.isEmpty()) {
|
||||
text = " unknown";
|
||||
text = QStringLiteral(" unknown");
|
||||
}
|
||||
else {
|
||||
text = text.toLower();
|
||||
}
|
||||
text = text.remove(QRegularExpression("[^\\w ]", QRegularExpression::UseUnicodePropertiesOption));
|
||||
text = text.remove(QRegularExpression(QStringLiteral("[^\\w ]"), QRegularExpression::UseUnicodePropertiesOption));
|
||||
|
||||
return text;
|
||||
|
||||
@ -1776,27 +1776,27 @@ QString CollectionModel::SortTextForArtist(QString artist, const bool skip_artic
|
||||
|
||||
QString CollectionModel::SortTextForNumber(const int number) {
|
||||
|
||||
return QString("%1").arg(number, 4, 10, QChar('0'));
|
||||
return QStringLiteral("%1").arg(number, 4, 10, QChar('0'));
|
||||
}
|
||||
|
||||
QString CollectionModel::SortTextForYear(const int year) {
|
||||
|
||||
QString str = QString::number(year);
|
||||
return QString("0").repeated(qMax(0, 4 - str.length())) + str;
|
||||
return QStringLiteral("0").repeated(qMax(0, 4 - str.length())) + str;
|
||||
|
||||
}
|
||||
|
||||
QString CollectionModel::SortTextForBitrate(const int bitrate) {
|
||||
|
||||
QString str = QString::number(bitrate);
|
||||
return QString("0").repeated(qMax(0, 3 - str.length())) + str;
|
||||
return QStringLiteral("0").repeated(qMax(0, 3 - str.length())) + str;
|
||||
|
||||
}
|
||||
|
||||
QString CollectionModel::SortTextForSong(const Song &song) {
|
||||
|
||||
QString ret = QString::number(std::max(0, song.disc()) * 1000 + std::max(0, song.track()));
|
||||
ret.prepend(QString("0").repeated(6 - ret.length()));
|
||||
ret.prepend(QStringLiteral("0").repeated(6 - ret.length()));
|
||||
ret.append(song.url().toString());
|
||||
return ret;
|
||||
|
||||
@ -1818,7 +1818,7 @@ Qt::ItemFlags CollectionModel::flags(const QModelIndex &idx) const {
|
||||
}
|
||||
|
||||
QStringList CollectionModel::mimeTypes() const {
|
||||
return QStringList() << "text/uri-list";
|
||||
return QStringList() << QStringLiteral("text/uri-list");
|
||||
}
|
||||
|
||||
QMimeData *CollectionModel::mimeData(const QModelIndexList &indexes) const {
|
||||
|
@ -54,9 +54,9 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
// 3) Remove colons which don't correspond to column names.
|
||||
|
||||
// Split on whitespace
|
||||
QString filter_text = filter_options.filter_text().replace(QRegularExpression(":\\s+"), ":");
|
||||
QString filter_text = filter_options.filter_text().replace(QRegularExpression(QStringLiteral(":\\s+")), QStringLiteral(":"));
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
|
||||
QStringList tokens(filter_text.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts));
|
||||
QStringList tokens(filter_text.split(QRegularExpression(QStringLiteral("\\s+")), Qt::SkipEmptyParts));
|
||||
#else
|
||||
QStringList tokens(filter_text.split(QRegularExpression("\\s+"), QString::SkipEmptyParts));
|
||||
#endif
|
||||
@ -69,7 +69,7 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
|
||||
if (token.contains(':')) {
|
||||
const QString columntoken = token.section(':', 0, 0);
|
||||
QString subtoken = token.section(':', 1, -1).replace(":", " ").trimmed();
|
||||
QString subtoken = token.section(':', 1, -1).replace(QLatin1String(":"), QLatin1String(" ")).trimmed();
|
||||
if (subtoken.isEmpty()) continue;
|
||||
if (Song::kFtsColumns.contains("fts" + columntoken, Qt::CaseInsensitive)) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
@ -77,10 +77,10 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
}
|
||||
else if (Song::kNumericalColumns.contains(columntoken, Qt::CaseInsensitive)) {
|
||||
QString comparator = RemoveSqlOperator(subtoken);
|
||||
if (columntoken.compare("rating", Qt::CaseInsensitive) == 0) {
|
||||
if (columntoken.compare(QLatin1String("rating"), Qt::CaseInsensitive) == 0) {
|
||||
AddWhereRating(subtoken, comparator);
|
||||
}
|
||||
else if (columntoken.compare("length", Qt::CaseInsensitive) == 0) {
|
||||
else if (columntoken.compare(QLatin1String("length"), Qt::CaseInsensitive) == 0) {
|
||||
// Time is saved in nanoseconds, so add 9 0's
|
||||
QString parsedTime = QString::number(Utilities::ParseSearchTime(subtoken)) + "000000000";
|
||||
AddWhere(columntoken, parsedTime, comparator);
|
||||
@ -91,7 +91,7 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
}
|
||||
// Not a valid filter, remove
|
||||
else {
|
||||
token = token.replace(":", " ").trimmed();
|
||||
token = token.replace(QLatin1String(":"), QLatin1String(" ")).trimmed();
|
||||
if (!token.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query += "\"" + token + "\"*";
|
||||
@ -104,7 +104,7 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
}
|
||||
}
|
||||
if (!query.isEmpty()) {
|
||||
where_clauses_ << "fts.%fts_table_noprefix MATCH ?";
|
||||
where_clauses_ << QStringLiteral("fts.%fts_table_noprefix MATCH ?");
|
||||
bound_values_ << query;
|
||||
join_with_fts_ = true;
|
||||
}
|
||||
@ -113,7 +113,7 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
if (filter_options.max_age() != -1) {
|
||||
qint64 cutoff = QDateTime::currentDateTime().toSecsSinceEpoch() - filter_options.max_age();
|
||||
|
||||
where_clauses_ << "ctime > ?";
|
||||
where_clauses_ << QStringLiteral("ctime > ?");
|
||||
bound_values_ << cutoff;
|
||||
}
|
||||
|
||||
@ -126,15 +126,15 @@ CollectionQuery::CollectionQuery(const QSqlDatabase &db, const QString &songs_ta
|
||||
duplicates_only_ = filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Duplicates;
|
||||
|
||||
if (filter_options.filter_mode() == CollectionFilterOptions::FilterMode::Untagged) {
|
||||
where_clauses_ << "(artist = '' OR album = '' OR title ='')";
|
||||
where_clauses_ << QStringLiteral("(artist = '' OR album = '' OR title ='')");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QString CollectionQuery::RemoveSqlOperator(QString &token) {
|
||||
|
||||
QString op = "=";
|
||||
static QRegularExpression rxOp("^(=|<[>=]?|>=?|!=)");
|
||||
QString op = QStringLiteral("=");
|
||||
static QRegularExpression rxOp(QStringLiteral("^(=|<[>=]?|>=?|!=)"));
|
||||
QRegularExpressionMatch match = rxOp.match(token);
|
||||
if (match.hasMatch()) {
|
||||
op = match.captured(0);
|
||||
@ -142,7 +142,7 @@ QString CollectionQuery::RemoveSqlOperator(QString &token) {
|
||||
token.remove(rxOp);
|
||||
|
||||
if (op == "!=") {
|
||||
op = "<>";
|
||||
op = QStringLiteral("<>");
|
||||
}
|
||||
|
||||
return op;
|
||||
@ -152,16 +152,16 @@ QString CollectionQuery::RemoveSqlOperator(QString &token) {
|
||||
void CollectionQuery::AddWhere(const QString &column, const QVariant &value, const QString &op) {
|
||||
|
||||
// Ignore 'literal' for IN
|
||||
if (op.compare("IN", Qt::CaseInsensitive) == 0) {
|
||||
if (op.compare(QLatin1String("IN"), Qt::CaseInsensitive) == 0) {
|
||||
QStringList values = value.toStringList();
|
||||
QStringList final_values;
|
||||
final_values.reserve(values.count());
|
||||
for (const QString &single_value : values) {
|
||||
final_values.append("?");
|
||||
final_values.append(QStringLiteral("?"));
|
||||
bound_values_ << single_value;
|
||||
}
|
||||
|
||||
where_clauses_ << QString("%1 IN (" + final_values.join(",") + ")").arg(column);
|
||||
where_clauses_ << QString("%1 IN (" + final_values.join(QStringLiteral(",")) + ")").arg(column);
|
||||
}
|
||||
else {
|
||||
// Do integers inline - sqlite seems to get confused when you pass integers to bound parameters
|
||||
@ -170,7 +170,7 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con
|
||||
#else
|
||||
if (value.type() == QVariant::Int) {
|
||||
#endif
|
||||
where_clauses_ << QString("%1 %2 %3").arg(column, op, value.toString());
|
||||
where_clauses_ << QStringLiteral("%1 %2 %3").arg(column, op, value.toString());
|
||||
}
|
||||
else if (
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
@ -179,11 +179,11 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con
|
||||
value.type() == QVariant::String
|
||||
#endif
|
||||
&& value.toString().isNull()) {
|
||||
where_clauses_ << QString("%1 %2 ?").arg(column, op);
|
||||
bound_values_ << QString("");
|
||||
where_clauses_ << QStringLiteral("%1 %2 ?").arg(column, op);
|
||||
bound_values_ << QLatin1String("");
|
||||
}
|
||||
else {
|
||||
where_clauses_ << QString("%1 %2 ?").arg(column, op);
|
||||
where_clauses_ << QStringLiteral("%1 %2 ?").arg(column, op);
|
||||
bound_values_ << value;
|
||||
}
|
||||
}
|
||||
@ -192,7 +192,7 @@ void CollectionQuery::AddWhere(const QString &column, const QVariant &value, con
|
||||
|
||||
void CollectionQuery::AddWhereArtist(const QVariant &value) {
|
||||
|
||||
where_clauses_ << QString("((artist = ? AND albumartist = '') OR albumartist = ?)");
|
||||
where_clauses_ << QStringLiteral("((artist = ? AND albumartist = '') OR albumartist = ?)");
|
||||
bound_values_ << value;
|
||||
bound_values_ << value;
|
||||
|
||||
@ -206,25 +206,25 @@ void CollectionQuery::AddWhereRating(const QVariant &value, const QString &op) {
|
||||
// So we have to use a certain tolerance, so that the searched value is definetly included.
|
||||
const float tolerance = 0.001F;
|
||||
if (op == "<") {
|
||||
AddWhere("rating", parsed_rating-tolerance, "<");
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating-tolerance, QStringLiteral("<"));
|
||||
}
|
||||
else if (op == ">") {
|
||||
AddWhere("rating", parsed_rating+tolerance, ">");
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating+tolerance, QStringLiteral(">"));
|
||||
}
|
||||
else if (op == "<=") {
|
||||
AddWhere("rating", parsed_rating+tolerance, "<=");
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating+tolerance, QStringLiteral("<="));
|
||||
}
|
||||
else if (op == ">=") {
|
||||
AddWhere("rating", parsed_rating-tolerance, ">=");
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating-tolerance, QStringLiteral(">="));
|
||||
}
|
||||
else if (op == "<>") {
|
||||
where_clauses_ << QString("(rating<? OR rating>?)");
|
||||
where_clauses_ << QStringLiteral("(rating<? OR rating>?)");
|
||||
bound_values_ << parsed_rating - tolerance;
|
||||
bound_values_ << parsed_rating + tolerance;
|
||||
}
|
||||
else /* (op == "=") */ {
|
||||
AddWhere("rating", parsed_rating+tolerance, "<");
|
||||
AddWhere("rating", parsed_rating-tolerance, ">");
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating+tolerance, QStringLiteral("<"));
|
||||
AddWhere(QStringLiteral("rating"), parsed_rating-tolerance, QStringLiteral(">"));
|
||||
}
|
||||
|
||||
}
|
||||
@ -233,7 +233,7 @@ void CollectionQuery::AddCompilationRequirement(const bool compilation) {
|
||||
// The unary + is added to prevent sqlite from using the index idx_comp_artist.
|
||||
// When joining with fts, sqlite 3.8 has a tendency to use this index and thereby nesting the tables in an order which gives very poor performance
|
||||
|
||||
where_clauses_ << QString("+compilation_effective = %1").arg(compilation ? 1 : 0);
|
||||
where_clauses_ << QStringLiteral("+compilation_effective = %1").arg(compilation ? 1 : 0);
|
||||
|
||||
}
|
||||
|
||||
@ -251,26 +251,26 @@ bool CollectionQuery::Exec() {
|
||||
QString sql;
|
||||
|
||||
if (join_with_fts_) {
|
||||
sql = QString("SELECT %1 FROM %2 INNER JOIN %3 AS fts ON %2.ROWID = fts.ROWID").arg(column_spec_, songs_table_, fts_table_);
|
||||
sql = QStringLiteral("SELECT %1 FROM %2 INNER JOIN %3 AS fts ON %2.ROWID = fts.ROWID").arg(column_spec_, songs_table_, fts_table_);
|
||||
}
|
||||
else {
|
||||
sql = QString("SELECT %1 FROM %2 %3").arg(column_spec_, songs_table_, GetInnerQuery());
|
||||
sql = QStringLiteral("SELECT %1 FROM %2 %3").arg(column_spec_, songs_table_, GetInnerQuery());
|
||||
}
|
||||
|
||||
QStringList where_clauses(where_clauses_);
|
||||
if (!include_unavailable_) {
|
||||
where_clauses << "unavailable = 0";
|
||||
where_clauses << QStringLiteral("unavailable = 0");
|
||||
}
|
||||
|
||||
if (!where_clauses.isEmpty()) sql += " WHERE " + where_clauses.join(" AND ");
|
||||
if (!where_clauses.isEmpty()) sql += " WHERE " + where_clauses.join(QStringLiteral(" AND "));
|
||||
|
||||
if (!order_by_.isEmpty()) sql += " ORDER BY " + order_by_;
|
||||
|
||||
if (limit_ != -1) sql += " LIMIT " + QString::number(limit_);
|
||||
|
||||
sql.replace("%songs_table", songs_table_);
|
||||
sql.replace("%fts_table_noprefix", fts_table_.section('.', -1, -1));
|
||||
sql.replace("%fts_table", fts_table_);
|
||||
sql.replace(QLatin1String("%songs_table"), songs_table_);
|
||||
sql.replace(QLatin1String("%fts_table_noprefix"), fts_table_.section('.', -1, -1));
|
||||
sql.replace(QLatin1String("%fts_table"), fts_table_);
|
||||
|
||||
if (!QSqlQuery::prepare(sql)) return false;
|
||||
|
||||
|
@ -67,9 +67,9 @@ class CollectionQuery : public QSqlQuery {
|
||||
QString RemoveSqlOperator(QString &token);
|
||||
// Adds a fragment of WHERE clause. When executed, this Query will connect all the fragments with AND operator.
|
||||
// Please note that IN operator expects a QStringList as value.
|
||||
void AddWhere(const QString &column, const QVariant &value, const QString &op = "=");
|
||||
void AddWhere(const QString &column, const QVariant &value, const QString &op = QStringLiteral("="));
|
||||
void AddWhereArtist(const QVariant &value);
|
||||
void AddWhereRating(const QVariant &value, const QString &op = "=");
|
||||
void AddWhereRating(const QVariant &value, const QString &op = QStringLiteral("="));
|
||||
|
||||
void SetBoundValues(const QVariantList &bound_values) { bound_values_ = bound_values; }
|
||||
void SetDuplicatesOnly(const bool duplicates_only) { duplicates_only_ = duplicates_only; }
|
||||
|
@ -51,7 +51,7 @@ class CollectionQueryOptions {
|
||||
void set_query_have_compilations(const bool query_have_compilations) { query_have_compilations_ = query_have_compilations; }
|
||||
|
||||
QList<Where> where_clauses() const { return where_clauses_; }
|
||||
void AddWhere(const QString &column, const QVariant &value, const QString &op = "=");
|
||||
void AddWhere(const QString &column, const QVariant &value, const QString &op = QStringLiteral("="));
|
||||
|
||||
private:
|
||||
QString column_spec_;
|
||||
|
@ -80,7 +80,7 @@ CollectionView::CollectionView(QWidget *parent)
|
||||
total_song_count_(-1),
|
||||
total_artist_count_(-1),
|
||||
total_album_count_(-1),
|
||||
nomusic_(":/pictures/nomusic.png"),
|
||||
nomusic_(QStringLiteral(":/pictures/nomusic.png")),
|
||||
context_menu_(nullptr),
|
||||
action_load_(nullptr),
|
||||
action_add_to_playlist_(nullptr),
|
||||
@ -109,7 +109,7 @@ CollectionView::CollectionView(QWidget *parent)
|
||||
setDragDropMode(QAbstractItemView::DragOnly);
|
||||
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
|
||||
setStyleSheet("QTreeView::item{padding-top:1px;}");
|
||||
setStyleSheet(QStringLiteral("QTreeView::item{padding-top:1px;}"));
|
||||
|
||||
}
|
||||
|
||||
@ -364,29 +364,29 @@ void CollectionView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu(this);
|
||||
action_add_to_playlist_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Append to current playlist"), this, &CollectionView::AddToPlaylist);
|
||||
action_load_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Replace current playlist"), this, &CollectionView::Load);
|
||||
action_open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), this, &CollectionView::OpenInNewPlaylist);
|
||||
action_add_to_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &CollectionView::AddToPlaylist);
|
||||
action_load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &CollectionView::Load);
|
||||
action_open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &CollectionView::OpenInNewPlaylist);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue track"), this, &CollectionView::AddToPlaylistEnqueue);
|
||||
action_add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext);
|
||||
action_add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &CollectionView::AddToPlaylistEnqueue);
|
||||
action_add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue to play next"), this, &CollectionView::AddToPlaylistEnqueueNext);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
action_search_for_this_ = context_menu_->addAction(IconLoader::Load("edit-find"), tr("Search for this"), this, &CollectionView::SearchForThis);
|
||||
action_search_for_this_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-find")), tr("Search for this"), this, &CollectionView::SearchForThis);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
action_organize_ = context_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organize files..."), this, &CollectionView::Organize);
|
||||
action_organize_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Organize files..."), this, &CollectionView::Organize);
|
||||
#ifndef Q_OS_WIN
|
||||
action_copy_to_device_ = context_menu_->addAction(IconLoader::Load("device"), tr("Copy to device..."), this, &CollectionView::CopyToDevice);
|
||||
action_copy_to_device_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("device")), tr("Copy to device..."), this, &CollectionView::CopyToDevice);
|
||||
#endif
|
||||
action_delete_files_ = context_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from disk..."), this, &CollectionView::Delete);
|
||||
action_delete_files_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from disk..."), this, &CollectionView::Delete);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
action_edit_track_ = context_menu_->addAction(IconLoader::Load("edit-rename"), tr("Edit track information..."), this, &CollectionView::EditTracks);
|
||||
action_edit_tracks_ = context_menu_->addAction(IconLoader::Load("edit-rename"), tr("Edit tracks information..."), this, &CollectionView::EditTracks);
|
||||
action_show_in_browser_ = context_menu_->addAction(IconLoader::Load("document-open-folder"), tr("Show in file browser..."), this, &CollectionView::ShowInBrowser);
|
||||
action_edit_track_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-rename")), tr("Edit track information..."), this, &CollectionView::EditTracks);
|
||||
action_edit_tracks_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-rename")), tr("Edit tracks information..."), this, &CollectionView::EditTracks);
|
||||
action_show_in_browser_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), tr("Show in file browser..."), this, &CollectionView::ShowInBrowser);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
@ -582,7 +582,7 @@ void CollectionView::SearchForThis() {
|
||||
if (!songs.isEmpty()) {
|
||||
last_selected_song_ = songs.last();
|
||||
}
|
||||
search = QString("title:%1").arg(last_selected_song_.title());
|
||||
search = QStringLiteral("title:%1").arg(last_selected_song_.title());
|
||||
break;
|
||||
}
|
||||
|
||||
@ -598,53 +598,53 @@ void CollectionView::SearchForThis() {
|
||||
|
||||
switch (container_group_by) {
|
||||
case CollectionModel::GroupBy::AlbumArtist:
|
||||
search = QString("albumartist:%1").arg(item->metadata.effective_albumartist());
|
||||
search = QStringLiteral("albumartist:%1").arg(item->metadata.effective_albumartist());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Artist:
|
||||
search = QString("artist:%1").arg(item->metadata.artist());
|
||||
search = QStringLiteral("artist:%1").arg(item->metadata.artist());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Album:
|
||||
search = QString("album:%1").arg(item->metadata.album());
|
||||
search = QStringLiteral("album:%1").arg(item->metadata.album());
|
||||
break;
|
||||
case CollectionModel::GroupBy::AlbumDisc:
|
||||
search = QString("album:%1").arg(item->metadata.album());
|
||||
search = QStringLiteral("album:%1").arg(item->metadata.album());
|
||||
break;
|
||||
case CollectionModel::GroupBy::YearAlbum:
|
||||
case CollectionModel::GroupBy::YearAlbumDisc:{
|
||||
search = QString("year:%1 album:%2").arg(item->metadata.year()).arg(item->metadata.album());
|
||||
search = QStringLiteral("year:%1 album:%2").arg(item->metadata.year()).arg(item->metadata.album());
|
||||
break;
|
||||
}
|
||||
case CollectionModel::GroupBy::OriginalYearAlbum:
|
||||
case CollectionModel::GroupBy::OriginalYearAlbumDisc:{
|
||||
search = QString("year:%1 album:%2").arg(item->metadata.effective_originalyear()).arg(item->metadata.album());
|
||||
search = QStringLiteral("year:%1 album:%2").arg(item->metadata.effective_originalyear()).arg(item->metadata.album());
|
||||
break;
|
||||
}
|
||||
case CollectionModel::GroupBy::Year:
|
||||
search = QString("year:%1").arg(item->metadata.year());
|
||||
search = QStringLiteral("year:%1").arg(item->metadata.year());
|
||||
break;
|
||||
case CollectionModel::GroupBy::OriginalYear:
|
||||
search = QString("year:%1").arg(item->metadata.effective_originalyear());
|
||||
search = QStringLiteral("year:%1").arg(item->metadata.effective_originalyear());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Genre:
|
||||
search = QString("genre:%1").arg(item->metadata.genre());
|
||||
search = QStringLiteral("genre:%1").arg(item->metadata.genre());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Composer:
|
||||
search = QString("composer:%1").arg(item->metadata.composer());
|
||||
search = QStringLiteral("composer:%1").arg(item->metadata.composer());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Performer:
|
||||
search = QString("performer:%1").arg(item->metadata.performer());
|
||||
search = QStringLiteral("performer:%1").arg(item->metadata.performer());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Grouping:
|
||||
search = QString("grouping:%1").arg(item->metadata.grouping());
|
||||
search = QStringLiteral("grouping:%1").arg(item->metadata.grouping());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Samplerate:
|
||||
search = QString("samplerate:%1").arg(item->metadata.samplerate());
|
||||
search = QStringLiteral("samplerate:%1").arg(item->metadata.samplerate());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Bitdepth:
|
||||
search = QString("bitdepth:%1").arg(item->metadata.bitdepth());
|
||||
search = QStringLiteral("bitdepth:%1").arg(item->metadata.bitdepth());
|
||||
break;
|
||||
case CollectionModel::GroupBy::Bitrate:
|
||||
search = QString("bitrate:%1").arg(item->metadata.bitrate());
|
||||
search = QStringLiteral("bitrate:%1").arg(item->metadata.bitrate());
|
||||
break;
|
||||
default:
|
||||
search = model()->data(current, Qt::DisplayRole).toString();
|
||||
|
@ -70,8 +70,8 @@
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
QStringList CollectionWatcher::sValidImages = QStringList() << "jpg" << "png" << "gif" << "jpeg";
|
||||
QStringList CollectionWatcher::kIgnoredExtensions = QStringList() << "tmp" << "tar" << "gz" << "bz2" << "xz" << "tbz" << "tgz" << "z" << "zip" << "rar";
|
||||
QStringList CollectionWatcher::sValidImages = QStringList() << QStringLiteral("jpg") << QStringLiteral("png") << QStringLiteral("gif") << QStringLiteral("jpeg");
|
||||
QStringList CollectionWatcher::kIgnoredExtensions = QStringList() << QStringLiteral("tmp") << QStringLiteral("tar") << QStringLiteral("gz") << QStringLiteral("bz2") << QStringLiteral("xz") << QStringLiteral("tbz") << QStringLiteral("tgz") << QStringLiteral("z") << QStringLiteral("zip") << QStringLiteral("rar");
|
||||
|
||||
CollectionWatcher::CollectionWatcher(Song::Source source, QObject *parent)
|
||||
: QObject(parent),
|
||||
@ -154,7 +154,7 @@ void CollectionWatcher::ReloadSettings() {
|
||||
s.beginGroup(CollectionSettingsPage::kSettingsGroup);
|
||||
scan_on_startup_ = s.value("startup_scan", true).toBool();
|
||||
monitor_ = s.value("monitor", true).toBool();
|
||||
QStringList filters = s.value("cover_art_patterns", QStringList() << "front" << "cover").toStringList();
|
||||
QStringList filters = s.value("cover_art_patterns", QStringList() << QStringLiteral("front") << QStringLiteral("cover")).toStringList();
|
||||
if (source_ == Song::Source::Collection) {
|
||||
song_tracking_ = s.value("song_tracking", false).toBool();
|
||||
song_ebur128_loudness_analysis_ = s.value("song_ebur128_loudness_analysis", false).toBool();
|
||||
@ -612,7 +612,7 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const CollectionSu
|
||||
Chromaprinter chromaprinter(file);
|
||||
fingerprint = chromaprinter.CreateFingerprint();
|
||||
if (fingerprint.isEmpty()) {
|
||||
fingerprint = "NONE";
|
||||
fingerprint = QStringLiteral("NONE");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -639,7 +639,7 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const CollectionSu
|
||||
Chromaprinter chromaprinter(file);
|
||||
fingerprint = chromaprinter.CreateFingerprint();
|
||||
if (fingerprint.isEmpty()) {
|
||||
fingerprint = "NONE";
|
||||
fingerprint = QStringLiteral("NONE");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -892,50 +892,50 @@ void CollectionWatcher::AddChangedSong(const QString &file, const Song &matching
|
||||
}
|
||||
else {
|
||||
if (matching_song.url() != new_song.url()) {
|
||||
changes << "file path";
|
||||
changes << QStringLiteral("file path");
|
||||
notify_new = true;
|
||||
}
|
||||
if (matching_song.fingerprint() != new_song.fingerprint()) {
|
||||
changes << "fingerprint";
|
||||
changes << QStringLiteral("fingerprint");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsMetadataEqual(new_song)) {
|
||||
changes << "metadata";
|
||||
changes << QStringLiteral("metadata");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsPlayStatisticsEqual(new_song)) {
|
||||
changes << "play statistics";
|
||||
changes << QStringLiteral("play statistics");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsRatingEqual(new_song)) {
|
||||
changes << "rating";
|
||||
changes << QStringLiteral("rating");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsArtEqual(new_song)) {
|
||||
changes << "album art";
|
||||
changes << QStringLiteral("album art");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsAcoustIdEqual(new_song)) {
|
||||
changes << "acoustid";
|
||||
changes << QStringLiteral("acoustid");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsMusicBrainzEqual(new_song)) {
|
||||
changes << "musicbrainz";
|
||||
changes << QStringLiteral("musicbrainz");
|
||||
notify_new = true;
|
||||
}
|
||||
if (!matching_song.IsEBUR128Equal(new_song)) {
|
||||
changes << "ebur128 loudness characteristics";
|
||||
changes << QStringLiteral("ebur128 loudness characteristics");
|
||||
notify_new = true;
|
||||
}
|
||||
if (matching_song.mtime() != new_song.mtime()) {
|
||||
changes << "mtime";
|
||||
changes << QStringLiteral("mtime");
|
||||
}
|
||||
|
||||
if (changes.isEmpty()) {
|
||||
qLog(Debug) << "Song" << file << "unchanged.";
|
||||
}
|
||||
else {
|
||||
qLog(Debug) << "Song" << file << changes.join(", ") << "changed.";
|
||||
qLog(Debug) << "Song" << file << changes.join(QStringLiteral(", ")) << "changed.";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -252,11 +252,11 @@ class CollectionWatcher : public QObject {
|
||||
};
|
||||
|
||||
inline QString CollectionWatcher::NoExtensionPart(const QString &fileName) {
|
||||
return fileName.contains('.') ? fileName.section('.', 0, -2) : "";
|
||||
return fileName.contains('.') ? fileName.section('.', 0, -2) : QLatin1String("");
|
||||
}
|
||||
// Thanks Amarok
|
||||
inline QString CollectionWatcher::ExtensionPart(const QString &fileName) {
|
||||
return fileName.contains( '.' ) ? fileName.mid( fileName.lastIndexOf('.') + 1 ).toLower() : "";
|
||||
return fileName.contains( '.' ) ? fileName.mid( fileName.lastIndexOf('.') + 1 ).toLower() : QLatin1String("");
|
||||
}
|
||||
inline QString CollectionWatcher::DirectoryPart(const QString &fileName) {
|
||||
return fileName.section('/', 0, -2);
|
||||
|
@ -56,7 +56,7 @@ SavedGroupingManager::SavedGroupingManager(const QString &saved_groupings_settin
|
||||
model_->setHorizontalHeaderItem(2, new QStandardItem(tr("Second Level")));
|
||||
model_->setHorizontalHeaderItem(3, new QStandardItem(tr("Third Level")));
|
||||
ui_->list->setModel(model_);
|
||||
ui_->remove->setIcon(IconLoader::Load("edit-delete"));
|
||||
ui_->remove->setIcon(IconLoader::Load(QStringLiteral("edit-delete")));
|
||||
ui_->remove->setEnabled(false);
|
||||
|
||||
ui_->remove->setShortcut(QKeySequence::Delete);
|
||||
|
@ -56,7 +56,7 @@ ContextAlbum::ContextAlbum(QWidget *parent)
|
||||
album_cover_choice_controller_(nullptr),
|
||||
downloading_covers_(false),
|
||||
timeline_fade_(new QTimeLine(kFadeTimeLineMs, this)),
|
||||
image_strawberry_(":/pictures/strawberry.png"),
|
||||
image_strawberry_(QStringLiteral(":/pictures/strawberry.png")),
|
||||
image_original_(image_strawberry_),
|
||||
pixmap_current_opacity_(1.0),
|
||||
desired_height_(width()) {
|
||||
|
@ -409,15 +409,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 += "<br />";
|
||||
html += QLatin1String("<br />");
|
||||
|
||||
if (collectionview_->TotalArtists() == 1) html += tr("%1 artist").arg(collectionview_->TotalArtists());
|
||||
else html += tr("%1 artists").arg(collectionview_->TotalArtists());
|
||||
html += "<br />";
|
||||
html += QLatin1String("<br />");
|
||||
|
||||
if (collectionview_->TotalAlbums() == 1) html += tr("%1 album").arg(collectionview_->TotalAlbums());
|
||||
else html += tr("%1 albums").arg(collectionview_->TotalAlbums());
|
||||
html += "<br />";
|
||||
html += QLatin1String("<br />");
|
||||
|
||||
label_stop_summary_->setFont(font_normal_);
|
||||
label_stop_summary_->setText(html);
|
||||
@ -438,7 +438,7 @@ void ContextView::UpdateFonts() {
|
||||
void ContextView::SetSong() {
|
||||
|
||||
textedit_top_->setFont(font_headline_);
|
||||
textedit_top_->SetText(QString("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song_playing_, "<br />", true), Utilities::ReplaceMessage(summary_fmt_, song_playing_, "<br />", true)));
|
||||
textedit_top_->SetText(QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song_playing_, QStringLiteral("<br />"), true), Utilities::ReplaceMessage(summary_fmt_, song_playing_, QStringLiteral("<br />"), true)));
|
||||
|
||||
label_stop_summary_->clear();
|
||||
|
||||
@ -474,7 +474,7 @@ void ContextView::SetSong() {
|
||||
else {
|
||||
label_samplerate_title_->show();
|
||||
label_samplerate_->show();
|
||||
SetLabelText(label_samplerate_, song_playing_.samplerate(), "Hz");
|
||||
SetLabelText(label_samplerate_, song_playing_.samplerate(), QStringLiteral("Hz"));
|
||||
}
|
||||
if (song_playing_.bitdepth() <= 0) {
|
||||
label_bitdepth_title_->hide();
|
||||
@ -484,7 +484,7 @@ void ContextView::SetSong() {
|
||||
else {
|
||||
label_bitdepth_title_->show();
|
||||
label_bitdepth_->show();
|
||||
SetLabelText(label_bitdepth_, song_playing_.bitdepth(), "Bit");
|
||||
SetLabelText(label_bitdepth_, song_playing_.bitdepth(), QStringLiteral("Bit"));
|
||||
}
|
||||
if (song_playing_.bitrate() <= 0) {
|
||||
label_bitrate_title_->hide();
|
||||
@ -546,7 +546,7 @@ void ContextView::SetSong() {
|
||||
|
||||
void ContextView::UpdateSong(const Song &song) {
|
||||
|
||||
textedit_top_->SetText(QString("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song, "<br />", true), Utilities::ReplaceMessage(summary_fmt_, song, "<br />", true)));
|
||||
textedit_top_->SetText(QStringLiteral("<b>%1</b><br />%2").arg(Utilities::ReplaceMessage(title_fmt_, song, QStringLiteral("<br />"), true), Utilities::ReplaceMessage(summary_fmt_, song, QStringLiteral("<br />"), true)));
|
||||
|
||||
if (action_show_data_->isChecked()) {
|
||||
if (song.filetype() != song_playing_.filetype()) label_filetype_->setText(song.TextForFiletype());
|
||||
@ -571,7 +571,7 @@ void ContextView::UpdateSong(const Song &song) {
|
||||
else {
|
||||
label_samplerate_title_->show();
|
||||
label_samplerate_->show();
|
||||
SetLabelText(label_samplerate_, song.samplerate(), "Hz");
|
||||
SetLabelText(label_samplerate_, song.samplerate(), QStringLiteral("Hz"));
|
||||
}
|
||||
}
|
||||
if (song.bitdepth() != song_playing_.bitdepth()) {
|
||||
@ -583,7 +583,7 @@ void ContextView::UpdateSong(const Song &song) {
|
||||
else {
|
||||
label_bitdepth_title_->show();
|
||||
label_bitdepth_->show();
|
||||
SetLabelText(label_bitdepth_, song.bitdepth(), "Bit");
|
||||
SetLabelText(label_bitdepth_, song.bitdepth(), QStringLiteral("Bit"));
|
||||
}
|
||||
}
|
||||
if (song.bitrate() != song_playing_.bitrate()) {
|
||||
@ -632,7 +632,7 @@ void ContextView::UpdateLyrics(const quint64 id, const QString &provider, const
|
||||
if (static_cast<qint64>(id) != lyrics_id_) return;
|
||||
|
||||
if (lyrics.isEmpty()) {
|
||||
lyrics_ = "No lyrics found.\n";
|
||||
lyrics_ = QStringLiteral("No lyrics found.\n");
|
||||
}
|
||||
else {
|
||||
lyrics_ = lyrics + "\n\n(Lyrics from " + provider + ")\n";
|
||||
|
@ -112,7 +112,7 @@ CommandlineOptions::CommandlineOptions(int argc, char **argv)
|
||||
#endif
|
||||
|
||||
// Remove the -session option that KDE passes
|
||||
RemoveArg("-session", 2);
|
||||
RemoveArg(QStringLiteral("-session"), 2);
|
||||
|
||||
}
|
||||
|
||||
@ -301,16 +301,16 @@ bool CommandlineOptions::Parse() {
|
||||
volume_modifier_ = -4;
|
||||
break;
|
||||
case LongOptions::Quiet:
|
||||
log_levels_ = "1";
|
||||
log_levels_ = QStringLiteral("1");
|
||||
break;
|
||||
case LongOptions::Verbose:
|
||||
log_levels_ = "3";
|
||||
log_levels_ = QStringLiteral("3");
|
||||
break;
|
||||
case LongOptions::LogLevels:
|
||||
log_levels_ = OptArgToString(optarg);
|
||||
break;
|
||||
case LongOptions::Version: {
|
||||
QString version_text = QString(kVersionText).arg(STRAWBERRY_VERSION_DISPLAY);
|
||||
QString version_text = QString::fromUtf8(kVersionText).arg(QStringLiteral(STRAWBERRY_VERSION_DISPLAY));
|
||||
std::cout << version_text.toLocal8Bit().constData() << std::endl;
|
||||
std::exit(0);
|
||||
}
|
||||
|
@ -114,7 +114,7 @@ QSqlDatabase Database::Connect() {
|
||||
}
|
||||
}
|
||||
|
||||
const QString connection_id = QString("%1_thread_%2").arg(connection_id_).arg(reinterpret_cast<quint64>(QThread::currentThread()));
|
||||
const QString connection_id = QStringLiteral("%1_thread_%2").arg(connection_id_).arg(reinterpret_cast<quint64>(QThread::currentThread()));
|
||||
|
||||
// Try to find an existing connection for this thread
|
||||
QSqlDatabase db;
|
||||
@ -122,12 +122,12 @@ QSqlDatabase Database::Connect() {
|
||||
db = QSqlDatabase::database(connection_id);
|
||||
}
|
||||
else {
|
||||
db = QSqlDatabase::addDatabase("QSQLITE", connection_id);
|
||||
db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connection_id);
|
||||
}
|
||||
if (db.isOpen()) {
|
||||
return db;
|
||||
}
|
||||
db.setConnectOptions("QSQLITE_BUSY_TIMEOUT=30000");
|
||||
db.setConnectOptions(QStringLiteral("QSQLITE_BUSY_TIMEOUT=30000"));
|
||||
//qLog(Debug) << "Opened database with connection id" << connection_id;
|
||||
|
||||
if (injected_database_name_.isNull()) {
|
||||
@ -161,9 +161,9 @@ QSqlDatabase Database::Connect() {
|
||||
|
||||
// Attach the db
|
||||
SqlQuery q(db);
|
||||
q.prepare("ATTACH DATABASE :filename AS :alias");
|
||||
q.BindValue(":filename", filename);
|
||||
q.BindValue(":alias", key);
|
||||
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias"));
|
||||
q.BindValue(QStringLiteral(":filename"), filename);
|
||||
q.BindValue(QStringLiteral(":alias"), key);
|
||||
if (!q.Exec()) {
|
||||
qFatal("Couldn't attach external database '%s'", key.toLatin1().constData());
|
||||
}
|
||||
@ -181,7 +181,7 @@ QSqlDatabase Database::Connect() {
|
||||
}
|
||||
// Find out if there are any tables in this database
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT ROWID FROM %1.sqlite_master WHERE type='table'").arg(key));
|
||||
q.prepare(QStringLiteral("SELECT ROWID FROM %1.sqlite_master WHERE type='table'").arg(key));
|
||||
if (!q.Exec() || !q.next()) {
|
||||
q.finish();
|
||||
ExecSchemaCommandsFromFile(db, attached_databases_[key].schema_, 0);
|
||||
@ -196,7 +196,7 @@ void Database::Close() {
|
||||
|
||||
QMutexLocker l(&connect_mutex_);
|
||||
|
||||
const QString connection_id = QString("%1_thread_%2").arg(connection_id_).arg(reinterpret_cast<quint64>(QThread::currentThread()));
|
||||
const QString connection_id = QStringLiteral("%1_thread_%2").arg(connection_id_).arg(reinterpret_cast<quint64>(QThread::currentThread()));
|
||||
|
||||
// Try to find an existing connection for this thread
|
||||
if (QSqlDatabase::connectionNames().contains(connection_id)) {
|
||||
@ -218,7 +218,7 @@ int Database::SchemaVersion(QSqlDatabase *db) {
|
||||
int schema_version = 0;
|
||||
{
|
||||
SqlQuery q(*db);
|
||||
q.prepare("SELECT version FROM schema_version");
|
||||
q.prepare(QStringLiteral("SELECT version FROM schema_version"));
|
||||
if (q.Exec() && q.next()) {
|
||||
schema_version = q.value(0).toInt();
|
||||
}
|
||||
@ -259,8 +259,8 @@ void Database::RecreateAttachedDb(const QString &database_name) {
|
||||
QSqlDatabase db(Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare("DETACH DATABASE :alias");
|
||||
q.BindValue(":alias", database_name);
|
||||
q.prepare(QStringLiteral("DETACH DATABASE :alias"));
|
||||
q.BindValue(QStringLiteral(":alias"), database_name);
|
||||
if (!q.Exec()) {
|
||||
qLog(Warning) << "Failed to detach database" << database_name;
|
||||
return;
|
||||
@ -289,9 +289,9 @@ void Database::AttachDatabaseOnDbConnection(const QString &database_name, const
|
||||
|
||||
// Attach the db
|
||||
SqlQuery q(db);
|
||||
q.prepare("ATTACH DATABASE :filename AS :alias");
|
||||
q.BindValue(":filename", database.filename_);
|
||||
q.BindValue(":alias", database_name);
|
||||
q.prepare(QStringLiteral("ATTACH DATABASE :filename AS :alias"));
|
||||
q.BindValue(QStringLiteral(":filename"), database.filename_);
|
||||
q.BindValue(QStringLiteral(":alias"), database_name);
|
||||
if (!q.Exec()) {
|
||||
qFatal("Couldn't attach external database '%s'", database_name.toLatin1().constData());
|
||||
}
|
||||
@ -305,8 +305,8 @@ void Database::DetachDatabase(const QString &database_name) {
|
||||
QSqlDatabase db(Connect());
|
||||
|
||||
SqlQuery q(db);
|
||||
q.prepare("DETACH DATABASE :alias");
|
||||
q.BindValue(":alias", database_name);
|
||||
q.prepare(QStringLiteral("DETACH DATABASE :alias"));
|
||||
q.BindValue(QStringLiteral(":alias"), database_name);
|
||||
if (!q.Exec()) {
|
||||
qLog(Warning) << "Failed to detach database" << database_name;
|
||||
return;
|
||||
@ -321,10 +321,10 @@ void Database::UpdateDatabaseSchema(int version, QSqlDatabase &db) {
|
||||
|
||||
QString filename;
|
||||
if (version == 0) {
|
||||
filename = ":/schema/schema.sql";
|
||||
filename = QStringLiteral(":/schema/schema.sql");
|
||||
}
|
||||
else {
|
||||
filename = QString(":/schema/schema-%1.sql").arg(version);
|
||||
filename = QStringLiteral(":/schema/schema-%1.sql").arg(version);
|
||||
qLog(Debug) << "Applying database schema update" << version << "from" << filename;
|
||||
}
|
||||
|
||||
@ -335,9 +335,9 @@ void Database::UpdateDatabaseSchema(int version, QSqlDatabase &db) {
|
||||
void Database::UrlEncodeFilenameColumn(const QString &table, QSqlDatabase &db) {
|
||||
|
||||
SqlQuery select(db);
|
||||
select.prepare(QString("SELECT ROWID, filename FROM %1").arg(table));
|
||||
select.prepare(QStringLiteral("SELECT ROWID, filename FROM %1").arg(table));
|
||||
SqlQuery update(db);
|
||||
update.prepare(QString("UPDATE %1 SET filename=:filename WHERE ROWID=:id").arg(table));
|
||||
update.prepare(QStringLiteral("UPDATE %1 SET filename=:filename WHERE ROWID=:id").arg(table));
|
||||
if (!select.Exec()) {
|
||||
ReportErrors(select);
|
||||
}
|
||||
@ -346,14 +346,14 @@ 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("://")) {
|
||||
if (filename.isEmpty() || filename.contains(QLatin1String("://"))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const QUrl url = QUrl::fromLocalFile(filename);
|
||||
|
||||
update.BindValue(":filename", url.toEncoded());
|
||||
update.BindValue(":id", rowid);
|
||||
update.BindValue(QStringLiteral(":filename"), url.toEncoded());
|
||||
update.BindValue(QStringLiteral(":id"), rowid);
|
||||
if (!update.Exec()) {
|
||||
ReportErrors(update);
|
||||
}
|
||||
@ -370,8 +370,8 @@ void Database::ExecSchemaCommandsFromFile(QSqlDatabase &db, const QString &filen
|
||||
}
|
||||
QByteArray data = schema_file.readAll();
|
||||
QString schema = QString::fromUtf8(data);
|
||||
if (schema.contains("\r\n")) {
|
||||
schema = schema.replace("\r\n", "\n");
|
||||
if (schema.contains(QLatin1String("\r\n"))) {
|
||||
schema = schema.replace(QLatin1String("\r\n"), QLatin1String("\n"));
|
||||
}
|
||||
schema_file.close();
|
||||
ExecSchemaCommands(db, schema, schema_version, in_transaction);
|
||||
@ -382,7 +382,7 @@ void Database::ExecSchemaCommands(QSqlDatabase &db, const QString &schema, int s
|
||||
|
||||
// Run each command
|
||||
QStringList commands;
|
||||
commands = schema.split(QRegularExpression("; *\n\n"));
|
||||
commands = schema.split(QRegularExpression(QStringLiteral("; *\n\n")));
|
||||
|
||||
// We don't want this list to reflect possible DB schema changes, so we initialize it before executing any statements.
|
||||
// If no outer transaction is provided the song tables need to be queried before beginning an inner transaction!
|
||||
@ -408,7 +408,7 @@ void Database::ExecSongTablesCommands(QSqlDatabase &db, const QStringList &song_
|
||||
if (command.contains(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("device_") && command.contains(QString(kMagicAllSongsTables) + "_fts")) {
|
||||
if (table.startsWith(QLatin1String("device_")) && command.contains(QString(kMagicAllSongsTables) + "_fts")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -443,14 +443,14 @@ QStringList Database::SongsTables(QSqlDatabase &db, const int schema_version) {
|
||||
|
||||
// look for the tables in the main db
|
||||
for (const QString &table : db.tables()) {
|
||||
if (table == "songs" || table.endsWith("_songs")) ret << table;
|
||||
if (table == "songs" || table.endsWith(QLatin1String("_songs"))) ret << table;
|
||||
}
|
||||
|
||||
// look for the tables in attached dbs
|
||||
QStringList keys = attached_databases_.keys();
|
||||
for (const QString &key : keys) {
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("SELECT NAME FROM %1.sqlite_master WHERE type='table' AND name='songs' OR name LIKE '%songs'").arg(key));
|
||||
q.prepare(QStringLiteral("SELECT NAME FROM %1.sqlite_master WHERE type='table' AND name='songs' OR name LIKE '%songs'").arg(key));
|
||||
if (q.Exec()) {
|
||||
while (q.next()) {
|
||||
QString tab_name = key + "." + q.value(0).toString();
|
||||
@ -462,7 +462,7 @@ QStringList Database::SongsTables(QSqlDatabase &db, const int schema_version) {
|
||||
}
|
||||
}
|
||||
|
||||
ret << "playlist_items";
|
||||
ret << QStringLiteral("playlist_items");
|
||||
|
||||
return ret;
|
||||
|
||||
@ -488,7 +488,7 @@ bool Database::IntegrityCheck(const QSqlDatabase &db) {
|
||||
bool ok = false;
|
||||
// Ask for 10 error messages at most.
|
||||
SqlQuery q(db);
|
||||
q.prepare("PRAGMA integrity_check(10)");
|
||||
q.prepare(QStringLiteral("PRAGMA integrity_check(10)"));
|
||||
if (q.Exec()) {
|
||||
bool error_reported = false;
|
||||
while (q.next()) {
|
||||
@ -553,7 +553,7 @@ bool Database::OpenDatabase(const QString &filename, sqlite3 **connection) {
|
||||
void Database::BackupFile(const QString &filename) {
|
||||
|
||||
qLog(Debug) << "Starting database backup";
|
||||
QString dest_filename = QString("%1.bak").arg(filename);
|
||||
QString dest_filename = QStringLiteral("%1.bak").arg(filename);
|
||||
const int task_id = app_->task_manager()->StartTask(tr("Backing up database"));
|
||||
|
||||
sqlite3 *source_connection = nullptr;
|
||||
|
@ -148,7 +148,7 @@ class MemoryDatabase : public Database {
|
||||
|
||||
public:
|
||||
explicit MemoryDatabase(Application *app, QObject *parent = nullptr)
|
||||
: Database(app, parent, ":memory:") {}
|
||||
: Database(app, parent, QStringLiteral(":memory:")) {}
|
||||
~MemoryDatabase() override {
|
||||
// Make sure Qt doesn't reuse the same database
|
||||
QSqlDatabase::removeDatabase(Connect().connectionName());
|
||||
|
@ -127,7 +127,7 @@ QIcon IconLoader::Load(const QString &name, const bool system_icon, const int fi
|
||||
qLog(Warning) << "Couldn't load icon" << name << "from custom icons.";
|
||||
}
|
||||
|
||||
const QString path(":/icons/%1x%2/%3.png");
|
||||
const QString path(QStringLiteral(":/icons/%1x%2/%3.png"));
|
||||
for (int s : sizes) {
|
||||
QString filename(path.arg(s).arg(s).arg(name));
|
||||
if (QFile::exists(filename)) ret.addFile(filename, QSize(s, s));
|
||||
|
@ -363,7 +363,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
// Initialize the UI
|
||||
ui_->setupUi(this);
|
||||
|
||||
setWindowIcon(IconLoader::Load("strawberry"));
|
||||
setWindowIcon(IconLoader::Load(QStringLiteral("strawberry")));
|
||||
|
||||
album_cover_choice_controller_->Init(app);
|
||||
|
||||
@ -375,24 +375,24 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
StyleHelper::setBaseColor(palette().color(QPalette::Highlight).darker());
|
||||
|
||||
// Add tabs to the fancy tab widget
|
||||
ui_->tabs->AddTab(context_view_, "context", IconLoader::Load("strawberry", true, 0, 32), tr("Context"));
|
||||
ui_->tabs->AddTab(collection_view_, "collection", IconLoader::Load("library-music", true, 0, 32), tr("Collection"));
|
||||
ui_->tabs->AddTab(queue_view_, "queue", IconLoader::Load("footsteps", true, 0, 32), tr("Queue"));
|
||||
ui_->tabs->AddTab(playlist_list_, "playlists", IconLoader::Load("view-media-playlist", true, 0, 32), tr("Playlists"));
|
||||
ui_->tabs->AddTab(smartplaylists_view_, "smartplaylists", IconLoader::Load("view-media-playlist", true, 0, 32), tr("Smart playlists"));
|
||||
ui_->tabs->AddTab(file_view_, "files", IconLoader::Load("document-open", true, 0, 32), tr("Files"));
|
||||
ui_->tabs->AddTab(radio_view_, "radios", IconLoader::Load("radio", true, 0, 32), tr("Radios"));
|
||||
ui_->tabs->AddTab(context_view_, QStringLiteral("context"), IconLoader::Load(QStringLiteral("strawberry"), true, 0, 32), tr("Context"));
|
||||
ui_->tabs->AddTab(collection_view_, QStringLiteral("collection"), IconLoader::Load(QStringLiteral("library-music"), true, 0, 32), tr("Collection"));
|
||||
ui_->tabs->AddTab(queue_view_, QStringLiteral("queue"), IconLoader::Load(QStringLiteral("footsteps"), true, 0, 32), tr("Queue"));
|
||||
ui_->tabs->AddTab(playlist_list_, QStringLiteral("playlists"), IconLoader::Load(QStringLiteral("view-media-playlist"), true, 0, 32), tr("Playlists"));
|
||||
ui_->tabs->AddTab(smartplaylists_view_, QStringLiteral("smartplaylists"), IconLoader::Load(QStringLiteral("view-media-playlist"), true, 0, 32), tr("Smart playlists"));
|
||||
ui_->tabs->AddTab(file_view_, QStringLiteral("files"), IconLoader::Load(QStringLiteral("document-open"), true, 0, 32), tr("Files"));
|
||||
ui_->tabs->AddTab(radio_view_, QStringLiteral("radios"), IconLoader::Load(QStringLiteral("radio"), true, 0, 32), tr("Radios"));
|
||||
#ifndef Q_OS_WIN
|
||||
ui_->tabs->AddTab(device_view_, "devices", IconLoader::Load("device", true, 0, 32), tr("Devices"));
|
||||
ui_->tabs->AddTab(device_view_, QStringLiteral("devices"), IconLoader::Load(QStringLiteral("device"), true, 0, 32), tr("Devices"));
|
||||
#endif
|
||||
#ifdef HAVE_SUBSONIC
|
||||
ui_->tabs->AddTab(subsonic_view_, "subsonic", IconLoader::Load("subsonic", true, 0, 32), tr("Subsonic"));
|
||||
ui_->tabs->AddTab(subsonic_view_, QStringLiteral("subsonic"), IconLoader::Load(QStringLiteral("subsonic"), true, 0, 32), tr("Subsonic"));
|
||||
#endif
|
||||
#ifdef HAVE_TIDAL
|
||||
ui_->tabs->AddTab(tidal_view_, "tidal", IconLoader::Load("tidal", true, 0, 32), tr("Tidal"));
|
||||
ui_->tabs->AddTab(tidal_view_, QStringLiteral("tidal"), IconLoader::Load(QStringLiteral("tidal"), true, 0, 32), tr("Tidal"));
|
||||
#endif
|
||||
#ifdef HAVE_QOBUZ
|
||||
ui_->tabs->AddTab(qobuz_view_, "qobuz", IconLoader::Load("qobuz", true, 0, 32), tr("Qobuz"));
|
||||
ui_->tabs->AddTab(qobuz_view_, QStringLiteral("qobuz"), IconLoader::Load(QStringLiteral("qobuz"), true, 0, 32), tr("Qobuz"));
|
||||
#endif
|
||||
|
||||
// Add the playing widget to the fancy tab widget
|
||||
@ -447,59 +447,59 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
|
||||
// Help menu
|
||||
|
||||
ui_->action_about_strawberry->setIcon(IconLoader::Load("strawberry"));
|
||||
ui_->action_about_strawberry->setIcon(IconLoader::Load(QStringLiteral("strawberry")));
|
||||
ui_->action_about_qt->setIcon(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"));
|
||||
|
||||
// Music menu
|
||||
|
||||
ui_->action_open_file->setIcon(IconLoader::Load("document-open"));
|
||||
ui_->action_open_cd->setIcon(IconLoader::Load("media-optical"));
|
||||
ui_->action_previous_track->setIcon(IconLoader::Load("media-skip-backward"));
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start"));
|
||||
ui_->action_stop->setIcon(IconLoader::Load("media-playback-stop"));
|
||||
ui_->action_stop_after_this_track->setIcon(IconLoader::Load("media-playback-stop"));
|
||||
ui_->action_next_track->setIcon(IconLoader::Load("media-skip-forward"));
|
||||
ui_->action_quit->setIcon(IconLoader::Load("application-exit"));
|
||||
ui_->action_open_file->setIcon(IconLoader::Load(QStringLiteral("document-open")));
|
||||
ui_->action_open_cd->setIcon(IconLoader::Load(QStringLiteral("media-optical")));
|
||||
ui_->action_previous_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-backward")));
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_stop->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop")));
|
||||
ui_->action_stop_after_this_track->setIcon(IconLoader::Load(QStringLiteral("media-playback-stop")));
|
||||
ui_->action_next_track->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward")));
|
||||
ui_->action_quit->setIcon(IconLoader::Load(QStringLiteral("application-exit")));
|
||||
|
||||
// Playlist
|
||||
|
||||
ui_->action_add_file->setIcon(IconLoader::Load("document-open"));
|
||||
ui_->action_add_folder->setIcon(IconLoader::Load("document-open-folder"));
|
||||
ui_->action_add_stream->setIcon(IconLoader::Load("document-open-remote"));
|
||||
ui_->action_shuffle_mode->setIcon(IconLoader::Load("media-playlist-shuffle"));
|
||||
ui_->action_repeat_mode->setIcon(IconLoader::Load("media-playlist-repeat"));
|
||||
ui_->action_new_playlist->setIcon(IconLoader::Load("document-new"));
|
||||
ui_->action_save_playlist->setIcon(IconLoader::Load("document-save"));
|
||||
ui_->action_load_playlist->setIcon(IconLoader::Load("document-open"));
|
||||
ui_->action_jump->setIcon(IconLoader::Load("go-jump"));
|
||||
ui_->action_clear_playlist->setIcon(IconLoader::Load("edit-clear-list"));
|
||||
ui_->action_shuffle->setIcon(IconLoader::Load("media-playlist-shuffle"));
|
||||
ui_->action_remove_duplicates->setIcon(IconLoader::Load("list-remove"));
|
||||
ui_->action_remove_unavailable->setIcon(IconLoader::Load("list-remove"));
|
||||
ui_->action_remove_from_playlist->setIcon(IconLoader::Load("list-remove"));
|
||||
ui_->action_save_all_playlists->setIcon(IconLoader::Load("document-save-all"));
|
||||
ui_->action_add_file->setIcon(IconLoader::Load(QStringLiteral("document-open")));
|
||||
ui_->action_add_folder->setIcon(IconLoader::Load(QStringLiteral("document-open-folder")));
|
||||
ui_->action_add_stream->setIcon(IconLoader::Load(QStringLiteral("document-open-remote")));
|
||||
ui_->action_shuffle_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle")));
|
||||
ui_->action_repeat_mode->setIcon(IconLoader::Load(QStringLiteral("media-playlist-repeat")));
|
||||
ui_->action_new_playlist->setIcon(IconLoader::Load(QStringLiteral("document-new")));
|
||||
ui_->action_save_playlist->setIcon(IconLoader::Load(QStringLiteral("document-save")));
|
||||
ui_->action_load_playlist->setIcon(IconLoader::Load(QStringLiteral("document-open")));
|
||||
ui_->action_jump->setIcon(IconLoader::Load(QStringLiteral("go-jump")));
|
||||
ui_->action_clear_playlist->setIcon(IconLoader::Load(QStringLiteral("edit-clear-list")));
|
||||
ui_->action_shuffle->setIcon(IconLoader::Load(QStringLiteral("media-playlist-shuffle")));
|
||||
ui_->action_remove_duplicates->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
|
||||
ui_->action_remove_unavailable->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
|
||||
ui_->action_remove_from_playlist->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
|
||||
ui_->action_save_all_playlists->setIcon(IconLoader::Load(QStringLiteral("document-save-all")));
|
||||
|
||||
// Configure
|
||||
|
||||
ui_->action_cover_manager->setIcon(IconLoader::Load("document-download"));
|
||||
ui_->action_edit_track->setIcon(IconLoader::Load("edit-rename"));
|
||||
ui_->action_edit_value->setIcon(IconLoader::Load("edit-rename"));
|
||||
ui_->action_selection_set_value->setIcon(IconLoader::Load("edit-rename"));
|
||||
ui_->action_equalizer->setIcon(IconLoader::Load("equalizer"));
|
||||
ui_->action_transcoder->setIcon(IconLoader::Load("tools-wizard"));
|
||||
ui_->action_update_collection->setIcon(IconLoader::Load("view-refresh"));
|
||||
ui_->action_full_collection_scan->setIcon(IconLoader::Load("view-refresh"));
|
||||
ui_->action_abort_collection_scan->setIcon(IconLoader::Load("dialog-error"));
|
||||
ui_->action_settings->setIcon(IconLoader::Load("configure"));
|
||||
ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load("scrobble"));
|
||||
ui_->action_console->setIcon(IconLoader::Load("keyboard"));
|
||||
ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load("view-choose"));
|
||||
ui_->action_auto_complete_tags->setIcon(IconLoader::Load("musicbrainz"));
|
||||
ui_->action_cover_manager->setIcon(IconLoader::Load(QStringLiteral("document-download")));
|
||||
ui_->action_edit_track->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
|
||||
ui_->action_edit_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
|
||||
ui_->action_selection_set_value->setIcon(IconLoader::Load(QStringLiteral("edit-rename")));
|
||||
ui_->action_equalizer->setIcon(IconLoader::Load(QStringLiteral("equalizer")));
|
||||
ui_->action_transcoder->setIcon(IconLoader::Load(QStringLiteral("tools-wizard")));
|
||||
ui_->action_update_collection->setIcon(IconLoader::Load(QStringLiteral("view-refresh")));
|
||||
ui_->action_full_collection_scan->setIcon(IconLoader::Load(QStringLiteral("view-refresh")));
|
||||
ui_->action_abort_collection_scan->setIcon(IconLoader::Load(QStringLiteral("dialog-error")));
|
||||
ui_->action_settings->setIcon(IconLoader::Load(QStringLiteral("configure")));
|
||||
ui_->action_import_data_from_last_fm->setIcon(IconLoader::Load(QStringLiteral("scrobble")));
|
||||
ui_->action_console->setIcon(IconLoader::Load(QStringLiteral("keyboard")));
|
||||
ui_->action_toggle_show_sidebar->setIcon(IconLoader::Load(QStringLiteral("view-choose")));
|
||||
ui_->action_auto_complete_tags->setIcon(IconLoader::Load(QStringLiteral("musicbrainz")));
|
||||
|
||||
// Scrobble
|
||||
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("scrobble-disabled"));
|
||||
ui_->action_love->setIcon(IconLoader::Load("love"));
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble-disabled")));
|
||||
ui_->action_love->setIcon(IconLoader::Load(QStringLiteral("love")));
|
||||
|
||||
// File view connections
|
||||
QObject::connect(file_view_, &FileView::AddToPlaylist, this, &MainWindow::AddToPlaylist);
|
||||
@ -558,7 +558,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
QObject::connect(ui_->action_abort_collection_scan, &QAction::triggered, &*app_->collection(), &SCollection::AbortScan);
|
||||
#if defined(HAVE_GSTREAMER)
|
||||
QObject::connect(ui_->action_add_files_to_transcoder, &QAction::triggered, this, &MainWindow::AddFilesToTranscoder);
|
||||
ui_->action_add_files_to_transcoder->setIcon(IconLoader::Load("tools-wizard"));
|
||||
ui_->action_add_files_to_transcoder->setIcon(IconLoader::Load(QStringLiteral("tools-wizard")));
|
||||
#else
|
||||
ui_->action_add_files_to_transcoder->setDisabled(true);
|
||||
#endif
|
||||
@ -568,8 +568,8 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
QObject::connect(&*app_->scrobbler(), &AudioScrobbler::ErrorMessage, this, &MainWindow::ShowErrorDialog);
|
||||
|
||||
// Playlist view actions
|
||||
ui_->action_next_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString("Ctrl+Tab") << QKeySequence::fromString("Ctrl+PgDown"));
|
||||
ui_->action_previous_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString("Ctrl+Shift+Tab") << QKeySequence::fromString("Ctrl+PgUp"));
|
||||
ui_->action_next_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgDown")));
|
||||
ui_->action_previous_playlist->setShortcuts(QList<QKeySequence>() << QKeySequence::fromString(QStringLiteral("Ctrl+Shift+Tab")) << QKeySequence::fromString(QStringLiteral("Ctrl+PgUp")));
|
||||
|
||||
// Actions for switching tabs will be global to the entire window, so adding them here
|
||||
addAction(ui_->action_next_playlist);
|
||||
@ -688,7 +688,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
|
||||
QObject::connect(collection_view_group, &QActionGroup::triggered, this, &MainWindow::ChangeCollectionFilterMode);
|
||||
|
||||
QAction *collection_config_action = new QAction(IconLoader::Load("configure"), tr("Configure collection..."), this);
|
||||
QAction *collection_config_action = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure collection..."), this);
|
||||
QObject::connect(collection_config_action, &QAction::triggered, this, &MainWindow::ShowCollectionConfig);
|
||||
collection_view_->filter_widget()->SetSettingsGroup(CollectionSettingsPage::kSettingsGroup);
|
||||
collection_view_->filter_widget()->Init(app_->collection()->model());
|
||||
@ -731,14 +731,14 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
QObject::connect(playlist_menu_, &QMenu::aboutToHide, this, &MainWindow::PlaylistMenuHidden);
|
||||
playlist_play_pause_ = playlist_menu_->addAction(tr("Play"), this, &MainWindow::PlaylistPlay);
|
||||
playlist_menu_->addAction(ui_->action_stop);
|
||||
playlist_stop_after_ = playlist_menu_->addAction(IconLoader::Load("media-playback-stop"), tr("Stop after this track"), this, &MainWindow::PlaylistStopAfter);
|
||||
playlist_queue_ = playlist_menu_->addAction(IconLoader::Load("go-next"), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue);
|
||||
playlist_queue_->setShortcut(QKeySequence("Ctrl+D"));
|
||||
playlist_stop_after_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-stop")), tr("Stop after this track"), this, &MainWindow::PlaylistStopAfter);
|
||||
playlist_queue_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Toggle queue status"), this, &MainWindow::PlaylistQueue);
|
||||
playlist_queue_->setShortcut(QKeySequence(QStringLiteral("Ctrl+D")));
|
||||
ui_->playlist->addAction(playlist_queue_);
|
||||
playlist_queue_play_next_ = playlist_menu_->addAction(IconLoader::Load("go-next"), tr("Queue selected tracks to play next"), this, &MainWindow::PlaylistQueuePlayNext);
|
||||
playlist_queue_play_next_->setShortcut(QKeySequence("Ctrl+Shift+D"));
|
||||
playlist_queue_play_next_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue selected tracks to play next"), this, &MainWindow::PlaylistQueuePlayNext);
|
||||
playlist_queue_play_next_->setShortcut(QKeySequence(QStringLiteral("Ctrl+Shift+D")));
|
||||
ui_->playlist->addAction(playlist_queue_play_next_);
|
||||
playlist_skip_ = playlist_menu_->addAction(IconLoader::Load("media-skip-forward"), tr("Toggle skip status"), this, &MainWindow::PlaylistSkip);
|
||||
playlist_skip_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("media-skip-forward")), tr("Toggle skip status"), this, &MainWindow::PlaylistSkip);
|
||||
ui_->playlist->addAction(playlist_skip_);
|
||||
|
||||
playlist_menu_->addSeparator();
|
||||
@ -751,22 +751,22 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
#ifdef HAVE_MUSICBRAINZ
|
||||
playlist_menu_->addAction(ui_->action_auto_complete_tags);
|
||||
#endif
|
||||
playlist_rescan_songs_ = playlist_menu_->addAction(IconLoader::Load("view-refresh"), tr("Rescan song(s)..."), this, &MainWindow::RescanSongs);
|
||||
playlist_rescan_songs_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("view-refresh")), tr("Rescan song(s)..."), this, &MainWindow::RescanSongs);
|
||||
playlist_menu_->addAction(playlist_rescan_songs_);
|
||||
#ifdef HAVE_GSTREAMER
|
||||
playlist_menu_->addAction(ui_->action_add_files_to_transcoder);
|
||||
#endif
|
||||
playlist_menu_->addSeparator();
|
||||
playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy URL(s)..."), this, &MainWindow::PlaylistCopyUrl);
|
||||
playlist_show_in_collection_ = playlist_menu_->addAction(IconLoader::Load("edit-find"), tr("Show in collection..."), this, &MainWindow::ShowInCollection);
|
||||
playlist_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load("document-open-folder"), tr("Show in file browser..."), this, &MainWindow::PlaylistOpenInBrowser);
|
||||
playlist_organize_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Organize files..."), this, &MainWindow::PlaylistMoveToCollection);
|
||||
playlist_copy_to_collection_ = playlist_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to collection..."), this, &MainWindow::PlaylistCopyToCollection);
|
||||
playlist_move_to_collection_ = playlist_menu_->addAction(IconLoader::Load("go-jump"), tr("Move to collection..."), this, &MainWindow::PlaylistMoveToCollection);
|
||||
playlist_copy_url_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy URL(s)..."), this, &MainWindow::PlaylistCopyUrl);
|
||||
playlist_show_in_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-find")), tr("Show in collection..."), this, &MainWindow::ShowInCollection);
|
||||
playlist_open_in_browser_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("document-open-folder")), tr("Show in file browser..."), this, &MainWindow::PlaylistOpenInBrowser);
|
||||
playlist_organize_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Organize files..."), this, &MainWindow::PlaylistMoveToCollection);
|
||||
playlist_copy_to_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy to collection..."), this, &MainWindow::PlaylistCopyToCollection);
|
||||
playlist_move_to_collection_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("go-jump")), tr("Move to collection..."), this, &MainWindow::PlaylistMoveToCollection);
|
||||
#if defined(HAVE_GSTREAMER) && !defined(Q_OS_WIN)
|
||||
playlist_copy_to_device_ = playlist_menu_->addAction(IconLoader::Load("device"), tr("Copy to device..."), this, &MainWindow::PlaylistCopyToDevice);
|
||||
playlist_copy_to_device_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("device")), tr("Copy to device..."), this, &MainWindow::PlaylistCopyToDevice);
|
||||
#endif
|
||||
playlist_delete_ = playlist_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from disk..."), this, &MainWindow::PlaylistDelete);
|
||||
playlist_delete_ = playlist_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from disk..."), this, &MainWindow::PlaylistDelete);
|
||||
playlist_menu_->addSeparator();
|
||||
playlistitem_actions_separator_ = playlist_menu_->addSeparator();
|
||||
playlist_menu_->addAction(ui_->action_clear_playlist);
|
||||
@ -854,7 +854,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
QObject::connect(ui_->analyzer, &AnalyzerContainer::WheelEvent, this, &MainWindow::VolumeWheelEvent);
|
||||
|
||||
// Statusbar widgets
|
||||
ui_->playlist_summary->setMinimumWidth(QFontMetrics(font()).horizontalAdvance("WW selected of WW tracks - [ WW:WW ]"));
|
||||
ui_->playlist_summary->setMinimumWidth(QFontMetrics(font()).horizontalAdvance(QStringLiteral("WW selected of WW tracks - [ WW:WW ]")));
|
||||
ui_->status_bar_stack->setCurrentWidget(ui_->playlist_summary_page);
|
||||
QObject::connect(ui_->multi_loading_indicator, &MultiLoadingIndicator::TaskCountChange, this, &MainWindow::TaskCountChanged);
|
||||
|
||||
@ -881,7 +881,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
PlayingWidgetPositionChanged(ui_->widget_playing->show_above_status_bar());
|
||||
|
||||
StyleSheetLoader *css_loader = new StyleSheetLoader(this);
|
||||
css_loader->SetStyleSheet(this, ":/style/strawberry.css");
|
||||
css_loader->SetStyleSheet(this, QStringLiteral(":/style/strawberry.css"));
|
||||
|
||||
// Load playlists
|
||||
app_->playlist_manager()->Init(app_->collection_backend(), app_->playlist_backend(), ui_->playlist_sequence, ui_->playlist);
|
||||
@ -1008,7 +1008,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
QObject::connect(close_window_shortcut, &QShortcut::activated, this, &MainWindow::ToggleHide);
|
||||
|
||||
QAction *action_focus_search = new QAction(this);
|
||||
action_focus_search->setShortcuts(QList<QKeySequence>() << QKeySequence("Ctrl+F"));
|
||||
action_focus_search->setShortcuts(QList<QKeySequence>() << QKeySequence(QStringLiteral("Ctrl+F")));
|
||||
addAction(action_focus_search);
|
||||
QObject::connect(action_focus_search, &QAction::triggered, this, &MainWindow::FocusSearchField);
|
||||
|
||||
@ -1034,7 +1034,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
if (!Utilities::GetEnv("SNAP").isEmpty() && !Utilities::GetEnv("SNAP_NAME").isEmpty()) {
|
||||
if (!Utilities::GetEnv(QStringLiteral("SNAP")).isEmpty() && !Utilities::GetEnv(QStringLiteral("SNAP_NAME")).isEmpty()) {
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
const bool ignore_snap = s.value("ignore_snap", false).toBool();
|
||||
@ -1066,7 +1066,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
{
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
const QString do_not_show_sponsor_message_key = QString("do_not_show_sponsor_message");
|
||||
const QString do_not_show_sponsor_message_key = QStringLiteral("do_not_show_sponsor_message");
|
||||
const bool do_not_show_sponsor_message = s.value(do_not_show_sponsor_message_key, false).toBool();
|
||||
s.endGroup();
|
||||
if (!do_not_show_sponsor_message) {
|
||||
@ -1074,7 +1074,7 @@ MainWindow::MainWindow(Application *app, SharedPtr<SystemTrayIcon> tray_icon, OS
|
||||
sponsor_message->set_settings_group(kSettingsGroup);
|
||||
sponsor_message->set_do_not_show_message_again(do_not_show_sponsor_message_key);
|
||||
sponsor_message->setAttribute(Qt::WA_DeleteOnClose);
|
||||
sponsor_message->ShowMessage(tr("Sponsoring Strawberry"), tr("Strawberry is free and open source software. If you like Strawberry, please consider sponsoring the project. For more information about sponsorship see our website %1").arg("<a href= \"https://www.strawberrymusicplayer.org/\">www.strawberrymusicplayer.org</a>"), IconLoader::Load("dialog-information"));
|
||||
sponsor_message->ShowMessage(tr("Sponsoring Strawberry"), tr("Strawberry is free and open source software. If you like Strawberry, please consider sponsoring the project. For more information about sponsorship see our website %1").arg(QStringLiteral("<a href= \"https://www.strawberrymusicplayer.org/\">www.strawberrymusicplayer.org</a>")), IconLoader::Load(QStringLiteral("dialog-information")));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1243,7 +1243,7 @@ void MainWindow::ReloadAllSettings() {
|
||||
|
||||
void MainWindow::RefreshStyleSheet() {
|
||||
QString contents(styleSheet());
|
||||
setStyleSheet("");
|
||||
setStyleSheet(QLatin1String(""));
|
||||
setStyleSheet(contents);
|
||||
}
|
||||
|
||||
@ -1328,11 +1328,11 @@ void MainWindow::EngineChanged(const EngineBase::Type enginetype) {
|
||||
|
||||
void MainWindow::MediaStopped() {
|
||||
|
||||
setWindowTitle("Strawberry Music Player");
|
||||
setWindowTitle(QStringLiteral("Strawberry Music Player"));
|
||||
|
||||
ui_->action_stop->setEnabled(false);
|
||||
ui_->action_stop_after_this_track->setEnabled(false);
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start"));
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_play_pause->setText(tr("Play"));
|
||||
|
||||
ui_->action_play_pause->setEnabled(true);
|
||||
@ -1365,7 +1365,7 @@ void MainWindow::MediaPaused() {
|
||||
|
||||
ui_->action_stop->setEnabled(true);
|
||||
ui_->action_stop_after_this_track->setEnabled(true);
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-start"));
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_play_pause->setText(tr("Play"));
|
||||
|
||||
ui_->action_play_pause->setEnabled(true);
|
||||
@ -1381,7 +1381,7 @@ void MainWindow::MediaPlaying() {
|
||||
|
||||
ui_->action_stop->setEnabled(true);
|
||||
ui_->action_stop_after_this_track->setEnabled(true);
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load("media-playback-pause"));
|
||||
ui_->action_play_pause->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause")));
|
||||
ui_->action_play_pause->setText(tr("Pause"));
|
||||
|
||||
bool enable_play_pause(false);
|
||||
@ -1784,7 +1784,7 @@ void MainWindow::UpdateTaskbarProgress(const bool visible, const double position
|
||||
|
||||
map.insert(QStringLiteral("progress-visible"), visible);
|
||||
map.insert(QStringLiteral("progress"), position / length);
|
||||
msg << QString("application://org.strawberrymusicplayer.strawberry.desktop") << map;
|
||||
msg << QStringLiteral("application://org.strawberrymusicplayer.strawberry.desktop") << map;
|
||||
|
||||
QDBusConnection::sessionBus().send(msg);
|
||||
|
||||
@ -1915,11 +1915,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
|
||||
// Is this song currently playing?
|
||||
if (app_->playlist_manager()->current()->current_row() == source_index.row() && app_->player()->GetState() == EngineBase::State::Playing) {
|
||||
playlist_play_pause_->setText(tr("Pause"));
|
||||
playlist_play_pause_->setIcon(IconLoader::Load("media-playback-pause"));
|
||||
playlist_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause")));
|
||||
}
|
||||
else {
|
||||
playlist_play_pause_->setText(tr("Play"));
|
||||
playlist_play_pause_->setIcon(IconLoader::Load("media-playback-start"));
|
||||
playlist_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
}
|
||||
|
||||
// Are we allowed to pause?
|
||||
@ -2033,11 +2033,11 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
|
||||
else playlist_skip_->setText(tr("Toggle skip status"));
|
||||
}
|
||||
|
||||
if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load("go-previous"));
|
||||
else playlist_queue_->setIcon(IconLoader::Load("go-next"));
|
||||
if (not_in_queue == 0) playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-previous")));
|
||||
else playlist_queue_->setIcon(IconLoader::Load(QStringLiteral("go-next")));
|
||||
|
||||
if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load("media-skip-forward"));
|
||||
else playlist_skip_->setIcon(IconLoader::Load("media-playback-start"));
|
||||
if (in_skipped < selected) playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-skip-forward")));
|
||||
else playlist_skip_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
|
||||
|
||||
if (!index.isValid()) {
|
||||
@ -2100,7 +2100,7 @@ void MainWindow::PlaylistRightClick(const QPoint global_pos, const QModelIndex &
|
||||
// Create the playlist submenu if songs are selected.
|
||||
if (selected > 0) {
|
||||
QMenu *add_to_another_menu = new QMenu(tr("Add to another playlist"), this);
|
||||
add_to_another_menu->setIcon(IconLoader::Load("list-add"));
|
||||
add_to_another_menu->setIcon(IconLoader::Load(QStringLiteral("list-add")));
|
||||
|
||||
for (const PlaylistBackend::Playlist &playlist : app_->playlist_backend()->GetAllOpenPlaylists()) {
|
||||
// don't add the current playlist
|
||||
@ -2297,7 +2297,7 @@ void MainWindow::AddFile() {
|
||||
PlaylistParser parser(app_->collection_backend());
|
||||
|
||||
// Show dialog
|
||||
QStringList file_names = QFileDialog::getOpenFileNames(this, tr("Add file"), directory, QString("%1 (%2);;%3;;%4").arg(tr("Music"), FileView::kFileFilter, parser.filters(PlaylistParser::Type::Load), tr(kAllFilesFilterSpec)));
|
||||
QStringList file_names = QFileDialog::getOpenFileNames(this, tr("Add file"), directory, QStringLiteral("%1 (%2);;%3;;%4").arg(tr("Music"), FileView::kFileFilter, parser.filters(PlaylistParser::Type::Load), tr(kAllFilesFilterSpec)));
|
||||
|
||||
if (file_names.isEmpty()) return;
|
||||
|
||||
@ -2587,7 +2587,7 @@ bool MainWindow::LoadUrl(const QString &url) {
|
||||
return true;
|
||||
}
|
||||
#ifdef HAVE_TIDAL
|
||||
else if (url.startsWith("tidal://login")) {
|
||||
else if (url.startsWith(QLatin1String("tidal://login"))) {
|
||||
emit AuthorizationUrlReceived(QUrl(url));
|
||||
return true;
|
||||
}
|
||||
@ -3066,10 +3066,10 @@ void MainWindow::HandleNotificationPreview(const OSDBase::Behaviour type, const
|
||||
qLog(Debug) << "The current playlist is empty, showing a fake song";
|
||||
// Create a fake song
|
||||
Song fake(Song::Source::LocalFile);
|
||||
fake.Init("Title", "Artist", "Album", 123);
|
||||
fake.set_genre("Classical");
|
||||
fake.set_composer("Anonymous");
|
||||
fake.set_performer("Anonymous");
|
||||
fake.Init(QStringLiteral("Title"), QStringLiteral("Artist"), QStringLiteral("Album"), 123);
|
||||
fake.set_genre(QStringLiteral("Classical"));
|
||||
fake.set_composer(QStringLiteral("Anonymous"));
|
||||
fake.set_performer(QStringLiteral("Anonymous"));
|
||||
fake.set_track(1);
|
||||
fake.set_disc(1);
|
||||
fake.set_year(2011);
|
||||
@ -3212,12 +3212,12 @@ void MainWindow::SetToggleScrobblingIcon(const bool value) {
|
||||
|
||||
if (value) {
|
||||
if (app_->playlist_manager()->active() && app_->playlist_manager()->active()->scrobbled())
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("scrobble", true, 22));
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble"), true, 22));
|
||||
else
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("scrobble", true, 22)); // TODO: Create a faint version of the icon
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble"), true, 22)); // TODO: Create a faint version of the icon
|
||||
}
|
||||
else {
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load("scrobble-disabled", true, 22));
|
||||
ui_->action_toggle_scrobbling->setIcon(IconLoader::Load(QStringLiteral("scrobble-disabled"), true, 22));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -131,18 +131,18 @@ Mpris2::Mpris2(Application *app, QObject *parent)
|
||||
|
||||
app_name_[0] = app_name_[0].toUpper();
|
||||
|
||||
QStringList data_dirs = QString(qgetenv("XDG_DATA_DIRS")).split(":");
|
||||
QStringList data_dirs = QString(qgetenv("XDG_DATA_DIRS")).split(QStringLiteral(":"));
|
||||
|
||||
if (!data_dirs.contains("/usr/local/share")) {
|
||||
data_dirs.append("/usr/local/share");
|
||||
data_dirs.append(QStringLiteral("/usr/local/share"));
|
||||
}
|
||||
|
||||
if (!data_dirs.contains("/usr/share")) {
|
||||
data_dirs.append("/usr/share");
|
||||
data_dirs.append(QStringLiteral("/usr/share"));
|
||||
}
|
||||
|
||||
for (const QString &data_dir : data_dirs) {
|
||||
const QString desktopfilepath = QString("%1/applications/%2.desktop").arg(data_dir, QGuiApplication::desktopFileName());
|
||||
const QString desktopfilepath = QStringLiteral("%1/applications/%2.desktop").arg(data_dir, QGuiApplication::desktopFileName());
|
||||
if (QFile::exists(desktopfilepath)) {
|
||||
desktopfilepath_ = desktopfilepath;
|
||||
break;
|
||||
@ -165,37 +165,37 @@ void Mpris2::EngineStateChanged(EngineBase::State newState) {
|
||||
|
||||
if (newState != EngineBase::State::Playing && newState != EngineBase::State::Paused) {
|
||||
last_metadata_ = QVariantMap();
|
||||
EmitNotification("Metadata");
|
||||
EmitNotification(QStringLiteral("Metadata"));
|
||||
}
|
||||
|
||||
EmitNotification("CanPlay");
|
||||
EmitNotification("CanPause");
|
||||
EmitNotification("PlaybackStatus", PlaybackStatus(newState));
|
||||
if (newState == EngineBase::State::Playing) EmitNotification("CanSeek", CanSeek(newState));
|
||||
EmitNotification(QStringLiteral("CanPlay"));
|
||||
EmitNotification(QStringLiteral("CanPause"));
|
||||
EmitNotification(QStringLiteral("PlaybackStatus"), PlaybackStatus(newState));
|
||||
if (newState == EngineBase::State::Playing) EmitNotification(QStringLiteral("CanSeek"), CanSeek(newState));
|
||||
|
||||
}
|
||||
|
||||
void Mpris2::VolumeChanged() {
|
||||
EmitNotification("Volume");
|
||||
EmitNotification(QStringLiteral("Volume"));
|
||||
}
|
||||
|
||||
void Mpris2::ShuffleModeChanged() { EmitNotification("Shuffle"); }
|
||||
void Mpris2::ShuffleModeChanged() { EmitNotification(QStringLiteral("Shuffle")); }
|
||||
|
||||
void Mpris2::RepeatModeChanged() {
|
||||
|
||||
EmitNotification("LoopStatus");
|
||||
EmitNotification("CanGoNext", CanGoNext());
|
||||
EmitNotification("CanGoPrevious", CanGoPrevious());
|
||||
EmitNotification(QStringLiteral("LoopStatus"));
|
||||
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext());
|
||||
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious());
|
||||
|
||||
}
|
||||
|
||||
void Mpris2::EmitNotification(const QString &name, const QVariant &value) {
|
||||
EmitNotification(name, value, "org.mpris.MediaPlayer2.Player");
|
||||
EmitNotification(name, value, QStringLiteral("org.mpris.MediaPlayer2.Player"));
|
||||
}
|
||||
|
||||
void Mpris2::EmitNotification(const QString &name, const QVariant &value, const QString &mprisEntity) {
|
||||
|
||||
QDBusMessage msg = QDBusMessage::createSignal(kMprisObjectPath, kFreedesktopPath, "PropertiesChanged");
|
||||
QDBusMessage msg = QDBusMessage::createSignal(kMprisObjectPath, kFreedesktopPath, QStringLiteral("PropertiesChanged"));
|
||||
QVariantMap map;
|
||||
map.insert(name, value);
|
||||
QVariantList args = QVariantList() << mprisEntity << map << QStringList();
|
||||
@ -244,45 +244,45 @@ QString Mpris2::DesktopEntry() const { return QGuiApplication::desktopFileName()
|
||||
|
||||
QStringList Mpris2::SupportedUriSchemes() const {
|
||||
|
||||
static QStringList res = QStringList() << "file"
|
||||
<< "http"
|
||||
<< "cdda"
|
||||
<< "smb"
|
||||
<< "sftp";
|
||||
static QStringList res = QStringList() << QStringLiteral("file")
|
||||
<< QStringLiteral("http")
|
||||
<< QStringLiteral("cdda")
|
||||
<< QStringLiteral("smb")
|
||||
<< QStringLiteral("sftp");
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
QStringList Mpris2::SupportedMimeTypes() const {
|
||||
|
||||
static QStringList res = QStringList() << "x-content/audio-player"
|
||||
<< "application/ogg"
|
||||
<< "application/x-ogg"
|
||||
<< "application/x-ogm-audio"
|
||||
<< "audio/flac"
|
||||
<< "audio/ogg"
|
||||
<< "audio/vorbis"
|
||||
<< "audio/aac"
|
||||
<< "audio/mp4"
|
||||
<< "audio/mpeg"
|
||||
<< "audio/mpegurl"
|
||||
<< "audio/vnd.rn-realaudio"
|
||||
<< "audio/x-flac"
|
||||
<< "audio/x-oggflac"
|
||||
<< "audio/x-vorbis"
|
||||
<< "audio/x-vorbis+ogg"
|
||||
<< "audio/x-speex"
|
||||
<< "audio/x-wav"
|
||||
<< "audio/x-wavpack"
|
||||
<< "audio/x-ape"
|
||||
<< "audio/x-mp3"
|
||||
<< "audio/x-mpeg"
|
||||
<< "audio/x-mpegurl"
|
||||
<< "audio/x-ms-wma"
|
||||
<< "audio/x-musepack"
|
||||
<< "audio/x-pn-realaudio"
|
||||
<< "audio/x-scpls"
|
||||
<< "video/x-ms-asf";
|
||||
static QStringList res = QStringList() << QStringLiteral("x-content/audio-player")
|
||||
<< QStringLiteral("application/ogg")
|
||||
<< QStringLiteral("application/x-ogg")
|
||||
<< QStringLiteral("application/x-ogm-audio")
|
||||
<< QStringLiteral("audio/flac")
|
||||
<< QStringLiteral("audio/ogg")
|
||||
<< QStringLiteral("audio/vorbis")
|
||||
<< QStringLiteral("audio/aac")
|
||||
<< QStringLiteral("audio/mp4")
|
||||
<< QStringLiteral("audio/mpeg")
|
||||
<< QStringLiteral("audio/mpegurl")
|
||||
<< QStringLiteral("audio/vnd.rn-realaudio")
|
||||
<< QStringLiteral("audio/x-flac")
|
||||
<< QStringLiteral("audio/x-oggflac")
|
||||
<< QStringLiteral("audio/x-vorbis")
|
||||
<< QStringLiteral("audio/x-vorbis+ogg")
|
||||
<< QStringLiteral("audio/x-speex")
|
||||
<< QStringLiteral("audio/x-wav")
|
||||
<< QStringLiteral("audio/x-wavpack")
|
||||
<< QStringLiteral("audio/x-ape")
|
||||
<< QStringLiteral("audio/x-mp3")
|
||||
<< QStringLiteral("audio/x-mpeg")
|
||||
<< QStringLiteral("audio/x-mpegurl")
|
||||
<< QStringLiteral("audio/x-ms-wma")
|
||||
<< QStringLiteral("audio/x-musepack")
|
||||
<< QStringLiteral("audio/x-pn-realaudio")
|
||||
<< QStringLiteral("audio/x-scpls")
|
||||
<< QStringLiteral("video/x-ms-asf");
|
||||
|
||||
return res;
|
||||
|
||||
@ -299,9 +299,9 @@ QString Mpris2::PlaybackStatus() const {
|
||||
QString Mpris2::PlaybackStatus(EngineBase::State state) const {
|
||||
|
||||
switch (state) {
|
||||
case EngineBase::State::Playing: return "Playing";
|
||||
case EngineBase::State::Paused: return "Paused";
|
||||
default: return "Stopped";
|
||||
case EngineBase::State::Playing: return QStringLiteral("Playing");
|
||||
case EngineBase::State::Paused: return QStringLiteral("Paused");
|
||||
default: return QStringLiteral("Stopped");
|
||||
}
|
||||
|
||||
}
|
||||
@ -309,14 +309,14 @@ QString Mpris2::PlaybackStatus(EngineBase::State state) const {
|
||||
QString Mpris2::LoopStatus() const {
|
||||
|
||||
if (!app_->playlist_manager()->sequence()) {
|
||||
return "None";
|
||||
return QStringLiteral("None");
|
||||
}
|
||||
|
||||
switch (app_->playlist_manager()->active() ? app_->playlist_manager()->active()->RepeatMode() : app_->playlist_manager()->sequence()->repeat_mode()) {
|
||||
case PlaylistSequence::RepeatMode::Album:
|
||||
case PlaylistSequence::RepeatMode::Playlist: return "Playlist";
|
||||
case PlaylistSequence::RepeatMode::Track: return "Track";
|
||||
default: return "None";
|
||||
case PlaylistSequence::RepeatMode::Playlist: return QStringLiteral("Playlist");
|
||||
case PlaylistSequence::RepeatMode::Track: return QStringLiteral("Track");
|
||||
default: return QStringLiteral("None");
|
||||
}
|
||||
|
||||
}
|
||||
@ -381,18 +381,18 @@ void Mpris2::SetRating(double rating) {
|
||||
}
|
||||
|
||||
QDBusObjectPath Mpris2::current_track_id() const {
|
||||
return QDBusObjectPath(QString("/org/strawberrymusicplayer/strawberry/Track/%1").arg(QString::number(app_->playlist_manager()->active()->current_row())));
|
||||
return QDBusObjectPath(QStringLiteral("/org/strawberrymusicplayer/strawberry/Track/%1").arg(QString::number(app_->playlist_manager()->active()->current_row())));
|
||||
}
|
||||
|
||||
// We send Metadata change notification as soon as the process of changing song starts...
|
||||
void Mpris2::CurrentSongChanged(const Song &song) {
|
||||
|
||||
AlbumCoverLoaded(song);
|
||||
EmitNotification("CanPlay");
|
||||
EmitNotification("CanPause");
|
||||
EmitNotification("CanGoNext", CanGoNext());
|
||||
EmitNotification("CanGoPrevious", CanGoPrevious());
|
||||
EmitNotification("CanSeek", CanSeek());
|
||||
EmitNotification(QStringLiteral("CanPlay"));
|
||||
EmitNotification(QStringLiteral("CanPause"));
|
||||
EmitNotification(QStringLiteral("CanGoNext"), CanGoNext());
|
||||
EmitNotification(QStringLiteral("CanGoPrevious"), CanGoPrevious());
|
||||
EmitNotification(QStringLiteral("CanSeek"), CanSeek());
|
||||
|
||||
}
|
||||
|
||||
@ -403,7 +403,7 @@ void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &re
|
||||
song.ToXesam(&last_metadata_);
|
||||
|
||||
using mpris::AddMetadata;
|
||||
AddMetadata("mpris:trackid", current_track_id(), &last_metadata_);
|
||||
AddMetadata(QStringLiteral("mpris:trackid"), current_track_id(), &last_metadata_);
|
||||
|
||||
QUrl cover_url;
|
||||
if (result.album_cover.cover_url.isValid() && result.album_cover.cover_url.isLocalFile() && QFile(result.album_cover.cover_url.toLocalFile()).exists()) {
|
||||
@ -420,13 +420,13 @@ void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &re
|
||||
}
|
||||
|
||||
if (cover_url.isValid()) {
|
||||
AddMetadata("mpris:artUrl", cover_url.toString(), &last_metadata_);
|
||||
AddMetadata(QStringLiteral("mpris:artUrl"), cover_url.toString(), &last_metadata_);
|
||||
}
|
||||
|
||||
AddMetadata("year", song.year(), &last_metadata_);
|
||||
AddMetadata("bitrate", song.bitrate(), &last_metadata_);
|
||||
AddMetadata(QStringLiteral("year"), song.year(), &last_metadata_);
|
||||
AddMetadata(QStringLiteral("bitrate"), song.bitrate(), &last_metadata_);
|
||||
|
||||
EmitNotification("Metadata", last_metadata_);
|
||||
EmitNotification(QStringLiteral("Metadata"), last_metadata_);
|
||||
|
||||
}
|
||||
|
||||
@ -567,12 +567,12 @@ quint32 Mpris2::PlaylistCount() const {
|
||||
return app_->playlist_manager()->GetAllPlaylists().size();
|
||||
}
|
||||
|
||||
QStringList Mpris2::Orderings() const { return QStringList() << "User"; }
|
||||
QStringList Mpris2::Orderings() const { return QStringList() << QStringLiteral("User"); }
|
||||
|
||||
namespace {
|
||||
|
||||
QDBusObjectPath MakePlaylistPath(int id) {
|
||||
return QDBusObjectPath(QString("/org/strawberrymusicplayer/strawberry/PlaylistId/%1").arg(id));
|
||||
return QDBusObjectPath(QStringLiteral("/org/strawberrymusicplayer/strawberry/PlaylistId/%1").arg(id));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@ -648,7 +648,7 @@ void Mpris2::PlaylistChangedSlot(Playlist *playlist) {
|
||||
|
||||
void Mpris2::PlaylistCollectionChanged(Playlist *playlist) {
|
||||
Q_UNUSED(playlist);
|
||||
EmitNotification("PlaylistCount", "", "org.mpris.MediaPlayer2.Playlists");
|
||||
EmitNotification(QStringLiteral("PlaylistCount"), "", QStringLiteral("org.mpris.MediaPlayer2.Playlists"));
|
||||
}
|
||||
|
||||
} // namespace mpris
|
||||
|
@ -61,7 +61,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) : "";
|
||||
return time != -1 ? QDateTime::fromSecsSinceEpoch(time).toString(Qt::ISODate) : QLatin1String("");
|
||||
}
|
||||
|
||||
} // namespace mpris
|
||||
|
@ -49,7 +49,7 @@ QNetworkReply *NetworkAccessManager::createRequest(Operation op, const QNetworkR
|
||||
user_agent = request.header(QNetworkRequest::UserAgentHeader).toByteArray();
|
||||
}
|
||||
else {
|
||||
user_agent = QString("%1 %2").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion()).toUtf8();
|
||||
user_agent = QStringLiteral("%1 %2").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion()).toUtf8();
|
||||
}
|
||||
|
||||
QNetworkRequest new_request(request);
|
||||
|
@ -112,7 +112,7 @@ QList<QNetworkProxy> 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("http")) {
|
||||
if (env_url_.scheme().startsWith(QLatin1String("http"))) {
|
||||
ret.setType(QNetworkProxy::HttpProxy);
|
||||
}
|
||||
else {
|
||||
|
@ -38,8 +38,8 @@ SystemTrayIcon::SystemTrayIcon(QObject *parent)
|
||||
: QSystemTrayIcon(parent),
|
||||
menu_(new QMenu),
|
||||
app_name_(QCoreApplication::applicationName()),
|
||||
pixmap_playing_(":/pictures/tiny-play.png"),
|
||||
pixmap_paused_(":/pictures/tiny-pause.png"),
|
||||
pixmap_playing_(QStringLiteral(":/pictures/tiny-play.png")),
|
||||
pixmap_paused_(QStringLiteral(":/pictures/tiny-pause.png")),
|
||||
action_play_pause_(nullptr),
|
||||
action_stop_(nullptr),
|
||||
action_stop_after_this_track_(nullptr),
|
||||
@ -51,8 +51,8 @@ SystemTrayIcon::SystemTrayIcon(QObject *parent)
|
||||
|
||||
app_name_[0] = app_name_[0].toUpper();
|
||||
|
||||
const QIcon icon = IconLoader::Load("strawberry");
|
||||
const QIcon icon_grey = IconLoader::Load("strawberry-grey");
|
||||
const QIcon icon = IconLoader::Load(QStringLiteral("strawberry"));
|
||||
const QIcon icon_grey = IconLoader::Load(QStringLiteral("strawberry-grey"));
|
||||
pixmap_normal_ = icon.pixmap(48, QIcon::Normal);
|
||||
if (icon_grey.isNull()) {
|
||||
pixmap_grey_ = icon.pixmap(48, QIcon::Disabled);
|
||||
@ -143,7 +143,7 @@ void SystemTrayIcon::SetPlaying(bool enable_play_pause) {
|
||||
|
||||
action_stop_->setEnabled(true);
|
||||
action_stop_after_this_track_->setEnabled(true);
|
||||
action_play_pause_->setIcon(IconLoader::Load("media-playback-pause"));
|
||||
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-pause")));
|
||||
action_play_pause_->setText(tr("Pause"));
|
||||
action_play_pause_->setEnabled(enable_play_pause);
|
||||
|
||||
@ -156,7 +156,7 @@ void SystemTrayIcon::SetPaused() {
|
||||
|
||||
action_stop_->setEnabled(true);
|
||||
action_stop_after_this_track_->setEnabled(true);
|
||||
action_play_pause_->setIcon(IconLoader::Load("media-playback-start"));
|
||||
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
action_play_pause_->setText(tr("Play"));
|
||||
|
||||
action_play_pause_->setEnabled(true);
|
||||
@ -170,7 +170,7 @@ void SystemTrayIcon::SetStopped() {
|
||||
|
||||
action_stop_->setEnabled(false);
|
||||
action_stop_after_this_track_->setEnabled(false);
|
||||
action_play_pause_->setIcon(IconLoader::Load("media-playback-start"));
|
||||
action_play_pause_->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
action_play_pause_->setText(tr("Play"));
|
||||
|
||||
action_play_pause_->setEnabled(true);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -82,15 +82,15 @@ SongLoader::SongLoader(SharedPtr<CollectionBackendInterface> collection_backend,
|
||||
success_(false) {
|
||||
|
||||
if (sRawUriSchemes.isEmpty()) {
|
||||
sRawUriSchemes << "udp"
|
||||
<< "mms"
|
||||
<< "mmsh"
|
||||
<< "mmst"
|
||||
<< "mmsu"
|
||||
<< "rtsp"
|
||||
<< "rtspu"
|
||||
<< "rtspt"
|
||||
<< "rtsph";
|
||||
sRawUriSchemes << QStringLiteral("udp")
|
||||
<< QStringLiteral("mms")
|
||||
<< QStringLiteral("mmsh")
|
||||
<< QStringLiteral("mmst")
|
||||
<< QStringLiteral("mmsu")
|
||||
<< QStringLiteral("rtsp")
|
||||
<< QStringLiteral("rtspu")
|
||||
<< QStringLiteral("rtspt")
|
||||
<< QStringLiteral("rtsph");
|
||||
}
|
||||
|
||||
timeout_timer_->setSingleShot(true);
|
||||
@ -238,7 +238,7 @@ SongLoader::Result SongLoader::LoadLocal(const QString &filename) {
|
||||
|
||||
CollectionQuery query(db, collection_backend_->songs_table(), collection_backend_->fts_table());
|
||||
query.SetColumnSpec("%songs_table.ROWID, " + Song::kColumnSpec);
|
||||
query.AddWhere("url", url.toEncoded());
|
||||
query.AddWhere(QStringLiteral("url"), url.toEncoded());
|
||||
|
||||
if (query.Exec() && query.Next()) {
|
||||
// We may have many results when the file has many sections
|
||||
@ -700,7 +700,7 @@ void SongLoader::MagicReady() {
|
||||
if (parser_->name() == "ASX/INI" && url_.scheme() == "http") {
|
||||
// This is actually a weird MS-WMSP stream. Changing the protocol to MMS from HTTP makes it playable.
|
||||
parser_ = nullptr;
|
||||
url_.setScheme("mms");
|
||||
url_.setScheme(QStringLiteral("mms"));
|
||||
StopTypefindAsync(true);
|
||||
}
|
||||
|
||||
|
@ -38,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() ? "" : value);
|
||||
BindValue(placeholder, value.isNull() ? QLatin1String("") : value);
|
||||
|
||||
}
|
||||
|
||||
void SqlQuery::BindUrlValue(const QString &placeholder, const QUrl &value) {
|
||||
|
||||
BindValue(placeholder, value.isValid() ? value.toString(QUrl::FullyEncoded) : "");
|
||||
BindValue(placeholder, value.isValid() ? value.toString(QUrl::FullyEncoded) : QLatin1String(""));
|
||||
|
||||
}
|
||||
|
||||
|
@ -90,29 +90,29 @@ void StyleSheetLoader::UpdateStyleSheet(QWidget *widget, SharedPtr<StyleSheetDat
|
||||
#else
|
||||
alt.setAlpha(130);
|
||||
#endif
|
||||
stylesheet.replace("%palette-alternate-base", QString("rgba(%1,%2,%3,%4)").arg(alt.red()).arg(alt.green()).arg(alt.blue()).arg(alt.alpha()));
|
||||
stylesheet.replace(QLatin1String("%palette-alternate-base"), QStringLiteral("rgba(%1,%2,%3,%4)").arg(alt.red()).arg(alt.green()).arg(alt.blue()).arg(alt.alpha()));
|
||||
}
|
||||
|
||||
ReplaceColor(&stylesheet, "Window", p, QPalette::Window);
|
||||
ReplaceColor(&stylesheet, "Background", p, QPalette::Window);
|
||||
ReplaceColor(&stylesheet, "WindowText", p, QPalette::WindowText);
|
||||
ReplaceColor(&stylesheet, "Base", p, QPalette::Base);
|
||||
ReplaceColor(&stylesheet, "AlternateBase", p, QPalette::AlternateBase);
|
||||
ReplaceColor(&stylesheet, "ToolTipBase", p, QPalette::ToolTipBase);
|
||||
ReplaceColor(&stylesheet, "ToolTipText", p, QPalette::ToolTipText);
|
||||
ReplaceColor(&stylesheet, "Text", p, QPalette::Text);
|
||||
ReplaceColor(&stylesheet, "Button", p, QPalette::Button);
|
||||
ReplaceColor(&stylesheet, "ButtonText", p, QPalette::ButtonText);
|
||||
ReplaceColor(&stylesheet, "BrightText", p, QPalette::BrightText);
|
||||
ReplaceColor(&stylesheet, "Light", p, QPalette::Light);
|
||||
ReplaceColor(&stylesheet, "Midlight", p, QPalette::Midlight);
|
||||
ReplaceColor(&stylesheet, "Dark", p, QPalette::Dark);
|
||||
ReplaceColor(&stylesheet, "Mid", p, QPalette::Mid);
|
||||
ReplaceColor(&stylesheet, "Shadow", p, QPalette::Shadow);
|
||||
ReplaceColor(&stylesheet, "Highlight", p, QPalette::Highlight);
|
||||
ReplaceColor(&stylesheet, "HighlightedText", p, QPalette::HighlightedText);
|
||||
ReplaceColor(&stylesheet, "Link", p, QPalette::Link);
|
||||
ReplaceColor(&stylesheet, "LinkVisited", p, QPalette::LinkVisited);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Window"), p, QPalette::Window);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Background"), p, QPalette::Window);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("WindowText"), p, QPalette::WindowText);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Base"), p, QPalette::Base);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("AlternateBase"), p, QPalette::AlternateBase);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("ToolTipBase"), p, QPalette::ToolTipBase);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("ToolTipText"), p, QPalette::ToolTipText);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Text"), p, QPalette::Text);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Button"), p, QPalette::Button);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("ButtonText"), p, QPalette::ButtonText);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("BrightText"), p, QPalette::BrightText);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Light"), p, QPalette::Light);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Midlight"), p, QPalette::Midlight);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Dark"), p, QPalette::Dark);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Mid"), p, QPalette::Mid);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Shadow"), p, QPalette::Shadow);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Highlight"), p, QPalette::Highlight);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("HighlightedText"), p, QPalette::HighlightedText);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("Link"), p, QPalette::Link);
|
||||
ReplaceColor(&stylesheet, QStringLiteral("LinkVisited"), p, QPalette::LinkVisited);
|
||||
|
||||
#ifdef Q_OS_MACOS
|
||||
stylesheet.replace("macos", "*");
|
||||
|
@ -102,16 +102,16 @@ AlbumCoverChoiceController::AlbumCoverChoiceController(QWidget *parent)
|
||||
search_cover_auto_(nullptr),
|
||||
save_embedded_cover_override_(false) {
|
||||
|
||||
cover_from_file_ = new QAction(IconLoader::Load("document-open"), tr("Load cover from disk..."), this);
|
||||
cover_to_file_ = new QAction(IconLoader::Load("document-save"), tr("Save cover to disk..."), this);
|
||||
cover_from_url_ = new QAction(IconLoader::Load("download"), tr("Load cover from URL..."), this);
|
||||
search_for_cover_ = new QAction(IconLoader::Load("search"), tr("Search for album covers..."), this);
|
||||
unset_cover_ = new QAction(IconLoader::Load("list-remove"), tr("Unset cover"), this);
|
||||
delete_cover_ = new QAction(IconLoader::Load("list-remove"), tr("Delete cover"), this);
|
||||
clear_cover_ = new QAction(IconLoader::Load("list-remove"), tr("Clear cover"), this);
|
||||
cover_from_file_ = new QAction(IconLoader::Load(QStringLiteral("document-open")), tr("Load cover from disk..."), this);
|
||||
cover_to_file_ = new QAction(IconLoader::Load(QStringLiteral("document-save")), tr("Save cover to disk..."), this);
|
||||
cover_from_url_ = new QAction(IconLoader::Load(QStringLiteral("download")), tr("Load cover from URL..."), this);
|
||||
search_for_cover_ = new QAction(IconLoader::Load(QStringLiteral("search")), tr("Search for album covers..."), this);
|
||||
unset_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Unset cover"), this);
|
||||
delete_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Delete cover"), this);
|
||||
clear_cover_ = new QAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Clear cover"), this);
|
||||
separator1_ = new QAction(this);
|
||||
separator1_->setSeparator(true);
|
||||
show_cover_ = new QAction(IconLoader::Load("zoom-in"), tr("Show fullsize..."), this);
|
||||
show_cover_ = new QAction(IconLoader::Load(QStringLiteral("zoom-in")), tr("Show fullsize..."), this);
|
||||
|
||||
search_cover_auto_ = new QAction(tr("Search automatically"), this);
|
||||
search_cover_auto_->setCheckable(true);
|
||||
@ -230,14 +230,14 @@ QUrl AlbumCoverChoiceController::LoadCoverFromFile(Song *song) {
|
||||
|
||||
void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const AlbumCoverImageResult &result) {
|
||||
|
||||
QString initial_file_name = "/";
|
||||
QString initial_file_name = QStringLiteral("/");
|
||||
|
||||
if (!song.effective_albumartist().isEmpty()) {
|
||||
initial_file_name = initial_file_name + song.effective_albumartist();
|
||||
}
|
||||
initial_file_name = initial_file_name + "-" + (song.effective_album().isEmpty() ? tr("unknown") : song.effective_album()) + ".jpg";
|
||||
initial_file_name = initial_file_name.toLower();
|
||||
initial_file_name.replace(QRegularExpression("\\s"), "-");
|
||||
initial_file_name.replace(QRegularExpression(QStringLiteral("\\s")), QStringLiteral("-"));
|
||||
initial_file_name.remove(QRegularExpression(QString(kInvalidFatCharactersRegex), QRegularExpression::CaseInsensitiveOption));
|
||||
|
||||
QString save_filename = QFileDialog::getSaveFileName(this, tr("Save album cover"), GetInitialPathForFileDialog(song, initial_file_name), tr(kSaveImageFileFilter) + ";;" + tr(kAllFilesFilter));
|
||||
@ -255,7 +255,7 @@ void AlbumCoverChoiceController::SaveCoverToFileManual(const Song &song, const A
|
||||
fileinfo.setFile(save_filename);
|
||||
}
|
||||
|
||||
if (result.is_jpeg() && fileinfo.completeSuffix().compare("jpg", Qt::CaseInsensitive) == 0) {
|
||||
if (result.is_jpeg() && fileinfo.completeSuffix().compare(QLatin1String("jpg"), 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();
|
||||
@ -655,7 +655,7 @@ QUrl AlbumCoverChoiceController::SaveCoverToFileAutomatic(const Song::Source sou
|
||||
const AlbumCoverImageResult &result,
|
||||
const bool force_overwrite) {
|
||||
|
||||
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, "jpg");
|
||||
QString filepath = CoverUtils::CoverFilePath(cover_options_, source, artist, album, album_id, album_dir, result.cover_url, QStringLiteral("jpg"));
|
||||
if (filepath.isEmpty()) return QUrl();
|
||||
|
||||
QFile file(filepath);
|
||||
@ -744,7 +744,7 @@ bool AlbumCoverChoiceController::IsKnownImageExtension(const QString &suffix) {
|
||||
|
||||
if (!sImageExtensions) {
|
||||
sImageExtensions = new QSet<QString>();
|
||||
(*sImageExtensions) << "png" << "jpg" << "jpeg" << "bmp" << "gif" << "xpm" << "pbm" << "pgm" << "ppm" << "xbm";
|
||||
(*sImageExtensions) << QStringLiteral("png") << QStringLiteral("jpg") << QStringLiteral("jpeg") << QStringLiteral("bmp") << QStringLiteral("gif") << QStringLiteral("xpm") << QStringLiteral("pbm") << QStringLiteral("pgm") << QStringLiteral("ppm") << QStringLiteral("xbm");
|
||||
}
|
||||
|
||||
return sImageExtensions->contains(suffix);
|
||||
|
@ -69,7 +69,7 @@ AlbumCoverExport::DialogResult AlbumCoverExport::Exec() {
|
||||
if (!result.cancelled_) {
|
||||
QString fileName = ui_->fileName->text();
|
||||
if (fileName.isEmpty()) {
|
||||
fileName = "cover";
|
||||
fileName = QStringLiteral("cover");
|
||||
}
|
||||
OverwriteMode overwrite_mode = ui_->doNotOverwrite->isChecked() ? OverwriteMode::None : (ui_->overwriteAll->isChecked() ? OverwriteMode::All : OverwriteMode::Smaller);
|
||||
bool forceSize = ui_->forceSize->isChecked();
|
||||
|
@ -83,7 +83,7 @@ void AlbumCoverFetcherSearch::TerminateSearch() {
|
||||
void AlbumCoverFetcherSearch::Start(SharedPtr<CoverProviders> cover_providers) {
|
||||
|
||||
// Ignore Radio Paradise "commercial" break.
|
||||
if (request_.artist.compare("commercial-free", Qt::CaseInsensitive) == 0 && request_.title.compare("listener-supported", Qt::CaseInsensitive) == 0) {
|
||||
if (request_.artist.compare(QLatin1String("commercial-free"), Qt::CaseInsensitive) == 0 && request_.title.compare(QLatin1String("listener-supported"), Qt::CaseInsensitive) == 0) {
|
||||
TerminateSearch();
|
||||
return;
|
||||
}
|
||||
@ -167,51 +167,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("hits", Qt::CaseInsensitive) ||
|
||||
result_album.contains("greatest", Qt::CaseInsensitive) ||
|
||||
result_album.contains("best", Qt::CaseInsensitive) ||
|
||||
result_album.contains("collection", Qt::CaseInsensitive) ||
|
||||
result_album.contains("classics", Qt::CaseInsensitive) ||
|
||||
result_album.contains("singles", Qt::CaseInsensitive) ||
|
||||
result_album.contains("bootleg", Qt::CaseInsensitive) ||
|
||||
result_album.contains("live", Qt::CaseInsensitive) ||
|
||||
result_album.contains("concert", Qt::CaseInsensitive) ||
|
||||
result_album.contains("essential", Qt::CaseInsensitive) ||
|
||||
result_album.contains("ultimate", Qt::CaseInsensitive) ||
|
||||
result_album.contains("karaoke", Qt::CaseInsensitive) ||
|
||||
result_album.contains("mixtape", Qt::CaseInsensitive) ||
|
||||
result_album.contains("country rock", Qt::CaseInsensitive) ||
|
||||
result_album.contains("indie folk", Qt::CaseInsensitive) ||
|
||||
result_album.contains("soft rock", Qt::CaseInsensitive) ||
|
||||
result_album.contains("folk music", Qt::CaseInsensitive) ||
|
||||
result_album.contains("60's rock", Qt::CaseInsensitive) ||
|
||||
result_album.contains("60's romance", Qt::CaseInsensitive) ||
|
||||
result_album.contains("60s music", Qt::CaseInsensitive) ||
|
||||
result_album.contains("late 60s", Qt::CaseInsensitive) ||
|
||||
result_album.contains("the 60s", Qt::CaseInsensitive) ||
|
||||
result_album.contains("folk and blues", Qt::CaseInsensitive) ||
|
||||
result_album.contains("60 from the 60's", Qt::CaseInsensitive) ||
|
||||
result_album.contains("classic psychedelic", Qt::CaseInsensitive) ||
|
||||
result_album.contains("playlist: acoustic", Qt::CaseInsensitive) ||
|
||||
result_album.contains("90's rnb playlist", Qt::CaseInsensitive) ||
|
||||
result_album.contains("rock 80s", Qt::CaseInsensitive) ||
|
||||
result_album.contains("classic 80s", Qt::CaseInsensitive) ||
|
||||
result_album.contains("rock anthems", Qt::CaseInsensitive) ||
|
||||
result_album.contains("rock songs", Qt::CaseInsensitive) ||
|
||||
result_album.contains("rock 2019", Qt::CaseInsensitive) ||
|
||||
result_album.contains("guitar anthems", Qt::CaseInsensitive) ||
|
||||
result_album.contains("driving anthems", Qt::CaseInsensitive) ||
|
||||
result_album.contains("traffic jam jams", Qt::CaseInsensitive) ||
|
||||
result_album.contains("perfect background music", Qt::CaseInsensitive) ||
|
||||
result_album.contains("70's gold", Qt::CaseInsensitive) ||
|
||||
result_album.contains("rockfluence", Qt::CaseInsensitive) ||
|
||||
result_album.contains("acoustic dinner accompaniment", Qt::CaseInsensitive) ||
|
||||
result_album.contains("complete studio albums", Qt::CaseInsensitive) ||
|
||||
result_album.contains("mellow rock", Qt::CaseInsensitive)
|
||||
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)
|
||||
)) {
|
||||
results_copy[i].score_match -= 1;
|
||||
}
|
||||
else if (request_album.isEmpty() && result_album.contains("soundtrack", Qt::CaseInsensitive)) {
|
||||
else if (request_album.isEmpty() && result_album.contains(QLatin1String("soundtrack"), Qt::CaseInsensitive)) {
|
||||
results_copy[i].score_match -= 0.5;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,7 @@ AlbumCoverLoaderOptions::Types AlbumCoverLoaderOptions::LoadTypes() {
|
||||
|
||||
QSettings s;
|
||||
s.beginGroup(CoversSettingsPage::kSettingsGroup);
|
||||
const QStringList all_cover_types = QStringList() << "art_unset" << "art_embedded" << "art_manual" << "art_automatic";
|
||||
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 == "art_unset") {
|
||||
|
@ -112,8 +112,8 @@ AlbumCoverManager::AlbumCoverManager(Application *app, SharedPtr<CollectionBacke
|
||||
cover_searcher_(nullptr),
|
||||
cover_export_(nullptr),
|
||||
cover_exporter_(new AlbumCoverExporter(this)),
|
||||
artist_icon_(IconLoader::Load("folder-sound")),
|
||||
all_artists_icon_(IconLoader::Load("library-music")),
|
||||
artist_icon_(IconLoader::Load(QStringLiteral("folder-sound"))),
|
||||
all_artists_icon_(IconLoader::Load(QStringLiteral("library-music"))),
|
||||
image_nocover_thumbnail_(ImageUtils::GenerateNoCoverImage(QSize(120, 120), devicePixelRatio())),
|
||||
icon_nocover_item_(QPixmap::fromImage(image_nocover_thumbnail_)),
|
||||
context_menu_(new QMenu(this)),
|
||||
@ -126,12 +126,12 @@ AlbumCoverManager::AlbumCoverManager(Application *app, SharedPtr<CollectionBacke
|
||||
ui_->albums->set_cover_manager(this);
|
||||
|
||||
// Icons
|
||||
ui_->action_fetch->setIcon(IconLoader::Load("download"));
|
||||
ui_->export_covers->setIcon(IconLoader::Load("document-save"));
|
||||
ui_->view->setIcon(IconLoader::Load("view-choose"));
|
||||
ui_->button_fetch->setIcon(IconLoader::Load("download"));
|
||||
ui_->action_add_to_playlist->setIcon(IconLoader::Load("media-playback-start"));
|
||||
ui_->action_load->setIcon(IconLoader::Load("media-playback-start"));
|
||||
ui_->action_fetch->setIcon(IconLoader::Load(QStringLiteral("download")));
|
||||
ui_->export_covers->setIcon(IconLoader::Load(QStringLiteral("document-save")));
|
||||
ui_->view->setIcon(IconLoader::Load(QStringLiteral("view-choose")));
|
||||
ui_->button_fetch->setIcon(IconLoader::Load(QStringLiteral("download")));
|
||||
ui_->action_add_to_playlist->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
ui_->action_load->setIcon(IconLoader::Load(QStringLiteral("media-playback-start")));
|
||||
|
||||
album_cover_choice_controller_->Init(app_);
|
||||
|
||||
@ -877,12 +877,12 @@ SongList AlbumCoverManager::GetSongsInAlbum(const QModelIndex &idx) const {
|
||||
|
||||
CollectionQuery q(db, collection_backend_->songs_table(), collection_backend_->fts_table());
|
||||
q.SetColumnSpec("ROWID," + Song::kColumnSpec);
|
||||
q.AddWhere("album", idx.data(Role_Album).toString());
|
||||
q.SetOrderBy("disc, track, title");
|
||||
q.AddWhere(QStringLiteral("album"), idx.data(Role_Album).toString());
|
||||
q.SetOrderBy(QStringLiteral("disc, track, title"));
|
||||
|
||||
QString albumartist = idx.data(Role_AlbumArtist).toString();
|
||||
if (!albumartist.isEmpty()) {
|
||||
q.AddWhere("effective_albumartist", albumartist);
|
||||
q.AddWhere(QStringLiteral("effective_albumartist"), albumartist);
|
||||
}
|
||||
|
||||
q.AddCompilationRequirement(albumartist.isEmpty());
|
||||
|
@ -76,7 +76,7 @@ void CoverExportRunnable::ProcessAndExportCover() {
|
||||
if (song_.art_embedded() && dialog_result_.export_embedded_) {
|
||||
image = TagReaderClient::Instance()->LoadEmbeddedArtAsImageBlocking(song_.url().toLocalFile());
|
||||
if (!image.isNull()) {
|
||||
extension = "jpg";
|
||||
extension = QStringLiteral("jpg");
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -111,7 +111,7 @@ void CoverExportRunnable::ProcessAndExportCover() {
|
||||
}
|
||||
|
||||
QString cover_dir = song_.url().toLocalFile().section('/', 0, -2);
|
||||
QString new_file = cover_dir + '/' + dialog_result_.filename_ + '.' + (song_.art_embedded() ? "jpg" : extension);
|
||||
QString new_file = cover_dir + '/' + dialog_result_.filename_ + '.' + (song_.art_embedded() ? QStringLiteral("jpg") : extension);
|
||||
|
||||
// If the file exists, do not override!
|
||||
if (dialog_result_.overwrite_ == AlbumCoverExport::OverwriteMode::None && QFile::exists(new_file)) {
|
||||
@ -169,7 +169,7 @@ void CoverExportRunnable::ExportCover() {
|
||||
image = TagReaderClient::Instance()->LoadEmbeddedArtAsImageBlocking(song_.url().toLocalFile());
|
||||
if (!image.isNull()) {
|
||||
embedded_cover = true;
|
||||
extension = "jpg";
|
||||
extension = QStringLiteral("jpg");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -56,7 +56,7 @@ CoverFromURLDialog::~CoverFromURLDialog() {
|
||||
AlbumCoverImageResult CoverFromURLDialog::Exec() {
|
||||
|
||||
// reset state
|
||||
ui_->url->setText("");
|
||||
ui_->url->setText(QLatin1String(""));
|
||||
last_album_cover_ = AlbumCoverImageResult();
|
||||
|
||||
QClipboard *clipboard = QApplication::clipboard();
|
||||
|
@ -60,7 +60,7 @@ CoverSearchStatistics &CoverSearchStatistics::operator+=(const CoverSearchStatis
|
||||
QString CoverSearchStatistics::AverageDimensions() const {
|
||||
|
||||
if (chosen_images_ == 0) {
|
||||
return "0x0";
|
||||
return QStringLiteral("0x0");
|
||||
}
|
||||
|
||||
return QString::number(chosen_width_ / chosen_images_) + "x" + QString::number(chosen_height_ / chosen_images_);
|
||||
|
@ -79,7 +79,7 @@ void CoverSearchStatisticsDialog::Show(const CoverSearchStatistics &statistics)
|
||||
|
||||
AddLine(tr("Total network requests made"), QString::number(statistics.network_requests_made_));
|
||||
AddLine(tr("Average image size"), statistics.AverageDimensions());
|
||||
AddLine(tr("Total bytes transferred"), statistics.bytes_transferred_ > 0 ? Utilities::PrettySize(statistics.bytes_transferred_) : "0 bytes");
|
||||
AddLine(tr("Total bytes transferred"), statistics.bytes_transferred_ > 0 ? Utilities::PrettySize(statistics.bytes_transferred_) : QStringLiteral("0 bytes"));
|
||||
|
||||
details_layout_->addStretch();
|
||||
|
||||
|
@ -46,7 +46,7 @@ CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *pare
|
||||
|
||||
options_.options = AlbumCoverLoaderOptions::Option::RawImageData | AlbumCoverLoaderOptions::Option::OriginalImage | AlbumCoverLoaderOptions::Option::ScaledImage;
|
||||
options_.desired_scaled_size = QSize(120, 120);
|
||||
options_.default_cover = ":/pictures/cdcase.png";
|
||||
options_.default_cover = QStringLiteral(":/pictures/cdcase.png");
|
||||
|
||||
QObject::connect(&*app_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover);
|
||||
QObject::connect(&*app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady);
|
||||
|
@ -51,7 +51,7 @@ const char *DeezerCoverProvider::kApiUrl = "https://api.deezer.com";
|
||||
const int DeezerCoverProvider::kLimit = 10;
|
||||
|
||||
DeezerCoverProvider::DeezerCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Deezer", true, false, 2.0, true, true, app, network, parent) {}
|
||||
: JsonCoverProvider(QStringLiteral("Deezer"), true, false, 2.0, true, true, app, network, parent) {}
|
||||
|
||||
DeezerCoverProvider::~DeezerCoverProvider() {
|
||||
|
||||
@ -71,12 +71,12 @@ bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
QString resource;
|
||||
QString query = artist;
|
||||
if (album.isEmpty() && !title.isEmpty()) {
|
||||
resource = "search/track";
|
||||
resource = QStringLiteral("search/track");
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(title);
|
||||
}
|
||||
else {
|
||||
resource = "search/album";
|
||||
resource = QStringLiteral("search/album");
|
||||
if (!album.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(album);
|
||||
@ -92,7 +92,7 @@ bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
|
||||
}
|
||||
|
||||
QUrl url(kApiUrl + QString("/") + resource);
|
||||
QUrl url(kApiUrl + QStringLiteral("/") + resource);
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@ -116,7 +116,7 @@ QByteArray DeezerCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
QString error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
QString error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
Error(error);
|
||||
}
|
||||
else {
|
||||
@ -127,22 +127,22 @@ 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("error")) {
|
||||
QJsonValue value_error = json_obj["error"];
|
||||
if (json_obj.contains(QStringLiteral("error"))) {
|
||||
QJsonValue value_error = json_obj[QStringLiteral("error")];
|
||||
if (value_error.isObject()) {
|
||||
QJsonObject obj_error = value_error.toObject();
|
||||
int code = obj_error["code"].toInt();
|
||||
QString message = obj_error["message"].toString();
|
||||
error = QString("%1 (%2)").arg(message).arg(code);
|
||||
int code = obj_error[QStringLiteral("code")].toInt();
|
||||
QString message = obj_error[QStringLiteral("message")].toString();
|
||||
error = QStringLiteral("%1 (%2)").arg(message).arg(code);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
@ -159,27 +159,27 @@ QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) {
|
||||
QJsonObject json_obj = ExtractJsonObj(data);
|
||||
if (json_obj.isEmpty()) return QJsonObject();
|
||||
|
||||
if (json_obj.contains("error")) {
|
||||
QJsonValue value_error = json_obj["error"];
|
||||
if (json_obj.contains(QStringLiteral("error"))) {
|
||||
QJsonValue value_error = json_obj[QStringLiteral("error")];
|
||||
if (!value_error.isObject()) {
|
||||
Error("Error missing object", json_obj);
|
||||
Error(QStringLiteral("Error missing object"), json_obj);
|
||||
return QJsonValue();
|
||||
}
|
||||
QJsonObject obj_error = value_error.toObject();
|
||||
const int code = obj_error["code"].toInt();
|
||||
QString message = obj_error["message"].toString();
|
||||
Error(QString("%1 (%2)").arg(message).arg(code));
|
||||
const int code = obj_error[QStringLiteral("code")].toInt();
|
||||
QString message = obj_error[QStringLiteral("message")].toString();
|
||||
Error(QStringLiteral("%1 (%2)").arg(message).arg(code));
|
||||
return QJsonValue();
|
||||
}
|
||||
|
||||
if (!json_obj.contains("data") && !json_obj.contains("DATA")) {
|
||||
Error("Json reply object is missing data.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("data")) && !json_obj.contains(QStringLiteral("DATA"))) {
|
||||
Error(QStringLiteral("Json reply object is missing data."), json_obj);
|
||||
return QJsonValue();
|
||||
}
|
||||
|
||||
QJsonValue value_data;
|
||||
if (json_obj.contains("data")) value_data = json_obj["data"];
|
||||
else value_data = json_obj["DATA"];
|
||||
if (json_obj.contains(QStringLiteral("data"))) value_data = json_obj[QStringLiteral("data")];
|
||||
else value_data = json_obj[QStringLiteral("DATA")];
|
||||
|
||||
return value_data;
|
||||
|
||||
@ -215,63 +215,63 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
for (const QJsonValueRef json_value : array_data) {
|
||||
|
||||
if (!json_value.isObject()) {
|
||||
Error("Invalid Json reply, data array value is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, data array value is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject json_obj = json_value.toObject();
|
||||
QJsonObject obj_album;
|
||||
if (json_obj.contains("album") && json_obj["album"].isObject()) { // Song search, so extract the album.
|
||||
obj_album = json_obj["album"].toObject();
|
||||
if (json_obj.contains(QStringLiteral("album")) && json_obj[QStringLiteral("album")].isObject()) { // Song search, so extract the album.
|
||||
obj_album = json_obj[QStringLiteral("album")].toObject();
|
||||
}
|
||||
else {
|
||||
obj_album = json_obj;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("id") || !obj_album.contains("id")) {
|
||||
Error("Invalid Json reply, data array value object is missing ID.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("id")) || !obj_album.contains(QStringLiteral("id"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value object is missing ID."), json_obj);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!obj_album.contains("type")) {
|
||||
Error("Invalid Json reply, data array value album object is missing type.", obj_album);
|
||||
if (!obj_album.contains(QStringLiteral("type"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing type."), obj_album);
|
||||
continue;
|
||||
}
|
||||
QString type = obj_album["type"].toString();
|
||||
QString type = obj_album[QStringLiteral("type")].toString();
|
||||
if (type != "album") {
|
||||
Error("Invalid Json reply, data array value album object has incorrect type returned", obj_album);
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object has incorrect type returned"), obj_album);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("artist")) {
|
||||
Error("Invalid Json reply, data array value object is missing artist.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("artist"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value object is missing artist."), json_obj);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist = json_obj["artist"];
|
||||
QJsonValue value_artist = json_obj[QStringLiteral("artist")];
|
||||
if (!value_artist.isObject()) {
|
||||
Error("Invalid Json reply, data array value artist is not a object.", value_artist);
|
||||
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("name")) {
|
||||
Error("Invalid Json reply, data array value artist object is missing name.", obj_artist);
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value artist object is missing name."), obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"].toString();
|
||||
QString artist = obj_artist[QStringLiteral("name")].toString();
|
||||
|
||||
if (!obj_album.contains("title")) {
|
||||
Error("Invalid Json reply, data array value album object is missing title.", obj_album);
|
||||
if (!obj_album.contains(QStringLiteral("title"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing title."), obj_album);
|
||||
continue;
|
||||
}
|
||||
QString album = obj_album["title"].toString();
|
||||
QString album = obj_album[QStringLiteral("title")].toString();
|
||||
|
||||
CoverProviderSearchResult cover_result;
|
||||
cover_result.artist = artist;
|
||||
cover_result.album = Song::AlbumRemoveDiscMisc(album);
|
||||
|
||||
bool have_cover = false;
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QString("cover_xl"), QSize(1000, 1000))
|
||||
<< qMakePair(QString("cover_big"), QSize(500, 500));
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("cover_xl"), QSize(1000, 1000))
|
||||
<< qMakePair(QStringLiteral("cover_big"), QSize(500, 500));
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
if (!obj_album.contains(cover_size.first)) continue;
|
||||
QString cover = obj_album[cover_size.first].toString();
|
||||
@ -289,7 +289,7 @@ void DeezerCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
}
|
||||
|
||||
if (!have_cover) {
|
||||
Error("Invalid Json reply, data array value album object is missing cover.", obj_album);
|
||||
Error(QStringLiteral("Invalid Json reply, data array value album object is missing cover."), obj_album);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ const char *DiscogsCoverProvider::kSecretKeyB64 = "ZkFIcmlaSER4aHhRSlF2U3d0bm5ZV
|
||||
const int DiscogsCoverProvider::kRequestsDelay = 1000;
|
||||
|
||||
DiscogsCoverProvider::DiscogsCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Discogs", false, false, 0.0, false, false, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("Discogs"), false, false, 0.0, false, false, app, network, parent),
|
||||
timer_flush_requests_(new QTimer(this)) {
|
||||
|
||||
timer_flush_requests_->setInterval(kRequestsDelay);
|
||||
@ -163,11 +163,11 @@ QNetworkReply *DiscogsCoverProvider::CreateRequest(QUrl url, const ParamList &pa
|
||||
url.setQuery(url_query);
|
||||
|
||||
// Sign the request
|
||||
const QByteArray data_to_sign = QString("GET\n%1\n%2\n%3").arg(url.host(), url.path(), query_items.join("&")).toUtf8();
|
||||
const QByteArray data_to_sign = QStringLiteral("GET\n%1\n%2\n%3").arg(url.host(), url.path(), query_items.join(QStringLiteral("&"))).toUtf8();
|
||||
const QByteArray signature(Utilities::HmacSha256(QByteArray::fromBase64(kSecretKeyB64), data_to_sign));
|
||||
|
||||
// Add the signature to the request
|
||||
url_query.addQueryItem("Signature", QUrl::toPercentEncoding(signature.toBase64()));
|
||||
url_query.addQueryItem(QStringLiteral("Signature"), QUrl::toPercentEncoding(signature.toBase64()));
|
||||
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@ -190,7 +190,7 @@ QByteArray DiscogsCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
QString error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
QString error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
Error(error);
|
||||
}
|
||||
else {
|
||||
@ -201,16 +201,16 @@ 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("message")) {
|
||||
error = json_obj["message"].toString();
|
||||
if (json_obj.contains(QStringLiteral("message"))) {
|
||||
error = json_obj[QStringLiteral("message")].toString();
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
@ -245,23 +245,23 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
}
|
||||
|
||||
QJsonValue value_results;
|
||||
if (json_obj.contains("results")) {
|
||||
value_results = json_obj["results"];
|
||||
if (json_obj.contains(QStringLiteral("results"))) {
|
||||
value_results = json_obj[QStringLiteral("results")];
|
||||
}
|
||||
else if (json_obj.contains("message")) {
|
||||
QString message = json_obj["message"].toString();
|
||||
Error(QString("%1").arg(message));
|
||||
else if (json_obj.contains(QStringLiteral("message"))) {
|
||||
QString message = json_obj[QStringLiteral("message")].toString();
|
||||
Error(QStringLiteral("%1").arg(message));
|
||||
EndSearch(search);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Error("Json object is missing results.", json_obj);
|
||||
Error(QStringLiteral("Json object is missing results."), json_obj);
|
||||
EndSearch(search);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_results.isArray()) {
|
||||
Error("Missing results array.", value_results);
|
||||
Error(QStringLiteral("Missing results array."), value_results);
|
||||
EndSearch(search);
|
||||
return;
|
||||
}
|
||||
@ -270,20 +270,20 @@ void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id)
|
||||
for (QJsonValueRef value_result : array_results) {
|
||||
|
||||
if (!value_result.isObject()) {
|
||||
Error("Invalid Json reply, results value is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, results value is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_result = value_result.toObject();
|
||||
if (!obj_result.contains("id") || !obj_result.contains("title") || !obj_result.contains("resource_url")) {
|
||||
Error("Invalid Json reply, results value object is missing ID, title or resource_url.", obj_result);
|
||||
if (!obj_result.contains(QStringLiteral("id")) || !obj_result.contains(QStringLiteral("title")) || !obj_result.contains(QStringLiteral("resource_url"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, results value object is missing ID, title or resource_url."), obj_result);
|
||||
continue;
|
||||
}
|
||||
quint64 release_id = obj_result["id"].toInt();
|
||||
QUrl resource_url(obj_result["resource_url"].toString());
|
||||
QString title = obj_result["title"].toString();
|
||||
quint64 release_id = obj_result[QStringLiteral("id")].toInt();
|
||||
QUrl resource_url(obj_result[QStringLiteral("resource_url")].toString());
|
||||
QString title = obj_result[QStringLiteral("title")].toString();
|
||||
|
||||
if (title.contains(" - ")) {
|
||||
QStringList title_splitted = title.split(" - ");
|
||||
if (title.contains(QLatin1String(" - "))) {
|
||||
QStringList title_splitted = title.split(QStringLiteral(" - "));
|
||||
if (title_splitted.count() == 2) {
|
||||
QString artist = title_splitted.first();
|
||||
title = title_splitted.last();
|
||||
@ -354,20 +354,20 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("artists") || !json_obj.contains("title")) {
|
||||
Error("Json reply object is missing artists or title.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("artists")) || !json_obj.contains(QStringLiteral("title"))) {
|
||||
Error(QStringLiteral("Json reply object is missing artists or title."), json_obj);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("images")) {
|
||||
if (!json_obj.contains(QStringLiteral("images"))) {
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonValue value_artists = json_obj["artists"];
|
||||
QJsonValue value_artists = json_obj[QStringLiteral("artists")];
|
||||
if (!value_artists.isArray()) {
|
||||
Error("Json reply object artists is not a array.", value_artists);
|
||||
Error(QStringLiteral("Json reply object artists is not a array."), value_artists);
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
@ -376,15 +376,15 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
QString artist;
|
||||
for (const QJsonValueRef value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) {
|
||||
Error("Invalid Json reply, atists array value is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, atists array value is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name")) {
|
||||
Error("Invalid Json reply, artists array value object is missing name.", obj_artist);
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, artists array value object is missing name."), obj_artist);
|
||||
continue;
|
||||
}
|
||||
artist = obj_artist["name"].toString();
|
||||
artist = obj_artist[QStringLiteral("name")].toString();
|
||||
++i;
|
||||
if (artist == search->artist) break;
|
||||
}
|
||||
@ -393,24 +393,24 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
if (i > 1 && artist != search->artist) artist = "Various artists";
|
||||
if (i > 1 && artist != search->artist) artist = QStringLiteral("Various artists");
|
||||
|
||||
QString album = json_obj["title"].toString();
|
||||
QString album = json_obj[QStringLiteral("title")].toString();
|
||||
if (artist != search->artist && album != search->album) {
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonValue value_images = json_obj["images"];
|
||||
QJsonValue value_images = json_obj[QStringLiteral("images")];
|
||||
if (!value_images.isArray()) {
|
||||
Error("Json images is not an array.");
|
||||
Error(QStringLiteral("Json images is not an array."));
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
QJsonArray array_images = value_images.toArray();
|
||||
|
||||
if (array_images.isEmpty()) {
|
||||
Error("Invalid Json reply, images array is empty.");
|
||||
Error(QStringLiteral("Invalid Json reply, images array is empty."));
|
||||
EndSearch(search, release.id);
|
||||
return;
|
||||
}
|
||||
@ -418,27 +418,27 @@ void DiscogsCoverProvider::HandleReleaseReply(QNetworkReply *reply, const int se
|
||||
for (const QJsonValueRef value_image : array_images) {
|
||||
|
||||
if (!value_image.isObject()) {
|
||||
Error("Invalid Json reply, images array value is not an object.");
|
||||
Error(QStringLiteral("Invalid Json reply, images array value is not an object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("type") || !obj_image.contains("resource_url") || !obj_image.contains("width") || !obj_image.contains("height")) {
|
||||
Error("Invalid Json reply, images array value object is missing type, resource_url, width or height.", obj_image);
|
||||
if (!obj_image.contains(QStringLiteral("type")) || !obj_image.contains(QStringLiteral("resource_url")) || !obj_image.contains(QStringLiteral("width")) || !obj_image.contains(QStringLiteral("height"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, images array value object is missing type, resource_url, width or height."), obj_image);
|
||||
continue;
|
||||
}
|
||||
QString type = obj_image["type"].toString();
|
||||
QString type = obj_image[QStringLiteral("type")].toString();
|
||||
if (type != "primary") {
|
||||
continue;
|
||||
}
|
||||
int width = obj_image["width"].toInt();
|
||||
int height = obj_image["height"].toInt();
|
||||
int width = obj_image[QStringLiteral("width")].toInt();
|
||||
int height = obj_image[QStringLiteral("height")].toInt();
|
||||
if (width < 300 || height < 300) continue;
|
||||
const float aspect_score = static_cast<float>(1.0) - static_cast<float>(std::max(width, height) - std::min(width, height)) / static_cast<float>(std::max(height, width));
|
||||
if (aspect_score < 0.85) continue;
|
||||
CoverProviderSearchResult result;
|
||||
result.artist = artist;
|
||||
result.album = album;
|
||||
result.image_url = QUrl(obj_image["resource_url"].toString());
|
||||
result.image_url = QUrl(obj_image[QStringLiteral("resource_url")].toString());
|
||||
if (result.image_url.isEmpty()) continue;
|
||||
search->results.append(result);
|
||||
}
|
||||
|
@ -40,23 +40,23 @@ QJsonObject JsonCoverProvider::ExtractJsonObj(const QByteArray &data) {
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
|
||||
|
||||
if (json_error.error != QJsonParseError::NoError) {
|
||||
Error(QString("Failed to parse json data: %1").arg(json_error.errorString()));
|
||||
Error(QStringLiteral("Failed to parse json data: %1").arg(json_error.errorString()));
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
Error("Received empty Json document.", data);
|
||||
Error(QStringLiteral("Received empty Json document."), data);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
Error("Json document is not an object.", json_doc);
|
||||
Error(QStringLiteral("Json document is not an object."), json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
Error("Received empty Json object.", json_doc);
|
||||
Error(QStringLiteral("Received empty Json object."), json_doc);
|
||||
return QJsonObject();
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,7 @@ const char *LastFmCoverProvider::kApiKey = "211990b4c96782c05d1536e7219eb56e";
|
||||
const char *LastFmCoverProvider::kSecret = "80fd738f49596e9709b1bf9319c444a8";
|
||||
|
||||
LastFmCoverProvider::LastFmCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Last.fm", true, false, 1.0, true, false, app, network, parent) {}
|
||||
: JsonCoverProvider(QStringLiteral("Last.fm"), true, false, 1.0, true, false, app, network, parent) {}
|
||||
|
||||
LastFmCoverProvider::~LastFmCoverProvider() {
|
||||
|
||||
@ -72,14 +72,14 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
QString type;
|
||||
QString query = artist;
|
||||
if (album.isEmpty() && !title.isEmpty()) {
|
||||
method = "track.search";
|
||||
type = "track";
|
||||
method = QStringLiteral("track.search");
|
||||
type = QStringLiteral("track");
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(title);
|
||||
}
|
||||
else {
|
||||
method = "album.search";
|
||||
type = "album";
|
||||
method = QStringLiteral("album.search");
|
||||
type = QStringLiteral("album");
|
||||
if (!album.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(album);
|
||||
@ -104,8 +104,8 @@ bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &albu
|
||||
QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5);
|
||||
QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, '0').toLower();
|
||||
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding("api_sig"), QUrl::toPercentEncoding(signature));
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding("format"), QUrl::toPercentEncoding("json"));
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(QStringLiteral("api_sig")), QUrl::toPercentEncoding(signature));
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(QStringLiteral("format")), QUrl::toPercentEncoding(QStringLiteral("json")));
|
||||
|
||||
QUrl url(kUrl);
|
||||
QNetworkRequest req(url);
|
||||
@ -141,31 +141,31 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
}
|
||||
|
||||
QJsonValue value_results;
|
||||
if (json_obj.contains("results")) {
|
||||
value_results = json_obj["results"];
|
||||
if (json_obj.contains(QStringLiteral("results"))) {
|
||||
value_results = json_obj[QStringLiteral("results")];
|
||||
}
|
||||
else if (json_obj.contains("error") && json_obj.contains("message")) {
|
||||
int error = json_obj["error"].toInt();
|
||||
QString message = json_obj["message"].toString();
|
||||
Error(QString("Error: %1: %2").arg(QString::number(error), message));
|
||||
else if (json_obj.contains(QStringLiteral("error")) && json_obj.contains(QStringLiteral("message"))) {
|
||||
int error = json_obj[QStringLiteral("error")].toInt();
|
||||
QString message = json_obj[QStringLiteral("message")].toString();
|
||||
Error(QStringLiteral("Error: %1: %2").arg(QString::number(error), message));
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Error(QString("Json reply is missing results."), json_obj);
|
||||
Error(QStringLiteral("Json reply is missing results."), json_obj);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_results.isObject()) {
|
||||
Error("Json results is not a object.", value_results);
|
||||
Error(QStringLiteral("Json results is not a object."), value_results);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_results = value_results.toObject();
|
||||
if (obj_results.isEmpty()) {
|
||||
Error("Json results object is empty.", value_results);
|
||||
Error(QStringLiteral("Json results object is empty."), value_results);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@ -173,49 +173,49 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
QJsonValue value_matches;
|
||||
|
||||
if (type == "album") {
|
||||
if (obj_results.contains("albummatches")) {
|
||||
value_matches = obj_results["albummatches"];
|
||||
if (obj_results.contains(QStringLiteral("albummatches"))) {
|
||||
value_matches = obj_results[QStringLiteral("albummatches")];
|
||||
}
|
||||
else {
|
||||
Error("Json results object is missing albummatches.", obj_results);
|
||||
Error(QStringLiteral("Json results object is missing albummatches."), obj_results);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (type == "track") {
|
||||
if (obj_results.contains("trackmatches")) {
|
||||
value_matches = obj_results["trackmatches"];
|
||||
if (obj_results.contains(QStringLiteral("trackmatches"))) {
|
||||
value_matches = obj_results[QStringLiteral("trackmatches")];
|
||||
}
|
||||
else {
|
||||
Error("Json results object is missing trackmatches.", obj_results);
|
||||
Error(QStringLiteral("Json results object is missing trackmatches."), obj_results);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!value_matches.isObject()) {
|
||||
Error("Json albummatches or trackmatches is not an object.", value_matches);
|
||||
Error(QStringLiteral("Json albummatches or trackmatches is not an object."), value_matches);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_matches = value_matches.toObject();
|
||||
if (obj_matches.isEmpty()) {
|
||||
Error("Json albummatches or trackmatches object is empty.", value_matches);
|
||||
Error(QStringLiteral("Json albummatches or trackmatches object is empty."), value_matches);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonValue value_type;
|
||||
if (!obj_matches.contains(type)) {
|
||||
Error(QString("Json object is missing %1.").arg(type), obj_matches);
|
||||
Error(QStringLiteral("Json object is missing %1.").arg(type), obj_matches);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
value_type = obj_matches[type];
|
||||
|
||||
if (!value_type.isArray()) {
|
||||
Error("Json album value in albummatches object is not an array.", value_type);
|
||||
Error(QStringLiteral("Json album value in albummatches object is not an array."), value_type);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@ -224,23 +224,23 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
for (const QJsonValueRef value : array_type) {
|
||||
|
||||
if (!value.isObject()) {
|
||||
Error("Invalid Json reply, value in albummatches/trackmatches array is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, value in albummatches/trackmatches array is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj = value.toObject();
|
||||
if (!obj.contains("artist") || !obj.contains("image") || !obj.contains("name")) {
|
||||
Error("Invalid Json reply, album is missing artist, image or name.", obj);
|
||||
if (!obj.contains(QStringLiteral("artist")) || !obj.contains(QStringLiteral("image")) || !obj.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, album is missing artist, image or name."), obj);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj["artist"].toString();
|
||||
QString artist = obj[QStringLiteral("artist")].toString();
|
||||
QString album;
|
||||
if (type == "album") {
|
||||
album = obj["name"].toString();
|
||||
album = obj[QStringLiteral("name")].toString();
|
||||
}
|
||||
|
||||
QJsonValue json_image = obj["image"];
|
||||
QJsonValue json_image = obj[QStringLiteral("image")];
|
||||
if (!json_image.isArray()) {
|
||||
Error("Invalid Json reply, album image is not a array.", json_image);
|
||||
Error(QStringLiteral("Invalid Json reply, album image is not a array."), json_image);
|
||||
continue;
|
||||
}
|
||||
QJsonArray array_image = json_image.toArray();
|
||||
@ -248,17 +248,17 @@ void LastFmCoverProvider::QueryFinished(QNetworkReply *reply, const int id, cons
|
||||
LastFmImageSize image_size_use(LastFmImageSize::Unknown);
|
||||
for (const QJsonValueRef value_image : array_image) {
|
||||
if (!value_image.isObject()) {
|
||||
Error("Invalid Json reply, album image value is not an object.");
|
||||
Error(QStringLiteral("Invalid Json reply, album image value is not an object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("#text") || !obj_image.contains("size")) {
|
||||
Error("Invalid Json reply, album image value is missing #text or size.", obj_image);
|
||||
if (!obj_image.contains(QStringLiteral("#text")) || !obj_image.contains(QStringLiteral("size"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, album image value is missing #text or size."), obj_image);
|
||||
continue;
|
||||
}
|
||||
QString image_url = obj_image["#text"].toString();
|
||||
QString image_url = obj_image[QStringLiteral("#text")].toString();
|
||||
if (image_url.isEmpty()) continue;
|
||||
LastFmImageSize image_size = ImageSizeFromString(obj_image["size"].toString().toLower());
|
||||
LastFmImageSize image_size = ImageSizeFromString(obj_image[QStringLiteral("size")].toString().toLower());
|
||||
if (image_url_use.isEmpty() || image_size > image_size_use) {
|
||||
image_url_use = image_url;
|
||||
image_size_use = image_size;
|
||||
@ -268,8 +268,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("/300x300/")) {
|
||||
image_url_use = image_url_use.replace("/300x300/", "/740x0/");
|
||||
if (image_url_use.contains(QLatin1String("/300x300/"))) {
|
||||
image_url_use = image_url_use.replace(QLatin1String("/300x300/"), QLatin1String("/740x0/"));
|
||||
}
|
||||
QUrl url(image_url_use);
|
||||
if (!url.isValid()) continue;
|
||||
@ -295,7 +295,7 @@ QByteArray LastFmCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
Error(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
Error(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
}
|
||||
else {
|
||||
// See if there is Json data containing "error" and "message" - then use that instead.
|
||||
@ -305,18 +305,18 @@ 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("error") && json_obj.contains("message")) {
|
||||
int code = json_obj["error"].toInt();
|
||||
QString message = json_obj["message"].toString();
|
||||
if (json_obj.contains(QStringLiteral("error")) && json_obj.contains(QStringLiteral("message"))) {
|
||||
int code = json_obj[QStringLiteral("error")].toInt();
|
||||
QString message = json_obj[QStringLiteral("message")].toString();
|
||||
error = "Error: " + QString::number(code) + ": " + message;
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
|
@ -50,7 +50,7 @@ const int MusicbrainzCoverProvider::kLimit = 8;
|
||||
const int MusicbrainzCoverProvider::kRequestsDelay = 1000;
|
||||
|
||||
MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("MusicBrainz", true, false, 1.5, true, false, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("MusicBrainz"), true, false, 1.5, true, false, app, network, parent),
|
||||
timer_flush_requests_(new QTimer(this)) {
|
||||
|
||||
timer_flush_requests_->setInterval(kRequestsDelay);
|
||||
@ -89,12 +89,12 @@ bool MusicbrainzCoverProvider::StartSearch(const QString &artist, const QString
|
||||
|
||||
void MusicbrainzCoverProvider::SendSearchRequest(const SearchRequest &request) {
|
||||
|
||||
QString query = QString("release:\"%1\" AND artist:\"%2\"").arg(request.album.trimmed().replace('"', "\\\""), request.artist.trimmed().replace('"', "\\\""));
|
||||
QString query = QStringLiteral("release:\"%1\" AND artist:\"%2\"").arg(request.album.trimmed().replace('"', QLatin1String("\\\"")), request.artist.trimmed().replace('"', QLatin1String("\\\"")));
|
||||
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem("query", query);
|
||||
url_query.addQueryItem("limit", QString::number(kLimit));
|
||||
url_query.addQueryItem("fmt", "json");
|
||||
url_query.addQueryItem(QStringLiteral("query"), query);
|
||||
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit));
|
||||
url_query.addQueryItem(QStringLiteral("fmt"), QStringLiteral("json"));
|
||||
|
||||
QUrl url(kReleaseSearchUrl);
|
||||
url.setQuery(url_query);
|
||||
@ -138,21 +138,21 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("releases")) {
|
||||
if (json_obj.contains("error")) {
|
||||
QString error = json_obj["error"].toString();
|
||||
if (!json_obj.contains(QStringLiteral("releases"))) {
|
||||
if (json_obj.contains(QStringLiteral("error"))) {
|
||||
QString error = json_obj[QStringLiteral("error")].toString();
|
||||
Error(error);
|
||||
}
|
||||
else {
|
||||
Error(QString("Json reply is missing releases."), json_obj);
|
||||
Error(QStringLiteral("Json reply is missing releases."), json_obj);
|
||||
}
|
||||
emit SearchFinished(search_id, results);
|
||||
return;
|
||||
}
|
||||
QJsonValue value_releases = json_obj["releases"];
|
||||
QJsonValue value_releases = json_obj[QStringLiteral("releases")];
|
||||
|
||||
if (!value_releases.isArray()) {
|
||||
Error("Json releases is not an array.", value_releases);
|
||||
Error(QStringLiteral("Json releases is not an array."), value_releases);
|
||||
emit SearchFinished(search_id, results);
|
||||
return;
|
||||
}
|
||||
@ -166,18 +166,18 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
for (const QJsonValueRef value_release : array_releases) {
|
||||
|
||||
if (!value_release.isObject()) {
|
||||
Error("Invalid Json reply, releases array value is not an object.");
|
||||
Error(QStringLiteral("Invalid Json reply, releases array value is not an object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_release = value_release.toObject();
|
||||
if (!obj_release.contains("id") || !obj_release.contains("artist-credit") || !obj_release.contains("title")) {
|
||||
Error("Invalid Json reply, releases array object is missing id, artist-credit or title.", obj_release);
|
||||
if (!obj_release.contains(QStringLiteral("id")) || !obj_release.contains(QStringLiteral("artist-credit")) || !obj_release.contains(QStringLiteral("title"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, releases array object is missing id, artist-credit or title."), obj_release);
|
||||
continue;
|
||||
}
|
||||
|
||||
QJsonValue json_artists = obj_release["artist-credit"];
|
||||
QJsonValue json_artists = obj_release[QStringLiteral("artist-credit")];
|
||||
if (!json_artists.isArray()) {
|
||||
Error("Invalid Json reply, artist-credit is not a array.", json_artists);
|
||||
Error(QStringLiteral("Invalid Json reply, artist-credit is not a array."), json_artists);
|
||||
continue;
|
||||
}
|
||||
QJsonArray array_artists = json_artists.toArray();
|
||||
@ -185,33 +185,33 @@ void MusicbrainzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
QString artist;
|
||||
for (const QJsonValueRef value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) {
|
||||
Error("Invalid Json reply, artist is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, artist is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
|
||||
if (!obj_artist.contains("artist")) {
|
||||
Error("Invalid Json reply, artist is missing.", obj_artist);
|
||||
if (!obj_artist.contains(QStringLiteral("artist"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is missing."), obj_artist);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist2 = obj_artist["artist"];
|
||||
QJsonValue value_artist2 = obj_artist[QStringLiteral("artist")];
|
||||
if (!value_artist2.isObject()) {
|
||||
Error("Invalid Json reply, artist is not an object.", value_artist2);
|
||||
Error(QStringLiteral("Invalid Json reply, artist is not an object."), value_artist2);
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist2 = value_artist2.toObject();
|
||||
|
||||
if (!obj_artist2.contains("name")) {
|
||||
Error("Invalid Json reply, artist is missing name.", value_artist2);
|
||||
if (!obj_artist2.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, artist is missing name."), value_artist2);
|
||||
continue;
|
||||
}
|
||||
artist = obj_artist2["name"].toString();
|
||||
artist = obj_artist2[QStringLiteral("name")].toString();
|
||||
++i;
|
||||
}
|
||||
if (i > 1) artist = "Various artists";
|
||||
if (i > 1) artist = QStringLiteral("Various artists");
|
||||
|
||||
QString id = obj_release["id"].toString();
|
||||
QString album = obj_release["title"].toString();
|
||||
QString id = obj_release[QStringLiteral("id")].toString();
|
||||
QString album = obj_release[QStringLiteral("title")].toString();
|
||||
|
||||
CoverProviderSearchResult cover_result;
|
||||
QUrl url(QString(kAlbumCoverUrl).arg(id));
|
||||
@ -234,7 +234,7 @@ QByteArray MusicbrainzCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
QString failure_reason = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
QString failure_reason = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
Error(failure_reason);
|
||||
}
|
||||
else {
|
||||
@ -245,16 +245,16 @@ 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("error")) {
|
||||
error = json_obj["error"].toString();
|
||||
if (json_obj.contains(QStringLiteral("error"))) {
|
||||
error = json_obj[QStringLiteral("error")].toString();
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "musixmatchcoverprovider.h"
|
||||
|
||||
MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Musixmatch", true, false, 1.0, true, false, app, network, parent) {}
|
||||
: JsonCoverProvider(QStringLiteral("Musixmatch"), true, false, 1.0, true, false, app, network, parent) {}
|
||||
|
||||
MusixmatchCoverProvider::~MusixmatchCoverProvider() {
|
||||
|
||||
@ -65,7 +65,7 @@ bool MusixmatchCoverProvider::StartSearch(const QString &artist, const QString &
|
||||
|
||||
if (artist_stripped.isEmpty() || album_stripped.isEmpty()) return false;
|
||||
|
||||
QUrl url(QString("https://www.musixmatch.com/album/%1/%2").arg(artist_stripped, album_stripped));
|
||||
QUrl url(QStringLiteral("https://www.musixmatch.com/album/%1/%2").arg(artist_stripped, album_stripped));
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
QNetworkReply *reply = network_->get(req);
|
||||
@ -90,25 +90,25 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
CoverProviderSearchResults results;
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
Error(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
Error(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
else if (reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200) {
|
||||
Error(QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()));
|
||||
Error(QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()));
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QByteArray data = reply->readAll();
|
||||
if (data.isEmpty()) {
|
||||
Error("Empty reply received from server.");
|
||||
Error(QStringLiteral("Empty reply received from server."));
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
QString content = data;
|
||||
const QString data_begin = "<script id=\"__NEXT_DATA__\" type=\"application/json\">";
|
||||
const QString data_end = "</script>";
|
||||
const QString data_begin = QStringLiteral("<script id=\"__NEXT_DATA__\" type=\"application/json\">");
|
||||
const QString data_end = QStringLiteral("</script>");
|
||||
if (!content.contains(data_begin) || !content.contains(data_end)) {
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
@ -128,7 +128,7 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
return;
|
||||
}
|
||||
|
||||
if (content_json.contains(QRegularExpression("<[^>]*>"))) { // Make sure it's not HTML code.
|
||||
if (content_json.contains(QRegularExpression(QStringLiteral("<[^>]*>")))) { // Make sure it's not HTML code.
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@ -137,71 +137,71 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(content_json.toUtf8(), &error);
|
||||
|
||||
if (error.error != QJsonParseError::NoError) {
|
||||
Error(QString("Failed to parse json data: %1").arg(error.errorString()));
|
||||
Error(QStringLiteral("Failed to parse json data: %1").arg(error.errorString()));
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
Error("Received empty Json document.", data);
|
||||
Error(QStringLiteral("Received empty Json document."), data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
Error("Json document is not an object.", json_doc);
|
||||
Error(QStringLiteral("Json document is not an object."), json_doc);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject obj_data = json_doc.object();
|
||||
if (obj_data.isEmpty()) {
|
||||
Error("Received empty Json object.", json_doc);
|
||||
Error(QStringLiteral("Received empty Json object."), json_doc);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!obj_data.contains("props") || !obj_data["props"].isObject()) {
|
||||
Error("Json reply is missing props.", obj_data);
|
||||
if (!obj_data.contains(QStringLiteral("props")) || !obj_data[QStringLiteral("props")].isObject()) {
|
||||
Error(QStringLiteral("Json reply is missing props."), obj_data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["props"].toObject();
|
||||
obj_data = obj_data[QStringLiteral("props")].toObject();
|
||||
|
||||
if (!obj_data.contains("pageProps") || !obj_data["pageProps"].isObject()) {
|
||||
Error("Json props is missing pageProps.", obj_data);
|
||||
if (!obj_data.contains(QStringLiteral("pageProps")) || !obj_data[QStringLiteral("pageProps")].isObject()) {
|
||||
Error(QStringLiteral("Json props is missing pageProps."), obj_data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["pageProps"].toObject();
|
||||
obj_data = obj_data[QStringLiteral("pageProps")].toObject();
|
||||
|
||||
if (!obj_data.contains("data") || !obj_data["data"].isObject()) {
|
||||
Error("Json pageProps is missing data.", obj_data);
|
||||
if (!obj_data.contains(QStringLiteral("data")) || !obj_data[QStringLiteral("data")].isObject()) {
|
||||
Error(QStringLiteral("Json pageProps is missing data."), obj_data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["data"].toObject();
|
||||
obj_data = obj_data[QStringLiteral("data")].toObject();
|
||||
|
||||
if (!obj_data.contains("albumGet") || !obj_data["albumGet"].isObject()) {
|
||||
Error("Json data is missing albumGet.", obj_data);
|
||||
if (!obj_data.contains(QStringLiteral("albumGet")) || !obj_data[QStringLiteral("albumGet")].isObject()) {
|
||||
Error(QStringLiteral("Json data is missing albumGet."), obj_data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["albumGet"].toObject();
|
||||
obj_data = obj_data[QStringLiteral("albumGet")].toObject();
|
||||
|
||||
if (!obj_data.contains("data") || !obj_data["data"].isObject()) {
|
||||
Error("Json albumGet reply is missing data.", obj_data);
|
||||
if (!obj_data.contains(QStringLiteral("data")) || !obj_data[QStringLiteral("data")].isObject()) {
|
||||
Error(QStringLiteral("Json albumGet reply is missing data."), obj_data);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
obj_data = obj_data["data"].toObject();
|
||||
obj_data = obj_data[QStringLiteral("data")].toObject();
|
||||
|
||||
CoverProviderSearchResult result;
|
||||
if (obj_data.contains("artistName") && obj_data["artistName"].isString()) {
|
||||
result.artist = obj_data["artistName"].toString();
|
||||
if (obj_data.contains(QStringLiteral("artistName")) && obj_data[QStringLiteral("artistName")].isString()) {
|
||||
result.artist = obj_data[QStringLiteral("artistName")].toString();
|
||||
}
|
||||
if (obj_data.contains("name") && obj_data["name"].isString()) {
|
||||
result.album = obj_data["name"].toString();
|
||||
if (obj_data.contains(QStringLiteral("name")) && obj_data[QStringLiteral("name")].isString()) {
|
||||
result.album = obj_data[QStringLiteral("name")].toString();
|
||||
}
|
||||
|
||||
if (result.artist.compare(artist, Qt::CaseInsensitive) != 0 && result.album.compare(album, Qt::CaseInsensitive) != 0) {
|
||||
@ -209,9 +209,9 @@ void MusixmatchCoverProvider::HandleSearchReply(QNetworkReply *reply, const int
|
||||
return;
|
||||
}
|
||||
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QString("coverImage800x800"), QSize(800, 800))
|
||||
<< qMakePair(QString("coverImage500x500"), QSize(500, 500))
|
||||
<< qMakePair(QString("coverImage350x350"), QSize(350, 350));
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("coverImage800x800"), QSize(800, 800))
|
||||
<< qMakePair(QStringLiteral("coverImage500x500"), QSize(500, 500))
|
||||
<< qMakePair(QStringLiteral("coverImage350x350"), QSize(350, 350));
|
||||
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
if (!obj_data.contains(cover_size.first)) continue;
|
||||
|
@ -57,7 +57,7 @@ constexpr const int kRequestsDelay = 1000;
|
||||
using std::make_shared;
|
||||
|
||||
OpenTidalCoverProvider::OpenTidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("OpenTidal", true, false, 2.5, true, false, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("OpenTidal"), true, false, 2.5, true, false, app, network, parent),
|
||||
login_timer_(new QTimer(this)),
|
||||
timer_flush_requests_(new QTimer(this)),
|
||||
login_in_progress_(false),
|
||||
@ -160,7 +160,7 @@ void OpenTidalCoverProvider::Login() {
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setRawHeader("Authorization", "Basic " + QByteArray(QByteArray::fromBase64(kApiClientIdB64) + ":" + QByteArray::fromBase64(kApiClientSecretB64)).toBase64());
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem("grant_type", "client_credentials");
|
||||
url_query.addQueryItem(QStringLiteral("grant_type"), QStringLiteral("client_credentials"));
|
||||
QNetworkReply *reply = network_->post(req, url_query.toString(QUrl::FullyEncoded).toUtf8());
|
||||
replies_ << reply;
|
||||
QObject::connect(reply, &QNetworkReply::sslErrors, this, &OpenTidalCoverProvider::HandleLoginSSLErrors);
|
||||
@ -192,21 +192,21 @@ void OpenTidalCoverProvider::LoginFinished(QNetworkReply *reply) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("access_token") ||
|
||||
!json_obj.contains("token_type") ||
|
||||
!json_obj.contains("expires_in") ||
|
||||
!json_obj["access_token"].isString() ||
|
||||
!json_obj["token_type"].isString()) {
|
||||
if (!json_obj.contains(QStringLiteral("access_token")) ||
|
||||
!json_obj.contains(QStringLiteral("token_type")) ||
|
||||
!json_obj.contains(QStringLiteral("expires_in")) ||
|
||||
!json_obj[QStringLiteral("access_token")].isString() ||
|
||||
!json_obj[QStringLiteral("token_type")].isString()) {
|
||||
qLog(Error) << "OpenTidal: Invalid login reply.";
|
||||
FinishAllSearches();
|
||||
return;
|
||||
}
|
||||
|
||||
have_login_ = true;
|
||||
token_type_ = json_obj["token_type"].toString();
|
||||
access_token_ = json_obj["access_token"].toString();
|
||||
token_type_ = json_obj[QStringLiteral("token_type")].toString();
|
||||
access_token_ = json_obj[QStringLiteral("access_token")].toString();
|
||||
login_time_ = QDateTime::currentDateTime().toSecsSinceEpoch();
|
||||
expires_in_ = json_obj["expires_in"].toInt();
|
||||
expires_in_ = json_obj[QStringLiteral("expires_in")].toInt();
|
||||
|
||||
QSettings s;
|
||||
s.beginGroup(kSettingsGroup);
|
||||
@ -261,19 +261,19 @@ QJsonObject OpenTidalCoverProvider::GetJsonObject(QNetworkReply *reply) {
|
||||
return QJsonObject();
|
||||
}
|
||||
QJsonObject json_obj = ExtractJsonObj(data);
|
||||
if (json_obj.contains("errors") && json_obj["errors"].isArray()) {
|
||||
QJsonArray array = json_obj["errors"].toArray();
|
||||
if (json_obj.contains(QStringLiteral("errors")) && json_obj[QStringLiteral("errors")].isArray()) {
|
||||
QJsonArray array = json_obj[QStringLiteral("errors")].toArray();
|
||||
for (const QJsonValue &value : array) {
|
||||
if (!value.isObject()) continue;
|
||||
QJsonObject obj = value.toObject();
|
||||
if (!obj.contains("category") ||
|
||||
!obj.contains("code") ||
|
||||
!obj.contains("detail")) {
|
||||
if (!obj.contains(QStringLiteral("category")) ||
|
||||
!obj.contains(QStringLiteral("code")) ||
|
||||
!obj.contains(QStringLiteral("detail"))) {
|
||||
continue;
|
||||
}
|
||||
QString category = obj["category"].toString();
|
||||
QString code = obj["code"].toString();
|
||||
QString detail = obj["detail"].toString();
|
||||
QString category = obj[QStringLiteral("category")].toString();
|
||||
QString code = obj[QStringLiteral("code")].toString();
|
||||
QString detail = obj[QStringLiteral("detail")].toString();
|
||||
qLog(Error) << "OpenTidal:" << category << code << detail;
|
||||
}
|
||||
}
|
||||
@ -302,10 +302,10 @@ void OpenTidalCoverProvider::SendSearchRequest(SearchRequestPtr search_request)
|
||||
}
|
||||
|
||||
QUrlQuery url_query;
|
||||
url_query.addQueryItem("query", QUrl::toPercentEncoding(query));
|
||||
url_query.addQueryItem("limit", QString::number(kLimit));
|
||||
url_query.addQueryItem("countryCode", "US");
|
||||
QUrl url(QString(kApiUrl) + QString("/search"));
|
||||
url_query.addQueryItem(QStringLiteral("query"), QUrl::toPercentEncoding(query));
|
||||
url_query.addQueryItem(QStringLiteral("limit"), QString::number(kLimit));
|
||||
url_query.addQueryItem(QStringLiteral("countryCode"), QStringLiteral("US"));
|
||||
QUrl url(QString(kApiUrl) + QStringLiteral("/search"));
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@ -331,13 +331,13 @@ void OpenTidalCoverProvider::HandleSearchReply(QNetworkReply *reply, SearchReque
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("albums") || !json_obj["albums"].isArray()) {
|
||||
if (!json_obj.contains(QStringLiteral("albums")) || !json_obj[QStringLiteral("albums")].isArray()) {
|
||||
qLog(Debug) << "OpenTidal: Json object is missing albums.";
|
||||
emit SearchFinished(search_request->id, CoverProviderSearchResults());
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonArray array_albums = json_obj["albums"].toArray();
|
||||
QJsonArray array_albums = json_obj[QStringLiteral("albums")].toArray();
|
||||
if (array_albums.isEmpty()) {
|
||||
emit SearchFinished(search_request->id, CoverProviderSearchResults());
|
||||
return;
|
||||
@ -353,55 +353,55 @@ void OpenTidalCoverProvider::HandleSearchReply(QNetworkReply *reply, SearchReque
|
||||
}
|
||||
QJsonObject obj_album = value_album.toObject();
|
||||
|
||||
if (!obj_album.contains("resource") || !obj_album["resource"].isObject()) {
|
||||
if (!obj_album.contains(QStringLiteral("resource")) || !obj_album[QStringLiteral("resource")].isObject()) {
|
||||
qLog(Debug) << "OpenTidal: Invalid Json reply: Albums array album is missing resource object.";
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_resource = obj_album["resource"].toObject();
|
||||
QJsonObject obj_resource = obj_album[QStringLiteral("resource")].toObject();
|
||||
|
||||
if (!obj_resource.contains("artists") || !obj_resource["artists"].isArray()) {
|
||||
if (!obj_resource.contains(QStringLiteral("artists")) || !obj_resource[QStringLiteral("artists")].isArray()) {
|
||||
qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing artists array.";
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!obj_resource.contains("title") || !obj_resource["title"].isString()) {
|
||||
if (!obj_resource.contains(QStringLiteral("title")) || !obj_resource[QStringLiteral("title")].isString()) {
|
||||
qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing title.";
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!obj_resource.contains("imageCover") || !obj_resource["imageCover"].isArray()) {
|
||||
if (!obj_resource.contains(QStringLiteral("imageCover")) || !obj_resource[QStringLiteral("imageCover")].isArray()) {
|
||||
qLog(Debug) << "OpenTidal: Invalid Json reply: Resource is missing imageCover array.";
|
||||
continue;
|
||||
}
|
||||
|
||||
QString artist;
|
||||
const QString album = obj_resource["title"].toString();
|
||||
const QString album = obj_resource[QStringLiteral("title")].toString();
|
||||
|
||||
QJsonArray array_artists = obj_resource["artists"].toArray();
|
||||
QJsonArray array_artists = obj_resource[QStringLiteral("artists")].toArray();
|
||||
for (const QJsonValueRef value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) {
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name")) {
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) {
|
||||
continue;
|
||||
}
|
||||
artist = obj_artist["name"].toString();
|
||||
artist = obj_artist[QStringLiteral("name")].toString();
|
||||
break;
|
||||
}
|
||||
|
||||
QJsonArray array_covers = obj_resource["imageCover"].toArray();
|
||||
QJsonArray array_covers = obj_resource[QStringLiteral("imageCover")].toArray();
|
||||
for (const QJsonValueRef value_cover : array_covers) {
|
||||
if (!value_cover.isObject()) {
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_cover = value_cover.toObject();
|
||||
if (!obj_cover.contains("url") || !obj_cover.contains("width") || !obj_cover.contains("height")) {
|
||||
if (!obj_cover.contains(QStringLiteral("url")) || !obj_cover.contains(QStringLiteral("width")) || !obj_cover.contains(QStringLiteral("height"))) {
|
||||
continue;
|
||||
}
|
||||
const QUrl url(obj_cover["url"].toString());
|
||||
const int width = obj_cover["width"].toInt();
|
||||
const int height = obj_cover["height"].toInt();
|
||||
const QUrl url(obj_cover[QStringLiteral("url")].toString());
|
||||
const int width = obj_cover[QStringLiteral("width")].toInt();
|
||||
const int height = obj_cover[QStringLiteral("height")].toInt();
|
||||
if (!url.isValid()) continue;
|
||||
if (width < 640 || height < 640) continue;
|
||||
CoverProviderSearchResult cover_result;
|
||||
|
@ -49,7 +49,7 @@
|
||||
constexpr int QobuzCoverProvider::kLimit = 10;
|
||||
|
||||
QobuzCoverProvider::QobuzCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Qobuz", true, true, 2.0, true, true, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("Qobuz"), true, true, 2.0, true, true, app, network, parent),
|
||||
service_(app->internet_services()->Service<QobuzService>()) {}
|
||||
|
||||
QobuzCoverProvider::~QobuzCoverProvider() {
|
||||
@ -70,12 +70,12 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
QString resource;
|
||||
QString query = artist;
|
||||
if (album.isEmpty() && !title.isEmpty()) {
|
||||
resource = "track/search";
|
||||
resource = QStringLiteral("track/search");
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(title);
|
||||
}
|
||||
else {
|
||||
resource = "album/search";
|
||||
resource = QStringLiteral("album/search");
|
||||
if (!album.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(album);
|
||||
@ -93,7 +93,7 @@ bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
|
||||
}
|
||||
|
||||
QUrl url(QString(QobuzService::kApiUrl) + QString("/") + resource);
|
||||
QUrl url(QString(QobuzService::kApiUrl) + QStringLiteral("/") + resource);
|
||||
url.setQuery(url_query);
|
||||
|
||||
QNetworkRequest req(url);
|
||||
@ -121,7 +121,7 @@ QByteArray QobuzCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
Error(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
Error(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
}
|
||||
else {
|
||||
// See if there is Json data containing "status", "code" and "message" - then use that instead.
|
||||
@ -131,18 +131,18 @@ 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("status") && json_obj.contains("code") && json_obj.contains("message")) {
|
||||
int code = json_obj["code"].toInt();
|
||||
QString message = json_obj["message"].toString();
|
||||
error = QString("%1 (%2)").arg(message).arg(code);
|
||||
if (!json_obj.isEmpty() && json_obj.contains(QStringLiteral("status")) && json_obj.contains(QStringLiteral("code")) && json_obj.contains(QStringLiteral("message"))) {
|
||||
int code = json_obj[QStringLiteral("code")].toInt();
|
||||
QString message = json_obj[QStringLiteral("message")].toString();
|
||||
error = QStringLiteral("%1 (%2)").arg(message).arg(code);
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
@ -176,34 +176,34 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
}
|
||||
|
||||
QJsonValue value_type;
|
||||
if (json_obj.contains("albums")) {
|
||||
value_type = json_obj["albums"];
|
||||
if (json_obj.contains(QStringLiteral("albums"))) {
|
||||
value_type = json_obj[QStringLiteral("albums")];
|
||||
}
|
||||
else if (json_obj.contains("tracks")) {
|
||||
value_type = json_obj["tracks"];
|
||||
else if (json_obj.contains(QStringLiteral("tracks"))) {
|
||||
value_type = json_obj[QStringLiteral("tracks")];
|
||||
}
|
||||
else {
|
||||
Error("Json reply is missing albums and tracks object.", json_obj);
|
||||
Error(QStringLiteral("Json reply is missing albums and tracks object."), json_obj);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!value_type.isObject()) {
|
||||
Error("Json albums or tracks is not a object.", value_type);
|
||||
Error(QStringLiteral("Json albums or tracks is not a object."), value_type);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
QJsonObject obj_type = value_type.toObject();
|
||||
|
||||
if (!obj_type.contains("items")) {
|
||||
Error("Json albums or tracks object does not contain items.", obj_type);
|
||||
if (!obj_type.contains(QStringLiteral("items"))) {
|
||||
Error(QStringLiteral("Json albums or tracks object does not contain items."), obj_type);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
QJsonValue value_items = obj_type["items"];
|
||||
QJsonValue value_items = obj_type[QStringLiteral("items")];
|
||||
|
||||
if (!value_items.isArray()) {
|
||||
Error("Json albums or track object items is not a array.", value_items);
|
||||
Error(QStringLiteral("Json albums or track object items is not a array."), value_items);
|
||||
emit SearchFinished(id, results);
|
||||
return;
|
||||
}
|
||||
@ -212,55 +212,55 @@ void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
for (const QJsonValueRef value : array_items) {
|
||||
|
||||
if (!value.isObject()) {
|
||||
Error("Invalid Json reply, value in items is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, value in items is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject item_obj = value.toObject();
|
||||
|
||||
QJsonObject obj_album;
|
||||
if (item_obj.contains("album")) {
|
||||
if (!item_obj["album"].isObject()) {
|
||||
Error("Invalid Json reply, items album is not a object.", item_obj);
|
||||
if (item_obj.contains(QStringLiteral("album"))) {
|
||||
if (!item_obj[QStringLiteral("album")].isObject()) {
|
||||
Error(QStringLiteral("Invalid Json reply, items album is not a object."), item_obj);
|
||||
continue;
|
||||
}
|
||||
obj_album = item_obj["album"].toObject();
|
||||
obj_album = item_obj[QStringLiteral("album")].toObject();
|
||||
}
|
||||
else {
|
||||
obj_album = item_obj;
|
||||
}
|
||||
|
||||
if (!obj_album.contains("artist") || !obj_album.contains("image") || !obj_album.contains("title")) {
|
||||
Error("Invalid Json reply, item is missing artist, title or image.", obj_album);
|
||||
if (!obj_album.contains(QStringLiteral("artist")) || !obj_album.contains(QStringLiteral("image")) || !obj_album.contains(QStringLiteral("title"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, item is missing artist, title or image."), obj_album);
|
||||
continue;
|
||||
}
|
||||
|
||||
QString album = obj_album["title"].toString();
|
||||
QString album = obj_album[QStringLiteral("title")].toString();
|
||||
|
||||
// Artist
|
||||
QJsonValue value_artist = obj_album["artist"];
|
||||
QJsonValue value_artist = obj_album[QStringLiteral("artist")];
|
||||
if (!value_artist.isObject()) {
|
||||
Error("Invalid Json reply, items (album) artist is not a object.", value_artist);
|
||||
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("name")) {
|
||||
Error("Invalid Json reply, items (album) artist is missing name.", obj_artist);
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) artist is missing name."), obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"].toString();
|
||||
QString artist = obj_artist[QStringLiteral("name")].toString();
|
||||
|
||||
// Image
|
||||
QJsonValue value_image = obj_album["image"];
|
||||
QJsonValue value_image = obj_album[QStringLiteral("image")];
|
||||
if (!value_image.isObject()) {
|
||||
Error("Invalid Json reply, items (album) image is not a object.", value_image);
|
||||
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("large")) {
|
||||
Error("Invalid Json reply, items (album) image is missing large.", obj_image);
|
||||
if (!obj_image.contains(QStringLiteral("large"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, items (album) image is missing large."), obj_image);
|
||||
continue;
|
||||
}
|
||||
QUrl cover_url(obj_image["large"].toString());
|
||||
QUrl cover_url(obj_image[QStringLiteral("large")].toString());
|
||||
|
||||
CoverProviderSearchResult cover_result;
|
||||
cover_result.artist = artist;
|
||||
|
@ -62,7 +62,7 @@ const char *SpotifyCoverProvider::kApiUrl = "https://api.spotify.com/v1";
|
||||
const int SpotifyCoverProvider::kLimit = 10;
|
||||
|
||||
SpotifyCoverProvider::SpotifyCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Spotify", true, true, 2.5, true, true, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("Spotify"), true, true, 2.5, true, true, app, network, parent),
|
||||
server_(nullptr),
|
||||
expires_in_(0),
|
||||
login_time_(0) {
|
||||
@ -146,7 +146,7 @@ void SpotifyCoverProvider::Authenticate() {
|
||||
|
||||
const bool result = QDesktopServices::openUrl(url);
|
||||
if (!result) {
|
||||
QMessageBox messagebox(QMessageBox::Information, tr("Spotify Authentication"), tr("Please open this URL in your browser") + QString(":<br /><a href=\"%1\">%1</a>").arg(url.toString()), QMessageBox::Ok);
|
||||
QMessageBox messagebox(QMessageBox::Information, tr("Spotify Authentication"), tr("Please open this URL in your browser") + QStringLiteral(":<br /><a href=\"%1\">%1</a>").arg(url.toString()), QMessageBox::Ok);
|
||||
messagebox.setTextFormat(Qt::RichText);
|
||||
messagebox.exec();
|
||||
}
|
||||
@ -180,12 +180,12 @@ void SpotifyCoverProvider::RedirectArrived() {
|
||||
QUrl url = server_->request_url();
|
||||
if (url.isValid()) {
|
||||
QUrlQuery url_query(url);
|
||||
if (url_query.hasQueryItem("error")) {
|
||||
AuthError(QUrlQuery(url).queryItemValue("error"));
|
||||
if (url_query.hasQueryItem(QStringLiteral("error"))) {
|
||||
AuthError(QUrlQuery(url).queryItemValue(QStringLiteral("error")));
|
||||
}
|
||||
else if (url_query.hasQueryItem("code") && url_query.hasQueryItem("state")) {
|
||||
else if (url_query.hasQueryItem(QStringLiteral("code")) && url_query.hasQueryItem(QStringLiteral("state"))) {
|
||||
qLog(Debug) << "Spotify: Authorization URL Received" << url;
|
||||
QString code = url_query.queryItemValue("code");
|
||||
QString code = url_query.queryItemValue(QStringLiteral("code"));
|
||||
QUrl redirect_url(kOAuthRedirectUrl);
|
||||
redirect_url.setPort(server_->url().port());
|
||||
RequestAccessToken(code, redirect_url);
|
||||
@ -237,7 +237,7 @@ void SpotifyCoverProvider::RequestAccessToken(const QString &code, const QUrl &r
|
||||
QNetworkRequest req(new_url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
|
||||
QString auth_header_data = QByteArray::fromBase64(kClientIDB64) + QString(":") + QByteArray::fromBase64(kClientSecretB64);
|
||||
QString auth_header_data = QByteArray::fromBase64(kClientIDB64) + QStringLiteral(":") + QByteArray::fromBase64(kClientSecretB64);
|
||||
req.setRawHeader("Authorization", "Basic " + auth_header_data.toUtf8().toBase64());
|
||||
|
||||
QByteArray query = url_query.toString(QUrl::FullyEncoded).toUtf8();
|
||||
@ -267,7 +267,7 @@ void SpotifyCoverProvider::AccessTokenRequestFinished(QNetworkReply *reply) {
|
||||
if (reply->error() != QNetworkReply::NoError || reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() != 200) {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
AuthError(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
AuthError(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
return;
|
||||
}
|
||||
else {
|
||||
@ -277,18 +277,18 @@ void SpotifyCoverProvider::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("error") && json_obj.contains("error_description")) {
|
||||
QString error = json_obj["error"].toString();
|
||||
QString error_description = json_obj["error_description"].toString();
|
||||
login_errors_ << QString("Authentication failure: %1 (%2)").arg(error, error_description);
|
||||
if (!json_obj.isEmpty() && json_obj.contains(QStringLiteral("error")) && json_obj.contains(QStringLiteral("error_description"))) {
|
||||
QString error = json_obj[QStringLiteral("error")].toString();
|
||||
QString error_description = json_obj[QStringLiteral("error_description")].toString();
|
||||
login_errors_ << QStringLiteral("Authentication failure: %1 (%2)").arg(error, error_description);
|
||||
}
|
||||
}
|
||||
if (login_errors_.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
login_errors_ << QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
login_errors_ << QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
login_errors_ << QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
login_errors_ << QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
AuthError();
|
||||
@ -302,36 +302,36 @@ void SpotifyCoverProvider::AccessTokenRequestFinished(QNetworkReply *reply) {
|
||||
QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error);
|
||||
|
||||
if (json_error.error != QJsonParseError::NoError) {
|
||||
Error(QString("Failed to parse Json data in authentication reply: %1").arg(json_error.errorString()));
|
||||
Error(QStringLiteral("Failed to parse Json data in authentication reply: %1").arg(json_error.errorString()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (json_doc.isEmpty()) {
|
||||
AuthError("Authentication reply from server has empty Json document.");
|
||||
AuthError(QStringLiteral("Authentication reply from server has empty Json document."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_doc.isObject()) {
|
||||
AuthError("Authentication reply from server has Json document that is not an object.", json_doc);
|
||||
AuthError(QStringLiteral("Authentication reply from server has Json document that is not an object."), json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject json_obj = json_doc.object();
|
||||
if (json_obj.isEmpty()) {
|
||||
AuthError("Authentication reply from server has empty Json object.", json_doc);
|
||||
AuthError(QStringLiteral("Authentication reply from server has empty Json object."), json_doc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("access_token") || !json_obj.contains("expires_in")) {
|
||||
AuthError("Authentication reply from server is missing access token or expires in.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("access_token")) || !json_obj.contains(QStringLiteral("expires_in"))) {
|
||||
AuthError(QStringLiteral("Authentication reply from server is missing access token or expires in."), json_obj);
|
||||
return;
|
||||
}
|
||||
|
||||
access_token_ = json_obj["access_token"].toString();
|
||||
if (json_obj.contains("refresh_token")) {
|
||||
refresh_token_ = json_obj["refresh_token"].toString();
|
||||
access_token_ = json_obj[QStringLiteral("access_token")].toString();
|
||||
if (json_obj.contains(QStringLiteral("refresh_token"))) {
|
||||
refresh_token_ = json_obj[QStringLiteral("refresh_token")].toString();
|
||||
}
|
||||
expires_in_ = json_obj["expires_in"].toInt();
|
||||
expires_in_ = json_obj[QStringLiteral("expires_in")].toInt();
|
||||
login_time_ = QDateTime::currentDateTime().toSecsSinceEpoch();
|
||||
|
||||
QSettings s;
|
||||
@ -364,14 +364,14 @@ bool SpotifyCoverProvider::StartSearch(const QString &artist, const QString &alb
|
||||
QString extract;
|
||||
QString query = artist;
|
||||
if (album.isEmpty() && !title.isEmpty()) {
|
||||
type = "track";
|
||||
extract = "tracks";
|
||||
type = QStringLiteral("track");
|
||||
extract = QStringLiteral("tracks");
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(title);
|
||||
}
|
||||
else {
|
||||
type = "album";
|
||||
extract = "albums";
|
||||
type = QStringLiteral("album");
|
||||
extract = QStringLiteral("albums");
|
||||
if (!album.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(album);
|
||||
@ -387,7 +387,7 @@ bool SpotifyCoverProvider::StartSearch(const QString &artist, const QString &alb
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
|
||||
}
|
||||
|
||||
QUrl url(kApiUrl + QString("/search"));
|
||||
QUrl url(kApiUrl + QStringLiteral("/search"));
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@ -414,7 +414,7 @@ QByteArray SpotifyCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
Error(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
Error(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
}
|
||||
else {
|
||||
data = reply->readAll();
|
||||
@ -423,12 +423,12 @@ 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("error") && json_obj["error"].isObject()) {
|
||||
QJsonObject obj_error = json_obj["error"].toObject();
|
||||
if (obj_error.contains("status") && obj_error.contains("message")) {
|
||||
int status = obj_error["status"].toInt();
|
||||
QString message = obj_error["message"].toString();
|
||||
error = QString("%1 (%2)").arg(message).arg(status);
|
||||
if (!json_obj.isEmpty() && json_obj.contains(QStringLiteral("error")) && json_obj[QStringLiteral("error")].isObject()) {
|
||||
QJsonObject obj_error = json_obj[QStringLiteral("error")].toObject();
|
||||
if (obj_error.contains(QStringLiteral("status")) && obj_error.contains(QStringLiteral("message"))) {
|
||||
int status = obj_error[QStringLiteral("status")].toInt();
|
||||
QString message = obj_error[QStringLiteral("message")].toString();
|
||||
error = QStringLiteral("%1 (%2)").arg(message).arg(status);
|
||||
if (status == 401) access_token_.clear();
|
||||
}
|
||||
}
|
||||
@ -436,10 +436,10 @@ QByteArray SpotifyCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
if (reply->error() == 204) access_token_.clear();
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
Error(error);
|
||||
@ -471,19 +471,19 @@ void SpotifyCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id,
|
||||
}
|
||||
|
||||
if (!json_obj.contains(extract) || !json_obj[extract].isObject()) {
|
||||
Error(QString("Json object is missing %1 object.").arg(extract), json_obj);
|
||||
Error(QStringLiteral("Json object is missing %1 object.").arg(extract), json_obj);
|
||||
emit SearchFinished(id, CoverProviderSearchResults());
|
||||
return;
|
||||
}
|
||||
json_obj = json_obj[extract].toObject();
|
||||
|
||||
if (!json_obj.contains("items") || !json_obj["items"].isArray()) {
|
||||
Error(QString("%1 object is missing items array.").arg(extract), json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("items")) || !json_obj[QStringLiteral("items")].isArray()) {
|
||||
Error(QStringLiteral("%1 object is missing items array.").arg(extract), json_obj);
|
||||
emit SearchFinished(id, CoverProviderSearchResults());
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonArray array_items = json_obj["items"].toArray();
|
||||
QJsonArray array_items = json_obj[QStringLiteral("items")].toArray();
|
||||
if (array_items.isEmpty()) {
|
||||
emit SearchFinished(id, CoverProviderSearchResults());
|
||||
return;
|
||||
@ -498,33 +498,33 @@ void SpotifyCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id,
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
|
||||
QJsonObject obj_album = obj_item;
|
||||
if (obj_item.contains("album") && obj_item["album"].isObject()) {
|
||||
obj_album = obj_item["album"].toObject();
|
||||
if (obj_item.contains(QStringLiteral("album")) && obj_item[QStringLiteral("album")].isObject()) {
|
||||
obj_album = obj_item[QStringLiteral("album")].toObject();
|
||||
}
|
||||
|
||||
if (!obj_album.contains("artists") || !obj_album.contains("name") || !obj_album.contains("images") || !obj_album["artists"].isArray() || !obj_album["images"].isArray()) {
|
||||
if (!obj_album.contains(QStringLiteral("artists")) || !obj_album.contains(QStringLiteral("name")) || !obj_album.contains(QStringLiteral("images")) || !obj_album[QStringLiteral("artists")].isArray() || !obj_album[QStringLiteral("images")].isArray()) {
|
||||
continue;
|
||||
}
|
||||
QJsonArray array_artists = obj_album["artists"].toArray();
|
||||
QJsonArray array_images = obj_album["images"].toArray();
|
||||
QString album = obj_album["name"].toString();
|
||||
QJsonArray array_artists = obj_album[QStringLiteral("artists")].toArray();
|
||||
QJsonArray array_images = obj_album[QStringLiteral("images")].toArray();
|
||||
QString album = obj_album[QStringLiteral("name")].toString();
|
||||
|
||||
QStringList artists;
|
||||
for (const QJsonValueRef value_artist : array_artists) {
|
||||
if (!value_artist.isObject()) continue;
|
||||
QJsonObject obj_artist = value_artist.toObject();
|
||||
if (!obj_artist.contains("name")) continue;
|
||||
artists << obj_artist["name"].toString();
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) continue;
|
||||
artists << obj_artist[QStringLiteral("name")].toString();
|
||||
}
|
||||
|
||||
for (const QJsonValueRef value_image : array_images) {
|
||||
if (!value_image.isObject()) continue;
|
||||
QJsonObject obj_image = value_image.toObject();
|
||||
if (!obj_image.contains("url") || !obj_image.contains("width") || !obj_image.contains("height")) continue;
|
||||
int width = obj_image["width"].toInt();
|
||||
int height = obj_image["height"].toInt();
|
||||
if (!obj_image.contains(QStringLiteral("url")) || !obj_image.contains(QStringLiteral("width")) || !obj_image.contains(QStringLiteral("height"))) continue;
|
||||
int width = obj_image[QStringLiteral("width")].toInt();
|
||||
int height = obj_image[QStringLiteral("height")].toInt();
|
||||
if (width < 300 || height < 300) continue;
|
||||
QUrl url(obj_image["url"].toString());
|
||||
QUrl url(obj_image[QStringLiteral("url")].toString());
|
||||
CoverProviderSearchResult result;
|
||||
result.album = album;
|
||||
result.image_url = url;
|
||||
|
@ -48,7 +48,7 @@
|
||||
constexpr int TidalCoverProvider::kLimit = 10;
|
||||
|
||||
TidalCoverProvider::TidalCoverProvider(Application *app, SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: JsonCoverProvider("Tidal", true, true, 2.5, true, true, app, network, parent),
|
||||
: JsonCoverProvider(QStringLiteral("Tidal"), true, true, 2.5, true, true, app, network, parent),
|
||||
service_(app->internet_services()->Service<TidalService>()) {}
|
||||
|
||||
TidalCoverProvider::~TidalCoverProvider() {
|
||||
@ -71,12 +71,12 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
QString resource;
|
||||
QString query = artist;
|
||||
if (album.isEmpty() && !title.isEmpty()) {
|
||||
resource = "search/tracks";
|
||||
resource = QStringLiteral("search/tracks");
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(title);
|
||||
}
|
||||
else {
|
||||
resource = "search/albums";
|
||||
resource = QStringLiteral("search/albums");
|
||||
if (!album.isEmpty()) {
|
||||
if (!query.isEmpty()) query.append(" ");
|
||||
query.append(album);
|
||||
@ -92,7 +92,7 @@ bool TidalCoverProvider::StartSearch(const QString &artist, const QString &album
|
||||
url_query.addQueryItem(QUrl::toPercentEncoding(param.first), QUrl::toPercentEncoding(param.second));
|
||||
}
|
||||
|
||||
QUrl url(QString(TidalService::kApiUrl) + QString("/") + resource);
|
||||
QUrl url(QString(TidalService::kApiUrl) + QStringLiteral("/") + resource);
|
||||
url.setQuery(url_query);
|
||||
QNetworkRequest req(url);
|
||||
req.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy);
|
||||
@ -120,7 +120,7 @@ QByteArray TidalCoverProvider::GetReplyData(QNetworkReply *reply) {
|
||||
else {
|
||||
if (reply->error() != QNetworkReply::NoError && reply->error() < 200) {
|
||||
// This is a network error, there is nothing more to do.
|
||||
Error(QString("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
Error(QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error()));
|
||||
}
|
||||
else {
|
||||
// See if there is Json data containing "status" and "userMessage" - then use that instead.
|
||||
@ -132,19 +132,19 @@ 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("status") && json_obj.contains("userMessage")) {
|
||||
status = json_obj["status"].toInt();
|
||||
sub_status = json_obj["subStatus"].toInt();
|
||||
QString user_message = json_obj["userMessage"].toString();
|
||||
error = QString("%1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status);
|
||||
if (!json_obj.isEmpty() && json_obj.contains(QStringLiteral("status")) && json_obj.contains(QStringLiteral("userMessage"))) {
|
||||
status = json_obj[QStringLiteral("status")].toInt();
|
||||
sub_status = json_obj[QStringLiteral("subStatus")].toInt();
|
||||
QString user_message = json_obj[QStringLiteral("userMessage")].toString();
|
||||
error = QStringLiteral("%1 (%2) (%3)").arg(user_message).arg(status).arg(sub_status);
|
||||
}
|
||||
}
|
||||
if (error.isEmpty()) {
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
error = QString("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
error = QStringLiteral("%1 (%2)").arg(reply->errorString()).arg(reply->error());
|
||||
}
|
||||
else {
|
||||
error = QString("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
error = QStringLiteral("Received HTTP code %1").arg(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
|
||||
}
|
||||
}
|
||||
if (status == 401 && sub_status == 6001) { // User does not have a valid session
|
||||
@ -178,12 +178,12 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!json_obj.contains("items")) {
|
||||
Error("Json object is missing items.", json_obj);
|
||||
if (!json_obj.contains(QStringLiteral("items"))) {
|
||||
Error(QStringLiteral("Json object is missing items."), json_obj);
|
||||
emit SearchFinished(id, CoverProviderSearchResults());
|
||||
return;
|
||||
}
|
||||
QJsonValue value_items = json_obj["items"];
|
||||
QJsonValue value_items = json_obj[QStringLiteral("items")];
|
||||
|
||||
if (!value_items.isArray()) {
|
||||
emit SearchFinished(id, CoverProviderSearchResults());
|
||||
@ -200,35 +200,35 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
for (const QJsonValueRef value_item : array_items) {
|
||||
|
||||
if (!value_item.isObject()) {
|
||||
Error("Invalid Json reply, items array item is not a object.");
|
||||
Error(QStringLiteral("Invalid Json reply, items array item is not a object."));
|
||||
continue;
|
||||
}
|
||||
QJsonObject obj_item = value_item.toObject();
|
||||
|
||||
if (!obj_item.contains("artist")) {
|
||||
Error("Invalid Json reply, items array item is missing artist.", obj_item);
|
||||
if (!obj_item.contains(QStringLiteral("artist"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item is missing artist."), obj_item);
|
||||
continue;
|
||||
}
|
||||
QJsonValue value_artist = obj_item["artist"];
|
||||
QJsonValue value_artist = obj_item[QStringLiteral("artist")];
|
||||
if (!value_artist.isObject()) {
|
||||
Error("Invalid Json reply, items array item artist is not a object.", value_artist);
|
||||
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("name")) {
|
||||
Error("Invalid Json reply, items array item artist is missing name.", obj_artist);
|
||||
if (!obj_artist.contains(QStringLiteral("name"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item artist is missing name."), obj_artist);
|
||||
continue;
|
||||
}
|
||||
QString artist = obj_artist["name"].toString();
|
||||
QString artist = obj_artist[QStringLiteral("name")].toString();
|
||||
|
||||
QJsonObject obj_album;
|
||||
if (obj_item.contains("album")) {
|
||||
QJsonValue value_album = obj_item["album"];
|
||||
if (obj_item.contains(QStringLiteral("album"))) {
|
||||
QJsonValue value_album = obj_item[QStringLiteral("album")];
|
||||
if (value_album.isObject()) {
|
||||
obj_album = value_album.toObject();
|
||||
}
|
||||
else {
|
||||
Error("Invalid Json reply, items array item album is not a object.", value_album);
|
||||
Error(QStringLiteral("Invalid Json reply, items array item album is not a object."), value_album);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -236,23 +236,23 @@ void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) {
|
||||
obj_album = obj_item;
|
||||
}
|
||||
|
||||
if (!obj_album.contains("title") || !obj_album.contains("cover")) {
|
||||
Error("Invalid Json reply, items array item album is missing title or cover.", obj_album);
|
||||
if (!obj_album.contains(QStringLiteral("title")) || !obj_album.contains(QStringLiteral("cover"))) {
|
||||
Error(QStringLiteral("Invalid Json reply, items array item album is missing title or cover."), obj_album);
|
||||
continue;
|
||||
}
|
||||
QString album = obj_album["title"].toString();
|
||||
QString cover = obj_album["cover"].toString().replace("-", "/");
|
||||
QString album = obj_album[QStringLiteral("title")].toString();
|
||||
QString cover = obj_album[QStringLiteral("cover")].toString().replace(QLatin1String("-"), QLatin1String("/"));
|
||||
|
||||
CoverProviderSearchResult cover_result;
|
||||
cover_result.artist = artist;
|
||||
cover_result.album = Song::AlbumRemoveDiscMisc(album);
|
||||
cover_result.number = ++i;
|
||||
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QString("1280x1280"), QSize(1280, 1280))
|
||||
<< qMakePair(QString("750x750"), QSize(750, 750))
|
||||
<< qMakePair(QString("640x640"), QSize(640, 640));
|
||||
QList<QPair<QString, QSize>> cover_sizes = QList<QPair<QString, QSize>>() << qMakePair(QStringLiteral("1280x1280"), QSize(1280, 1280))
|
||||
<< qMakePair(QStringLiteral("750x750"), QSize(750, 750))
|
||||
<< qMakePair(QStringLiteral("640x640"), QSize(640, 640));
|
||||
for (const QPair<QString, QSize> &cover_size : cover_sizes) {
|
||||
QUrl cover_url(QString("%1/images/%2/%3.jpg").arg(TidalService::kResourcesUrl, cover, cover_size.first));
|
||||
QUrl cover_url(QStringLiteral("%1/images/%2/%3.jpg").arg(TidalService::kResourcesUrl, cover, cover_size.first));
|
||||
cover_result.image_url = cover_url;
|
||||
cover_result.image_size = cover_size.second;
|
||||
results << cover_result;
|
||||
|
@ -54,7 +54,7 @@ class CddaDevice : public ConnectedDevice {
|
||||
bool CopyToStorage(const CopyJob&, QString&) override { return false; }
|
||||
bool DeleteFromStorage(const MusicStorage::DeleteJob&) override { return false; }
|
||||
|
||||
static QStringList url_schemes() { return QStringList() << "cdda"; }
|
||||
static QStringList url_schemes() { return QStringList() << QStringLiteral("cdda"); }
|
||||
|
||||
signals:
|
||||
void SongsDiscovered(const SongList &songs);
|
||||
|
@ -41,7 +41,7 @@ QStringList CddaLister::DeviceUniqueIDs() { return devices_list_; }
|
||||
|
||||
QVariantList CddaLister::DeviceIcons(const QString &) {
|
||||
QVariantList icons;
|
||||
icons << QString("media-optical");
|
||||
icons << QStringLiteral("media-optical");
|
||||
return icons;
|
||||
}
|
||||
|
||||
@ -88,7 +88,7 @@ QString CddaLister::MakeFriendlyName(const QString &id) {
|
||||
return QString(cd_info.psz_model);
|
||||
}
|
||||
cdio_destroy(cdio);
|
||||
return QString("CD (") + id + ")";
|
||||
return QStringLiteral("CD (") + id + ")";
|
||||
|
||||
}
|
||||
|
||||
|
@ -61,10 +61,10 @@ CddaSongLoader::~CddaSongLoader() {
|
||||
QUrl CddaSongLoader::GetUrlFromTrack(int track_number) const {
|
||||
|
||||
if (url_.isEmpty()) {
|
||||
return QUrl(QString("cdda://%1a").arg(track_number));
|
||||
return QUrl(QStringLiteral("cdda://%1a").arg(track_number));
|
||||
}
|
||||
else {
|
||||
return QUrl(QString("cdda://%1/%2").arg(url_.path()).arg(track_number));
|
||||
return QUrl(QStringLiteral("cdda://%1/%2").arg(url_.path()).arg(track_number));
|
||||
}
|
||||
|
||||
}
|
||||
@ -74,7 +74,7 @@ void CddaSongLoader::LoadSongs() {
|
||||
QMutexLocker locker(&mutex_load_);
|
||||
cdio_ = cdio_open(url_.path().toLocal8Bit().constData(), DRIVER_DEVICE);
|
||||
if (cdio_ == nullptr) {
|
||||
Error("Unable to open CDIO device.");
|
||||
Error(QStringLiteral("Unable to open CDIO device."));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ void CddaSongLoader::LoadSongs() {
|
||||
GError *error = nullptr;
|
||||
cdda_ = gst_element_make_from_uri(GST_URI_SRC, "cdda://", nullptr, &error);
|
||||
if (error) {
|
||||
Error(QString("%1: %2").arg(error->code).arg(error->message));
|
||||
Error(QStringLiteral("%1: %2").arg(error->code).arg(error->message));
|
||||
}
|
||||
if (!cdda_) return;
|
||||
|
||||
@ -140,7 +140,7 @@ void CddaSongLoader::LoadSongs() {
|
||||
song.set_valid(true);
|
||||
song.set_filetype(Song::FileType::CDDA);
|
||||
song.set_url(GetUrlFromTrack(track_number));
|
||||
song.set_title(QString("Track %1").arg(track_number));
|
||||
song.set_title(QStringLiteral("Track %1").arg(track_number));
|
||||
song.set_track(track_number);
|
||||
songs << song;
|
||||
}
|
||||
|
@ -67,10 +67,10 @@ ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QS
|
||||
backend_->Init(app_->database(),
|
||||
app_->task_manager(),
|
||||
Song::Source::Device,
|
||||
QString("device_%1_songs").arg(database_id),
|
||||
QString("device_%1_fts").arg(database_id),
|
||||
QString("device_%1_directories").arg(database_id),
|
||||
QString("device_%1_subdirectories").arg(database_id));
|
||||
QStringLiteral("device_%1_songs").arg(database_id),
|
||||
QStringLiteral("device_%1_fts").arg(database_id),
|
||||
QStringLiteral("device_%1_directories").arg(database_id),
|
||||
QStringLiteral("device_%1_subdirectories").arg(database_id));
|
||||
|
||||
// Create the model
|
||||
model_ = new CollectionModel(backend_, app_, this);
|
||||
|
@ -80,7 +80,7 @@ DeviceDatabaseBackend::DeviceList DeviceDatabaseBackend::GetAllDevices() {
|
||||
QMutexLocker l(db_->Mutex());
|
||||
QSqlDatabase db(db_->Connect());
|
||||
SqlQuery q(db);
|
||||
q.prepare("SELECT ROWID, unique_id, friendly_name, size, icon, schema_version, transcode_mode, transcode_format FROM devices");
|
||||
q.prepare(QStringLiteral("SELECT ROWID, unique_id, friendly_name, size, icon, schema_version, transcode_mode, transcode_format FROM devices"));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return ret;
|
||||
@ -124,13 +124,13 @@ int DeviceDatabaseBackend::AddDevice(const Device &device) {
|
||||
|
||||
// Insert the device into the devices table
|
||||
SqlQuery q(db);
|
||||
q.prepare("INSERT INTO devices (unique_id, friendly_name, size, icon, transcode_mode, transcode_format) VALUES (:unique_id, :friendly_name, :size, :icon, :transcode_mode, :transcode_format)");
|
||||
q.BindValue(":unique_id", device.unique_id_);
|
||||
q.BindValue(":friendly_name", device.friendly_name_);
|
||||
q.BindValue(":size", device.size_);
|
||||
q.BindValue(":icon", device.icon_name_);
|
||||
q.BindValue(":transcode_mode", static_cast<int>(device.transcode_mode_));
|
||||
q.BindValue(":transcode_format", static_cast<int>(device.transcode_format_));
|
||||
q.prepare(QStringLiteral("INSERT INTO devices (unique_id, friendly_name, size, icon, transcode_mode, transcode_format) VALUES (:unique_id, :friendly_name, :size, :icon, :transcode_mode, :transcode_format)"));
|
||||
q.BindValue(QStringLiteral(":unique_id"), device.unique_id_);
|
||||
q.BindValue(QStringLiteral(":friendly_name"), device.friendly_name_);
|
||||
q.BindValue(QStringLiteral(":size"), device.size_);
|
||||
q.BindValue(QStringLiteral(":icon"), device.icon_name_);
|
||||
q.BindValue(QStringLiteral(":transcode_mode"), static_cast<int>(device.transcode_mode_));
|
||||
q.BindValue(QStringLiteral(":transcode_format"), static_cast<int>(device.transcode_format_));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return -1;
|
||||
@ -138,13 +138,13 @@ int DeviceDatabaseBackend::AddDevice(const Device &device) {
|
||||
int id = q.lastInsertId().toInt();
|
||||
|
||||
// Create the songs tables for the device
|
||||
QString filename(":/schema/device-schema.sql");
|
||||
QString filename(QStringLiteral(":/schema/device-schema.sql"));
|
||||
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("%deviceid", QString::number(id));
|
||||
schema.replace(QLatin1String("%deviceid"), QString::number(id));
|
||||
|
||||
db_->ExecSchemaCommands(db, schema, 0, true);
|
||||
|
||||
@ -164,8 +164,8 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
|
||||
// Remove the device from the devices table
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare("DELETE FROM devices WHERE ROWID=:id");
|
||||
q.BindValue(":id", id);
|
||||
q.prepare(QStringLiteral("DELETE FROM devices WHERE ROWID=:id"));
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -175,7 +175,7 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
|
||||
// Remove the songs tables for the device
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DROP TABLE device_%1_songs").arg(id));
|
||||
q.prepare(QStringLiteral("DROP TABLE device_%1_songs").arg(id));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -184,7 +184,7 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DROP TABLE device_%1_fts").arg(id));
|
||||
q.prepare(QStringLiteral("DROP TABLE device_%1_fts").arg(id));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -193,7 +193,7 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DROP TABLE device_%1_directories").arg(id));
|
||||
q.prepare(QStringLiteral("DROP TABLE device_%1_directories").arg(id));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -202,7 +202,7 @@ void DeviceDatabaseBackend::RemoveDevice(const int id) {
|
||||
|
||||
{
|
||||
SqlQuery q(db);
|
||||
q.prepare(QString("DROP TABLE device_%1_subdirectories").arg(id));
|
||||
q.prepare(QStringLiteral("DROP TABLE device_%1_subdirectories").arg(id));
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
return;
|
||||
@ -226,11 +226,11 @@ void DeviceDatabaseBackend::SetDeviceOptions(const int id, const QString &friend
|
||||
" transcode_mode=:transcode_mode,"
|
||||
" transcode_format=:transcode_format"
|
||||
" WHERE ROWID=:id");
|
||||
q.BindValue(":friendly_name", friendly_name);
|
||||
q.BindValue(":icon_name", icon_name);
|
||||
q.BindValue(":transcode_mode", static_cast<int>(mode));
|
||||
q.BindValue(":transcode_format", static_cast<int>(format));
|
||||
q.BindValue(":id", id);
|
||||
q.BindValue(QStringLiteral(":friendly_name"), friendly_name);
|
||||
q.BindValue(QStringLiteral(":icon_name"), icon_name);
|
||||
q.BindValue(QStringLiteral(":transcode_mode"), static_cast<int>(mode));
|
||||
q.BindValue(QStringLiteral(":transcode_format"), static_cast<int>(format));
|
||||
q.BindValue(QStringLiteral(":id"), id);
|
||||
if (!q.Exec()) {
|
||||
db_->ReportErrors(q);
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ DeviceDatabaseBackend::Device DeviceInfo::SaveToDb() const {
|
||||
for (const Backend &backend : backends_) {
|
||||
unique_ids << backend.unique_id_;
|
||||
}
|
||||
ret.unique_id_ = unique_ids.join(",");
|
||||
ret.unique_id_ = unique_ids.join(QStringLiteral(","));
|
||||
|
||||
return ret;
|
||||
|
||||
@ -90,7 +90,7 @@ const DeviceInfo::Backend *DeviceInfo::BestBackend() const {
|
||||
|
||||
void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) {
|
||||
|
||||
icon_name_ = "device";
|
||||
icon_name_ = QStringLiteral("device");
|
||||
|
||||
if (icons.isEmpty()) {
|
||||
icon_ = IconLoader::Load(icon_name_);
|
||||
@ -121,10 +121,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("phone")) icon_name_ = "device-phone";
|
||||
else if (hint.contains("ipod") || hint.contains("apple")) icon_name_ = "device-ipod";
|
||||
else if ((hint.contains("usb")) && (hint.contains("reader"))) icon_name_ = "device-usb-flash";
|
||||
else if (hint.contains("usb")) icon_name_ = "device-usb-drive";
|
||||
if (hint.contains(QLatin1String("phone"))) icon_name_ = QStringLiteral("device-phone");
|
||||
else if (hint.contains(QLatin1String("ipod")) || hint.contains(QLatin1String("apple"))) icon_name_ = QStringLiteral("device-ipod");
|
||||
else if ((hint.contains(QLatin1String("usb"))) && (hint.contains(QLatin1String("reader")))) icon_name_ = QStringLiteral("device-usb-flash");
|
||||
else if (hint.contains(QLatin1String("usb"))) icon_name_ = QStringLiteral("device-usb-drive");
|
||||
icon_ = IconLoader::Load(icon_name_);
|
||||
if (!icon_.isNull()) {
|
||||
return;
|
||||
@ -133,7 +133,7 @@ void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) {
|
||||
}
|
||||
}
|
||||
|
||||
icon_name_ = "device";
|
||||
icon_name_ = QStringLiteral("device");
|
||||
icon_ = IconLoader::Load(icon_name_);
|
||||
|
||||
}
|
||||
|
@ -110,48 +110,48 @@ QString GetIpodColour(Itdb_IpodModel model) {
|
||||
case ITDB_IPOD_MODEL_MINI_GREEN:
|
||||
case ITDB_IPOD_MODEL_NANO_GREEN:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_GREEN:
|
||||
return "green";
|
||||
return QStringLiteral("green");
|
||||
|
||||
case ITDB_IPOD_MODEL_MINI_BLUE:
|
||||
case ITDB_IPOD_MODEL_NANO_BLUE:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_BLUE:
|
||||
return "blue";
|
||||
return QStringLiteral("blue");
|
||||
|
||||
case ITDB_IPOD_MODEL_MINI_PINK:
|
||||
case ITDB_IPOD_MODEL_NANO_PINK:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_PINK:
|
||||
return "pink";
|
||||
return QStringLiteral("pink");
|
||||
|
||||
case ITDB_IPOD_MODEL_MINI_GOLD:
|
||||
return "gold";
|
||||
return QStringLiteral("gold");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_WHITE:
|
||||
case ITDB_IPOD_MODEL_VIDEO_WHITE:
|
||||
return "white";
|
||||
return QStringLiteral("white");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_SILVER:
|
||||
case ITDB_IPOD_MODEL_CLASSIC_SILVER:
|
||||
return "silver";
|
||||
return QStringLiteral("silver");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_RED:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_RED:
|
||||
return "red";
|
||||
return QStringLiteral("red");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_YELLOW:
|
||||
return "yellow";
|
||||
return QStringLiteral("yellow");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_PURPLE:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_PURPLE:
|
||||
return "purple";
|
||||
return QStringLiteral("purple");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_ORANGE:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_ORANGE:
|
||||
return "orange";
|
||||
return QStringLiteral("orange");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_BLACK:
|
||||
case ITDB_IPOD_MODEL_VIDEO_BLACK:
|
||||
case ITDB_IPOD_MODEL_CLASSIC_BLACK:
|
||||
return "black";
|
||||
return QStringLiteral("black");
|
||||
|
||||
default:
|
||||
return QString();
|
||||
@ -167,7 +167,7 @@ QString GetIpodModel(Itdb_IpodModel model) {
|
||||
case ITDB_IPOD_MODEL_MINI_PINK:
|
||||
case ITDB_IPOD_MODEL_MINI_GREEN:
|
||||
case ITDB_IPOD_MODEL_MINI_GOLD:
|
||||
return "mini";
|
||||
return QStringLiteral("mini");
|
||||
|
||||
case ITDB_IPOD_MODEL_NANO_WHITE:
|
||||
case ITDB_IPOD_MODEL_NANO_BLACK:
|
||||
@ -179,7 +179,7 @@ QString GetIpodModel(Itdb_IpodModel model) {
|
||||
case ITDB_IPOD_MODEL_NANO_YELLOW:
|
||||
case ITDB_IPOD_MODEL_NANO_PURPLE:
|
||||
case ITDB_IPOD_MODEL_NANO_ORANGE:
|
||||
return "nano";
|
||||
return QStringLiteral("nano");
|
||||
|
||||
case ITDB_IPOD_MODEL_SHUFFLE:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_SILVER:
|
||||
@ -188,17 +188,17 @@ QString GetIpodModel(Itdb_IpodModel model) {
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_GREEN:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_ORANGE:
|
||||
case ITDB_IPOD_MODEL_SHUFFLE_RED:
|
||||
return "shuffle";
|
||||
return QStringLiteral("shuffle");
|
||||
|
||||
case ITDB_IPOD_MODEL_COLOR:
|
||||
case ITDB_IPOD_MODEL_REGULAR:
|
||||
case ITDB_IPOD_MODEL_CLASSIC_SILVER:
|
||||
case ITDB_IPOD_MODEL_CLASSIC_BLACK:
|
||||
return "standard";
|
||||
return QStringLiteral("standard");
|
||||
|
||||
case ITDB_IPOD_MODEL_COLOR_U2:
|
||||
case ITDB_IPOD_MODEL_REGULAR_U2:
|
||||
return "U2";
|
||||
return QStringLiteral("U2");
|
||||
|
||||
default:
|
||||
return QString();
|
||||
@ -213,7 +213,7 @@ QUrl DeviceLister::MakeUrlFromLocalPath(const QString &path) const {
|
||||
|
||||
if (IsIpod(path)) {
|
||||
QUrl ret;
|
||||
ret.setScheme("ipod");
|
||||
ret.setScheme(QStringLiteral("ipod"));
|
||||
ret.setPath(QDir::fromNativeSeparators(path));
|
||||
return ret;
|
||||
}
|
||||
@ -246,10 +246,10 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) {
|
||||
QString colour = GetIpodColour(info->ipod_model);
|
||||
|
||||
if (!model.isEmpty()) {
|
||||
QString model_icon = QString("multimedia-player-ipod-%1").arg(model);
|
||||
QString model_icon = QStringLiteral("multimedia-player-ipod-%1").arg(model);
|
||||
if (QFile(model_icon).exists()) ret << model_icon;
|
||||
if (!colour.isEmpty()) {
|
||||
QString colour_icon = QString("multimedia-player-ipod-%1-%2").arg(model, colour);
|
||||
QString colour_icon = QStringLiteral("multimedia-player-ipod-%1-%2").arg(model, colour);
|
||||
if (QFile(colour_icon).exists()) ret << colour_icon;
|
||||
}
|
||||
}
|
||||
@ -274,7 +274,7 @@ QVariantList DeviceLister::GuessIconForPath(const QString &path) {
|
||||
QVariantList DeviceLister::GuessIconForModel(const QString &vendor, const QString &model) {
|
||||
|
||||
QVariantList ret;
|
||||
if (vendor.startsWith("Google") && model.contains("Nexus")) {
|
||||
if (vendor.startsWith(QLatin1String("Google")) && model.contains(QLatin1String("Nexus"))) {
|
||||
ret << "phone-google-nexus-one";
|
||||
}
|
||||
return ret;
|
||||
|
@ -91,7 +91,7 @@ const int DeviceManager::kDeviceIconOverlaySize = 16;
|
||||
DeviceManager::DeviceManager(Application *app, QObject *parent)
|
||||
: SimpleTreeModel<DeviceInfo>(new DeviceInfo(this), parent),
|
||||
app_(app),
|
||||
not_connected_overlay_(IconLoader::Load("edit-delete")) {
|
||||
not_connected_overlay_(IconLoader::Load(QStringLiteral("edit-delete"))) {
|
||||
|
||||
thread_pool_.setMaxThreadCount(1);
|
||||
QObject::connect(&*app_->task_manager(), &TaskManager::TasksChanged, this, &DeviceManager::TasksChanged);
|
||||
@ -289,7 +289,7 @@ QVariant DeviceManager::data(const QModelIndex &idx, int role) const {
|
||||
}
|
||||
|
||||
if (info->size_ > 0) {
|
||||
text = text + QString(" (%1)").arg(Utilities::PrettySize(info->size_));
|
||||
text = text + QStringLiteral(" (%1)").arg(Utilities::PrettySize(info->size_));
|
||||
}
|
||||
if (info->device_) info->device_->Refresh();
|
||||
return text;
|
||||
@ -629,7 +629,7 @@ SharedPtr<ConnectedDevice> DeviceManager::Connect(DeviceInfo *info) {
|
||||
url_strings << url.toString();
|
||||
}
|
||||
|
||||
app_->AddError(tr("This type of device is not supported: %1").arg(url_strings.join(", ")));
|
||||
app_->AddError(tr("This type of device is not supported: %1").arg(url_strings.join(QStringLiteral(", "))));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -89,13 +89,13 @@ void DeviceProperties::ShowDevice(const QModelIndex &idx) {
|
||||
if (ui_->icon->count() == 0) {
|
||||
// Only load the icons the first time the dialog is shown
|
||||
QStringList icon_names = QStringList()
|
||||
<< "device"
|
||||
<< "device-usb-drive"
|
||||
<< "device-usb-flash"
|
||||
<< "media-optical"
|
||||
<< "device-ipod"
|
||||
<< "device-ipod-nano"
|
||||
<< "device-phone";
|
||||
<< QStringLiteral("device")
|
||||
<< QStringLiteral("device-usb-drive")
|
||||
<< QStringLiteral("device-usb-flash")
|
||||
<< QStringLiteral("media-optical")
|
||||
<< QStringLiteral("device-ipod")
|
||||
<< QStringLiteral("device-ipod-nano")
|
||||
<< QStringLiteral("device-phone");
|
||||
|
||||
|
||||
for (const QString &icon_name : icon_names) {
|
||||
|
@ -143,7 +143,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 ? "" : "s");
|
||||
status_text = tr("%1 song%2").arg(count).arg(count == 1 ? QLatin1String("") : QLatin1String("s"));
|
||||
}
|
||||
else {
|
||||
status_text = idx.data(DeviceManager::Role_MountPath).toString();
|
||||
@ -235,19 +235,19 @@ void DeviceView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
collection_menu_ = new QMenu(this);
|
||||
|
||||
// Device menu
|
||||
eject_action_ = device_menu_->addAction(IconLoader::Load("media-eject"), tr("Safely remove device"), this, &DeviceView::Unmount);
|
||||
forget_action_ = device_menu_->addAction(IconLoader::Load("list-remove"), tr("Forget device"), this, &DeviceView::Forget);
|
||||
eject_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("media-eject")), tr("Safely remove device"), this, &DeviceView::Unmount);
|
||||
forget_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("list-remove")), tr("Forget device"), this, &DeviceView::Forget);
|
||||
device_menu_->addSeparator();
|
||||
properties_action_ = device_menu_->addAction(IconLoader::Load("configure"), tr("Device properties..."), this, &DeviceView::Properties);
|
||||
properties_action_ = device_menu_->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Device properties..."), this, &DeviceView::Properties);
|
||||
|
||||
// Collection menu
|
||||
add_to_playlist_action_ = collection_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Append to current playlist"), this, &DeviceView::AddToPlaylist);
|
||||
load_action_ = collection_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Replace current playlist"), this, &DeviceView::Load);
|
||||
open_in_new_playlist_ = collection_menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), this, &DeviceView::OpenInNewPlaylist);
|
||||
add_to_playlist_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &DeviceView::AddToPlaylist);
|
||||
load_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &DeviceView::Load);
|
||||
open_in_new_playlist_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &DeviceView::OpenInNewPlaylist);
|
||||
|
||||
collection_menu_->addSeparator();
|
||||
organize_action_ = collection_menu_->addAction(IconLoader::Load("edit-copy"), tr("Copy to collection..."), this, &DeviceView::Organize);
|
||||
delete_action_ = collection_menu_->addAction(IconLoader::Load("edit-delete"), tr("Delete from device..."), this, &DeviceView::Delete);
|
||||
organize_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("edit-copy")), tr("Copy to collection..."), this, &DeviceView::Organize);
|
||||
delete_action_ = collection_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Delete from device..."), this, &DeviceView::Delete);
|
||||
}
|
||||
|
||||
menu_index_ = currentIndex();
|
||||
|
@ -52,7 +52,7 @@ class FilesystemDevice : public ConnectedDevice, public virtual FilesystemMusicS
|
||||
bool Init() override;
|
||||
void CloseAsync();
|
||||
|
||||
static QStringList url_schemes() { return QStringList() << "file"; }
|
||||
static QStringList url_schemes() { return QStringList() << QStringLiteral("file"); }
|
||||
|
||||
private slots:
|
||||
void Close() override;
|
||||
|
@ -51,10 +51,10 @@ QString GioLister::DeviceInfo::unique_id() const {
|
||||
if (!volume_root_uri.isEmpty()) return volume_root_uri;
|
||||
|
||||
if (mount_ptr) {
|
||||
return QString("Gio/%1/%2/%3").arg(mount_uuid, filesystem_type).arg(filesystem_size);
|
||||
return QStringLiteral("Gio/%1/%2/%3").arg(mount_uuid, filesystem_type).arg(filesystem_size);
|
||||
}
|
||||
else {
|
||||
return QString("Gio/unmounted/%1").arg(reinterpret_cast<qulonglong>(volume_ptr.get()));
|
||||
return QStringLiteral("Gio/unmounted/%1").arg(reinterpret_cast<qulonglong>(volume_ptr.get()));
|
||||
}
|
||||
|
||||
}
|
||||
@ -225,11 +225,11 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
|
||||
for (QString uri : uris) {
|
||||
|
||||
// gphoto2 gives invalid hostnames with []:, characters in
|
||||
uri.replace(QRegularExpression("//\\[usb:(\\d+),(\\d+)\\]"), "//usb-\\1-\\2");
|
||||
uri.replace(QRegularExpression(QStringLiteral("//\\[usb:(\\d+),(\\d+)\\]")), QStringLiteral("//usb-\\1-\\2"));
|
||||
|
||||
QUrl url;
|
||||
|
||||
if (uri.contains(QRegularExpression("..+:.*"))) {
|
||||
if (uri.contains(QRegularExpression(QStringLiteral("..+:.*")))) {
|
||||
url = QUrl::fromEncoded(uri.toUtf8());
|
||||
}
|
||||
else {
|
||||
@ -240,15 +240,15 @@ QList<QUrl> GioLister::MakeDeviceUrls(const QString &id) {
|
||||
|
||||
// Special case for file:// GIO URIs - we have to check whether they point to an ipod.
|
||||
if (url.isLocalFile() && IsIpod(url.path())) {
|
||||
url.setScheme("ipod");
|
||||
url.setScheme(QStringLiteral("ipod"));
|
||||
}
|
||||
|
||||
QRegularExpression device_re("usb/(\\d+)/(\\d+)");
|
||||
QRegularExpression device_re(QStringLiteral("usb/(\\d+)/(\\d+)"));
|
||||
QRegularExpressionMatch re_match = device_re.match(unix_device);
|
||||
if (re_match.hasMatch()) {
|
||||
QUrlQuery url_query(url);
|
||||
url_query.addQueryItem("busnum", re_match.captured(1));
|
||||
url_query.addQueryItem("devnum", re_match.captured(2));
|
||||
url_query.addQueryItem(QStringLiteral("busnum"), re_match.captured(1));
|
||||
url_query.addQueryItem(QStringLiteral("devnum"), re_match.captured(2));
|
||||
url.setQuery(url_query);
|
||||
}
|
||||
|
||||
@ -292,12 +292,12 @@ void GioLister::VolumeAdded(GVolume *volume) {
|
||||
|
||||
DeviceInfo info;
|
||||
info.ReadVolumeInfo(volume);
|
||||
if (info.volume_root_uri.startsWith("afc://") || info.volume_root_uri.startsWith("gphoto2://")) {
|
||||
if (info.volume_root_uri.startsWith(QLatin1String("afc://")) || info.volume_root_uri.startsWith(QLatin1String("gphoto2://"))) {
|
||||
// Handled by iLister.
|
||||
return;
|
||||
}
|
||||
#ifdef HAVE_AUDIOCD
|
||||
if (info.volume_root_uri.startsWith("cdda")) {
|
||||
if (info.volume_root_uri.startsWith(QLatin1String("cdda"))) {
|
||||
// Audio CD devices are already handled by CDDA lister
|
||||
return;
|
||||
}
|
||||
@ -336,12 +336,12 @@ void GioLister::MountAdded(GMount *mount) {
|
||||
|
||||
DeviceInfo info;
|
||||
info.ReadVolumeInfo(g_mount_get_volume(mount));
|
||||
if (info.volume_root_uri.startsWith("afc://") || info.volume_root_uri.startsWith("gphoto2://")) {
|
||||
if (info.volume_root_uri.startsWith(QLatin1String("afc://")) || info.volume_root_uri.startsWith(QLatin1String("gphoto2://"))) {
|
||||
// Handled by iLister.
|
||||
return;
|
||||
}
|
||||
#ifdef HAVE_AUDIOCD
|
||||
if (info.volume_root_uri.startsWith("cdda")) {
|
||||
if (info.volume_root_uri.startsWith(QLatin1String("cdda"))) {
|
||||
// Audio CD devices are already handled by CDDA lister
|
||||
return;
|
||||
}
|
||||
@ -577,7 +577,7 @@ void GioLister::UpdateDeviceFreeSpace(const QString &id) {
|
||||
|
||||
{
|
||||
QMutexLocker l(&mutex_);
|
||||
if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_[id].volume_root_uri.startsWith("mtp://")) return;
|
||||
if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_[id].volume_root_uri.startsWith(QLatin1String("mtp://"))) return;
|
||||
|
||||
DeviceInfo &device_info = devices_[id];
|
||||
|
||||
@ -604,7 +604,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("mtp://") && !devices_[id].volume_root_uri.startsWith("gphoto2://");
|
||||
return devices_.contains(id) && !devices_[id].mount_ptr && !devices_[id].volume_root_uri.startsWith(QLatin1String("mtp://")) && !devices_[id].volume_root_uri.startsWith(QLatin1String("gphoto2://"));
|
||||
|
||||
}
|
||||
|
||||
@ -631,7 +631,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_[id].volume_root_uri.startsWith("mtp://")) return;
|
||||
if (!devices_.contains(id) || !devices_[id].mount_ptr || devices_[id].volume_root_uri.startsWith(QLatin1String("mtp://"))) return;
|
||||
|
||||
const DeviceInfo &info = devices_[id];
|
||||
|
||||
|
@ -59,7 +59,7 @@ class GPodDevice : public ConnectedDevice, public virtual MusicStorage {
|
||||
bool IsLoading() override { return loader_; }
|
||||
QObject *Loader() { return loader_; }
|
||||
|
||||
static QStringList url_schemes() { return QStringList() << "ipod"; }
|
||||
static QStringList url_schemes() { return QStringList() << QStringLiteral("ipod"); }
|
||||
|
||||
bool GetSupportedFiletypes(QList<Song::FileType> *ret) override;
|
||||
|
||||
|
@ -37,7 +37,7 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
|
||||
|
||||
QString hostname = url.host();
|
||||
// Parse the URL
|
||||
QRegularExpression host_re("^usb-(\\d+)-(\\d+)$");
|
||||
QRegularExpression host_re(QStringLiteral("^usb-(\\d+)-(\\d+)$"));
|
||||
|
||||
unsigned int bus_location = 0;
|
||||
unsigned int device_num = 0;
|
||||
@ -49,9 +49,9 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
|
||||
bus_location = re_match.captured(1).toUInt();
|
||||
device_num = re_match.captured(2).toUInt();
|
||||
}
|
||||
else if (url_query.hasQueryItem("busnum")) {
|
||||
bus_location = url_query.queryItemValue("busnum").toUInt();
|
||||
device_num = url_query.queryItemValue("devnum").toUInt();
|
||||
else if (url_query.hasQueryItem(QStringLiteral("busnum"))) {
|
||||
bus_location = url_query.queryItemValue(QStringLiteral("busnum")).toUInt();
|
||||
device_num = url_query.queryItemValue(QStringLiteral("devnum")).toUInt();
|
||||
}
|
||||
else {
|
||||
error_text_ = tr("Invalid MTP device: %1").arg(hostname);
|
||||
@ -59,13 +59,13 @@ MtpConnection::MtpConnection(const QUrl &url, QObject *parent) : QObject(parent)
|
||||
return;
|
||||
}
|
||||
|
||||
if (url_query.hasQueryItem("vendor")) {
|
||||
if (url_query.hasQueryItem(QStringLiteral("vendor"))) {
|
||||
LIBMTP_raw_device_t *raw_device = static_cast<LIBMTP_raw_device_t*>(malloc(sizeof(LIBMTP_raw_device_t)));
|
||||
raw_device->device_entry.vendor = url_query.queryItemValue("vendor").toLatin1().data();
|
||||
raw_device->device_entry.product = url_query.queryItemValue("product").toLatin1().data();
|
||||
raw_device->device_entry.vendor_id = url_query.queryItemValue("vendor_id").toUShort();
|
||||
raw_device->device_entry.product_id = url_query.queryItemValue("product_id").toUShort();
|
||||
raw_device->device_entry.device_flags = url_query.queryItemValue("quirks").toUInt();
|
||||
raw_device->device_entry.vendor = url_query.queryItemValue(QStringLiteral("vendor")).toLatin1().data();
|
||||
raw_device->device_entry.product = url_query.queryItemValue(QStringLiteral("product")).toLatin1().data();
|
||||
raw_device->device_entry.vendor_id = url_query.queryItemValue(QStringLiteral("vendor_id")).toUShort();
|
||||
raw_device->device_entry.product_id = url_query.queryItemValue(QStringLiteral("product_id")).toUShort();
|
||||
raw_device->device_entry.device_flags = url_query.queryItemValue(QStringLiteral("quirks")).toUInt();
|
||||
|
||||
raw_device->bus_location = bus_location;
|
||||
raw_device->devnum = device_num;
|
||||
@ -122,16 +122,16 @@ QString MtpConnection::ErrorString(const LIBMTP_error_number_t error_number) {
|
||||
|
||||
switch(error_number) {
|
||||
case LIBMTP_ERROR_NO_DEVICE_ATTACHED:
|
||||
return "No Devices have been found.";
|
||||
return QStringLiteral("No Devices have been found.");
|
||||
case LIBMTP_ERROR_CONNECTING:
|
||||
return "There has been an error connecting.";
|
||||
return QStringLiteral("There has been an error connecting.");
|
||||
case LIBMTP_ERROR_MEMORY_ALLOCATION:
|
||||
return "Memory Allocation Error.";
|
||||
return QStringLiteral("Memory Allocation Error.");
|
||||
case LIBMTP_ERROR_GENERAL:
|
||||
default:
|
||||
return "Unknown error, please report this to the libmtp developers.";
|
||||
return QStringLiteral("Unknown error, please report this to the libmtp developers.");
|
||||
case LIBMTP_ERROR_NONE:
|
||||
return "Successfully connected.";
|
||||
return QStringLiteral("Successfully connected.");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ MtpDevice::~MtpDevice() {
|
||||
|
||||
bool MtpDevice::Init() {
|
||||
|
||||
InitBackendDirectory("/", first_time_, false);
|
||||
InitBackendDirectory(QStringLiteral("/"), first_time_, false);
|
||||
model_->Init();
|
||||
|
||||
loader_ = new MtpLoader(url_, app_->task_manager(), backend_);
|
||||
@ -187,7 +187,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("");
|
||||
metadata_on_device.set_albumartist(QLatin1String(""));
|
||||
songs_to_add_ << metadata_on_device;
|
||||
|
||||
// Remove the original if requested
|
||||
|
@ -51,7 +51,7 @@ class MtpDevice : public ConnectedDevice {
|
||||
Q_INVOKABLE MtpDevice(const QUrl &url, DeviceLister *lister, const QString &unique_id, SharedPtr<DeviceManager> manager, Application *app, const int database_id, const bool first_time, QObject *parent = nullptr);
|
||||
~MtpDevice() override;
|
||||
|
||||
static QStringList url_schemes() { return QStringList() << "mtp"; }
|
||||
static QStringList url_schemes() { return QStringList() << QStringLiteral("mtp"); }
|
||||
|
||||
bool Init() override;
|
||||
void ConnectAsync() override;
|
||||
|
@ -79,7 +79,7 @@ QVariantList Udisks2Lister::DeviceIcons(const QString &id) {
|
||||
QString Udisks2Lister::DeviceManufacturer(const QString &id) {
|
||||
|
||||
QReadLocker locker(&device_data_lock_);
|
||||
if (!device_data_.contains(id)) return "";
|
||||
if (!device_data_.contains(id)) return QLatin1String("");
|
||||
return device_data_[id].vendor;
|
||||
|
||||
}
|
||||
@ -87,7 +87,7 @@ QString Udisks2Lister::DeviceManufacturer(const QString &id) {
|
||||
QString Udisks2Lister::DeviceModel(const QString &id) {
|
||||
|
||||
QReadLocker locker(&device_data_lock_);
|
||||
if (!device_data_.contains(id)) return "";
|
||||
if (!device_data_.contains(id)) return QLatin1String("");
|
||||
return device_data_[id].model;
|
||||
|
||||
}
|
||||
@ -118,7 +118,7 @@ QVariantMap Udisks2Lister::DeviceHardwareInfo(const QString &id) {
|
||||
const PartitionData &data = device_data_[id];
|
||||
result[QT_TR_NOOP("D-Bus path")] = data.dbus_path;
|
||||
result[QT_TR_NOOP("Serial number")] = data.serial;
|
||||
result[QT_TR_NOOP("Mount points")] = data.mount_paths.join(", ");
|
||||
result[QT_TR_NOOP("Mount points")] = data.mount_paths.join(QStringLiteral(", "));
|
||||
result[QT_TR_NOOP("Partition label")] = data.label;
|
||||
result[QT_TR_NOOP("UUID")] = data.uuid;
|
||||
|
||||
@ -129,7 +129,7 @@ QVariantMap Udisks2Lister::DeviceHardwareInfo(const QString &id) {
|
||||
QString Udisks2Lister::MakeFriendlyName(const QString &id) {
|
||||
|
||||
QReadLocker locker(&device_data_lock_);
|
||||
if (!device_data_.contains(id)) return "";
|
||||
if (!device_data_.contains(id)) return QLatin1String("");
|
||||
return device_data_[id].friendly_name;
|
||||
|
||||
}
|
||||
@ -408,7 +408,7 @@ Udisks2Lister::PartitionData Udisks2Lister::ReadPartitionData(const QDBusObjectP
|
||||
}
|
||||
|
||||
QString Udisks2Lister::PartitionData::unique_id() const {
|
||||
return QString("Udisks2/%1/%2/%3/%4/%5")
|
||||
return QStringLiteral("Udisks2/%1/%2/%3/%4/%5")
|
||||
.arg(serial, vendor, model)
|
||||
.arg(capacity)
|
||||
.arg(uuid);
|
||||
|
@ -43,47 +43,47 @@ About::About(QWidget *parent) : QDialog(parent), ui_{} {
|
||||
setWindowTitle(tr("About Strawberry"));
|
||||
|
||||
strawberry_authors_ \
|
||||
<< Person("Jonas Kvinge");
|
||||
<< Person(QStringLiteral("Jonas Kvinge"));
|
||||
|
||||
strawberry_contributors_ \
|
||||
<< Person("Gavin D. Howard")
|
||||
<< Person("Martin Delille");
|
||||
<< Person(QStringLiteral("Gavin D. Howard"))
|
||||
<< Person(QStringLiteral("Martin Delille"));
|
||||
|
||||
clementine_authors_
|
||||
<< Person("David Sansome")
|
||||
<< Person("John Maguire")
|
||||
<< Person(QString::fromUtf8("Paweł Bara"))
|
||||
<< Person("Arnaud Bienner");
|
||||
<< Person(QStringLiteral("David Sansome"))
|
||||
<< Person(QStringLiteral("John Maguire"))
|
||||
<< Person(QStringLiteral("Paweł Bara"))
|
||||
<< Person(QStringLiteral("Arnaud Bienner"));
|
||||
|
||||
clementine_contributors_ \
|
||||
<< Person("Jakub Stachowski")
|
||||
<< Person("Paul Cifarelli")
|
||||
<< Person("Felipe Rivera")
|
||||
<< Person("Alexander Peitz")
|
||||
<< Person("Andreas Muttscheller")
|
||||
<< Person("Mark Furneaux")
|
||||
<< Person("Florian Bigard")
|
||||
<< Person("Alex Bikadorov")
|
||||
<< Person("Mattias Andersson")
|
||||
<< Person("Alan Briolat")
|
||||
<< Person("Arun Narayanankutty")
|
||||
<< Person(QString::fromUtf8("Bartłomiej Burdukiewicz"))
|
||||
<< Person("Andre Siviero")
|
||||
<< Person("Santiago Gil")
|
||||
<< Person("Tyler Rhodes")
|
||||
<< Person("Vikram Ambrose")
|
||||
<< Person("David Guillen")
|
||||
<< Person("Krzysztof Sobiecki")
|
||||
<< Person("Valeriy Malov")
|
||||
<< Person("Nick Lanham");
|
||||
<< Person(QStringLiteral("Jakub Stachowski"))
|
||||
<< Person(QStringLiteral("Paul Cifarelli"))
|
||||
<< Person(QStringLiteral("Felipe Rivera"))
|
||||
<< Person(QStringLiteral("Alexander Peitz"))
|
||||
<< Person(QStringLiteral("Andreas Muttscheller"))
|
||||
<< Person(QStringLiteral("Mark Furneaux"))
|
||||
<< Person(QStringLiteral("Florian Bigard"))
|
||||
<< Person(QStringLiteral("Alex Bikadorov"))
|
||||
<< Person(QStringLiteral("Mattias Andersson"))
|
||||
<< Person(QStringLiteral("Alan Briolat"))
|
||||
<< Person(QStringLiteral("Arun Narayanankutty"))
|
||||
<< Person(QStringLiteral("Bartłomiej Burdukiewicz"))
|
||||
<< Person(QStringLiteral("Andre Siviero"))
|
||||
<< Person(QStringLiteral("Santiago Gil"))
|
||||
<< Person(QStringLiteral("Tyler Rhodes"))
|
||||
<< Person(QStringLiteral("Vikram Ambrose"))
|
||||
<< Person(QStringLiteral("David Guillen"))
|
||||
<< Person(QStringLiteral("Krzysztof Sobiecki"))
|
||||
<< Person(QStringLiteral("Valeriy Malov"))
|
||||
<< Person(QStringLiteral("Nick Lanham"));
|
||||
|
||||
strawberry_thanks_ \
|
||||
<< Person("Mark Kretschmann")
|
||||
<< Person("Max Howell")
|
||||
<< Person("Artur Rona")
|
||||
<< Person("Robert-André Mauchin")
|
||||
<< Person("Thomas Pierson")
|
||||
<< Person("Fabio Loli");
|
||||
<< Person(QStringLiteral("Mark Kretschmann"))
|
||||
<< Person(QStringLiteral("Max Howell"))
|
||||
<< Person(QStringLiteral("Artur Rona"))
|
||||
<< Person(QStringLiteral("Robert-André Mauchin"))
|
||||
<< Person(QStringLiteral("Thomas Pierson"))
|
||||
<< Person(QStringLiteral("Fabio Loli"));
|
||||
|
||||
QFont title_font;
|
||||
title_font.setBold(true);
|
||||
@ -92,7 +92,7 @@ About::About(QWidget *parent) : QDialog(parent), ui_{} {
|
||||
ui_.label_title->setFont(title_font);
|
||||
ui_.label_title->setText(windowTitle());
|
||||
ui_.label_text->setText(MainHtml());
|
||||
ui_.text_contributors->document()->setDefaultStyleSheet(QString("a {color: %1; }").arg(palette().text().color().name()));
|
||||
ui_.text_contributors->document()->setDefaultStyleSheet(QStringLiteral("a {color: %1; }").arg(palette().text().color().name()));
|
||||
ui_.text_contributors->setText(ContributorsHtml());
|
||||
|
||||
ui_.buttonBox->button(QDialogButtonBox::Close)->setShortcut(QKeySequence::Close);
|
||||
@ -103,31 +103,31 @@ QString About::MainHtml() const {
|
||||
|
||||
QString ret;
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += tr("Version %1").arg(QCoreApplication::applicationVersion());
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += tr("Strawberry is a music player and music collection organizer.");
|
||||
ret += QString("<br />");
|
||||
ret += QStringLiteral("<br />");
|
||||
ret += tr("It is a fork of Clementine released in 2018 aimed at music collectors and audiophiles.");
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += tr("Strawberry is free software released under GPL. The source code is available on %1").arg(QString("<a style=\"color:%1;\" href=\"https://github.com/strawberrymusicplayer/strawberry\">GitHub</a>.").arg(palette().text().color().name()));
|
||||
ret += QString("<br />");
|
||||
ret += tr("You should have received a copy of the GNU General Public License along with this program. If not, see %1").arg(QString("<a style=\"color:%1;\" href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a>").arg(palette().text().color().name()));
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += tr("Strawberry is free software released under GPL. The source code is available on %1").arg(QStringLiteral("<a style=\"color:%1;\" href=\"https://github.com/strawberrymusicplayer/strawberry\">GitHub</a>.").arg(palette().text().color().name()));
|
||||
ret += QStringLiteral("<br />");
|
||||
ret += tr("You should have received a copy of the GNU General Public License along with this program. If not, see %1").arg(QStringLiteral("<a style=\"color:%1;\" href=\"http://www.gnu.org/licenses/\">http://www.gnu.org/licenses/</a>").arg(palette().text().color().name()));
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += tr("If you like Strawberry and can make use of it, consider sponsoring or donating.");
|
||||
ret += QString("<br />");
|
||||
ret += QStringLiteral("<br />");
|
||||
ret += tr("You can sponsor the author on %1. You can also make a one-time payment through %2.").arg(
|
||||
QString("<a style=\"color:%1;\" href=\"https://github.com/sponsors/jonaski\">GitHub sponsors</a>").arg(palette().text().color().name()),
|
||||
QString("<a style=\"color:%1;\" href=\"https://paypal.me/jonaskvinge\">paypal.me/jonaskvinge</a>").arg(palette().text().color().name())
|
||||
QStringLiteral("<a style=\"color:%1;\" href=\"https://github.com/sponsors/jonaski\">GitHub sponsors</a>").arg(palette().text().color().name()),
|
||||
QStringLiteral("<a style=\"color:%1;\" href=\"https://paypal.me/jonaskvinge\">paypal.me/jonaskvinge</a>").arg(palette().text().color().name())
|
||||
);
|
||||
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
return ret;
|
||||
|
||||
@ -137,54 +137,54 @@ QString About::ContributorsHtml() const {
|
||||
|
||||
QString ret;
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += "<b>";
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += QLatin1String("<b>");
|
||||
ret += tr("Author and maintainer");
|
||||
ret += "</b>";
|
||||
ret += QLatin1String("</b>");
|
||||
for (const Person &person : strawberry_authors_) {
|
||||
ret += "<br />" + PersonToHtml(person);
|
||||
}
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += "<b>";
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += QLatin1String("<b>");
|
||||
ret += tr("Contributors");
|
||||
ret += "</b>";
|
||||
ret += QLatin1String("</b>");
|
||||
for (const Person &person : strawberry_contributors_) {
|
||||
ret += "<br />" + PersonToHtml(person);
|
||||
}
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += "<b>";
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += QLatin1String("<b>");
|
||||
ret += tr("Clementine authors");
|
||||
ret += "</b>";
|
||||
ret += QLatin1String("</b>");
|
||||
for (const Person &person : clementine_authors_) {
|
||||
ret += "<br />" + PersonToHtml(person);
|
||||
}
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += "<b>";
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += QLatin1String("<b>");
|
||||
ret += tr("Clementine contributors");
|
||||
ret += "</b>";
|
||||
ret += QLatin1String("</b>");
|
||||
for (const Person &person : clementine_contributors_) {
|
||||
ret += "<br />" + PersonToHtml(person);
|
||||
}
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += "<b>";
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += QLatin1String("<b>");
|
||||
ret += tr("Thanks to");
|
||||
ret += "</b>";
|
||||
ret += QLatin1String("</b>");
|
||||
for (const Person &person : strawberry_thanks_) {
|
||||
ret += "<br />" + PersonToHtml(person);
|
||||
}
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
|
||||
ret += QString("<p>");
|
||||
ret += QStringLiteral("<p>");
|
||||
ret += tr("Thanks to all the other Amarok and Clementine contributors.");
|
||||
ret += QString("</p>");
|
||||
ret += QStringLiteral("</p>");
|
||||
return ret;
|
||||
|
||||
}
|
||||
@ -195,6 +195,6 @@ QString About::PersonToHtml(const Person &person) {
|
||||
return person.name;
|
||||
}
|
||||
else {
|
||||
return QString("%1 <<a href=\"mailto:%2\">%3</a>>").arg(person.name, person.email, person.email);
|
||||
return QStringLiteral("%1 <<a href=\"mailto:%2\">%3</a>>").arg(person.name, person.email, person.email);
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ Console::Console(Application *app, QWidget *parent) : QDialog(parent), ui_{}, ap
|
||||
|
||||
QObject::connect(ui_.run, &QPushButton::clicked, this, &Console::RunQuery);
|
||||
|
||||
QFont font("Monospace");
|
||||
QFont font(QStringLiteral("Monospace"));
|
||||
font.setStyleHint(QFont::TypeWriter);
|
||||
|
||||
ui_.output->setFont(font);
|
||||
@ -79,7 +79,7 @@ void Console::RunQuery() {
|
||||
values.append(record.value(i).toString());
|
||||
}
|
||||
|
||||
ui_.output->append(values.join("|"));
|
||||
ui_.output->append(values.join(QStringLiteral("|")));
|
||||
|
||||
}
|
||||
|
||||
|
@ -225,8 +225,8 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
|
||||
ui_->summary_art->installEventFilter(this);
|
||||
|
||||
// Add the next/previous buttons
|
||||
previous_button_ = new QPushButton(IconLoader::Load("go-previous"), tr("Previous"), this);
|
||||
next_button_ = new QPushButton(IconLoader::Load("go-next"), tr("Next"), this);
|
||||
previous_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-previous")), tr("Previous"), this);
|
||||
next_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-next")), tr("Next"), this);
|
||||
ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole);
|
||||
ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole);
|
||||
|
||||
@ -240,11 +240,11 @@ EditTagDialog::EditTagDialog(Application *app, QWidget *parent)
|
||||
new QShortcut(QKeySequence::MoveToNextPage, next_button_, SLOT(click()));
|
||||
|
||||
// Show the shortcuts as tooltips
|
||||
previous_button_->setToolTip(QString("%1 (%2 / %3)").arg(
|
||||
previous_button_->setToolTip(QStringLiteral("%1 (%2 / %3)").arg(
|
||||
previous_button_->text(),
|
||||
QKeySequence(QKeySequence::Back).toString(QKeySequence::NativeText),
|
||||
QKeySequence(QKeySequence::MoveToPreviousPage).toString(QKeySequence::NativeText)));
|
||||
next_button_->setToolTip(QString("%1 (%2 / %3)").arg(
|
||||
next_button_->setToolTip(QStringLiteral("%1 (%2 / %3)").arg(
|
||||
next_button_->text(),
|
||||
QKeySequence(QKeySequence::Forward).toString(QKeySequence::NativeText),
|
||||
QKeySequence(QKeySequence::MoveToNextPage).toString(QKeySequence::NativeText)));
|
||||
@ -690,9 +690,9 @@ void EditTagDialog::SelectionChanged() {
|
||||
summary += "<p><b>" + first_song.PrettyTitleWithArtist().toHtmlEscaped() + "</b></p>";
|
||||
}
|
||||
else {
|
||||
summary += "<p><b>";
|
||||
summary += QLatin1String("<p><b>");
|
||||
summary += tr("%1 songs selected.").arg(indexes.count());
|
||||
summary += "</b></p>";
|
||||
summary += QLatin1String("</b></p>");
|
||||
}
|
||||
ui_->tags_summary->setText(summary);
|
||||
|
||||
@ -787,8 +787,8 @@ void EditTagDialog::UpdateSummaryTab(const Song &song) {
|
||||
|
||||
ui_->length->setText(Utilities::PrettyTimeNanosec(song.length_nanosec()));
|
||||
|
||||
SetText(ui_->samplerate, song.samplerate(), "Hz");
|
||||
SetText(ui_->bitdepth, song.bitdepth(), "Bit");
|
||||
SetText(ui_->samplerate, song.samplerate(), QStringLiteral("Hz"));
|
||||
SetText(ui_->bitdepth, song.bitdepth(), QStringLiteral("Bit"));
|
||||
SetText(ui_->bitrate, song.bitrate(), tr("kbps"));
|
||||
ui_->ebur128_integrated_loudness->setText(song.Ebur128LoudnessLUFSToText());
|
||||
ui_->ebur128_loudness_range->setText(song.Ebur128LoudnessRangeLUToText());
|
||||
@ -859,7 +859,7 @@ QString EditTagDialog::GetArtSummary(const Song &song, const AlbumCoverLoaderRes
|
||||
}
|
||||
|
||||
if (!song.is_collection_song()) {
|
||||
if (!summary.isEmpty()) summary += "<br />";
|
||||
if (!summary.isEmpty()) summary += QLatin1String("<br />");
|
||||
summary = tr("Album cover editing is only available for collection songs.");
|
||||
}
|
||||
|
||||
@ -906,8 +906,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 += "<br />";
|
||||
summary += "<br />";
|
||||
summary += QLatin1String("<br />");
|
||||
summary += QLatin1String("<br />");
|
||||
summary += GetArtSummary(data_[idx.row()].current_, result.type);
|
||||
ui_->summary->setText(summary);
|
||||
}
|
||||
@ -932,8 +932,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 += "<br />";
|
||||
summary += "<br />";
|
||||
summary += QLatin1String("<br />");
|
||||
summary += QLatin1String("<br />");
|
||||
if (cover_action == UpdateCoverAction::None) {
|
||||
summary += GetArtSummary(first_song, result.type);
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ void ErrorDialog::UpdateContent() {
|
||||
QString html;
|
||||
for (const QString &message : current_messages_) {
|
||||
if (!html.isEmpty()) {
|
||||
html += "<hr/>";
|
||||
html += QLatin1String("<hr/>");
|
||||
}
|
||||
html += message.toHtmlEscaped();
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ LastFMImportDialog::LastFMImportDialog(SharedPtr<LastFMImport> lastfm_import, QW
|
||||
|
||||
ui_->setupUi(this);
|
||||
|
||||
setWindowIcon(IconLoader::Load("scrobble"));
|
||||
setWindowIcon(IconLoader::Load(QStringLiteral("scrobble")));
|
||||
|
||||
ui_->stackedWidget->setCurrentWidget(ui_->page_start);
|
||||
|
||||
|
@ -29,7 +29,7 @@ SnapDialog::SnapDialog(QWidget *parent) : MessageDialog(parent) {
|
||||
|
||||
setWindowTitle(tr("Strawberry is running as a Snap"));
|
||||
|
||||
const QIcon icon = IconLoader::Load("dialog-warning");
|
||||
const QIcon icon = IconLoader::Load(QStringLiteral("dialog-warning"));
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
||||
const QPixmap pixmap = icon.pixmap(QSize(64, 64), devicePixelRatioF());
|
||||
#else
|
||||
@ -38,56 +38,56 @@ SnapDialog::SnapDialog(QWidget *parent) : MessageDialog(parent) {
|
||||
ui_->label_logo->setPixmap(pixmap);
|
||||
|
||||
QString text;
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("It is detected that Strawberry is running as a Snap");
|
||||
text += QString("</p>");
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<p>");
|
||||
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 += QString("</p>");
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += QString("Strawberry is available natively in the official package repositories for Fedora, openSUSE, Mageia, Arch, Manjaro, MX Linux and most other popular Linux distributions.");
|
||||
text += QString("</p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += QStringLiteral("Strawberry is available natively in the official package repositories for Fedora, openSUSE, Mageia, Arch, Manjaro, MX Linux and most other popular Linux distributions.");
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += tr("For Ubuntu there is an official PPA repository available at %1.").arg(QString("<a style=\"color:%1;\" href=\"https://launchpad.net/~jonaski/+archive/ubuntu/strawberry\">https://launchpad.net/~jonaski/+archive/ubuntu/strawberry</a>").arg(palette().text().color().name()));
|
||||
text += QString("</p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("For Ubuntu there is an official PPA repository available at %1.").arg(QStringLiteral("<a style=\"color:%1;\" href=\"https://launchpad.net/~jonaski/+archive/ubuntu/strawberry\">https://launchpad.net/~jonaski/+archive/ubuntu/strawberry</a>").arg(palette().text().color().name()));
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += tr("Official releases are available for Debian and Ubuntu which also work on most of their derivatives. See %1 for more information.").arg(QString("<a style=\"color:%1;\" href=\"https://www.strawberrymusicplayer.org/\">https://www.strawberrymusicplayer.org/</a>").arg(palette().text().color().name()));
|
||||
text += QString("</p>");
|
||||
text += QStringLiteral("<p>");
|
||||
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("<a style=\"color:%1;\" href=\"https://www.strawberrymusicplayer.org/\">https://www.strawberrymusicplayer.org/</a>").arg(palette().text().color().name()));
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("For a better experience please consider the other options above.");
|
||||
text += QString("</p>");
|
||||
text += QStringLiteral("</p>");
|
||||
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("Copy your strawberry.conf and strawberry.db from your ~/snap directory to avoid losing configuration before you uninstall the snap:");
|
||||
text += QString("<br />");
|
||||
text += QString("cp ~/snap/strawberry/current/.config/strawberry/strawberry.conf ~/.config/strawberry/strawberry.conf<br />");
|
||||
text += QString("cp ~/snap/strawberry/current/.local/share/strawberry/strawberry/strawberry.db ~/.local/share/strawberry/strawberry/strawberry.db<br />");
|
||||
text += QString("</p>");
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<br />");
|
||||
text += QStringLiteral("cp ~/snap/strawberry/current/.config/strawberry/strawberry.conf ~/.config/strawberry/strawberry.conf<br />");
|
||||
text += QStringLiteral("cp ~/snap/strawberry/current/.local/share/strawberry/strawberry/strawberry.db ~/.local/share/strawberry/strawberry/strawberry.db<br />");
|
||||
text += QStringLiteral("</p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("Uninstall the snap with:");
|
||||
text += QString("<br />");
|
||||
text += QString("snap remove strawberry");
|
||||
text += QString("</p>");
|
||||
text += QString("<p>");
|
||||
text += QStringLiteral("<br />");
|
||||
text += QStringLiteral("snap remove strawberry");
|
||||
text += QStringLiteral("</p>");
|
||||
text += QStringLiteral("<p>");
|
||||
text += tr("Install strawberry through PPA:");
|
||||
text += QString("<br />");
|
||||
text += QString("sudo add-apt-repository ppa:jonaski/strawberry<br />");
|
||||
text += QString("sudo apt-get update<br />");
|
||||
text += QString("sudo apt install strawberry");
|
||||
text += QString("</p>");
|
||||
text += QString("<p></p>");
|
||||
text += QStringLiteral("<br />");
|
||||
text += QStringLiteral("sudo add-apt-repository ppa:jonaski/strawberry<br />");
|
||||
text += QStringLiteral("sudo apt-get update<br />");
|
||||
text += QStringLiteral("sudo apt install strawberry");
|
||||
text += QStringLiteral("</p>");
|
||||
text += QStringLiteral("<p></p>");
|
||||
|
||||
ui_->label_text->setText(text);
|
||||
ui_->label_text->adjustSize();
|
||||
adjustSize();
|
||||
|
||||
settings_group_ = MainWindow::kSettingsGroup;
|
||||
do_not_show_message_again_ = "ignore_snap";
|
||||
do_not_show_message_again_ = QStringLiteral("ignore_snap");
|
||||
|
||||
if (parent) {
|
||||
Utilities::CenterWidgetOnScreen(Utilities::GetScreen(parent), this);
|
||||
|
@ -66,8 +66,8 @@ TrackSelectionDialog::TrackSelectionDialog(QWidget *parent)
|
||||
SetLoading(QString());
|
||||
|
||||
// Add the next/previous buttons
|
||||
previous_button_ = new QPushButton(IconLoader::Load("go-previous"), tr("Previous"), this);
|
||||
next_button_ = new QPushButton(IconLoader::Load("go-next"), tr("Next"), this);
|
||||
previous_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-previous")), tr("Previous"), this);
|
||||
next_button_ = new QPushButton(IconLoader::Load(QStringLiteral("go-next")), tr("Next"), this);
|
||||
ui_->button_box->addButton(previous_button_, QDialogButtonBox::ResetRole);
|
||||
ui_->button_box->addButton(next_button_, QDialogButtonBox::ResetRole);
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include "alsadevicefinder.h"
|
||||
#include "enginedevice.h"
|
||||
|
||||
AlsaDeviceFinder::AlsaDeviceFinder() : DeviceFinder("alsa", { "alsa", "alsasink" }) {}
|
||||
AlsaDeviceFinder::AlsaDeviceFinder() : DeviceFinder(QStringLiteral("alsa"), { "alsa", "alsasink" }) {}
|
||||
|
||||
EngineDeviceList AlsaDeviceFinder::ListDevices() {
|
||||
|
||||
@ -91,14 +91,14 @@ EngineDeviceList AlsaDeviceFinder::ListDevices() {
|
||||
}
|
||||
|
||||
EngineDevice device;
|
||||
device.description = QString("%1 %2").arg(snd_ctl_card_info_get_name(cardinfo), snd_pcm_info_get_name(pcminfo));
|
||||
device.description = QStringLiteral("%1 %2").arg(snd_ctl_card_info_get_name(cardinfo), snd_pcm_info_get_name(pcminfo));
|
||||
device.iconname = device.GuessIconName();
|
||||
device.card = card;
|
||||
device.device = dev;
|
||||
|
||||
device.value = QString("hw:%1,%2").arg(card).arg(dev);
|
||||
device.value = QStringLiteral("hw:%1,%2").arg(card).arg(dev);
|
||||
devices.append(device);
|
||||
device.value = QString("plughw:%1,%2").arg(card).arg(dev);
|
||||
device.value = QStringLiteral("plughw:%1,%2").arg(card).arg(dev);
|
||||
devices.append(device);
|
||||
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "alsapcmdevicefinder.h"
|
||||
#include "enginedevice.h"
|
||||
|
||||
AlsaPCMDeviceFinder::AlsaPCMDeviceFinder() : DeviceFinder("alsa", { "alsa", "alsasink" }) {}
|
||||
AlsaPCMDeviceFinder::AlsaPCMDeviceFinder() : DeviceFinder(QStringLiteral("alsa"), { "alsa", "alsasink" }) {}
|
||||
|
||||
EngineDeviceList AlsaPCMDeviceFinder::ListDevices() {
|
||||
|
||||
|
@ -78,11 +78,11 @@ QString Chromaprinter::CreateFingerprint() {
|
||||
return QString();
|
||||
}
|
||||
|
||||
GstElement *src = CreateElement("filesrc", pipeline);
|
||||
GstElement *decode = CreateElement("decodebin", pipeline);
|
||||
GstElement *convert = CreateElement("audioconvert", pipeline);
|
||||
GstElement *resample = CreateElement("audioresample", pipeline);
|
||||
GstElement *sink = CreateElement("appsink", pipeline);
|
||||
GstElement *src = CreateElement(QStringLiteral("filesrc"), pipeline);
|
||||
GstElement *decode = CreateElement(QStringLiteral("decodebin"), pipeline);
|
||||
GstElement *convert = CreateElement(QStringLiteral("audioconvert"), pipeline);
|
||||
GstElement *resample = CreateElement(QStringLiteral("audioresample"), pipeline);
|
||||
GstElement *sink = CreateElement(QStringLiteral("appsink"), pipeline);
|
||||
|
||||
if (!src || !decode || !convert || !resample || !sink) {
|
||||
gst_object_unref(pipeline);
|
||||
|
@ -394,11 +394,11 @@ std::optional<EBUR128Measures> EBUR128AnalysisImpl::Compute(const Song &song) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
GstElement *src = CreateElement("filesrc", pipeline);
|
||||
GstElement *decode = CreateElement("decodebin", pipeline);
|
||||
GstElement *convert = CreateElement("audioconvert", pipeline);
|
||||
GstElement *queue = CreateElement("queue2", pipeline);
|
||||
GstElement *sink = CreateElement("appsink", pipeline);
|
||||
GstElement *src = CreateElement(QStringLiteral("filesrc"), pipeline);
|
||||
GstElement *decode = CreateElement(QStringLiteral("decodebin"), pipeline);
|
||||
GstElement *convert = CreateElement(QStringLiteral("audioconvert"), pipeline);
|
||||
GstElement *queue = CreateElement(QStringLiteral("queue2"), pipeline);
|
||||
GstElement *sink = CreateElement(QStringLiteral("appsink"), pipeline);
|
||||
|
||||
if (!src || !decode || !convert || !queue || !sink) {
|
||||
gst_object_unref(pipeline);
|
||||
|
@ -79,8 +79,8 @@ EngineBase::~EngineBase() = default;
|
||||
|
||||
EngineBase::Type EngineBase::TypeFromName(const QString &name) {
|
||||
|
||||
if (name.compare("gstreamer", Qt::CaseInsensitive) == 0) return Type::GStreamer;
|
||||
if (name.compare("vlc", Qt::CaseInsensitive) == 0) return Type::VLC;
|
||||
if (name.compare(QLatin1String("gstreamer"), Qt::CaseInsensitive) == 0) return Type::GStreamer;
|
||||
if (name.compare(QLatin1String("vlc"), Qt::CaseInsensitive) == 0) return Type::VLC;
|
||||
|
||||
return Type::None;
|
||||
|
||||
@ -89,10 +89,10 @@ EngineBase::Type EngineBase::TypeFromName(const QString &name) {
|
||||
QString EngineBase::Name(const Type type) {
|
||||
|
||||
switch (type) {
|
||||
case Type::GStreamer: return QString("gstreamer");
|
||||
case Type::VLC: return QString("vlc");
|
||||
case Type::GStreamer: return QStringLiteral("gstreamer");
|
||||
case Type::VLC: return QStringLiteral("vlc");
|
||||
case Type::None:
|
||||
default: return QString("None");
|
||||
default: return QStringLiteral("None");
|
||||
}
|
||||
|
||||
}
|
||||
@ -100,10 +100,10 @@ QString EngineBase::Name(const Type type) {
|
||||
QString EngineBase::Description(const Type type) {
|
||||
|
||||
switch (type) {
|
||||
case Type::GStreamer: return QString("GStreamer");
|
||||
case Type::VLC: return QString("VLC");
|
||||
case Type::GStreamer: return QStringLiteral("GStreamer");
|
||||
case Type::VLC: return QStringLiteral("VLC");
|
||||
case Type::None:
|
||||
default: return QString("None");
|
||||
default: return QStringLiteral("None");
|
||||
}
|
||||
|
||||
}
|
||||
@ -203,8 +203,8 @@ 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_ ? "" : "1");
|
||||
qLog(Debug) << "SOUP_FORCE_HTTP1:" << (http2_enabled_ ? "OFF" : "ON");
|
||||
Utilities::SetEnv("SOUP_FORCE_HTTP1", http2_enabled_ ? QLatin1String("") : QStringLiteral("1"));
|
||||
qLog(Debug) << "SOUP_FORCE_HTTP1:" << (http2_enabled_ ? QLatin1String("OFF") : QLatin1String("ON"));
|
||||
}
|
||||
|
||||
strict_ssl_enabled_ = s.value("strict_ssl", false).toBool();
|
||||
@ -223,7 +223,7 @@ void EngineBase::ReloadSettings() {
|
||||
proxy_pass_.clear();
|
||||
}
|
||||
else {
|
||||
proxy_address_ = QString("%1:%2").arg(proxy_host).arg(proxy_port);
|
||||
proxy_address_ = QStringLiteral("%1:%2").arg(proxy_host).arg(proxy_port);
|
||||
proxy_authentication_ = s.value("use_authentication").toBool();
|
||||
proxy_user_ = s.value("username").toString();
|
||||
proxy_pass_ = s.value("password").toString();
|
||||
|
@ -23,28 +23,28 @@ EngineDevice::EngineDevice() : card(0), device(0) {}
|
||||
|
||||
QString EngineDevice::GuessIconName() const {
|
||||
|
||||
if (description.contains("mcintosh", Qt::CaseInsensitive)) {
|
||||
return "mcintosh";
|
||||
if (description.contains(QLatin1String("mcintosh"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("mcintosh");
|
||||
}
|
||||
if (description.contains("electrocompaniet", Qt::CaseInsensitive)) {
|
||||
return "electrocompaniet";
|
||||
if (description.contains(QLatin1String("electrocompaniet"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("electrocompaniet");
|
||||
}
|
||||
if (description.contains("intel", Qt::CaseInsensitive)) {
|
||||
return "intel";
|
||||
if (description.contains(QLatin1String("intel"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("intel");
|
||||
}
|
||||
if (description.contains("realtek", Qt::CaseInsensitive)) {
|
||||
return "realtek";
|
||||
if (description.contains(QLatin1String("realtek"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("realtek");
|
||||
}
|
||||
if (description.contains("nvidia", Qt::CaseInsensitive)) {
|
||||
return "nvidia";
|
||||
if (description.contains(QLatin1String("nvidia"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("nvidia");
|
||||
}
|
||||
if (description.contains("headset", Qt::CaseInsensitive)) {
|
||||
return "headset";
|
||||
if (description.contains(QLatin1String("headset"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("headset");
|
||||
}
|
||||
if (description.contains("pulseaudio", Qt::CaseInsensitive)) {
|
||||
return "pulseaudio";
|
||||
if (description.contains(QLatin1String("pulseaudio"), Qt::CaseInsensitive)) {
|
||||
return QStringLiteral("pulseaudio");
|
||||
}
|
||||
|
||||
return "soundcard";
|
||||
return QStringLiteral("soundcard");
|
||||
|
||||
}
|
||||
|
@ -416,23 +416,23 @@ 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));
|
||||
if (metadata.startsWith("Sink/Audio", Qt::CaseInsensitive) || name == "pipewiresink" || (metadata.startsWith("Source/Audio", Qt::CaseInsensitive) && name.contains("sink"))) {
|
||||
if (metadata.startsWith(QLatin1String("Sink/Audio"), Qt::CaseInsensitive) || name == "pipewiresink" || (metadata.startsWith(QLatin1String("Source/Audio"), Qt::CaseInsensitive) && name.contains(QLatin1String("sink")))) {
|
||||
QString description = QString::fromUtf8(gst_element_factory_get_metadata(factory, GST_ELEMENT_METADATA_DESCRIPTION));
|
||||
if (name == "wasapi2sink" && description == "Stream audio to an audio capture device through WASAPI") {
|
||||
description.append("2");
|
||||
}
|
||||
else if (name == "pipewiresink" && description == "Send video to PipeWire") {
|
||||
description = "Send audio to PipeWire";
|
||||
description = QStringLiteral("Send audio to PipeWire");
|
||||
}
|
||||
OutputDetails output;
|
||||
output.name = name;
|
||||
output.description = description;
|
||||
if (output.name == kAutoSink) output.iconname = "soundcard";
|
||||
else if (output.name == kALSASink || output.name == kOSS4Sink) output.iconname = "alsa";
|
||||
else if (output.name == kJackAudioSink) output.iconname = "jack";
|
||||
else if (output.name == kPulseSink) output.iconname = "pulseaudio";
|
||||
else if (output.name == kA2DPSink || output.name == kAVDTPSink) output.iconname = "bluetooth";
|
||||
else output.iconname = "soundcard";
|
||||
if (output.name == kAutoSink) output.iconname = QStringLiteral("soundcard");
|
||||
else if (output.name == kALSASink || output.name == kOSS4Sink) output.iconname = QStringLiteral("alsa");
|
||||
else if (output.name == kJackAudioSink) output.iconname = QStringLiteral("jack");
|
||||
else if (output.name == kPulseSink) output.iconname = QStringLiteral("pulseaudio");
|
||||
else if (output.name == kA2DPSink || output.name == kAVDTPSink) output.iconname = QStringLiteral("bluetooth");
|
||||
else output.iconname = QStringLiteral("soundcard");
|
||||
outputs << output;
|
||||
}
|
||||
}
|
||||
@ -736,8 +736,8 @@ QByteArray GstEngine::FixupUrl(const QUrl &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('/');
|
||||
str = QString("cdda://%1").arg(path.takeLast());
|
||||
QString device = path.join("/");
|
||||
str = QStringLiteral("cdda://%1").arg(path.takeLast());
|
||||
QString device = path.join(QStringLiteral("/"));
|
||||
if (current_pipeline_) current_pipeline_->SetSourceDevice(device);
|
||||
}
|
||||
uri = str.toUtf8();
|
||||
@ -886,12 +886,12 @@ void GstEngine::UpdateScope(const int chunk_length) {
|
||||
|
||||
scope_chunk_++;
|
||||
|
||||
if (buffer_format_.startsWith("S16LE") ||
|
||||
buffer_format_.startsWith("U16LE") ||
|
||||
buffer_format_.startsWith("S24LE") ||
|
||||
buffer_format_.startsWith("S24_32LE") ||
|
||||
buffer_format_.startsWith("S32LE") ||
|
||||
buffer_format_.startsWith("F32LE")
|
||||
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"))
|
||||
) {
|
||||
memcpy(dest, source, bytes);
|
||||
}
|
||||
@ -919,7 +919,7 @@ void GstEngine::StreamDiscovered(GstDiscoverer*, GstDiscovererInfo *info, GError
|
||||
GstDiscovererResult result = gst_discoverer_info_get_result(info);
|
||||
if (result != GST_DISCOVERER_OK) {
|
||||
QString error_message = GSTdiscovererErrorMessage(result);
|
||||
qLog(Error) << QString("Stream discovery for %1 failed: %2").arg(discovered_url, error_message);
|
||||
qLog(Error) << QStringLiteral("Stream discovery for %1 failed: %2").arg(discovered_url, error_message);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -989,12 +989,12 @@ void GstEngine::StreamDiscoveryFinished(GstDiscoverer*, gpointer) {}
|
||||
QString GstEngine::GSTdiscovererErrorMessage(GstDiscovererResult result) {
|
||||
|
||||
switch (result) {
|
||||
case GST_DISCOVERER_URI_INVALID: return "The URI is invalid";
|
||||
case GST_DISCOVERER_TIMEOUT: return "The discovery timed-out";
|
||||
case GST_DISCOVERER_BUSY: return "The discoverer was already discovering a file";
|
||||
case GST_DISCOVERER_MISSING_PLUGINS: return "Some plugins are missing for full discovery";
|
||||
case GST_DISCOVERER_URI_INVALID: return QStringLiteral("The URI is invalid");
|
||||
case GST_DISCOVERER_TIMEOUT: return QStringLiteral("The discovery timed-out");
|
||||
case GST_DISCOVERER_BUSY: return QStringLiteral("The discoverer was already discovering a file");
|
||||
case GST_DISCOVERER_MISSING_PLUGINS: return QStringLiteral("Some plugins are missing for full discovery");
|
||||
case GST_DISCOVERER_ERROR:
|
||||
default: return "An error happened and the GError is set";
|
||||
default: return QStringLiteral("An error happened and the GError is set");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -304,29 +304,29 @@ QString GstEnginePipeline::GstStateText(const GstState state) {
|
||||
|
||||
switch (state) {
|
||||
case GST_STATE_VOID_PENDING:
|
||||
return "Pending";
|
||||
return QStringLiteral("Pending");
|
||||
case GST_STATE_NULL:
|
||||
return "Null";
|
||||
return QStringLiteral("Null");
|
||||
case GST_STATE_READY:
|
||||
return "Ready";
|
||||
return QStringLiteral("Ready");
|
||||
case GST_STATE_PAUSED:
|
||||
return "Paused";
|
||||
return QStringLiteral("Paused");
|
||||
case GST_STATE_PLAYING:
|
||||
return "Playing";
|
||||
return QStringLiteral("Playing");
|
||||
default:
|
||||
return "Unknown";
|
||||
return QStringLiteral("Unknown");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GstElement *GstEnginePipeline::CreateElement(const QString &factory_name, const QString &name, GstElement *bin, QString &error) const {
|
||||
|
||||
QString unique_name = QString("pipeline") + "-" + QString::number(id_) + "-" + (name.isEmpty() ? factory_name : name);
|
||||
QString unique_name = QStringLiteral("pipeline") + "-" + QString::number(id_) + "-" + (name.isEmpty() ? factory_name : name);
|
||||
|
||||
GstElement *element = gst_element_factory_make(factory_name.toUtf8().constData(), unique_name.toUtf8().constData());
|
||||
if (!element) {
|
||||
qLog(Error) << "GStreamer could not create the element" << factory_name << "with name" << unique_name;
|
||||
error = QString("GStreamer could not create the element %1 with name %2.").arg(factory_name, unique_name);
|
||||
error = QStringLiteral("GStreamer could not create the element %1 with name %2.").arg(factory_name, unique_name);
|
||||
}
|
||||
|
||||
if (bin && element) gst_bin_add(GST_BIN(bin), element);
|
||||
@ -346,10 +346,10 @@ bool GstEnginePipeline::InitFromUrl(const QUrl &media_url, const QUrl &stream_ur
|
||||
guint version_major = 0, version_minor = 0, version_micro = 0, version_nano = 0;
|
||||
gst_plugins_base_version(&version_major, &version_minor, &version_micro, &version_nano);
|
||||
if (QVersionNumber::compare(QVersionNumber(static_cast<int>(version_major), static_cast<int>(version_minor)), QVersionNumber(1, 22)) >= 0) {
|
||||
pipeline_ = CreateElement("playbin3", "pipeline", nullptr, error);
|
||||
pipeline_ = CreateElement(QStringLiteral("playbin3"), QStringLiteral("pipeline"), nullptr, error);
|
||||
}
|
||||
else {
|
||||
pipeline_ = CreateElement("playbin", "pipeline", nullptr, error);
|
||||
pipeline_ = CreateElement(QStringLiteral("playbin"), QStringLiteral("pipeline"), nullptr, error);
|
||||
}
|
||||
|
||||
if (!pipeline_) return false;
|
||||
@ -566,31 +566,31 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
|
||||
// Create all the other elements
|
||||
|
||||
audioqueue_ = CreateElement("queue2", "audioqueue", audiobin_, error);
|
||||
audioqueue_ = CreateElement(QStringLiteral("queue2"), QStringLiteral("audioqueue"), audiobin_, error);
|
||||
if (!audioqueue_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
audioqueueconverter_ = CreateElement("audioconvert", "audioqueueconverter", audiobin_, error);
|
||||
audioqueueconverter_ = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audioqueueconverter"), audiobin_, error);
|
||||
if (!audioqueueconverter_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GstElement *audiosinkconverter = CreateElement("audioconvert", "audiosinkconverter", audiobin_, error);
|
||||
GstElement *audiosinkconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("audiosinkconverter"), audiobin_, error);
|
||||
if (!audiosinkconverter) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create the volume element if it's enabled.
|
||||
if (volume_enabled_ && !volume_) {
|
||||
volume_sw_ = CreateElement("volume", "volume_sw", audiobin_, error);
|
||||
volume_sw_ = CreateElement(QStringLiteral("volume"), QStringLiteral("volume_sw"), audiobin_, error);
|
||||
if (!volume_sw_) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (fading_enabled_) {
|
||||
volume_fading_ = CreateElement("volume", "volume_fading", audiobin_, error);
|
||||
volume_fading_ = CreateElement(QStringLiteral("volume"), QStringLiteral("volume_fading"), audiobin_, error);
|
||||
if (!volume_fading_) {
|
||||
return false;
|
||||
}
|
||||
@ -598,7 +598,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
|
||||
// Create the stereo balancer elements if it's enabled.
|
||||
if (stereo_balancer_enabled_) {
|
||||
audiopanorama_ = CreateElement("audiopanorama", "audiopanorama", audiobin_, error);
|
||||
audiopanorama_ = CreateElement(QStringLiteral("audiopanorama"), QStringLiteral("audiopanorama"), audiobin_, error);
|
||||
if (!audiopanorama_) {
|
||||
return false;
|
||||
}
|
||||
@ -608,11 +608,11 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
|
||||
// Create the equalizer elements if it's enabled.
|
||||
if (eq_enabled_) {
|
||||
equalizer_preamp_ = CreateElement("volume", "equalizer_preamp", audiobin_, error);
|
||||
equalizer_preamp_ = CreateElement(QStringLiteral("volume"), QStringLiteral("equalizer_preamp"), audiobin_, error);
|
||||
if (!equalizer_preamp_) {
|
||||
return false;
|
||||
}
|
||||
equalizer_ = CreateElement("equalizer-nbands", "equalizer_nbands", audiobin_, error);
|
||||
equalizer_ = CreateElement(QStringLiteral("equalizer-nbands"), QStringLiteral("equalizer_nbands"), audiobin_, error);
|
||||
if (!equalizer_) {
|
||||
return false;
|
||||
}
|
||||
@ -662,15 +662,15 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
GstElement *rglimiter = nullptr;
|
||||
GstElement *rgconverter = nullptr;
|
||||
if (rg_enabled_) {
|
||||
rgvolume = CreateElement("rgvolume", "rgvolume", audiobin_, error);
|
||||
rgvolume = CreateElement(QStringLiteral("rgvolume"), QStringLiteral("rgvolume"), audiobin_, error);
|
||||
if (!rgvolume) {
|
||||
return false;
|
||||
}
|
||||
rglimiter = CreateElement("rglimiter", "rglimiter", audiobin_, error);
|
||||
rglimiter = CreateElement(QStringLiteral("rglimiter"), QStringLiteral("rglimiter"), audiobin_, error);
|
||||
if (!rglimiter) {
|
||||
return false;
|
||||
}
|
||||
rgconverter = CreateElement("audioconvert", "rgconverter", audiobin_, error);
|
||||
rgconverter = CreateElement(QStringLiteral("audioconvert"), QStringLiteral("rgconverter"), audiobin_, error);
|
||||
if (!rgconverter) {
|
||||
return false;
|
||||
}
|
||||
@ -684,7 +684,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
|
||||
// Create the EBU R 128 loudness normalization volume element if enabled.
|
||||
if (ebur128_loudness_normalization_) {
|
||||
volume_ebur128_ = CreateElement("volume", "ebur128_volume", audiobin_, error);
|
||||
volume_ebur128_ = CreateElement(QStringLiteral("volume"), QStringLiteral("ebur128_volume"), audiobin_, error);
|
||||
if (!volume_ebur128_) {
|
||||
return false;
|
||||
}
|
||||
@ -696,7 +696,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
|
||||
GstElement *bs2b = nullptr;
|
||||
if (bs2b_enabled_) {
|
||||
bs2b = CreateElement("bs2b", "bs2b", audiobin_, error);
|
||||
bs2b = CreateElement(QStringLiteral("bs2b"), QStringLiteral("bs2b"), audiobin_, error);
|
||||
if (!bs2b) {
|
||||
return false;
|
||||
}
|
||||
@ -742,7 +742,7 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
// Link all elements
|
||||
|
||||
if (!gst_element_link(audioqueue_, audioqueueconverter_)) {
|
||||
error = "Failed to link audio queue to audio queue converter.";
|
||||
error = QStringLiteral("Failed to link audio queue to audio queue converter.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -751,7 +751,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 = "Failed to link replaygain volume, limiter and converter elements.";
|
||||
error = QStringLiteral("Failed to link replaygain volume, limiter and converter elements.");
|
||||
return false;
|
||||
}
|
||||
element_link = rgconverter;
|
||||
@ -764,7 +764,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 = "Failed to link EBU R 128 volume element.";
|
||||
error = QStringLiteral("Failed to link EBU R 128 volume element.");
|
||||
return false;
|
||||
}
|
||||
gst_caps_unref(raw_fp_audio_caps);
|
||||
@ -774,7 +774,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 = "Failed to link equalizer and equalizer preamp elements.";
|
||||
error = QStringLiteral("Failed to link equalizer and equalizer preamp elements.");
|
||||
return false;
|
||||
}
|
||||
element_link = equalizer_;
|
||||
@ -783,7 +783,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 = "Failed to link audio panorama (stereo balancer).";
|
||||
error = QStringLiteral("Failed to link audio panorama (stereo balancer).");
|
||||
return false;
|
||||
}
|
||||
element_link = audiopanorama_;
|
||||
@ -792,7 +792,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 = "Failed to link software volume.";
|
||||
error = QStringLiteral("Failed to link software volume.");
|
||||
return false;
|
||||
}
|
||||
element_link = volume_sw_;
|
||||
@ -801,7 +801,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 = "Failed to link fading volume.";
|
||||
error = QStringLiteral("Failed to link fading volume.");
|
||||
return false;
|
||||
}
|
||||
element_link = volume_fading_;
|
||||
@ -811,21 +811,21 @@ bool GstEnginePipeline::InitAudioBin(QString &error) {
|
||||
if (bs2b_enabled_ && bs2b) {
|
||||
qLog(Debug) << "Enabling bs2b";
|
||||
if (!gst_element_link(element_link, bs2b)) {
|
||||
error = "Failed to link bs2b.";
|
||||
error = QStringLiteral("Failed to link bs2b.");
|
||||
return false;
|
||||
}
|
||||
element_link = bs2b;
|
||||
}
|
||||
|
||||
if (!gst_element_link(element_link, audiosinkconverter)) {
|
||||
error = "Failed to link audio sink converter.";
|
||||
error = QStringLiteral("Failed to link audio sink converter.");
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
GstCaps *caps = gst_caps_new_empty_simple("audio/x-raw");
|
||||
if (!caps) {
|
||||
error = "Failed to create caps for raw audio.";
|
||||
error = QStringLiteral("Failed to create caps for raw audio.");
|
||||
return false;
|
||||
}
|
||||
if (channels_enabled_ && channels_ > 0) {
|
||||
@ -974,7 +974,7 @@ void GstEnginePipeline::SourceSetupCallback(GstElement *playbin, GstElement *sou
|
||||
|
||||
if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "user-agent")) {
|
||||
qLog(Debug) << "Setting user-agent";
|
||||
QString user_agent = QString("%1 %2").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion());
|
||||
QString user_agent = QStringLiteral("%1 %2").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion());
|
||||
g_object_set(source, "user-agent", user_agent.toUtf8().constData(), nullptr);
|
||||
}
|
||||
|
||||
@ -1108,7 +1108,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb
|
||||
if (caps) {
|
||||
GstStructure *structure = gst_caps_get_structure(caps, 0);
|
||||
if (structure) {
|
||||
format = QString(gst_structure_get_string(structure, "format"));
|
||||
format = QString::fromUtf8(gst_structure_get_string(structure, "format"));
|
||||
gst_structure_get_int(structure, "channels", &channels);
|
||||
gst_structure_get_int(structure, "rate", &rate);
|
||||
}
|
||||
@ -1122,10 +1122,10 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb
|
||||
quint64 duration = GST_BUFFER_DURATION(buf);
|
||||
qint64 end_time = static_cast<qint64>(start_time + duration);
|
||||
|
||||
if (format.startsWith("S16LE")) {
|
||||
if (format.startsWith(QLatin1String("S16LE"))) {
|
||||
instance->logged_unsupported_analyzer_format_ = false;
|
||||
}
|
||||
else if (format.startsWith("S32LE")) {
|
||||
else if (format.startsWith(QLatin1String("S32LE"))) {
|
||||
|
||||
GstMapInfo map_info;
|
||||
gst_buffer_map(buf, &map_info, GST_MAP_READ);
|
||||
@ -1146,7 +1146,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb
|
||||
instance->logged_unsupported_analyzer_format_ = false;
|
||||
}
|
||||
|
||||
else if (format.startsWith("F32LE")) {
|
||||
else if (format.startsWith(QLatin1String("F32LE"))) {
|
||||
|
||||
GstMapInfo map_info;
|
||||
gst_buffer_map(buf, &map_info, GST_MAP_READ);
|
||||
@ -1167,7 +1167,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb
|
||||
|
||||
instance->logged_unsupported_analyzer_format_ = false;
|
||||
}
|
||||
else if (format.startsWith("S24LE")) {
|
||||
else if (format.startsWith(QLatin1String("S24LE"))) {
|
||||
|
||||
GstMapInfo map_info;
|
||||
gst_buffer_map(buf, &map_info, GST_MAP_READ);
|
||||
@ -1190,7 +1190,7 @@ GstPadProbeReturn GstEnginePipeline::BufferProbeCallback(GstPad *pad, GstPadProb
|
||||
|
||||
instance->logged_unsupported_analyzer_format_ = false;
|
||||
}
|
||||
else if (format.startsWith("S24_32LE")) {
|
||||
else if (format.startsWith(QLatin1String("S24_32LE"))) {
|
||||
|
||||
GstMapInfo map_info;
|
||||
gst_buffer_map(buf, &map_info, GST_MAP_READ);
|
||||
@ -1448,7 +1448,7 @@ void GstEnginePipeline::ErrorMessageReceived(GstMessage *msg) {
|
||||
qLog(Error) << __FUNCTION__ << "ID:" << id() << "Domain:" << domain << "Code:" << code << "Error:" << message;
|
||||
qLog(Error) << __FUNCTION__ << "ID:" << id() << "Domain:" << domain << "Code:" << code << "Debug:" << debugstr;
|
||||
|
||||
if (!redirect_url_.isEmpty() && debugstr.contains("A redirect message was posted on the bus and should have been handled by the application.")) {
|
||||
if (!redirect_url_.isEmpty() && debugstr.contains(QLatin1String("A redirect message was posted on the bus and should have been handled by the application."))) {
|
||||
// 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;
|
||||
@ -1485,8 +1485,8 @@ 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(" - ")) {
|
||||
title_splitted = engine_metadata.title.split(" - ");
|
||||
if (engine_metadata.title.contains(QLatin1String(" - "))) {
|
||||
title_splitted = engine_metadata.title.split(QStringLiteral(" - "));
|
||||
}
|
||||
else if (engine_metadata.title.contains('~')) {
|
||||
title_splitted = engine_metadata.title.split('~');
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include "pulsedevicefinder.h"
|
||||
#include "enginedevice.h"
|
||||
|
||||
PulseDeviceFinder::PulseDeviceFinder() : DeviceFinder("pulseaudio", { "pulseaudio", "pulse", "pulsesink" }), mainloop_(nullptr), context_(nullptr) {}
|
||||
PulseDeviceFinder::PulseDeviceFinder() : DeviceFinder(QStringLiteral("pulseaudio"), { "pulseaudio", "pulse", "pulsesink" }), mainloop_(nullptr), context_(nullptr) {}
|
||||
|
||||
bool PulseDeviceFinder::Initialize() {
|
||||
|
||||
|
@ -226,8 +226,8 @@ EngineBase::OutputDetailsList VLCEngine::GetOutputsList() const {
|
||||
|
||||
OutputDetailsList outputs;
|
||||
OutputDetails output_auto;
|
||||
output_auto.name = "auto";
|
||||
output_auto.description = "Automatically detected";
|
||||
output_auto.name = QStringLiteral("auto");
|
||||
output_auto.description = QStringLiteral("Automatically detected");
|
||||
outputs << output_auto;
|
||||
|
||||
libvlc_audio_output_t *audio_output_list = libvlc_audio_output_list_get(instance_);
|
||||
@ -235,12 +235,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 == "auto") output.iconname = "soundcard";
|
||||
else if ((output.name == "alsa")||(output.name == "oss")) output.iconname = "alsa";
|
||||
else if (output.name== "jack") output.iconname = "jack";
|
||||
else if (output.name == "pulse") output.iconname = "pulseaudio";
|
||||
else if (output.name == "afile") output.iconname = "document-new";
|
||||
else output.iconname = "soundcard";
|
||||
if (output.name == "auto") output.iconname = QStringLiteral("soundcard");
|
||||
else if ((output.name == "alsa")||(output.name == "oss")) output.iconname = QStringLiteral("alsa");
|
||||
else if (output.name== "jack") output.iconname = QStringLiteral("jack");
|
||||
else if (output.name == "pulse") output.iconname = QStringLiteral("pulseaudio");
|
||||
else if (output.name == "afile") output.iconname = QStringLiteral("document-new");
|
||||
else output.iconname = QStringLiteral("soundcard");
|
||||
outputs << output;
|
||||
}
|
||||
libvlc_audio_output_list_release(audio_output_list);
|
||||
|
@ -67,7 +67,7 @@ class VLCEngine : public EngineBase {
|
||||
|
||||
OutputDetailsList GetOutputsList() const override;
|
||||
bool ValidOutput(const QString &output) override;
|
||||
QString DefaultOutput() override { return ""; }
|
||||
QString DefaultOutput() override { return QLatin1String(""); }
|
||||
bool CustomDeviceSupport(const QString &output) override;
|
||||
bool ALSADeviceSupport(const QString &output) override;
|
||||
bool ExclusiveModeSupport(const QString &output) override;
|
||||
|
@ -60,8 +60,8 @@ Equalizer::Equalizer(QWidget *parent)
|
||||
ui_->setupUi(this);
|
||||
|
||||
// Icons
|
||||
ui_->preset_del->setIcon(IconLoader::Load("list-remove"));
|
||||
ui_->preset_save->setIcon(IconLoader::Load("document-save"));
|
||||
ui_->preset_del->setIcon(IconLoader::Load(QStringLiteral("list-remove")));
|
||||
ui_->preset_save->setIcon(IconLoader::Load(QStringLiteral("document-save")));
|
||||
|
||||
preamp_ = AddSlider(tr("Pre-amp"));
|
||||
|
||||
|
@ -116,9 +116,9 @@ void GlobalShortcutsBackendGnome::DoUnregister() {
|
||||
void GlobalShortcutsBackendGnome::GnomeMediaKeyPressed(const QString&, const QString &key) {
|
||||
|
||||
auto shortcuts = manager_->shortcuts();
|
||||
if (key == "Play") shortcuts["play_pause"].action->trigger();
|
||||
if (key == "Stop") shortcuts["stop"].action->trigger();
|
||||
if (key == "Next") shortcuts["next_track"].action->trigger();
|
||||
if (key == "Previous") shortcuts["prev_track"].action->trigger();
|
||||
if (key == "Play") shortcuts[QStringLiteral("play_pause")].action->trigger();
|
||||
if (key == "Stop") shortcuts[QStringLiteral("stop")].action->trigger();
|
||||
if (key == "Next") shortcuts[QStringLiteral("next_track")].action->trigger();
|
||||
if (key == "Previous") shortcuts[QStringLiteral("prev_track")].action->trigger();
|
||||
|
||||
}
|
||||
|
@ -116,9 +116,9 @@ void GlobalShortcutsBackendMate::DoUnregister() {
|
||||
void GlobalShortcutsBackendMate::MateMediaKeyPressed(const QString&, const QString &key) {
|
||||
|
||||
auto shortcuts = manager_->shortcuts();
|
||||
if (key == "Play") shortcuts["play_pause"].action->trigger();
|
||||
if (key == "Stop") shortcuts["stop"].action->trigger();
|
||||
if (key == "Next") shortcuts["next_track"].action->trigger();
|
||||
if (key == "Previous") shortcuts["prev_track"].action->trigger();
|
||||
if (key == "Play") shortcuts[QStringLiteral("play_pause")].action->trigger();
|
||||
if (key == "Stop") shortcuts[QStringLiteral("stop")].action->trigger();
|
||||
if (key == "Next") shortcuts[QStringLiteral("next_track")].action->trigger();
|
||||
if (key == "Previous") shortcuts[QStringLiteral("prev_track")].action->trigger();
|
||||
|
||||
}
|
||||
|
@ -35,19 +35,19 @@ QString GlobalShortcutsBackend::name() const {
|
||||
|
||||
switch (type_) {
|
||||
case Type::None:
|
||||
return "None";
|
||||
return QStringLiteral("None");
|
||||
case Type::KDE:
|
||||
return "KDE";
|
||||
return QStringLiteral("KDE");
|
||||
case Type::Gnome:
|
||||
return "Gnome";
|
||||
return QStringLiteral("Gnome");
|
||||
case Type::Mate:
|
||||
return "Mate";
|
||||
return QStringLiteral("Mate");
|
||||
case Type::X11:
|
||||
return "X11";
|
||||
return QStringLiteral("X11");
|
||||
case Type::macOS:
|
||||
return "macOS";
|
||||
return QStringLiteral("macOS");
|
||||
case Type::Win:
|
||||
return "Windows";
|
||||
return QStringLiteral("Windows");
|
||||
}
|
||||
|
||||
return QString();
|
||||
|
@ -58,25 +58,25 @@ GlobalShortcutsManager::GlobalShortcutsManager(QWidget *parent) : QWidget(parent
|
||||
settings_.beginGroup(GlobalShortcutsSettingsPage::kSettingsGroup);
|
||||
|
||||
// Create actions
|
||||
AddShortcut("play", tr("Play"), std::bind(&GlobalShortcutsManager::Play, this));
|
||||
AddShortcut("pause", tr("Pause"), std::bind(&GlobalShortcutsManager::Pause, this));
|
||||
AddShortcut("play_pause", tr("Play/Pause"), std::bind(&GlobalShortcutsManager::PlayPause, this), QKeySequence(Qt::Key_MediaPlay));
|
||||
AddShortcut("stop", tr("Stop"), std::bind(&GlobalShortcutsManager::Stop, this), QKeySequence(Qt::Key_MediaStop));
|
||||
AddShortcut("stop_after", tr("Stop playing after current track"), std::bind(&GlobalShortcutsManager::StopAfter, this));
|
||||
AddShortcut("next_track", tr("Next track"), std::bind(&GlobalShortcutsManager::Next, this), QKeySequence(Qt::Key_MediaNext));
|
||||
AddShortcut("prev_track", tr("Previous track"), std::bind(&GlobalShortcutsManager::Previous, this), QKeySequence(Qt::Key_MediaPrevious));
|
||||
AddShortcut("inc_volume", tr("Increase volume"), std::bind(&GlobalShortcutsManager::IncVolume, this));
|
||||
AddShortcut("dec_volume", tr("Decrease volume"), std::bind(&GlobalShortcutsManager::DecVolume, this));
|
||||
AddShortcut("mute", tr("Mute"), std::bind(&GlobalShortcutsManager::Mute, this));
|
||||
AddShortcut("seek_forward", tr("Seek forward"), std::bind(&GlobalShortcutsManager::SeekForward, this));
|
||||
AddShortcut("seek_backward", tr("Seek backward"), std::bind(&GlobalShortcutsManager::SeekBackward, this));
|
||||
AddShortcut("show_hide", tr("Show/Hide"), std::bind(&GlobalShortcutsManager::ShowHide, this));
|
||||
AddShortcut("show_osd", tr("Show OSD"), std::bind(&GlobalShortcutsManager::ShowOSD, this));
|
||||
AddShortcut("toggle_pretty_osd", tr("Toggle Pretty OSD"), std::bind(&GlobalShortcutsManager::TogglePrettyOSD, this)); // Toggling possible only for pretty OSD
|
||||
AddShortcut("shuffle_mode", tr("Change shuffle mode"), std::bind(&GlobalShortcutsManager::CycleShuffleMode, this));
|
||||
AddShortcut("repeat_mode", tr("Change repeat mode"), std::bind(&GlobalShortcutsManager::CycleRepeatMode, this));
|
||||
AddShortcut("toggle_scrobbling", tr("Enable/disable scrobbling"), std::bind(&GlobalShortcutsManager::ToggleScrobbling, this));
|
||||
AddShortcut("love", tr("Love"), std::bind(&GlobalShortcutsManager::Love, this));
|
||||
AddShortcut(QStringLiteral("play"), tr("Play"), std::bind(&GlobalShortcutsManager::Play, this));
|
||||
AddShortcut(QStringLiteral("pause"), tr("Pause"), std::bind(&GlobalShortcutsManager::Pause, this));
|
||||
AddShortcut(QStringLiteral("play_pause"), tr("Play/Pause"), std::bind(&GlobalShortcutsManager::PlayPause, this), QKeySequence(Qt::Key_MediaPlay));
|
||||
AddShortcut(QStringLiteral("stop"), tr("Stop"), std::bind(&GlobalShortcutsManager::Stop, this), QKeySequence(Qt::Key_MediaStop));
|
||||
AddShortcut(QStringLiteral("stop_after"), tr("Stop playing after current track"), std::bind(&GlobalShortcutsManager::StopAfter, this));
|
||||
AddShortcut(QStringLiteral("next_track"), tr("Next track"), std::bind(&GlobalShortcutsManager::Next, this), QKeySequence(Qt::Key_MediaNext));
|
||||
AddShortcut(QStringLiteral("prev_track"), tr("Previous track"), std::bind(&GlobalShortcutsManager::Previous, this), QKeySequence(Qt::Key_MediaPrevious));
|
||||
AddShortcut(QStringLiteral("inc_volume"), tr("Increase volume"), std::bind(&GlobalShortcutsManager::IncVolume, this));
|
||||
AddShortcut(QStringLiteral("dec_volume"), tr("Decrease volume"), std::bind(&GlobalShortcutsManager::DecVolume, this));
|
||||
AddShortcut(QStringLiteral("mute"), tr("Mute"), std::bind(&GlobalShortcutsManager::Mute, this));
|
||||
AddShortcut(QStringLiteral("seek_forward"), tr("Seek forward"), std::bind(&GlobalShortcutsManager::SeekForward, this));
|
||||
AddShortcut(QStringLiteral("seek_backward"), tr("Seek backward"), std::bind(&GlobalShortcutsManager::SeekBackward, this));
|
||||
AddShortcut(QStringLiteral("show_hide"), tr("Show/Hide"), std::bind(&GlobalShortcutsManager::ShowHide, this));
|
||||
AddShortcut(QStringLiteral("show_osd"), tr("Show OSD"), std::bind(&GlobalShortcutsManager::ShowOSD, this));
|
||||
AddShortcut(QStringLiteral("toggle_pretty_osd"), tr("Toggle Pretty OSD"), std::bind(&GlobalShortcutsManager::TogglePrettyOSD, this)); // Toggling possible only for pretty OSD
|
||||
AddShortcut(QStringLiteral("shuffle_mode"), tr("Change shuffle mode"), std::bind(&GlobalShortcutsManager::CycleShuffleMode, this));
|
||||
AddShortcut(QStringLiteral("repeat_mode"), tr("Change repeat mode"), std::bind(&GlobalShortcutsManager::CycleRepeatMode, this));
|
||||
AddShortcut(QStringLiteral("toggle_scrobbling"), tr("Enable/disable scrobbling"), std::bind(&GlobalShortcutsManager::ToggleScrobbling, this));
|
||||
AddShortcut(QStringLiteral("love"), tr("Love"), std::bind(&GlobalShortcutsManager::Love, this));
|
||||
|
||||
// Create backends - these do the actual shortcut registration
|
||||
|
||||
|
@ -57,7 +57,7 @@ InternetCollectionView::InternetCollectionView(QWidget *parent)
|
||||
total_song_count_(0),
|
||||
total_artist_count_(0),
|
||||
total_album_count_(0),
|
||||
nomusic_(":/pictures/nomusic.png"),
|
||||
nomusic_(QStringLiteral(":/pictures/nomusic.png")),
|
||||
context_menu_(nullptr),
|
||||
load_(nullptr),
|
||||
add_to_playlist_(nullptr),
|
||||
@ -76,7 +76,7 @@ InternetCollectionView::InternetCollectionView(QWidget *parent)
|
||||
setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||
SetAutoOpen(false);
|
||||
|
||||
setStyleSheet("QTreeView::item{padding-top:1px;}");
|
||||
setStyleSheet(QStringLiteral("QTreeView::item{padding-top:1px;}"));
|
||||
|
||||
}
|
||||
|
||||
@ -313,18 +313,18 @@ void InternetCollectionView::contextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu(this);
|
||||
add_to_playlist_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Append to current playlist"), this, &InternetCollectionView::AddToPlaylist);
|
||||
load_ = context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Replace current playlist"), this, &InternetCollectionView::Load);
|
||||
open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), this, &InternetCollectionView::OpenInNewPlaylist);
|
||||
add_to_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &InternetCollectionView::AddToPlaylist);
|
||||
load_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &InternetCollectionView::Load);
|
||||
open_in_new_playlist_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &InternetCollectionView::OpenInNewPlaylist);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue track"), this, &InternetCollectionView::AddToPlaylistEnqueue);
|
||||
add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue to play next"), this, &InternetCollectionView::AddToPlaylistEnqueueNext);
|
||||
add_to_playlist_enqueue_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &InternetCollectionView::AddToPlaylistEnqueue);
|
||||
add_to_playlist_enqueue_next_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue to play next"), this, &InternetCollectionView::AddToPlaylistEnqueueNext);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
if (favorite_) {
|
||||
remove_songs_ = context_menu_->addAction(IconLoader::Load("edit-delete"), tr("Remove from favorites"), this, &InternetCollectionView::RemoveSelectedSongs);
|
||||
remove_songs_ = context_menu_->addAction(IconLoader::Load(QStringLiteral("edit-delete")), tr("Remove from favorites"), this, &InternetCollectionView::RemoveSelectedSongs);
|
||||
context_menu_->addSeparator();
|
||||
}
|
||||
|
||||
|
@ -42,8 +42,8 @@ InternetSearchModel::InternetSearchModel(InternetServicePtr service, QObject *pa
|
||||
service_(service),
|
||||
proxy_(nullptr),
|
||||
use_pretty_covers_(true),
|
||||
artist_icon_(IconLoader::Load("folder-sound")),
|
||||
album_icon_(IconLoader::Load("cdcase")) {
|
||||
artist_icon_(IconLoader::Load(QStringLiteral("folder-sound"))),
|
||||
album_icon_(IconLoader::Load(QStringLiteral("cdcase"))) {
|
||||
|
||||
group_by_[0] = CollectionModel::GroupBy::AlbumArtist;
|
||||
group_by_[1] = CollectionModel::GroupBy::AlbumDisc;
|
||||
@ -91,7 +91,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem
|
||||
case CollectionModel::GroupBy::AlbumArtist:
|
||||
if (s.is_compilation()) {
|
||||
display_text = tr("Various artists");
|
||||
sort_text = "aaaaaa";
|
||||
sort_text = QStringLiteral("aaaaaa");
|
||||
}
|
||||
else {
|
||||
display_text = CollectionModel::TextOrUnknown(s.effective_albumartist());
|
||||
@ -103,7 +103,7 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem
|
||||
case CollectionModel::GroupBy::Artist:
|
||||
if (s.is_compilation()) {
|
||||
display_text = tr("Various artists");
|
||||
sort_text = "aaaaaa";
|
||||
sort_text = QStringLiteral("aaaaaa");
|
||||
}
|
||||
else {
|
||||
display_text = CollectionModel::TextOrUnknown(s.artist());
|
||||
@ -221,10 +221,10 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem
|
||||
}
|
||||
else {
|
||||
if (s.bitdepth() <= 0) {
|
||||
display_text = QString("%1 (%2)").arg(s.TextForFiletype(), QString::number(s.samplerate() / 1000.0, 'G', 5));
|
||||
display_text = QStringLiteral("%1 (%2)").arg(s.TextForFiletype(), QString::number(s.samplerate() / 1000.0, 'G', 5));
|
||||
}
|
||||
else {
|
||||
display_text = QString("%1 (%2/%3)").arg(s.TextForFiletype(), QString::number(s.samplerate() / 1000.0, 'G', 5), QString::number(s.bitdepth()));
|
||||
display_text = QStringLiteral("%1 (%2/%3)").arg(s.TextForFiletype(), QString::number(s.samplerate() / 1000.0, 'G', 5), QString::number(s.bitdepth()));
|
||||
}
|
||||
}
|
||||
sort_text = display_text;
|
||||
@ -250,8 +250,8 @@ QStandardItem *InternetSearchModel::BuildContainers(const Song &s, QStandardItem
|
||||
return parent;
|
||||
}
|
||||
|
||||
if (display_text.isEmpty()) display_text = "Unknown";
|
||||
if (sort_text.isEmpty()) sort_text = "Unknown";
|
||||
if (display_text.isEmpty()) display_text = QStringLiteral("Unknown");
|
||||
if (sort_text.isEmpty()) sort_text = QStringLiteral("Unknown");
|
||||
|
||||
// Find a container for this level
|
||||
key->group_[level] = display_text + unique_tag;
|
||||
|
@ -114,12 +114,12 @@ InternetSearchView::InternetSearchView(QWidget *parent)
|
||||
ui_->search->installEventFilter(this);
|
||||
ui_->results_stack->installEventFilter(this);
|
||||
|
||||
ui_->settings->setIcon(IconLoader::Load("configure"));
|
||||
ui_->settings->setIcon(IconLoader::Load(QStringLiteral("configure")));
|
||||
|
||||
// Set the appearance of the results list
|
||||
ui_->results->setItemDelegate(new InternetSearchItemDelegate(this));
|
||||
ui_->results->setAttribute(Qt::WA_MacShowFocusRect, false);
|
||||
ui_->results->setStyleSheet("QTreeView::item{padding-top:1px;}");
|
||||
ui_->results->setStyleSheet(QStringLiteral("QTreeView::item{padding-top:1px;}"));
|
||||
|
||||
// Show the help page initially
|
||||
ui_->results_stack->setCurrentWidget(ui_->help_page);
|
||||
@ -176,7 +176,7 @@ void InternetSearchView::Init(Application *app, InternetServicePtr service) {
|
||||
QMenu *settings_menu = new QMenu(this);
|
||||
settings_menu->addActions(group_by_actions_->actions());
|
||||
settings_menu->addSeparator();
|
||||
settings_menu->addAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
settings_menu->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
ui_->settings->setMenu(settings_menu);
|
||||
|
||||
swap_models_timer_->setSingleShot(true);
|
||||
@ -313,36 +313,36 @@ bool InternetSearchView::ResultsContextMenuEvent(QContextMenuEvent *e) {
|
||||
|
||||
if (!context_menu_) {
|
||||
context_menu_ = new QMenu(this);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Append to current playlist"), this, &InternetSearchView::AddSelectedToPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("media-playback-start"), tr("Replace current playlist"), this, &InternetSearchView::LoadSelected);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("document-new"), tr("Open in new playlist"), this, &InternetSearchView::OpenSelectedInNewPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Append to current playlist"), this, &InternetSearchView::AddSelectedToPlaylist);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("media-playback-start")), tr("Replace current playlist"), this, &InternetSearchView::LoadSelected);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("document-new")), tr("Open in new playlist"), this, &InternetSearchView::OpenSelectedInNewPlaylist);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("go-next"), tr("Queue track"), this, &InternetSearchView::AddSelectedToPlaylistEnqueue);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("go-next")), tr("Queue track"), this, &InternetSearchView::AddSelectedToPlaylistEnqueue);
|
||||
|
||||
context_menu_->addSeparator();
|
||||
|
||||
if (service_->artists_collection_model() || service_->albums_collection_model() || service_->songs_collection_model()) {
|
||||
if (service_->artists_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("folder-new"), tr("Add to artists"), this, &InternetSearchView::AddArtists);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to artists"), this, &InternetSearchView::AddArtists);
|
||||
}
|
||||
if (service_->albums_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("folder-new"), tr("Add to albums"), this, &InternetSearchView::AddAlbums);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to albums"), this, &InternetSearchView::AddAlbums);
|
||||
}
|
||||
if (service_->songs_collection_model()) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("folder-new"), tr("Add to songs"), this, &InternetSearchView::AddSongs);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("folder-new")), tr("Add to songs"), this, &InternetSearchView::AddSongs);
|
||||
}
|
||||
context_menu_->addSeparator();
|
||||
}
|
||||
|
||||
if (ui_->results->selectionModel() && ui_->results->selectionModel()->selectedRows().length() == 1) {
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load("search"), tr("Search for this"), this, &InternetSearchView::SearchForThis);
|
||||
context_actions_ << context_menu_->addAction(IconLoader::Load(QStringLiteral("search")), tr("Search for this"), this, &InternetSearchView::SearchForThis);
|
||||
}
|
||||
|
||||
context_menu_->addSeparator();
|
||||
context_menu_->addMenu(tr("Group by"))->addActions(group_by_actions_->actions());
|
||||
|
||||
context_menu_->addAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
context_menu_->addAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this, &InternetSearchView::OpenSettingsDialog);
|
||||
|
||||
}
|
||||
|
||||
@ -433,14 +433,14 @@ void InternetSearchView::SwapModels() {
|
||||
|
||||
QStringList InternetSearchView::TokenizeQuery(const QString &query) {
|
||||
|
||||
QStringList tokens(query.split(QRegularExpression("\\s+")));
|
||||
QStringList tokens(query.split(QRegularExpression(QStringLiteral("\\s+"))));
|
||||
|
||||
for (QStringList::iterator it = tokens.begin(); it != tokens.end(); ++it) {
|
||||
(*it).remove('(');
|
||||
(*it).remove(')');
|
||||
(*it).remove('"');
|
||||
|
||||
const qint64 colon = (*it).indexOf(":");
|
||||
const qint64 colon = (*it).indexOf(QLatin1String(":"));
|
||||
if (colon != -1) {
|
||||
(*it).remove(0, colon + 1);
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ InternetSongsView::InternetSongsView(Application *app, InternetServicePtr servic
|
||||
ui_->filter_widget->SetSettingsGroup(settings_group);
|
||||
ui_->filter_widget->Init(service_->songs_collection_model());
|
||||
|
||||
QAction *action_configure = new QAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this);
|
||||
QAction *action_configure = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::DescriptionForSource(service_->source())), this);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &InternetSongsView::OpenSettingsDialog);
|
||||
ui_->filter_widget->AddMenuAction(action_configure);
|
||||
|
||||
|
@ -59,7 +59,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
QObject::connect(ui_->search_view, &InternetSearchView::AddAlbumsSignal, &*service_, &InternetService::AddAlbums);
|
||||
QObject::connect(ui_->search_view, &InternetSearchView::AddSongsSignal, &*service_, &InternetService::AddSongs);
|
||||
|
||||
QAction *action_configure = new QAction(IconLoader::Load("configure"), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this);
|
||||
QAction *action_configure = new QAction(IconLoader::Load(QStringLiteral("configure")), tr("Configure %1...").arg(Song::TextForSource(service_->source())), this);
|
||||
QObject::connect(action_configure, &QAction::triggered, this, &InternetTabsView::OpenSettingsDialog);
|
||||
|
||||
if (service_->artists_collection_model()) {
|
||||
@ -68,7 +68,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->artists_collection->view()->setModel(service_->artists_collection_sort_model());
|
||||
ui_->artists_collection->view()->SetFilter(ui_->artists_collection->filter_widget());
|
||||
ui_->artists_collection->filter_widget()->SetSettingsGroup(settings_group);
|
||||
ui_->artists_collection->filter_widget()->SetSettingsPrefix("artists");
|
||||
ui_->artists_collection->filter_widget()->SetSettingsPrefix(QStringLiteral("artists"));
|
||||
ui_->artists_collection->filter_widget()->Init(service_->artists_collection_model());
|
||||
ui_->artists_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
@ -100,7 +100,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->albums_collection->view()->setModel(service_->albums_collection_sort_model());
|
||||
ui_->albums_collection->view()->SetFilter(ui_->albums_collection->filter_widget());
|
||||
ui_->albums_collection->filter_widget()->SetSettingsGroup(settings_group);
|
||||
ui_->albums_collection->filter_widget()->SetSettingsPrefix("albums");
|
||||
ui_->albums_collection->filter_widget()->SetSettingsPrefix(QStringLiteral("albums"));
|
||||
ui_->albums_collection->filter_widget()->Init(service_->albums_collection_model());
|
||||
ui_->albums_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
@ -132,7 +132,7 @@ InternetTabsView::InternetTabsView(Application *app, InternetServicePtr service,
|
||||
ui_->songs_collection->view()->setModel(service_->songs_collection_sort_model());
|
||||
ui_->songs_collection->view()->SetFilter(ui_->songs_collection->filter_widget());
|
||||
ui_->songs_collection->filter_widget()->SetSettingsGroup(settings_group);
|
||||
ui_->songs_collection->filter_widget()->SetSettingsPrefix("songs");
|
||||
ui_->songs_collection->filter_widget()->SetSettingsPrefix(QStringLiteral("songs"));
|
||||
ui_->songs_collection->filter_widget()->Init(service_->songs_collection_model());
|
||||
ui_->songs_collection->filter_widget()->AddMenuAction(action_configure);
|
||||
|
||||
|
@ -55,10 +55,10 @@ bool LocalRedirectServer::Listen() {
|
||||
return false;
|
||||
}
|
||||
|
||||
url_.setScheme("http");
|
||||
url_.setHost("localhost");
|
||||
url_.setScheme(QStringLiteral("http"));
|
||||
url_.setHost(QStringLiteral("localhost"));
|
||||
url_.setPort(serverPort());
|
||||
url_.setPath("/");
|
||||
url_.setPath(QStringLiteral("/"));
|
||||
QObject::connect(this, &QTcpServer::newConnection, this, &LocalRedirectServer::NewConnection);
|
||||
|
||||
return true;
|
||||
@ -86,7 +86,7 @@ void LocalRedirectServer::incomingConnection(qintptr socket_descriptor) {
|
||||
if (!tcp_socket->setSocketDescriptor(socket_descriptor)) {
|
||||
delete tcp_socket;
|
||||
close();
|
||||
error_ = "Unable to set socket descriptor";
|
||||
error_ = QStringLiteral("Unable to set socket descriptor");
|
||||
emit Finished();
|
||||
return;
|
||||
}
|
||||
@ -124,12 +124,12 @@ void LocalRedirectServer::ReadyRead() {
|
||||
|
||||
void LocalRedirectServer::WriteTemplate() const {
|
||||
|
||||
QFile page_file(":/html/oauthsuccess.html");
|
||||
QFile page_file(QStringLiteral(":/html/oauthsuccess.html"));
|
||||
if (!page_file.open(QIODevice::ReadOnly)) return;
|
||||
QString page_data = QString::fromUtf8(page_file.readAll());
|
||||
page_file.close();
|
||||
|
||||
QRegularExpression tr_regexp("tr\\(\"([^\"]+)\"\\)");
|
||||
QRegularExpression tr_regexp(QStringLiteral("tr\\(\"([^\"]+)\"\\)"));
|
||||
qint64 offset = 0;
|
||||
forever {
|
||||
QRegularExpressionMatch re_match = tr_regexp.match(page_data, offset);
|
||||
@ -151,7 +151,7 @@ void LocalRedirectServer::WriteTemplate() const {
|
||||
.pixmap(16)
|
||||
.toImage()
|
||||
.save(&image_buffer, "PNG");
|
||||
page_data.replace("@IMAGE_DATA@", image_buffer.data().toBase64());
|
||||
page_data.replace(QLatin1String("@IMAGE_DATA@"), image_buffer.data().toBase64());
|
||||
image_buffer.close();
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ const char AzLyricsComLyricsProvider::kEndTag[] = "</div>";
|
||||
const char AzLyricsComLyricsProvider::kLyricsStart[] = "<!-- Usage of azlyrics.com content by any third-party lyrics provider is prohibited by our licensing agreement. Sorry about that. -->";
|
||||
|
||||
AzLyricsComLyricsProvider::AzLyricsComLyricsProvider(SharedPtr<NetworkAccessManager> network, QObject *parent)
|
||||
: HtmlLyricsProvider("azlyrics.com", true, kStartTag, kEndTag, kLyricsStart, false, network, parent) {}
|
||||
: HtmlLyricsProvider(QStringLiteral("azlyrics.com"), true, kStartTag, kEndTag, kLyricsStart, false, network, parent) {}
|
||||
|
||||
QUrl AzLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) {
|
||||
|
||||
@ -44,6 +44,6 @@ QUrl AzLyricsComLyricsProvider::Url(const LyricsSearchRequest &request) {
|
||||
|
||||
QString AzLyricsComLyricsProvider::StringFixup(const QString &text) {
|
||||
|
||||
return Utilities::Transliterate(text).remove(QRegularExpression("[^\\w0-9\\-]")).toLower();
|
||||
return Utilities::Transliterate(text).remove(QRegularExpression(QStringLiteral("[^\\w0-9\\-]"))).toLower();
|
||||
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user