Disable automatic conversions from 8-bit strings

This commit is contained in:
Jonas Kvinge
2024-04-11 02:56:01 +02:00
parent 58944993b8
commit 0c6872b352
310 changed files with 2501 additions and 2332 deletions

View File

@@ -51,7 +51,7 @@ void SmartPlaylistSearch::Reset() {
QString SmartPlaylistSearch::ToSql(const QString &songs_table) const {
QString sql = "SELECT ROWID," + Song::kColumnSpec + " FROM " + songs_table;
QString sql = QStringLiteral("SELECT ROWID,") + Song::kColumnSpec + QStringLiteral(" FROM ") + songs_table;
// Add search terms
QStringList where_clauses;
@@ -63,16 +63,16 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const {
if (!terms_.isEmpty() && search_type_ != SearchType::All) {
QString boolean_op = search_type_ == SearchType::And ? QStringLiteral(" AND ") : QStringLiteral(" OR ");
where_clauses << "(" + term_where_clauses.join(boolean_op) + ")";
where_clauses << QStringLiteral("(") + term_where_clauses.join(boolean_op) + QStringLiteral(")");
}
// Restrict the IDs of songs if we're making a dynamic playlist
if (!id_not_in_.isEmpty()) {
QString numbers;
for (int id : id_not_in_) {
numbers += (numbers.isEmpty() ? "" : ",") + QString::number(id);
numbers += (numbers.isEmpty() ? QLatin1String("") : QStringLiteral(",")) + QString::number(id);
}
where_clauses << "(ROWID NOT IN (" + numbers + "))";
where_clauses << QStringLiteral("(ROWID NOT IN (") + numbers + QStringLiteral("))");
}
// We never want to include songs that have been deleted,
@@ -80,7 +80,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const {
where_clauses << QStringLiteral("unavailable = 0");
if (!where_clauses.isEmpty()) {
sql += " WHERE " + where_clauses.join(QStringLiteral(" AND "));
sql += QStringLiteral(" WHERE ") + where_clauses.join(QStringLiteral(" AND "));
}
// Add sort by
@@ -88,7 +88,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const {
sql += QLatin1String(" ORDER BY random()");
}
else {
sql += " ORDER BY " + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == SortType::FieldAsc ? " ASC" : " DESC");
sql += QStringLiteral(" ORDER BY ") + SmartPlaylistSearchTerm::FieldColumnName(sort_field_) + (sort_type_ == SortType::FieldAsc ? QStringLiteral(" ASC") : QStringLiteral(" DESC"));
}
// Add limit
@@ -96,7 +96,7 @@ QString SmartPlaylistSearch::ToSql(const QString &songs_table) const {
sql += QStringLiteral(" LIMIT %1 OFFSET %2").arg(limit_).arg(first_item_);
}
else if (limit_ != -1) {
sql += " LIMIT " + QString::number(limit_);
sql += QStringLiteral(" LIMIT ") + QString::number(limit_);
}
//qLog(Debug) << sql;

View File

@@ -39,7 +39,7 @@ QString SmartPlaylistSearchTerm::ToSql() const {
QString col = FieldColumnName(field_);
QString date = DateName(datetype_, true);
QString value = value_.toString();
value.replace('\'', QLatin1String("''"));
value.replace(QLatin1Char('\''), QLatin1String("''"));
if (field_ == Field::Filetype) {
Song::FileType filetype = Song::FiletypeByExtension(value);
@@ -62,10 +62,10 @@ QString SmartPlaylistSearchTerm::ToSql() const {
if (TypeOf(field_) == Type::Date) {
if (special_date_query) {
// We have a numeric date, consider also the time for more precision
col = "DATETIME(" + col + ", 'unixepoch', 'localtime')";
col = QStringLiteral("DATETIME(") + col + QStringLiteral(", 'unixepoch', 'localtime')");
second_value = second_value_.toString();
second_value.replace('\'', QLatin1String("''"));
if (date == "weeks") {
second_value.replace(QLatin1Char('\''), QLatin1String("''"));
if (date == QStringLiteral("weeks")) {
// Sqlite doesn't know weeks, transform them to days
date = QStringLiteral("days");
value = QString::number(value_.toInt() * 7);
@@ -76,80 +76,80 @@ QString SmartPlaylistSearchTerm::ToSql() const {
// We have the exact date
// The calendar widget specifies no time so ditch the possible time part
// from integers representing the dates.
col = "DATE(" + col + ", 'unixepoch', 'localtime')";
value = "DATE(" + value + ", 'unixepoch', 'localtime')";
col = QStringLiteral("DATE(") + col + QStringLiteral(", 'unixepoch', 'localtime')");
value = QStringLiteral("DATE(") + value + QStringLiteral(", 'unixepoch', 'localtime')");
}
}
else if (TypeOf(field_) == Type::Time) {
// Convert seconds to nanoseconds
value = "CAST (" + value + " *1000000000 AS INTEGER)";
value = QStringLiteral("CAST (") + value + QStringLiteral(" *1000000000 AS INTEGER)");
}
// File paths need some extra processing since they are stored as encoded urls in the database.
if (field_ == Field::Filepath) {
if (operator_ == Operator::StartsWith || operator_ == Operator::Equals) {
value = QUrl::fromLocalFile(value).toEncoded();
value = QString::fromUtf8(QUrl::fromLocalFile(value).toEncoded());
}
else {
value = QUrl(value).toEncoded();
value = QString::fromUtf8(QUrl(value).toEncoded());
}
}
else if (TypeOf(field_) == Type::Rating) {
col = "CAST ((replace(" + col + ", -1, 0) + 0.05) * 10 AS INTEGER)";
value = "CAST ((" + value + " + 0.05) * 10 AS INTEGER)";
col = QStringLiteral("CAST ((replace(") + col + QStringLiteral(", -1, 0) + 0.05) * 10 AS INTEGER)");
value = QStringLiteral("CAST ((") + value + QStringLiteral(" + 0.05) * 10 AS INTEGER)");
}
switch (operator_) {
case Operator::Contains:
return col + " LIKE '%" + value + "%'";
return col + QStringLiteral(" LIKE '%") + value + QStringLiteral("%'");
case Operator::NotContains:
return col + " NOT LIKE '%" + value + "%'";
return col + QStringLiteral(" NOT LIKE '%") + value + QStringLiteral("%'");
case Operator::StartsWith:
return col + " LIKE '" + value + "%'";
return col + QStringLiteral(" LIKE '") + value + QStringLiteral("%'");
case Operator::EndsWith:
return col + " LIKE '%" + value + "'";
return col + QStringLiteral(" LIKE '%") + value + QLatin1Char('\'');
case Operator::Equals:
if (TypeOf(field_) == Type::Text) {
return col + " LIKE '" + value + "'";
return col + QStringLiteral(" LIKE '") + value + QLatin1Char('\'');
}
else if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) {
return col + " = " + value;
return col + QStringLiteral(" = ") + value;
}
else {
return col + " = '" + value + "'";
return col + QStringLiteral(" = '") + value + QLatin1Char('\'');
}
case Operator::GreaterThan:
if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) {
return col + " > " + value;
return col + QStringLiteral(" > ") + value;
}
else {
return col + " > '" + value + "'";
return col + QStringLiteral(" > '") + value + QLatin1Char('\'');
}
case Operator::LessThan:
if (TypeOf(field_) == Type::Date || TypeOf(field_) == Type::Time || TypeOf(field_) == Type::Rating) {
return col + " < " + value;
return col + QStringLiteral(" < ") + value;
}
else {
return col + " < '" + value + "'";
return col + QStringLiteral(" < '") + value + QLatin1Char('\'');
}
case Operator::NumericDate:
return col + " > " + "DATETIME('now', '-" + value + " " + date + "', 'localtime')";
return col + QStringLiteral(" > ") + QStringLiteral("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QStringLiteral("', 'localtime')");
case Operator::NumericDateNot:
return col + " < " + "DATETIME('now', '-" + value + " " + date + "', 'localtime')";
return col + QStringLiteral(" < ") + QStringLiteral("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QStringLiteral("', 'localtime')");
case Operator::RelativeDate:
// Consider the time range before the first date but after the second one
return "(" + col + " < " + "DATETIME('now', '-" + value + " " + date + "', 'localtime') AND " + col + " > " + "DATETIME('now', '-" + second_value + " " + date + "', 'localtime'))";
return QStringLiteral("(") + col + QStringLiteral(" < ") + QStringLiteral("DATETIME('now', '-") + value + QLatin1Char(' ') + date + QStringLiteral("', 'localtime') AND ") + col + QStringLiteral(" > ") + QStringLiteral("DATETIME('now', '-") + second_value + QLatin1Char(' ') + date + QStringLiteral("', 'localtime'))");
case Operator::NotEquals:
if (TypeOf(field_) == Type::Text) {
return col + " <> '" + value + "'";
return col + QStringLiteral(" <> '") + value + QLatin1Char('\'');
}
else {
return col + " <> " + value;
return col + QStringLiteral(" <> ") + value;
}
case Operator::Empty:
return col + " = ''";
return col + QStringLiteral(" = ''");
case Operator::NotEmpty:
return col + " <> ''";
return col + QStringLiteral(" <> ''");
}
return QString();

View File

@@ -381,7 +381,7 @@ SmartPlaylistSearchTerm SmartPlaylistSearchTermWidget::Term() const {
ret.value_ = ui_->value_text->text();
}
else if (value_page == ui_->page_empty) {
ret.value_ = "";
ret.value_ = QLatin1String("");
}
else if (value_page == ui_->page_number) {
ret.value_ = ui_->value_number->value();

View File

@@ -32,6 +32,7 @@
#include "core/application.h"
#include "core/iconloader.h"
#include "core/simpletreemodel.h"
#include "core/settings.h"
#include "collection/collectionbackend.h"
#include "smartplaylistsitem.h"
@@ -63,62 +64,62 @@ void SmartPlaylistsModel::Init() {
<< (SmartPlaylistsModel::GeneratorList()
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Newest tracks"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Newest tracks")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(),
SmartPlaylistSearch::SortType::FieldDesc,
SmartPlaylistSearchTerm::Field::DateCreated)
)
)
<< PlaylistGeneratorPtr(new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "50 random tracks"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "50 random tracks")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title, 50)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Ever played"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Ever played")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm( SmartPlaylistSearchTerm::Field::PlayCount, SmartPlaylistSearchTerm::Operator::GreaterThan, 0), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Never played"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Never played")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::And, SmartPlaylistSearch::TermList() << SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::PlayCount, SmartPlaylistSearchTerm::Operator::Equals, 0), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Last played"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Last played")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::LastPlayed)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Most played"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Most played")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::PlayCount)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("SmartPlaylists", "Favourite tracks"),
QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Favourite tracks")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::Rating)
)
)
<< PlaylistGeneratorPtr(
new PlaylistQueryGenerator(
QT_TRANSLATE_NOOP("Library", "Least favourite tracks"),
QStringLiteral(QT_TRANSLATE_NOOP("Library", "Least favourite tracks")),
SmartPlaylistSearch(SmartPlaylistSearch::SearchType::Or, SmartPlaylistSearch::TermList()
<< SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::Rating, SmartPlaylistSearchTerm::Operator::LessThan, 0.5)
<< SmartPlaylistSearchTerm(SmartPlaylistSearchTerm::Field::SkipCount, SmartPlaylistSearchTerm::Operator::GreaterThan, 4), SmartPlaylistSearch::SortType::FieldDesc, SmartPlaylistSearchTerm::Field::SkipCount)
)
)
)
<< (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator(QT_TRANSLATE_NOOP("SmartPlaylists", "All tracks"), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldAsc, SmartPlaylistSearchTerm::Field::Artist, -1))))
<< (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator( QT_TRANSLATE_NOOP("SmartPlaylists", "Dynamic random mix"), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title), true)));
<< (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator(QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "All tracks")), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::FieldAsc, SmartPlaylistSearchTerm::Field::Artist, -1))))
<< (SmartPlaylistsModel::GeneratorList() << PlaylistGeneratorPtr(new PlaylistQueryGenerator(QStringLiteral(QT_TRANSLATE_NOOP("SmartPlaylists", "Dynamic random mix")), SmartPlaylistSearch(SmartPlaylistSearch::SearchType::All, SmartPlaylistSearch::TermList(), SmartPlaylistSearch::SortType::Random, SmartPlaylistSearchTerm::Field::Title), true)));
QSettings s;
Settings s;
s.beginGroup(kSettingsGroup);
int version = s.value(collection_backend_->songs_table() + "_version", 0).toInt();
int version = s.value(collection_backend_->songs_table() + QStringLiteral("_version"), 0).toInt();
// How many defaults do we have to write?
int unwritten_defaults = 0;
@@ -142,7 +143,7 @@ void SmartPlaylistsModel::Init() {
s.endArray();
}
s.setValue(collection_backend_->songs_table() + "_version", version);
s.setValue(collection_backend_->songs_table() + QStringLiteral("_version"), version);
const int count = s.beginReadArray(collection_backend_->songs_table());
for (int i = 0; i < count; ++i) {
@@ -154,7 +155,7 @@ void SmartPlaylistsModel::Init() {
}
void SmartPlaylistsModel::ItemFromSmartPlaylist(const QSettings &s, const bool notify) {
void SmartPlaylistsModel::ItemFromSmartPlaylist(const Settings &s, const bool notify) {
SmartPlaylistsItem *item = new SmartPlaylistsItem(SmartPlaylistsItem::Type_SmartPlaylist, notify ? nullptr : root_);
item->display_text = tr(qPrintable(s.value("name").toString()));
@@ -169,7 +170,7 @@ void SmartPlaylistsModel::ItemFromSmartPlaylist(const QSettings &s, const bool n
void SmartPlaylistsModel::AddGenerator(PlaylistGeneratorPtr gen) {
QSettings s;
Settings s;
s.beginGroup(kSettingsGroup);
// Count the existing items
@@ -195,7 +196,7 @@ void SmartPlaylistsModel::UpdateGenerator(const QModelIndex &idx, PlaylistGenera
if (!item) return;
// Update the config
QSettings s;
Settings s;
s.beginGroup(kSettingsGroup);
// Count the existing items
@@ -224,7 +225,7 @@ void SmartPlaylistsModel::DeleteGenerator(const QModelIndex &idx) {
// Remove the item from the tree
root_->DeleteNotify(idx.row());
QSettings s;
Settings s;
s.beginGroup(kSettingsGroup);
// Rewrite all the items to the settings
@@ -241,7 +242,7 @@ void SmartPlaylistsModel::DeleteGenerator(const QModelIndex &idx) {
}
void SmartPlaylistsModel::SaveGenerator(QSettings *s, const int i, PlaylistGeneratorPtr generator) {
void SmartPlaylistsModel::SaveGenerator(Settings *s, const int i, PlaylistGeneratorPtr generator) {
s->setArrayIndex(i);
s->setValue("name", generator->name());
@@ -300,7 +301,7 @@ QMimeData *SmartPlaylistsModel::mimeData(const QModelIndexList &indexes) const {
if (!generator) return nullptr;
PlaylistGeneratorMimeData *mimedata = new PlaylistGeneratorMimeData(generator);
mimedata->setData(kSmartPlaylistsMimeType, QByteArray());
mimedata->setData(QLatin1String(kSmartPlaylistsMimeType), QByteArray());
mimedata->name_for_new_playlist_ = data(indexes.first()).toString();
return mimedata;

View File

@@ -33,6 +33,7 @@
#include "core/shared_ptr.h"
#include "core/simpletreemodel.h"
#include "core/settings.h"
#include "smartplaylistsitem.h"
#include "playlistgenerator_fwd.h"
@@ -77,8 +78,8 @@ class SmartPlaylistsModel : public SimpleTreeModel<SmartPlaylistsItem> {
static const char *kSmartPlaylistsMimeType;
static const int kSmartPlaylistsVersion;
static void SaveGenerator(QSettings *s, const int i, PlaylistGeneratorPtr generator);
void ItemFromSmartPlaylist(const QSettings &s, const bool notify);
static void SaveGenerator(Settings *s, const int i, PlaylistGeneratorPtr generator);
void ItemFromSmartPlaylist(const Settings &s, const bool notify);
private:
SharedPtr<CollectionBackend> collection_backend_;

View File

@@ -27,6 +27,7 @@
#include "core/application.h"
#include "core/iconloader.h"
#include "core/mimedata.h"
#include "core/settings.h"
#include "collection/collectionbackend.h"
#include "settings/appearancesettingspage.h"
@@ -109,7 +110,7 @@ void SmartPlaylistsViewContainer::showEvent(QShowEvent *e) {
void SmartPlaylistsViewContainer::ReloadSettings() {
QSettings s;
Settings s;
s.beginGroup(AppearanceSettingsPage::kSettingsGroup);
int iconsize = s.value(AppearanceSettingsPage::kIconSizeLeftPanelButtons, 22).toInt();
s.endGroup();

View File

@@ -78,7 +78,7 @@ SmartPlaylistWizard::SmartPlaylistWizard(Application *app, SharedPtr<CollectionB
setWizardStyle(QWizard::ClassicStyle);
#endif
#ifdef Q_OS_WIN32
if (QApplication::style() && QApplication::style()->objectName() == "fusion") {
if (QApplication::style() && QApplication::style()->objectName() == QStringLiteral("fusion")) {
setWizardStyle(QWizard::ClassicStyle);
}
#endif
@@ -124,7 +124,7 @@ void SmartPlaylistWizard::SetGenerator(PlaylistGeneratorPtr gen) {
// Set the name
if (!gen->name().isEmpty()) {
setWindowTitle(windowTitle() + " - " + gen->name());
setWindowTitle(windowTitle() + QStringLiteral(" - ") + gen->name());
}
finish_page_->ui_->name->setText(gen->name());
finish_page_->ui_->dynamic->setChecked(gen->is_dynamic());