-
Notifications
You must be signed in to change notification settings - Fork 1
/
PurchaseStatsController.m
109 lines (86 loc) · 2.79 KB
/
PurchaseStatsController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#import "BBWeeAppController-Protocol.h"
#import "PurchaseStatsFetcher.h"
#import "PurchaseStatsView.h"
@interface PurchaseStatsController: NSObject <BBWeeAppController,
PurchaseStatsViewDelegate,
PurchaseStatsFetcherDelegate,
PurchaseStatsStoreDelegate>
@property (nonatomic, readonly) UIView *view;
@end
@implementation PurchaseStatsController {
PurchaseStatsView *_view;
PurchaseStatsFetcher *_fetcher;
PurchaseStatsStore *_store;
NSString *_lastProductURL;
}
- (id)init {
if ((self = [super init])) {
_fetcher = [[PurchaseStatsFetcher alloc] init];
_fetcher.delegate = self;
}
return self;
}
- (void)dealloc {
[self unloadView];
}
- (void)loadPlaceholderView {
_view = [[PurchaseStatsView alloc] initWithFrame:CGRectMake(0, 0, 0, HEIGHT)];
_view.delegate = self;
}
- (void)loadFullView {
[_view scheduleFullViewLoad];
}
- (void)unloadView {
[_fetcher stop];
[_fetcher cancelAutoFetchTimer];
_fetcher.settings = nil;
_store.delegate = nil;
[_store save];
_store = nil;
_lastProductURL = [_view productURLAtLocation:CGPointZero].absoluteString;
_view.delegate = nil;
_view = nil;
}
- (float)viewHeight {
return HEIGHT;
}
- (NSURL *)launchURLForTapLocation:(CGPoint)tapLocation {
return [_view productURLAtLocation:tapLocation];
}
- (void)purchaseStatsViewReady:(PurchaseStatsView *)view {
PurchaseStatsSettings *settings = [[PurchaseStatsSettings alloc] init];
_store = [[PurchaseStatsStore alloc] init];
_store.delegate = self;
_store.settings = settings;
_fetcher.settings = settings;
for (PurchaseStatsProduct *product in _store.visibleProducts) {
[view addOrUpdateViewForProduct:product];
}
[view sortProductViews];
if (_lastProductURL) {
[view showProduct:_lastProductURL];
}
if (settings.autoRefresh) {
[_fetcher autoFetch];
}
}
- (void)purchaseStatsViewRefreshed:(PurchaseStatsView *)view {
[_fetcher fetch];
}
- (void)purchaseStatsFetcherStarted:(PurchaseStatsFetcher *)fetcher {
[_view startRefreshAnimation];
}
- (void)purchaseStatsFetcherFinished:(PurchaseStatsFetcher *)fetcher {
[_view stopRefreshAnimation:YES];
}
- (void)purchaseStatsFetcher:(PurchaseStatsFetcher *)fetcher failed:(id)reason {
[_view stopRefreshAnimation:NO];
}
- (void)purchaseStatsFetcher:(PurchaseStatsFetcher *)fetcher gotProductDictionary:(NSDictionary *)productDict {
[_store updateProductWithDictionary:productDict];
}
- (void)purchaseStatsStore:(PurchaseStatsStore *)store updatedProduct:(PurchaseStatsProduct *)product {
[_view addOrUpdateViewForProduct:product];
[_view sortProductViews];
}
@end