root / Classes / ObjectVersionsViewController.m @ ea3a6bba
History | View | Annotate | Download (6.8 kB)
1 | 64929bae | Miltiadis Vasilakis | // |
---|---|---|---|
2 | 64929bae | Miltiadis Vasilakis | // ObjectVersionsViewController.m |
3 | 64929bae | Miltiadis Vasilakis | // pithos-ios |
4 | 64929bae | Miltiadis Vasilakis | // |
5 | ea3a6bba | Miltiadis Vasilakis | // Copyright 2011-2012 GRNET S.A. All rights reserved. |
6 | 64929bae | Miltiadis Vasilakis | // |
7 | 64929bae | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | 64929bae | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | 64929bae | Miltiadis Vasilakis | // conditions are met: |
10 | 64929bae | Miltiadis Vasilakis | // |
11 | 64929bae | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | 64929bae | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | 64929bae | Miltiadis Vasilakis | // disclaimer. |
14 | 64929bae | Miltiadis Vasilakis | // |
15 | 64929bae | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | 64929bae | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | 64929bae | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | 64929bae | Miltiadis Vasilakis | // provided with the distribution. |
19 | 64929bae | Miltiadis Vasilakis | // |
20 | 64929bae | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | 64929bae | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | 64929bae | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | 64929bae | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | 64929bae | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | 64929bae | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | 64929bae | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | 64929bae | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | 64929bae | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | 64929bae | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | 64929bae | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | 64929bae | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | 64929bae | Miltiadis Vasilakis | // |
33 | 64929bae | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | 64929bae | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | 64929bae | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | 64929bae | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | 64929bae | Miltiadis Vasilakis | |
38 | 64929bae | Miltiadis Vasilakis | #import "ObjectVersionsViewController.h" |
39 | 64929bae | Miltiadis Vasilakis | #import "StorageObjectViewController.h" |
40 | 64929bae | Miltiadis Vasilakis | #import "OpenStackAccount.h" |
41 | 64929bae | Miltiadis Vasilakis | #import "OpenStackRequest.h" |
42 | 64929bae | Miltiadis Vasilakis | #import "AccountManager.h" |
43 | 64929bae | Miltiadis Vasilakis | #import "APICallback.h" |
44 | 64929bae | Miltiadis Vasilakis | #import "JSON.h" |
45 | 64929bae | Miltiadis Vasilakis | #import "ActivityIndicatorView.h" |
46 | 64929bae | Miltiadis Vasilakis | #import "UIViewController+Conveniences.h" |
47 | 64929bae | Miltiadis Vasilakis | #import "StorageObject.h" |
48 | 64929bae | Miltiadis Vasilakis | |
49 | 64929bae | Miltiadis Vasilakis | @implementation ObjectVersionsViewController |
50 | 64929bae | Miltiadis Vasilakis | |
51 | f474d3f4 | Miltiadis Vasilakis | @synthesize versions, account, container, object; |
52 | 64929bae | Miltiadis Vasilakis | |
53 | 64929bae | Miltiadis Vasilakis | #pragma mark - View lifecycle |
54 | 64929bae | Miltiadis Vasilakis | |
55 | 64929bae | Miltiadis Vasilakis | - (void)viewDidLoad { |
56 | 64929bae | Miltiadis Vasilakis | [super viewDidLoad]; |
57 | 64929bae | Miltiadis Vasilakis | self.navigationItem.title = @"Versions"; |
58 | 64929bae | Miltiadis Vasilakis | self.versions = [NSMutableArray array]; |
59 | 64929bae | Miltiadis Vasilakis | versionsLoaded = NO; |
60 | 64929bae | Miltiadis Vasilakis | |
61 | 60731366 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading..." |
62 | 60731366 | Miltiadis Vasilakis | andAddToView:self.view]; |
63 | 7446ae64 | Miltiadis Vasilakis | [[self.account.manager getObjectVersionsList:container object:object] |
64 | 64929bae | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
65 | 7446ae64 | Miltiadis Vasilakis | [versions addObjectsFromArray:[request versions]]; |
66 | 7446ae64 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
67 | 64929bae | Miltiadis Vasilakis | versionsLoaded = YES; |
68 | 64929bae | Miltiadis Vasilakis | [self.tableView reloadData]; |
69 | 64929bae | Miltiadis Vasilakis | } |
70 | 64929bae | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
71 | 7446ae64 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
72 | 0767143f | Miltiadis Vasilakis | [self alert:@"Couldn't get versions from server." request:request]; |
73 | 64929bae | Miltiadis Vasilakis | }]; |
74 | 64929bae | Miltiadis Vasilakis | } |
75 | 64929bae | Miltiadis Vasilakis | |
76 | 64929bae | Miltiadis Vasilakis | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { |
77 | 689de104 | Miltiadis Vasilakis | return ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) || (toInterfaceOrientation == UIInterfaceOrientationPortrait); |
78 | 64929bae | Miltiadis Vasilakis | } |
79 | 64929bae | Miltiadis Vasilakis | |
80 | 60731366 | Miltiadis Vasilakis | #pragma mark - Memory management |
81 | 64929bae | Miltiadis Vasilakis | |
82 | 64929bae | Miltiadis Vasilakis | - (void)dealloc { |
83 | 64929bae | Miltiadis Vasilakis | [account release]; |
84 | 64929bae | Miltiadis Vasilakis | [container release]; |
85 | 64929bae | Miltiadis Vasilakis | [object release]; |
86 | 64929bae | Miltiadis Vasilakis | [versions release]; |
87 | 64929bae | Miltiadis Vasilakis | [super dealloc]; |
88 | 64929bae | Miltiadis Vasilakis | } |
89 | 64929bae | Miltiadis Vasilakis | |
90 | 64929bae | Miltiadis Vasilakis | #pragma mark - Table view data source |
91 | 64929bae | Miltiadis Vasilakis | |
92 | 64929bae | Miltiadis Vasilakis | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
93 | 64929bae | Miltiadis Vasilakis | return 1; |
94 | 64929bae | Miltiadis Vasilakis | } |
95 | 64929bae | Miltiadis Vasilakis | |
96 | 64929bae | Miltiadis Vasilakis | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
97 | 64929bae | Miltiadis Vasilakis | if (!versionsLoaded) |
98 | 64929bae | Miltiadis Vasilakis | return 0; |
99 | 64929bae | Miltiadis Vasilakis | else |
100 | 64929bae | Miltiadis Vasilakis | return MAX(1, versions.count); |
101 | 64929bae | Miltiadis Vasilakis | } |
102 | 64929bae | Miltiadis Vasilakis | |
103 | 64929bae | Miltiadis Vasilakis | - (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
104 | 64929bae | Miltiadis Vasilakis | static NSString *CellIdentifier = @"Cell"; |
105 | 64929bae | Miltiadis Vasilakis | |
106 | 64929bae | Miltiadis Vasilakis | UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; |
107 | 64929bae | Miltiadis Vasilakis | if (cell == nil) { |
108 | 64929bae | Miltiadis Vasilakis | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; |
109 | 64929bae | Miltiadis Vasilakis | } |
110 | 64929bae | Miltiadis Vasilakis | cell.userInteractionEnabled = YES; |
111 | 64929bae | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
112 | 64929bae | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleBlue; |
113 | 64929bae | Miltiadis Vasilakis | if (versions.count == 0 || !versions) { |
114 | 64929bae | Miltiadis Vasilakis | cell.textLabel.text = @"No previous versions available"; |
115 | 64929bae | Miltiadis Vasilakis | cell.userInteractionEnabled = NO; |
116 | 64929bae | Miltiadis Vasilakis | cell.accessoryType = UITableViewCellAccessoryNone; |
117 | 64929bae | Miltiadis Vasilakis | cell.selectionStyle = UITableViewCellSelectionStyleNone; |
118 | 64929bae | Miltiadis Vasilakis | } else { |
119 | 64929bae | Miltiadis Vasilakis | NSDictionary *versionDetails = [versions objectAtIndex:indexPath.row]; |
120 | 64929bae | Miltiadis Vasilakis | cell.textLabel.text = [[versionDetails objectForKey:@"versionID"] description]; |
121 | 64929bae | Miltiadis Vasilakis | NSString *dateString = [NSDateFormatter localizedStringFromDate:[versionDetails objectForKey:@"versionDate"] |
122 | 64929bae | Miltiadis Vasilakis | dateStyle:NSDateFormatterMediumStyle |
123 | 64929bae | Miltiadis Vasilakis | timeStyle:NSDateFormatterMediumStyle]; |
124 | 64929bae | Miltiadis Vasilakis | cell.detailTextLabel.text = dateString; |
125 | 64929bae | Miltiadis Vasilakis | } |
126 | 64929bae | Miltiadis Vasilakis | |
127 | 64929bae | Miltiadis Vasilakis | return cell; |
128 | 64929bae | Miltiadis Vasilakis | } |
129 | 64929bae | Miltiadis Vasilakis | |
130 | 64929bae | Miltiadis Vasilakis | #pragma mark - Table view delegate |
131 | 64929bae | Miltiadis Vasilakis | |
132 | 64929bae | Miltiadis Vasilakis | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
133 | 60731366 | Miltiadis Vasilakis | __block ActivityIndicatorView *activityIndicatorView = [ActivityIndicatorView activityIndicatorViewWithText:@"Loading..." |
134 | 60731366 | Miltiadis Vasilakis | andAddToView:self.view]; |
135 | 64929bae | Miltiadis Vasilakis | NSDictionary *versionDetails = [versions objectAtIndex:indexPath.row]; |
136 | 64929bae | Miltiadis Vasilakis | NSString *versionID = [[versionDetails objectForKey:@"versionID"] description]; |
137 | 64929bae | Miltiadis Vasilakis | [[self.account.manager getObjectInfo:container object:object version:versionID] |
138 | 64929bae | Miltiadis Vasilakis | success:^(OpenStackRequest *request) { |
139 | 7446ae64 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
140 | 64929bae | Miltiadis Vasilakis | StorageObject *versionedObject = [[[StorageObject alloc] init] autorelease]; |
141 | 64929bae | Miltiadis Vasilakis | versionedObject.name = object.name; |
142 | 64929bae | Miltiadis Vasilakis | versionedObject.fullPath = object.fullPath; |
143 | 64929bae | Miltiadis Vasilakis | [versionedObject setPropertiesfromResponseHeaders:request.responseHeaders]; |
144 | 64929bae | Miltiadis Vasilakis | StorageObjectViewController *vc = [[StorageObjectViewController alloc] initWithNibName:@"StorageObjectViewController" bundle:nil]; |
145 | 64929bae | Miltiadis Vasilakis | vc.objectIsReadOnly = YES; |
146 | 64929bae | Miltiadis Vasilakis | vc.account = account; |
147 | 64929bae | Miltiadis Vasilakis | vc.container = container; |
148 | 64929bae | Miltiadis Vasilakis | vc.object = versionedObject; |
149 | 64929bae | Miltiadis Vasilakis | vc.versionID = versionID; |
150 | 64929bae | Miltiadis Vasilakis | [self.navigationController pushViewController:vc animated:YES]; |
151 | 64929bae | Miltiadis Vasilakis | [vc release]; |
152 | 64929bae | Miltiadis Vasilakis | [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
153 | 64929bae | Miltiadis Vasilakis | } |
154 | 64929bae | Miltiadis Vasilakis | failure:^(OpenStackRequest *request) { |
155 | 7446ae64 | Miltiadis Vasilakis | [activityIndicatorView stopAnimatingAndRemoveFromSuperview]; |
156 | 64929bae | Miltiadis Vasilakis | [self alert:[NSString stringWithFormat:@"Failed to get file info for version: %@", versionID] request:request]; |
157 | 64929bae | Miltiadis Vasilakis | }]; |
158 | 64929bae | Miltiadis Vasilakis | } |
159 | 64929bae | Miltiadis Vasilakis | |
160 | 64929bae | Miltiadis Vasilakis | @end |