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_addon_update_sources.ycp < prev    next >
Text File  |  2006-11-29  |  3KB  |  117 lines

  1. /**
  2.  * File:    clients/inst_addon_update_sources.ycp
  3.  * Package:    yast2-installation
  4.  * Summary:    Add installation sources for online update, #163192
  5.  * Authors:    Martin Vidner <mvidner@suse.cz>
  6.  *
  7.  * Assumptions:
  8.  * - the sources have been initialized
  9.  * - the sources will be saved afterwards
  10.  * (this means that running this client alone will not work)
  11.  */
  12.  
  13. {
  14. textdomain "installation";
  15.  
  16. import "GetInstArgs";
  17. import "PackageCallbacksInit";
  18. import "Popup";
  19. import "SourceManager";
  20. import "Report";
  21.  
  22. include "packager/inst_source_dialogs.ycp";
  23.  
  24. if ( GetInstArgs::going_back())     // going backwards?
  25.     return `auto;                   // don't execute this once more
  26.  
  27.  
  28. /**
  29.  * @return the urls of known installation sources
  30.  */
  31. list<string> KnownUrls () {
  32.     list<integer> src_ids = Pkg::SourceGetCurrent (true /*enabled only?*/);
  33.     list<string> urls = maplist (integer src_id, src_ids, {
  34.     map gendata = Pkg::SourceGeneralData (src_id);
  35.     return gendata["url"]:"";
  36.     });
  37.     return urls;
  38. }
  39.  
  40. /**
  41.  * @return the installation sources to be added
  42.  */
  43. list<string> UpdateUrls () {
  44.     // get all available products
  45.     list<map<string,any> > products = Pkg::ResolvableProperties ("", `product, "");
  46.     list<list<string> > urls = maplist (map<string, any> p, products, {
  47.     return p["update_urls"]:[];
  48.     });
  49.     return (list<string>)toset (flatten (urls));
  50. }
  51.  
  52.  
  53. // feedback heading
  54. string heading = _("Add-On Product Installation");
  55. // feedback message
  56. string message = _("Reading packages available on the installation sources...");
  57.  
  58. list<string> knownUrls = KnownUrls ();
  59. y2milestone ("sources known: %1", knownUrls);
  60. map<string, boolean> is_known = listmap (string u, knownUrls, ``($[u: true]));
  61.  
  62. list<string> updateUrls = UpdateUrls ();
  63. y2milestone ("sources for updates: %1", updateUrls);
  64.  
  65. list<string> addUrls = filter (string u, updateUrls, ``( ! is_known[u]:false ));
  66. y2milestone ("sources to add: %1", addUrls);
  67.  
  68. if (addUrls != [])
  69. {
  70.     Popup::ShowFeedback (heading, message);
  71.  
  72.     list<integer> added_ids = [];
  73.     foreach (string u, addUrls, {
  74.     boolean again = true;
  75.  
  76.     while (again) {
  77.         integer srcid = Pkg::SourceCreate (u, "/");
  78.         y2milestone ("got %1 from creating %2", srcid, u);
  79.  
  80.         // wrong srcid, must have failed
  81.         if (srcid == -1) {
  82.         // popup error message
  83.         // %1 represents the the error message details
  84.         if (Popup::YesNo ( sformat(
  85.             _("An error occurred while connecting to the server.
  86. Details: %1
  87.  
  88. Try again?"),
  89.             Pkg::LastError()
  90.         ))) {
  91.             // try again
  92.             u = editUrl (u);
  93.         } else {
  94.             // abort
  95.             again = false;
  96.         }
  97.  
  98.         // everything is ok
  99.         } else {
  100.         added_ids = add (added_ids, srcid);
  101.         again = false;
  102.         }
  103.     }
  104.     });
  105.  
  106.     y2milestone ("syncing to zmd");
  107.     boolean synced = SourceManager::SyncAddedAndDeleted (added_ids, []);
  108.     y2milestone ("sync status: %1", synced);
  109.  
  110.     Popup::ClearFeedback ();
  111. }
  112.  
  113. return `auto;
  114.  
  115. /* EOF */
  116. }
  117.