aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/app/qmmpstarter.cpp29
-rw-r--r--src/plugins/CommandLineOptions/PlayListOption/playlistoption.cpp3
-rw-r--r--src/qmmpui/commandlinemanager.cpp34
-rw-r--r--src/qmmpui/commandlinemanager.h2
4 files changed, 50 insertions, 18 deletions
diff --git a/src/app/qmmpstarter.cpp b/src/app/qmmpstarter.cpp
index 34927514e..2c7af2b89 100644
--- a/src/app/qmmpstarter.cpp
+++ b/src/app/qmmpstarter.cpp
@@ -101,19 +101,42 @@ QMMPStarter::QMMPStarter() : QObject()
if(!commands.isEmpty())
{
- foreach(QString arg, commands.keys())
+ foreach(QString key, commands.keys())
{
- if(!m_option_manager->identify(arg) && !CommandLineManager::hasOption(arg) &&
- arg != "--no-start" && arg != "--ui")
+ CommandLineHandler::OptionFlags flags;
+ if(!m_option_manager->identify(key) &&
+ !CommandLineManager::hasOption(key, &flags) &&
+ key != "--no-start" &&
+ key != "--ui")
{
cout << qPrintable(tr("Unknown command")) << endl;
m_exit_code = EXIT_FAILURE;
m_finished = true;
return;
}
+
+ if(flags & CommandLineHandler::NO_START)
+ {
+ m_exit_code = EXIT_SUCCESS;
+ m_finished = true;
+ //show dialog with command line documentation under ms windows
+#ifdef Q_OS_WIN
+ stringstream tmp_stream;
+ tmp_stream.copyfmt(cout);
+ streambuf* old_stream = cout.rdbuf(tmp_stream.rdbuf());
+#endif
+ cout << qPrintable(CommandLineManager::executeCommand(key, commands.value(key)));
+#ifdef Q_OS_WIN
+ string text = tmp_stream.str();
+ QMessageBox::information(0, tr("Command Line Help"), QString::fromLocal8Bit(text.c_str()));
+ cout.rdbuf(old_stream); //restore old stream buffer
+#endif
+ return;
+ }
}
}
+
m_server = new QLocalServer(this);
m_socket = new QLocalSocket(this);
bool noStart = commands.keys().contains("--no-start") || commands.keys().contains("--quit");
diff --git a/src/plugins/CommandLineOptions/PlayListOption/playlistoption.cpp b/src/plugins/CommandLineOptions/PlayListOption/playlistoption.cpp
index 09c7fb7d5..fd30a012f 100644
--- a/src/plugins/CommandLineOptions/PlayListOption/playlistoption.cpp
+++ b/src/plugins/CommandLineOptions/PlayListOption/playlistoption.cpp
@@ -64,8 +64,7 @@ QString PlayListOption::executeCommand(int id, const QStringList &args)
QString out;
PlayListManager *pl_manager = PlayListManager::instance();
MediaPlayer *player = MediaPlayer::instance();
- QmmpUiSettings *ui_settings = QmmpUiSettings::instance();
-
+ QmmpUiSettings *ui_settings = (id == PL_HELP) ? 0 : QmmpUiSettings::instance();
switch (id)
{
diff --git a/src/qmmpui/commandlinemanager.cpp b/src/qmmpui/commandlinemanager.cpp
index d1f28b1ba..295e78cdb 100644
--- a/src/qmmpui/commandlinemanager.cpp
+++ b/src/qmmpui/commandlinemanager.cpp
@@ -32,8 +32,6 @@
#include "mediaplayer.h"
#include "commandlinemanager.h"
-using namespace std;
-
QList<CommandLineHandler *> *CommandLineManager::m_options = 0;
QHash<CommandLineHandler*, QString> *CommandLineManager::m_files = 0;
@@ -76,29 +74,41 @@ void CommandLineManager::checkOptions()
QString CommandLineManager::executeCommand(const QString &name, const QStringList &args)
{
checkOptions();
- if(!UiHelper::instance() || !SoundCore::instance() || !MediaPlayer::instance())
- {
- qWarning("CommandLineManager: player objects are not created");
- return QString();
- }
+ bool started = UiHelper::instance() && SoundCore::instance() && MediaPlayer::instance();
+
foreach(CommandLineHandler *opt, *m_options)
{
int id = opt->identify(name);
- if(id >= 0)
- {
+ if(id < 0)
+ continue;
+
+ if(started || (opt->flags(id) & CommandLineHandler::NO_START))
return opt->executeCommand(id, args);
+ else
+ {
+ qWarning("CommandLineManager: player objects are not created");
+ return QString();
}
+
+
}
return QString();
}
-bool CommandLineManager::hasOption(const QString &opt_str)
+bool CommandLineManager::hasOption(const QString &opt_str, CommandLineHandler::OptionFlags *flags)
{
checkOptions();
+ if(flags)
+ *flags = 0;
foreach(CommandLineHandler *opt, *m_options)
{
- if (opt->identify(opt_str) >= 0)
+ int id = opt->identify(opt_str);
+ if(id >= 0)
+ {
+ if(flags)
+ *flags = opt->flags(id);
return true;
+ }
}
return false;
}
@@ -112,7 +122,7 @@ void CommandLineManager::printUsage()
{
QString str = formatHelpString(line);
if(!str.isEmpty())
- cout << qPrintable(str) << endl;
+ std::cout << qPrintable(str) << std::endl;
}
}
}
diff --git a/src/qmmpui/commandlinemanager.h b/src/qmmpui/commandlinemanager.h
index 78cba92c6..88a6177b7 100644
--- a/src/qmmpui/commandlinemanager.h
+++ b/src/qmmpui/commandlinemanager.h
@@ -42,7 +42,7 @@ public:
/*!
* Return \b true if command \b opt_str is supported, otherwise returns \b false.
*/
- static bool hasOption(const QString &opt_str);
+ static bool hasOption(const QString &opt_str, CommandLineHandler::OptionFlags *flags = 0);
/*!
* Prints usage to stdout.
*/