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

  1. /**
  2.  * File:    modules/DontShowAgain.ycp
  3.  * Authors: Lukas Ocilka <locilka@suse.cz>
  4.  * Summary: Handling "Don Not Show This Dialog Again"
  5.  *
  6.  * $Id: DontShowAgain.ycp 11111 2006-05-29 12:27:15Z locilka $
  7.  */
  8. {
  9.     module "DontShowAgain";
  10.     textdomain "packager";
  11.  
  12.     import "Directory";
  13.     import "FileUtils";
  14.  
  15.     /**
  16.      * Module for that stores and returns the information for
  17.      * "Don't Show This Dialog/Question Again"
  18.      */
  19.     
  20.     /* File with the current configuration */
  21.     string conf_file = Directory::vardir + "/dont_show_again.conf";
  22.  
  23.     /**
  24.      * Current configuration map
  25.      *
  26.      * @struct $[
  27.      *     // question type
  28.      *     "inst-source" : $[
  29.      *         // question identification (MD5sum of the question in the future?)
  30.      *         "-question-ident-" : $[
  31.      *             // url of the file or directory
  32.      *             "ftp://abc.xyz/rtf" : $[
  33.      *                 // show the dialog again
  34.      *                 "show_again" : false,
  35.      *                 // additional question return
  36.      *                 "return" : true,
  37.      *             ]
  38.      *         ]
  39.      *     ]
  40.      * ]
  41.      */
  42.     map <string, map <string, map <string, any> > > current_configuration = $[];
  43.  
  44.     /* Configuration has already been read */
  45.     global boolean already_read = false;
  46.  
  47.     /**
  48.      * Function that reads the current configuration if it hasn't been
  49.      * read already. It must be called before every Get or Set command.
  50.      */
  51.     void LazyLoadCurrentConf () {
  52.     if (! already_read) {
  53.         if (FileUtils::Exists(conf_file) && FileUtils::IsFile(conf_file)) {
  54.         y2milestone("Reading %1 file", conf_file);
  55.         // Read and evaluate the current configuration
  56.         map <string, map <string, map <string, any> > >  read_conf = (map <string, map <string, map <string, any> > >)
  57.             SCR::Read(.target.ycp, conf_file);
  58.         if (read_conf != nil) {
  59.             current_configuration = read_conf;
  60.         }
  61.         } else {
  62.         y2milestone("Configuration file %1 doesn't exist, there's no current configuration.",
  63.             conf_file
  64.         );
  65.         }
  66.  
  67.         // Configuration mustn't be read again
  68.         already_read = true;
  69.     }
  70.     }
  71.  
  72.     /**
  73.      * Saves  the current configuration into the configuration file
  74.      */
  75.     boolean SaveCurrentConfiguration () {
  76.     LazyLoadCurrentConf();
  77.  
  78.     // Removing nil entries from the configuration
  79.     map <string, map <string, map <string, any> > > new_configuration = $[];
  80.  
  81.     foreach (string dont_show_type, map <string, map <string, any> > records, current_configuration, {
  82.         // Defined and known type
  83.         if (dont_show_type == "inst-source") {
  84.         // Every popup type
  85.         foreach (string popup_type, map <string, any> one_record, records, {
  86.             // Every URL
  87.             foreach (string url, any record_options, one_record, {
  88.             // Record mustn't be nil or empty to be reused
  89.             if (record_options != nil && record_options != $[]) {
  90.                 // Creating map from the base
  91.                 if (new_configuration[dont_show_type]:nil == nil)
  92.                 new_configuration[dont_show_type] = $[];
  93.                 if (new_configuration[dont_show_type, popup_type]:nil == nil)
  94.                 new_configuration[dont_show_type, popup_type] = $[];
  95.  
  96.                 new_configuration[dont_show_type, popup_type, url] = record_options;
  97.             }
  98.             });
  99.         });
  100.         // Unknown type
  101.         } else {
  102.         new_configuration[dont_show_type] = records;
  103.         }
  104.     });
  105.  
  106.     current_configuration = new_configuration;
  107.  
  108.     return SCR::Write(.target.ycp, conf_file, current_configuration);
  109.     }
  110.  
  111.     /**
  112.      * Returns whether the question should be shown again
  113.      *
  114.      * @param map <string, string> of params
  115.      * @see current_configuration
  116.      * @return boolean it should be shown
  117.      */
  118.     global boolean GetShowQuestionAgain (map <string, string> params) {
  119.     LazyLoadCurrentConf();
  120.     string q_type = params["q_type"]:nil;
  121.  
  122.     // <--- Installation Sources --->
  123.     /*
  124.      * Parameters, $[
  125.      *     "q_type"  : "inst-source",             // mandatory
  126.      *     "q_ident" : "Question Identification", // mandatory
  127.      *     "q_url" : "URL"                        // optional
  128.      * ];
  129.      */
  130.     if (q_type == "inst-source") {
  131.         string q_ident = params["q_ident"]:nil;
  132.         string q_url   = params["q_url"]:nil;
  133.  
  134.         if (q_ident == nil) {
  135.         y2error("'q_ident' is a mandatory parameter");
  136.         return nil;
  137.         }
  138.         
  139.         if (current_configuration[q_type]:nil == nil
  140.         || current_configuration[q_type, q_ident]:nil == nil
  141.         || current_configuration[q_type, q_ident, q_url]:nil == nil
  142.         || current_configuration[q_type, q_ident, q_url, "show_again"]:nil == nil) {
  143.         return nil;
  144.         }
  145.         
  146.         return (boolean) current_configuration[q_type, q_ident, q_url, "show_again"]:nil;
  147.     // <--- Installation Sources --->
  148.  
  149.     // Add another types here...
  150.     } else {
  151.         y2error("'%1' is an unknown type", q_type);
  152.         return nil;
  153.     }
  154.     }
  155.  
  156.     /**
  157.      * Sets and stores whether the question should be shown again.
  158.      * If it should be, the result is not stored since the 'show again'
  159.      * is the default value.
  160.      *
  161.      * @param map <string, string> of params
  162.      * @see current_configuration
  163.      * @param boolean show again
  164.      * @return boolean if success
  165.      */
  166.     global boolean SetShowQuestionAgain (map <string, string> params, boolean new_value) {
  167.     LazyLoadCurrentConf();
  168.     string q_type = params["q_type"]:nil;
  169.     // Always set to 'true' if the configuration is changed
  170.     boolean conf_changed = false;
  171.  
  172.     // <--- Installation Sources --->
  173.     /*
  174.      * Parameters, $[
  175.      *     "q_type"  : "inst-source",             // mandatory
  176.      *     "q_ident" : "Question Identification", // mandatory
  177.      *     "q_url" : "URL"                        // optional
  178.      * ];
  179.      */
  180.     if (q_type == "inst-source") {
  181.         string q_ident = params["q_ident"]:nil;
  182.         string q_url   = params["q_url"]:nil;
  183.  
  184.         if (q_ident == nil) {
  185.         y2error("'q_ident' is a mandatory parameter");
  186.         return nil;
  187.         }
  188.         
  189.         // building the configuration map
  190.         if (current_configuration[q_type]:nil == nil) {
  191.         current_configuration[q_type] = $[];
  192.         }
  193.         if (current_configuration[q_type, q_ident]:nil == nil) {
  194.         current_configuration[q_type, q_ident] = $[];
  195.         }
  196.         if (current_configuration[q_type, q_ident, q_url]:nil == nil) {
  197.         current_configuration[q_type, q_ident, q_url] = $[];
  198.         }
  199.         
  200.         // save the new value into the configuration
  201.         conf_changed = true;
  202.         current_configuration[q_type, q_ident, q_url, "show_again"] = new_value;
  203.     // <--- Installation Sources --->
  204.  
  205.     // Add another types here...
  206.     } else {
  207.         y2error("'%1' is an unknown type", q_type);
  208.         return nil;
  209.     }
  210.  
  211.     if (conf_changed) return SaveCurrentConfiguration();
  212.     else return nil;
  213.     }
  214.  
  215.     /**
  216.      * Return the default return value for question that should not
  217.      * be shown again
  218.      *
  219.      * @param map <string, string> of params
  220.      * @see current_configuration
  221.      * @return any default return value
  222.      */
  223.     global any GetDefaultReturn (map <string, string> params) {
  224.     LazyLoadCurrentConf();
  225.     string q_type = params["q_type"]:nil;
  226.     
  227.     // <--- Installation Sources --->
  228.     /*
  229.      * Parameters, $[
  230.      *     "q_type"  : "inst-source",             // mandatory
  231.      *     "q_ident" : "Question Identification", // mandatory
  232.      *     "q_url" : "URL"                        // optional
  233.      * ];
  234.      */
  235.     // <--- Installation Sources --->
  236.     if (q_type == "inst-source") {
  237.         string q_ident = params["q_ident"]:nil;
  238.         string q_url   = params["q_url"]:nil;
  239.  
  240.         if (current_configuration[q_type]:nil == nil
  241.         || current_configuration[q_type, q_ident]:nil == nil
  242.         || current_configuration[q_type, q_ident, q_url]:nil == nil
  243.         || current_configuration[q_type, q_ident, q_url, "return"]:nil == nil) {
  244.         return nil;
  245.         }
  246.         
  247.         return current_configuration[q_type, q_ident, q_url, "return"]:nil;
  248.  
  249.     // Add another types here...
  250.     } else {
  251.         y2error("'%1' is an unknown type", q_type);
  252.         return nil;
  253.     }
  254.     // <--- Installation Sources --->
  255.     }
  256.  
  257.     /**
  258.      * Sets the default return value for the question that should not be shown
  259.      *
  260.      * @param map <string, string> of params
  261.      * @param any default return
  262.      * @see current_configuration
  263.      * @return boolean if success
  264.      */
  265.     global boolean SetDefaultReturn (map <string, string> params, any default_return) {
  266.     LazyLoadCurrentConf();
  267.     string q_type = params["q_type"]:nil;
  268.     // Always set to 'true' if the configuration is changed
  269.     boolean conf_changed = false;
  270.  
  271.     // <--- Installation Sources --->
  272.     /*
  273.      * Parameters, $[
  274.      *     "q_type"  : "inst-source",             // mandatory
  275.      *     "q_ident" : "Question Identification", // mandatory
  276.      *     "q_url" : "URL"                        // optional
  277.      * ];
  278.      */
  279.     if (q_type == "inst-source") {
  280.         string q_ident = params["q_ident"]:nil;
  281.         string q_url   = params["q_url"]:nil;
  282.  
  283.         if (q_ident == nil) {
  284.         y2error("'q_ident' is a mandatory parameter");
  285.         return nil;
  286.         }
  287.         
  288.         // building the configuration map
  289.         if (current_configuration[q_type]:nil == nil) {
  290.         current_configuration[q_type] = $[];
  291.         }
  292.         if (current_configuration[q_type, q_ident]:nil == nil) {
  293.         current_configuration[q_type, q_ident] = $[];
  294.         }
  295.         if (current_configuration[q_type, q_ident, q_url]:nil == nil) {
  296.         current_configuration[q_type, q_ident, q_url] = $[];
  297.         }
  298.         
  299.         // save the new value into the configuration
  300.         conf_changed = true;
  301.         current_configuration[q_type, q_ident, q_url, "return"] = default_return;
  302.     // <--- Installation Sources --->
  303.  
  304.     // Add another types here...
  305.     } else {
  306.         y2error("'%1' is an unknown type", q_type);
  307.         return nil;
  308.     }
  309.  
  310.     if (conf_changed) return SaveCurrentConfiguration();
  311.     else return nil;
  312.     }
  313.  
  314.     /**
  315.      * Returns the current configuration map
  316.      *
  317.      * @return map <string, map <string, map <string, any> > > with the current configuration
  318.      * @see current_configuration
  319.      */
  320.     global map <string, map <string, map <string, any> > > GetCurrentConfigurationMap () {
  321.     LazyLoadCurrentConf();
  322.     return current_configuration;
  323.     }
  324.  
  325.     /**
  326.      * Removes one entry defined with map params
  327.      *
  328.      * @param map <string, string> of params
  329.      * @see current_configuration
  330.      * @return boolean if success
  331.      */
  332.     global boolean RemoveShowQuestionAgain (map <string, string> params) {
  333.     LazyLoadCurrentConf();
  334.     string q_type = params["q_type"]:nil;
  335.  
  336.     if (q_type == "inst-source") {
  337.         string q_ident = params["q_ident"]:nil;
  338.         string q_url   = params["q_url"]:nil;
  339.  
  340.         if (current_configuration[q_type]:nil != nil
  341.         && current_configuration[q_type, q_ident]:nil != nil
  342.         && current_configuration[q_type, q_ident, q_url]:nil != nil) {
  343.         
  344.         current_configuration[q_type, q_ident, q_url] = nil;
  345.         SaveCurrentConfiguration();
  346.         }
  347.         
  348.         return (current_configuration[q_type]:nil != nil
  349.         && current_configuration[q_type, q_ident]:nil != nil
  350.         && current_configuration[q_type, q_ident, q_url]:nil != nil);
  351.     } else {
  352.         y2error("'%1' is an unknown type", q_type);
  353.         return false;
  354.     }
  355.     }
  356. }
  357.