Chesto 0.9
A declarative and element-based library for creating GUIs on homebrew'd consoles
DownloadQueue.hpp
1#pragma once
2
3#if !defined(NETWORK) && !defined(NETWORK_MOCK)
4#define NETWORK_MOCK
5#endif
6
7#ifndef NETWORK_MOCK
8#include <curl/curl.h>
9#include <curl/easy.h>
10#endif
11
12#include <functional>
13#include <string>
14#include <list>
15
16namespace Chesto {
17
18struct DownloadOperation;
19
20enum class DownloadStatus
21{
22 QUEUED,
23 DOWNLOADING,
24 COMPLETE,
25 FAILED,
26};
27
29{
30 std::string url;
31 std::string buffer;
32 DownloadStatus status;
33#ifndef NETWORK_MOCK
34 CURL *eh;
35#endif
36
37 std::function<void(DownloadOperation*)> cb;
38 void *cbdata;
39};
40
42{
43public:
46
48 void downloadAdd(DownloadOperation *download);
49
51 void downloadCancel(DownloadOperation *download);
52
54 int process();
55
56 // static instance
57 static void init();
58 static void quit();
59 static DownloadQueue* downloadQueue;
60
61private:
63 void transferStart(DownloadOperation *download);
64
66 void transferFinish(DownloadOperation *download);
67
69 void startTransfersFromQueue();
70
71#ifndef NETWORK_MOCK
72 // curl multi handle
73 CURLM *cm;
74
75 void setPlatformCurlFlags(CURL* c);
76#endif
77
79 std::list<DownloadOperation*> queue;
80
82 int transfers = 0;
83};
84
85} // namespace Chesto
void downloadCancel(DownloadOperation *download)
cancel a download operation
void downloadAdd(DownloadOperation *download)
add a new download operation
int process()
process finished and queued downloads