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 / SlideShowCallbacks.ycp < prev    next >
Text File  |  2006-11-29  |  10KB  |  372 lines

  1. /**
  2.  * Module:         SlideShowCallbacks.ycp
  3.  *
  4.  * Authors:        Gabriele Strattner <gs@suse.de>
  5.  *            Klaus Kaempf <kkaempf@suse.de>
  6.  *
  7.  * Purpose:         provides the Callbacks for SlideShow
  8.  *
  9.  */
  10.  
  11. {
  12.     module "SlideShowCallbacks";
  13.  
  14.     textdomain "packager";
  15.  
  16.     import "Installation";
  17.     import "Label";
  18.     import "Mode";
  19.     import "Stage";
  20.     import "PackageCallbacks";
  21.     import "Popup";
  22.     import "SlideShow";
  23.  
  24.     boolean shutup = ( Mode::autoinst() )?(true):(false);    // show the disk space warning popup only once and never in autoinstall
  25.     boolean _remote_provide = false;
  26.     boolean user_abort = false;
  27.  
  28.  
  29.     /**
  30.      * Check for user button presses and handle them.
  31.      *
  32.      * @return true if user wishes to abort
  33.      **/
  34.     void HandleInput()
  35.     {
  36.     // any button = SlideShow::debug ? UI::PollInput() : UI::TimeoutUserInput( 10 );
  37.     any button = UI::PollInput();
  38.  
  39.     // in case of cancel ask user if he really wants to quit installation
  40.     if ( button == `abort || button == `cancel )
  41.     {
  42.         if ( Mode::normal () )
  43.         {
  44.         user_abort = Popup::AnyQuestion( Popup::NoHeadline(),
  45.                         // popup yes-no
  46.                          _("Do you really want\nto quit the installation?"),
  47.                          Label::YesButton(),
  48.                          Label::NoButton(),
  49.                          `focus_no );
  50.         }
  51.         else if ( Stage::initial () )
  52.         {
  53.         user_abort = Popup::ConfirmAbort( `unusable );
  54.         }
  55.         else    // Mode::update (), Stage::cont ()
  56.         {
  57.         user_abort = Popup::ConfirmAbort( `incomplete );
  58.         }
  59.         if (user_abort)
  60.         {
  61.         SlideShow::AppendMessageToInstLog (_("Aborted"));
  62.         }
  63.     }
  64.     else
  65.     {
  66.         SlideShow::HandleInput( button );
  67.     }
  68.     }
  69.  
  70.  
  71.     /**
  72.      *  at start of file providal
  73.      */
  74.     global boolean StartProvide( string name, integer archivesize, boolean remote )
  75.     {
  76.     if ( remote )
  77.     {
  78.         SlideShow::SlideProvideStart (name , archivesize, remote);
  79.         _remote_provide = true;
  80.     }
  81.  
  82.     return true;
  83.     }
  84.  
  85.  
  86.     /**
  87.      * during file providal
  88.      */
  89.     global boolean ProgressProvide( integer percent )
  90.     {
  91.     if (_remote_provide)
  92.     {
  93.         SlideShow::UpdateCurrentPackageProgress ( percent );
  94.     }
  95.     HandleInput();
  96.     return ! user_abort;
  97.     }
  98.  
  99.  
  100.     /**
  101.      * during file providal
  102.      */
  103.     global string DoneProvide( integer error, string reason, string name )
  104.     {
  105.     if ( _remote_provide )
  106.     {
  107.         SlideShow::UpdateCurrentPackageProgress( 100 );
  108.         _remote_provide = false;
  109.     }
  110.     if (user_abort)
  111.     {
  112.         return "CANCEL";
  113.     }
  114.     if (error != 0)
  115.     {
  116.         return PackageCallbacks::DoneProvide( error, reason, name );
  117.     }
  118.  
  119.     return "";
  120.     }
  121.  
  122.  
  123.     global void ScriptStart(string patch_name, string patch_version, string patch_arch, string script_path, boolean installation)
  124.     {
  125.     string patch_full_name = PackageCallbacks::FormatPatchName(patch_name, patch_version, patch_arch);
  126.     y2milestone("ScriptStart: patch:%1, script:%2, installation:%3", patch_full_name, script_path, installation);
  127.  
  128.     // reset the progressbar
  129.     if (UI::WidgetExists(`progressCurrentPackage))
  130.     {
  131.         UI::ChangeWidget(`progressCurrentPackage, `Label, patch_full_name);
  132.         UI::ChangeWidget(`progressCurrentPackage, `Value, 0);
  133.     }
  134.  
  135.     // message in the installation log widget, %1 is a patch name which contains the script
  136.     string log_line = sformat(_("Starting script %1"), patch_full_name);
  137.  
  138.     SlideShow::AppendMessageToInstLog(log_line);
  139.     }
  140.  
  141.     global boolean ScriptProgress (boolean ping, string output)
  142.     {
  143.     y2milestone("ScriptProgress: ping:%1, output: %2", ping, output);
  144.  
  145.     if (output != nil && output != "")
  146.     {
  147.         string log_line = output;
  148.  
  149.         // remove the trailing new line character
  150.         if (substring(output, size(output) - 1, 1) == "\n")
  151.         {
  152.         output = substring(output, 0, size(output) - 1);
  153.         }
  154.  
  155.         // add the output to the log widget
  156.         SlideShow::AppendMessageToInstLog(output);
  157.     }
  158.  
  159.     any input = UI::PollInput ();
  160.     y2milestone("input: %1", input);
  161.  
  162.     if (input == `abort || input == `close)
  163.         return false;
  164.  
  165.     return true;
  166.     }
  167.  
  168.     global void ScriptProblem(string description)
  169.     {
  170.     y2milestone("ScriptProblem: %1", description);
  171.     Popup::Error(description);
  172.     }
  173.  
  174.     global void ScriptFinish()
  175.     {
  176.     y2milestone("ScriptFinish");
  177.     }
  178.  
  179.     global void Message(string patch_name, string patch_version, string patch_arch, string message)
  180.     {
  181.     string patch_full_name = PackageCallbacks::FormatPatchName(patch_name, patch_version, patch_arch);
  182.     y2milestone("Message (%1): %2", patch_full_name, message);
  183.  
  184.     if (patch_full_name != "")
  185.     {
  186.         // label, %1 is patch name with version and architecture
  187.         patch_full_name = sformat(_("Patch %1\n\n"), patch_full_name);
  188.     }
  189.  
  190.     Popup::LongMessage(patch_full_name + message);
  191.     }
  192.  
  193.  
  194.  
  195.     //--------------------------------------------------------------------------
  196.     // slide show
  197.  
  198.  
  199.     /**
  200.      * Callback that will be called by the packager for each RPM as it is being installed or deleted.
  201.      * Note: The packager doesn't call this directly - the corresponding wrapper callbacks do
  202.      * and pass the "deleting" flag as appropriate.
  203.      *
  204.      * return true: go on with installation
  205.      *        false: abort installation
  206.      **/
  207.     global boolean DisplayStartInstall( string  pkg_name,
  208.                            string  pkg_description,
  209.                            integer pkg_size,
  210.                            integer disk_usage,
  211.                            integer disk_capacity,
  212.                            boolean deleting )
  213.     {
  214.     SlideShow::SlideDisplayStart( pkg_name, pkg_description, pkg_size, deleting );
  215.     HandleInput();
  216.  
  217.     integer disk_percentage_left = (disk_usage * 100) / disk_capacity;
  218.  
  219.     // warn user about exhausted diskspace during installation (not if deleting packages)
  220.     if (! deleting)
  221.     {
  222. //        if ( disk_percentage_left > 95 && !shutup)
  223. // changed the condition because it fails on large disks (#115235)
  224.         if (disk_usage + 2 * pkg_size > disk_capacity && ! shutup)
  225.         {
  226.         boolean cont = Popup::AnyQuestion( Label::WarningMsg(),
  227.                            // yes-no popup
  228.                            _("The disk space is nearly exhausted.\nContinue with the installation?"),
  229.                            Label::YesButton(),
  230.                            Label::NoButton(),
  231.                            `focus_no );
  232.  
  233.         if (!cont)
  234.             return false;
  235.         else
  236.             shutup = true;
  237.         }
  238.     }
  239.  
  240.     return ! user_abort;
  241.     }
  242.  
  243.  
  244.     /**
  245.      *  at start of package install
  246.      */
  247.     global boolean StartPackage( string name, string summary, integer install_size, boolean is_delete )
  248.     {
  249.     PackageCallbacks::_package_name = name;
  250.     PackageCallbacks::_package_size = install_size;
  251.     PackageCallbacks::_deleting_package = is_delete;
  252.  
  253.     return DisplayStartInstall( name,
  254.                     summary,
  255.                     install_size,
  256.                     Pkg::TargetUsed( Installation::destdir ),
  257.                     Pkg::TargetCapacity( Installation::destdir ),
  258.                     is_delete);
  259.     }
  260.  
  261.  
  262.     /**
  263.      * ProgressPackage percent
  264.      **/
  265.     global boolean ProgressPackage ( integer pkg_percent )
  266.     {
  267.     HandleInput();
  268.     SlideShow::UpdateCurrentPackageProgress ( pkg_percent );
  269.  
  270.     return ! user_abort;
  271.     };
  272.  
  273.     /**
  274.      * at end of install
  275.      * just to override the PackageCallbacks default (which does a 'CloseDialog' :-})
  276.      */
  277.     global string DonePackage( integer error, string reason )
  278.     {
  279.     if (user_abort)
  280.         return "I";
  281.     SlideShow::UpdateCurrentPackageProgress (100);
  282.  
  283.     string ret = "";
  284.     if (error != 0)
  285.     {
  286.         ret = PackageCallbacks::DonePackage( error, reason );
  287.     }
  288.     if (size (ret) == 0 || tolower (substring (ret, 0, 1)) != "r")
  289.     {
  290.         SlideShow::SlideDisplayDone(
  291.         PackageCallbacks::_package_name,
  292.         PackageCallbacks::_package_size,
  293.         PackageCallbacks::_deleting_package);
  294.     }
  295.     return ret;
  296.     }
  297.  
  298.  
  299.     /**
  300.      *  at start of file providal
  301.      */
  302.     global void StartDeltaProvide( string name, integer archivesize )
  303.     {
  304.     SlideShow::SlideGenericProvideStart (name , archivesize, _("Downloading delta RPM %1 (download size %2)"), true /*remote*/);
  305.     _remote_provide = true;
  306.     }
  307.  
  308.     /**
  309.      *  at start of file providal
  310.      */
  311.     global void StartDeltaApply( string name )
  312.     {
  313.     SlideShow::SlideDeltaApplyStart (name);
  314.     _remote_provide = true;
  315.     }
  316.     /**
  317.      *  at start of file providal
  318.      */
  319.     global void StartPatchProvide( string name, integer archivesize )
  320.     {
  321.     SlideShow::SlideGenericProvideStart (name , archivesize, _("Downloading patch RPM %1 (download size %2)"), true /*remote*/);
  322.     _remote_provide = true;
  323.     }
  324.  
  325.     /**
  326.      * during file providal
  327.      */
  328.     global void ProgressDeltaApply( integer percent )
  329.     {
  330.     SlideShow::UpdateCurrentPackageProgress ( percent );
  331.     }
  332.  
  333.     /**
  334.      *  at end of file providal
  335.      */
  336.     global void FinishPatchDeltaProvide()
  337.     {
  338.     _remote_provide = false;
  339.     }
  340.  
  341.     global void ProblemDeltaDownload (string descr) {
  342.     _remote_provide = false;
  343.     // error in installation log, %1 is detail error description
  344.     SlideShow::AppendMessageToInstLog (sformat (_("Failed to download delta RPM: %1"), descr));
  345.     }
  346.  
  347.     global void ProblemDeltaApply (string descr) {
  348.     _remote_provide = false;
  349.     // error in installation log, %1 is detail error description
  350.     SlideShow::AppendMessageToInstLog (sformat (_("Failed to apply delta RPM: %1"), descr));
  351.     }
  352.  
  353.     global void ProblemPatchDownload (string descr) {
  354.     _remote_provide = false;
  355.     // error in installation log, %1 is detail error description
  356.     SlideShow::AppendMessageToInstLog (sformat (_("Failed to download patch RPM: %1"), descr));
  357.     }
  358.  
  359.     /**
  360.      * change of source
  361.      * source: 0 .. n-1
  362.      * media:  1 .. n
  363.      **/
  364.     global void CallbackSourceChange( integer source, integer media)
  365.     {
  366.     PackageCallbacks::SourceChange( source, media );        // inform PackageCallbacks about the change
  367.     SlideShow::SetCurrentCdNo( source, media );
  368.     SlideShow::UpdateCurrentPackageProgress(0);
  369.     SlideShow::UpdateAllCdProgress();
  370.     };
  371. }
  372.