1919#include < QTextCodec>
2020#include < QtGlobal>
2121
22- #include " port-scanner .h"
22+ #include " server-starter .h"
2323
2424#if QT_VERSION < QT_VERSION_CHECK(5, 6, 0)
2525#include " webkit-main-window.h"
@@ -45,7 +45,7 @@ int main(int argc, char **argv)
4545 // ==============================
4646 // Application version:
4747 // ==============================
48- application.setApplicationVersion (" 0.9.1 " );
48+ application.setApplicationVersion (" 1.0.0 " );
4949
5050 // ==============================
5151 // UTF-8 encoding application-wide:
@@ -215,7 +215,6 @@ int main(int argc, char **argv)
215215 bool startFileFound = false ;
216216
217217 QString startPageFilePath = applicationDirName + " /index.html" ;
218-
219218 QString localServerSettingsFilePath =
220219 applicationDirName + " /local-server.json" ;
221220
@@ -233,123 +232,22 @@ int main(int argc, char **argv)
233232 // Local server:
234233 if ((!startPageFile.exists ()) and localServerSettingsFile.exists ()) {
235234 startFileFound = true ;
236- bool localServerSettingsCorrect = false ;
237-
238- QString localServerFullPath;
239- QString port;
240- QStringList localServerCommandLine;
241-
242- QFileReader *localServerSettingsReader =
243- new QFileReader (localServerSettingsFilePath);
244- QString localServerSettings =
245- localServerSettingsReader->fileContents ;
246-
247- QJsonDocument localServerJsonDocument =
248- QJsonDocument::fromJson (localServerSettings.toUtf8 ());
249-
250- QJsonObject localServerJson;
251235
252- if (!localServerJsonDocument.isNull ()) {
253- localServerJson = localServerJsonDocument.object ();
254- if (!localServerJson.isEmpty ()) {
255- localServerSettingsCorrect = true ;
256- }
257- }
236+ QServerStarter *serverStarter =
237+ new QServerStarter (localServerSettingsFilePath);
258238
259- if (localServerSettingsCorrect == true ) {
260- // Local server full path:
261- QString localServerFullPathSetting =
262- applicationDirName + " /" +
263- localServerJson[" file" ].toString ();
264-
265- QFile localServerFile (localServerFullPathSetting);
266-
267- if (localServerFile.exists ()) {
268- localServerFullPath = localServerFullPathSetting;
269- localServerCommandLine.append (localServerFullPath);
270- } else {
271- mainWindow.qDisplayError (
272- QString (" Local server file is not found." ));
273- }
274-
275- // Local server port:
276- QJsonArray ports = localServerJson[" ports" ].toArray ();
277-
278- qint16 firstPort = ports[0 ].toInt ();
279- qint16 lastPort = ports[1 ].toInt ();
280-
281- if (firstPort == 0 ) {
282- localServerSettingsCorrect = false ;
283- mainWindow.qDisplayError (
284- QString (" No local server port is set." ));
285- }
286-
287- if (firstPort > 0 ) {
288- if (lastPort == 0 ) {
289- lastPort = firstPort;
290- }
291-
292- QPortScanner *portScanner =
293- new QPortScanner (firstPort, lastPort);
294-
295- if (portScanner->portScannerError .length () == 0 ) {
296- port = QString::number (portScanner->port );
297- application.setProperty (" port" , port);
298- }
299-
300- if (portScanner->portScannerError .length () > 0 ) {
301- mainWindow.qDisplayError (
302- portScanner->portScannerError );
303- }
304- }
305-
306- // Local server command line arguments.
307- // Local server port must be defined at this point!
308- QJsonArray commandLineArgumentsArray =
309- localServerJson[" command-line-arguments" ].toArray ();
310- foreach (QVariant argument, commandLineArgumentsArray) {
311- QString argumentString = argument.toString ();
312- argumentString.replace (" #PORT#" , port);
313- localServerCommandLine.append (argumentString);
314- }
315-
316- // Local server shutdown command:
317- QString shutdownCommand =
318- localServerJson[" shutdown_command" ].toString ();
319- if (shutdownCommand.length () > 0 ) {;
320- application.setProperty (" shutdown_command" , shutdownCommand);
321- }
322- }
239+ // Signal and slot for loading of the local server URL:
240+ QObject::connect (serverStarter, SIGNAL (loadUrlSignal (QUrl)),
241+ &mainWindow, SLOT (qLoadUrlSlot (QUrl)));
323242
324- if (localServerSettingsCorrect == false ) {
325- mainWindow.qDisplayError (
326- localServerSettingsFilePath + " <br>" +
327- " is empty or malformed." );
328- }
329-
330- // Local server has to be started as
331- // a detached process for its proper operation:
332- if (localServerSettingsCorrect == true ) {
333- QProcess localServer;
334- localServer.startDetached (
335- qApp->property (" perlInterpreter" ).toString (),
336- localServerCommandLine);
337-
338- // Local server is pinged every second until ready,
339- // but after 5 seconds of being unaivailable,
340- // a timeout message is displayed.
341- // If local server is up and running for less than 5 seconds,
342- // its index page is loaded.
343- mainWindow.localServerTester = new QTimer ();
344- QObject::connect (mainWindow.localServerTester , SIGNAL (timeout ()),
345- &mainWindow, SLOT (qLocalServerPingSlot ()));
346- mainWindow.localServerTester ->start (1000 );
347- }
243+ // Signal and slot for displaying local server configuration errors:
244+ QObject::connect (serverStarter, SIGNAL (displayErrorSignal (QString)),
245+ &mainWindow, SLOT (qDisplayErrorSlot (QString)));
348246 }
349247
350248 // No start file:
351249 if (startFileFound == false ) {
352- mainWindow.qDisplayError (
250+ mainWindow.qDisplayErrorSlot (
353251 QString (" No start page or local server is found." ));
354252 }
355253
0 commit comments