aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpstarter.cpp
diff options
context:
space:
mode:
authorvovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-06-23 16:48:01 +0000
committervovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-06-23 16:48:01 +0000
commit2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12 (patch)
treef92135e6cb831e46336dfd4ade47e03ef3a19ac5 /src/qmmpstarter.cpp
parent4b6a6720805c585c89f44fd276b3ace8670514d9 (diff)
downloadqmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.tar.gz
qmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.tar.bz2
qmmp-2d622fd9bcb8da9dd3f3206e296cd6a701fc9d12.zip
moved into qmmp dir
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@12 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpstarter.cpp')
-rw-r--r--src/qmmpstarter.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/src/qmmpstarter.cpp b/src/qmmpstarter.cpp
new file mode 100644
index 000000000..4aab25da6
--- /dev/null
+++ b/src/qmmpstarter.cpp
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * Copyright (C) 2006 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 <QApplication>
+#include <QTcpSocket>
+
+#include <unistd.h>
+
+#include "mainwindow.h"
+#include "version.h"
+#include "qmmpstarter.h"
+#include "guard.h"
+
+QMMPStarter::QMMPStarter(int argc,char ** argv,QObject* parent) : QObject(parent),mw(0)
+{
+ QStringList tmp;
+ for(int i = 1;i < argc;i++)
+ tmp << QString::fromLocal8Bit(argv[i]);
+
+ argString = tmp.join("\n");
+
+ if(argString == "--help")
+ {
+ printUsage();
+ exit(0);
+ }
+ else if(argString == "--version")
+ {
+ printVersion();
+ exit(0);
+ }
+
+ if(argString.startsWith("--") && // command?
+ argString != "--play" &&
+ argString != "--previous" &&
+ argString != "--next" &&
+ argString != "--stop" &&
+ argString != "--pause" &&
+ argString != "--play-pause"
+ )
+ {
+ qFatal("QMMP: Unknown command...");
+ exit(1);
+ }
+
+ if(Guard::exists(QApplication::applicationFilePath()))
+ {
+ m_tcpSocket = new QTcpSocket(this);
+ connect(m_tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(displayError(QAbstractSocket::SocketError)));
+ connect(m_tcpSocket, SIGNAL(connected()),this, SLOT(writeCommand()));
+
+ m_tcpSocket->connectToHost("127.0.0.1",TCPSERVER_PORT_NUMBER + getuid());
+
+ }
+ else
+ {
+ Guard::create(QApplication::applicationFilePath());
+ QStringList arg_l = argString.split("\n", QString::SkipEmptyParts);
+ mw = new MainWindow(arg_l,0);
+ }
+}
+
+void QMMPStarter::displayError(QAbstractSocket::SocketError socketError)
+{
+ switch (socketError)
+ {
+ case QAbstractSocket::RemoteHostClosedError:
+ break;
+ case QAbstractSocket::HostNotFoundError:
+ qWarning("The host was not found");
+ break;
+ case QAbstractSocket::ConnectionRefusedError:
+ qWarning("The connection was refused by the peer. ");
+ break;
+ default:
+ qWarning("The following error: %s:",qPrintable(m_tcpSocket->errorString()));
+ }
+
+ Guard::create(QApplication::applicationFilePath());
+ mw = new MainWindow(argString.split("\n", QString::SkipEmptyParts),0);
+}
+
+QMMPStarter::~ QMMPStarter()
+{
+ if(mw)
+ {
+ Guard::destroy(QApplication::applicationFilePath());
+ delete mw;
+ }
+}
+
+void QMMPStarter::writeCommand()
+{
+ if(!argString.isEmpty())
+ {
+ char buf[PATH_MAX + 1];
+ QString workingDir = QString(getcwd(buf,PATH_MAX)) + "\n";
+
+ QByteArray barray;
+ barray.append(workingDir);
+ barray.append(argString);
+
+ m_tcpSocket->write(barray);
+ m_tcpSocket->flush();
+ }
+ else
+ {
+ qWarning("It seems that another version of application is already running ...\n");
+ printUsage();
+ }
+
+ m_tcpSocket->close();
+ QApplication::quit();
+}
+
+void QMMPStarter::printUsage()
+{
+ qWarning(
+ "Usage: qmmp [options] [files] \n"
+ "Options:\n"
+ "--------\n"
+ "--help Display this text and exit.\n"
+ "--previous Skip backwards in playlist\n"
+ "--play Start playing current playlist\n"
+ "--pause Pause current song\n"
+ "--play-pause Pause if playing, play otherwise\n"
+ "--stop Stop current song\n"
+ "--next Skip forward in playlist\n"
+ "--version Print version number and exit.\n\n"
+ "Ideas, patches, bugreports send to forkotov02@hotmail.ru\n"
+ );
+}
+
+void QMMPStarter::printVersion()
+{
+ qWarning("QMMP version: %s",QMMP_STR_VERSION);
+}
+