Add reindex action

This commit is contained in:
2022-04-22 22:01:21 +02:00
parent 95e4774507
commit 903ec65d52
4 changed files with 91 additions and 53 deletions
+31 -4
View File
@@ -139,6 +139,28 @@ void Database::indexDir(const QDir &dir, QProgressDialog *progress)
database.rollback(); database.rollback();
} }
void Database::reindex(QProgressDialog *progress)
{
QVariantList deleteids;
QSqlDatabase database = QSqlDatabase::database();
QSqlQuery files = database.exec("SELECT id,file,mtime FROM fits_files");
progress->setMaximum(files.size());
int i = 0;
while(files.next())
{
QString path = files.value(1).toString();
QFileInfo file(path);
if(file.exists() && file.fileTime(QFileDevice::FileModificationTime).toUTC().toString(Qt::ISODate) != files.value(2).toString())
indexFile(file);
if(!file.exists())
deleteids.append(files.value(0));
progress->setValue(i++);
}
QSqlQuery deleteFiles("DELETE FROM fits_files WHERE id = ?", database);
deleteFiles.bindValue(0, deleteids);
deleteFiles.execBatch();
}
QStringList Database::getFitsKeywords() QStringList Database::getFitsKeywords()
{ {
m_headerKeywords.exec(); m_headerKeywords.exec();
@@ -161,11 +183,18 @@ bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
if(!indexDir2(dir.filePath(d), progress)) if(!indexDir2(dir.filePath(d), progress))
return false; return false;
} }
ImageInfoData info;
for(const QFileInfo &file : files) for(const QFileInfo &file : files)
{ {
progress->setValue(m_progress++); progress->setValue(m_progress++);
if(progress->wasCanceled())return false; if(progress->wasCanceled())return false;
if(!indexFile(file))return false;
}
return true;
}
bool Database::indexFile(const QFileInfo &file)
{
ImageInfoData info;
QString filePath = file.absoluteFilePath(); QString filePath = file.absoluteFilePath();
QString mtime = file.fileTime(QFileDevice::FileModificationTime).toUTC().toString(Qt::ISODate); QString mtime = file.fileTime(QFileDevice::FileModificationTime).toUTC().toString(Qt::ISODate);
m_checkFile.bindValue(0, filePath); m_checkFile.bindValue(0, filePath);
@@ -173,7 +202,7 @@ bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
if(m_checkFile.next()) if(m_checkFile.next())
{ {
if(m_checkFile.value(1).toString() == mtime) if(m_checkFile.value(1).toString() == mtime)
continue; return true;
else else
{ {
m_deleteFile.bindValue(0, m_checkFile.value(0).toLongLong()); m_deleteFile.bindValue(0, m_checkFile.value(0).toLongLong());
@@ -217,7 +246,5 @@ bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
} }
} }
qDebug() << filePath << last_id; qDebug() << filePath << last_id;
info.fitsHeader.clear();
}
return true; return true;
} }
+2
View File
@@ -31,9 +31,11 @@ public:
void clearMarkedFiles(); void clearMarkedFiles();
void indexDir(const QDir &dir, QProgressDialog *progress); void indexDir(const QDir &dir, QProgressDialog *progress);
void reindex(QProgressDialog *progress);
QStringList getFitsKeywords(); QStringList getFitsKeywords();
protected: protected:
bool indexDir2(const QDir &dir, QProgressDialog *progress); bool indexDir2(const QDir &dir, QProgressDialog *progress);
bool indexFile(const QFileInfo &file);
bool checkError(QSqlQuery &query); bool checkError(QSqlQuery &query);
}; };
+8
View File
@@ -91,6 +91,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
fileMenu->addAction(tr("Move marked files"), this, SLOT(moveMarked())); fileMenu->addAction(tr("Move marked files"), this, SLOT(moveMarked()));
fileMenu->addAction(tr("Save as"), this, SLOT(saveAs()), QKeySequence("Ctrl+S")); fileMenu->addAction(tr("Save as"), this, SLOT(saveAs()), QKeySequence("Ctrl+S"));
fileMenu->addAction(tr("Index directory"), this, SLOT(indexDir())); fileMenu->addAction(tr("Index directory"), this, SLOT(indexDir()));
fileMenu->addAction(tr("Reindex files"), this, SLOT(reindex()));
QAction *liveModeAction = fileMenu->addAction(tr("Live mode"), this, SLOT(liveMode(bool))); QAction *liveModeAction = fileMenu->addAction(tr("Live mode"), this, SLOT(liveMode(bool)));
liveModeAction->setCheckable(true); liveModeAction->setCheckable(true);
fileMenu->addAction(tr("Exit"), this, SLOT(close())); fileMenu->addAction(tr("Exit"), this, SLOT(close()));
@@ -358,6 +359,13 @@ void MainWindow::indexDir()
} }
} }
void MainWindow::reindex()
{
QProgressDialog progressDialog(tr("Indexing FITS files"), tr("Cancel"), 0, 1, this);
progressDialog.setModal(true);
m_database->reindex(&progressDialog);
}
void MainWindow::saveAs() void MainWindow::saveAs()
{ {
QString selectedFilter; QString selectedFilter;
+1
View File
@@ -45,6 +45,7 @@ protected slots:
void loadFile(const QString &path); void loadFile(const QString &path);
void loadFile(int row); void loadFile(int row);
void indexDir(); void indexDir();
void reindex();
void saveAs(); void saveAs();
void convert(const QString &outfile); void convert(const QString &outfile);
void markImage(); void markImage();