[aseprite] 37/64: Abort loading news file if the application is being closed

Tobias Hansen thansen at moszumanska.debian.org
Tue Jun 21 14:43:03 UTC 2016


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit 1ce74d3c5a6f1f95d75f7618f1d5051282fc3c17
Author: David Capello <davidcapello at gmail.com>
Date:   Tue May 17 16:21:56 2016 -0300

    Abort loading news file if the application is being closed
---
 src/app/res/http_loader.cpp | 20 ++++++++++++--------
 src/app/res/http_loader.h   | 10 +++++++---
 src/app/ui/news_listbox.cpp | 16 +++++++++++++++-
 src/app/ui/news_listbox.h   |  3 ++-
 4 files changed, 36 insertions(+), 13 deletions(-)

diff --git a/src/app/res/http_loader.cpp b/src/app/res/http_loader.cpp
index 719d2db..839a989 100644
--- a/src/app/res/http_loader.cpp
+++ b/src/app/res/http_loader.cpp
@@ -1,5 +1,5 @@
 // Aseprite
-// Copyright (C) 2001-2015  David Capello
+// Copyright (C) 2001-2016  David Capello
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License version 2 as
@@ -28,7 +28,7 @@ namespace app {
 HttpLoader::HttpLoader(const std::string& url)
   : m_url(url)
   , m_done(false)
-  , m_cancel(false)
+  , m_request(nullptr)
   , m_thread(base::Bind<void>(&HttpLoader::threadHttpRequest, this))
 {
 }
@@ -38,9 +38,10 @@ HttpLoader::~HttpLoader()
   m_thread.join();
 }
 
-void HttpLoader::cancel()
+void HttpLoader::abort()
 {
-  m_cancel = true;
+  if (m_request)
+    m_request->abort();
 }
 
 void HttpLoader::threadHttpRequest()
@@ -61,12 +62,12 @@ void HttpLoader::threadHttpRequest()
     fn = base::join_path(dir, fn);
 
     std::ofstream output(FSTREAM_PATH(fn), std::ofstream::binary);
-    net::HttpRequest http(m_url);
+    m_request = new net::HttpRequest(m_url);
     net::HttpResponse response(&output);
-    http.send(response);
-
-    if (response.status() == 200)
+    if (m_request->send(response) &&
+        response.status() == 200) {
       m_filename = fn;
+    }
 
     LOG("Response: %d\n", response.status());
   }
@@ -76,6 +77,9 @@ void HttpLoader::threadHttpRequest()
   catch (...) {
     LOG("Unexpected unknown exception sending http request\n");
   }
+
+  delete m_request;
+  m_request = nullptr;
 }
 
 } // namespace app
diff --git a/src/app/res/http_loader.h b/src/app/res/http_loader.h
index 00ee6ab..242f680 100644
--- a/src/app/res/http_loader.h
+++ b/src/app/res/http_loader.h
@@ -1,5 +1,5 @@
 // Aseprite
-// Copyright (C) 2001-2015  David Capello
+// Copyright (C) 2001-2016  David Capello
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License version 2 as
@@ -12,6 +12,10 @@
 #include "base/thread.h"
 #include <string>
 
+namespace net {
+  class HttpRequest;
+}
+
 namespace app {
 
   class HttpLoader {
@@ -19,7 +23,7 @@ namespace app {
     HttpLoader(const std::string& url);
     ~HttpLoader();
 
-    void cancel();
+    void abort();
     bool isDone() const { return m_done; }
     std::string filename() const { return m_filename; }
 
@@ -28,7 +32,7 @@ namespace app {
 
     std::string m_url;
     bool m_done;
-    bool m_cancel;
+    net::HttpRequest* m_request;
     base::thread m_thread;
     std::string m_filename;
   };
diff --git a/src/app/ui/news_listbox.cpp b/src/app/ui/news_listbox.cpp
index 8379a21..2f63c43 100644
--- a/src/app/ui/news_listbox.cpp
+++ b/src/app/ui/news_listbox.cpp
@@ -1,5 +1,5 @@
 // Aseprite
-// Copyright (C) 2001-2015  David Capello
+// Copyright (C) 2001-2016  David Capello
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License version 2 as
@@ -21,6 +21,7 @@
 #include "base/string.h"
 #include "base/time.h"
 #include "ui/link_label.h"
+#include "ui/message.h"
 #include "ui/paint_event.h"
 #include "ui/size_hint_event.h"
 #include "ui/view.h"
@@ -219,6 +220,19 @@ void NewsListBox::reload()
   m_timer.start();
 }
 
+bool NewsListBox::onProcessMessage(ui::Message* msg)
+{
+  switch (msg->type()) {
+
+    case kCloseMessage:
+      if (m_loader)
+        m_loader->abort();
+      break;
+  }
+
+  return ListBox::onProcessMessage(msg);
+}
+
 void NewsListBox::onTick()
 {
   if (!m_loader || !m_loader->isDone())
diff --git a/src/app/ui/news_listbox.h b/src/app/ui/news_listbox.h
index 16e0645..24f7117 100644
--- a/src/app/ui/news_listbox.h
+++ b/src/app/ui/news_listbox.h
@@ -1,5 +1,5 @@
 // Aseprite
-// Copyright (C) 2001-2015  David Capello
+// Copyright (C) 2001-2016  David Capello
 //
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License version 2 as
@@ -26,6 +26,7 @@ namespace app {
     void reload();
 
   private:
+    bool onProcessMessage(ui::Message* msg) override;
     void onTick();
     void parseFile(const std::string& filename);
     bool validCache(const std::string& filename);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list