aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/fileops/fileops.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-02-25 20:57:39 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-02-25 20:57:39 +0000
commit16cb4ed99ba463daa20feadf35d66af8367efbac (patch)
tree67bb07c1b3461e99b502be51fd07809523c72f0f /src/plugins/General/fileops/fileops.cpp
parent2248c16122f9986aa91a0227a7602e3f21ef4d12 (diff)
downloadqmmp-16cb4ed99ba463daa20feadf35d66af8367efbac.tar.gz
qmmp-16cb4ed99ba463daa20feadf35d66af8367efbac.tar.bz2
qmmp-16cb4ed99ba463daa20feadf35d66af8367efbac.zip
improved fileops plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1584 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General/fileops/fileops.cpp')
-rw-r--r--src/plugins/General/fileops/fileops.cpp77
1 files changed, 21 insertions, 56 deletions
diff --git a/src/plugins/General/fileops/fileops.cpp b/src/plugins/General/fileops/fileops.cpp
index a2cf0ee5d..32aa7b2e2 100644
--- a/src/plugins/General/fileops/fileops.cpp
+++ b/src/plugins/General/fileops/fileops.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009 by Ilya Kotov *
+ * Copyright (C) 2009-2010 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -26,13 +26,13 @@
#include <QMessageBox>
#include <QFile>
#include <QDir>
-
#include <qmmp/soundcore.h>
#include <qmmpui/generalhandler.h>
#include <qmmpui/playlistmodel.h>
#include <qmmpui/playlistmanager.h>
#include <qmmpui/playlistitem.h>
#include <qmmpui/mediaplayer.h>
+#include <qmmpui/metadataformatter.h>
#include "fileops.h"
#define COPY_BLOCK_SIZE 102400
@@ -111,22 +111,33 @@ void FileOps::execAction(int n)
if (!QFile::exists(item->url()))
continue;
//generate file name
- QString fname = generateFileName(item, pattern);
+ MetaDataFormatter formatter(pattern);
+ QString fname = formatter.parse(item);
//append extension
QString ext = QString(".") + item->url().split('.',QString::SkipEmptyParts).takeLast ();
if (!fname.endsWith(ext))
fname += ext;
+ 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(destination + "/" + fname);
+ QFile out(path);
if (!in.open(QIODevice::ReadOnly))
{
- qDebug("FileOps: %s", qPrintable(in.errorString ()));
+ qWarning("FileOps: %s", qPrintable(in.errorString ()));
continue;
}
if (!out.open(QIODevice::WriteOnly))
{
- qDebug("FileOps: %s", qPrintable(out.errorString ()));
+ qWarning("FileOps: %s", qPrintable(out.errorString ()));
continue;
}
@@ -153,7 +164,8 @@ void FileOps::execAction(int n)
if (!QFile::exists(item->url()))
continue;
//generate file name
- QString fname = generateFileName(item, pattern);
+ MetaDataFormatter formatter(pattern);
+ QString fname = formatter.parse(item);
//append extension
QString ext = QString(".") + item->url().split('.',QString::SkipEmptyParts).takeLast ();
if (!fname.endsWith(ext))
@@ -175,7 +187,8 @@ void FileOps::execAction(int n)
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?","",items.size()),
+ tr("Are you sure you want to remove %n file(s) from disk?",
+ "",items.size()),
QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
break;
@@ -186,51 +199,3 @@ void FileOps::execAction(int n)
}
}
}
-//generate file name from tags using given pattern
-QString FileOps::generateFileName(PlayListItem *item, QString pattern)
-{
- QString fname = pattern;
- fname = printTag(fname, "%p", item->artist(), pattern);
- fname = printTag(fname, "%a", item->album(), pattern);
- fname = printTag(fname, "%t", item->title(), pattern);
- if(item->track().size() > 1)
- fname = printTag(fname, "%n", item->track(), pattern);
- else
- fname = printTag(fname, "%n", QString("0") + item->track(), pattern);
- fname = printTag(fname, "%g", item->genre(), pattern);
- fname = printTag(fname, "%f", item->url().section('/',-1), pattern);
- fname = printTag(fname, "%y", QString("%1").arg(item->year ()), pattern);
- if (fname.isEmpty())
- {
- if (item->url().contains('/'))
- fname = item->url().split('/',QString::SkipEmptyParts).takeLast ();
- }
- return fname;
-}
-
-QString FileOps::printTag(QString str, QString regExp, QString tagStr, QString fmt)
-{
- QString format = fmt;
- if (!tagStr.isEmpty())
- str.replace(regExp, tagStr);
- else
- {
- //remove unused separators
- int regExpPos = str.indexOf(regExp);
- if (regExpPos < 0)
- return str;
- int nextPos = str.indexOf("%", regExpPos + 1);
- if (nextPos < 0)
- {
- //last separator
- regExpPos = format.lastIndexOf(regExp);
- nextPos = format.lastIndexOf("%", regExpPos - 1);
- QString lastSep = format.right (format.size() - nextPos - 2);
- str.remove(lastSep);
- str.remove(regExp);
- }
- else
- str.remove ( regExpPos, nextPos - regExpPos);
- }
- return str;
-}