root / pithos-macos / PithosNode.m @ d4433f6f
History | View | Annotate | Download (5.5 kB)
1 | d8d08dc1 | Miltiadis Vasilakis | // |
---|---|---|---|
2 | d8d08dc1 | Miltiadis Vasilakis | // PithosNode.m |
3 | d8d08dc1 | Miltiadis Vasilakis | // pithos-macos |
4 | d8d08dc1 | Miltiadis Vasilakis | // |
5 | e5fdf4d9 | Miltiadis Vasilakis | // Copyright 2011 GRNET S.A. All rights reserved. |
6 | d8d08dc1 | Miltiadis Vasilakis | // |
7 | e5fdf4d9 | Miltiadis Vasilakis | // Redistribution and use in source and binary forms, with or |
8 | e5fdf4d9 | Miltiadis Vasilakis | // without modification, are permitted provided that the following |
9 | e5fdf4d9 | Miltiadis Vasilakis | // conditions are met: |
10 | e5fdf4d9 | Miltiadis Vasilakis | // |
11 | e5fdf4d9 | Miltiadis Vasilakis | // 1. Redistributions of source code must retain the above |
12 | e5fdf4d9 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
13 | e5fdf4d9 | Miltiadis Vasilakis | // disclaimer. |
14 | e5fdf4d9 | Miltiadis Vasilakis | // |
15 | e5fdf4d9 | Miltiadis Vasilakis | // 2. Redistributions in binary form must reproduce the above |
16 | e5fdf4d9 | Miltiadis Vasilakis | // copyright notice, this list of conditions and the following |
17 | e5fdf4d9 | Miltiadis Vasilakis | // disclaimer in the documentation and/or other materials |
18 | e5fdf4d9 | Miltiadis Vasilakis | // provided with the distribution. |
19 | e5fdf4d9 | Miltiadis Vasilakis | // |
20 | e5fdf4d9 | Miltiadis Vasilakis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
21 | e5fdf4d9 | Miltiadis Vasilakis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
22 | e5fdf4d9 | Miltiadis Vasilakis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
23 | e5fdf4d9 | Miltiadis Vasilakis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
24 | e5fdf4d9 | Miltiadis Vasilakis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
25 | e5fdf4d9 | Miltiadis Vasilakis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
26 | e5fdf4d9 | Miltiadis Vasilakis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
27 | e5fdf4d9 | Miltiadis Vasilakis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
28 | e5fdf4d9 | Miltiadis Vasilakis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 | e5fdf4d9 | Miltiadis Vasilakis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
30 | e5fdf4d9 | Miltiadis Vasilakis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
31 | e5fdf4d9 | Miltiadis Vasilakis | // POSSIBILITY OF SUCH DAMAGE. |
32 | e5fdf4d9 | Miltiadis Vasilakis | // |
33 | e5fdf4d9 | Miltiadis Vasilakis | // The views and conclusions contained in the software and |
34 | e5fdf4d9 | Miltiadis Vasilakis | // documentation are those of the authors and should not be |
35 | e5fdf4d9 | Miltiadis Vasilakis | // interpreted as representing official policies, either expressed |
36 | e5fdf4d9 | Miltiadis Vasilakis | // or implied, of GRNET S.A. |
37 | d8d08dc1 | Miltiadis Vasilakis | |
38 | d8d08dc1 | Miltiadis Vasilakis | #import "PithosNode.h" |
39 | 2d9996a2 | Miltiadis Vasilakis | #import "PithosNodeInfoController.h" |
40 | 90fadc45 | Miltiadis Vasilakis | #import "ASIDownloadCache.h" |
41 | 5f54c6be | Miltiadis Vasilakis | #import "ASIPithosRequest.h" |
42 | d8d08dc1 | Miltiadis Vasilakis | |
43 | d8d08dc1 | Miltiadis Vasilakis | @implementation PithosNode |
44 | d4433f6f | Miltiadis Vasilakis | @synthesize forcedRefresh, parent, shared, sharingAccount, childrenUpdatedNotificationName, |
45 | d4433f6f | Miltiadis Vasilakis | inheritChildrenUpdatedNotificationName, displayName, isLeafItem, icon; |
46 | 7da4ebcc | Miltiadis Vasilakis | @dynamic url, children, pithos, pithosAccount, pithosContainer, pithosObject; |
47 | e5fdf4d9 | Miltiadis Vasilakis | |
48 | e5fdf4d9 | Miltiadis Vasilakis | #pragma mark - |
49 | e5fdf4d9 | Miltiadis Vasilakis | #pragma mark Object Lifecycle |
50 | d8d08dc1 | Miltiadis Vasilakis | |
51 | e5fdf4d9 | Miltiadis Vasilakis | - (id)init { |
52 | f059e0e6 | Miltiadis Vasilakis | if ((self = [super init])) { |
53 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
54 | 90fadc45 | Miltiadis Vasilakis | forcedRefresh = NO; |
55 | 4ae10a2b | Miltiadis Vasilakis | shared = NO; |
56 | e5fdf4d9 | Miltiadis Vasilakis | isLeafItem = NO; |
57 | d4433f6f | Miltiadis Vasilakis | self.childrenUpdatedNotificationName = @"PithosNodeChildrenUpdated"; |
58 | d4433f6f | Miltiadis Vasilakis | inheritChildrenUpdatedNotificationName = NO; |
59 | d8d08dc1 | Miltiadis Vasilakis | } |
60 | d8d08dc1 | Miltiadis Vasilakis | return self; |
61 | d8d08dc1 | Miltiadis Vasilakis | } |
62 | d8d08dc1 | Miltiadis Vasilakis | |
63 | e5fdf4d9 | Miltiadis Vasilakis | - (void)dealloc { |
64 | 2d9996a2 | Miltiadis Vasilakis | [pithosNodeInfoController release]; |
65 | af3b9f06 | Miltiadis Vasilakis | [sharingAccount release]; |
66 | 155f0dfd | Miltiadis Vasilakis | [icon release]; |
67 | e5fdf4d9 | Miltiadis Vasilakis | [displayName release]; |
68 | 7da4ebcc | Miltiadis Vasilakis | [childrenUpdatedNotificationName release]; |
69 | 605c8932 | Miltiadis Vasilakis | [newChildren release]; |
70 | e5fdf4d9 | Miltiadis Vasilakis | [children release]; |
71 | e5fdf4d9 | Miltiadis Vasilakis | [url release]; |
72 | d8d08dc1 | Miltiadis Vasilakis | [super dealloc]; |
73 | d8d08dc1 | Miltiadis Vasilakis | } |
74 | d8d08dc1 | Miltiadis Vasilakis | |
75 | e5fdf4d9 | Miltiadis Vasilakis | - (BOOL)isEqual:(id)anObject { |
76 | 605c8932 | Miltiadis Vasilakis | return ([anObject isKindOfClass:[self class]] && [((PithosNode *)anObject).url isEqual:self.url]); |
77 | e5fdf4d9 | Miltiadis Vasilakis | } |
78 | e5fdf4d9 | Miltiadis Vasilakis | |
79 | e5fdf4d9 | Miltiadis Vasilakis | - (NSUInteger)hash { |
80 | e5fdf4d9 | Miltiadis Vasilakis | return self.url.hash; |
81 | e5fdf4d9 | Miltiadis Vasilakis | } |
82 | e5fdf4d9 | Miltiadis Vasilakis | |
83 | 2d9996a2 | Miltiadis Vasilakis | #pragma mark - |
84 | af3b9f06 | Miltiadis Vasilakis | #pragma mark Properties |
85 | af3b9f06 | Miltiadis Vasilakis | |
86 | af3b9f06 | Miltiadis Vasilakis | - (void)setShared:(BOOL)aShared { |
87 | af3b9f06 | Miltiadis Vasilakis | if (shared != aShared) { |
88 | af3b9f06 | Miltiadis Vasilakis | shared = aShared; |
89 | af3b9f06 | Miltiadis Vasilakis | [url release]; |
90 | af3b9f06 | Miltiadis Vasilakis | url = nil; |
91 | af3b9f06 | Miltiadis Vasilakis | } |
92 | af3b9f06 | Miltiadis Vasilakis | } |
93 | af3b9f06 | Miltiadis Vasilakis | |
94 | af3b9f06 | Miltiadis Vasilakis | - (void)setSharingAccount:(NSString *)aSharingAccount { |
95 | af3b9f06 | Miltiadis Vasilakis | if (![sharingAccount isEqualToString:aSharingAccount]) { |
96 | af3b9f06 | Miltiadis Vasilakis | [sharingAccount release]; |
97 | af3b9f06 | Miltiadis Vasilakis | sharingAccount = [aSharingAccount retain]; |
98 | af3b9f06 | Miltiadis Vasilakis | [url release]; |
99 | af3b9f06 | Miltiadis Vasilakis | url = nil; |
100 | af3b9f06 | Miltiadis Vasilakis | } |
101 | af3b9f06 | Miltiadis Vasilakis | } |
102 | af3b9f06 | Miltiadis Vasilakis | |
103 | af3b9f06 | Miltiadis Vasilakis | #pragma mark - |
104 | 2d9996a2 | Miltiadis Vasilakis | #pragma mark Actions |
105 | 2d9996a2 | Miltiadis Vasilakis | |
106 | e5fdf4d9 | Miltiadis Vasilakis | - (void)invalidateChildren { |
107 | 605c8932 | Miltiadis Vasilakis | if (freshness == PithosNodeStateFresh) |
108 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
109 | 605c8932 | Miltiadis Vasilakis | } |
110 | 605c8932 | Miltiadis Vasilakis | |
111 | 605c8932 | Miltiadis Vasilakis | - (void)invalidateChildrenRecursive { |
112 | 605c8932 | Miltiadis Vasilakis | if (freshness == PithosNodeStateFresh) { |
113 | 605c8932 | Miltiadis Vasilakis | for (PithosNode *child in children) { |
114 | 605c8932 | Miltiadis Vasilakis | [child invalidateChildrenRecursive]; |
115 | 605c8932 | Miltiadis Vasilakis | } |
116 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
117 | e5fdf4d9 | Miltiadis Vasilakis | } |
118 | e5fdf4d9 | Miltiadis Vasilakis | } |
119 | e5fdf4d9 | Miltiadis Vasilakis | |
120 | 4ae10a2b | Miltiadis Vasilakis | - (void)refresh { |
121 | 4ae10a2b | Miltiadis Vasilakis | [self invalidateChildren]; |
122 | 4ae10a2b | Miltiadis Vasilakis | self.children; |
123 | 4ae10a2b | Miltiadis Vasilakis | } |
124 | 4ae10a2b | Miltiadis Vasilakis | |
125 | 90fadc45 | Miltiadis Vasilakis | - (void)forceRefresh { |
126 | 90fadc45 | Miltiadis Vasilakis | forcedRefresh = YES; |
127 | 90fadc45 | Miltiadis Vasilakis | [self refresh]; |
128 | 90fadc45 | Miltiadis Vasilakis | } |
129 | 90fadc45 | Miltiadis Vasilakis | |
130 | d4433f6f | Miltiadis Vasilakis | - (void)postChildrenUpdatedNotificationName { |
131 | d4433f6f | Miltiadis Vasilakis | // Notify observers that children are updated |
132 | d4433f6f | Miltiadis Vasilakis | if (inheritChildrenUpdatedNotificationName) { |
133 | d4433f6f | Miltiadis Vasilakis | PithosNode *ancestor = self; |
134 | d4433f6f | Miltiadis Vasilakis | while (ancestor && ancestor.parent) { |
135 | d4433f6f | Miltiadis Vasilakis | ancestor = ancestor.parent; |
136 | d4433f6f | Miltiadis Vasilakis | } |
137 | d4433f6f | Miltiadis Vasilakis | if (ancestor && ancestor.childrenUpdatedNotificationName) { |
138 | d4433f6f | Miltiadis Vasilakis | [[NSNotificationCenter defaultCenter] postNotificationName:ancestor.childrenUpdatedNotificationName object:self]; |
139 | d4433f6f | Miltiadis Vasilakis | } |
140 | d4433f6f | Miltiadis Vasilakis | } else if (childrenUpdatedNotificationName) { |
141 | d4433f6f | Miltiadis Vasilakis | [[NSNotificationCenter defaultCenter] postNotificationName:childrenUpdatedNotificationName object:self]; |
142 | d4433f6f | Miltiadis Vasilakis | } |
143 | d4433f6f | Miltiadis Vasilakis | } |
144 | d4433f6f | Miltiadis Vasilakis | |
145 | 2d9996a2 | Miltiadis Vasilakis | - (void)showPithosNodeInfo:(id)sender { |
146 | 515cd8db | Miltiadis Vasilakis | // Abstract method |
147 | 2d9996a2 | Miltiadis Vasilakis | } |
148 | 2d9996a2 | Miltiadis Vasilakis | |
149 | 2d9996a2 | Miltiadis Vasilakis | - (void)pithosNodeInfoWillClose:(id)sender { |
150 | 2d9996a2 | Miltiadis Vasilakis | if (pithosNodeInfoController) { |
151 | 2d9996a2 | Miltiadis Vasilakis | [pithosNodeInfoController release]; |
152 | 2d9996a2 | Miltiadis Vasilakis | pithosNodeInfoController = nil; |
153 | 2d9996a2 | Miltiadis Vasilakis | } |
154 | 2d9996a2 | Miltiadis Vasilakis | } |
155 | 2d9996a2 | Miltiadis Vasilakis | |
156 | 6a9b9f40 | Miltiadis Vasilakis | - (void)pithosNodeWillBeRemoved { |
157 | 6a9b9f40 | Miltiadis Vasilakis | if (pithosNodeInfoController) { |
158 | 6a9b9f40 | Miltiadis Vasilakis | pithosNodeInfoController.node = nil; |
159 | 6a9b9f40 | Miltiadis Vasilakis | [[pithosNodeInfoController window] close]; |
160 | 6a9b9f40 | Miltiadis Vasilakis | } |
161 | 6a9b9f40 | Miltiadis Vasilakis | for (PithosNode *child in children) { |
162 | 6a9b9f40 | Miltiadis Vasilakis | [child pithosNodeWillBeRemoved]; |
163 | 6a9b9f40 | Miltiadis Vasilakis | } |
164 | 6a9b9f40 | Miltiadis Vasilakis | } |
165 | 6a9b9f40 | Miltiadis Vasilakis | |
166 | 5f54c6be | Miltiadis Vasilakis | #pragma mark - |
167 | 5f54c6be | Miltiadis Vasilakis | #pragma mark ASIHTTPRequestDelegate |
168 | 5f54c6be | Miltiadis Vasilakis | |
169 | 5f54c6be | Miltiadis Vasilakis | - (void)performRequestFinishedDelegateInBackground:(ASIPithosRequest *)request { |
170 | 5f54c6be | Miltiadis Vasilakis | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
171 | 5f54c6be | Miltiadis Vasilakis | [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFinishSelector"]) withObject:request]; |
172 | 5f54c6be | Miltiadis Vasilakis | }); |
173 | 5f54c6be | Miltiadis Vasilakis | } |
174 | 5f54c6be | Miltiadis Vasilakis | |
175 | 5f54c6be | Miltiadis Vasilakis | - (void)performRequestFailedDelegateInBackground:(ASIPithosRequest *)request { |
176 | 5f54c6be | Miltiadis Vasilakis | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
177 | 5f54c6be | Miltiadis Vasilakis | [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFailSelector"]) withObject:request]; |
178 | 5f54c6be | Miltiadis Vasilakis | }); |
179 | 5f54c6be | Miltiadis Vasilakis | } |
180 | 5f54c6be | Miltiadis Vasilakis | |
181 | e5fdf4d9 | Miltiadis Vasilakis | @end |