Add progress bar for indexing
This commit is contained in:
+22
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user