Added file writing and then-callback to Downloader
[supertux.git] / src / addon / downloader.hpp
index dc4f0df..5aab70d 100644 (file)
 #include <string>
 #include <vector>
 
-class Transfer
+typedef int TransferId;
+
+class TransferStatus
 {
 public:
-  virtual ~Transfer() {}
-  virtual void abort() = 0;
+  enum Status { RUNNING, COMPLETED, ABORT, ERROR };
+
+public:
+  TransferId id;
+  Status status;
+  int dltotal;
+  int dlnow;
+  int ultotal;
+  int ulnow;
+  std::function<void ()> callback;
+
+  TransferStatus(TransferId id_) :
+    id(id_),
+    status(RUNNING),
+    dltotal(0),
+    dlnow(0),
+    ultotal(0),
+    ulnow(0),
+    callback()
+  {}
+
+  void then(const std::function<void ()>& callback_)
+  {
+    callback = callback_;
+  }
 };
 
-typedef Transfer* TransferHandle;
+typedef std::shared_ptr<TransferStatus> TransferStatusPtr;
 
-class cURLTransfer;
+class Transfer;
 
 class Downloader
 {
 private:
   CURLM* m_multi_handle;
-  std::vector<std::unique_ptr<cURLTransfer> > m_transfers;
+  std::vector<std::unique_ptr<Transfer> > m_transfers;
+  int m_next_transfer_id;
 
 public:
   Downloader();
@@ -57,9 +83,9 @@ public:
                 void* userdata);
 
   void update();
-  TransferHandle request_download(const std::string& url, const std::string& filename);
 
-  void abort(const cURLTransfer& transfer);
+  TransferStatusPtr request_download(const std::string& url, const std::string& filename);
+  void abort(TransferId id);
 
 private:
   Downloader(const Downloader&) = delete;