summaryrefslogtreecommitdiff
path: root/platform/default/default_file_source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/default_file_source.cpp')
-rw-r--r--platform/default/default_file_source.cpp72
1 files changed, 32 insertions, 40 deletions
diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp
index f070121497..93f10eea72 100644
--- a/platform/default/default_file_source.cpp
+++ b/platform/default/default_file_source.cpp
@@ -45,58 +45,45 @@ public:
onlineFileSource.setResourceTransform(std::move(transform));
}
- void listRegions(std::function<void (std::exception_ptr, optional<std::vector<OfflineRegion>>)> callback) {
- try {
- callback({}, offlineDatabase->listRegions());
- } catch (...) {
- callback(std::current_exception(), {});
- }
+ void listRegions(std::function<void (expected<OfflineRegions, std::exception_ptr>)> callback) {
+ callback(offlineDatabase->listRegions());
}
void createRegion(const OfflineRegionDefinition& definition,
const OfflineRegionMetadata& metadata,
- std::function<void (std::exception_ptr, optional<OfflineRegion>)> callback) {
- try {
- callback({}, offlineDatabase->createRegion(definition, metadata));
- } catch (...) {
- callback(std::current_exception(), {});
- }
+ std::function<void (expected<OfflineRegion, std::exception_ptr>)> callback) {
+ callback(offlineDatabase->createRegion(definition, metadata));
}
void updateMetadata(const int64_t regionID,
const OfflineRegionMetadata& metadata,
- std::function<void (std::exception_ptr, optional<OfflineRegionMetadata>)> callback) {
- try {
- callback({}, offlineDatabase->updateMetadata(regionID, metadata));
- } catch (...) {
- callback(std::current_exception(), {});
- }
+ std::function<void (expected<OfflineRegionMetadata, std::exception_ptr>)> callback) {
+ callback(offlineDatabase->updateMetadata(regionID, metadata));
}
- void getRegionStatus(int64_t regionID, std::function<void (std::exception_ptr, optional<OfflineRegionStatus>)> callback) {
- try {
- callback({}, getDownload(regionID).getStatus());
- } catch (...) {
- callback(std::current_exception(), {});
+ void getRegionStatus(int64_t regionID, std::function<void (expected<OfflineRegionStatus, std::exception_ptr>)> callback) {
+ if (auto download = getDownload(regionID)) {
+ callback(download.value()->getStatus());
+ } else {
+ callback(unexpected<std::exception_ptr>(download.error()));
}
}
void deleteRegion(OfflineRegion&& region, std::function<void (std::exception_ptr)> callback) {
- try {
- downloads.erase(region.getID());
- offlineDatabase->deleteRegion(std::move(region));
- callback({});
- } catch (...) {
- callback(std::current_exception());
- }
+ downloads.erase(region.getID());
+ callback(offlineDatabase->deleteRegion(std::move(region)));
}
void setRegionObserver(int64_t regionID, std::unique_ptr<OfflineRegionObserver> observer) {
- getDownload(regionID).setObserver(std::move(observer));
+ if (auto download = getDownload(regionID)) {
+ download.value()->setObserver(std::move(observer));
+ }
}
void setRegionDownloadState(int64_t regionID, OfflineRegionDownloadState state) {
- getDownload(regionID).setState(state);
+ if (auto download = getDownload(regionID)) {
+ download.value()->setState(state);
+ }
}
void request(AsyncRequest* req, Resource resource, ActorRef<FileSourceRequest> ref) {
@@ -181,13 +168,18 @@ public:
}
private:
- OfflineDownload& getDownload(int64_t regionID) {
+ expected<OfflineDownload*, std::exception_ptr> getDownload(int64_t regionID) {
auto it = downloads.find(regionID);
if (it != downloads.end()) {
- return *it->second;
+ return it->second.get();
+ }
+ auto definition = offlineDatabase->getRegionDefinition(regionID);
+ if (!definition) {
+ return unexpected<std::exception_ptr>(definition.error());
}
- return *downloads.emplace(regionID,
- std::make_unique<OfflineDownload>(regionID, offlineDatabase->getRegionDefinition(regionID), *offlineDatabase, onlineFileSource)).first->second;
+ auto download = std::make_unique<OfflineDownload>(regionID, std::move(definition.value()),
+ *offlineDatabase, onlineFileSource);
+ return downloads.emplace(regionID, std::move(download)).first->second.get();
}
// shared so that destruction is done on the creating thread
@@ -256,19 +248,19 @@ std::unique_ptr<AsyncRequest> DefaultFileSource::request(const Resource& resourc
return std::move(req);
}
-void DefaultFileSource::listOfflineRegions(std::function<void (std::exception_ptr, optional<std::vector<OfflineRegion>>)> callback) {
+void DefaultFileSource::listOfflineRegions(std::function<void (expected<OfflineRegions, std::exception_ptr>)> callback) {
impl->actor().invoke(&Impl::listRegions, callback);
}
void DefaultFileSource::createOfflineRegion(const OfflineRegionDefinition& definition,
const OfflineRegionMetadata& metadata,
- std::function<void (std::exception_ptr, optional<OfflineRegion>)> callback) {
+ std::function<void (expected<OfflineRegion, std::exception_ptr>)> callback) {
impl->actor().invoke(&Impl::createRegion, definition, metadata, callback);
}
void DefaultFileSource::updateOfflineMetadata(const int64_t regionID,
const OfflineRegionMetadata& metadata,
- std::function<void (std::exception_ptr, optional<OfflineRegionMetadata>)> callback) {
+ std::function<void (expected<OfflineRegionMetadata, std::exception_ptr>)> callback) {
impl->actor().invoke(&Impl::updateMetadata, regionID, metadata, callback);
}
@@ -284,7 +276,7 @@ void DefaultFileSource::setOfflineRegionDownloadState(OfflineRegion& region, Off
impl->actor().invoke(&Impl::setRegionDownloadState, region.getID(), state);
}
-void DefaultFileSource::getOfflineRegionStatus(OfflineRegion& region, std::function<void (std::exception_ptr, optional<OfflineRegionStatus>)> callback) const {
+void DefaultFileSource::getOfflineRegionStatus(OfflineRegion& region, std::function<void (expected<OfflineRegionStatus, std::exception_ptr>)> callback) const {
impl->actor().invoke(&Impl::getRegionStatus, region.getID(), callback);
}