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 / modules / Crash.ycp < prev    next >
Text File  |  2006-11-29  |  4KB  |  154 lines

  1. /**
  2.  * File:    modules/Crash.ycp
  3.  * Package:    YaST2 base package
  4.  * Summary:    Handling crashes and recovery of other modules
  5.  * Authors:    Jiri Srain <jsrain@suse.cz>
  6.  * Flags:    Stable
  7.  *
  8.  * $Id: Crash.ycp 31242 2006-06-01 12:59:16Z locilka $
  9.  */
  10.  
  11. {
  12.  
  13. module "Crash";
  14.  
  15. import "Popup";
  16.  
  17. /**
  18.  * All operations that failed when were running last time
  19.  */
  20. list<string> all_failed = [];
  21.  
  22. /**
  23.  * All operations that were the last started when crashed
  24.  * when running last time
  25.  */
  26. list<string> last_failed = [];
  27.  
  28. /**
  29.  * Last successfully finished operation
  30.  */
  31. string last_done = nil;
  32.  
  33. /**
  34.  * List of operations which are active during this YaST2 session
  35.  */
  36. list<string> this_run_active = [];
  37.  
  38. /**
  39.  * Filename of file storing crash settings
  40.  */
  41. global string filename = "/var/lib/YaST2/crash";
  42.  
  43.  
  44. /**
  45.  * Read settings from data file to variables
  46.  */
  47. global define void Read () ``{
  48.     if (SCR::Read (.target.size, filename) != -1)
  49.     {
  50.     map<string, any> settings = (map<string, any>)SCR::Read (.target.ycp, filename);
  51.     y2milestone ("Read settings: %1", settings);
  52.     all_failed = settings["all_failed"]:[];
  53.     last_failed = settings["last_failed"]:[];
  54.     last_done = (string) (settings["last_done"]:nil);
  55.     }
  56. }
  57.  
  58. /**
  59.  * Write data stored in variables to data files
  60.  */
  61. global define void Write () ``{
  62.     map settings = $[
  63.     "all_failed" : all_failed,
  64.     "last_failed": last_failed,
  65.     "last_done"  : last_done,
  66.     ];
  67.     SCR::Write (.target.ycp, filename, settings);
  68.     y2milestone ("Written settings: %1", settings);
  69.     SCR::Execute (.target.bash, "/bin/sync");
  70. }
  71.  
  72. /**
  73.  * Start operation
  74.  * @param op string operation to start
  75.  */
  76. global define void Run (string op) ``{
  77.     Read ();
  78.     if (! contains (all_failed, op))
  79.     all_failed = add (all_failed, op);
  80.     if (size (this_run_active) > 0)
  81.     last_failed = filter (string f, last_failed,
  82.         ``(f != this_run_active[0]:nil));
  83.     this_run_active = prepend (this_run_active, op);
  84.     if (! contains (last_failed, op))
  85.     last_failed = add (last_failed, op);
  86.     Write ();
  87. }
  88.  
  89. /**
  90.  * Finish operation
  91.  * @param op string operation to finish
  92.  */
  93. global define void Finish (string op) ``{
  94.     Read ();
  95.     all_failed = filter (string f, all_failed, ``(f != op));
  96.     this_run_active = filter (string f, this_run_active, ``(f != op));
  97.     last_failed = filter (string f, last_failed, ``(f != op));
  98.     if (size (this_run_active) > 0)
  99.     last_failed = add (last_failed, this_run_active[0]:nil);
  100.     last_done = op;
  101.     Write ();
  102. }
  103.  
  104. /**
  105.  * Check whether operation failed
  106.  * @param op string operation to check
  107.  * @return boolean true if yes
  108.  */
  109. global define boolean Failed (string op) ``{
  110.     Read ();
  111.     return contains (all_failed, op);
  112. }
  113.  
  114. /**
  115.  * Check whether operation was last started when failed
  116.  * @param op string operation to check
  117.  * @return boolean true if yes
  118.  */
  119. global define boolean FailedLast (string op) ``{
  120.     Read ();
  121.     return contains (last_failed, op);
  122. }
  123.  
  124. /**
  125.  * Get last finished operation
  126.  * @return string operation name
  127.  */
  128. global define string LastFinished () ``{
  129.     Read ();
  130.     return last_done;
  131. }
  132.  
  133. /**
  134.  * Check whether operation was last run in moment of last fail.
  135.  * Return whether operation shall be run
  136.  * If not, return true (no reason to think that operation is unsafe),
  137.  * Otherwise ask user
  138.  * @param op string operation name
  139.  * @param question string question to ask when was unsuccessfull last time
  140.  * @return boolean true if operation shall be started
  141.  */
  142. global define boolean AskRun (string op, string question) ``{
  143.     boolean ret = true;
  144.     Read ();
  145.     if (FailedLast (op))
  146.     {
  147.     ret = Popup::YesNo (question);
  148.     }
  149.     return ret;
  150. }
  151.  
  152. /* EOF */
  153. }
  154.