aboutsummaryrefslogtreecommitdiff
path: root/include/Cache.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/Cache.hpp')
-rw-r--r--include/Cache.hpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/include/Cache.hpp b/include/Cache.hpp
new file mode 100644
index 0000000..89abe2c
--- /dev/null
+++ b/include/Cache.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+#include <boost/filesystem/path.hpp>
+#include <SFML/Graphics/Texture.hpp>
+#include <string>
+#include <thread>
+#include <mutex>
+#include <vector>
+
+namespace TinyProcessLib
+{
+ class Process;
+}
+
+namespace dchat
+{
+ struct ImageByUrlResult
+ {
+ enum class Type
+ {
+ CACHED,
+ DOWNLOADING,
+ FAILED_DOWNLOAD
+ };
+
+ // @texture is null if @type is DOWNLOADING or FAILED_DOWNLOAD
+ const sf::Texture *texture;
+ Type type;
+ };
+
+ class Cache
+ {
+ public:
+ Cache();
+
+ // Creates directory if it doesn't exist (recursively). Throws boost exception on failure
+ static boost::filesystem::path getDchatDir();
+
+ // Get cached image or downloads it.
+ // Default download file limit is 12MB
+ // Returns ImageByUrlResult describing texture status.
+ const ImageByUrlResult getImageByUrl(const std::string &url, int downloadLimitBytes = 12582912);
+ private:
+ struct ImageDownloadInfo
+ {
+ TinyProcessLib::Process *process;
+ std::string url;
+ };
+
+ std::thread downloadWaitThread;
+ std::vector<ImageDownloadInfo> imageDownloadProcesses;
+ std::mutex imageDownloadMutex;
+ };
+}