mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
Implement XML scanning for a folder
This commit is contained in:
parent
3e2bda7cf1
commit
76642737fd
@ -6,6 +6,7 @@
|
|||||||
#include "initial_comic_info_extractor.h"
|
#include "initial_comic_info_extractor.h"
|
||||||
#include "xml_info_parser.h"
|
#include "xml_info_parser.h"
|
||||||
#include "yacreader_global.h"
|
#include "yacreader_global.h"
|
||||||
|
#include "folder_item.h"
|
||||||
|
|
||||||
#include "QsLog.h"
|
#include "QsLog.h"
|
||||||
|
|
||||||
@ -23,6 +24,21 @@ void XMLInfoLibraryScanner::scanLibrary(const QString &source, const QString &ta
|
|||||||
|
|
||||||
this->stopRunning = false;
|
this->stopRunning = false;
|
||||||
|
|
||||||
|
partialUpdate = false;
|
||||||
|
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void XMLInfoLibraryScanner::scanFolder(const QString &source, const QString &target, const QString &folder, const QModelIndex &dest)
|
||||||
|
{
|
||||||
|
this->source = source;
|
||||||
|
this->target = target;
|
||||||
|
|
||||||
|
this->stopRunning = false;
|
||||||
|
|
||||||
|
partialUpdate = true;
|
||||||
|
folderDestinationModelIndex = dest;
|
||||||
|
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,36 +68,29 @@ void XMLInfoLibraryScanner::run()
|
|||||||
|
|
||||||
database.transaction();
|
database.transaction();
|
||||||
|
|
||||||
|
if (!partialUpdate) {
|
||||||
QSqlQuery comicsInfo("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)", database);
|
QSqlQuery comicsInfo("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id)", database);
|
||||||
comicsInfo.exec();
|
comicsInfo.exec();
|
||||||
|
|
||||||
QSqlRecord record = comicsInfo.record();
|
updateFromSQLQuery(database, comicsInfo);
|
||||||
|
} else {
|
||||||
int id = record.indexOf("id");
|
if (folderDestinationModelIndex.isValid()) {
|
||||||
// int parentIdIndex = record.indexOf("parentId");
|
YACReader::iterate(folderDestinationModelIndex, folderDestinationModelIndex.model(), [&](const QModelIndex &idx) {
|
||||||
int fileNameIndex = record.indexOf("fileName");
|
if (stopRunning) {
|
||||||
int pathIndex = record.indexOf("path");
|
return false;
|
||||||
|
|
||||||
while (comicsInfo.next()) {
|
|
||||||
if (this->stopRunning) {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
/* currentItem.id = selectQuery.value(id).toULongLong();
|
|
||||||
currentItem.parentId = parentId; //selectQuery.value(parentId).toULongLong();
|
|
||||||
currentItem.name = selectQuery.value(fileName).toString(); */
|
|
||||||
auto fileName = comicsInfo.value(fileNameIndex).toString();
|
|
||||||
auto path = comicsInfo.value(pathIndex).toString();
|
|
||||||
|
|
||||||
emit comicScanned(path, fileName);
|
auto item = static_cast<FolderItem *>(idx.internalPointer());
|
||||||
|
|
||||||
auto info = DBHelper::getComicInfoFromQuery(comicsInfo, "comicInfoId");
|
QSqlQuery comicsInfo(database);
|
||||||
|
comicsInfo.prepare("SELECT * FROM comic c INNER JOIN comic_info ci ON (c.comicInfoId = ci.id) WHERE c.parentId = :parentId");
|
||||||
|
comicsInfo.bindValue(":parentId", item->id);
|
||||||
|
comicsInfo.exec();
|
||||||
|
|
||||||
InitialComicInfoExtractor ie(QDir::cleanPath(this->source + path), "None");
|
updateFromSQLQuery(database, comicsInfo);
|
||||||
|
|
||||||
ie.extract();
|
return true;
|
||||||
|
});
|
||||||
if (parseXMLIntoInfo(ie.getXMLInfoRawData(), info)) {
|
|
||||||
DBHelper::update(&info, database);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,3 +105,33 @@ void XMLInfoLibraryScanner::stop()
|
|||||||
{
|
{
|
||||||
stopRunning = true;
|
stopRunning = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void XMLInfoLibraryScanner::updateFromSQLQuery(QSqlDatabase &db, QSqlQuery &query)
|
||||||
|
{
|
||||||
|
QSqlRecord record = query.record();
|
||||||
|
|
||||||
|
int id = record.indexOf("id");
|
||||||
|
// int parentIdIndex = record.indexOf("parentId");
|
||||||
|
int fileNameIndex = record.indexOf("fileName");
|
||||||
|
int pathIndex = record.indexOf("path");
|
||||||
|
|
||||||
|
while (query.next()) {
|
||||||
|
if (this->stopRunning) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
auto fileName = query.value(fileNameIndex).toString();
|
||||||
|
auto path = query.value(pathIndex).toString();
|
||||||
|
|
||||||
|
emit comicScanned(path, fileName);
|
||||||
|
|
||||||
|
auto info = DBHelper::getComicInfoFromQuery(query, "comicInfoId");
|
||||||
|
|
||||||
|
InitialComicInfoExtractor ie(QDir::cleanPath(this->source + path), "None", info.coverPage.toInt(), true);
|
||||||
|
|
||||||
|
ie.extract();
|
||||||
|
|
||||||
|
if (parseXMLIntoInfo(ie.getXMLInfoRawData(), info)) {
|
||||||
|
DBHelper::update(&info, db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define XMLINFOLIBRARYSCANNER_H
|
#define XMLINFOLIBRARYSCANNER_H
|
||||||
|
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
namespace YACReader {
|
namespace YACReader {
|
||||||
|
|
||||||
@ -11,6 +12,7 @@ class XMLInfoLibraryScanner : public QThread
|
|||||||
public:
|
public:
|
||||||
XMLInfoLibraryScanner();
|
XMLInfoLibraryScanner();
|
||||||
void scanLibrary(const QString &source, const QString &target);
|
void scanLibrary(const QString &source, const QString &target);
|
||||||
|
void scanFolder(const QString &source, const QString &target, const QString &folder, const QModelIndex &dest);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void run() override;
|
void run() override;
|
||||||
@ -25,6 +27,10 @@ private:
|
|||||||
QString source;
|
QString source;
|
||||||
QString target;
|
QString target;
|
||||||
bool stopRunning;
|
bool stopRunning;
|
||||||
|
bool partialUpdate;
|
||||||
|
QModelIndex folderDestinationModelIndex;
|
||||||
|
|
||||||
|
void updateFromSQLQuery(QSqlDatabase &db, QSqlQuery &query);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user