-
Notifications
You must be signed in to change notification settings - Fork 1
/
RootViewController.m
158 lines (127 loc) · 5.77 KB
/
RootViewController.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//
// RootViewController.m
// SpectttatorTest-iOS
//
// Created by David Keegan on 6/29/11.
// Copyright 2011 David Keegan.
//
#import "RootViewController.h"
#import "Spectttator.h"
@implementation RootViewController
@synthesize list = _list;
@synthesize shots = _shots;
@synthesize imageRetrievedCache = _imageRetrievedCache;
@synthesize imageCache = _imageCache;
@synthesize listButton = _listButton;
@synthesize refreshButton = _refreshButton;
- (void)refreshWithList:(NSString *)aList{
if(aList != nil){
self.list = aList;
}
self.title = [self.list capitalizedString];
[self.listButton setEnabled:NO];
[self.refreshButton setEnabled:NO];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[SPRequest shotsForList:self.list
withPagination:[SPPagination perPage:SPPerPageMax]
runOnMainThread:YES
withBlock:^(NSArray *theShots, SPPagination *thsPagination){
self.shots = theShots;
self.imageCache = nil;
self.imageRetrievedCache = nil;
self.imageRetrievedCache = [[NSMutableSet alloc] initWithCapacity:[theShots count]];
self.imageCache = [[NSMutableDictionary alloc] initWithCapacity:[theShots count]];
[self.listButton setEnabled:YES];
[self.refreshButton setEnabled:YES];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[self.tableView reloadData];
}];
}
- (void)refresh{
[self refreshWithList:nil];
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
if(buttonIndex == 0){
[self refreshWithList:SPListPopular];
}else if(buttonIndex == 1){
[self refreshWithList:SPListEveryone];
}else if(buttonIndex == 2){
[self refreshWithList:SPListDebuts];
}
}
- (void)changeList{
UIActionSheet *listSheet = [[UIActionSheet alloc] initWithTitle:@"Lists"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:[SPListPopular capitalizedString],
[SPListEveryone capitalizedString],
[SPListDebuts capitalizedString],
nil];
[listSheet setActionSheetStyle:UIActionSheetStyleBlackOpaque];
[listSheet showInView:self.view];
[listSheet release];
}
- (void)viewDidLoad{
[self refreshWithList:SPListPopular];
self.refreshButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(refresh)];
self.navigationItem.rightBarButtonItem = self.refreshButton;
self.listButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks
target:self
action:@selector(changeList)];
self.navigationItem.leftBarButtonItem = self.listButton;
[super viewDidLoad];
}
- (void)viewDidAppear:(BOOL)animated{
[self refresh];
[super viewDidAppear:animated];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 68.0f;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return[self.shots count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ShotCell";
ShotCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = [topLevelObjects objectAtIndex:0];
}
SPShot *aShot = [self.shots objectAtIndex:indexPath.row];
NSNumber *identifier = [NSNumber numberWithLong:aShot.identifier];
[cell loadShot:aShot withImage:[self.imageCache objectForKey:identifier]];
// A little image cache so we only retrieve the image once,
// and we update the row the first time it's loaded.
if(![self.imageRetrievedCache member:identifier]){
[self.imageRetrievedCache addObject:identifier];
[aShot imageTeaserRunOnMainThread:YES withBlock:^(UIImage *image){
[self.imageCache setObject:image forKey:identifier];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil]
withRowAnimation:UITableViewRowAnimationNone];
}];
}
// Configure the cell.
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// Open the shot in safari
SPShot *aShot = [self.shots objectAtIndex:indexPath.row];
[[UIApplication sharedApplication] openURL:aShot.url];
}
- (void)dealloc{
[_shots release];
[_imageRetrievedCache release];
[_imageCache release];
[_refreshButton release];
[_listButton release];
[super dealloc];
}
@end