root / Classes / StorageObjectViewController.m @ c2940e36
History | View | Annotate | Download (36.9 kB)
1 | 700184fb | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 700184fb | Miltiadis Vasilakis | // StorageObjectViewController.m |
3 | 700184fb | Miltiadis Vasilakis | // OpenStack |
4 | 700184fb | Miltiadis Vasilakis | // |
5 | 700184fb | Miltiadis Vasilakis | // Created by Mike Mayo on 12/19/10. |
6 | 700184fb | Miltiadis Vasilakis | // The OpenStack project is provided under the Apache 2.0 license. |
7 | 700184fb | Miltiadis Vasilakis | // |
8 | 700184fb | Miltiadis Vasilakis | |
9 | 700184fb | Miltiadis Vasilakis | #import "StorageObjectViewController.h" |
10 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
11 | 623869ee | Miltiadis Vasilakis | #import "OpenStackRequest.h" |
12 | 700184fb | Miltiadis Vasilakis | #import "Container.h" |
13 | 700184fb | Miltiadis Vasilakis | #import "Folder.h" |
14 | 700184fb | Miltiadis Vasilakis | #import "StorageObject.h" |
15 | 700184fb | Miltiadis Vasilakis | #import "AccountManager.h" |
16 | 700184fb | Miltiadis Vasilakis | #import "AnimatedProgressView.h" |
17 | 700184fb | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
18 | 700184fb | Miltiadis Vasilakis | #import "MediaViewController.h" |
19 | 700184fb | Miltiadis Vasilakis | #import "FolderViewController.h" |
20 | 700184fb | Miltiadis Vasilakis | #import "UIColor+MoreColors.h" |
21 | 700184fb | Miltiadis Vasilakis | #import "OpenStackAppDelegate.h" |
22 | 38d59b6c | Miltiadis Vasilakis | #import "EditMetadataViewController.h" |
23 | 623869ee | Miltiadis Vasilakis | #import "Provider.h" |
24 | 91869be8 | Miltiadis Vasilakis | #import "EditPermissionsViewController.h" |
25 | 221c2106 | Miltiadis Vasilakis | #import "TextViewCell.h" |
26 | 45f2fce6 | Miltiadis Vasilakis | #import "NSString+Conveniences.h" |
27 | 7db1712d | Miltiadis Vasilakis | #import "APICallback.h" |
28 | 64929bae | Miltiadis Vasilakis | #import "ObjectVersionsViewController.h" |
29 | 60731366 | Miltiadis Vasilakis | #import <MediaPlayer/MPMoviePlayerController.h> |
30 | 60731366 | Miltiadis Vasilakis | #import <MessageUI/MessageUI.h> |
31 | 60731366 | Miltiadis Vasilakis | #import "ActivityIndicatorView.h" |
32 | 700184fb | Miltiadis Vasilakis | |
33 | 700184fb | Miltiadis Vasilakis | #define kDetails 0 |
34 | cacaa443 | Miltiadis Vasilakis | #define kActions 1 |
35 | 4b4b833e | Miltiadis Vasilakis | #define kMetadata 2 |
36 | 38d59b6c | Miltiadis Vasilakis | |
37 | 38d59b6c | Miltiadis Vasilakis | #define maxMetadataViewableLength 12 |
38 | 38d59b6c | Miltiadis Vasilakis | |
39 | 700184fb | Miltiadis Vasilakis | // TODO: use etag to reset download |
40 | 700184fb | Miltiadis Vasilakis | // TODO: try downloading directly to the file to save memory. don't use object.data |
41 | 700184fb | Miltiadis Vasilakis | |
42 | 700184fb | Miltiadis Vasilakis | /* |
43 | cacaa443 | Miltiadis Vasilakis | Name whatever.txt |
44 | cacaa443 | Miltiadis Vasilakis | Full Path folder/whatever.txt |
45 | cacaa443 | Miltiadis Vasilakis | Size 123 KB |
46 | cacaa443 | Miltiadis Vasilakis | Type text/plain |
47 | cacaa443 | Miltiadis Vasilakis | Last Modified 2012-12-21 11:11:00 |
48 | cacaa443 | Miltiadis Vasilakis | |
49 | 814a8d8f | Miltiadis Vasilakis | if fileDownloaded: |
50 | 814a8d8f | Miltiadis Vasilakis | Open File |
51 | 814a8d8f | Miltiadis Vasilakis | Mail File |
52 | 814a8d8f | Miltiadis Vasilakis | Delete from Cache |
53 | 814a8d8f | Miltiadis Vasilakis | else if fileDownloading: |
54 | 814a8d8f | Miltiadis Vasilakis | Open File (disabled) |
55 | 814a8d8f | Miltiadis Vasilakis | Mail File (disabled) |
56 | 814a8d8f | Miltiadis Vasilakis | Downloading (progress view) |
57 | 814a8d8f | Miltiadis Vasilakis | Cancel |
58 | 814a8d8f | Miltiadis Vasilakis | else: |
59 | 814a8d8f | Miltiadis Vasilakis | Open File |
60 | 814a8d8f | Miltiadis Vasilakis | Mail File |
61 | cacaa443 | Miltiadis Vasilakis | |
62 | cacaa443 | Miltiadis Vasilakis | Metadata |
63 | cacaa443 | Miltiadis Vasilakis | Key Value -> tap goes to a metadata item VC to edit or delete |
64 | cacaa443 | Miltiadis Vasilakis | Key Value |
65 | cacaa443 | Miltiadis Vasilakis | Add Metadata... (if max not already reached) |
66 | cacaa443 | Miltiadis Vasilakis | |
67 | cacaa443 | Miltiadis Vasilakis | Public URL On/Off |
68 | cacaa443 | Miltiadis Vasilakis | |
69 | cacaa443 | Miltiadis Vasilakis | Share |
70 | 700184fb | Miltiadis Vasilakis | |
71 | cacaa443 | Miltiadis Vasilakis | Versions |
72 | 700184fb | Miltiadis Vasilakis | |
73 | cacaa443 | Miltiadis Vasilakis | Delete Object |
74 | cacaa443 | Miltiadis Vasilakis | */ |
75 | 700184fb | Miltiadis Vasilakis | |
76 | 700184fb | Miltiadis Vasilakis | @implementation StorageObjectViewController |
77 | 700184fb | Miltiadis Vasilakis | |
78 | cacaa443 | Miltiadis Vasilakis | @synthesize account, container, folder, object, folderViewController; |
79 | b45fc7f8 | Miltiadis Vasilakis | @synthesize oldPublicURI, permissions, documentInteractionController, objectIsReadOnly, versionID; |
80 | 700184fb | Miltiadis Vasilakis | |
81 | cacaa443 | Miltiadis Vasilakis | #pragma mark - View lifecycle |
82 | cacaa443 | Miltiadis Vasilakis | |
83 | 700184fb | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
84 | 689de104 | Miltiadis Vasilakis | return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
85 | 700184fb | Miltiadis Vasilakis | } |
86 | 700184fb | Miltiadis Vasilakis | |
87 | 700184fb | Miltiadis Vasilakis | - (void)viewDidLoad { |
88 | 700184fb | Miltiadis Vasilakis | [super viewDidLoad]; |
89 | cacaa443 | Miltiadis Vasilakis | |
90 | 623869ee | Miltiadis Vasilakis | objectIsPublicSwitch = [[UISwitch alloc] init]; |
91 | 623869ee | Miltiadis Vasilakis | [objectIsPublicSwitch addTarget:self action:@selector(objectIsPublicSwitchChanged:) forControlEvents:UIControlEventValueChanged]; |
92 | 623869ee | Miltiadis Vasilakis | |
93 | b45fc7f8 | Miltiadis Vasilakis | self.permissions = [object permissions]; |
94 | d17a05de | Miltiadis Vasilakis | objectIsReadOnly = NO; |
95 | d17a05de | Miltiadis Vasilakis | if (account.sharingAccount) { |
96 | b45fc7f8 | Miltiadis Vasilakis | if (permissions.count) { |
97 | b45fc7f8 | Miltiadis Vasilakis | objectIsReadOnly = ![[permissions objectForKey:account.username] isEqualToString:@"write"]; |
98 | d17a05de | Miltiadis Vasilakis | } |
99 | d17a05de | Miltiadis Vasilakis | objectIsPublicSwitch.enabled = NO; |
100 | d17a05de | Miltiadis Vasilakis | } |
101 | 64929bae | Miltiadis Vasilakis | |
102 | 64929bae | Miltiadis Vasilakis | downloadProgressView = [[AnimatedProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault]; |
103 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
104 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
105 | 814a8d8f | Miltiadis Vasilakis | OpenStackRequest *request = [app objectDownloadRequestForAccount:account container:container object:object]; |
106 | 814a8d8f | Miltiadis Vasilakis | if (request) { |
107 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = YES; |
108 | 814a8d8f | Miltiadis Vasilakis | request.downloadProgressDelegate = self; |
109 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
110 | 64929bae | Miltiadis Vasilakis | } |
111 | 814a8d8f | Miltiadis Vasilakis | |
112 | 700184fb | Miltiadis Vasilakis | } |
113 | 700184fb | Miltiadis Vasilakis | |
114 | 700184fb | Miltiadis Vasilakis | - (void)viewWillAppear:(BOOL)animated { |
115 | 700184fb | Miltiadis Vasilakis | [super viewWillAppear:animated]; |
116 | 700184fb | Miltiadis Vasilakis | self.navigationItem.title = object.name; |
117 | 700184fb | Miltiadis Vasilakis | |
118 | 54cb751a | Miltiadis Vasilakis | NSIndexPath *selection = [self.tableView indexPathForSelectedRow]; |
119 | 38d59b6c | Miltiadis Vasilakis | if (selection) |
120 | 38d59b6c | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:selection animated:YES]; |
121 | 814a8d8f | Miltiadis Vasilakis | |
122 | 689de104 | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
123 | 814a8d8f | Miltiadis Vasilakis | if ([app cacheFilePathForHash:object.hash]) { |
124 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = YES; |
125 | 64929bae | Miltiadis Vasilakis | } else { |
126 | 64929bae | Miltiadis Vasilakis | fileDownloaded = NO; |
127 | 64929bae | Miltiadis Vasilakis | } |
128 | 700184fb | Miltiadis Vasilakis | |
129 | 689de104 | Miltiadis Vasilakis | if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { |
130 | 700184fb | Miltiadis Vasilakis | CGRect rect = downloadProgressView.frame; |
131 | 700184fb | Miltiadis Vasilakis | rect.size.width = 440.0; |
132 | 700184fb | Miltiadis Vasilakis | downloadProgressView.frame = rect; |
133 | 700184fb | Miltiadis Vasilakis | } |
134 | 700184fb | Miltiadis Vasilakis | |
135 | 4b4b833e | Miltiadis Vasilakis | publicLinkSection = 3; |
136 | 4b4b833e | Miltiadis Vasilakis | permissionsSection = 4; |
137 | aa2cf4d7 | Miltiadis Vasilakis | versionsSection = 5; |
138 | aa2cf4d7 | Miltiadis Vasilakis | deleteSection = 6; |
139 | 700184fb | Miltiadis Vasilakis | |
140 | 64929bae | Miltiadis Vasilakis | if (versionID) { |
141 | 64929bae | Miltiadis Vasilakis | publicLinkSection = -1; |
142 | 64929bae | Miltiadis Vasilakis | permissionsSection = -1; |
143 | 64929bae | Miltiadis Vasilakis | versionsSection = -1; |
144 | d17a05de | Miltiadis Vasilakis | deleteSection = -1; |
145 | 64929bae | Miltiadis Vasilakis | objectIsReadOnly = YES; |
146 | d17a05de | Miltiadis Vasilakis | } |
147 | 4b4b833e | Miltiadis Vasilakis | if (account.sharingAccount || account.shared) { |
148 | 4b4b833e | Miltiadis Vasilakis | versionsSection = -1; |
149 | 4b4b833e | Miltiadis Vasilakis | deleteSection = -1; |
150 | 4b4b833e | Miltiadis Vasilakis | } |
151 | 64929bae | Miltiadis Vasilakis | |
152 | 54cb751a | Miltiadis Vasilakis | objectIsPublic = ([object.publicURI length]); |
153 | 623869ee | Miltiadis Vasilakis | objectIsPublicSwitch.on = objectIsPublic; |
154 | 38d59b6c | Miltiadis Vasilakis | [self.tableView reloadData]; |
155 | 700184fb | Miltiadis Vasilakis | } |
156 | 700184fb | Miltiadis Vasilakis | |
157 | 54fd5c36 | Miltiadis Vasilakis | - (void)viewDidAppear:(BOOL)animated { |
158 | 3e581f16 | Miltiadis Vasilakis | [super viewDidAppear:animated]; |
159 | 3e581f16 | Miltiadis Vasilakis | if (!object.metadata) { |
160 | 54fd5c36 | Miltiadis Vasilakis | [self reloadMetadataSection]; |
161 | b45fc7f8 | Miltiadis Vasilakis | } else { |
162 | b45fc7f8 | Miltiadis Vasilakis | [self updatePermissionsUserCatalog]; |
163 | 54fd5c36 | Miltiadis Vasilakis | } |
164 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloading) { |
165 | 814a8d8f | Miltiadis Vasilakis | [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:kActions] |
166 | 814a8d8f | Miltiadis Vasilakis | atScrollPosition:UITableViewScrollPositionMiddle |
167 | 814a8d8f | Miltiadis Vasilakis | animated:YES]; |
168 | 814a8d8f | Miltiadis Vasilakis | } |
169 | 54fd5c36 | Miltiadis Vasilakis | } |
170 | 54fd5c36 | Miltiadis Vasilakis | |
171 | cacaa443 | Miltiadis Vasilakis | #pragma mark - Memory management |
172 | cacaa443 | Miltiadis Vasilakis | |
173 | cacaa443 | Miltiadis Vasilakis | - (void)dealloc { |
174 | cacaa443 | Miltiadis Vasilakis | if (fileDownloading) { |
175 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
176 | 814a8d8f | Miltiadis Vasilakis | OpenStackRequest *request = [app objectDownloadRequestForAccount:account container:container object:object]; |
177 | 814a8d8f | Miltiadis Vasilakis | request.downloadProgressDelegate = nil; |
178 | cacaa443 | Miltiadis Vasilakis | } |
179 | cacaa443 | Miltiadis Vasilakis | [account release]; |
180 | cacaa443 | Miltiadis Vasilakis | [downloadProgressView release]; |
181 | cacaa443 | Miltiadis Vasilakis | [cdnURLActionSheet release]; |
182 | cacaa443 | Miltiadis Vasilakis | [folderViewController release]; |
183 | b45fc7f8 | Miltiadis Vasilakis | [oldPublicURI release]; |
184 | cacaa443 | Miltiadis Vasilakis | [permissions release]; |
185 | b45fc7f8 | Miltiadis Vasilakis | [objectIsPublicSwitch release]; |
186 | cacaa443 | Miltiadis Vasilakis | [documentInteractionController release]; |
187 | cacaa443 | Miltiadis Vasilakis | [versionID release]; |
188 | cacaa443 | Miltiadis Vasilakis | [super dealloc]; |
189 | cacaa443 | Miltiadis Vasilakis | } |
190 | cacaa443 | Miltiadis Vasilakis | |
191 | cacaa443 | Miltiadis Vasilakis | #pragma mark - Internal |
192 | cacaa443 | Miltiadis Vasilakis | |
193 | cacaa443 | Miltiadis Vasilakis | - (void)objectIsPublicSwitchChanged:(id)sender { |
194 | cacaa443 | Miltiadis Vasilakis | NSString *activityMessage = [NSString stringWithFormat:@"Enabling public link.."]; |
195 | b45fc7f8 | Miltiadis Vasilakis | self.oldPublicURI = object.publicURI; |
196 | cacaa443 | Miltiadis Vasilakis | |
197 | cacaa443 | Miltiadis Vasilakis | if (objectIsPublic) { |
198 | cacaa443 | Miltiadis Vasilakis | activityMessage = [NSString stringWithFormat:@"Disabling public link.."]; |
199 | cacaa443 | Miltiadis Vasilakis | object.publicURI = @""; |
200 | cacaa443 | Miltiadis Vasilakis | } else { |
201 | cacaa443 | Miltiadis Vasilakis | object.publicURI = @"TRUE"; |
202 | cacaa443 | Miltiadis Vasilakis | } |
203 | cacaa443 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:activityMessage |
204 | cacaa443 | Miltiadis Vasilakis | andAddToView:self.view |
205 | cacaa443 | Miltiadis Vasilakis | scrollOffset:self.tableView.contentOffset.y]; |
206 | cacaa443 | Miltiadis Vasilakis | objectIsPublic = !objectIsPublic; |
207 | cacaa443 | Miltiadis Vasilakis | [[self.account.manager writeObjectMetadata:container object:object] |
208 | cacaa443 | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
209 | cacaa443 | Miltiadis Vasilakis | NSIndexPath *publicURICellIndexPath = [NSIndexPath indexPathForRow:1 inSection:publicLinkSection]; |
210 | cacaa443 | Miltiadis Vasilakis | if (objectIsPublic) { |
211 | cacaa443 | Miltiadis Vasilakis | [[self.account.manager getObjectInfo:container object:object version:versionID] |
212 | cacaa443 | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
213 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
214 | cacaa443 | Miltiadis Vasilakis | object.publicURI = [request.responseHeaders objectForKey:@"X-Object-Public"]; |
215 | cacaa443 | Miltiadis Vasilakis | NSIndexPath *publicURICellIndexPath = [NSIndexPath indexPathForRow:1 inSection:publicLinkSection]; |
216 | cacaa443 | Miltiadis Vasilakis | [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:publicURICellIndexPath] |
217 | cacaa443 | Miltiadis Vasilakis | withRowAnimation:UITableViewRowAnimationBottom]; |
218 | cacaa443 | Miltiadis Vasilakis | } |
219 | cacaa443 | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
220 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
221 | cacaa443 | Miltiadis Vasilakis | [self alert:@"There was a problem retrieving the public link from the server." request:request]; |
222 | cacaa443 | Miltiadis Vasilakis | }]; |
223 | cacaa443 | Miltiadis Vasilakis | } else { |
224 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
225 | cacaa443 | Miltiadis Vasilakis | [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:publicURICellIndexPath] |
226 | cacaa443 | Miltiadis Vasilakis | withRowAnimation:UITableViewRowAnimationTop]; |
227 | cacaa443 | Miltiadis Vasilakis | } |
228 | cacaa443 | Miltiadis Vasilakis | } |
229 | cacaa443 | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
230 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
231 | cacaa443 | Miltiadis Vasilakis | objectIsPublic = !objectIsPublic; |
232 | cacaa443 | Miltiadis Vasilakis | objectIsPublicSwitch.on = !objectIsPublicSwitch.on; |
233 | b45fc7f8 | Miltiadis Vasilakis | object.publicURI = oldPublicURI; |
234 | cacaa443 | Miltiadis Vasilakis | [self alert:@"There was a problem enabling the public link." request:request]; |
235 | cacaa443 | Miltiadis Vasilakis | }]; |
236 | cacaa443 | Miltiadis Vasilakis | } |
237 | cacaa443 | Miltiadis Vasilakis | |
238 | 814a8d8f | Miltiadis Vasilakis | - (void)openFile { |
239 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
240 | 814a8d8f | Miltiadis Vasilakis | NSString *filePath = [app cacheFilePathForHash:object.hash]; |
241 | 814a8d8f | Miltiadis Vasilakis | self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]]; |
242 | 814a8d8f | Miltiadis Vasilakis | self.documentInteractionController.delegate = self; |
243 | 814a8d8f | Miltiadis Vasilakis | self.documentInteractionController.name = object.name; |
244 | 814a8d8f | Miltiadis Vasilakis | |
245 | 814a8d8f | Miltiadis Vasilakis | CGRect frameToPresentMenuFrom; |
246 | 814a8d8f | Miltiadis Vasilakis | if ([[UIDevice currentDevice].systemVersion hasPrefix:@"6"]) { |
247 | 814a8d8f | Miltiadis Vasilakis | frameToPresentMenuFrom = CGRectMake(0.0, |
248 | 814a8d8f | Miltiadis Vasilakis | self.tableView.contentOffset.y, |
249 | 814a8d8f | Miltiadis Vasilakis | self.view.frame.size.width, |
250 | 814a8d8f | Miltiadis Vasilakis | 1.0); |
251 | 814a8d8f | Miltiadis Vasilakis | } else { |
252 | 814a8d8f | Miltiadis Vasilakis | UITableViewCell *openFileCell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:kActions]]; |
253 | 814a8d8f | Miltiadis Vasilakis | frameToPresentMenuFrom = CGRectMake(openFileCell.frame.origin.x, |
254 | 814a8d8f | Miltiadis Vasilakis | openFileCell.frame.origin.y - self.tableView.contentOffset.y, |
255 | 814a8d8f | Miltiadis Vasilakis | openFileCell.frame.size.width, |
256 | 814a8d8f | Miltiadis Vasilakis | openFileCell.frame.size.height); |
257 | 814a8d8f | Miltiadis Vasilakis | } |
258 | 814a8d8f | Miltiadis Vasilakis | if (![self.documentInteractionController presentOptionsMenuFromRect:frameToPresentMenuFrom inView:self.view animated:YES]) { |
259 | 814a8d8f | Miltiadis Vasilakis | if ([self.object isPlayableMedia]) { |
260 | 814a8d8f | Miltiadis Vasilakis | MediaViewController *vc = [[MediaViewController alloc] initWithNibName:@"MediaViewController" bundle:nil]; |
261 | 814a8d8f | Miltiadis Vasilakis | vc.container = self.container; |
262 | 814a8d8f | Miltiadis Vasilakis | vc.object = self.object; |
263 | 814a8d8f | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
264 | 814a8d8f | Miltiadis Vasilakis | [vc release]; |
265 | 814a8d8f | Miltiadis Vasilakis | } else { |
266 | 814a8d8f | Miltiadis Vasilakis | [self alert:@"Error" message:@"This file could not be opened."]; |
267 | 814a8d8f | Miltiadis Vasilakis | } |
268 | 814a8d8f | Miltiadis Vasilakis | } |
269 | 814a8d8f | Miltiadis Vasilakis | } |
270 | 814a8d8f | Miltiadis Vasilakis | |
271 | 814a8d8f | Miltiadis Vasilakis | - (void)mailFile { |
272 | 814a8d8f | Miltiadis Vasilakis | if (![MFMailComposeViewController canSendMail]) { |
273 | 814a8d8f | Miltiadis Vasilakis | [self alert:@"Cannot send mail" message:@"Your device has not been configured for sending mail"]; |
274 | 814a8d8f | Miltiadis Vasilakis | } else { |
275 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
276 | 814a8d8f | Miltiadis Vasilakis | NSString *filePath = [app cacheFilePathForHash:object.hash]; |
277 | 814a8d8f | Miltiadis Vasilakis | NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:filePath]]; |
278 | 814a8d8f | Miltiadis Vasilakis | |
279 | 814a8d8f | Miltiadis Vasilakis | MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init]; |
280 | 814a8d8f | Miltiadis Vasilakis | vc.mailComposeDelegate = self; |
281 | 814a8d8f | Miltiadis Vasilakis | [vc setSubject:object.name]; |
282 | 814a8d8f | Miltiadis Vasilakis | [vc addAttachmentData:data mimeType:object.contentType fileName:object.name]; |
283 | 814a8d8f | Miltiadis Vasilakis | [vc setMessageBody:@"" isHTML:NO]; |
284 | 814a8d8f | Miltiadis Vasilakis | if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) |
285 | 814a8d8f | Miltiadis Vasilakis | vc.modalPresentationStyle = UIModalPresentationPageSheet; |
286 | 814a8d8f | Miltiadis Vasilakis | [self presentModalViewController:vc animated:YES]; |
287 | 814a8d8f | Miltiadis Vasilakis | [vc release]; |
288 | 814a8d8f | Miltiadis Vasilakis | } |
289 | 814a8d8f | Miltiadis Vasilakis | } |
290 | 814a8d8f | Miltiadis Vasilakis | |
291 | b45fc7f8 | Miltiadis Vasilakis | - (void)updatePermissionsUserCatalog { |
292 | b45fc7f8 | Miltiadis Vasilakis | NSMutableArray *UUIDs = [NSMutableArray arrayWithCapacity:permissions.count]; |
293 | 3e581f16 | Miltiadis Vasilakis | for (NSString *user in permissions) { |
294 | b45fc7f8 | Miltiadis Vasilakis | NSRange rangeOfColumn = [user rangeOfString:@":"]; |
295 | b45fc7f8 | Miltiadis Vasilakis | NSString *UUID = (rangeOfColumn.location == NSNotFound) ? user : [user substringToIndex:rangeOfColumn.location]; |
296 | b45fc7f8 | Miltiadis Vasilakis | if (![UUID isEqualToString:@"*"]) { |
297 | b45fc7f8 | Miltiadis Vasilakis | [UUIDs addObject:UUID]; |
298 | b45fc7f8 | Miltiadis Vasilakis | } |
299 | b45fc7f8 | Miltiadis Vasilakis | } |
300 | b45fc7f8 | Miltiadis Vasilakis | if (UUIDs.count) { |
301 | b45fc7f8 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading permissions..." |
302 | b45fc7f8 | Miltiadis Vasilakis | andAddToView:self.view]; |
303 | b45fc7f8 | Miltiadis Vasilakis | [[self.account.manager userCatalogForDisplaynames:nil UUIDs:UUIDs] |
304 | b45fc7f8 | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
305 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
306 | b45fc7f8 | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:permissionsSection] withRowAnimation:UITableViewRowAnimationNone]; |
307 | b45fc7f8 | Miltiadis Vasilakis | } |
308 | b45fc7f8 | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
309 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
310 | 3e581f16 | Miltiadis Vasilakis | [self alert:@"Failed to translate sharing UUIDs." request:request]; |
311 | b45fc7f8 | Miltiadis Vasilakis | }]; |
312 | b45fc7f8 | Miltiadis Vasilakis | } |
313 | b45fc7f8 | Miltiadis Vasilakis | } |
314 | b45fc7f8 | Miltiadis Vasilakis | |
315 | cacaa443 | Miltiadis Vasilakis | #pragma mark - Actions |
316 | cacaa443 | Miltiadis Vasilakis | |
317 | cacaa443 | Miltiadis Vasilakis | - (void)reloadMetadataSection { |
318 | cacaa443 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading metadata..." |
319 | cacaa443 | Miltiadis Vasilakis | andAddToView:self.view]; |
320 | cacaa443 | Miltiadis Vasilakis | [[self.account.manager getObjectInfo:container object:object version:versionID] |
321 | cacaa443 | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
322 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
323 | cacaa443 | Miltiadis Vasilakis | object.metadata = [NSMutableDictionary dictionary]; |
324 | cacaa443 | Miltiadis Vasilakis | for (NSString *header in request.responseHeaders) { |
325 | cacaa443 | Miltiadis Vasilakis | NSString *metadataKey; |
326 | cacaa443 | Miltiadis Vasilakis | NSString *metadataValue; |
327 | cacaa443 | Miltiadis Vasilakis | if ([header rangeOfString:@"X-Object-Meta-"].location != NSNotFound) { |
328 | cacaa443 | Miltiadis Vasilakis | metadataKey = [NSString decodeFromPercentEscape:[header substringFromIndex:14]]; |
329 | cacaa443 | Miltiadis Vasilakis | metadataValue = [NSString decodeFromPercentEscape:[request.responseHeaders objectForKey:header]]; |
330 | cacaa443 | Miltiadis Vasilakis | [object.metadata setObject:metadataValue forKey:metadataKey]; |
331 | cacaa443 | Miltiadis Vasilakis | } |
332 | cacaa443 | Miltiadis Vasilakis | } |
333 | c2940e36 | Miltiadis Vasilakis | [self.tableView reloadData]; |
334 | b45fc7f8 | Miltiadis Vasilakis | [self updatePermissionsUserCatalog]; |
335 | cacaa443 | Miltiadis Vasilakis | } |
336 | cacaa443 | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
337 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
338 | cacaa443 | Miltiadis Vasilakis | [self alert:@"There was a problem retrieving the object's metadata." request:request]; |
339 | cacaa443 | Miltiadis Vasilakis | }]; |
340 | cacaa443 | Miltiadis Vasilakis | } |
341 | cacaa443 | Miltiadis Vasilakis | |
342 | 814a8d8f | Miltiadis Vasilakis | - (void)downloadFileForAction:(StorageObjectAction)action { |
343 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloading) |
344 | 814a8d8f | Miltiadis Vasilakis | return; |
345 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = YES; |
346 | 814a8d8f | Miltiadis Vasilakis | [downloadProgressView setProgress:0.0 animated:NO]; |
347 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
348 | 814a8d8f | Miltiadis Vasilakis | [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:kActions] |
349 | 814a8d8f | Miltiadis Vasilakis | atScrollPosition:UITableViewScrollPositionMiddle |
350 | 814a8d8f | Miltiadis Vasilakis | animated:YES]; |
351 | 814a8d8f | Miltiadis Vasilakis | NSMutableDictionary *requestUserInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:action] forKey:@"action"]; |
352 | 814a8d8f | Miltiadis Vasilakis | [[self.account.manager getObject:self.container object:self.object downloadProgressDelegate:self requestUserInfo:requestUserInfo version:versionID] |
353 | 814a8d8f | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
354 | 814a8d8f | Miltiadis Vasilakis | if (request.isCancelled) { |
355 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = NO; |
356 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
357 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
358 | 814a8d8f | Miltiadis Vasilakis | } else { |
359 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = YES; |
360 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
361 | 814a8d8f | Miltiadis Vasilakis | if ([self.navigationController.visibleViewController isEqual:self]) { |
362 | 814a8d8f | Miltiadis Vasilakis | if ([[request.userInfo objectForKey:@"action"] integerValue] == StorageObjectActionMailFile) { |
363 | 814a8d8f | Miltiadis Vasilakis | [self mailFile]; |
364 | 814a8d8f | Miltiadis Vasilakis | } else { |
365 | 814a8d8f | Miltiadis Vasilakis | [self openFile]; |
366 | 814a8d8f | Miltiadis Vasilakis | } |
367 | 814a8d8f | Miltiadis Vasilakis | } |
368 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
369 | 814a8d8f | Miltiadis Vasilakis | [self.folderViewController reloadData]; |
370 | 814a8d8f | Miltiadis Vasilakis | } |
371 | 814a8d8f | Miltiadis Vasilakis | } |
372 | 814a8d8f | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
373 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = NO; |
374 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
375 | 814a8d8f | Miltiadis Vasilakis | [self alert:@"File failed to download." request:request]; |
376 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
377 | 814a8d8f | Miltiadis Vasilakis | }]; |
378 | 814a8d8f | Miltiadis Vasilakis | } |
379 | 814a8d8f | Miltiadis Vasilakis | |
380 | cacaa443 | Miltiadis Vasilakis | #pragma mark - UITableViewDataSource |
381 | 700184fb | Miltiadis Vasilakis | |
382 | 700184fb | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
383 | 6d8123d2 | Miltiadis Vasilakis | int numberOfSections = 7; |
384 | 64929bae | Miltiadis Vasilakis | if (publicLinkSection < 0) |
385 | 64929bae | Miltiadis Vasilakis | numberOfSections--; |
386 | 64929bae | Miltiadis Vasilakis | if (permissionsSection < 0) |
387 | 64929bae | Miltiadis Vasilakis | numberOfSections--; |
388 | cacaa443 | Miltiadis Vasilakis | if (versionsSection < 0) |
389 | cacaa443 | Miltiadis Vasilakis | numberOfSections--; |
390 | cacaa443 | Miltiadis Vasilakis | if (deleteSection < 0) |
391 | cacaa443 | Miltiadis Vasilakis | numberOfSections--; |
392 | 64929bae | Miltiadis Vasilakis | |
393 | 64929bae | Miltiadis Vasilakis | return numberOfSections; |
394 | 700184fb | Miltiadis Vasilakis | } |
395 | 700184fb | Miltiadis Vasilakis | |
396 | 700184fb | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
397 | 700184fb | Miltiadis Vasilakis | if (section == kDetails) { |
398 | 1ab29d03 | Miltiadis Vasilakis | return (object.lastModifiedString ? 5: 4); |
399 | cacaa443 | Miltiadis Vasilakis | } else if (section == kActions) { |
400 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloaded) { |
401 | 814a8d8f | Miltiadis Vasilakis | return 3; |
402 | 814a8d8f | Miltiadis Vasilakis | } else if (fileDownloading) { |
403 | 814a8d8f | Miltiadis Vasilakis | return 4; |
404 | 814a8d8f | Miltiadis Vasilakis | } else { |
405 | 814a8d8f | Miltiadis Vasilakis | return 2; |
406 | 814a8d8f | Miltiadis Vasilakis | } |
407 | 700184fb | Miltiadis Vasilakis | } else if (section == kMetadata) { |
408 | 64929bae | Miltiadis Vasilakis | if (objectIsReadOnly) { |
409 | d17a05de | Miltiadis Vasilakis | return [object.metadata count]; |
410 | 64929bae | Miltiadis Vasilakis | } else { |
411 | b45fc7f8 | Miltiadis Vasilakis | return ([object.metadata count] + 1); |
412 | 64929bae | Miltiadis Vasilakis | } |
413 | 64929bae | Miltiadis Vasilakis | } else if (section == publicLinkSection) { |
414 | b45fc7f8 | Miltiadis Vasilakis | return (objectIsPublic ? 2 : 1); |
415 | 64929bae | Miltiadis Vasilakis | } else if (section == permissionsSection) { |
416 | 60731366 | Miltiadis Vasilakis | if (account.sharingAccount || objectIsReadOnly) { |
417 | b45fc7f8 | Miltiadis Vasilakis | return permissions.count; |
418 | 60731366 | Miltiadis Vasilakis | } else { |
419 | b45fc7f8 | Miltiadis Vasilakis | return (permissions.count + 1); |
420 | 60731366 | Miltiadis Vasilakis | } |
421 | 700184fb | Miltiadis Vasilakis | } else { |
422 | 700184fb | Miltiadis Vasilakis | return 1; |
423 | 700184fb | Miltiadis Vasilakis | } |
424 | 700184fb | Miltiadis Vasilakis | } |
425 | 700184fb | Miltiadis Vasilakis | |
426 | 700184fb | Miltiadis Vasilakis | - (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { |
427 | 700184fb | Miltiadis Vasilakis | CGFloat result = aTableView.rowHeight; |
428 | cacaa443 | Miltiadis Vasilakis | if ((indexPath.section == kDetails) && ((indexPath.row == 0) || (indexPath.row == 1))) { |
429 | cacaa443 | Miltiadis Vasilakis | NSString *text; |
430 | cacaa443 | Miltiadis Vasilakis | if (indexPath.row == 0) { |
431 | cacaa443 | Miltiadis Vasilakis | text = object.name; |
432 | 192b305e | Miltiadis Vasilakis | } else { |
433 | cacaa443 | Miltiadis Vasilakis | text = object.fullPath; |
434 | 700184fb | Miltiadis Vasilakis | } |
435 | cacaa443 | Miltiadis Vasilakis | result = 22.0 + [text sizeWithFont:[UIFont systemFontOfSize:18.0] |
436 | cacaa443 | Miltiadis Vasilakis | constrainedToSize:(([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ? |
437 | cacaa443 | Miltiadis Vasilakis | CGSizeMake(537.0, 9000.0) : |
438 | cacaa443 | Miltiadis Vasilakis | CGSizeMake(221.0, 9000.0)) |
439 | cacaa443 | Miltiadis Vasilakis | lineBreakMode:UILineBreakModeCharacterWrap].height; |
440 | cacaa443 | Miltiadis Vasilakis | } else if ((indexPath.section == publicLinkSection) && (indexPath.row == 1)) { |
441 | c91b5b28 | Miltiadis Vasilakis | NSURL *publicLinkURL = [account.provider.publicLinkURLPrefix URLByAppendingPathComponent: |
442 | cacaa443 | Miltiadis Vasilakis | [NSString encodeToPercentEscape:[self.object.publicURI substringFromIndex:1] |
443 | cacaa443 | Miltiadis Vasilakis | charactersToEncode:@"!*'();:@&=+$,?%#[]"]]; |
444 | cacaa443 | Miltiadis Vasilakis | result = 30.0 + [[publicLinkURL description] sizeWithFont:[UIFont systemFontOfSize:18.0] |
445 | cacaa443 | Miltiadis Vasilakis | constrainedToSize:(([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) ? |
446 | cacaa443 | Miltiadis Vasilakis | CGSizeMake(596.0, 9000.0) : |
447 | cacaa443 | Miltiadis Vasilakis | CGSizeMake(280.0, 9000.0)) |
448 | cacaa443 | Miltiadis Vasilakis | lineBreakMode:UILineBreakModeCharacterWrap].height; |
449 | 700184fb | Miltiadis Vasilakis | } |
450 | 700184fb | Miltiadis Vasilakis | return MAX(aTableView.rowHeight, result); |
451 | 700184fb | Miltiadis Vasilakis | } |
452 | 700184fb | Miltiadis Vasilakis | |
453 | 700184fb | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
454 | aa2cf4d7 | Miltiadis Vasilakis | if ((indexPath.section == publicLinkSection) && (indexPath.row == 1)) { |
455 | aa2cf4d7 | Miltiadis Vasilakis | static NSString *CellIdentifier = @"TextViewCell"; |
456 | aa2cf4d7 | Miltiadis Vasilakis | TextViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
457 | aa2cf4d7 | Miltiadis Vasilakis | if (cell == nil) { |
458 | aa2cf4d7 | Miltiadis Vasilakis | cell = [[[TextViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; |
459 | aa2cf4d7 | Miltiadis Vasilakis | cell.textView.frame = cell.contentView.frame; |
460 | 45f2fce6 | Miltiadis Vasilakis | |
461 | 221c2106 | Miltiadis Vasilakis | } |
462 | aa2cf4d7 | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
463 | aa2cf4d7 | Miltiadis Vasilakis | cell.textView.backgroundColor = [UIColor clearColor]; |
464 | aa2cf4d7 | Miltiadis Vasilakis | cell.textView.font = [UIFont systemFontOfSize:15.0]; |
465 | aa2cf4d7 | Miltiadis Vasilakis | cell.textView.dataDetectorTypes = UIDataDetectorTypeLink; |
466 | c91b5b28 | Miltiadis Vasilakis | cell.textView.text = [[account.provider.publicLinkURLPrefix URLByAppendingPathComponent: |
467 | cacaa443 | Miltiadis Vasilakis | [NSString encodeToPercentEscape:[self.object.publicURI substringFromIndex:1] |
468 | cacaa443 | Miltiadis Vasilakis | charactersToEncode:@"!*'();:@&=+$,?%#[]"]] description]; |
469 | aa2cf4d7 | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
470 | aa2cf4d7 | Miltiadis Vasilakis | cell.accessoryView = UITableViewCellAccessoryNone; |
471 | aa2cf4d7 | Miltiadis Vasilakis | return cell; |
472 | 221c2106 | Miltiadis Vasilakis | } |
473 | 700184fb | Miltiadis Vasilakis | |
474 | aa2cf4d7 | Miltiadis Vasilakis | if (indexPath.section == deleteSection) { |
475 | aa2cf4d7 | Miltiadis Vasilakis | static NSString *CellIdentifier = @"DeleteCell"; |
476 | cacaa443 | Miltiadis Vasilakis | UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
477 | aa2cf4d7 | Miltiadis Vasilakis | if (cell == nil) { |
478 | aa2cf4d7 | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; |
479 | aa2cf4d7 | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
480 | aa2cf4d7 | Miltiadis Vasilakis | cell.textLabel.textAlignment = UITextAlignmentCenter; |
481 | aa2cf4d7 | Miltiadis Vasilakis | cell.textLabel.text = @"Delete Object"; |
482 | aa2cf4d7 | Miltiadis Vasilakis | } |
483 | aa2cf4d7 | Miltiadis Vasilakis | return cell; |
484 | aa2cf4d7 | Miltiadis Vasilakis | } |
485 | aa2cf4d7 | Miltiadis Vasilakis | |
486 | aa2cf4d7 | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
487 | 700184fb | Miltiadis Vasilakis | UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
488 | 700184fb | Miltiadis Vasilakis | if (cell == nil) { |
489 | 700184fb | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; |
490 | 700184fb | Miltiadis Vasilakis | cell.textLabel.backgroundColor = [UIColor clearColor]; |
491 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.backgroundColor = [UIColor clearColor]; |
492 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; |
493 | 700184fb | Miltiadis Vasilakis | } |
494 | 64929bae | Miltiadis Vasilakis | cell.textLabel.textColor = [UIColor blackColor]; |
495 | 4b4b833e | Miltiadis Vasilakis | cell.detailTextLabel.numberOfLines = 0; |
496 | 689de104 | Miltiadis Vasilakis | if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { |
497 | 700184fb | Miltiadis Vasilakis | cell.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.8]; |
498 | 700184fb | Miltiadis Vasilakis | } |
499 | d17a05de | Miltiadis Vasilakis | cell.userInteractionEnabled = YES; |
500 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.textAlignment = UITextAlignmentRight; |
501 | 91869be8 | Miltiadis Vasilakis | cell.accessoryView = nil; |
502 | 91869be8 | Miltiadis Vasilakis | cell.textLabel.font = [UIFont boldSystemFontOfSize:17.0]; |
503 | 700184fb | Miltiadis Vasilakis | |
504 | 700184fb | Miltiadis Vasilakis | // Configure the cell... |
505 | 700184fb | Miltiadis Vasilakis | if (indexPath.section == kDetails) { |
506 | 700184fb | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
507 | 700184fb | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
508 | 700184fb | Miltiadis Vasilakis | cell.accessoryView = nil; |
509 | 700184fb | Miltiadis Vasilakis | if (indexPath.row == 0) { |
510 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Name"; |
511 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = object.name; |
512 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.row == 1) { |
513 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Full Path"; |
514 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = object.fullPath; |
515 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.row == 2) { |
516 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Size"; |
517 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = [object humanizedBytes]; |
518 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.row == 3) { |
519 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Type"; |
520 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = object.contentType; |
521 | 1ab29d03 | Miltiadis Vasilakis | } else if (indexPath.row == 4) { |
522 | 1ab29d03 | Miltiadis Vasilakis | cell.textLabel.text = @"Last Modified"; |
523 | 1ab29d03 | Miltiadis Vasilakis | cell.detailTextLabel.text = object.lastModifiedString; |
524 | 700184fb | Miltiadis Vasilakis | } |
525 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.section == kMetadata) { |
526 | d17a05de | Miltiadis Vasilakis | if (objectIsReadOnly) { |
527 | d17a05de | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
528 | d17a05de | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
529 | d17a05de | Miltiadis Vasilakis | cell.userInteractionEnabled = NO; |
530 | d17a05de | Miltiadis Vasilakis | } |
531 | d17a05de | Miltiadis Vasilakis | else { |
532 | d17a05de | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
533 | d17a05de | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
534 | d17a05de | Miltiadis Vasilakis | } |
535 | d17a05de | Miltiadis Vasilakis | |
536 | 700184fb | Miltiadis Vasilakis | cell.accessoryView = nil; |
537 | 700184fb | Miltiadis Vasilakis | if (indexPath.row == [object.metadata count]) { |
538 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Add Metadata"; |
539 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
540 | 700184fb | Miltiadis Vasilakis | } else { |
541 | 700184fb | Miltiadis Vasilakis | NSString *key = [[object.metadata allKeys] objectAtIndex:indexPath.row]; |
542 | 38d59b6c | Miltiadis Vasilakis | NSString *value = [object.metadata objectForKey:key]; |
543 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataKeyCellText = key; |
544 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataValueCellText = value; |
545 | 38d59b6c | Miltiadis Vasilakis | if ([metadataKeyCellText length] > maxMetadataViewableLength) { |
546 | 38d59b6c | Miltiadis Vasilakis | metadataKeyCellText = [metadataKeyCellText substringToIndex:(maxMetadataViewableLength - 3)]; |
547 | 38d59b6c | Miltiadis Vasilakis | metadataKeyCellText = [metadataKeyCellText stringByAppendingString:@"..."]; |
548 | 38d59b6c | Miltiadis Vasilakis | } |
549 | 38d59b6c | Miltiadis Vasilakis | if ([metadataValueCellText length] > maxMetadataViewableLength) { |
550 | 38d59b6c | Miltiadis Vasilakis | metadataValueCellText = [metadataValueCellText substringToIndex:(maxMetadataViewableLength - 3)]; |
551 | 38d59b6c | Miltiadis Vasilakis | metadataValueCellText = [metadataValueCellText stringByAppendingString:@"..."]; |
552 | 38d59b6c | Miltiadis Vasilakis | } |
553 | 38d59b6c | Miltiadis Vasilakis | |
554 | 38d59b6c | Miltiadis Vasilakis | cell.textLabel.text = metadataKeyCellText; |
555 | 38d59b6c | Miltiadis Vasilakis | cell.detailTextLabel.text = metadataValueCellText; |
556 | 700184fb | Miltiadis Vasilakis | } |
557 | 64929bae | Miltiadis Vasilakis | } else if (indexPath.section == publicLinkSection) { |
558 | 623869ee | Miltiadis Vasilakis | if (indexPath.row == 0) { |
559 | 623869ee | Miltiadis Vasilakis | cell.textLabel.text = @"Public URL"; |
560 | 623869ee | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
561 | 623869ee | Miltiadis Vasilakis | cell.accessoryView = objectIsPublicSwitch; |
562 | 623869ee | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
563 | 623869ee | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
564 | 623869ee | Miltiadis Vasilakis | } |
565 | 64929bae | Miltiadis Vasilakis | } else if (indexPath.section == permissionsSection) { |
566 | d17a05de | Miltiadis Vasilakis | if (account.sharingAccount) { |
567 | d17a05de | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
568 | d17a05de | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
569 | d17a05de | Miltiadis Vasilakis | cell.userInteractionEnabled = NO; |
570 | b45fc7f8 | Miltiadis Vasilakis | } else { |
571 | d17a05de | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
572 | d17a05de | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
573 | d17a05de | Miltiadis Vasilakis | } |
574 | 91869be8 | Miltiadis Vasilakis | cell.accessoryView = nil; |
575 | 45f2fce6 | Miltiadis Vasilakis | |
576 | b45fc7f8 | Miltiadis Vasilakis | if (indexPath.row == permissions.count) { |
577 | 4b4b833e | Miltiadis Vasilakis | cell.textLabel.text = @"Share"; |
578 | 91869be8 | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
579 | 4b4b833e | Miltiadis Vasilakis | } else { |
580 | b45fc7f8 | Miltiadis Vasilakis | NSString *user = [[[permissions allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] objectAtIndex:indexPath.row]; |
581 | b45fc7f8 | Miltiadis Vasilakis | NSRange rangeOfColumn = [user rangeOfString:@":"]; |
582 | b45fc7f8 | Miltiadis Vasilakis | NSString *UUID = (rangeOfColumn.location == NSNotFound) ? user : [user substringToIndex:rangeOfColumn.location]; |
583 | b45fc7f8 | Miltiadis Vasilakis | NSString *group = ((rangeOfColumn.location == NSNotFound) || (rangeOfColumn.location == user.length - 1)) ? nil : [user substringFromIndex:(rangeOfColumn.location + 1)]; |
584 | b45fc7f8 | Miltiadis Vasilakis | NSMutableString *displayname = [NSMutableString stringWithString:[account displaynameForUUID:UUID safe:YES]]; |
585 | b45fc7f8 | Miltiadis Vasilakis | if (group) { |
586 | b45fc7f8 | Miltiadis Vasilakis | [displayname appendFormat:@":%@", group]; |
587 | b45fc7f8 | Miltiadis Vasilakis | } |
588 | b45fc7f8 | Miltiadis Vasilakis | cell.textLabel.text = displayname; |
589 | b45fc7f8 | Miltiadis Vasilakis | |
590 | 4b4b833e | Miltiadis Vasilakis | cell.detailTextLabel.numberOfLines = 1; |
591 | 4b4b833e | Miltiadis Vasilakis | cell.detailTextLabel.lineBreakMode = UILineBreakModeTailTruncation; |
592 | b45fc7f8 | Miltiadis Vasilakis | cell.detailTextLabel.text = ([[permissions objectForKey:user] isEqualToString:@"write"] ? @"Read/Write" : @"Read Only"); |
593 | 91869be8 | Miltiadis Vasilakis | } |
594 | cacaa443 | Miltiadis Vasilakis | } else if (indexPath.section == kActions) { |
595 | 700184fb | Miltiadis Vasilakis | if (indexPath.row == 0) { |
596 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.text = @"Open File"; |
597 | 64929bae | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
598 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
599 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloading) { |
600 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.textColor = [UIColor grayColor]; |
601 | 814a8d8f | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
602 | 814a8d8f | Miltiadis Vasilakis | } else { |
603 | 814a8d8f | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
604 | 814a8d8f | Miltiadis Vasilakis | } |
605 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.row == 1) { |
606 | 700184fb | Miltiadis Vasilakis | cell.textLabel.text = @"Email File as Attachment"; |
607 | 700184fb | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
608 | 814a8d8f | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
609 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloading) { |
610 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.textColor = [UIColor grayColor]; |
611 | 814a8d8f | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
612 | 814a8d8f | Miltiadis Vasilakis | } else { |
613 | 814a8d8f | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
614 | 814a8d8f | Miltiadis Vasilakis | } |
615 | 814a8d8f | Miltiadis Vasilakis | } else if (indexPath.row == 2) { |
616 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloaded) { |
617 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.text = @"Remove from Cache"; |
618 | 814a8d8f | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
619 | 814a8d8f | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
620 | 814a8d8f | Miltiadis Vasilakis | } else if (fileDownloading) { |
621 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.text = @"Downloading"; |
622 | 814a8d8f | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
623 | 814a8d8f | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
624 | 814a8d8f | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
625 | 814a8d8f | Miltiadis Vasilakis | cell.accessoryView = downloadProgressView; |
626 | 814a8d8f | Miltiadis Vasilakis | } |
627 | 814a8d8f | Miltiadis Vasilakis | } else if (indexPath.row == 3) { |
628 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloading) { |
629 | 814a8d8f | Miltiadis Vasilakis | cell.textLabel.text = @"Cancel"; |
630 | 814a8d8f | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
631 | 814a8d8f | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
632 | 814a8d8f | Miltiadis Vasilakis | } |
633 | aa2cf4d7 | Miltiadis Vasilakis | } |
634 | 64929bae | Miltiadis Vasilakis | } else if (indexPath.section == versionsSection) { |
635 | 64929bae | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
636 | 64929bae | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
637 | 64929bae | Miltiadis Vasilakis | cell.textLabel.text = @"Versions"; |
638 | 64929bae | Miltiadis Vasilakis | cell.detailTextLabel.text = @""; |
639 | 700184fb | Miltiadis Vasilakis | } |
640 | 700184fb | Miltiadis Vasilakis | |
641 | 700184fb | Miltiadis Vasilakis | return cell; |
642 | 700184fb | Miltiadis Vasilakis | } |
643 | 700184fb | Miltiadis Vasilakis | |
644 | cacaa443 | Miltiadis Vasilakis | #pragma mark - UITableViewDelegate |
645 | 700184fb | Miltiadis Vasilakis | |
646 | 700184fb | Miltiadis Vasilakis | - (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
647 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.section == kMetadata) { |
648 | 38d59b6c | Miltiadis Vasilakis | EditMetadataViewController *vc = [[EditMetadataViewController alloc] initWithNibName:@"EditMetadataViewController" bundle:nil]; |
649 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataKey; |
650 | 38d59b6c | Miltiadis Vasilakis | NSString *metadataValue; |
651 | 38d59b6c | Miltiadis Vasilakis | |
652 | 38d59b6c | Miltiadis Vasilakis | if (indexPath.row == [self.object.metadata count]) { |
653 | 38d59b6c | Miltiadis Vasilakis | metadataKey = @""; |
654 | 38d59b6c | Miltiadis Vasilakis | metadataValue = @""; |
655 | 221c2106 | Miltiadis Vasilakis | vc.removeMetadataEnabled = FALSE; |
656 | 38d59b6c | Miltiadis Vasilakis | vc.navigationItem.title = @"Add Metadata"; |
657 | 60731366 | Miltiadis Vasilakis | } else { |
658 | 38d59b6c | Miltiadis Vasilakis | metadataKey = [[self.object.metadata allKeys] objectAtIndex:indexPath.row]; |
659 | 38d59b6c | Miltiadis Vasilakis | metadataValue = [self.object.metadata objectForKey:metadataKey]; |
660 | 221c2106 | Miltiadis Vasilakis | vc.removeMetadataEnabled = YES; |
661 | 38d59b6c | Miltiadis Vasilakis | vc.navigationItem.title = @"Edit Metadata"; |
662 | 38d59b6c | Miltiadis Vasilakis | } |
663 | 38d59b6c | Miltiadis Vasilakis | |
664 | 38d59b6c | Miltiadis Vasilakis | vc.metadataKey = metadataKey; |
665 | 38d59b6c | Miltiadis Vasilakis | vc.metadataValue = metadataValue; |
666 | 38d59b6c | Miltiadis Vasilakis | vc.account = account; |
667 | 38d59b6c | Miltiadis Vasilakis | vc.container = container; |
668 | 38d59b6c | Miltiadis Vasilakis | vc.object = object; |
669 | 38d59b6c | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
670 | 38d59b6c | Miltiadis Vasilakis | [vc release]; |
671 | 64929bae | Miltiadis Vasilakis | } else if (indexPath.section == permissionsSection) { |
672 | 91869be8 | Miltiadis Vasilakis | EditPermissionsViewController *vc = [[EditPermissionsViewController alloc] initWithNibName:@"EditPermissionsViewController" bundle:nil]; |
673 | 91869be8 | Miltiadis Vasilakis | NSString *user; |
674 | 91869be8 | Miltiadis Vasilakis | |
675 | b45fc7f8 | Miltiadis Vasilakis | if (indexPath.row == permissions.count) { |
676 | 91869be8 | Miltiadis Vasilakis | user = @""; |
677 | 54cb751a | Miltiadis Vasilakis | vc.removePermissionsEnabled = NO; |
678 | 3e581f16 | Miltiadis Vasilakis | vc.navigationItem.title = @"Add Permission"; |
679 | 60731366 | Miltiadis Vasilakis | } else { |
680 | b45fc7f8 | Miltiadis Vasilakis | user = [[[permissions allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] objectAtIndex:indexPath.row]; |
681 | 91869be8 | Miltiadis Vasilakis | NSString *userPermissions = [permissions objectForKey:user]; |
682 | b45fc7f8 | Miltiadis Vasilakis | if ([userPermissions rangeOfString:@"read"].location != NSNotFound) { |
683 | 91869be8 | Miltiadis Vasilakis | vc.readPermissionSelected = YES; |
684 | b45fc7f8 | Miltiadis Vasilakis | } else { |
685 | 91869be8 | Miltiadis Vasilakis | vc.readPermissionSelected = NO; |
686 | b45fc7f8 | Miltiadis Vasilakis | } |
687 | b45fc7f8 | Miltiadis Vasilakis | if ([userPermissions rangeOfString:@"write"].location != NSNotFound) { |
688 | 91869be8 | Miltiadis Vasilakis | vc.writePermissionSelected = YES; |
689 | b45fc7f8 | Miltiadis Vasilakis | } else { |
690 | 91869be8 | Miltiadis Vasilakis | vc.writePermissionSelected = NO; |
691 | b45fc7f8 | Miltiadis Vasilakis | } |
692 | 54cb751a | Miltiadis Vasilakis | vc.removePermissionsEnabled = YES; |
693 | 3e581f16 | Miltiadis Vasilakis | vc.navigationItem.title = @"Edit Permission"; |
694 | 91869be8 | Miltiadis Vasilakis | } |
695 | 91869be8 | Miltiadis Vasilakis | |
696 | b45fc7f8 | Miltiadis Vasilakis | vc.permissionUser = user; |
697 | 91869be8 | Miltiadis Vasilakis | vc.permissions = permissions; |
698 | 91869be8 | Miltiadis Vasilakis | vc.account = account; |
699 | 91869be8 | Miltiadis Vasilakis | vc.container = container; |
700 | 91869be8 | Miltiadis Vasilakis | vc.object = object; |
701 | d17a05de | Miltiadis Vasilakis | vc.folderViewController = folderViewController; |
702 | 91869be8 | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
703 | 91869be8 | Miltiadis Vasilakis | [vc release]; |
704 | cacaa443 | Miltiadis Vasilakis | } else if (indexPath.section == kActions) { |
705 | 814a8d8f | Miltiadis Vasilakis | if (indexPath.row == 0) { |
706 | 700184fb | Miltiadis Vasilakis | if (fileDownloaded) { |
707 | 814a8d8f | Miltiadis Vasilakis | [self openFile]; |
708 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
709 | 814a8d8f | Miltiadis Vasilakis | } else if (!fileDownloading) { |
710 | 814a8d8f | Miltiadis Vasilakis | [self downloadFileForAction:StorageObjectActionOpenFile]; |
711 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
712 | 814a8d8f | Miltiadis Vasilakis | } |
713 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.row == 1) { |
714 | 814a8d8f | Miltiadis Vasilakis | if (fileDownloaded) { |
715 | 814a8d8f | Miltiadis Vasilakis | [self mailFile]; |
716 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
717 | 814a8d8f | Miltiadis Vasilakis | } else if (!fileDownloading) { |
718 | 814a8d8f | Miltiadis Vasilakis | [self downloadFileForAction:StorageObjectActionMailFile]; |
719 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
720 | 700184fb | Miltiadis Vasilakis | } |
721 | 814a8d8f | Miltiadis Vasilakis | } else if ((indexPath.row == 2) && fileDownloaded) { |
722 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
723 | 814a8d8f | Miltiadis Vasilakis | BOOL removed = [app removeCacheObjectForHash:object.hash]; |
724 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
725 | 814a8d8f | Miltiadis Vasilakis | if (removed) { |
726 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = NO; |
727 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
728 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
729 | 814a8d8f | Miltiadis Vasilakis | } |
730 | 814a8d8f | Miltiadis Vasilakis | } else if ((indexPath.row == 3) && fileDownloading) { |
731 | 814a8d8f | Miltiadis Vasilakis | OpenStackAppDelegate *app = [[UIApplication sharedApplication] delegate]; |
732 | 814a8d8f | Miltiadis Vasilakis | OpenStackRequest *request = [app objectDownloadRequestForAccount:account container:container object:object]; |
733 | 814a8d8f | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
734 | 814a8d8f | Miltiadis Vasilakis | if (request) { |
735 | 814a8d8f | Miltiadis Vasilakis | request.downloadProgressDelegate = nil; |
736 | 814a8d8f | Miltiadis Vasilakis | [request cancel]; |
737 | 814a8d8f | Miltiadis Vasilakis | fileDownloaded = NO; |
738 | 814a8d8f | Miltiadis Vasilakis | fileDownloading = NO; |
739 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
740 | 30a43f47 | Miltiadis Vasilakis | } |
741 | 700184fb | Miltiadis Vasilakis | } |
742 | 700184fb | Miltiadis Vasilakis | } else if (indexPath.section == deleteSection) { |
743 | aa2cf4d7 | Miltiadis Vasilakis | UIActionSheet *deleteActionSheet = [[[UIActionSheet alloc] initWithTitle:@"Are you sure you want to delete this file? This operation cannot be undone." |
744 | aa2cf4d7 | Miltiadis Vasilakis | delegate:self |
745 | aa2cf4d7 | Miltiadis Vasilakis | cancelButtonTitle:@"Cancel" |
746 | aa2cf4d7 | Miltiadis Vasilakis | destructiveButtonTitle:@"Delete File" |
747 | aa2cf4d7 | Miltiadis Vasilakis | otherButtonTitles:nil] autorelease]; |
748 | 700184fb | Miltiadis Vasilakis | [deleteActionSheet showInView:self.view]; |
749 | 64929bae | Miltiadis Vasilakis | } else if (indexPath.section == versionsSection) { |
750 | 64929bae | Miltiadis Vasilakis | ObjectVersionsViewController *vc = [[ObjectVersionsViewController alloc] initWithNibName:@"ObjectVersionsViewController" bundle:nil]; |
751 | 64929bae | Miltiadis Vasilakis | vc.account = account; |
752 | 64929bae | Miltiadis Vasilakis | vc.container = container; |
753 | 64929bae | Miltiadis Vasilakis | vc.object = object; |
754 | 64929bae | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
755 | 64929bae | Miltiadis Vasilakis | [vc release]; |
756 | 700184fb | Miltiadis Vasilakis | } |
757 | 700184fb | Miltiadis Vasilakis | } |
758 | 700184fb | Miltiadis Vasilakis | |
759 | 700184fb | Miltiadis Vasilakis | - (void)setProgress:(float)newProgress { |
760 | 700184fb | Miltiadis Vasilakis | [downloadProgressView setProgress:newProgress animated:YES]; |
761 | 700184fb | Miltiadis Vasilakis | if (newProgress >= 1.0) { |
762 | 700184fb | Miltiadis Vasilakis | fileDownloading = NO; |
763 | 700184fb | Miltiadis Vasilakis | fileDownloaded = YES; |
764 | 814a8d8f | Miltiadis Vasilakis | [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:kActions] withRowAnimation:UITableViewRowAnimationNone]; |
765 | 700184fb | Miltiadis Vasilakis | } |
766 | 700184fb | Miltiadis Vasilakis | } |
767 | 700184fb | Miltiadis Vasilakis | |
768 | cacaa443 | Miltiadis Vasilakis | #pragma mark - UIDocumentInteractionControllerDelegate |
769 | 700184fb | Miltiadis Vasilakis | |
770 | 700184fb | Miltiadis Vasilakis | - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *) controller { |
771 | 700184fb | Miltiadis Vasilakis | return self.navigationController; |
772 | 700184fb | Miltiadis Vasilakis | } |
773 | 700184fb | Miltiadis Vasilakis | |
774 | cacaa443 | Miltiadis Vasilakis | #pragma mark - UIActionSheetDelegate |
775 | 700184fb | Miltiadis Vasilakis | |
776 | 700184fb | Miltiadis Vasilakis | - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { |
777 | aa2cf4d7 | Miltiadis Vasilakis | if (buttonIndex == 0) { |
778 | aa2cf4d7 | Miltiadis Vasilakis | // delete the file and pop out |
779 | aa2cf4d7 | Miltiadis Vasilakis | self.folderViewController.refreshButton.enabled = NO; |
780 | 60731366 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Deleting file..." |
781 | 60731366 | Miltiadis Vasilakis | andAddToView:self.view]; |
782 | aa2cf4d7 | Miltiadis Vasilakis | [[self.account.manager deleteObject:self.container object:self.object] |
783 | aa2cf4d7 | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
784 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
785 | 689de104 | Miltiadis Vasilakis | if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { |
786 | aa2cf4d7 | Miltiadis Vasilakis | [self.navigationController popViewControllerAnimated:YES]; |
787 | aa2cf4d7 | Miltiadis Vasilakis | if (account.shared) |
788 | aa2cf4d7 | Miltiadis Vasilakis | self.folderViewController.needsRefreshing = YES; |
789 | 689de104 | Miltiadis Vasilakis | } else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { |
790 | aa2cf4d7 | Miltiadis Vasilakis | self.folderViewController.selectedObjectViewController = nil; |
791 | aa2cf4d7 | Miltiadis Vasilakis | if (!account.shared) |
792 | aa2cf4d7 | Miltiadis Vasilakis | [self.folderViewController setDetailViewController]; |
793 | aa2cf4d7 | Miltiadis Vasilakis | else |
794 | aa2cf4d7 | Miltiadis Vasilakis | [self.folderViewController refreshButtonPressed:nil]; |
795 | 60731366 | Miltiadis Vasilakis | // self.folderViewController.refreshButton.enabled = YES; |
796 | 7db1712d | Miltiadis Vasilakis | } |
797 | 7be37a93 | Miltiadis Vasilakis | if (self.folder.objectsAndFoldersCount == 1) { |
798 | a20544e8 | Miltiadis Vasilakis | [self.folder removeObject:self.object]; |
799 | a20544e8 | Miltiadis Vasilakis | self.folderViewController.folder = self.folderViewController.folder; |
800 | aa2cf4d7 | Miltiadis Vasilakis | } else { |
801 | 7be37a93 | Miltiadis Vasilakis | [self.folderViewController deleteAnimatedObject:self.object]; |
802 | aa2cf4d7 | Miltiadis Vasilakis | } |
803 | 60731366 | Miltiadis Vasilakis | self.folderViewController.refreshButton.enabled = YES; |
804 | aa2cf4d7 | Miltiadis Vasilakis | } |
805 | aa2cf4d7 | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
806 | c2940e36 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
807 | a20544e8 | Miltiadis Vasilakis | [self alert:@"There was a problem deleting this file." request:request]; |
808 | 60731366 | Miltiadis Vasilakis | self.folderViewController.refreshButton.enabled = YES; |
809 | aa2cf4d7 | Miltiadis Vasilakis | }]; |
810 | 700184fb | Miltiadis Vasilakis | } |
811 | aa2cf4d7 | Miltiadis Vasilakis | NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:deleteSection]; |
812 | aa2cf4d7 | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
813 | 700184fb | Miltiadis Vasilakis | } |
814 | 700184fb | Miltiadis Vasilakis | |
815 | cacaa443 | Miltiadis Vasilakis | #pragma mark - MFMailComposeViewControllerDelegate |
816 | 700184fb | Miltiadis Vasilakis | |
817 | 700184fb | Miltiadis Vasilakis | // Dismisses the email composition interface when users tap Cancel or Send. |
818 | 814a8d8f | Miltiadis Vasilakis | - (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { |
819 | 700184fb | Miltiadis Vasilakis | [self dismissModalViewControllerAnimated:YES]; |
820 | 54fd5c36 | Miltiadis Vasilakis | } |
821 | 54fd5c36 | Miltiadis Vasilakis | |
822 | 700184fb | Miltiadis Vasilakis | @end |