aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpstarter.cpp
diff options
context:
space:
mode:
authorvovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-09-27 21:24:44 +0000
committervovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38>2007-09-27 21:24:44 +0000
commit381f4fed30fe4e5408cddf7e540ce2deca1b3baf (patch)
treec830e6dc158db0f6e4fb70c45435b91122108823 /src/qmmpstarter.cpp
parent0521ee9675e9434c240094a6c9e5ee15eaa9ee43 (diff)
downloadqmmp-381f4fed30fe4e5408cddf7e540ce2deca1b3baf.tar.gz
qmmp-381f4fed30fe4e5408cddf7e540ce2deca1b3baf.tar.bz2
qmmp-381f4fed30fe4e5408cddf7e540ce2deca1b3baf.zip
redesigned command line interface
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@162 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpstarter.cpp')
-rw-r--r--src/qmmpstarter.cpp100
1 files changed, 51 insertions, 49 deletions
diff --git a/src/qmmpstarter.cpp b/src/qmmpstarter.cpp
index 4aab25da6..0ebf766fc 100644
--- a/src/qmmpstarter.cpp
+++ b/src/qmmpstarter.cpp
@@ -19,16 +19,17 @@
***************************************************************************/
#include <QApplication>
-#include <QTcpSocket>
+#include "unixdomainsocket.h"
#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)
+#define MAXCOMMANDSIZE 64
+
+QMMPStarter::QMMPStarter(int argc,char ** argv,QObject* parent) : QObject(parent),mw(NULL)
{
QStringList tmp;
for(int i = 1;i < argc;i++)
@@ -59,52 +60,40 @@ QMMPStarter::QMMPStarter(int argc,char ** argv,QObject* parent) : QObject(parent
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);
- }
+
+ m_sock = new UnixDomainSocket(this);
+ if(m_sock->bind(UDS_PATH))
+ {
+ startMainWindow();
+ }
+ else if(!m_sock->alive(UDS_PATH)){
+ // Socket is present but not connectable - application was terminated previously???
+ unlink(UDS_PATH);
+ if(m_sock->bind(UDS_PATH))
+ {
+ startMainWindow();
+ }
+ else
+ {
+ qDebug("Fatal socket error, exiting");
+ exit(1);
+ }
+ }
+ else // socket is alive, qmmp application is already running. passing command to it!
+ writeCommand();
}
-void QMMPStarter::displayError(QAbstractSocket::SocketError socketError)
+QMMPStarter::~ QMMPStarter()
{
- 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);
+ qWarning("QMMPStarter::~ QMMPStarter()");
+ if(mw) delete mw;
}
-QMMPStarter::~ QMMPStarter()
+void QMMPStarter::startMainWindow()
{
- if(mw)
- {
- Guard::destroy(QApplication::applicationFilePath());
- delete mw;
- }
+ connect(m_sock, SIGNAL(readyRead()),this, SLOT(readCommand()));
+ QStringList arg_l = argString.split("\n", QString::SkipEmptyParts);
+ mw = new MainWindow(arg_l,0);
}
void QMMPStarter::writeCommand()
@@ -117,18 +106,29 @@ void QMMPStarter::writeCommand()
QByteArray barray;
barray.append(workingDir);
barray.append(argString);
-
- m_tcpSocket->write(barray);
- m_tcpSocket->flush();
+ m_sock->writeDatagram ( barray.data(),UDS_PATH);
}
else
{
- qWarning("It seems that another version of application is already running ...\n");
printUsage();
}
- m_tcpSocket->close();
- QApplication::quit();
+ exit(0);
+}
+
+void QMMPStarter::readCommand()
+{
+ QByteArray inputArray;
+ inputArray.resize(MAXCOMMANDSIZE);
+ bzero(inputArray.data(),inputArray.size());
+ m_sock->readDatagram(inputArray.data(), inputArray.size());
+ QStringList slist = QString(inputArray).split("\n",QString::SkipEmptyParts);
+ QString cwd = slist.takeAt(0);
+ if(mw)
+ {
+ mw->processCommandArgs(slist,cwd);
+ }
+
}
void QMMPStarter::printUsage()
@@ -154,3 +154,5 @@ void QMMPStarter::printVersion()
qWarning("QMMP version: %s",QMMP_STR_VERSION);
}
+
+