Add move marked files

This commit is contained in:
2022-04-21 16:47:03 +02:00
parent da1843e48c
commit 8b968ddcb1
4 changed files with 65 additions and 35 deletions
+5
View File
@@ -98,6 +98,11 @@ QStringList Database::getMarkedFiles()
return files;
}
void Database::clearMarkedFiles()
{
QSqlDatabase::database().exec("DELETE FROM files");
}
bool Database::checkError(QSqlQuery &query)
{
QSqlError error = query.lastError();
+1
View File
@@ -28,6 +28,7 @@ public:
bool unmark(const QString &filename);
bool isMarked(const QString &filename);
QStringList getMarkedFiles();
void clearMarkedFiles();
void indexDir(const QDir &dir, QProgressDialog *progress);
QStringList getFitsKeywords();
+56 -34
View File
@@ -87,6 +87,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
QMenu *fileMenu = new QMenu(tr("File"), this);
fileMenu->addAction(tr("Open"), this, SLOT(loadFile()), QKeySequence("Ctrl+O"));
fileMenu->addAction(tr("Copy marked files"), this, SLOT(copyMarked()));
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()));
QAction *liveModeAction = fileMenu->addAction(tr("Live mode"), this, SLOT(liveMode(bool)));
@@ -244,6 +245,57 @@ void MainWindow::closeEvent(QCloseEvent *event)
QMainWindow::closeEvent(event);
}
void MainWindow::copyOrMove(bool copy)
{
QString dest = QFileDialog::getExistingDirectory(this, tr("Select destination"), _lastDir);
QDir dir(dest);
if(!dest.isEmpty() && dir.exists())
{
int i = 0;
QStringList files = m_database->getMarkedFiles();
QProgressDialog progress(copy ? tr("Copying") : tr("Moving"), tr("Cancel"), 0, files.size(), this);
progress.setWindowModality(Qt::WindowModal);
progress.show();
foreach(const QString &file, files)
{
QFileInfo info(file);
QFile srcFile(file);
QFile dstFile(dir.absoluteFilePath(info.fileName()));
if(dstFile.exists())
continue;
if(progress.wasCanceled())
break;
#ifndef __linux__
if(copy)
{
srcFile.open(QIODevice::ReadOnly);
dstFile.open(QIODevice::WriteOnly);
if(ioctl(dstFile.handle(), BTRFS_IOC_CLONE, srcFile.handle()) < 0)
{
dstFile.remove();
dstFile.close();
qDebug() << dstFile.fileName();
srcFile.copy(dstFile.fileName());
}
}
else
{
srcFile.rename(dstFile.fileName());
}
#else
if(copy)
srcFile.copy(dstFile.fileName());
else
srcFile.rename(dstFile.fileName());
#endif
progress.setValue(i++);
}
}
m_database->clearMarkedFiles();
}
void MainWindow::socketNotify()
{
socketNotifier->setEnabled(false);
@@ -377,42 +429,12 @@ void MainWindow::unmarkAndNext()
void MainWindow::copyMarked()
{
QString dest = QFileDialog::getExistingDirectory(this, tr("Select destination"));
QDir dir(dest);
if(!dest.isEmpty() && dir.exists())
{
int i = 0;
QStringList files = m_database->getMarkedFiles();
QProgressDialog progress(tr("Copying"), tr("Cancel"), 0, files.size(), this);
progress.setWindowModality(Qt::WindowModal);
progress.show();
foreach(const QString &file, files)
{
QFileInfo info(file);
QFile srcFile(file);
QFile dstFile(dir.absoluteFilePath(info.fileName()));
copyOrMove(true);
}
if(dstFile.exists())
continue;
if(progress.wasCanceled())
break;
#ifdef __linux__
srcFile.open(QIODevice::ReadOnly);
dstFile.open(QIODevice::WriteOnly);
if(ioctl(dstFile.handle(), BTRFS_IOC_CLONE, srcFile.handle()) < 0)
void MainWindow::moveMarked()
{
dstFile.remove();
dstFile.close();
qDebug() << dstFile.fileName();
srcFile.copy(dstFile.fileName());
}
#else
srcFile.copy(dstFile.fileName());
#endif
progress.setValue(i++);
}
}
copyOrMove(false);
}
void MainWindow::toggleFullScreen()
+2
View File
@@ -36,6 +36,7 @@ protected:
void setupSigterm();
static void signalHandler(int);
void closeEvent(QCloseEvent *event);
void copyOrMove(bool copy);
protected slots:
void socketNotify();
void updateWindowTitle();
@@ -51,6 +52,7 @@ protected slots:
void markAndNext();
void unmarkAndNext();
void copyMarked();
void moveMarked();
void toggleFullScreen();
void liveMode(bool active);
void imageStats(bool imageStats);