shared: SqliteDbService: Add insertOutline(), Use DocumentProcessResult
This commit is contained in:
		| @@ -253,6 +253,29 @@ bool SqliteDbService::insertToFTS(bool useTrigrams, QSqlDatabase &db, int fileid | |||||||
| 	return true; | 	return true; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool SqliteDbService::insertOutline(QSqlDatabase &db, int fileid, const QVector<DocumentOutlineEntry> &outlines) | ||||||
|  | { | ||||||
|  | 	QSqlQuery outlineQuery(db); | ||||||
|  | 	outlineQuery.prepare("INSERT INTO outline(fileid, text, page) VALUES(?,?,?)"); | ||||||
|  | 	outlineQuery.addBindValue(fileid); | ||||||
|  | 	for(const DocumentOutlineEntry &outline : outlines) | ||||||
|  | 	{ | ||||||
|  | 		outlineQuery.bindValue(1, outline.text.toLower()); | ||||||
|  | 		outlineQuery.bindValue(2, outline.destinationPage); | ||||||
|  | 		if(!outlineQuery.exec()) | ||||||
|  | 		{ | ||||||
|  | 			Logger::error() << "Failed outline insertion " << outlineQuery.lastError() << Qt::endl; | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 		if(!insertOutline(db, fileid, outline.children)) | ||||||
|  | 		{ | ||||||
|  | 			Logger::error() << "Failed outline insertion (children)) " << outlineQuery.lastError() << Qt::endl; | ||||||
|  | 			return false; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return true; | ||||||
|  | } | ||||||
|  |  | ||||||
| QSqlQuery SqliteDbService::exec(QString querystr, std::initializer_list<QVariant> args) | QSqlQuery SqliteDbService::exec(QString querystr, std::initializer_list<QVariant> args) | ||||||
| { | { | ||||||
| 	auto query = QSqlQuery(dbFactory->forCurrentThread()); | 	auto query = QSqlQuery(dbFactory->forCurrentThread()); | ||||||
| @@ -278,7 +301,7 @@ bool SqliteDbService::execBool(QString querystr, std::initializer_list<QVariant> | |||||||
| 	return query.value(0).toBool(); | 	return query.value(0).toBool(); | ||||||
| } | } | ||||||
|  |  | ||||||
| SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, QVector<PageData> &pageData, bool pathsOnly) | SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, DocumentProcessResult &processResult, bool pathsOnly) | ||||||
| { | { | ||||||
| 	QString absPath = fileInfo.absoluteFilePath(); | 	QString absPath = fileInfo.absoluteFilePath(); | ||||||
| 	auto mtime = fileInfo.lastModified().toSecsSinceEpoch(); | 	auto mtime = fileInfo.lastModified().toSecsSinceEpoch(); | ||||||
| @@ -323,18 +346,24 @@ SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, QVector<PageData> & | |||||||
| 	if(!pathsOnly) | 	if(!pathsOnly) | ||||||
| 	{ | 	{ | ||||||
| 		int lastid = inserterQuery.lastInsertId().toInt(); | 		int lastid = inserterQuery.lastInsertId().toInt(); | ||||||
| 		if(!insertToFTS(false, db, lastid, pageData)) | 		if(!insertToFTS(false, db, lastid, processResult.pages)) | ||||||
| 		{ | 		{ | ||||||
| 			db.rollback(); | 			db.rollback(); | ||||||
| 			Logger::error() << "Failed to insert data to FTS index " << Qt::endl; | 			Logger::error() << "Failed to insert data to FTS index " << Qt::endl; | ||||||
| 			return DBFAIL; | 			return DBFAIL; | ||||||
| 		} | 		} | ||||||
| 		if(!insertToFTS(true, db, lastid, pageData)) | 		if(!insertToFTS(true, db, lastid, processResult.pages)) | ||||||
| 		{ | 		{ | ||||||
| 			db.rollback(); | 			db.rollback(); | ||||||
| 			Logger::error() << "Failed to insert data to FTS index " << Qt::endl; | 			Logger::error() << "Failed to insert data to FTS index " << Qt::endl; | ||||||
| 			return DBFAIL; | 			return DBFAIL; | ||||||
| 		} | 		} | ||||||
|  | 		if(!insertOutline(db, lastid, processResult.outlines)) | ||||||
|  | 		{ | ||||||
|  | 			db.rollback(); | ||||||
|  | 			Logger::error() << "Failed to insert outline data " << Qt::endl; | ||||||
|  | 			return DBFAIL; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if(!db.commit()) | 	if(!db.commit()) | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
|  |  | ||||||
| #include "databasefactory.h" | #include "databasefactory.h" | ||||||
| #include "utils.h" | #include "utils.h" | ||||||
| #include "pagedata.h" | #include "documentprocessresult.h" | ||||||
| #include "filedata.h" | #include "filedata.h" | ||||||
| #include "../shared/sqlitesearch.h" | #include "../shared/sqlitesearch.h" | ||||||
| #include "../shared/token.h" | #include "../shared/token.h" | ||||||
| @@ -22,7 +22,7 @@ class SqliteDbService | |||||||
|  |  | ||||||
|   public: |   public: | ||||||
| 	SqliteDbService(DatabaseFactory &dbFactory); | 	SqliteDbService(DatabaseFactory &dbFactory); | ||||||
| 	SaveFileResult saveFile(QFileInfo fileInfo, QVector<PageData> &pageData, bool pathsOnly); | 	SaveFileResult saveFile(QFileInfo fileInfo, DocumentProcessResult &pageData, bool pathsOnly); | ||||||
|  |  | ||||||
| 	bool deleteFile(QString path); | 	bool deleteFile(QString path); | ||||||
| 	bool fileExistsInDatabase(QString path); | 	bool fileExistsInDatabase(QString path); | ||||||
| @@ -42,6 +42,7 @@ class SqliteDbService | |||||||
| 	QVector<SearchResult> search(const LooqsQuery &query); | 	QVector<SearchResult> search(const LooqsQuery &query); | ||||||
|  |  | ||||||
| 	std::optional<QChar> queryFileType(QString absPath); | 	std::optional<QChar> queryFileType(QString absPath); | ||||||
|  | 	bool insertOutline(QSqlDatabase &db, int fileid, const QVector<DocumentOutlineEntry> &outlines); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif // SQLITEDBSERVICE_H | #endif // SQLITEDBSERVICE_H | ||||||
|   | |||||||
		Fai riferimento in un nuovo problema
	
	Block a user