Added special codes for bookmarks downloading

This commit is contained in:
r.kuznetsov 2018-10-26 14:41:40 +03:00 committed by Aleksey Belousov
parent 8c402ffaa0
commit ca9488e113
7 changed files with 65 additions and 20 deletions

View file

@ -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];
}
}

View file

@ -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;

View file

@ -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

View file

@ -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);
});
});
}

View file

@ -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;

View file

@ -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);
});
}

View file

@ -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,