aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/CommandLineOptions/StatusOption/statusoption.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/CommandLineOptions/StatusOption/statusoption.cpp')
-rw-r--r--src/plugins/CommandLineOptions/StatusOption/statusoption.cpp141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/plugins/CommandLineOptions/StatusOption/statusoption.cpp b/src/plugins/CommandLineOptions/StatusOption/statusoption.cpp
new file mode 100644
index 000000000..b43e57f60
--- /dev/null
+++ b/src/plugins/CommandLineOptions/StatusOption/statusoption.cpp
@@ -0,0 +1,141 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Ilya Kotov *
+ * forkotov02@hotmail.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include <QtPlugin>
+#include <QTranslator>
+#include <QLocale>
+#include <QMap>
+#include <qmmp/soundcore.h>
+#include <qmmpui/metadataformatter.h>
+#include "statusoption.h"
+
+bool StatusOption::identify(const QString &str) const
+{
+ QStringList opts;
+ opts << "--status" << "--nowplaying" << "--nowplaying-syntax";
+ return opts.contains(str);
+}
+
+const QString StatusOption::helpString() const
+{
+ QString help;
+ help += QString("--status ") + tr("Print playback status") + "\n";
+ help += QString("--nowplaying <fmt> ")
+ + tr("Print formatted track name (example: qmmp --nowplaying \"%t - %a\")") + "\n";
+ help += QString("--nowplaying-syntax ") + tr("Print --nowplaying syntax") + "\n";
+ return help;
+}
+
+QString StatusOption::executeCommand(const QString &opt_str, const QStringList &args)
+{
+ SoundCore *core = SoundCore::instance();
+ QString out;
+ if(opt_str == "--status")
+ {
+ QMap<int, QString> state_names;
+ state_names.insert(Qmmp::Playing, "[playing]");
+ state_names.insert(Qmmp::Paused, "[paused]");
+ state_names.insert(Qmmp::Stopped, "[stopped]");
+ state_names.insert(Qmmp::Buffering, "[buffering]");
+ state_names.insert(Qmmp::NormalError, "[error]");
+ state_names.insert(Qmmp::FatalError, "[error]");
+ out += state_names[core->state()];
+
+ if(core->state() == Qmmp::Playing || core->state() == Qmmp::Paused)
+ {
+ out += " ";
+ out += genProgressBar() + "\n";
+ out += "ARTIST = %p\n";
+ out += "TITLE = %t\n";
+ out += "ALBUM = %a\n";
+ out += "COMMENT = %c\n";
+ out += "GENRE = %g\n";
+ out += "YEAR = %y\n";
+ out += "TRACK = %n\n";
+ MetaDataFormatter formatter(out);
+ out = formatter.parse(core->metaData(), core->totalTime());
+ }
+ else
+ out += "\n";
+ }
+ else if(opt_str == "--nowplaying")
+ {
+ QString t = args.join(" ");
+ MetaDataFormatter formatter(t);
+ out = formatter.parse(core->metaData(), core->totalTime());
+ out += "\n";
+ }
+ else if(opt_str == "--nowplaying-syntax")
+ {
+ out += tr("Syntax:") + "\n";
+ out += tr("%p - artist") + "\n";
+ out += tr("%a - album") + "\n";
+ out += tr("%t - title") + "\n";
+ out += tr("%n - track") + "\n";
+ out += tr("%NN - 2-digit track") + "\n";
+ out += tr("%g - genre") + "\n";
+ out += tr("%c - comment") + "\n";
+ out += tr("%C - composer") + "\n";
+ out += tr("%D - disc number") + "\n";
+ out += tr("%f - file name") + "\n";
+ out += tr("%F - full path") + "\n";
+ out += tr("%y - year") + "\n";
+ out += tr("%l - duration") + "\n";
+ out += tr("%if(A&B&C,D,E)") + "\n";
+ }
+ return out;
+}
+
+const QString StatusOption::name() const
+{
+ return "StatusOption";
+}
+
+QTranslator *StatusOption::createTranslator(QObject *parent)
+{
+ QTranslator *translator = new QTranslator(parent);
+ QString locale = Qmmp::systemLanguageID();
+ translator->load(QString(":/status_plugin_") + locale);
+ return translator;
+}
+
+QString StatusOption::genProgressBar()
+{
+ SoundCore *core = SoundCore::instance();
+ QString totalTime = QString("%1:%2").arg(core->totalTime()/60000)
+ .arg(core->totalTime()%60000/1000, 2, 10, QChar('0'));
+ QString currentTime = QString("%1:%2").arg(core->elapsed()/60000)
+ .arg(core->elapsed()%60000/1000, 2, 10, QChar('0'));
+ QString out = currentTime;
+ if(core->totalTime())
+ {
+ out.clear();
+ int played_count = 22 * (double)core->elapsed()/core->totalTime();
+ for(int i = 0; i < played_count; ++i)
+ out += "=";
+ out += "#";
+ for(int i = played_count; i < 22; ++i)
+ out += "-";
+ out += " " + currentTime + "/" +totalTime;
+ }
+ return out;
+}
+
+Q_EXPORT_PLUGIN2(statusoption, StatusOption)