From a1e150195ed55ea1b9e6d2a8eded38072052ef6b Mon Sep 17 00:00:00 2001
From: Greg Frost <gregfrost1@bigpond.com>
Date: Sun, 28 Feb 2010 18:59:56 +1030
Subject: mythinstall: fix timezone crash, add folding@home, add xres from
 xorg.log

---
 abs/core-testing/mythinstall/PKGBUILD              |   2 +-
 .../mythinstall/checkout_MythVantage.sh            |   2 +
 .../mythinstall/xconfig_folding_timezone.patch     | 454 +++++++++++++++++++++
 3 files changed, 457 insertions(+), 1 deletion(-)
 create mode 100644 abs/core-testing/mythinstall/xconfig_folding_timezone.patch

diff --git a/abs/core-testing/mythinstall/PKGBUILD b/abs/core-testing/mythinstall/PKGBUILD
index 74e0c5a..ccb07b3 100644
--- a/abs/core-testing/mythinstall/PKGBUILD
+++ b/abs/core-testing/mythinstall/PKGBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Jams
 pkgname=mythinstall
 pkgver=2
-pkgrel=19
+pkgrel=20
 pkgdesc="LinHES installer/systemconfig GUI."
 arch=i686
 depends=()
diff --git a/abs/core-testing/mythinstall/checkout_MythVantage.sh b/abs/core-testing/mythinstall/checkout_MythVantage.sh
index 58849bf..c2c2f16 100755
--- a/abs/core-testing/mythinstall/checkout_MythVantage.sh
+++ b/abs/core-testing/mythinstall/checkout_MythVantage.sh
@@ -33,6 +33,8 @@ cd MythVantage-app
 git checkout master
 #git checkout origin/LinHES
 
+    patch -p 3 < ../../xconfig_folding_timezone.patch
+
 }
 
 dl_repo
diff --git a/abs/core-testing/mythinstall/xconfig_folding_timezone.patch b/abs/core-testing/mythinstall/xconfig_folding_timezone.patch
new file mode 100644
index 0000000..d6215cd
--- /dev/null
+++ b/abs/core-testing/mythinstall/xconfig_folding_timezone.patch
@@ -0,0 +1,454 @@
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/installsettings.cpp mythinstall-tz/src/MythVantage-app/mythinstall/installsettings.cpp
+--- mythinstall/src/MythVantage-app/mythinstall/installsettings.cpp	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/installsettings.cpp	2010-02-28 16:56:31.000000000 +1030
+@@ -45,6 +45,7 @@
+ #include "mythdbparams.h"
+ 
+ 
++int timezone_unknown = FALSE;
+ extern  HostParms hostparm;
+ extern DDCinfo ddcinfo;
+ 
+@@ -1288,6 +1289,62 @@
+     return gc;
+ };
+ 
++static HostCheckBox *Hostfoldingathome()
++{
++    HostCheckBox *gc = new HostCheckBox("Hostfoldingathome");
++    gc->setLabel(QObject::tr("Folding@home"));
++    gc->setValue(false);
++    gc->setHelpText(QObject::tr("A distributed computing project which studies protein folding, misfolding, aggregation, and related diseases."));
++    return gc;
++};
++
++static HostComboBox *Hostfoldingusername()
++{
++    // If there is an old R5.5 style folding directory /myth/folding@home, attempt
++    // to retrieve the old username.
++
++    FILE *username_pipe;
++    username_pipe =
++      popen (
++        "grep username= /myth/folding@home/client.cfg 2> /dev/null | "
++        "sed 's/username=//g'", "r");
++
++    if (username_pipe)
++    {
++      char username[200];
++      if (fgets (username, sizeof (username), username_pipe))
++      {
++          char *new_line;
++          username[sizeof(username)-1]=0;
++          if ((new_line = strchr (username, '\n')))
++            new_line[0] = 0;
++
++          cout << "found old username " << username << endl;
++
++          gContext->SetSetting("Hostfoldingusername", username);
++          gContext->SaveSetting("Hostfoldingusername", username);
++      }
++      pclose (username_pipe);
++    }
++
++    HostComboBox *gc = new HostComboBox("Hostfoldingusername",true);
++    gc->setLabel(QObject::tr("Folding Username"));
++    gc->setValue("");
++
++    gc->setHelpText(QObject::tr("The username associated to the work-units you return."));
++    return gc;
++};
++
++static HostComboBox *Hostfoldingworksize()
++{
++    HostComboBox *gc = new HostComboBox("Hostfoldingworksize");
++    gc->setLabel(QObject::tr("Work Packet Size"));
++    gc->addSelection("Big", "big");
++    gc->addSelection("Normal", "normal");
++    gc->addSelection("Small", "small");
++    gc->setHelpText(QObject::tr("Acceptable size of work assignment and work result packets (bigger units may have large memory demands)."));
++    return gc;
++};
+ 
+ static HostCheckBox *HostXscreensaver()
+ {
+@@ -3534,8 +3591,15 @@
+                 hostparm.ThisHostName = "You_Fool";
+     }
+     // piece togther the timezone
++    QString tz;
+     QString tregion;
+     QString tsubregion;
++
++    tz=gContext->GetSetting("HostTimeZone");
++
++    if ( tz.isEmpty() || (tz == "Unknown"))
++      timezone_unknown = TRUE;
++
+     tregion=gContext->GetSetting("HostTimeZoneRegion");
+     tsubregion=gContext->GetSetting("HostTimeZoneRegion_"+tregion);
+     if ( tsubregion.isEmpty() )
+@@ -4009,6 +4073,9 @@
+         hostparm.ThisHostXine = gContext->GetSetting("HostXine");
+         hostparm.ThisHostwebmin = gContext->GetSetting("Hostwebmin");
+         hostparm.ThisHostfuppes = gContext->GetSetting("Hostfuppes");
++        hostparm.ThisHostfoldingathome = gContext->GetSetting("Hostfoldingathome");
++        hostparm.ThisHostfoldingusername = gContext->GetSetting("Hostfoldingusername");
++        hostparm.ThisHostfoldingworksize = gContext->GetSetting("Hostfoldingworksize");
+         hostparm.ThisHostDDnslogin = gContext->GetSetting("HostDDnslogin");
+         hostparm.ThisHostDDnspassword = [REDACTED]
+         hostparm.ThisHostDDnshostname = gContext->GetSetting("HostDDnshostname");
+@@ -4252,6 +4319,9 @@
+         myfile << "xine=\"" + hostparm.ThisHostXine  + "\"\n";
+         myfile << "webmin=\"" + hostparm.ThisHostwebmin  + "\"\n";
+         myfile << "fuppes=\"" + hostparm.ThisHostfuppes  + "\"\n";
++        myfile << "foldingathome=\"" + hostparm.ThisHostfoldingathome  + "\"\n";
++        myfile << "foldingusername=\"" + hostparm.ThisHostfoldingusername  + "\"\n";
++        myfile << "foldingworksize=\"" + hostparm.ThisHostfoldingworksize  + "\"\n";
+ 
+ 
+ 
+@@ -4562,8 +4632,14 @@
+                     ConfigurationGroup *GridShowPlugin5 = new GridConfigurationGroup(2);
+                     GridShowPlugin5->addChild(Hostfuppes());
+ 
++                    ConfigurationGroup *GridShowPlugin6 = new VerticalConfigurationGroup(true,true);
++                    GridShowPlugin6->addChild(Hostfoldingathome());
++                    GridShowPlugin6->addChild(Hostfoldingusername());
++                    GridShowPlugin6->addChild(Hostfoldingworksize());
++
+                     addChild(GridShowPlugin4);
+                     addChild(GridShowPlugin5);
++                    addChild(GridShowPlugin6);
+                 }
+             }
+             if ( displayuser )
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/installsettings.h mythinstall-tz/src/MythVantage-app/mythinstall/installsettings.h
+--- mythinstall/src/MythVantage-app/mythinstall/installsettings.h	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/installsettings.h	2010-02-28 16:56:31.000000000 +1030
+@@ -468,6 +468,9 @@
+         QString ThisHostXine;
+         QString ThisHostwebmin;
+         QString ThisHostfuppes;
++        QString ThisHostfoldingathome;
++        QString ThisHostfoldingusername;
++        QString ThisHostfoldingworksize;
+ 
+         QString ThisHostDDnslogin;
+         QString ThisHostDDnspassword;
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/misc_settings.cpp mythinstall-tz/src/MythVantage-app/mythinstall/misc_settings.cpp
+--- mythinstall/src/MythVantage-app/mythinstall/misc_settings.cpp	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/misc_settings.cpp	2010-02-28 18:28:56.000000000 +1030
+@@ -80,8 +80,6 @@
+     else
+        miscsettings_2->addChild(HostZipcode());
+ 
+-
+-
+     TimezoneRegion *timezoneregion = new TimezoneRegion();
+     TimezoneButton *timezonebutton = new TimezoneButton();
+ 
+@@ -96,13 +94,11 @@
+             }
+         else
+             miscsettings->addChild(timezoneregion);
+-
+         }
+     else
+         miscsettings->addChild(timezoneregion);
+ 
+-//  button removed because it's borken
+-//     miscsettings->addChild(timezonebutton);
++    miscsettings->addChild(timezonebutton);
+     miscsettings->addChild(miscsettings_2);
+     addChild(miscsettings);
+     connect(timezonebutton, SIGNAL(mf_launch_tzgui()),timezoneregion ,SLOT(timezone_gathersettings()));
+@@ -110,23 +106,35 @@
+     connect(timezoneregion,SIGNAL(mf_show_tz(QString)),this,SLOT(mf_show_tz(QString)));
+     connect(this,SIGNAL(update_timezone(QString)),timezoneregion,SLOT(update_timezone_values(QString)));
+ 
+-
+- }
++    autoLaunchTimer = new QTimer(this);
++    connect(autoLaunchTimer, SIGNAL(timeout()), timezonebutton, SLOT(launch_tzgui()));
++    autoLaunchTimer->start(0);
++}
+ 
+ QString MiscMainFrame::mf_show_tz(QString tz)
+ {
+     QString GTimezone;
+     int rc;
+ 
+-   //launch tzgui and load output into Gtimezone
++    if (autoLaunchTimer->isActive())
++    {
++      autoLaunchTimer->stop();
++
++      // This was triggered by the timer. Only launch the timezone gui if the timezone is unknown.
++      if (!timezone_unknown)
++        return NULL;
++    }
++
++    if ((tz == "") || timezone_unknown)
++      tz = "guess";
++
++    //launch tzgui and load output into Gtimezone
+     int m_screenheight = 0, m_screenwidth = 0;
+     float m_wmult = 0, m_hmult = 0;
+     QString m_height , m_width , cmd;
+     GetMythUI()->GetScreenSettings(m_screenwidth, m_wmult, m_screenheight, m_hmult);
+     m_height.setNum(m_screenheight);
+     m_width.setNum(m_screenwidth);
+-
+-
+     QString tzpath;
+     tzpath=MV_ROOT;
+     tzpath.append("bin/timezone.bin");
+@@ -152,17 +160,17 @@
+             }
+             file.close();
+         }
++        timezone_unknown = FALSE;
+         emit update_timezone(GTimezone);
+     }
+ 
++    return GTimezone;
+ }
+ 
+-
+ //_______________Misc main frame
+ MiscMainFrame2::MiscMainFrame2():
+  VerticalConfigurationGroup(false,false,false,false)
+  {
+-
+     VerticalConfigurationGroup* miscsettings =
+         new VerticalConfigurationGroup(false, true,false,false);
+ 
+@@ -177,21 +185,20 @@
+         miscsettings->addChild(miscsettings_2);
+ 
+         addChild(miscsettings);
+-
+- }
++}
+ 
+ 
+ //_______________Misc time timezone
+ 
+ TimezoneButton::TimezoneButton():
+     VerticalConfigurationGroup(false,false,false,false)
+-    {
++{
+       TZButton = new TransButtonSetting;
+       TZButton->setLabel("Hitchhikers guide to timezones");
+       addChild(TZButton);
+       connect(TZButton, SIGNAL(pressed()),this,SLOT(launch_tzgui()));
+ 
+-    };
++};
+ 
+ void TimezoneButton::launch_tzgui()
+ {
+@@ -203,8 +210,6 @@
+     TZButton->setEnabled(false);
+ }
+ 
+-
+-
+ //This is used for the timezone
+ QStringList findFilesRecursively ( QStringList paths, QString fileTypes ) {
+     if ( fileTypes.isEmpty() ) fileTypes = "*";
+@@ -228,10 +233,8 @@
+     return result; // yields absolute paths
+ }
+ 
+-
+ void TimezoneRegion::timezoneregion_fillselection_zone()
+ {
+-
+     HostTimeZoneRegion->setLabel(QObject::tr("TimeZone"));
+     HostTimeZoneRegion->addSelection("US");
+     HostTimeZoneRegion->addSelection("Pacific");
+@@ -297,7 +300,6 @@
+     HostTimeZoneRegion->addSelection("CST6CDT");
+     HostTimeZoneRegion->addSelection("CET");
+     HostTimeZoneRegion->setHelpText(QObject::tr("Timezone Region"));
+-
+ }
+ 
+ void TimezoneRegion::timezoneregion_fillselection(QString tzonefile )
+@@ -514,8 +516,8 @@
+     addTarget("Cuba", new VerticalConfigurationGroup(false, false));
+     addTarget("CST6CDT", new VerticalConfigurationGroup(false, false));
+     addTarget("CET", new VerticalConfigurationGroup(false, false));
+-
+ };
++
+ void TimezoneRegion::update_timezone_values(QString Gtimezone)
+ {
+     QString region;
+@@ -523,6 +525,7 @@
+     region=Gtimezone.section('/',0,0);
+     subregion=Gtimezone.section('/',1,1);
+     HostTimeZoneRegion->setValue(region);
++
+     if ( region == "US")
+         HostTimezoneRegion_US->setValue(subregion);
+     else if ( region == "Pacific")
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/misc_settings.h mythinstall-tz/src/MythVantage-app/mythinstall/misc_settings.h
+--- mythinstall/src/MythVantage-app/mythinstall/misc_settings.h	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/misc_settings.h	2010-02-28 16:56:31.000000000 +1030
+@@ -20,6 +20,7 @@
+ Q_OBJECT
+ public:
+         MiscMainFrame();
++	QTimer *autoLaunchTimer;
+ 
+ public slots:
+     QString mf_show_tz(QString);
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/mv_common.h mythinstall-tz/src/MythVantage-app/mythinstall/mv_common.h
+--- mythinstall/src/MythVantage-app/mythinstall/mv_common.h	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/mv_common.h	2010-02-28 16:56:31.000000000 +1030
+@@ -1,4 +1,5 @@
+ //#define __MVAPP__ MythVantage
+ #define RELEASEFILE "LinHES-release"
+ 
++extern int timezone_unknown;
+ 
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/xorgsettings.cpp mythinstall-tz/src/MythVantage-app/mythinstall/xorgsettings.cpp
+--- mythinstall/src/MythVantage-app/mythinstall/xorgsettings.cpp	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/xorgsettings.cpp	2010-02-28 16:56:31.000000000 +1030
+@@ -261,7 +261,7 @@
+     HostXModelineCatagory->addSelection("DVD");
+     HostXModelineCatagory->addSelection("NTSC");
+     HostXModelineCatagory->addSelection("Custom");
+-    //HostXModelineCatagory->addSelection("Nvidia_modeline");
++    //HostXModelineCatagory->addSelection("nVidia Modeline");
+     HostXModelineCatagory->setHelpText(QObject::tr(""));
+ 
+     HostXadvancedresVESA = new HostComboBox("HostXadvancedresVESA");
+@@ -429,7 +429,7 @@
+     HostXNvidiaModelineCatagory->addSelection("DVD");
+     HostXNvidiaModelineCatagory->addSelection("NTSC");
+     HostXNvidiaModelineCatagory->addSelection("Custom");
+-    HostXNvidiaModelineCatagory->addSelection("Nvidia_modeline");
++    HostXNvidiaModelineCatagory->addSelection("nVidia Modeline");
+     HostXNvidiaModelineCatagory->setHelpText(QObject::tr(""));
+ 
+     HostXNvidiaadvancedresVESA = new HostComboBox("HostXNvidiaadvancedresVESA");
+@@ -479,10 +479,9 @@
+     addTarget("ATSC", HostXNvidiaadvancedresATSC);
+     addTarget("DVD", HostXNvidiaadvancedresDVD);
+     addTarget("NTSC", HostXNvidiaadvancedresNTSC);
+-    addTarget("Custom",HostXNvidiaadvancedresCustom);
+-    addTarget("Nvidia_modeline",nVidiastandard);
++    addTarget("Custom", HostXNvidiaadvancedresCustom);
++    addTarget("nVidia modeline", nVidiastandard);
+     addTarget("Auto", new VerticalConfigurationGroup(false, false));
+-
+ };
+ 
+ 
+@@ -513,7 +512,7 @@
+                 modeline= HostXNvidiaadvancedresNTSC->getValue();
+             else if ( modelinecatagory == "Custom")
+                     modeline= HostXNvidiaadvancedresCustom->getValue();
+-            else if ( modelinecatagory == "Nvidia_modeline" )
++            else if ( modelinecatagory == "nVidia modeline" )
+                     modeline = "Builtin" ;
+             // need to add stuff to find the built in nvidia modelines
+         hostparm.ThisXresadvanced = modelinecatagory +"_"+modeline;
+diff -Naru mythinstall/src/MythVantage-app/mythinstall/xorgsettings.h mythinstall-tz/src/MythVantage-app/mythinstall/xorgsettings.h
+--- mythinstall/src/MythVantage-app/mythinstall/xorgsettings.h	2010-02-28 17:03:23.000000000 +1030
++++ mythinstall-tz/src/MythVantage-app/mythinstall/xorgsettings.h	2010-02-28 16:56:31.000000000 +1030
+@@ -4,8 +4,6 @@
+ #include "libmyth/mythwidgets.h"
+ #include "installsettings.h"
+ 
+-
+-
+ class AdvancedXNvidiaConnections: public TriggeredConfigurationGroup {
+ Q_OBJECT
+ public:
+@@ -104,9 +102,77 @@
+ {
+     HostComboBox *gc = new HostComboBox("HostXres");
+     gc->setLabel(QObject::tr("Initial resolution"));
+-    gc->addSelection("800x600");
+-    gc->addSelection("1280x720") ;
+-    gc->addSelection("Auto") ;
+-    gc->setHelpText(QObject::tr(""));
++
++    const int num_defaults = 2;
++    char *defaults[num_defaults]={"800x600","1280x720"};
++    int defaults_added[num_defaults]={0,0};
++    int found_modes_in_xorg_log = FALSE;
++
++    gc->addSelection("Auto");
++
++    {
++      FILE *modelines;
++      const char*mode_extract_command =
++        "sed -n 's/[[:space:]]\\+/ /g;"             // compress whitespace
++                "s/[\\) ]: /#/g;"              // Insert # as a field delimiter
++		"/Modes in ModePool/,/ModePool/p'" // get the Modelool lines
++		" /var/log/Xorg.0.log |"             // from the Xorg log
++	"cut -d# -f2-3 | "            // select the mode and description fields
++	"sed '/^\\\"/!d;"             // Only selest modeline lines.
++	     "/DoubleScan/d;"         // Remove doublescan modelines.
++	     "/nvidia-auto-select/d;" // Remove auto modeline.
++             "s/ x /x/g;"
++	     "s/ @ /@/g;"
++             "s/From: //g;"
++             "s/ Format [0-9]*) (/, /g;"
++             "s/ Format [0-9]*//g;"
++	     "s/ Server//g'"; //reformat. 
++      modelines = popen (mode_extract_command, "r");
++
++      char previous_mode[200]={0};
++
++      if (modelines)
++      {
++	char line_in[200];
++	while (fgets (line_in, sizeof (line_in), modelines))
++	{
++          char *separator;
++
++	  if (strchr (line_in, '\n'))
++	    strchr (line_in, '\n')[0]=0;
++
++	  separator = strchr (line_in, '#');
++
++	  if (separator)
++	  {
++	    separator[0]=0;
++	    separator++;
++
++  	    // Skip this mode if the description is identical to the previous.
++	    if (strcmp (previous_mode, separator) == 0)
++	      continue;
++
++	    strncpy (previous_mode, separator, sizeof (previous_mode));
++  	    gc->addSelection(separator, line_in);
++            found_modes_in_xorg_log = TRUE;
++
++ 	    for (int def = 0; def < num_defaults; def++)
++	      if (strncmp (&line_in[1], defaults[def], strlen (defaults[def]))==0)
++	        defaults_added[def]=1;
++	  }
++	}
++	pclose (modelines);
++      }
++    }
++
++    for (int def = 0; def < num_defaults; def++)
++      if (!defaults_added[def])
++	gc->addSelection(defaults[def], defaults[def]);
++
++    if (found_modes_in_xorg_log)
++      gc->setHelpText(QObject::tr("Choose a resolution to match your display and a refresh rate to match the content you will be recording - 60 Hz for NTSC (e.g. US) 50 Hz for PAL (e.g. UK, Aust, NZ)."));
++    else
++      gc->setHelpText(QObject::tr("Choose the resolution to use when the system reboots."));
++
+     return gc;
+ }
-- 
cgit v0.12

