Add reindex action
This commit is contained in:
+31
-4
@@ -139,6 +139,28 @@ void Database::indexDir(const QDir &dir, QProgressDialog *progress)
|
||||
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()
|
||||
{
|
||||
m_headerKeywords.exec();
|
||||
@@ -161,11 +183,18 @@ bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
|
||||
if(!indexDir2(dir.filePath(d), progress))
|
||||
return false;
|
||||
}
|
||||
ImageInfoData info;
|
||||
for(const QFileInfo &file : files)
|
||||
{
|
||||
progress->setValue(m_progress++);
|
||||
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 mtime = file.fileTime(QFileDevice::FileModificationTime).toUTC().toString(Qt::ISODate);
|
||||
m_checkFile.bindValue(0, filePath);
|
||||
@@ -173,7 +202,7 @@ bool Database::indexDir2(const QDir &dir, QProgressDialog *progress)
|
||||
if(m_checkFile.next())
|
||||
{
|
||||
if(m_checkFile.value(1).toString() == mtime)
|
||||
continue;
|
||||
return true;
|
||||
else
|
||||
{
|
||||
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;
|
||||
info.fitsHeader.clear();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -31,9 +31,11 @@ public:
|
||||
void clearMarkedFiles();
|
||||
|
||||
void indexDir(const QDir &dir, QProgressDialog *progress);
|
||||
void reindex(QProgressDialog *progress);
|
||||
QStringList getFitsKeywords();
|
||||
protected:
|
||||
bool indexDir2(const QDir &dir, QProgressDialog *progress);
|
||||
bool indexFile(const QFileInfo &file);
|
||||
bool checkError(QSqlQuery &query);
|
||||
};
|
||||
|
||||
|
||||
@@ -91,6 +91,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||
fileMenu->addAction(tr("Move marked files"), this, SLOT(moveMarked()));
|
||||
fileMenu->addAction(tr("Save as"), this, SLOT(saveAs()), QKeySequence("Ctrl+S"));
|
||||
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)));
|
||||
liveModeAction->setCheckable(true);
|
||||
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()
|
||||
{
|
||||
QString selectedFilter;
|
||||
|
||||
@@ -45,6 +45,7 @@ protected slots:
|
||||
void loadFile(const QString &path);
|
||||
void loadFile(int row);
|
||||
void indexDir();
|
||||
void reindex();
|
||||
void saveAs();
|
||||
void convert(const QString &outfile);
|
||||
void markImage();
|
||||
|
||||
Reference in New Issue
Block a user