diff options
| author | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-09-27 21:24:44 +0000 |
|---|---|---|
| committer | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-09-27 21:24:44 +0000 |
| commit | 381f4fed30fe4e5408cddf7e540ce2deca1b3baf (patch) | |
| tree | c830e6dc158db0f6e4fb70c45435b91122108823 /src/qmmpstarter.cpp | |
| parent | 0521ee9675e9434c240094a6c9e5ee15eaa9ee43 (diff) | |
| download | qmmp-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.cpp | 100 |
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); } + + |
