summaryrefslogtreecommitdiffstats
path: root/abs/core/mythinstall/settemplate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/mythinstall/settemplate.cpp')
-rwxr-xr-xabs/core/mythinstall/settemplate.cpp419
1 files changed, 419 insertions, 0 deletions
diff --git a/abs/core/mythinstall/settemplate.cpp b/abs/core/mythinstall/settemplate.cpp
new file mode 100755
index 0000000..c12ef06
--- /dev/null
+++ b/abs/core/mythinstall/settemplate.cpp
@@ -0,0 +1,419 @@
+#include <mythcontext.h>
+#include <unistd.h>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include "settings.h"
+#include "installsettings.h"
+#include "installdialog.h"
+#include "settemplate.h"
+#include <qsqldatabase.h>
+#include <qsqlquery.h>
+#include <stdlib.h>
+#include <cstdlib>
+
+#include <mythtv/mythdbcon.h>
+
+void create_temp_table (QString create_table_name,QString like_name)
+{
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("create table " + create_table_name + " like " + like_name + ";" );
+ query.exec();
+ if ( like_name == "settings")
+ {
+ query.prepare("Alter table " + create_table_name + " add unique ( value ) ; " );
+ query.exec();
+ }
+ query.prepare(" truncate " + create_table_name + ";" );
+ query.exec();
+};
+
+void drop_temp_table (QString tname)
+{
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare("drop table " + tname + ";" );
+ query.exec();
+}
+
+void restart_frontend ()
+{
+
+ QString cmdtxt;
+ cmdtxt=MV_ROOT ;
+ cmdtxt.append("bin/systemconfig.sh reloadfe" );
+ cout << "Calling systemconfig.sh reloadfe" << endl;
+ system(cmdtxt);
+ //system("/root/systemconfig.sh reloadfe" );
+}
+
+void choosetemplate (QString templateop, QString templatename , QString templatehostname = "")
+{
+ if ( templateop == "" )
+ {
+ MythCtemplate setting;
+ setting.load();
+ setting.save();
+ setting.exec();
+ };
+
+ QString thistemplate;
+ QString thisoperation;
+ QString thishost;
+ //QString runcommand = "/root/restore_default_settings.sh";
+ QString runcommand = "echo ";
+ // cout << templateop << endl;
+ // cout << templatename << endl;
+ // cout << templatehostname << endl;
+
+ if (templateop == "")
+ thisoperation = gContext -> GetSetting("HOSTtemplatetype");
+ else
+ thisoperation = templateop;
+
+ thistemplate = "none";
+
+
+ if ( thisoperation == "save" )
+ {
+ if (templatename == "" )
+ thistemplate = gContext -> GetSetting("HostTemplateSave");
+ else
+ thistemplate = templatename;
+
+ savesettings(thistemplate);
+ }
+ else if ( thisoperation == "restore" )
+ {
+ if (templatename == "" )
+ thistemplate = gContext -> GetSetting("HostTemplateRestore");
+ else
+ thistemplate = templatename;
+
+ if ( thistemplate == "default_1")
+ c_from("default_1" , thistemplate);
+ else if ( thistemplate == "default_2")
+ c_from("default_2" ,thistemplate);
+ else
+ restoresettings(thistemplate);
+
+ }
+ else if ( thisoperation == "copy_from" )
+ {
+ if (templatename == "" )
+ {
+ thishost = gContext ->GetSetting("HostSelectcopy_from");
+ thistemplate = gContext ->GetSetting("HostTemplateRestore");
+ }
+ else
+ {
+ thishost=templatehostname;
+ thistemplate=templatename;
+ };
+
+ c_from(thishost,thistemplate);
+ }
+
+
+// if ( thistemplate != "none" )
+// {
+// std::cout << runcommand << endl;
+ // system(runcommand);
+ //}
+};
+
+
+void savesettings (QString templatenumber )
+{
+ cout << "SAVING....." << templatenumber << endl;
+ QString templatename = "settings_" + templatenumber ;
+ // Remove old saved values
+ MSqlQuery query(MSqlQuery::InitCon());
+ query.prepare( "delete from " + templatename + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+ //insert all new settings
+ query.prepare( "replace into " + templatename + " (select * from settings where hostname=:HOSTNAME ) ;" ) ;
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // repeat for keybindings
+ templatename = "keybindings_" + templatenumber ;
+ query.prepare( "delete from " + templatename + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ query.prepare( "replace into " + templatename + " (select * from keybindings where hostname=:HOSTNAME ) ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+}
+
+void restoresettings (QString templatenumber )
+{
+ cout << "RESTORING....." << templatenumber << endl;
+// DEFAULT settings are handled by the copy from routine
+ MSqlQuery query(MSqlQuery::InitCon());
+ QStringList tablelist ;
+ QStringList::Iterator it;
+ QString current_table;
+ tablelist.append ("settings");
+ tablelist.append ("keybindings");
+ QString templatename;
+
+ for ( it = tablelist.begin(); it != tablelist.end(); ++it )
+ {
+ current_table = *it ;
+ //find template table to use
+ QString templatename = current_table + "_" + templatenumber ;
+ QString temptable="temp_table_" + current_table + "_" + gContext->GetHostName() ;
+ // create temp table for merging settings, The merge is needed to accoutn for any new settings.
+ create_temp_table(temptable, current_table );
+
+ // copy in current settings
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // need to remove all non HOST settigns
+
+ // copy in stored settings
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // remove current settings. Need to remove because the old table allows for duplicates and replace into doesn' seem to "replace"
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+
+ // copy new settings from temp to current
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " );" );
+ query.exec();
+
+ // drop temptable
+ drop_temp_table(temptable);
+
+ }
+restart_frontend();
+};
+
+void c_from(QString copyhost, QString templatenumber)
+{
+ cout << "Copying....." + copyhost + " " + "templatenumber" << endl;
+ MSqlQuery query(MSqlQuery::InitCon());
+ //Create temp table, copy in settings from host_template, update hostname for new host,copy temp_table to settings.
+ QStringList tablelist ;
+ QStringList::Iterator it;
+ QString current_table ;
+ tablelist.append ("settings");
+ tablelist.append ("keybindings");
+ QString templatename;
+ QString temptable;
+ for ( it = tablelist.begin(); it != tablelist.end(); ++it )
+ {
+ current_table = *it ;
+ cout << current_table << endl;
+ //find template table to use
+ if ( templatenumber == "Current" )
+ templatename = current_table ;
+ else
+ templatename = current_table + "_" + templatenumber ;
+
+ temptable="temp_table_" + current_table + "_" + gContext->GetHostName() ;
+ // create temp table for merging settings
+
+ create_temp_table(temptable, current_table );
+ cout << temptable + " " + current_table << endl;
+
+ // copy current settings from this host into temptable minus all Mythvantage settings
+ if ( current_table == "settings")
+ {
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME and value not like 'HOST%' ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ else
+ query.prepare( "replace into " + temptable + " (select * from " + current_table + " where hostname=:HOSTNAME ) ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // update hostname to match whatever the hostname of the template is
+ query.prepare ("update " + temptable + " set hostname=:HOSTNAME ; " );
+ query.bindValue( ":HOSTNAME" , copyhost );
+ query.exec();
+
+ // copy current settings from copy host into temptable minus all Mythvantage settings
+ if ( current_table == "settings")
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME and value not like 'HOST%' ) ; " );
+
+ else
+ query.prepare( "replace into " + temptable + " (select * from " + templatename + " where hostname=:HOSTNAME ) ; " );
+
+ query.bindValue( ":HOSTNAME" , copyhost );
+ query.exec();
+
+ //update hostname
+ query.prepare ("update " + temptable + " set hostname=:HOSTNAME ; " );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ query.exec();
+
+ // delete old settings from settings table
+ if ( current_table == "settings")
+ {
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME and value not like 'HOST%' ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ else
+ {
+ query.prepare( "delete from " + current_table + " where hostname=:HOSTNAME ;" );
+ query.bindValue( ":HOSTNAME" , gContext->GetHostName() );
+ }
+ query.exec();
+
+ // copy settings from temptable to settings
+ if ( current_table == "settings")
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " where value not like 'HOST% ' ) ;" );
+ else
+ query.prepare( "replace into " + current_table + " (select * from " + temptable + " );" );
+
+
+ query.exec();
+
+ // drop temptable
+ // drop_temp_table(temptable);
+
+
+restart_frontend();
+};
+
+
+};
+
+
+
+
+ static HostComboBox *HOSTtemplatetype()
+{
+ HostComboBox *gc = new HostComboBox("HOSTtemplatetype");
+ gc->setLabel(QObject::tr("Template options"));
+ gc->addSelection("Do Nothing") ;
+ gc->addSelection("restore");
+ gc->addSelection("save") ;
+ gc->addSelection("copy_from");
+
+ gc->setHelpText(QObject::tr("Select the name to save, this will make a copy of your keybindings and videoplayback. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostTemplateSave()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateSave");
+ gc->setLabel(QObject::tr("Save Template"));
+ // gc->addSelection("none");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the name to save, this will make a copy of your keybindings and videoplayback. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+ static HostComboBox *HostTemplateCopy_restore()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateRestore");
+ gc->setLabel(QObject::tr("Template"));
+ // gc->addSelection("none");
+ gc->addSelection("Current");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the template you wish to restore. This will change the way Myth repsonds to you remote buttons. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostTemplateRestore()
+{
+ HostComboBox *gc = new HostComboBox("HostTemplateRestore");
+ gc->setLabel(QObject::tr("Template"));
+ // gc->addSelection("none");
+ gc->addSelection("default_1");
+ gc->addSelection("default_2");
+ gc->addSelection("user1") ;
+ gc->addSelection("user2") ;
+ gc->addSelection("user3") ;
+ gc->setHelpText(QObject::tr("Select the template you wish to restore. This will change the way Myth repsonds to you remote buttons. Choose none if you do not wish to change anything."));
+
+ return gc;
+}
+
+ static HostComboBox *HostSelectcopy_from()
+{
+ HostComboBox *gc = new HostComboBox("HostSelectcopy_from");
+ gc->setLabel(QObject::tr("Host"));
+ // gc->addSelection("none");
+
+ QString tempItem;
+
+ MSqlQuery query(MSqlQuery::InitCon());
+
+ query.prepare( "SELECT DISTINCT hostname from settings where hostname is not null;");
+
+ if (query.exec() && query.isActive() && query.size() > 0)
+ {
+ while (query.next())
+ {
+ tempItem = query.value(0).toString();
+ gc->addSelection(tempItem);
+
+ }
+ }
+ gc->setHelpText(QObject::tr("Select the Host you wish to copy settings from."));
+
+ return gc;
+}
+
+class TemplateSettings:
+ public TriggeredConfigurationGroup {
+public:
+ TemplateSettings():
+ //ConfigurationGroup(false, true, false, false),
+ //VerticalConfigurationGroup(false, true, false, false),
+ TriggeredConfigurationGroup(true) {
+ setLabel(QObject::tr("Manage templates"));
+// setUseLabel(false);
+
+ Setting* Mtemplate = HOSTtemplatetype();
+ addChild(Mtemplate);
+ setTrigger(Mtemplate);
+
+
+ ConfigurationGroup* trestore = new VerticalConfigurationGroup(false);
+ trestore->addChild(HostTemplateRestore());
+
+ ConfigurationGroup* tsave = new VerticalConfigurationGroup(false);
+ tsave->addChild(HostTemplateSave());
+
+ ConfigurationGroup* tcopy = new VerticalConfigurationGroup(false);
+ tcopy->addChild(HostSelectcopy_from());
+ tcopy->addChild(HostTemplateCopy_restore());
+
+
+ addTarget("Do Nothing", new VerticalConfigurationGroup(true));
+ addTarget("restore", trestore);
+ addTarget("save", tsave);
+ addTarget("copy_from", tcopy);
+
+ };
+};
+
+MythCtemplate::MythCtemplate()
+{
+
+ TemplateSettings *templatesettings = new TemplateSettings();
+ addChild(templatesettings);
+
+}
+
+
+