Add move marked files
This commit is contained in:
+57
-35
@@ -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)
|
||||
{
|
||||
dstFile.remove();
|
||||
dstFile.close();
|
||||
qDebug() << dstFile.fileName();
|
||||
srcFile.copy(dstFile.fileName());
|
||||
}
|
||||
#else
|
||||
srcFile.copy(dstFile.fileName());
|
||||
#endif
|
||||
progress.setValue(i++);
|
||||
}
|
||||
}
|
||||
void MainWindow::moveMarked()
|
||||
{
|
||||
copyOrMove(false);
|
||||
}
|
||||
|
||||
void MainWindow::toggleFullScreen()
|
||||
|
||||
Reference in New Issue
Block a user