Add progress bar for indexing

This commit is contained in:
2022-04-09 14:12:41 +02:00
parent 04e2cfa290
commit 9596bfa7a8
6 changed files with 45 additions and 10 deletions
+22 -6
View File
@@ -108,11 +108,24 @@ bool Database::checkError()
}
}
void Database::indexDir(const QDir &dir)
static QStringList nameFilters = {"*.fit", "*.fits"};
static int countFiles(const QDir &dir, int count = 0)
{
//m_database.exec("DROP TABLE fits_files");
count += dir.entryList(nameFilters, QDir::Files).size();
QStringList dirs = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
for(const QString &d : dirs)
count += countFiles(dir.filePath(d));
return count;
}
void Database::indexDir(const QDir &dir, QProgressDialog *progress)
{
m_progress = 0;
int count = countFiles(dir);
progress->setMaximum(count);
m_database.transaction();
if(indexDir2(dir))
if(indexDir2(dir, progress))
m_database.commit();
else
m_database.rollback();
@@ -129,19 +142,22 @@ QStringList Database::getFitsKeywords()
return keywords;
}
bool Database::indexDir2(const QDir &dir)
bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
{
static QStringList nameFilters = {"*.fit", "*.fits"};
QFileInfoList files = dir.entryInfoList(nameFilters, QDir::Files);
QStringList dirs = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
for(const QString &d : dirs)
{
if(!indexDir2(dir.filePath(d)))
if(!indexDir2(dir.filePath(d), progress))
return false;
}
ImageInfoData info;
for(const QFileInfo &file : files)
{
progress->setValue(m_progress++);
if(progress->wasCanceled())return false;
QString filePath = file.absoluteFilePath();
QString mtime = file.fileTime(QFileDevice::FileModificationTime).toString(Qt::ISODate);
m_checkFile.bindValue(0, filePath);