Fixed Tape client/server work. Disable client/server work in test mode.
--HG-- branch : develop
This commit is contained in:
parent
7a95b52cd0
commit
693dd7a06e
|
@ -49,11 +49,7 @@ int main(int argc, char *argv[])
|
|||
qt_qhash_seed.store(0); // Lock producing random attribute order in XML
|
||||
|
||||
MApplication app(argc, argv);
|
||||
if (not app.IsTheOnly())
|
||||
{
|
||||
return V_EX_OK;
|
||||
}
|
||||
app.InitOptions();
|
||||
app.ParseCommandLine(app.arguments());
|
||||
app.ParseCommandLine(SocketConnection::Client, app.arguments());
|
||||
return app.IsTestMode() ? V_EX_OK : app.exec(); // single return point is always better than more
|
||||
}
|
||||
|
|
|
@ -198,30 +198,6 @@ MApplication::MApplication(int &argc, char **argv)
|
|||
// Setting the Application version
|
||||
setApplicationVersion(APP_VERSION_STR);
|
||||
setWindowIcon(QIcon(":/tapeicon/64x64/logo.png"));
|
||||
|
||||
const QString serverName = QCoreApplication::applicationName();
|
||||
QLocalSocket socket;
|
||||
socket.connectToServer(serverName);
|
||||
if (socket.waitForConnected(500))
|
||||
{
|
||||
QTextStream stream(&socket);
|
||||
stream << QCoreApplication::arguments().join(";;");
|
||||
stream.flush();
|
||||
socket.waitForBytesWritten();
|
||||
return;
|
||||
}
|
||||
|
||||
localServer = new QLocalServer(this);
|
||||
connect(localServer, &QLocalServer::newConnection, this, &MApplication::NewLocalSocketConnection);
|
||||
if (!localServer->listen(serverName))
|
||||
{
|
||||
if (localServer->serverError() == QAbstractSocket::AddressInUseError
|
||||
&& QFile::exists(localServer->serverName()))
|
||||
{
|
||||
QFile::remove(localServer->serverName());
|
||||
localServer->listen(serverName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
|
@ -311,12 +287,6 @@ bool MApplication::IsTestMode() const
|
|||
return testMode;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
bool MApplication::IsTheOnly() const
|
||||
{
|
||||
return (localServer != 0);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
TMainWindow *MApplication::MainWindow()
|
||||
{
|
||||
|
@ -347,12 +317,12 @@ void MApplication::InitOptions()
|
|||
|
||||
OpenSettings();
|
||||
|
||||
qDebug()<<"Version:"<<APP_VERSION_STR;
|
||||
qDebug()<<"Build revision:"<<BUILD_REVISION;
|
||||
qDebug()<<buildCompatibilityString();
|
||||
qDebug()<<"Built on"<<__DATE__<<"at"<<__TIME__;
|
||||
qDebug()<<"Command-line arguments:"<<this->arguments();
|
||||
qDebug()<<"Process ID:"<<this->applicationPid();
|
||||
qCDebug(mApp, "Version: %s", qUtf8Printable(APP_VERSION_STR));
|
||||
qCDebug(mApp, "Build revision: %s", BUILD_REVISION);
|
||||
qCDebug(mApp, "%s", qUtf8Printable(buildCompatibilityString()));
|
||||
qCDebug(mApp, "Built on %s at %s", __DATE__, __TIME__);
|
||||
qCDebug(mApp, "Command-line arguments: %s", qUtf8Printable(this->arguments().join(", ")));
|
||||
qCDebug(mApp, "Process ID: %s", qUtf8Printable(QString().setNum(this->applicationPid())));
|
||||
|
||||
LoadTranslation(QLocale::system().name());// By default the console version uses system locale
|
||||
|
||||
|
@ -526,7 +496,7 @@ void MApplication::RetranslateTables()
|
|||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------------------------
|
||||
void MApplication::ParseCommandLine(const QStringList &arguments)
|
||||
void MApplication::ParseCommandLine(const SocketConnection &connection, const QStringList &arguments)
|
||||
{
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription(QCoreApplication::translate("main", "Valentina's measurements editor."));
|
||||
|
@ -630,8 +600,40 @@ void MApplication::ParseCommandLine(const QStringList &arguments)
|
|||
|
||||
testMode = parser.isSet(testOption);
|
||||
|
||||
if (not testMode)
|
||||
if (not testMode && connection == SocketConnection::Client)
|
||||
{
|
||||
const QString serverName = QCoreApplication::applicationName();
|
||||
QLocalSocket socket;
|
||||
socket.connectToServer(serverName);
|
||||
if (socket.waitForConnected(1000))
|
||||
{
|
||||
qCDebug(mApp, "Connected to the server '%s'", qUtf8Printable(serverName));
|
||||
QTextStream stream(&socket);
|
||||
stream << QCoreApplication::arguments().join(";;");
|
||||
stream.flush();
|
||||
socket.waitForBytesWritten();
|
||||
std::exit(V_EX_OK);
|
||||
}
|
||||
|
||||
qCDebug(mApp, "Can't establish connection to the server '%s'", qUtf8Printable(serverName));
|
||||
|
||||
localServer = new QLocalServer(this);
|
||||
connect(localServer, &QLocalServer::newConnection, this, &MApplication::NewLocalSocketConnection);
|
||||
if (not localServer->listen(serverName))
|
||||
{
|
||||
qCDebug(mApp, "Can't begin to listen for incoming connections on name '%s'",
|
||||
qUtf8Printable(serverName));
|
||||
if (localServer->serverError() == QAbstractSocket::AddressInUseError)
|
||||
{
|
||||
QLocalServer::removeServer(serverName);
|
||||
if (not localServer->listen(serverName))
|
||||
{
|
||||
qCWarning(mApp, "Can't begin to listen for incoming connections on name '%s'",
|
||||
qUtf8Printable(serverName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LoadTranslation(TapeSettings()->GetLocale());
|
||||
}
|
||||
|
||||
|
@ -732,7 +734,7 @@ void MApplication::NewLocalSocketConnection()
|
|||
const QString arg = stream.readAll();
|
||||
if (not arg.isEmpty())
|
||||
{
|
||||
ParseCommandLine(arg.split(";;"));
|
||||
ParseCommandLine(SocketConnection::Server, arg.split(";;"));
|
||||
}
|
||||
delete socket;
|
||||
MainWindow()->raise();
|
||||
|
|
|
@ -44,6 +44,8 @@ class QLocalServer;
|
|||
#endif
|
||||
#define qApp (static_cast<MApplication*>(VAbstractApplication::instance()))
|
||||
|
||||
enum class SocketConnection : bool {Client = false, Server = true};
|
||||
|
||||
class MApplication : public VAbstractApplication
|
||||
{
|
||||
Q_OBJECT
|
||||
|
@ -55,7 +57,6 @@ public:
|
|||
virtual bool notify(QObject * receiver, QEvent * event) Q_DECL_OVERRIDE;
|
||||
|
||||
bool IsTestMode() const;
|
||||
bool IsTheOnly() const;
|
||||
TMainWindow *MainWindow();
|
||||
QList<TMainWindow*> MainWindows();
|
||||
|
||||
|
@ -77,7 +78,7 @@ public:
|
|||
void RetranslateGroups();
|
||||
void RetranslateTables();
|
||||
|
||||
void ParseCommandLine(const QStringList &arguments);
|
||||
void ParseCommandLine(const SocketConnection &connection, const QStringList &arguments);
|
||||
|
||||
public slots:
|
||||
TMainWindow *NewMainWindow();
|
||||
|
|
Loading…
Reference in New Issue
Block a user