[release-73-search-banners] [ios] Updated search banners cache logic.

This commit is contained in:
Ilya Grechuhin 2017-04-25 16:41:57 +03:00 committed by r.kuznetsov
parent 01e4f598bf
commit 865e7f38c8
4 changed files with 27 additions and 21 deletions

View file

@ -22,29 +22,28 @@ final class BannersCache: NSObject {
private func onCompletion(isAsync: Bool) {
guard let completion = completion else { return }
var bannerType: BannerType?
var banner: Banner?
statesLoop: for loadState in loadStates {
switch loadState {
case .notLoaded(_): return
case .notLoaded(let type):
banner = cache[type]
break statesLoop
case .loaded(let type):
bannerType = type
banner = cache[type]
break statesLoop
case .error: continue
}
}
guard bannerType != nil else { return }
guard let banner = cache[bannerType!] else {
assert(false)
return
if let banner = banner {
Statistics.logEvent(kStatPlacePageBannerShow, withParameters: banner.statisticsDescription)
MRMyTracker.trackEvent(withName: kStatPlacePageBannerShow)
completion(banner, isAsync)
banner.isBannerOnScreen = true
self.completion = nil
}
Statistics.logEvent(kStatPlacePageBannerShow, withParameters: banner.statisticsDescription)
MRMyTracker.trackEvent(withName: kStatPlacePageBannerShow)
completion(banner, isAsync)
banner.isBannerOnScreen = true
self.completion = nil
}
func get(coreBanners: [CoreBanner], completion: @escaping Completion, cacheOnly: Bool) {
func get(coreBanners: [CoreBanner], cacheOnly: Bool, loadNew: Bool = true, completion: @escaping Completion) {
self.completion = completion
self.cacheOnly = cacheOnly
loadStates = coreBanners.map { coreBanner in
@ -52,10 +51,13 @@ final class BannersCache: NSObject {
if let banner = cache[bannerType], (!banner.isPossibleToReload || banner.isNeedToRetain) {
return .loaded(bannerType)
} else {
get(bannerType: bannerType)
if loadNew {
get(bannerType: bannerType)
}
return .notLoaded(bannerType)
}
}
onCompletion(isAsync: false)
}

View file

@ -101,6 +101,7 @@ using TObservers = NSHashTable<__kindof TObserver>;
f.SearchInViewport(m_viewportParams);
}
}
[self updateItemsIndexWithBannerReload:YES];
[self onSearchCompleted];
}
else
@ -108,7 +109,7 @@ using TObservers = NSHashTable<__kindof TObserver>;
self->m_everywhereResults = results;
self->m_isLocalAdsCustomer = isLocalAdsCustomer;
self.suggestionsCount = results.GetSuggestsCount();
[self updateItemsIndex];
[self updateItemsIndexWithBannerReload:NO];
[self onSearchResultsUpdated];
}
};
@ -256,7 +257,7 @@ using TObservers = NSHashTable<__kindof TObserver>;
auto manager = [MWMSearch manager];
manager->m_everywhereResults.Clear();
manager.suggestionsCount = 0;
[manager updateItemsIndex];
[manager updateItemsIndexWithBannerReload:YES];
[self reset];
}
@ -296,7 +297,7 @@ using TObservers = NSHashTable<__kindof TObserver>;
[manager onSearchCompleted];
}
- (void)updateItemsIndex
- (void)updateItemsIndexWithBannerReload:(BOOL)reloadBanner
{
auto const resultsCount = self->m_everywhereResults.GetCount();
auto const itemsIndex = [[MWMSearchIndex alloc] initWithSuggestionsCount:self.suggestionsCount
@ -311,14 +312,15 @@ using TObservers = NSHashTable<__kindof TObserver>;
__weak auto weakSelf = self;
[bannersCache
getWithCoreBanners:banner_helpers::MatchPriorityBanners(adsEngine.GetSearchBanners())
cacheOnly:YES
loadNew:reloadBanner
completion:^(id<MWMBanner> ad, BOOL isAsync) {
__strong auto self = weakSelf;
if (!self)
return;
NSAssert(isAsync == NO, @"Banner is not from cache!");
[self.banners add:ad];
}
cacheOnly:YES];
}];
}
}
else

View file

@ -104,6 +104,8 @@ using namespace place_page;
__weak auto wSelf = self;
[[MWMBannersCache cache]
getWithCoreBanners:banner_helpers::MatchPriorityBanners(m_info.GetBanners())
cacheOnly:NO
loadNew:YES
completion:^(id<MWMBanner> ad, BOOL isAsync) {
__strong auto self = wSelf;
if (!self)
@ -113,8 +115,7 @@ using namespace place_page;
self->m_previewRows.push_back(PreviewRows::Banner);
if (isAsync)
self.bannerIsReadyCallback();
}
cacheOnly:NO];
}];
}
}

View file

@ -142,6 +142,7 @@
- (void)onSearchCompleted
{
[self onSearchResultsUpdated];
BOOL const noResults = [MWMSearch resultsCount] == 0;
self.tableView.hidden = noResults;
[(MWMSearchTableView *)self.view hideNoResultsView:!noResults];