Graceful handling of situations when downloading the Add-on list fails
authorChristoph Sommer <mail@christoph-sommer.de>
Sun, 8 Apr 2007 12:02:51 +0000 (12:02 +0000)
committerChristoph Sommer <mail@christoph-sommer.de>
Sun, 8 Apr 2007 12:02:51 +0000 (12:02 +0000)
SVN-Revision: 4968

src/addon_manager.cpp
src/title.cpp

index 8c1c1e4..959d97a 100644 (file)
@@ -157,6 +157,8 @@ AddonManager::get_available_addons() const
   curl_easy_perform(curl_handle);
   curl_easy_cleanup(curl_handle);
 
+  if (addoninfos == "") throw std::runtime_error("Add-on list download failed");
+
   try {
     lisp::Parser parser;
     std::stringstream addoninfos_stream(addoninfos);
index 120935b..a990c69 100644 (file)
@@ -296,10 +296,15 @@ TitleScreen::check_addons_menu()
 
   // check if "Check Online" was chosen
   if (index == 0) {
-    available_addons = AddonManager::get_instance().get_available_addons();
-    generate_addons_menu();
-    Menu::set_current(addons_menu.get());
-    addons_menu->set_active_item(index);
+    try {
+      available_addons = AddonManager::get_instance().get_available_addons();
+      generate_addons_menu();
+      Menu::set_current(addons_menu.get());
+      addons_menu->set_active_item(index);
+    } 
+    catch (std::runtime_error e) {
+      log_warning << "Check for available Add-ons failed with error message \"" << e.what() << "\"" << std::endl;
+    }
     return;
   }
 
@@ -307,15 +312,25 @@ TitleScreen::check_addons_menu()
   if ((index >= ADDON_LIST_START_ID) && (index < ADDON_LIST_START_ID) + addons.size()) {
     Addon addon = addons[index - ADDON_LIST_START_ID];
     if (!addon.isInstalled) {
-      addon.install();
-      generate_addons_menu();
-      Menu::set_current(addons_menu.get());
-      addons_menu->set_active_item(index);
+      try {
+        addon.install();
+        generate_addons_menu();
+        Menu::set_current(addons_menu.get());
+        addons_menu->set_active_item(index);
+      } 
+      catch (std::runtime_error e) {
+        log_warning << "Installation of Add-on failed with error message \"" << e.what() << "\"" << std::endl;
+      }
     } else {
-      addon.remove();
-      generate_addons_menu();
-      Menu::set_current(addons_menu.get());
-      addons_menu->set_active_item(index);
+      try {
+        addon.remove();
+        generate_addons_menu();
+        Menu::set_current(addons_menu.get());
+        addons_menu->set_active_item(index);
+      } 
+      catch (std::runtime_error e) {
+        log_warning << "Removal of Add-on failed with error message \"" << e.what() << "\"" << std::endl;
+      }
     }
   }