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
17
18enum class DownloadStatus
19{
20 QUEUED,
21 DOWNLOADING,
22 COMPLETE,
23 FAILED,
24};
25
27{
28 std::string url;
29 std::string buffer;
30 DownloadStatus status;
31#ifndef NETWORK_MOCK
32 CURL *eh;
33#endif
34
35 std::function<void(DownloadOperation*)> cb;
36 void *cbdata;
37};
38
40{
41public:
44
46 void downloadAdd(DownloadOperation *download);
47
49 void downloadCancel(DownloadOperation *download);
50
52 int process();
53
54 // static instance
55 static void init();
56 static void quit();
57 static DownloadQueue* downloadQueue;
58
59private:
61 void transferStart(DownloadOperation *download);
62
64 void transferFinish(DownloadOperation *download);
65
67 void startTransfersFromQueue();
68
69#ifndef NETWORK_MOCK
70 // curl multi handle
71 CURLM *cm;
72
73 void setPlatformCurlFlags(CURL* c);
74#endif
75
77 std::list<DownloadOperation*> queue;
78
80 int transfers = 0;
81};
int process()
process finished and queued downloads
void downloadAdd(DownloadOperation *download)
add a new download operation
void downloadCancel(DownloadOperation *download)
cancel a download operation