aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-06-11 10:55:18 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2015-06-11 10:55:18 +0000
commit6febc67023d60af694b47f07773f5488ad4c57f3 (patch)
tree9af48ae744d01b60b2245d87c2f1ec505df32631 /src/plugins/General
parent08d61df01bcf33bd7d1f7dcf0a56730e94381faa (diff)
downloadqmmp-6febc67023d60af694b47f07773f5488ad4c57f3.tar.gz
qmmp-6febc67023d60af694b47f07773f5488ad4c57f3.tar.bz2
qmmp-6febc67023d60af694b47f07773f5488ad4c57f3.zip
fileops: refactoring
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@5127 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General')
-rw-r--r--src/plugins/General/fileops/fileops.cpp323
-rw-r--r--src/plugins/General/fileops/fileops.h8
2 files changed, 180 insertions, 151 deletions
diff --git a/src/plugins/General/fileops/fileops.cpp b/src/plugins/General/fileops/fileops.cpp
index ffce45a0c..65c7b1b66 100644
--- a/src/plugins/General/fileops/fileops.cpp
+++ b/src/plugins/General/fileops/fileops.cpp
@@ -99,91 +99,17 @@ void FileOps::execAction(int n)
tr("Destination directory doesn't exist"));
break;
}
- QProgressDialog progress(qApp->activeWindow ());
- progress.setWindowModality(Qt::WindowModal);
- progress.setWindowTitle(tr("Copying"));
- progress.setCancelButtonText(tr("Stop"));
- progress.show();
- progress.setAutoClose (false);
- int i = 0;
- foreach(PlayListTrack *item, tracks)
- {
- if (!QFile::exists(item->url()))
- continue;
- //generate file name
- QString fname = formatter.format(item);
- //append extension
- QString ext = QString(".") + item->url().section(".", -1).toLower();
- if (!ext.isEmpty() && !fname.endsWith(ext, Qt::CaseInsensitive))
- fname += ext;
- //create destination path
- QString path = destination + "/" + fname;
- QDir dir = QFileInfo(path).dir();
- if(!dir.exists())
- {
- if(!dir.mkpath(dir.absolutePath()))
- {
- qWarning("FileOps: unable to create directory");
- continue;
- }
- }
- //copy file
- QFile in(item->url());
- QFile out(path);
- if (!in.open(QIODevice::ReadOnly))
- {
- qWarning("FileOps: %s", qPrintable(in.errorString ()));
- continue;
- }
- if (!out.open(QIODevice::WriteOnly))
- {
- qWarning("FileOps: %s", qPrintable(out.errorString ()));
- continue;
- }
-
- progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
- progress.setValue(0);
- progress.setLabelText (QString(tr("Copying file %1/%2")).arg(++i).arg(tracks.size()));
- progress.update();
-
- while (!in.atEnd ())
- {
- out.write(in.read(COPY_BLOCK_SIZE));
- progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
- qApp->processEvents();
- }
- if(progress.wasCanceled ())
- break;
- }
- progress.close();
+ copy(tracks, destination, &formatter);
break;
}
case RENAME:
+ {
qDebug("FileOps: rename");
- foreach(PlayListTrack *item, tracks)
- {
- if (!QFile::exists(item->url())) //is it file?
- continue;
- //generate file name
- QString fname = formatter.format(item);
- //append extension
- QString ext = QString(".") + item->url().section(".", -1).toLower();
- if (!ext.isEmpty() && !fname.endsWith(ext, Qt::CaseInsensitive))
- fname += ext;
- //rename file
- QFile file(item->url());
- destination = QFileInfo(item->url()).absolutePath ();
- if (file.rename(destination + "/" + fname))
- {
- item->insert(Qmmp::URL, destination + "/" + fname);
- model->doCurrentVisibleRequest();
- }
- else
- continue;
- }
+ rename(tracks, &formatter, model);
break;
-
+ }
case REMOVE:
+ {
qDebug("FileOps: remove");
if (QMessageBox::question (qApp->activeWindow (), tr("Remove Files"),
tr("Are you sure you want to remove %n file(s) from disk?",
@@ -197,7 +123,7 @@ void FileOps::execAction(int n)
model->removeTrack(track);
}
break;
-
+ }
case MOVE:
{
qDebug("FileOps: move");
@@ -214,90 +140,185 @@ void FileOps::execAction(int n)
{
break;
}
- QProgressDialog progress(qApp->activeWindow ());
- progress.setWindowModality(Qt::WindowModal);
- progress.setWindowTitle(tr("Renaming"));
- progress.setCancelButtonText(tr("Stop"));
- progress.show();
- progress.setAutoClose (false);
- int i = 0;
- foreach(PlayListTrack *item, tracks)
- {
- if (!QFile::exists(item->url()))
- continue;
- //generate file name
- QString fname = formatter.format(item);
- //append extension
- QString ext = QString(".") + item->url().section(".", -1).toLower();
- if (!ext.isEmpty() && !fname.endsWith(ext, Qt::CaseInsensitive))
- fname += ext;
- //create destination path
- QString path = destination + "/" + fname;
- //skip moved files
- if(path == item->url())
- continue;
+ move(tracks, destination, &formatter, model);
+ break;
+ }
+ }
+}
- QDir dir = QFileInfo(path).dir();
- if(!dir.exists())
- {
- if(!dir.mkpath(dir.absolutePath()))
- {
- qWarning("FileOps: unable to create directory");
- continue;
- }
- }
+void FileOps::copy(QList<PlayListTrack *> tracks, const QString &dest, MetaDataFormatter *formatter)
+{
+ QProgressDialog progress(qApp->activeWindow ());
+ progress.setWindowModality(Qt::WindowModal);
+ progress.setWindowTitle(tr("Copying"));
+ progress.setCancelButtonText(tr("Stop"));
+ progress.show();
+ progress.setAutoClose (false);
+ int i = 0;
+ foreach(PlayListTrack *track, tracks)
+ {
+ if (!QFile::exists(track->url()))
+ continue;
- progress.setRange(0, 100);
- progress.setValue(0);
- progress.setLabelText (QString(tr("Moving file %1/%2")).arg(++i).arg(tracks.size()));
- progress.update();
- //try to rename file first
- if(QFile::rename(item->url(), path))
- {
- progress.setValue(100);
- item->insert(Qmmp::URL, path);
- model->doCurrentVisibleRequest();
- continue;
- }
- //copy file
- QFile in(item->url());
- QFile out(path);
- if (!in.open(QIODevice::ReadOnly))
- {
- qWarning("FileOps: %s", qPrintable(in.errorString ()));
- continue;
- }
- if (!out.open(QIODevice::WriteOnly))
+ QString fileName = formatter->format(track); //generate file name
+
+ QString ext = QString(".") + track->url().section(".", -1).toLower();
+ if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ fileName += ext; //append extension
+
+ //create destination path
+ QString path = dest + "/" + fileName;
+ QDir dir = QFileInfo(path).dir();
+ if(!dir.exists())
+ {
+ if(!dir.mkpath(dir.absolutePath()))
{
- qWarning("FileOps: %s", qPrintable(out.errorString ()));
+ qWarning("FileOps: unable to create directory");
continue;
}
+ }
+ if(track->url() == path)
+ continue;
- progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
- progress.setValue(0);
- progress.update();
+ //copy file
+ QFile in(track->url());
+ QFile out(path);
+ if (!in.open(QIODevice::ReadOnly))
+ {
+ qWarning("FileOps: %s", qPrintable(in.errorString ()));
+ continue;
+ }
+ if (!out.open(QIODevice::WriteOnly))
+ {
+ qWarning("FileOps: %s", qPrintable(out.errorString ()));
+ continue;
+ }
- while (!in.atEnd ())
- {
- progress.wasCanceled ();
- out.write(in.read(COPY_BLOCK_SIZE));
- progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
- qApp->processEvents();
- }
+ progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
+ progress.setValue(0);
+ progress.setLabelText (QString(tr("Copying file %1/%2")).arg(++i).arg(tracks.size()));
+ progress.update();
+
+ while (!in.atEnd ())
+ {
+ out.write(in.read(COPY_BLOCK_SIZE));
+ progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
+ qApp->processEvents();
+ }
+ if(progress.wasCanceled ())
+ break;
+ }
+ progress.close();
+}
+
+void FileOps::rename(QList<PlayListTrack *> tracks, MetaDataFormatter *formatter, PlayListModel *model)
+{
+ foreach(PlayListTrack *item, tracks)
+ {
+ if (!QFile::exists(item->url())) //is it file?
+ continue;
+
+ QString fileName = formatter->format(item); //generate file name
- in.close();
+ QString ext = QString(".") + item->url().section(".", -1).toLower();
+ if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ fileName += ext; //append extension
+ //rename file
+ QFile file(item->url());
+ QString dest = QFileInfo(item->url()).absolutePath ();
+ if (file.rename(dest + "/" + fileName))
+ {
+ item->insert(Qmmp::URL, dest + "/" + fileName);
+ model->doCurrentVisibleRequest();
+ }
+ else
+ continue;
+ }
+}
- if(!QFile::remove(item->url()))
- qWarning("FileOps: unable to remove file '%s'", qPrintable(item->url()));
+void FileOps::move(QList<PlayListTrack *> tracks, const QString &dest, MetaDataFormatter *formatter, PlayListModel *model)
+{
+ QProgressDialog progress(qApp->activeWindow ());
+ progress.setWindowModality(Qt::WindowModal);
+ progress.setWindowTitle(tr("Renaming"));
+ progress.setCancelButtonText(tr("Stop"));
+ progress.show();
+ progress.setAutoClose (false);
+ int i = 0;
+ foreach(PlayListTrack *item, tracks)
+ {
+ if (!QFile::exists(item->url()))
+ continue;
+ QString fileName = formatter->format(item); //generate file name
+
+ QString ext = QString(".") + item->url().section(".", -1).toLower();
+ if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ fileName += ext; //append extension
+ //create destination path
+ QString path = dest + "/" + fileName;
+ //skip moved files
+ if(path == item->url())
+ continue;
+
+ QDir dir = QFileInfo(path).dir();
+ if(!dir.exists())
+ {
+ if(!dir.mkpath(dir.absolutePath()))
+ {
+ qWarning("FileOps: unable to create directory");
+ continue;
+ }
+ }
+
+ progress.setRange(0, 100);
+ progress.setValue(0);
+ progress.setLabelText (QString(tr("Moving file %1/%2")).arg(++i).arg(tracks.size()));
+ progress.update();
+ //try to rename file first
+ if(QFile::rename(item->url(), path))
+ {
+ progress.setValue(100);
item->insert(Qmmp::URL, path);
model->doCurrentVisibleRequest();
+ continue;
+ }
+ //copy file
+ QFile in(item->url());
+ QFile out(path);
+ if (!in.open(QIODevice::ReadOnly))
+ {
+ qWarning("FileOps: %s", qPrintable(in.errorString ()));
+ continue;
+ }
+ if (!out.open(QIODevice::WriteOnly))
+ {
+ qWarning("FileOps: %s", qPrintable(out.errorString ()));
+ continue;
+ }
+
+ progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
+ progress.setValue(0);
+ progress.update();
- if(progress.wasCanceled())
- break;
+ while (!in.atEnd ())
+ {
+ progress.wasCanceled ();
+ out.write(in.read(COPY_BLOCK_SIZE));
+ progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
+ qApp->processEvents();
}
- progress.close();
- break;
- }
+
+ in.close();
+
+ if(!QFile::remove(item->url()))
+ qWarning("FileOps: unable to remove file '%s'", qPrintable(item->url()));
+
+ item->insert(Qmmp::URL, path);
+ model->doCurrentVisibleRequest();
+
+ if(progress.wasCanceled())
+ break;
}
+ progress.close();
}
diff --git a/src/plugins/General/fileops/fileops.h b/src/plugins/General/fileops/fileops.h
index 23677a0c2..a336b31a1 100644
--- a/src/plugins/General/fileops/fileops.h
+++ b/src/plugins/General/fileops/fileops.h
@@ -26,6 +26,8 @@
class QAction;
class SoundCore;
class PlayListTrack;
+class MetaDataFormatter;
+class PlayListModel;
/**
@author Ilya Kotov <forkotov02@hotmail.ru>
@@ -51,6 +53,12 @@ private slots:
void execAction(int n);
private:
+ void copy(QList<PlayListTrack*> tracks, const QString &dest, MetaDataFormatter *formatter);
+ void rename(QList<PlayListTrack*> tracks, MetaDataFormatter *formatter,
+ PlayListModel *model);
+ void move(QList<PlayListTrack*> tracks, const QString &dest, MetaDataFormatter *formatter,
+ PlayListModel *model);
+
QList <int> m_types;
QStringList m_patterns;
QStringList m_destinations;