QTextStream cout(stdout);
if (a.arguments().count() < 2)
{
- cout << "Usage: " << a.arguments()[0] << " FILE";
+ cout << "Usage: " << a.arguments().at(0) << " FILE";
return 1;
}
}
AbstractTask *t =
- LocalMyList::instance()->importMyList(QFileInfo{a.arguments()[1]});
+ LocalMyList::instance()->importMyList(QFileInfo{a.arguments().at(1)});
QObject::connect(t, SIGNAL(finished()), &a, SLOT(quit()));
return a.exec();
if (a.arguments().count() == 1)
t = LocalMyList::instance()->importTitlesFromUrl(QUrl::fromUserInput(LocalMyList::instance()->settings()->get("anidbTitleUrl").toString()));
else
- t = LocalMyList::instance()->importTitles(QFileInfo{a.arguments()[1]});
+ t = LocalMyList::instance()->importTitles(
+ QFileInfo{a.arguments().at(1)});
QObject::connect(t, SIGNAL(finished()), &a, SLOT(quit()));
return a.exec();
RaiiTransaction t{MyList::instance()->database()};\r
t.commit();\r
\r
- for (const auto &index : lastSelection) {\r
+ for (const auto &index : std::as_const(lastSelection))\r
+ {\r
DynamicModel::Node *node = dynamicModelFilterModel()->node(index);\r
markEpisodeWatched(node);\r
markFileWatched(node);\r
{
if (a.arguments().count() < 2)
return 0;
- return a.sendMessage(QString("ADD %1").arg(a.arguments()[1]));
+ return a.sendMessage(QString("ADD %1").arg(a.arguments().at(1)));
}
MainWindow w;
w.show();
if (a.arguments().count() >= 2)
- LocalMyList::instance()->addFile(QFileInfo{a.arguments()[1]});
+ LocalMyList::instance()->addFile(QFileInfo{a.arguments().at(1)});
return a.exec();
}
void MainWindow::dropEvent(QDropEvent *event)
{
QList<QUrl> urls = event->mimeData()->urls();
- QFileInfoList files;
for (int i = 0; i < urls.count(); ++i)
{
QFormLayout *layout = new QFormLayout(ui->settingsBox);
- for (const QString &setting : settings)
+ for (const QString &setting : std::as_const(settings))
{
QLabel *label = new QLabel(ui->settingsBox);
QLineEdit *lineEdit = new QLineEdit(ui->settingsBox);
if (!node->id())
return;
- QString path;
QSqlQuery q(MyList::instance()->database()->connection());
QChar typeLetter;
{
using namespace LocalMyList;
- QModelIndexList selection = ui->pathMappingView->selectionModel()->selectedRows();
+ const QModelIndexList selection =
+ ui->pathMappingView->selectionModel()->selectedRows();
for (const QModelIndex &idx : selection)
{
{
using namespace LocalMyList;
- QModelIndexList selection = ui->unknownFilesView->selectionModel()->selectedRows();
+ const QModelIndexList selection =
+ ui->unknownFilesView->selectionModel()->selectedRows();
RaiiTransaction t(MyList::instance()->database());
for (const QModelIndex &idx : selection)
{
using namespace LocalMyList;
- QModelIndexList selection = ui->watchedDirectoriesView->selectionModel()->selectedRows();
+ const QModelIndexList selection =
+ ui->watchedDirectoriesView->selectionModel()->selectedRows();
for (const QModelIndex &idx : selection)
{
{
qDeleteAll(menu->actions());
- for (const QString &id : tabMenuOrder)
+ for (const QString &id : std::as_const(tabMenuOrder))
{
QAction *action = new QAction(registeredTabNames.value(id)(), menu);
connect(action, &QAction::triggered, [this, id] { this->addTabRequested(id); });
setLockLayout(s->value("lockTabLayout", false).toBool());
s->endGroup();
- for (const QString &id : ids)
+ for (const QString &id : std::as_const(ids))
addTab(id);
setCurrentIndex(currentIndex);
if (LocalMyList::MyList::revision())
revision = tr("from revision %1").arg(LocalMyList::MyList::revision());
- const QString description = tr(R"(
+ const QString description =
+ tr(R"(
<h3>%1 %2 <font size=\"3\">(%7 bit)</font></h3>
<p>Built with Qt %3<br/>
Running with Qt %4<br/>
<p>The program is provided AS IS with NO WARRANTY OF ANY KIND,
INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.</p>)")
- .arg(qApp->applicationName())
- .arg(qApp->applicationVersion())
- .arg(QLatin1String(QT_VERSION_STR))
- .arg(QLatin1String(qVersion()))
- .arg(qApp->organizationName())
- .arg(revision)
- .arg(QSysInfo::WordSize)
- .arg(__DATE__)
- .arg(__TIME__)
- // Format of __DATE__ is "Mmm dd yyyy" 16.8p1 [cpp.predefined]
- .arg(__DATE__ + 7);
+ .arg(qApp->applicationName(), qApp->applicationVersion(),
+ QLatin1String(QT_VERSION_STR), QLatin1String(qVersion()),
+ qApp->organizationName(), revision)
+ .arg(QSysInfo::WordSize)
+ .arg(__DATE__, __TIME__,
+ // Format of __DATE__ is "Mmm dd yyyy" 16.8p1 [cpp.predefined]
+ __DATE__ + 7);
QLabel *copyrightLabel = new QLabel(description);
copyrightLabel->setWordWrap(true);
void Database::handleNotification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload)
{
Q_UNUSED(source);
- qDebug() << QString("[%1] Received notification %2, %3").arg(connectionName).arg(name).arg(payload.toString());
+ qDebug() << QString("[%1] Received notification %2, %3")
+ .arg(connectionName, name, payload.toString());
if (name == "new_pending_request")
{
emit newPendingRequest();
QString toSearchQuery(const QString &string)
{
const static QChar anyChar = QChar('%');
+ static QRegularExpression rx("\\s+");
QString ret = string.trimmed();
- ret.replace(QRegularExpression("\\s+"), anyChar);
+ ret.replace(rx, anyChar);
ret = ret.append(anyChar).prepend(anyChar);
return ret;
}
public slots:
bool isConnected() const;
- void setConnectionSettings(const DatabaseConnectionSettings &dbs);
+ void
+ setConnectionSettings(const LocalMyList::DatabaseConnectionSettings &dbs);
LocalMyList::DatabaseConnectionSettings connectionSettings() const;
bool transaction();
bool setEpisode(const LocalMyList::Episode &episode);
bool setFile(const LocalMyList::File &file);
- bool updateFilesFromPendingMyListUpdate(const PendingMyListUpdate &request);
+ bool updateFilesFromPendingMyListUpdate(
+ const LocalMyList::PendingMyListUpdate &request);
bool addTitle(const LocalMyList::AnimeTitle &title);
bool addAnime(const LocalMyList::Anime &anime);
bool addFileEpisodeRel(const LocalMyList::FileEpisodeRel &fileEpisodeRel);
bool addUnknownFile(const LocalMyList::UnknownFile &file);
- UnknownFile getUnknownFile(const QByteArray &ed2k, qint64 size);
- UnknownFile getUnknownFileByPath(const QString &path);
+ LocalMyList::UnknownFile getUnknownFile(const QByteArray &ed2k,
+ qint64 size);
+ LocalMyList::UnknownFile getUnknownFileByPath(const QString &path);
bool removeUnknownFile(const QByteArray &ed2k, qint64 size);
bool addRequest(const LocalMyList::PendingRequest &request);
- QList<PendingRequest> getRequestBatch(int limit = 10);
+ QList<LocalMyList::PendingRequest> getRequestBatch(int limit = 10);
bool clearRequest(const LocalMyList::PendingRequest &request);
bool addPendingMyListUpdate(const LocalMyList::PendingMyListUpdate &request);
LocalMyList::PendingMyListUpdate getPendingMyListUpdate(qint64 updateId);
- QList<PendingMyListUpdate> getPendingMyListUpdateBatch(int limit = 10);
+ QList<LocalMyList::PendingMyListUpdate>
+ getPendingMyListUpdateBatch(int limit = 10);
bool clearPendingMyListUpdate(const LocalMyList::PendingMyListUpdate &request);
QStringList getWatchedDirectories(int hostId, bool onlyEnabled = true);
bool truncateMyListData();
bool truncateDatabase();
- bool removeKnownUnknownFile(const File &file);
+ bool removeKnownUnknownFile(const LocalMyList::File &file);
bool log(const QString &message, int type = 1);
void disconnect();
bool reconnect();
- static void readAnimeTitleData(const SqlResultIteratorInterface &result, AnimeTitle &data, int offset = 0);
- static void readAnimeData(const SqlResultIteratorInterface &result, Anime &data, int offset = 0);
- static void readEpisodeData(const SqlResultIteratorInterface &result, Episode &data, int offset = 0);
- static void readFileData(const SqlResultIteratorInterface &result, File &data, int offset = 0);
- static void readFileLocationData(const SqlResultIteratorInterface &result, FileLocation &data, int offset = 0);
- static void readOpenFileData(const SqlResultIteratorInterface &result, OpenFileData &data, int offset = 0);
- static void readUnknownFileData(const SqlResultIteratorInterface &result, UnknownFile &data, int offset = 0);
- static void readPendingMyListUpdateData(const SqlResultIteratorInterface &result, PendingMyListUpdate &data, int offset = 0);
+ static void
+ readAnimeTitleData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::AnimeTitle &data, int offset = 0);
+ static void
+ readAnimeData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::Anime &data, int offset = 0);
+ static void
+ readEpisodeData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::Episode &data, int offset = 0);
+ static void
+ readFileData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::File &data, int offset = 0);
+ static void
+ readFileLocationData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::FileLocation &data, int offset = 0);
+ static void
+ readOpenFileData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::OpenFileData &data, int offset = 0);
+ static void
+ readUnknownFileData(const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::UnknownFile &data, int offset = 0);
+ static void readPendingMyListUpdateData(
+ const LocalMyList::SqlResultIteratorInterface &result,
+ LocalMyList::PendingMyListUpdate &data, int offset = 0);
static QString animeTitleFields();
static QString animeFields();
void DirectoryWatcher::checkWatchedDirectories()
{
- for (const QString &dir : watcher->directories())
+ const auto &dirs = watcher->directories();
+ for (const QString &dir : dirs)
watchedDirectoryChanged(dir);
}
void Data::updated(Data *oldData)
{
- for (Node *node : references)
+ for (Node *node : std::as_const(references))
{
Q_ASSERT_X(node->parent(), "dynamicmodel/updated", "Updating node without parent");
node->updated(oldData);
case TitleColumn:
return animeData.titleRomaji;
case EpCountColumn:
- return (animeData.totalEpisodeCount ? epCountString : unknownEpCountString)
- .arg(episodesInMyList)
- .arg(animeData.totalEpisodeCount
- ? animeData.totalEpisodeCount
- : qMax(animeData.highestEpno, episodesInMyList))
- .arg(specialsInMyList ? specialsCountString.arg(specialsInMyList) : "")
- .arg("");
+ return (animeData.totalEpisodeCount ? epCountString
+ : unknownEpCountString)
+ .arg(episodesInMyList)
+ .arg(
+ animeData.totalEpisodeCount
+ ? animeData.totalEpisodeCount
+ : qMax(animeData.highestEpno, episodesInMyList))
+ .arg(specialsInMyList
+ ? specialsCountString.arg(specialsInMyList)
+ : "",
+ "");
case RatingColumn:
if (animeData.rating < 1)
return "n/a";
return QString::number(animeData.myVote, 'f', 2);
case WatchedColumn:
return epCountString.arg(watchedEpisodes)
- .arg(episodesInMyList)
- .arg(specialsInMyList ? specialsCountString.arg(watchedSpecials) : "")
- .arg(specialsInMyList ? specialsCountString.arg(specialsInMyList) : "");
+ .arg(episodesInMyList)
+ .arg(specialsInMyList
+ ? specialsCountString.arg(watchedSpecials)
+ : "",
+ specialsInMyList
+ ? specialsCountString.arg(specialsInMyList)
+ : "");
case StateColumn:
return stateIdToState(myState);
}
{
case TitleColumn:
if (!animeData.titleEnglish.isEmpty() && !animeData.titleKanji.isEmpty())
- return QString("%1 -- %2").arg(animeData.titleEnglish)
- .arg(animeData.titleKanji);
+ return QString("%1 -- %2")
+ .arg(animeData.titleEnglish, animeData.titleKanji);
if (!animeData.titleEnglish.isEmpty())
return animeData.titleEnglish;
if (!animeData.titleKanji.isEmpty())
{
case 0:
if (!episodeData.titleEnglish.isEmpty() && !episodeData.titleKanji.isEmpty())
- return QString("%1 -- %2").arg(episodeData.titleKanji)
- .arg(episodeData.titleRomaji);
+ return QString("%1 -- %2")
+ .arg(episodeData.titleKanji,
+ episodeData.titleRomaji);
if (!episodeData.titleEnglish.isEmpty())
return episodeData.titleEnglish;
if (!episodeData.titleKanji.isEmpty())
if (!typeRelation->sourceType().isEmpty() && !dataTypeNames.contains(typeRelation->sourceType()))
return false;
- const auto destinationTypeIt = dataTypeNames.find(typeRelation->destinationType());
+ const auto destinationTypeIt =
+ dataTypeNames.constFind(typeRelation->destinationType());
if (destinationTypeIt == dataTypeNames.constEnd())
return false;
TypeRelation *DataModel::typeRelation(const QString &source, const QString &destiantion)
{
- const auto it = typeRelations.find(source);
+ const auto it = typeRelations.constFind(source);
if (it == typeRelations.constEnd())
{
return 0;
}
- const auto inner = it.value().find(destiantion);
+ const auto inner = it.value().constFind(destiantion);
if (inner == it.value().constEnd())
{
void notifyEntryAdded(DataType *dataType, int id);
signals:
- void entryAdded(DataType *dataType, int id);
+ void entryAdded(LocalMyList::DynamicModel::DataType *dataType, int id);
private slots:
/* void animeUpdate(int aid);
%5
WHERE %3.%4 = :id
)"}
- .arg(additionalColumns())
- .arg(tableName())
- .arg(alias())
- .arg(primaryKeyName())
- .arg(additionalJoins());
+ .arg(additionalColumns(), tableName(), alias(), primaryKeyName(),
+ additionalJoins());
}
void DataType::update(Data *data)
void reload();
private slots:
- void entryAdded(DataType *dataType, int id);
+ void entryAdded(LocalMyList::DynamicModel::DataType *dataType, int id);
void episodeInsert(int aid, int eid);
signals:
- void queryChanged(QueryParser query);
+ void queryChanged(LocalMyList::DynamicModel::QueryParser
+ query); // clazy:exclude=overloaded-signal
void queryChanged(QString query);
private:
Node *Node::findChildByPrimaryValue(const QVariant &primaryValue)
{
// TODO this can be made logarithmic
- // children of type column are ordered ascending by their valie
+ // children of type column are ordered ascending by their value
// datatypes with ids can bee looked up in the DataType's dataStore,
// followed by node lookup.
- for (Node *child : m_children)
+ for (Node *child : std::as_const(m_children))
{
if (child->data()->primaryValue() == primaryValue)
return child;
if (l.column.isEmpty())\r
dbg << QString("[%1:%2]").arg(l.type).arg(l.table);\r
else\r
- dbg << QString("[%1:%2.%3]").arg(l.type).arg(l.table).arg(l.column);\r
+ dbg << QString("[%1:%2.%3]").arg(l.type).arg(l.table, l.column);\r
return dbg;\r
}\r
\r
{\r
if (!table_columns[currentLevel.table].contains(column))\r
{\r
- m_errorString = QObject::tr("Column %1 does not exist in table %2.")\r
- .arg(column).arg(table);\r
+ m_errorString =\r
+ QObject::tr("Column %1 does not exist in table %2.")\r
+ .arg(column, table);\r
m_valid = false;\r
return m_valid;\r
}\r
&& m_levels.last().table != currentLevel.table\r
&& !m_dataModel->hasTypeRelation(m_levels.last().table, currentLevel.table))\r
{\r
- m_errorString = QObject::tr("No relation defined between table %1 and table %2.")\r
- .arg(m_levels.last().table).arg(currentLevel.table);\r
+ m_errorString =\r
+ QObject::tr(\r
+ "No relation defined between table %1 and table %2.")\r
+ .arg(m_levels.last().table, currentLevel.table);\r
m_valid = false;\r
return m_valid;\r
}\r
\r
if (!lastLevel.column.isEmpty())\r
{\r
- columns += QString(", %2.%1")\r
- .arg(lastLevel.column).arg(dataType->alias());\r
+ columns += QString(", %2.%1").arg(lastLevel.column, dataType->alias());\r
}\r
else\r
{\r
\r
if (lastLevel.type == ColumnEntry)\r
{\r
- QString column = QString("%2.%1")\r
- .arg(lastLevel.column).arg(dataType->alias());\r
+ QString column =\r
+ QString("%2.%1").arg(lastLevel.column, dataType->alias());\r
ret += QString("\n\tGROUP BY %1\n\tORDER BY %1")\r
.arg(column);\r
}\r
\r
if (!lastLevel.column.isEmpty())\r
{\r
- columns += QString(", %2.%1")\r
- .arg(lastLevel.column).arg(dataType->alias());\r
+ columns += QString(", %2.%1").arg(lastLevel.column, dataType->alias());\r
}\r
else\r
{\r
}\r
\r
QString ret = buildSelect(currentLevel, columns, true, true);\r
- ret += QString{"\n\t\tWHERE %1.%2 = :id"}\r
- .arg(dataType->alias())\r
- .arg(dataType->primaryKeyName());\r
+ ret += QString{"\n\t\tWHERE %1.%2 = :id"}.arg(dataType->alias(),\r
+ dataType->primaryKeyName());\r
return ret;\r
}\r
\r
const DataType *dataType = m_dataModel->dataType(lastLevel.table);\r
const QString joins = buildJoins(currentLevel - 1, willRequireAdditionalJoins, includeConditions, aliasSuffix);\r
return QString("\nSELECT DISTINCT %4 FROM %1 %2%3")\r
- .arg(lastLevel.table).arg(dataType->alias() + aliasSuffix).arg(joins).arg(columns);\r
+ .arg(lastLevel.table, dataType->alias() + aliasSuffix, joins, columns);\r
}\r
\r
QString QueryParser::buildJoins(int currentLevel, bool willRequireAdditionalJoins, bool includeConditions, const QString &aliasSuffix) const\r
if (level(i).type == ColumnEntry)\r
{\r
*it << QString("%1.%2 = %3")\r
- .arg(dataType->alias() + aliasSuffix).arg(level(i).column).arg(nextPlaceHolder(i));\r
+ .arg(dataType->alias() + aliasSuffix, level(i).column,\r
+ nextPlaceHolder(i));\r
}\r
else\r
{\r
*it << QString("%1.%2 = %3")\r
- .arg(dataType->alias() + aliasSuffix).arg(dataType->primaryKeyName()).arg(nextPlaceHolder(i));\r
+ .arg(dataType->alias() + aliasSuffix,\r
+ dataType->primaryKeyName(), nextPlaceHolder(i));\r
}\r
}\r
qDebug() << conditions;\r
if (!addedTables.contains(l.table) && conditions.contains(l.table))\r
{\r
const DataType *dataType = m_dataModel->dataType(l.table);\r
- ret += QString("\n\tJOIN %1 %2 ON %3\n").arg(l.table).arg(dataType->alias() + aliasSuffix).arg(conditions[l.table].join("\n\t\tAND "));\r
+ ret += QString("\n\tJOIN %1 %2 ON %3\n")\r
+ .arg(l.table, dataType->alias() + aliasSuffix,\r
+ conditions[l.table].join("\n\t\tAND "));\r
addedTables.insert(l.table);\r
}\r
}\r
QString column = QString{"%2.%1"};\r
if (lastLevel.type == ColumnEntry)\r
{\r
- return column\r
- .arg(lastLevel.column).arg(alias);\r
+ return column.arg(lastLevel.column, alias);\r
}\r
const DataType *dataType = m_dataModel->dataType(lastLevel.table);\r
- return column\r
- .arg(dataType->primaryKeyName()).arg(alias);\r
+ return column.arg(dataType->primaryKeyName(), alias);\r
}\r
\r
QString QueryParser::currentPlaceHolder(int currentLevel) const\r
QString ForeignKeyRelation::joinCondition(const QString &leftAlias, const QString &rightAlias) const
{
- return QString{"%2.%3 = %1.%4"}
- .arg(rightAlias).arg(leftAlias).arg(m_pk).arg(m_fk);
+ return QString{"%2.%3 = %1.%4"}.arg(rightAlias, leftAlias, m_pk, m_fk);
}
} // namespace DynamicModel
void AnimeType::animeUpdated(int aid)
{
- const auto it = m_dataStore.find(aid);
+ const auto it = m_dataStore.constFind(aid);
if (it == m_dataStore.constEnd())
return;
void AnimeType::animeDeleted(int aid)
{
qDebug() << "animeDeleted" << aid;
- const auto it = m_dataStore.find(aid);
+ const auto it = m_dataStore.constFind(aid);
if (it == m_dataStore.constEnd())
return;
void EpisodeType::episodeUpdated(int eid, int aid)
{
Q_UNUSED(aid);
- const auto it = m_dataStore.find(eid);
+ const auto it = m_dataStore.constFind(eid);
if (it == m_dataStore.constEnd())
return;
void EpisodeType::episodeDeleted(int eid, int aid)
{
Q_UNUSED(aid);
- const auto it = m_dataStore.find(eid);
+ const auto it = m_dataStore.constFind(eid);
if (it == m_dataStore.constEnd())
return;
{
Q_UNUSED(aid);
Q_UNUSED(eid);
- const auto it = m_dataStore.find(fid);
+ const auto it = m_dataStore.constFind(fid);
if (it == m_dataStore.constEnd())
return;
{
Q_UNUSED(aid);
Q_UNUSED(eid);
- const auto it = m_dataStore.find(fid);
+ const auto it = m_dataStore.constFind(fid);
if (it == m_dataStore.constEnd())
return;
void FileLocationType::fileLocationUpdated(int locationId, int fid)
{
Q_UNUSED(fid);
- const auto it = m_dataStore.find(locationId);
+ const auto it = m_dataStore.constFind(locationId);
if (it == m_dataStore.constEnd())
return;
void FileLocationType::fileLocationDeleted(int locationId, int fid)
{
Q_UNUSED(fid);
- const auto it = m_dataStore.find(locationId);
+ const auto it = m_dataStore.constFind(locationId);
if (it == m_dataStore.constEnd())
return;
QString additionalColumns() const override;
protected:
- Data *readEntry(const SqlResultIteratorInterface &it);
+ Data *readEntry(const SqlResultIteratorInterface &it) override;
};
// =============================================================================================================
void update(Data *data) override;
- NodeCompare nodeCompareFunction() const;
+ NodeCompare nodeCompareFunction() const override;
protected:
- Data *readEntry(const SqlResultIteratorInterface &it);
+ Data *readEntry(const SqlResultIteratorInterface &it) override;
private slots:
void animeAdded(int aid);
void update(Data *data) override;
- NodeCompare nodeCompareFunction() const;
+ NodeCompare nodeCompareFunction() const override;
protected:
Data *readEntry(const SqlResultIteratorInterface &it) override;
QString tableName() const override;
QString alias() const override;
QString primaryKeyName() const override;
- QString additionalColumns() const;
+ QString additionalColumns() const override;
QString additionalJoins() const override;
void registerd() override;
for (FileLocation &fl : fileLocations)
{
- if (!QFileInfo(fl.path).exists())
+ if (!QFileInfo::exists(fl.path))
{
db->log(QObject::tr("Removing file location %1: %2. File does not exist.")
.arg(fl.locationId)
bool playFile(const LocalMyList::OpenFileData &ofd,
const QStringList &additionalArguments = QStringList());
- AbstractTask *addFile(const QFileInfo &file);
- AbstractTask *addDirectory(const QDir &directory);
- AbstractTask *importTitles(const QFileInfo &file);
- AbstractTask *importTitlesFromUrl(const QUrl &url);
- AbstractTask *importMyList(const QFileInfo &file);
- void executeTask(AbstractTask *task);
+ LocalMyList::AbstractTask *addFile(const QFileInfo &file);
+ LocalMyList::AbstractTask *addDirectory(const QDir &directory);
+ LocalMyList::AbstractTask *importTitles(const QFileInfo &file);
+ LocalMyList::AbstractTask *importTitlesFromUrl(const QUrl &url);
+ LocalMyList::AbstractTask *importMyList(const QFileInfo &file);
+ void executeTask(LocalMyList::AbstractTask *task);
QString mapPathFromSource(const QString &path, int sourceHost);
QString mapPathToSource(const QString &path, int *sourceHost = 0);
f.releaseDate = QDateTime::fromString(readElementText(), dateTimeFormat);
}
else if (name() == "VersionName") {
- f.version = readElementText().mid(1).toInt();
+ f.version = QStringView{readElementText()}.mid(1).toInt();
}
// f.censored;
else if (name() == "TypeName") {
signals:
public slots:
- MyListNode *node(const QModelIndex &idx) const;
+ LocalMyList::MyListNode *node(const QModelIndex &idx) const;
void reload();
{
case 0:
if (!animeData.data.titleEnglish.isEmpty() && !animeData.data.titleKanji.isEmpty())
- return QString("%1 -- %2").arg(animeData.data.titleEnglish)
- .arg(animeData.data.titleKanji);
+ return QString("%1 -- %2")
+ .arg(animeData.data.titleEnglish,
+ animeData.data.titleKanji);
if (!animeData.data.titleEnglish.isEmpty())
return animeData.data.titleEnglish;
if (!animeData.data.titleKanji.isEmpty())
{
case 0:
if (!episodeData.data.titleEnglish.isEmpty() && !episodeData.data.titleKanji.isEmpty())
- return QString("%1 -- %2").arg(episodeData.data.titleKanji)
- .arg(episodeData.data.titleRomaji);
+ return QString("%1 -- %2")
+ .arg(episodeData.data.titleKanji,
+ episodeData.data.titleRomaji);
if (!episodeData.data.titleEnglish.isEmpty())
return episodeData.data.titleEnglish;
if (!episodeData.data.titleKanji.isEmpty())
t.commit();
- QStringList watchedDirectories = db->getWatchedDirectories(MyList::instance()->hostId());
+ const QStringList watchedDirectories =
+ db->getWatchedDirectories(MyList::instance()->hostId());
while (q.next())
{
if (!differenceInCaseOnly && newFile.exists())
{
fl.failedRename = true;
- fl.renameError = tr("Rename: Failed to rename file <%1>. Destination <%2> exists.").arg(oldFile.filePath()).arg(newFileString);
+ fl.renameError = tr("Rename: Failed to rename file <%1>. "
+ "Destination <%2> exists.")
+ .arg(oldFile.filePath(), newFileString);
db->setFileLocation(fl);
db->log(fl.renameError, 2);
continue;
if (!QDir().mkpath(newFilePath))
{
fl.failedRename = true;
- fl.renameError = tr("Rename: Failed to rename file <%1>. Destination path <%2> does not exist and could not be created.").arg(oldFile.filePath()).arg(newFile.canonicalPath());
+ fl.renameError =
+ tr("Rename: Failed to rename file <%1>. Destination path "
+ "<%2> does not exist and could not be created.")
+ .arg(oldFile.filePath(), newFile.canonicalPath());
db->setFileLocation(fl);
db->log(fl.renameError, 2);
continue;
if (!QFileInfo(newFilePath).isWritable())
{
fl.failedRename = true;
- fl.renameError = tr("Rename: Failed to rename file <%1>. Destination directory <%2> is not writable.").arg(oldFile.canonicalFilePath()).arg(newFile.absolutePath());
+ fl.renameError =
+ tr("Rename: Failed to rename file <%1>. Destination directory "
+ "<%2> is not writable.")
+ .arg(oldFile.canonicalFilePath(), newFile.absolutePath());
db->setFileLocation(fl);
db->log(fl.renameError, 2);
continue;
if (!renameFile(oldFile.canonicalFilePath(), newFileString, &exactFileName))
{
fl.failedRename = true;
- fl.renameError = tr("Rename: Failed to rename file <%1>. Failed to rename file to <%2>").arg(oldFile.canonicalFilePath()).arg(newFileString);
+ fl.renameError =
+ tr("Rename: Failed to rename file <%1>. Failed to rename file "
+ "to <%2>")
+ .arg(oldFile.canonicalFilePath(), newFileString);
db->setFileLocation(fl);
db->log(fl.renameError, 2);
continue;
fl.renameError = "";
db->setFileLocation(fl);
- db->log(tr("Rename: File <%1> was renamed to <%2>").arg(oldFile.canonicalFilePath()).arg(fl.path));
+ db->log(tr("Rename: File <%1> was renamed to <%2>")
+ .arg(oldFile.canonicalFilePath(), fl.path));
if (settings->get("renameRemoveEmptyDirectories", false))
{
signals:
public slots:
- void run(const Report &report);
+ void run(const LocalMyList::Report &report);
void run(const QString &report);
private:
QString AnimeTitle::toString() const
{
return QString("AnimeTitle('%1', %2, %3, %4)")
- .arg(read_title()).arg(read_language())
- .arg(titleTypeToString(read_type())).arg(read_aid());
+ .arg(read_title(), read_language(), titleTypeToString(read_type()))
+ .arg(read_aid());
}
// --------------------------------------------------------------------------------
class LOCALMYLISTSHARED_EXPORT Service : public QObject
{
Q_OBJECT
- Q_ENUMS(ServiceState)
Q_PROPERTY(ServiceState state READ state NOTIFY stateChanged)
Q_PROPERTY(QString name READ name)
Error, //<! Service failed to start
Invalid = -1, //<! This value represents the state of an invalid/nonexistant service. A service can't be in this state.
};
+ Q_ENUM(ServiceState)
ServiceState state() const;
QString name() const;
void processRequests();
signals:
- void stateChanged(Service::ServiceState state);
+ void stateChanged(LocalMyList::Service::ServiceState state);
protected:
Service(const QString &name, QObject *parent = 0);
ServiceManager::~ServiceManager()
{
- for (Service *s : m_registeredServices)
+ for (Service *s : std::as_const(m_registeredServices))
callServiceSlot(s, "deleteLater");
}
void ServiceManager::startAll()
{
- for (Service *s : m_registeredServices)
+ for (Service *s : std::as_const(m_registeredServices))
callServiceSlot(s, "start");
}
void ServiceManager::stopAll()
{
- for (Service *s : m_registeredServices)
+ for (Service *s : std::as_const(m_registeredServices))
callServiceSlot(s, "stop");
}
void ServiceManager::processRequestsAll()
{
- for (Service *s : m_registeredServices)
+ for (Service *s : std::as_const(m_registeredServices))
callServiceSlot(s, "processRequests");
}
bool addService(Service *service);
signals:
- void stateChanged(const QString &serviceName, Service::ServiceState state);
+ void stateChanged(const QString &serviceName,
+ LocalMyList::Service::ServiceState state);
public slots:
void start(const QString &serviceName);
void processRequests(const QString &serviceName);
void processRequestsAll();
- Service::ServiceState state(const QString &serviceName);
+ LocalMyList::Service::ServiceState state(const QString &serviceName);
bool hasService(const QString &serviceName) const;
QList<QString> registeredServices() const;
private slots:
- void serviceStateChanged(Service::ServiceState state);
+ void serviceStateChanged(LocalMyList::Service::ServiceState state);
private:
void callServiceSlot(Service *s, const char *slot) const;
QTextStream cout(stdout);
if (a.arguments().count() < 2)
{
- cout << "Usage: " << a.arguments()[0] << " TITLE" << Qt::endl;
+ cout << "Usage: " << a.arguments().at(0) << " TITLE" << Qt::endl;
return 1;
}
QTextStream cout(stdout);
if (a.arguments().count() < 2)
{
- cout << "Usage: " << a.arguments()[0] << " FILE [ARGS...]" << Qt::endl;
- cout << " " << a.arguments()[0] << " -e SCRIPT [-- ARGS...]"
+ cout << "Usage: " << a.arguments().at(0) << " FILE [ARGS...]"
+ << Qt::endl;
+ cout << " " << a.arguments().at(0) << " -e SCRIPT [-- ARGS...]"
<< Qt::endl;
return 1;
}