forked from facebook/facebook-ios-sdk
-
Notifications
You must be signed in to change notification settings - Fork 6
/
FBPlacePickerCacheDescriptor.m
114 lines (96 loc) · 4.53 KB
/
FBPlacePickerCacheDescriptor.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
110
111
112
113
114
/*
* Copyright 2012 Facebook
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "FBPlacePickerCacheDescriptor.h"
#import "FBGraphObjectTableDataSource.h"
#import "FBGraphObjectPagingLoader.h"
#import "FBPlacePickerViewController.h"
#import "FBPlacePickerViewController+Internal.h"
@interface FBPlacePickerCacheDescriptor () <FBGraphObjectPagingLoaderDelegate>
@property (nonatomic, readwrite) CLLocationCoordinate2D locationCoordinate;
@property (nonatomic, readwrite) NSInteger radiusInMeters;
@property (nonatomic, readwrite) NSInteger resultsLimit;
@property (nonatomic, readwrite, copy) NSString *searchText;
@property (nonatomic, readwrite, copy) NSSet *fieldsForRequest;
@property (nonatomic, readwrite, retain) FBGraphObjectPagingLoader *loader;
// this property is only used by unit tests, and should not be removed or made public
@property (nonatomic, readwrite, assign) BOOL hasCompletedFetch;
@end
@implementation FBPlacePickerCacheDescriptor
@synthesize locationCoordinate = _locationCoordinate,
radiusInMeters = _radiusInMeters,
resultsLimit = _resultsLimit,
searchText = _searchText,
fieldsForRequest = _fieldsForRequest,
loader = _loader,
hasCompletedFetch = _hasCompletedFetch;
- (id)initWithLocationCoordinate:(CLLocationCoordinate2D)locationCoordinate
radiusInMeters:(NSInteger)radiusInMeters
searchText:(NSString*)searchText
resultsLimit:(NSInteger)resultsLimit
fieldsForRequest:(NSSet*)fieldsForRequest {
self = [super init];
if (self) {
self.locationCoordinate = locationCoordinate;
self.radiusInMeters = radiusInMeters <= 0 ? defaultRadius : radiusInMeters;
self.searchText = searchText;
self.resultsLimit = resultsLimit <= 0 ? defaultResultsLimit : resultsLimit;
self.fieldsForRequest = fieldsForRequest;
self.hasCompletedFetch = NO;
}
return self;
}
- (void)dealloc {
self.fieldsForRequest = nil;
self.searchText = nil;
self.loader = nil;
[super dealloc];
}
- (void)prefetchAndCacheForSession:(FBSession*)session {
// Place queries require a session, so do nothing if we don't have one.
if (session == nil) {
return;
}
// datasource has some field ownership, so we need one here
FBGraphObjectTableDataSource *datasource = [[[FBGraphObjectTableDataSource alloc] init] autorelease];
// create the request object that we will start with
FBRequest *request = [FBPlacePickerViewController requestForPlacesSearchAtCoordinate:self.locationCoordinate
radiusInMeters:self.radiusInMeters
resultsLimit:self.resultsLimit
searchText:self.searchText
fields:self.fieldsForRequest
datasource:datasource
session:session];
self.loader.delegate = nil;
self.loader = [[[FBGraphObjectPagingLoader alloc] initWithDataSource:datasource
pagingMode:FBGraphObjectPagingModeAsNeeded]
autorelease];
self.loader.session = session;
self.loader.delegate = self;
// make sure we are around to handle the delegate call
[self retain];
// seed the cache
[self.loader startLoadingWithRequest:request
cacheIdentity:FBPlacePickerCacheIdentity
skipRoundtripIfCached:NO];
}
- (void)pagingLoaderDidFinishLoading:(FBGraphObjectPagingLoader *)pagingLoader {
self.loader.delegate = nil;
self.loader = nil;
self.hasCompletedFetch = YES;
// achieving detachment
[self release];
}
@end