forked from organicmaps/organicmaps-tmp
Added special codes for bookmarks downloading
This commit is contained in:
parent
8c402ffaa0
commit
ca9488e113
7 changed files with 65 additions and 20 deletions
|
@ -473,13 +473,14 @@ NSString * const CloudErrorToString(Cloud::SynchronizationResult result)
|
|||
if (observer)
|
||||
[observer onDownloadStart];
|
||||
};
|
||||
auto onDownloadFinished = [](std::string const & serverCatId, platform::RemoteFile::Result const & result)
|
||||
auto onDownloadFinished = [](std::string const & serverCatId, BookmarkCatalog::DownloadResult result,
|
||||
std::string const & description)
|
||||
{
|
||||
auto observer = [MWMBookmarksManager manager].catalogObservers[@(serverCatId.c_str())];
|
||||
if (observer)
|
||||
{
|
||||
[observer onDownloadComplete:result.m_status];
|
||||
if (result.m_status != platform::RemoteFile::Status::Ok) {
|
||||
[observer onDownloadComplete:result];
|
||||
if (result != BookmarkCatalog::DownloadResult::Success) {
|
||||
[[MWMBookmarksManager manager].catalogObservers removeObjectForKey:observer.categoryId];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#import "MWMCatalogCommon.h"
|
||||
|
||||
#include "map/bookmark_catalog.hpp"
|
||||
|
||||
#include "platform/remote_file.hpp"
|
||||
|
||||
@interface MWMCatalogObserver : NSObject
|
||||
|
@ -9,7 +11,7 @@
|
|||
@property (copy, nonatomic) CompletionBlock completionBlock;
|
||||
|
||||
- (void)onDownloadStart;
|
||||
- (void)onDownloadComplete:(platform::RemoteFile::Status)status;
|
||||
- (void)onDownloadComplete:(BookmarkCatalog::DownloadResult)result;
|
||||
- (void)onImportStart;
|
||||
- (void)onImportCompleteSuccessful:(BOOL)success forCategoryId:(UInt64)categoryId;
|
||||
|
||||
|
|
|
@ -8,27 +8,30 @@
|
|||
self.progressBlock(MWMCategoryProgressDownloadStarted);
|
||||
}
|
||||
|
||||
- (void)onDownloadComplete:(platform::RemoteFile::Status)status
|
||||
- (void)onDownloadComplete:(BookmarkCatalog::DownloadResult)result
|
||||
{
|
||||
MWMCategoryDownloadStatus downloadStatus;
|
||||
switch (status)
|
||||
switch (result)
|
||||
{
|
||||
case platform::RemoteFile::Status::Ok:
|
||||
case BookmarkCatalog::DownloadResult::Success:
|
||||
if (self.progressBlock)
|
||||
self.progressBlock(MWMCategoryProgressDownloadFinished);
|
||||
return;
|
||||
case platform::RemoteFile::Status::Forbidden:
|
||||
case BookmarkCatalog::DownloadResult::AuthError:
|
||||
downloadStatus = MWMCategoryDownloadStatusForbidden;
|
||||
break;
|
||||
case platform::RemoteFile::Status::NotFound:
|
||||
case BookmarkCatalog::DownloadResult::ServerError:
|
||||
downloadStatus = MWMCategoryDownloadStatusNotFound;
|
||||
break;
|
||||
case platform::RemoteFile::Status::NetworkError:
|
||||
case BookmarkCatalog::DownloadResult::NetworkError:
|
||||
downloadStatus = MWMCategoryDownloadStatusNetworkError;
|
||||
break;
|
||||
case platform::RemoteFile::Status::DiskError:
|
||||
case BookmarkCatalog::DownloadResult::DiskError:
|
||||
downloadStatus = MWMCategoryDownloadStatusDiskError;
|
||||
break;
|
||||
case BookmarkCatalog::DownloadResult::NeedPayment:
|
||||
//TODO(@beloal)
|
||||
break;
|
||||
}
|
||||
if (self.completionBlock)
|
||||
self.completionBlock(0, [[NSError alloc] initWithDomain:kCatalogErrorDomain
|
||||
|
|
|
@ -174,8 +174,8 @@ std::vector<std::string> BookmarkCatalog::GetDownloadingNames() const
|
|||
|
||||
void BookmarkCatalog::Download(std::string const & id, std::string const & name,
|
||||
std::string const & accessToken,
|
||||
std::function<void()> && startHandler,
|
||||
platform::RemoteFile::ResultHandler && finishHandler)
|
||||
DownloadStartCallback && startHandler,
|
||||
DownloadFinishCallback && finishHandler)
|
||||
{
|
||||
if (IsDownloading(id) || HasDownloaded(id))
|
||||
return;
|
||||
|
@ -198,8 +198,31 @@ void BookmarkCatalog::Download(std::string const & id, std::string const & name,
|
|||
{
|
||||
m_downloadingIds.erase(id);
|
||||
|
||||
DownloadResult downloadResult;
|
||||
switch (result.m_status)
|
||||
{
|
||||
case platform::RemoteFile::Status::Ok:
|
||||
downloadResult = DownloadResult::Success;
|
||||
break;
|
||||
case platform::RemoteFile::Status::Forbidden:
|
||||
downloadResult = DownloadResult::AuthError;
|
||||
break;
|
||||
case platform::RemoteFile::Status::NotFound:
|
||||
downloadResult = DownloadResult::ServerError;
|
||||
break;
|
||||
case platform::RemoteFile::Status::NetworkError:
|
||||
if (result.m_httpCode == 402)
|
||||
downloadResult = DownloadResult::NeedPayment;
|
||||
else
|
||||
downloadResult = DownloadResult::NetworkError;
|
||||
break;
|
||||
case platform::RemoteFile::Status::DiskError:
|
||||
downloadResult = DownloadResult::DiskError;
|
||||
break;
|
||||
}
|
||||
|
||||
if (finishHandler)
|
||||
finishHandler(std::move(result), filePath);
|
||||
finishHandler(downloadResult, result.m_description, filePath);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -36,10 +36,24 @@ public:
|
|||
|
||||
void RegisterByServerId(std::string const & id);
|
||||
void UnregisterByServerId(std::string const & id);
|
||||
|
||||
enum class DownloadResult
|
||||
{
|
||||
Success,
|
||||
NetworkError,
|
||||
ServerError,
|
||||
AuthError,
|
||||
DiskError,
|
||||
NeedPayment
|
||||
};
|
||||
using DownloadStartCallback = std::function<void()>;
|
||||
using DownloadFinishCallback = std::function<void(DownloadResult result,
|
||||
std::string const & description,
|
||||
std::string const & filePath)>;
|
||||
void Download(std::string const & id, std::string const & name,
|
||||
std::string const & accessToken,
|
||||
std::function<void()> && startHandler,
|
||||
platform::RemoteFile::ResultHandler && finishHandler);
|
||||
DownloadStartCallback && startHandler,
|
||||
DownloadFinishCallback && finishHandler);
|
||||
|
||||
bool IsDownloading(std::string const & id) const;
|
||||
bool HasDownloaded(std::string const & id) const;
|
||||
|
|
|
@ -2124,12 +2124,13 @@ void BookmarkManager::DownloadFromCatalogAndImport(std::string const & id, std::
|
|||
if (m_onCatalogDownloadStarted)
|
||||
m_onCatalogDownloadStarted(id);
|
||||
},
|
||||
[this, id](platform::RemoteFile::Result && result, std::string const & filePath)
|
||||
[this, id](BookmarkCatalog::DownloadResult result, std::string const & desc,
|
||||
std::string const & filePath)
|
||||
{
|
||||
if (m_onCatalogDownloadFinished)
|
||||
m_onCatalogDownloadFinished(id, result);
|
||||
m_onCatalogDownloadFinished(id, result, desc);
|
||||
|
||||
if (result.m_status == platform::RemoteFile::Status::Ok)
|
||||
if (result == BookmarkCatalog::DownloadResult::Success)
|
||||
ImportDownloadedFromCatalog(id, filePath);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -287,7 +287,8 @@ public:
|
|||
|
||||
using OnCatalogDownloadStartedHandler = platform::SafeCallback<void(std::string const & id)>;
|
||||
using OnCatalogDownloadFinishedHandler = platform::SafeCallback<void(std::string const & id,
|
||||
platform::RemoteFile::Result const &)>;
|
||||
BookmarkCatalog::DownloadResult result,
|
||||
std::string const & description)>;
|
||||
using OnCatalogImportStartedHandler = platform::SafeCallback<void(std::string const & id)>;
|
||||
using OnCatalogImportFinishedHandler = platform::SafeCallback<void(std::string const & id,
|
||||
kml::MarkGroupId categoryId,
|
||||
|
|
Loading…
Add table
Reference in a new issue