Skip to content

Commit

Permalink
resolves #103: command line help
Browse files Browse the repository at this point in the history
  • Loading branch information
noscript committed Feb 20, 2016
1 parent df5f541 commit d1b89b7
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 26 deletions.
5 changes: 5 additions & 0 deletions src/common.cpp
Expand Up @@ -55,6 +55,11 @@ QString NCore::applicationBinaryName()
return QFileInfo(QCoreApplication::arguments().first()).completeBaseName();
}

QString NCore::applicationBasenameName()
{
return QFileInfo(QCoreApplication::arguments().first()).fileName();
}

QString NCore::defaultPlaylistPath()
{
return NCore::rcDir() + "/" + NCore::applicationBinaryName() + ".m3u";
Expand Down
1 change: 1 addition & 0 deletions src/common.h
Expand Up @@ -22,6 +22,7 @@ namespace NCore
{
void cArgs(int *argc, const char ***argv);
QString applicationBinaryName();
QString applicationBasenameName();
QString defaultPlaylistPath();
QString settingsPath();
QString rcDir();
Expand Down
1 change: 1 addition & 0 deletions src/global.h
Expand Up @@ -34,6 +34,7 @@ class NFlagIterator
unsigned mFlag;
};

#define MSG_SPLITTER "<|>"
#define ENUM_TO_STR(c,e,v) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(#e)).valueToKey(v))
#define STR_TO_ENUM(c,e,k) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(#e)).keyToValue(k))

Expand Down
92 changes: 78 additions & 14 deletions src/main.cpp
Expand Up @@ -13,6 +13,7 @@
**
*********************************************************************/

#include "common.h"
#include "player.h"
#include "settings.h"
#include <qtsingleapplication.h>
Expand All @@ -22,6 +23,38 @@
Q_IMPORT_PLUGIN(widget_collection)
#endif

static void print_out(const QString &out)
{
QTextStream stream(stdout);
stream << out << "\n";
}

static void print_err(const QString &err)
{
QTextStream stream(stderr);
stream << NCore::applicationBasenameName() + ": " + err << "\n";
}

static void print_help()
{
print_out(
"Usage: " + NCore::applicationBasenameName() + " [[option] | [files]]\n"
"\n"
"Options:\n"
" --next play next file\n"
" --prev play previous file\n"
" --stop stop playback\n"
" --pause pause playback\n"
" --version print version\n"
" -h, --help print this message\n"
);
}

static void print_try()
{
print_out("Try `" + NCore::applicationBasenameName() + " --help' for more information");
}

int main(int argc, char *argv[])
{
#ifdef Q_WS_MAC
Expand All @@ -35,31 +68,62 @@ int main(int argc, char *argv[])
#endif

QtSingleApplication instance(argc, argv);

// construct a message
QString msg;
if (QCoreApplication::arguments().size() > 1) {
QStringList argList = QCoreApplication::arguments();
argList.takeFirst();
msg = argList.join("<|>");
instance.setApplicationName("Nulloy");
instance.setApplicationVersion(QString(_N_VERSION_));
instance.setOrganizationDomain("nulloy.com");
instance.setQuitOnLastWindowClosed(false);

QStringList argList = instance.arguments();
argList.takeFirst();
QStringList files;
QStringList options;
foreach (QString arg, argList) {
if (arg.startsWith("-")) {
if (arg == "-h") {
print_help();
return 0;
} else if (arg.startsWith("--")) {
if (
arg == "--next" ||
arg == "--prev" ||
arg == "--stop" ||
arg == "--pause")
{
options << arg;
} else if (arg == "--version") {
print_out(instance.applicationVersion());
return 0;
} else if (arg == "--help") {
print_help();
return 0;
} else {
print_err("unrecognized option '" + arg + "'");
print_try();
return 1;
}
} else {
print_err("unrecognized option '" + arg + "'");
print_try();
return 1;
}
} else {
files << arg;
}
}

// construct message
QString msg = (options + files).join(MSG_SPLITTER);
if (NSettings::instance()->value("SingleInstance").toBool()) {
// try to send it to an already running instrance
if (instance.sendMessage(msg))
return 0; // return if delivered
}

QApplication::setQuitOnLastWindowClosed(false);
QCoreApplication::setApplicationName("Nulloy");
QCoreApplication::setApplicationVersion(QString(_N_VERSION_) + " Alpha");
QCoreApplication::setOrganizationDomain("nulloy.com");

// for Qt core plugins
#if defined(Q_WS_WIN)
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + "/Plugins/");
instance.addLibraryPath(instance.applicationDirPath() + "/Plugins/");
#elif defined(Q_WS_MAC)
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + "/plugins/");
instance.addLibraryPath(instance.applicationDirPath() + "/plugins/");
#endif

#ifndef _N_NO_SKINS_
Expand Down
30 changes: 18 additions & 12 deletions src/player.cpp
Expand Up @@ -491,25 +491,30 @@ void NPlayer::readMessage(const QString &str)
m_mainWindow->raise();
return;
}
QStringList argList = str.split("<|>");
QStringList argList = str.split(MSG_SPLITTER);
QStringList files;
QStringList notPathArgList;
QStringList options;
foreach (QString arg, argList) {
if (QFile(arg).exists())
if (arg.startsWith("--"))
options << arg;
else if (QFile(arg).exists())
files << arg;
else
notPathArgList << arg;
}

foreach (QString arg, notPathArgList) {
if (arg == "--next")
foreach (QString arg, options) {
if (arg == "--next") {
m_playlistWidget->playNextItem();
else if (arg == "--prev")
return;
} else if (arg == "--prev") {
m_playlistWidget->playPrevItem();
else if (arg == "--stop")
return;
} else if (arg == "--stop") {
m_playbackEngine->stop();
else if (arg == "--pause")
return;
} else if (arg == "--pause") {
m_playbackEngine->play();
return;
}
}

if (!files.isEmpty()) {
Expand All @@ -523,9 +528,10 @@ void NPlayer::readMessage(const QString &str)
} else {
m_playlistWidget->playFiles(files);
}
}

m_playlistWidget->setShuffleMode(NSettings::instance()->value("Shuffle").toBool());
// re-shuffle
m_playlistWidget->setShuffleMode(NSettings::instance()->value("Shuffle").toBool());
}
}

void NPlayer::loadDefaultPlaylist()
Expand Down

0 comments on commit d1b89b7

Please sign in to comment.