summaryrefslogtreecommitdiffstats
path: root/abs/core/mythinstall/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/mythinstall/main.cpp')
-rwxr-xr-xabs/core/mythinstall/main.cpp533
1 files changed, 533 insertions, 0 deletions
diff --git a/abs/core/mythinstall/main.cpp b/abs/core/mythinstall/main.cpp
new file mode 100755
index 0000000..afee4ea
--- /dev/null
+++ b/abs/core/mythinstall/main.cpp
@@ -0,0 +1,533 @@
+#include <qapplication.h>
+#include <cstdlib>
+//#include "libmyth/mythdialogs.h"
+#include "libmyth/mythcontext.h"
+#include "libmyth/settings.h"
+#include "libmyth/langsettings.h"
+#include "libmyth/mythdbcon.h"
+#include <libmyth/exitcodes.h>
+#include "libmythtv/tv.h"
+#include "installdialog.h"
+#include "installsettings.h"
+#include "password_manage.h"
+#include "autocard.h"
+#include "settemplate.h"
+#include "mythdialogbox.h"
+//#include "mv_common.h"
+
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+
+#include "libmyth/dialogbox.h"
+#include <qlist.h>
+#include <qvaluevector.h>
+#include <qdir.h>
+HostParms hostparm;
+DDCinfo ddcinfo;
+
+
+void initKeys(void)
+{
+ REG_KEY("Welcome", "STARTXTERM", "Open an Xterm window", "F12");
+ REG_KEY("Welcome", "SHOWSETTINGS", "Show Mythshutdown settings", "F11");
+}
+
+
+int main(int argc, char **argv)
+{
+ bool bShowSettings = false;
+ bool bShowNetwork = false;
+ bool bShowHostype = false;
+ bool bShowMisc = false;
+ bool bShowshutdown = false;
+ bool bShowadvanced = false;
+ bool bShowsound = false;
+ bool bShowadvancedX = false;
+ bool bShowAccesscontrol = false;
+ bool bShowplugins = false;
+ bool bShowTemplate = false;
+ bool bShowuser = false;
+ bool bShowwebuser = false;
+ bool bRunSetup = false;
+ bool bShowHelp = false;
+ bool bShowReadme = false;
+ bool bShowddns = false;
+ bool bShowinfrared = false;
+ bool bShowscreensaver = false;
+
+ QStringList template_c_line ;
+ QString modulelist = "" ;
+ QString templateop="";
+ QString templatename="";
+ QString templatehostname="";
+ QApplication a(argc, argv);
+
+ gContext = NULL;
+ gContext = new MythContext(MYTH_BINARY_VERSION);
+ if (!gContext->Init())
+ {
+ VERBOSE(VB_IMPORTANT, "mythwelcome: Could not initialize myth context. "
+ "Exiting.");
+ return FRONTEND_EXIT_NO_MYTHCONTEXT;
+ }
+
+ if (!MSqlQuery::testDBConnection())
+ {
+ VERBOSE(VB_IMPORTANT, "mythwelcome: Could not open the database. "
+ "Exiting.");
+ return -1;
+ }
+
+ // Check command line arguments
+ for (int argpos = 1; argpos < a.argc(); ++argpos)
+ {
+
+ if (!strcmp(a.argv()[argpos],"-v") ||
+ !strcmp(a.argv()[argpos],"--verbose"))
+ {
+ if (a.argc()-1 > argpos)
+ {
+ if (parse_verbose_arg(a.argv()[argpos+1]) ==
+ GENERIC_EXIT_INVALID_CMDLINE)
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+
+ ++argpos;
+ }
+ else
+ {
+ cerr << "Missing argument to -v/--verbose option\n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+ else if (!strcmp(a.argv()[argpos],"-s") ||
+ !strcmp(a.argv()[argpos],"--setup"))
+ {
+ bShowSettings = true;
+//---------------------------------------------
+ if (a.argc()-1 > argpos)
+ {
+ QString tmpArg = a.argv()[argpos+1];
+ if (tmpArg.startsWith("-"))
+ {
+ cerr << "Invalid or missing argument to -s \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+
+ QStringList pairs = QStringList::split(",", tmpArg);
+ for (unsigned int index = 0; index < pairs.size(); ++index)
+ {
+ if ( pairs[index] == "network" )
+ {
+ // cout << pairs[index] << endl;
+ bShowNetwork = true;
+ modulelist.append("network,");
+ }
+ else if ( pairs[index] == "misc" )
+ {
+ // cout << pairs[index] << endl;
+ bShowMisc = true;
+ modulelist.append("misc,");
+ }
+ else if ( pairs[index] == "sleep" )
+ {
+ // cout << pairs[index] << endl;
+ bShowshutdown = true;
+ modulelist.append("sleep,");
+ }
+ else if ( pairs[index] == "hostype" )
+ {
+ // cout << pairs[index] << endl;
+ bShowHostype = true;
+ modulelist.append("hostype,");
+ }
+ else if ( pairs[index] == "advanced" )
+ {
+ // cout << pairs[index] << endl;
+ bShowadvanced = true;
+ modulelist.append("advanced,");
+ }
+ else if ( pairs[index] == "sound" )
+ {
+ // cout << pairs[index] << endl;
+ bShowsound = true;
+ modulelist.append("audio,");
+ }
+ else if ( pairs[index] == "advancedX" )
+ {
+ // cout << pairs[index] << endl;
+ bShowadvancedX = true;
+ modulelist.append("advancedX,");
+ }
+ else if ( pairs[index] == "accesscontrol" )
+ {
+ // cout << pairs[index] << endl;
+ bShowAccesscontrol = true;
+ modulelist.append("accesscontrol,");
+ }
+ else if ( pairs[index] == "plugins" )
+ {
+ // cout << pairs[index] << endl;
+ bShowplugins = true;
+ modulelist.append("plugins,");
+ }
+ else if ( pairs[index] == "user" )
+ {
+ // cout << pairs[index] << endl;
+ bShowuser = true;
+ modulelist.append("user,");
+ }
+ else if ( pairs[index] == "webuser" )
+ {
+ // cout << pairs[index] << endl;
+ bShowwebuser = true;
+ modulelist.append("webuser,");
+ }
+ else if ( pairs[index] == "ddns" )
+ {
+ // cout << pairs[index] << endl;
+ bShowddns = true;
+ modulelist.append("ddns,");
+ }
+ else if ( pairs[index] == "ir" )
+ {
+ // cout << pairs[index] << endl;
+ bShowinfrared = true;
+ modulelist.append("ir,");
+ }
+ else if ( pairs[index] == "screensaver" )
+ {
+ // cout << pairs[index] << endl;
+ bShowscreensaver = true;
+ modulelist.append("screensaver,");
+ }
+
+ }
+ // return FRONTEND_EXIT_OK;
+ }
+ else
+ {
+ // if no args, then show the default steup.
+ bShowNetwork = true;
+ bShowHostype = true;
+ bShowMisc = true;
+ bShowuser = true;
+ bShowshutdown = true;
+
+ modulelist="network,hostype,misc,sleep";
+
+ }
+
+ ++argpos;
+
+
+//---------------------------------------------
+ }
+ else if (!strcmp(a.argv()[argpos],"-u"))
+ bShowuser = true;
+ else if (!strcmp(a.argv()[argpos],"-t"))
+ {
+ bShowTemplate = true;
+ if (a.argc()-1 > argpos)
+ {
+ QString tmpArg = a.argv()[argpos+1];
+ if (tmpArg.startsWith("-"))
+ {
+ cerr << "Invalid or missing argument to -t \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ template_c_line = QStringList::split(",", tmpArg);
+ if ( template_c_line.size() != 0 )
+ {
+ if ( template_c_line.size() >3 || template_c_line.size() <2 )
+ {
+ cerr << "Invalid or missing argument to -t \n";
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+ ++argpos;
+ }
+
+ }
+ else if (!strcmp(a.argv()[argpos],"-b"))
+ {
+ bRunSetup = true;
+ }
+ else if (!strcmp(a.argv()[argpos],"-h"))
+ {
+ bShowHelp = true;
+ }
+ else if (!strcmp(a.argv()[argpos],"-r"))
+ {
+ bShowReadme = true;
+ }
+ else
+ {
+ cerr << "Invalid argument: " << a.argv()[argpos] << endl <<
+ "Valid options are: " << endl <<
+ "-v or --verbose debug-level Use '-v help' for level info" << endl <<
+ "-b run backend setup" << endl <<
+ "-h for help screens " << endl <<
+ "-t show template screens (op,tname,hname)" << endl <<
+ "-s or --setup (network,hostype,misc,sleep,advanced,advancedX,sound,accesscontrol, user,webuser,ddns,ir,screensaver)" << endl;
+ return FRONTEND_EXIT_INVALID_CMDLINE;
+ }
+ }
+
+ gContext->LoadQtConfig();
+
+ LanguageSettings::load("mythfrontend");
+
+ MythMainWindow *mainWindow = GetMythMainWindow();
+ // if parms were passed to -t then doen't init the screen.
+ if ( template_c_line.size() == 0 )
+ {
+ gContext->SaveSetting("HOSTtemplatetype","Do Nothing" );
+ mainWindow->Init();
+ gContext->SetMainWindow(mainWindow);
+ };
+ initKeys();
+
+
+ if (bShowSettings)
+ {
+ bool runconfig = false;
+ system("cp -f /etc/systemconfig /tmp/systemconfig.bak");
+ QString olddb = gContext->GetSetting("HostMysqlserver");
+ QString oldhostype = gContext->GetSetting("HostSystemType");
+ runsettings(false,bShowNetwork,bShowHostype,bShowMisc,bShowshutdown,bShowadvanced,bShowsound,bShowadvancedX,bShowAccesscontrol,bShowplugins,bShowuser,bShowwebuser,bShowddns,bShowinfrared,bShowscreensaver);
+ QString newdb = gContext->GetSetting("HostMysqlserver");
+ QString newhostype = gContext->GetSetting("HostSystemType");
+ int status = system("diff /tmp/systemconfig.bak /etc/systemconfig");
+ bool restart = false;
+
+ // save my settings in case db switches
+ //cout << "save for the heck of it " << endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d " + olddb);
+ system(cmdtxt);
+ //system("/root/restore_default_settings.sh -c save -t syssettings -d " + olddb);
+
+ if ( status != 0 )
+ {
+ runconfig = true;
+ }
+
+ if ( newdb != olddb )
+ {
+ runconfig = true;
+ restart = true;
+ //db changed save setting from olddb
+ // cout << "newdb_olddb" << endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c save -t syssettings -d " + olddb ) ;
+ system(cmdtxt);
+ //system("/root/restore_default_settings.sh -c save -t syssettings -d " + olddb ) ;
+ }
+
+ if ( runconfig )
+ {
+ if ( newhostype != oldhostype )
+ modulelist.append("hostypec,");
+ //trim off last ,
+ modulelist.truncate(modulelist.length()-1);
+
+
+ cout << modulelist <<endl;
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/restore_default_settings.sh -c restore -t syssettings -d ");
+ QString dbcommand = cmdtxt;
+ //QString dbcommand="/root/restore_default_settings.sh -c restore -t syssettings -d ";
+ dbcommand.append(newdb);
+ // cout << dbcommand << endl;
+ run_systemconfig(modulelist,restart,dbcommand);
+ // cout << "running config" <<endl;
+ }
+ system("rm -f /tmp/systemconfig.bak");
+
+ if ( restart )
+ {
+ //restore settings to new database
+ //cout << " restoreing settings to new db" << endl;
+ //system("/root/restore_default_settings.sh save syssettings " + olddb ) ;
+ // system("/root/restore_default_settings.sh restore syssettings " + newdb) ;
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString("The network address of the database has changed.");
+ problems->append("\n");
+ problems->append("The frontend will need to restart to connect to the new database.");
+ problems->append("\n");
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ cout << "restarting" << endl;
+ //system("/root/systemconfig.sh restartfe" );
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/systemconfig.sh reloadfe" );
+ system(cmdtxt);
+ }
+
+ }
+ else if (bShowTemplate)
+ {
+ // cout << templateparms << endl;
+ if ( template_c_line.size() == 2)
+ {
+ templateop=template_c_line[0];
+ templatename=template_c_line[1];
+ }
+ else if ( template_c_line.size() == 3)
+ {
+ templateop=template_c_line[0];
+ templatename=template_c_line[1];
+ templatehostname=template_c_line[2];
+ };
+ choosetemplate(templateop,templatename,templatehostname);
+ }
+
+ else if (bRunSetup)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString("To configure the TV cards and program guide the setup program needs to be run.");
+ problems->append("\n");
+ problems->append("\n");
+
+ problems->append("For those in North America, guide data is provided by Schedules Direct.");
+ problems->append("\n");
+ problems->append("Visit http://www.schedulesdirect.org/ to signup for your account today");
+ problems->append("\n"); problems->append("\n"); problems->append("\n");
+
+ problems->append("If you choose to not run mythtv-setup now, the program can be run at any time by typing mythtv-setup or hitting ALT+s");
+ problems->append("\n");
+
+ problems->append("\n");
+ prompt = QObject::tr("Do you wish to run mythtv-setup ?");
+
+ dia = new DialogBox(mainWindow, problems->append("\n" + prompt));
+ dia->AddButton(QObject::tr("Yes"));
+ dia->AddButton(QObject::tr("Yes and try to autodetect cards"));
+ dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ //returncode = dia->exec();
+ DialogCode dcode = dia->exec();
+ dia->deleteLater();
+ if (kDialogCodeButton0 == dcode )
+ returncode = 0;
+ if (kDialogCodeButton1 == dcode )
+ returncode = 1;
+ if (kDialogCodeButton2 == dcode )
+ returncode = 2;
+
+ if (returncode == 1)
+ {
+ AutoCard listcards;
+ listcards.exec();
+ }
+
+ return returncode;
+
+
+ }
+else if (bShowHelp)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString *problems = new QString(" Help Screen");
+ problems->append("\n");
+ problems->append("-------------------------------------------------");
+ problems->append("\n");
+ problems->append("Alt+h This screen");
+ problems->append("\n");
+ #ifdef __MVAPP__
+ problems->append("F2 open/close terminal");
+ problems->append("\n");
+ problems->append("Shift + Return opens new xterm");
+ problems->append("\n");
+ problems->append("Alt+F2 for 2nd desktop Alt+F1 to go back");
+ problems->append("\n");
+ problems->append("Alt+c Capture myth screenshot");
+ problems->append("\n");
+ #else
+ problems->append("Alt + X opens new xterm ");
+ problems->append("\n");
+ problems->append("Alt + m start mythfrontend");
+ problems->append("\n");
+ problems->append("m will display a popup for power/about");
+ problems->append("\n");
+ #endif
+ problems->append("Ctrl + Alt + u unhide mouse cursor");
+ problems->append("\n");
+ problems->append("Alt+1 start masterbackend");
+ problems->append("\n");
+ problems->append("Alt+2 stop masterbackend");
+ problems->append("\n");
+ problems->append("Alt+3 restart masterbackend");
+ problems->append("\n");
+ problems->append("Alt+s run mythtv-setup");
+ problems->append("\n");
+
+
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ // dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ return returncode;
+
+
+ }
+else if (bShowReadme)
+ {
+ DialogBox *dia = NULL;
+ QString prompt;
+ QString line;
+ QString *problems = new QString("");
+ problems->append("\n");
+ QFile file("/usr/MythVantage/README");
+ if ( file.open(IO_ReadOnly | IO_Translate) )
+ {
+ QTextStream t( &file ); // use a text stream
+ while ( !t.eof() )
+ {
+ line = t.readLine();
+ problems->append(line);
+ problems->append("\n");
+ }
+ file.close();
+ }
+ else
+ problems->append("Couldn't open file");
+
+ dia = new DialogBox(mainWindow, problems->append("\n" ));
+ dia->AddButton(QObject::tr("OK"));
+ // dia->AddButton(QObject::tr("No"));
+ int returncode = 0;
+ returncode = dia->exec();
+ dia->deleteLater();
+ return returncode;
+ }
+ else
+
+ {
+ WelcomeDialog *mythWelcome = new WelcomeDialog(gContext->GetMainWindow(),
+ "welcome_screen", "install-",
+ "welcome_screen");
+
+ mythWelcome->exec();
+
+
+ delete mythWelcome;
+ }
+
+// delete gContext;
+
+ return 0;
+}