Moved abort() and update() calls into TransferStatus, also fixed abort() handling...
authorIngo Ruhnke <grumbel@gmail.com>
Tue, 26 Aug 2014 22:56:32 +0000 (00:56 +0200)
committerIngo Ruhnke <grumbel@gmail.com>
Tue, 26 Aug 2014 22:57:46 +0000 (00:57 +0200)
src/addon/addon_manager.cpp
src/addon/addon_manager.hpp
src/addon/downloader.cpp
src/addon/downloader.hpp
src/supertux/menu/download_dialog.cpp

index a624bc5..60099bf 100644 (file)
@@ -598,14 +598,4 @@ AddonManager::update()
   m_downloader.update();
 }
 
-void
-AddonManager::abort_install()
-{
-  log_info << "addon install aborted" << std::endl;
-
-  m_downloader.abort(m_transfer_status->id);
-
-  m_transfer_status = {};
-}
-
 /* EOF */
index 92b38e5..fafebb0 100644 (file)
@@ -71,7 +71,6 @@ public:
   Addon& get_installed_addon(const AddonId& addon);
 
   TransferStatusPtr request_install_addon(const AddonId& addon_id);
-  void abort_install();
   void install_addon(const AddonId& addon_id);
   void uninstall_addon(const AddonId& addon_id);
 
index b923813..80a5575 100644 (file)
@@ -49,6 +49,12 @@ size_t my_curl_physfs_write(void* ptr, size_t size, size_t nmemb, void* userdata
 } // namespace
 
 void
+TransferStatus::abort()
+{
+  m_downloader.abort(id);
+}
+
+void
 TransferStatus::update()
 {
   m_downloader.update();
@@ -258,8 +264,22 @@ Downloader::abort(TransferId id)
   }
   else
   {
+    TransferStatusPtr status = (*it)->get_status();
+
     curl_multi_remove_handle(m_multi_handle, (*it)->get_curl_handle());
     m_transfers.erase(it);
+
+    for(auto& callback : status->callbacks)
+    {
+      try
+      {
+        callback(false);
+      }
+      catch(const std::exception& err)
+      {
+        log_warning << "Illegal exception in Downloader: " << err.what() << std::endl;
+      }
+    }
   }
 }
 
index c75c7e1..6e7e482 100644 (file)
@@ -53,6 +53,7 @@ public:
     error_msg()
   {}
 
+  void abort();
   void update();
 
   void then(const std::function<void (bool)>& callback)
index 910dad0..17864e0 100644 (file)
@@ -84,7 +84,7 @@ DownloadDialog::update_text()
 void
 DownloadDialog::on_abort()
 {
-  AddonManager::current()->abort_install();
+  m_status->abort();
 }
 
 void