parent
2429fe8ecd
commit
a4c680b343
|
@ -69,6 +69,9 @@ int FileDataBase::insertData(const QList<FileInfo> &fileinfoList)
|
|||
|
||||
int count = 0;
|
||||
for (FileInfo fileinfo : fileinfoList) {
|
||||
if (m_isStop) {
|
||||
return count;
|
||||
}
|
||||
if (insertData(fileinfo)) {
|
||||
// 成功更新数据
|
||||
count++;
|
||||
|
@ -89,6 +92,9 @@ int FileDataBase::removeData(const QStringList &filePathList)
|
|||
QSqlQuery query(m_DataBase);
|
||||
int count = 0;
|
||||
for (QString path : dataBaseList) {
|
||||
if (m_isStop) {
|
||||
return count;
|
||||
}
|
||||
if (!filePathList.contains(path)) {
|
||||
// 数据库中的数据本地不能存在,删除该数据
|
||||
QString sqlStr = QString("delete from %1 where path = '%2'").arg(TABLE_NAME).arg(path);
|
||||
|
@ -109,6 +115,11 @@ int FileDataBase::removeData(const QStringList &filePathList)
|
|||
return count;
|
||||
}
|
||||
|
||||
void FileDataBase::stopRun()
|
||||
{
|
||||
m_isStop = true;
|
||||
}
|
||||
|
||||
bool FileDataBase::initTable()
|
||||
{
|
||||
if (!m_DataBase.open()) {
|
||||
|
@ -230,6 +241,9 @@ FileDataBase::DataStatus FileDataBase::getDataStatus(const FileInfo &fileinfo)
|
|||
}
|
||||
if (query.exec()) {
|
||||
while (query.next()) {
|
||||
if (m_isStop) {
|
||||
return DataStatus::NOUPDATE;
|
||||
}
|
||||
if (fileinfo.getPath() == query.value(HEADER_NAME::PATH).toString()) {
|
||||
if (fileinfo.size() == query.value(HEADER_NAME::SIZE).toInt() &&
|
||||
fileinfo.dateTime() == query.value(HEADER_NAME::DATE).toString()) {
|
||||
|
@ -276,6 +290,9 @@ QStringList FileDataBase::getDataPathList()
|
|||
}
|
||||
|
||||
while (query.next()) {
|
||||
if (m_isStop) {
|
||||
return filePathList;
|
||||
}
|
||||
filePathList.append(query.value(HEADER_NAME::PATH).toString());
|
||||
}
|
||||
return filePathList;
|
||||
|
|
|
@ -21,11 +21,13 @@ public:
|
|||
// 删除数据库中filePathList没有的数据, 返回删除条数
|
||||
int removeData(const QStringList &filePathList);
|
||||
|
||||
void stopRun();
|
||||
|
||||
private:
|
||||
enum DataStatus {
|
||||
NEEDUPDATE = 0, // 该行数据需要更新
|
||||
NEEDINSTER = 1, // 需要插入该数据
|
||||
NOUPDATE = 2, // 不需要更新
|
||||
NEEDUPDATE = 0, // 该行数据需要更新
|
||||
NEEDINSTER = 1, // 需要插入该数据
|
||||
NOUPDATE = 2, // 不需要更新
|
||||
};
|
||||
Q_ENUM(DataStatus)
|
||||
|
||||
|
@ -47,8 +49,9 @@ private:
|
|||
bool update(const FileInfo &fileinfo);
|
||||
|
||||
private:
|
||||
QSqlDatabase m_DataBase; // 数据库对象
|
||||
QSqlDatabase m_DataBase; // 数据库对象
|
||||
QMutex m_mutex;
|
||||
bool m_isStop = false;
|
||||
};
|
||||
|
||||
#endif // FILEDATABASE_H
|
||||
#endif // FILEDATABASE_H
|
|
@ -26,6 +26,11 @@ DirManager::~DirManager()
|
|||
}
|
||||
}
|
||||
|
||||
void DirManager::stopRun()
|
||||
{
|
||||
m_dataBase->stopRun();
|
||||
}
|
||||
|
||||
void DirManager::run()
|
||||
{
|
||||
QStringList list;
|
||||
|
|
|
@ -16,6 +16,8 @@ public:
|
|||
DirManager();
|
||||
~DirManager();
|
||||
|
||||
void stopRun();
|
||||
|
||||
protected:
|
||||
void run();
|
||||
|
||||
|
@ -25,12 +27,12 @@ private:
|
|||
|
||||
private:
|
||||
FileDataBase *m_dataBase = nullptr;
|
||||
QList<FileInfo> m_fileinfoList; // 文件信息列表,保存遍历的文件信息
|
||||
QStringList m_filePathList; // 单独保存所以文件路径,用于对比删除数据库中不存在的文件信息
|
||||
QList<FileInfo> m_fileinfoList; // 文件信息列表,保存遍历的文件信息
|
||||
QStringList m_filePathList; // 单独保存所以文件路径,用于对比删除数据库中不存在的文件信息
|
||||
Q_SIGNALS:
|
||||
void finish(); // 处理完成信号
|
||||
void finish(); // 处理完成信号
|
||||
|
||||
public Q_SLOTS:
|
||||
};
|
||||
|
||||
#endif // DIRMANAGER_H
|
||||
#endif // DIRMANAGER_H
|
|
@ -308,6 +308,7 @@ void MainWindow::deleterService()
|
|||
}
|
||||
if (m_dirManager != nullptr) {
|
||||
qInfo() << "close dir manage!";
|
||||
m_dirManager->stopRun();
|
||||
m_dirManager->requestInterruption();
|
||||
m_dirManager->quit();
|
||||
m_dirManager->wait();
|
||||
|
|
Loading…
Reference in New Issue