All pastes #774031 Raw Edit

Someone

public text v1 · immutable
#774031 ·published 2007-11-14 22:36 UTC
rendered paste body
Index: libs/libmyth/mythcontext.cpp
===================================================================
--- libs/libmyth/mythcontext.cpp	(revision 14863)
+++ libs/libmyth/mythcontext.cpp	(working copy)
@@ -1108,8 +1108,16 @@
                                        bool blockingClient)
 {
     MythSocket *serverSock = NULL;
+    MythBusyDialog *busy = NULL;
     int cnt = 1;
+    
+    bool enableGUI=false;
+    if(GetMainWindow())
+        enableGUI=true;
+    else
+        enableGUI=false;
 
+VERBOSE(VB_GENERAL, enableGUI);
     int sleepTime = GetNumSetting("WOLbackendReconnectWaitTime", 0);
     int maxConnTry = GetNumSetting("WOLbackendConnectRetry", 1);
 
@@ -1147,7 +1155,8 @@
                         manageLock = true;
                         d->serverSockLock.unlock();
                     }
-                    MythPopupBox::showOkPopup(d->mainWindow, 
+                    if (GetMainWindow())
+                        MythPopupBox::showOkPopup(d->mainWindow, 
                                               "connection failure",
                                               tr("Could not connect to the "
                                                  "master backend server -- is "
@@ -1163,19 +1172,60 @@
             }
             else
             {
+                QString wol_cmd;
+                QString waitString=QObject::tr("Waiting for Server...");
+                
+                if (GetMainWindow())
+                {
+                    busy = new MythBusyDialog(waitString);
+                    busy->start(1);
+                }
+
                 VERBOSE(VB_GENERAL, "Trying to wake up the MasterBackend "
                                     "now.");
-                QString wol_cmd = GetSetting("WOLbackendCommand",
-                                             "echo \'would run the "
-                                             "WakeServerCommand now, if "
-                                             "set!\'");
-                system(wol_cmd.ascii());
+                
+                /* If this is run from the master backend, use local command
+                * to start backend (eg. /etc/init.d/mythtv-backend start).
+                * Otherwise use WakeOnLan command to start backend remotely.
+                */
+                if (gContext->IsMasterHost())
+                    wol_cmd = GetSetting("MythbackendStartCommand", 
+                                                 "sudo /etc/init.d/mythtv-backend start");
+                else 
+                    wol_cmd = GetSetting("WOLbackendCommand",
+                                             "echo \'would run the WakeServerCommand now, "
+                                             "if set!\'");
 
-                VERBOSE(VB_GENERAL, QString("Waiting for %1 seconds until I "
-                                            "try to reconnect again.")
+                // Don't restart the backend if setup is running
+                if ( ! isRunning("mythtv-setup") )
+                {
+                    //busy->setLabel(waitString);
+                    system(wol_cmd.ascii());
+                    cout << wol_cmd.ascii();
+                }
+                //else
+                //    busy->setLabel(QObject::tr("Setup is Running.  Not restarting backend until setup is finished!"));
+                
+                VERBOSE(VB_GENERAL, QString("Waiting for %1 seconds before I send wake command again.")
                                             .arg(sleepTime));
-                sleep(sleepTime);
+                
+                int sleepCount = 0;
+                serverSock = new MythSocket();                
+                while (!serverSock->connect(hostname, port))
+                {
+                    sleep(1);
+                    sleepCount++;
+                    if (sleepCount > sleepTime)
+                        break;
+                }
+                serverSock->DownRef();
+                serverSock = NULL;                        
                 ++cnt;
+                if (GetMainWindow())
+                {
+                    busy->Close();
+                    busy->deleteLater();
+                }
             }
             d->attemptingToConnect = false;
         }
Index: programs/mythtv-setup/main.cpp
===================================================================
--- programs/mythtv-setup/main.cpp	(revision 14863)
+++ programs/mythtv-setup/main.cpp	(working copy)
@@ -296,6 +296,9 @@
     gContext->UpdateImageCache();
     MythThemeBase *themeBase = new MythThemeBase();
     (void) themeBase;
+    DialogBox *dia = NULL;
+    QString stCmd;
+    int val = 0;
 
     LanguageSettings::prompt();
     LanguageSettings::load("mythfrontend");
@@ -304,27 +307,35 @@
         QObject::tr("WARNING") + ": " +
         QObject::tr("MythTV has detected that the backend is running.")+"\n\n"+
         QObject::tr("Changing existing card inputs, deleting anything, "
-                    "or scanning for channels may not work.");
+                    "or scanning for channels may not work.")+"\n\n"+
+        QObject::tr("It is strongly advised that you stop the backend whilst running setup!");
 
-    bool backendIsRunning = gContext->BackendIsRunning();
+    bool restartBackend=false;
 
-    if (backendIsRunning)
+    // Offer to stop the backend if sensible
+    if (gContext->BackendIsRunning() && gContext->IsMasterHost())
     {
-        int val = MythPopupBox::show2ButtonPopup(
-            gContext->GetMainWindow(), QObject::tr("WARNING"),
-            warn,
-            QObject::tr("Continue"),
-            QObject::tr("Exit"), 1);
-        if (1 == val)
-            return 0;
-
-        backendIsRunning = true;
+        dia = new DialogBox(mainWindow, warn);
+        dia->AddButton(QObject::tr("Stop backend and continue"));
+        dia->AddButton(QObject::tr("Continue anyway"));
+        dia->AddButton(QObject::tr("Exit"));
+        val = dia->exec();
+        dia->deleteLater();
+        
+        if (val == 1) // Stop Backend
+        {
+            stCmd = gContext->GetSetting("MythbackendStopCommand", "sudo /etc/init.d/mythtv-backend stop");
+            if (!stCmd.isEmpty())
+                myth_system(stCmd);
+            restartBackend=true;
+        }
+        else // Exit
+            return 1;
     }
 
     REG_KEY("qt", "DELETE", "Delete", "D");
     REG_KEY("qt", "EDIT", "Edit", "E");
 
-    DialogBox *dia = NULL;
     bool haveProblems = false;
     do
     {
@@ -350,7 +361,7 @@
 
             if (dia->exec() == 2)
                 haveProblems = false;
-            delete dia;
+            dia->deleteLater();
         }
 
         delete problems;
@@ -359,19 +370,34 @@
     }
     while (haveProblems);
 
+    // Start backend
+    if (restartBackend)
+    {
+        stCmd = gContext->GetSetting("MythbackendStartCommand", "sudo /etc/init.d/mythtv-backend start");
+        if (!stCmd.isEmpty())
+            myth_system(stCmd);
+    }
+    
     if (gContext->IsMasterHost())
     {
         dia = new DialogBox(mainWindow,
-                            QObject::tr("If this is the master backend server, "
-                                        "please run 'mythfilldatabase' "
-                                        "to populate the database "
-                                        "with channel information."));
-        dia->AddButton(QObject::tr("OK"));
-        dia->exec();
-        delete dia;
+                            QObject::tr("Run 'mythfilldatabase' to populate the database "
+                                        "with channel information?")+"\n\n"+
+                            QObject::tr("(Not required if you are using off-air information only, "
+                                        "such as on DVB)."));
+        dia->AddButton(QObject::tr("No, just exit"));
+        dia->AddButton(QObject::tr("Yes, run mythfilldatabase"));
+        val = dia->exec();
+        dia->deleteLater();
+        if (val == 1)
+        {
+            stCmd = gContext->GetSetting("MythFillDatabasePath", "mythfilldatabase");
+            if (!stCmd.isEmpty())
+                myth_system(stCmd);
+        }
     }
 
-    if (backendIsRunning)
+    if (gContext->BackendIsRunning())
         RemoteSendMessage("CLEAR_SETTINGS_CACHE");
 
     return 0;
Index: programs/mythtv-setup/backendsettings.cpp
===================================================================
--- programs/mythtv-setup/backendsettings.cpp	(revision 14863)
+++ programs/mythtv-setup/backendsettings.cpp	(working copy)
@@ -327,10 +327,10 @@
 static GlobalLineEdit *WOLbackendCommand()
 {
     GlobalLineEdit *gc = new GlobalLineEdit("WOLbackendCommand");
-    gc->setLabel(QObject::tr("Wake Command"));
+    gc->setLabel(QObject::tr("WOL Wake Command"));
     gc->setValue("");
     gc->setHelpText(QObject::tr("The command used to wake up your master "
-                    "backend server\n(eg. sudo /etc/init.d/mythtv-backend restart)."));
+                    "backend server from another machine.\n (Leave blank to disable)."));
     return gc;
 };
 
@@ -340,10 +340,30 @@
     gc->setLabel(QObject::tr("Wake command"));
     gc->setValue("");
     gc->setHelpText(QObject::tr("The command used to wakeup your slave "
-                    "backends. Leave empty to disable."));
+                    "backends.\n (Leave blank to disable)."));
     return gc;
 };
 
+static GlobalLineEdit *MythbackendStopCommand()
+{
+    GlobalLineEdit *gc = new GlobalLineEdit("MythbackendStopCommand");
+    gc->setLabel(QObject::tr("Backend Stop Command"));
+    gc->setValue("sudo /etc/init.d/mythtv-backend stop");
+    gc->setHelpText(QObject::tr("The command used to stop the backend when running on "
+                    "the master backend server\n(eg. sudo /etc/init.d/mythtv-backend stop)."));
+    return gc;
+};
+
+static GlobalLineEdit *MythbackendStartCommand()
+{
+    GlobalLineEdit *gc = new GlobalLineEdit("MythbackendStartCommand");
+    gc->setLabel(QObject::tr("Backend Start Command"));
+    gc->setValue("sudo /etc/init.d/mythtv-backend start");
+    gc->setHelpText(QObject::tr("The command used to start the backend when running on "
+                    "the master backend server\n(eg. sudo /etc/init.d/mythtv-backend start)."));
+    return gc;
+};
+
 static GlobalSpinBox *idleTimeoutSecs()
 {
     GlobalSpinBox *gc = new GlobalSpinBox("idleTimeoutSecs", 0, 1200, 5);
@@ -766,6 +708,8 @@
     backend->addChild(WOLbackendReconnectWaitTime());
     backend->addChild(WOLbackendConnectRetry());
     backend->addChild(WOLbackendCommand());
+    backend->addChild(MythbackendStopCommand());
+    backend->addChild(MythbackendStartCommand());
     group4->addChild(backend);
     
     VerticalConfigurationGroup* slaveBackend = new VerticalConfigurationGroup();