summaryrefslogtreecommitdiffstats
path: root/abs/core/mythinstall/installdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/mythinstall/installdialog.cpp')
-rwxr-xr-xabs/core/mythinstall/installdialog.cpp1034
1 files changed, 1034 insertions, 0 deletions
diff --git a/abs/core/mythinstall/installdialog.cpp b/abs/core/mythinstall/installdialog.cpp
new file mode 100755
index 0000000..e5bdfc9
--- /dev/null
+++ b/abs/core/mythinstall/installdialog.cpp
@@ -0,0 +1,1034 @@
+#include <qapplication.h>
+#include <unistd.h>
+#include <fstream>
+#include <sys/wait.h> // For WIFEXITED on Mac OS X
+
+#include "mythcontext.h"
+#include "mythdbcon.h"
+#include "lcddevice.h"
+#include "tv.h"
+#include "programinfo.h"
+#include "uitypes.h"
+#include "remoteutil.h"
+#include <qdir.h>
+#include "installdialog.h"
+#include "installsettings.h"
+#include "installationtype.h"
+#include "mv_common.h"
+#include "libmyth/dialogbox.h"
+#include <stdlib.h>
+#define UPDATE_STATUS_INTERVAL 5000
+#define UPDATE_SCREEN_INTERVAL 5000
+
+
+
+WelcomeDialog::WelcomeDialog(MythMainWindow *parent,
+ QString window_name,
+ QString theme_filename,
+ const char* name)
+:MythThemedDialog(parent, window_name, theme_filename, name)
+{
+ system("rm -f /tmp/.install_state");
+ system("rm -f /tmp/.install_percent");
+ system("rm -f /tmp/.install_error");
+ install_drive = "" ;
+ recording_text = "";
+ scheduled_text = "";
+ install_text = "";
+ version_text = "";
+ I_AM_BUSY = false;
+ WORKING_ON_INSTALL = false;
+ current_hostname = "";
+
+ gContext->addListener(this);
+ m_timeFormat = gContext->GetSetting("TimeFormat", "h:mm AP");
+ wireUpTheme();
+ assignFirstFocus();
+
+ m_updateStatusTimer = new QTimer(this);
+ connect(m_updateStatusTimer, SIGNAL(timeout()), this,
+ SLOT(updateStatus()));
+ m_updateStatusTimer->start(UPDATE_STATUS_INTERVAL);
+
+ m_updateScreenTimer = new QTimer(this);
+ connect(m_updateScreenTimer, SIGNAL(timeout()), this,
+ SLOT(updateScreen()));
+
+ m_timeTimer = new QTimer(this);
+ connect(m_timeTimer, SIGNAL(timeout()), this,
+ SLOT(updateTime()));
+ m_timeTimer->start(1000);
+
+ reboot_box = NULL;
+ popup = NULL;
+ showPopup();
+}
+void WelcomeDialog::shutdownNow(int rc)
+{
+ QString NETBOOT = getenv("NETBOOT");
+ NETBOOT=NETBOOT.stripWhiteSpace();
+ system("rm -f /tmp/.install_state");
+ system("rm -f /tmp/.install_percent");
+ system("rm -f /tmp/.install_error");
+ if (rc == 1)
+ system("/sbin/halt");
+ else
+ system("/sbin/reboot");
+ // system("/usr/bin/killall -9 X");
+}
+
+void WelcomeDialog::runLIVECD(void)
+{
+ cancelPopup();
+ ask_validate_network();
+ if ( runsettings(true) == 1 )
+ {
+ QString PAINTER = gContext->GetSetting("ThemePainter");
+ QString startFECmd = ("MYTHCONFDIR=/tmp mythfrontend -O ThemePainter=" + PAINTER );
+ myth_system(startFECmd.ascii());
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+
+
+}
+
+
+
+int WelcomeDialog::exec()
+{
+ updateAll();
+ return MythDialog::exec();
+}
+
+
+
+void WelcomeDialog::keyPressEvent(QKeyEvent *e)
+{
+ bool handled = false;
+ QStringList actions;
+ gContext->GetMainWindow()->TranslateKeyPress("Welcome", e, actions);
+ for (unsigned int i = 0; i < actions.size() && !handled; i++)
+ {
+ QString action = actions[i];
+ handled = true;
+ if (action == "ESCAPE")
+ {
+ return; // eat escape key
+ }
+ else if (action == "MENU")
+ {
+ showPopup();
+ }
+ else if (action == "NEXTVIEW")
+ {
+ accept();
+ }
+ else if (action == "SELECT")
+ {
+ activateCurrent();
+ }
+ else
+ handled = false;
+ }
+
+ if (!handled)
+ MythThemedDialog::keyPressEvent(e);
+}
+
+UITextType* WelcomeDialog::getTextType(QString name)
+{
+ UITextType* type = getUITextType(name);
+ if (!type)
+ {
+ cout << "ERROR: Failed to find '" << name << "' UI element in theme file\n"
+ << "Bailing out!" << endl;
+ exit(0);
+ }
+ return type;
+}
+
+void WelcomeDialog::wireUpTheme()
+{
+ m_status_text = getTextType("status_text");
+ m_recording_text = getTextType("recording_text");
+ m_scheduled_text = getTextType("scheduled_text");
+ m_mv_text=getTextType("mythvantage_text");
+ m_time_text = getTextType("time_text");
+ m_date_text = getTextType("date_text");
+ m_warning_text = getTextType("conflicts_text");
+ m_warning_text->hide();
+ buildFocusList();
+}
+
+void WelcomeDialog::closeDialog()
+{
+ done(1);
+}
+
+WelcomeDialog::~WelcomeDialog()
+{
+ gContext->removeListener(this);
+ if (m_updateStatusTimer)
+ delete m_updateStatusTimer;
+
+ if (m_updateScreenTimer)
+ delete m_updateScreenTimer;
+
+ if (m_timeTimer)
+ delete m_timeTimer;
+}
+
+void WelcomeDialog::updateTime(void)
+{
+ QString releasefile="/etc/";
+ releasefile.append(RELEASEFILE);
+
+ extern const char *myth_source_version;
+ extern const char *myth_source_path;
+ QString distro_line;
+ QFile file(releasefile);
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ distro_line = t.readLine();
+ file.close();
+ }
+
+
+ QString s="";
+ //QString s="MythVantage 1.4 Mythtv svn: ";
+ s.append(distro_line);
+ s.append( " , Mythtv svn:" );
+ s.append(myth_source_version);
+ s.append(" ");
+ s.append(myth_source_path);
+ m_date_text->SetText(s);
+}
+
+void WelcomeDialog::updateStatus(void)
+{
+// checkConnectionToServer();
+ updateStatusMessage();
+}
+
+void WelcomeDialog::updateScreen(void)
+{
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh " );
+ system(cmdtxt);
+ recording_text=" ";
+ mythvantage_text=" ";
+ error_text=" ";
+ scheduled_text=" ";
+ QFile mystatus("/tmp/.install_state");
+ QFile mypercent("/tmp/.install_percent");
+ QFile myerror("/tmp/.install_error");
+ QFile mylog("/tmp/mythvantage_install.log");
+ if ( mystatus.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &mystatus ); // use a text stream
+ scheduled_text = t.readLine();
+ mystatus.close();
+ }
+
+ if ( mypercent.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &mypercent ); // use a text stream
+ recording_text = t.readLine();
+ mypercent.close();
+ }
+
+ if ( myerror.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &myerror ); // use a text stream
+ error_text = t.readLine();
+ myerror.close();
+ scheduled_text = error_text;
+ recording_text = "FAILED";
+ WORKING_ON_INSTALL = false;
+ }
+
+ if ( WORKING_ON_INSTALL )
+ {
+ if ( mylog.open( IO_ReadOnly| IO_Translate ) )
+ {
+ QTextStream t( &mylog );
+ while ( !t.atEnd() )
+ {
+ mythvantage_text=t.readLine();
+ }
+ mylog.close();
+ }
+ }
+ else
+ mythvantage_text="";
+ m_recording_text->SetText(recording_text);
+ m_scheduled_text->SetText(scheduled_text);
+ m_mv_text->SetText(mythvantage_text);
+
+ if ( install_drive != "" )
+ install_text = "";
+
+ m_status_text->SetText(install_text );
+ m_updateScreenTimer->start(UPDATE_SCREEN_INTERVAL, true);
+ if ( scheduled_text == "Done" )
+ {
+ Reboot_popup () ;
+ }
+ // shows the busy box when configuring the system
+ if ( scheduled_text == "Configuring system")
+ {
+ if ( ! I_AM_BUSY )
+ busy_box();
+ assignFirstFocus();
+ }
+};
+
+void WelcomeDialog::busy_box(void)
+{
+ QString msgtext = "Please wait, " ;
+ msgtext.append(current_hostname);
+ msgtext.append(" is preparing for life");
+ MythBusyDialog *busy = new MythBusyDialog(msgtext);
+ busy->start();
+
+ while ( scheduled_text == "Configuring system" )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ I_AM_BUSY = true;
+ }
+ busy->Close();
+ I_AM_BUSY = false;
+ busy->deleteLater();
+}
+
+void WelcomeDialog::busy_find_oldsettings(void)
+{
+ MythBusyDialog *busy = new MythBusyDialog(
+ QObject::tr("Importing old settings"));
+ busy->start();
+ int return_code = 0;
+ while ( return_code == 0 )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ I_AM_BUSY = true;
+ return_code = myth_system("ps -ef|grep install_proxy.sh|grep -v grep > /dev/null");
+
+ }
+ busy->Close();
+ I_AM_BUSY = false;
+ busy->deleteLater();
+
+}
+
+
+
+void WelcomeDialog::updateAll(void)
+{
+ updateRecordingList();
+ updateScheduledList();
+}
+
+bool WelcomeDialog::updateRecordingList()
+{
+ return true;
+}
+
+bool WelcomeDialog::updateScheduledList()
+{
+ updateStatus();
+ updateScreen();
+ return true;
+}
+
+void WelcomeDialog::updateStatusMessage(void)
+{
+
+}
+
+void WelcomeDialog::showPopup(void)
+{
+ if (popup)
+ return;
+ popup = new MythPopupBox(gContext->GetMainWindow(), "Menu");
+ QButton *topButton;
+ QLabel *label = popup->addLabel(tr("Menu"), MythPopupBox::Large, false);
+ label->setAlignment(Qt::AlignCenter | Qt::WordBreak);
+ // This is a bad way to lock the buttons but it works for now.
+ if ( scheduled_text.length() <= 2 )
+ {
+ topButton = popup->addButton(tr("Install or Upgrade "), this,
+ SLOT(Display_2ndpopup()));
+ popup->addButton(tr("Run MythFrontend"), this,
+ SLOT(runLIVECD()));
+ popup->addButton(tr("Exit"), this,
+ SLOT(closeDialog()));
+ popup->addButton(tr("Close menu"), this, SLOT(cancelPopup()));
+
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+
+ }
+ else
+ {
+ topButton= popup->addButton(tr("Exit"), this,
+ SLOT(closeDialog()));
+ popup->addButton(tr("Close menu"), this, SLOT(cancelPopup()));
+
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+ }
+
+ topButton->setFocus();
+}
+
+
+QString WelcomeDialog::diskmodel(QString drive , QString tsize)
+{
+ string line;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh disk_model_it " + drive + " " + tsize );
+ myth_system(cmdtxt);
+
+ ifstream model("/tmp/model");
+ if (model.is_open())
+ getline (model,line);
+ model.close();
+ return line;
+}
+
+QString WelcomeDialog::findinstallsouce(void)
+{
+ string line;
+ QString currentitem;
+ ifstream mountfile("/proc/mounts");
+ //ifstream mountfile("procmounts");
+ while (! mountfile.eof() )
+ {
+ getline (mountfile,line);
+ if ( line.empty() )
+ line = "oops didn't find andthing";
+ currentitem = line;
+
+ if ( ! currentitem.contains("/dev"))
+ currentitem="not the right line";
+
+ //if ( currentitem.contains("/mnt/live/mnt") )
+ if ( currentitem.contains("/.livesys/medium") )
+ {
+ int ndx = line.find(" ");
+ currentitem = line.substr(0,ndx);
+ ndx = currentitem.findRev("/");
+ currentitem = currentitem.mid(ndx+1,3);
+ return currentitem;
+ };
+
+ }
+
+};
+
+void WelcomeDialog::showPopup_2(void)
+{
+
+ if (popup)
+ return;
+ popup = new MythPopupBox(gContext->GetMainWindow(), "Select the drive to install");
+ findinstallsouce();
+ QButton *CancelButton;
+ QLabel *label = popup->addLabel(tr("Select the install target."), MythPopupBox::Large, false);
+ label->setAlignment(Qt::AlignCenter | Qt::WordBreak);
+ string currentitem;
+ string sizeitem;
+ string disksize;
+ string line;
+ bool installsource = false;
+
+ QString NETBOOT = getenv("NETBOOT");
+ NETBOOT=NETBOOT.stripWhiteSpace();
+ if ( NETBOOT == "YES" )
+ popup->addButton(("Diskless Frontend " ), this, SLOT(install_net() ) );
+
+ QString INSTALLSOURCE = findinstallsouce();
+ std::cout << "install source:" << std::endl;
+ std::cout << INSTALLSOURCE << std::endl;
+ ifstream partitions("/proc/partitions");
+ if (partitions.is_open())
+ while (! partitions.eof() )
+ {
+ getline (partitions,line);
+ if ( line.empty() )
+ {
+ line = "oops didn't find anything";
+ }
+ int ndx = line.rfind(" ");
+ ndx = ndx +1;
+ int linelength = line.length();
+ currentitem = line.substr(ndx,linelength);
+ sizeitem = line.substr(0,ndx-1);
+ linelength = sizeitem.length();
+ ndx = sizeitem.rfind(" ");
+ disksize = sizeitem.substr(ndx+1,linelength);
+
+// std::cout << currentitem<< std::endl;
+ if( currentitem == INSTALLSOURCE )
+ {
+ std::cout << currentitem<< std::endl;
+ installsource = true;
+ }
+
+
+ if (! installsource )
+ {
+ if ( currentitem == "hda" )
+ popup->addButton(("hda " + diskmodel(currentitem,disksize)), this, SLOT(install_hda() ) );
+ if ( currentitem == "hdb" )
+ popup->addButton(("hdb " + diskmodel(currentitem,disksize)), this, SLOT(install_hdb() ) );
+ if ( currentitem == "hdc" )
+ popup->addButton(("hdc " + diskmodel(currentitem,disksize)), this, SLOT(install_hdc() ) );
+ if ( currentitem == "hdd" )
+ popup->addButton(("hdd " + diskmodel(currentitem,disksize)), this, SLOT(install_hdd() ) );
+ if (currentitem == "sda" )
+ popup->addButton(("sda " + diskmodel(currentitem,disksize)), this, SLOT(install_sda() ) );
+ if (currentitem == "sdb" )
+ popup->addButton(("sdb " + diskmodel(currentitem,disksize)), this, SLOT(install_sdb() ) );
+ if (currentitem == "sdc" )
+ popup->addButton(("sdc "+ diskmodel(currentitem,disksize)), this, SLOT(install_sdc() ) );
+ if (currentitem == "sdd" )
+ popup->addButton(("sdd "+ diskmodel(currentitem,disksize)), this, SLOT(install_sdd() ) );
+ }
+ installsource = false;
+ }
+ partitions.close();
+ CancelButton = popup->addButton(tr("Cancel"), this, SLOT(MAINPopup()));
+ popup->ShowPopup(this, SLOT(cancelPopup()));
+ CancelButton->setFocus();
+}
+
+void WelcomeDialog::GO_popup(QString go_text)
+{
+ if (popup)
+ return;
+ DialogCode retval = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(),
+ QString("Start the process"),
+ QObject::tr(go_text),
+ QObject::tr("Start the process"), QObject::tr("Cancel"), kDialogCodeButton0);
+
+ if ( retval == kDialogCodeButton0 )
+ {
+ install_it();
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+}
+
+
+void WelcomeDialog::Reboot_popup(void)
+{ if (reboot_box)
+ return;
+ QString prompt1;
+ QFile updbstatus("/tmp/.upgrade_db_failed");
+ if ( updbstatus.open(IO_ReadOnly | IO_Translate) )
+ {
+ prompt1 = QObject::tr(" ");
+ prompt1.append("\n");
+ prompt1.append("An error occured while attempting to restore the database!");
+ prompt1.append("\n");
+ prompt1.append("The old database could not be restored, so a new database was created");
+ prompt1.append("\n");
+
+ }
+ else
+ {
+ prompt1 = QObject::tr("Ready to go!");
+ }
+
+
+
+ reboot_box = new DialogBox(gContext->GetMainWindow(), prompt1);
+ reboot_box->AddButton(QObject::tr("Reboot"));
+ reboot_box->AddButton(QObject::tr("Power off"));
+
+ int returncode = 0;
+ DialogCode dcode = reboot_box->exec();
+ reboot_box->deleteLater();
+ if (kDialogCodeButton0 == dcode )
+ returncode = 0;
+ if (kDialogCodeButton1 == dcode )
+ returncode = 1;
+ if (kDialogCodeButton2 == dcode )
+ returncode = 2;
+
+
+ reboot_box = NULL;
+ shutdownNow(returncode);
+}
+
+
+
+void WelcomeDialog::cancelPopup(void)
+{
+ if (!popup)
+ return;
+ popup->hide();
+ popup->deleteLater();
+ popup = NULL;
+ setActiveWindow();
+}
+
+void WelcomeDialog::MAINPopup(void)
+{
+ if (!popup)
+ return;
+ popup->hide();
+ popup->deleteLater();
+ popup = NULL;
+ showPopup();
+ setActiveWindow();
+}
+
+void WelcomeDialog::Display_2ndpopup(void)
+{
+ cancelPopup();
+ showPopup_2();
+ updateStatusMessage();
+ updateScreen();
+}
+
+void WelcomeDialog::install_hda(void)
+{
+ install_drive = "hda" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdb(void)
+{
+ install_drive = "hdb" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdc(void)
+{
+ install_drive = "hdc" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_hdd(void)
+{
+ install_drive = "hdd" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sda(void)
+{ install_drive = "sda" ;
+ install_generic();
+}
+void WelcomeDialog::install_sdb(void)
+{ install_drive = "sdb" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sdc(void)
+{ install_drive = "sdc" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_sdd(void)
+{
+ install_drive = "sdd" ;
+ install_generic();
+}
+
+void WelcomeDialog::install_net(void)
+{
+ install_drive = "NET" ;
+ gContext->ActivateSettingsCache(false);
+ gContext ->SaveSetting("HOSTinstallationtype","NET");
+ install_generic();
+}
+
+void WelcomeDialog::install_generic(void)
+{
+ gContext->ActivateSettingsCache(false);
+ cancelPopup();
+ updateStatusMessage();
+ updateScreen();
+ QString installwarningtext;
+ int runNextSetting;
+ runNextSetting = 1;
+ int tflag;
+ tflag = 0;
+ int retcode;
+ retcode=0;
+ QString installtype;
+ if ( install_drive != "NET")
+ retcode = mythinstalltype(install_drive);
+ if ( retcode == 0 )
+ {
+ installtype = gContext -> GetSetting("HOSTinstallationtype");
+ if ( installtype == "Full/Auto" )
+ {
+ runNextSetting = ask_validate_network();
+ installwarningtext="Warning!";
+ installwarningtext.append ("\n");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("About to erase the entire");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("installation drive of ");
+ installwarningtext.append (install_drive);
+
+ }
+ else if ( installtype == "NET")
+ {
+ runNextSetting=0;
+ gContext ->SaveSetting("HostSystemType", "Frontend_only");
+ gContext->SaveSetting("HostaccesshostypeSystemtype","0");
+ installwarningtext.append ("About to install ");
+ installwarningtext.append ("\n");
+ installwarningtext.append (install_drive);
+ // ask for hostname
+ runsettings(false,true,false,false,false,false,false);
+ }
+ else if ( installtype == "Upgrade" )
+ {
+ installwarningtext="Warning!";
+ installwarningtext.append ("\n");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("About to erase the");
+ installwarningtext.append ("\n");
+ installwarningtext.append ("partition ");
+ installwarningtext.append (install_drive);
+ installwarningtext.append ("1");
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh find_update " + install_drive +" &");
+ system(cmdtxt);
+ busy_find_oldsettings();
+ bool flag = false;
+ QString line;
+ QString currentitem;
+ QFile file("/etc/systemconfig");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ if ( line.startsWith("hostname"))
+ {
+ flag=true;
+ currentitem = line.section( "=", 1, 1 );
+ current_hostname = currentitem ;
+ }
+ }
+ file.close();
+ cout << current_hostname << endl;
+ }
+ if ( flag )
+ {
+ // GO_popup(installwarningtext);
+ tflag = 1;
+ }
+ else
+ {
+ cout << "searching for knoppmyth-versin" << endl;
+ //couldn't open /etc/systemconfig, so now look for /tmp/etc/Knoppmyth-version
+ QFile file("/tmp/etc/KnoppMyth-version");
+ if ( file.exists() )
+ { //appears to be a knoppmyth version, proceed
+ cout << "found knoppmyth-version" << endl;
+ QFile kmfile("/tmp/etc/hostname");
+ if ( kmfile.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &kmfile ); // use a text stream
+ line = t.readLine();
+ flag=true;
+ currentitem = line.stripWhiteSpace();
+ current_hostname = currentitem ;
+ //gContext->ActivateSettingsCache(true);
+ gContext->ClearSettingsCache();
+ gContext->SetSetting("HostMyhostname",current_hostname);
+ gContext->SaveSetting("HostMyhostname",current_hostname);
+ }
+ kmfile.close();
+ cout << current_hostname << endl;
+ runNextSetting = ask_validate_network();
+ }
+ else
+ {
+ //popup things went wrong
+ DialogCode returncode = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(),
+ QString(""),
+ QObject::tr("Couldn't find the old config file, proceed with update?"),
+ QObject::tr("No"), QObject::tr("Yes"), kDialogCodeButton1);
+ if ( returncode == kDialogCodeButton1 )
+ {
+ runNextSetting = ask_validate_network();
+ }
+ else if ( returncode == kDialogCodeButton0 )
+ {
+ runNextSetting = 1;
+ }
+ }
+
+ }
+ }
+
+ }
+
+
+//run through the system settings
+if ( runNextSetting == 0 )
+{
+ tflag = runsettings(false,false,true,true,false,false,false,false,false,false,true,false);
+
+}
+else
+{
+ cancelPopup();
+ showPopup();
+}
+
+if ( tflag == 1 )
+ {
+ cancelPopup();
+ GO_popup(installwarningtext);
+ }
+ else
+ {
+ cancelPopup();
+ showPopup();
+ }
+
+}
+
+void busy_network(void)
+{
+ MythBusyDialog *busy = new MythBusyDialog(
+ QObject::tr("Starting network"));
+ busy->start();
+ int return_code = 0;
+ while ( return_code == 0 )
+ {
+ qApp->processEvents ();
+ usleep(900);
+ return_code = myth_system("ps -ef|grep install_proxy.sh| grep setup_network |grep -v grep > /dev/null");
+ }
+ busy->Close();
+ busy->deleteLater();
+}
+
+
+int WelcomeDialog::ask_validate_network(void)
+{
+
+ QString pop_text="abc";
+ int retval = 1;
+ while ( retval != 0 )
+ {
+ int settingsrec = runsettings(false,true,false,false,false,false,false);
+ if ( settingsrec != 1 )
+ return 1;
+ else
+ {
+ MythProgressDialog *network_check = NULL;
+ network_check = new MythProgressDialog(QObject::tr("Please wait while the network is checked."), 6);
+ updateScreen();
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it setup_network &");
+ retval = system(cmdtxt);
+ busy_network();
+ if (network_check)
+ {
+ network_check->setProgress(1);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_self");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not find myself on the network";
+ }
+ }
+
+ if ( retval == 0)
+ {
+ network_check->setProgress(2);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_gw");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not locate gateway";
+ }
+ }
+
+ if (retval == 0)
+ {
+ network_check->setProgress(3);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_ns");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not locate nameserver";
+ }
+ }
+ if (retval == 0)
+ {
+ network_check->setProgress(4);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it check_names");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Could not lookup names";
+ }
+ }
+ if (retval == 0)
+ {
+ network_check->setProgress(5);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh network_check_it host_names");
+ retval = system(cmdtxt);
+ if ( retval != 0 )
+ {
+ network_check->Close();
+ pop_text="Hostname already on the network";
+ }
+ }
+
+
+ network_check->setProgress(6);
+ if (network_check)
+ {
+ network_check->Close();
+ network_check->deleteLater();
+ }
+
+ if (retval != 0 )
+ {
+ DialogCode val = MythPopupBox::Show2ButtonPopup(gContext->GetMainWindow(), QString(""), QObject::tr(pop_text), QObject::tr("Continue"), QObject::tr("Try again"), kDialogCodeButton0);
+
+ if (kDialogCodeButton0 == val )
+ retval = 0;
+ }
+ }
+ }
+return 0;
+}
+
+
+void WelcomeDialog::install_it(void)
+{
+ QString installtype = gContext -> GetSetting("HOSTinstallationtype");
+ QString rootfs = gContext -> GetSetting("HOSTrootfstype");
+ QString datafs = gContext -> GetSetting("HOSTdatafstype");
+ QString rootsize = gContext -> GetSetting("HOSTOSsize");
+ rootsize=rootsize + "000";
+ QString usealldata = gContext -> GetSetting("HostUseALLdata");
+ QString datasize = gContext -> GetSetting("HOSTDATAsize");
+ QString uprootfs = gContext -> GetSetting("HOSTuprootfstype");
+ QString useswap = gContext -> GetSetting("HostUseSWAP");
+ QString swapsize = gContext -> GetSetting("HOSTSWAPsize");
+ if ( installtype != "Upgrade" )
+ current_hostname = gContext->GetSetting("HostMyhostname");
+ QString clean_upgrade = getenv("CLEAN_UPGRADE");
+ if ( clean_upgrade == "YES" )
+ current_hostname = gContext->GetSetting("HostMyhostname");
+
+//get the hostname here if upgrade then use previous declarion of hostname
+ if ( usealldata == "1" )
+ {
+ datasize="ALL";
+ }
+ else
+ {
+ datasize=datasize + "000";
+ }
+ if ( useswap == "0" )
+ {
+ swapsize="NO";
+ };
+
+
+ if ( installtype == "Full/Auto" )
+ {
+ QString currentitem;
+ QString line;
+ QFile file("/proc/meminfo");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ line = t.readLine();
+ if ( line.startsWith("MemTotal:"))
+ {
+ currentitem = line.simplifyWhiteSpace();
+ currentitem = currentitem.section( " ", 1, 1 );
+ }
+ }
+ file.close();
+ bool ok;
+ int mem = currentitem.toInt( &ok, 10 ); // dec == 0, ok == FALSE
+ cout << mem << endl;
+ if ( mem >= 500000 )
+ {
+ cout << gContext -> GetSetting("HostXres") << endl;
+ if ((gContext -> GetSetting("HostXres")) == "1280x720" )
+ {
+ gContext->SaveSetting("Theme", "syth-lacquer-wide");
+ cout <<"Setting theme to syth-wide" << endl;
+ }
+ }
+
+
+ QString cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh full_install_it " + install_drive + " " + rootfs + " " + rootsize + " " + datafs + " " + datasize + " " + swapsize + "&");
+ system(cmdtxt);
+ }
+ else if ( installtype == "Upgrade" )
+ {
+ QString cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh upgrade_it " + install_drive + " " + uprootfs + "&");
+ system(cmdtxt);
+ }
+ else if (installtype=="NET")
+ {
+ QString olddb = gContext->GetSetting("HostMysqlserver");
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ char localhostname[1024];
+ if (gethostname(localhostname, 1024))
+ {
+ VERBOSE(VB_IMPORTANT,
+ "MCP: Error, could not determine host name." + ENO);
+ localhostname[0] = '\0';
+ }
+ QString h;
+ h=localhostname;
+ cout << "calling restore_default_settings with hostname " << h << endl;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d 127.0.0.1 -h " + h);
+ system(cmdtxt);
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/install_proxy.sh NETBOOT " + install_drive + " &");
+ system(cmdtxt);
+ }
+ WORKING_ON_INSTALL = true;
+ usleep (500);
+ updateScreen();
+ usleep (500);
+ updateScreen();
+ cancelPopup();
+}