home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / clients / inst_checkmedia.ycp < prev    next >
Text File  |  2006-11-29  |  3KB  |  116 lines

  1. /**
  2.  * File:
  3.  *   clients/checkmedia-installation.ycp
  4.  *
  5.  * Summary:
  6.  *   Client for checkig media integrity
  7.  *
  8.  * Authors:
  9.  *   Ladislav Slezak <lslezak@suse.cz>
  10.  *
  11.  * $Id: inst_checkmedia.ycp 27936 2006-02-13 20:01:14Z olh $
  12.  *
  13.  */
  14.  
  15. {
  16.     textdomain "packager";
  17.  
  18.     import "CheckMedia";
  19.     import "String";
  20.  
  21.     /* The main () */
  22.     y2milestone ("Checkmedia-installation module started");
  23.     y2milestone ("----------------------------------------");
  24.  
  25.     /* main ui function */
  26.     any ret = `next;
  27.  
  28.     // check whether we are using CD installation source
  29.     string instmode = (string)SCR::Read(.etc.install_inf.InstMode);
  30.     y2milestone("Installation mode: %1", instmode);
  31.  
  32.     if (instmode == "cd" || instmode == "dvd")
  33.     {
  34.     list<string> readycddrives = CheckMedia::GetReadyCDs();
  35.     y2milestone("Ready CD drives: %1", readycddrives);
  36.  
  37.     if (size(readycddrives) > 0)
  38.     {
  39.         boolean dotest = false;
  40.  
  41.         // check whether "offer-extra-media-test" bit is present on any(!) medium
  42.         foreach(string drive, readycddrives, {
  43.             // read application area on the medium
  44.             map out = (map)SCR::Execute(.target.bash_output, sformat("/bin/dd if=%1 bs=1 skip=33651 count=512", drive));
  45.  
  46.             map<string,string> application_area = $[];
  47.  
  48.             if (out["exit"]:-1 == 0)
  49.             {
  50.             // parse application area
  51.             string app = out["stdout"]:"";
  52.  
  53.             app = String::CutBlanks(app);
  54.             y2milestone("Read application area: %1", out);
  55.  
  56.             list<string> values = splitstring(app, ";");
  57.  
  58.             if (values != nil)
  59.             {
  60.                 foreach(string val, values, {
  61.                     list<string> v = splitstring(val, "=");
  62.  
  63.                     string key = (string)v[0]:nil;
  64.                     string value = (string)v[1]:nil;
  65.  
  66.                     if (key != nil)
  67.                     {
  68.                     application_area[key] = value;
  69.                     }
  70.                 }
  71.                 );
  72.             }
  73.             y2milestone("Parsed application area: %1", application_area);
  74.             }
  75.  
  76.             // test 'check' key
  77.             if (application_area["check"]:"" == "1")
  78.             {
  79.             dotest = true;
  80.             // propagate device name to the check media client (preselect the device in the combo box)
  81.             CheckMedia::preferred_drive = drive;
  82.             }
  83.         }
  84.         );
  85.  
  86.         if (dotest)
  87.         {
  88.         // start checkmedia client in forced mode
  89.         y2milestone("Found a medium with MD5 check request.");
  90.         CheckMedia::forced_start = true;
  91.         ret = WFM::CallFunction("checkmedia", WFM::Args());
  92.         CheckMedia::forced_start = false;
  93.         }
  94.         else
  95.         {
  96.         y2milestone("Skipping CD check - 'check' option is not set in the application area");
  97.         ret = `auto;
  98.         }
  99.     }
  100.     else
  101.     {
  102.         y2milestone("CD/DVD was not found");
  103.         ret = `auto;
  104.     }
  105.     }
  106.     else
  107.     {
  108.     y2milestone("No CD installation source found, skipping Media Check");
  109.     ret = `auto;
  110.     }
  111.  
  112.     /* Finish */
  113.     y2milestone ("Checkmedia-installation finished");
  114.     return ret;
  115. }
  116.