summaryrefslogtreecommitdiff
path: root/platform/default/file_source_request.cpp
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-09-25 21:35:04 +0200
committerKonstantin Käfer <mail@kkaefer.com>2017-09-27 11:24:07 +0200
commitd878896276b37c2c502f30d0f2248cd3626daea8 (patch)
treed1c6b0b64fe4aebf281498a555f1a5b16b7b3824 /platform/default/file_source_request.cpp
parenta06f4849bc58cbe21b001f1f15fd0828bde9b79b (diff)
downloadqtlocation-mapboxgl-upstream/cmake-filesource.tar.gz
[build] split out DefaultFileSource and dependents to a separate targetupstream/cmake-filesource
We don't want to link it into the node bindings, so keep it in a separate target
Diffstat (limited to 'platform/default/file_source_request.cpp')
-rw-r--r--platform/default/file_source_request.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/platform/default/file_source_request.cpp b/platform/default/file_source_request.cpp
new file mode 100644
index 0000000000..09ea8cc32a
--- /dev/null
+++ b/platform/default/file_source_request.cpp
@@ -0,0 +1,37 @@
+#include <mbgl/storage/file_source_request.hpp>
+
+#include <mbgl/actor/mailbox.hpp>
+#include <mbgl/actor/scheduler.hpp>
+
+namespace mbgl {
+
+FileSourceRequest::FileSourceRequest(FileSource::Callback&& callback)
+ : responseCallback(callback)
+ , mailbox(std::make_shared<Mailbox>(*Scheduler::GetCurrent())) {
+}
+
+FileSourceRequest::~FileSourceRequest() {
+ if (cancelCallback) {
+ cancelCallback();
+ }
+
+ mailbox->close();
+}
+
+void FileSourceRequest::onCancel(std::function<void()>&& callback) {
+ cancelCallback = std::move(callback);
+}
+
+void FileSourceRequest::setResponse(const Response& response) {
+ // Copy, because calling the callback will sometimes self
+ // destroy this object. We cannot move because this method
+ // can be called more than one.
+ auto callback = responseCallback;
+ callback(response);
+}
+
+ActorRef<FileSourceRequest> FileSourceRequest::actor() {
+ return ActorRef<FileSourceRequest>(*this, mailbox);
+}
+
+} // namespace mbgl