root / pithos-macos / PithosNode.m @ b801f2fc
History | View | Annotate | Download (4.6 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 | 90fadc45 | Miltiadis Vasilakis | @synthesize forcedRefresh, parent, shared, sharingAccount, displayName, isLeafItem, icon; |
45 | 4ae10a2b | Miltiadis Vasilakis | @dynamic url, children, pithosContainer, pithosObject; |
46 | e5fdf4d9 | Miltiadis Vasilakis | |
47 | e5fdf4d9 | Miltiadis Vasilakis | #pragma mark - |
48 | e5fdf4d9 | Miltiadis Vasilakis | #pragma mark Object Lifecycle |
49 | d8d08dc1 | Miltiadis Vasilakis | |
50 | e5fdf4d9 | Miltiadis Vasilakis | - (id)init { |
51 | f059e0e6 | Miltiadis Vasilakis | if ((self = [super init])) { |
52 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
53 | 90fadc45 | Miltiadis Vasilakis | forcedRefresh = NO; |
54 | 4ae10a2b | Miltiadis Vasilakis | shared = NO; |
55 | e5fdf4d9 | Miltiadis Vasilakis | isLeafItem = NO; |
56 | d8d08dc1 | Miltiadis Vasilakis | } |
57 | d8d08dc1 | Miltiadis Vasilakis | return self; |
58 | d8d08dc1 | Miltiadis Vasilakis | } |
59 | d8d08dc1 | Miltiadis Vasilakis | |
60 | e5fdf4d9 | Miltiadis Vasilakis | - (void)dealloc { |
61 | 2d9996a2 | Miltiadis Vasilakis | [pithosNodeInfoController release]; |
62 | af3b9f06 | Miltiadis Vasilakis | [sharingAccount release]; |
63 | 155f0dfd | Miltiadis Vasilakis | [icon release]; |
64 | e5fdf4d9 | Miltiadis Vasilakis | [displayName release]; |
65 | 605c8932 | Miltiadis Vasilakis | [newChildren release]; |
66 | e5fdf4d9 | Miltiadis Vasilakis | [children release]; |
67 | e5fdf4d9 | Miltiadis Vasilakis | [url release]; |
68 | d8d08dc1 | Miltiadis Vasilakis | [super dealloc]; |
69 | d8d08dc1 | Miltiadis Vasilakis | } |
70 | d8d08dc1 | Miltiadis Vasilakis | |
71 | e5fdf4d9 | Miltiadis Vasilakis | - (BOOL)isEqual:(id)anObject { |
72 | 605c8932 | Miltiadis Vasilakis | return ([anObject isKindOfClass:[self class]] && [((PithosNode *)anObject).url isEqual:self.url]); |
73 | e5fdf4d9 | Miltiadis Vasilakis | } |
74 | e5fdf4d9 | Miltiadis Vasilakis | |
75 | e5fdf4d9 | Miltiadis Vasilakis | - (NSUInteger)hash { |
76 | e5fdf4d9 | Miltiadis Vasilakis | return self.url.hash; |
77 | e5fdf4d9 | Miltiadis Vasilakis | } |
78 | e5fdf4d9 | Miltiadis Vasilakis | |
79 | 2d9996a2 | Miltiadis Vasilakis | #pragma mark - |
80 | af3b9f06 | Miltiadis Vasilakis | #pragma mark Properties |
81 | af3b9f06 | Miltiadis Vasilakis | |
82 | af3b9f06 | Miltiadis Vasilakis | - (void)setShared:(BOOL)aShared { |
83 | af3b9f06 | Miltiadis Vasilakis | if (shared != aShared) { |
84 | af3b9f06 | Miltiadis Vasilakis | shared = aShared; |
85 | af3b9f06 | Miltiadis Vasilakis | [url release]; |
86 | af3b9f06 | Miltiadis Vasilakis | url = nil; |
87 | af3b9f06 | Miltiadis Vasilakis | } |
88 | af3b9f06 | Miltiadis Vasilakis | } |
89 | af3b9f06 | Miltiadis Vasilakis | |
90 | af3b9f06 | Miltiadis Vasilakis | - (void)setSharingAccount:(NSString *)aSharingAccount { |
91 | af3b9f06 | Miltiadis Vasilakis | if (![sharingAccount isEqualToString:aSharingAccount]) { |
92 | af3b9f06 | Miltiadis Vasilakis | [sharingAccount release]; |
93 | af3b9f06 | Miltiadis Vasilakis | sharingAccount = [aSharingAccount retain]; |
94 | af3b9f06 | Miltiadis Vasilakis | [url release]; |
95 | af3b9f06 | Miltiadis Vasilakis | url = nil; |
96 | af3b9f06 | Miltiadis Vasilakis | } |
97 | af3b9f06 | Miltiadis Vasilakis | } |
98 | af3b9f06 | Miltiadis Vasilakis | |
99 | af3b9f06 | Miltiadis Vasilakis | #pragma mark - |
100 | 2d9996a2 | Miltiadis Vasilakis | #pragma mark Actions |
101 | 2d9996a2 | Miltiadis Vasilakis | |
102 | e5fdf4d9 | Miltiadis Vasilakis | - (void)invalidateChildren { |
103 | 605c8932 | Miltiadis Vasilakis | if (freshness == PithosNodeStateFresh) |
104 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
105 | 605c8932 | Miltiadis Vasilakis | } |
106 | 605c8932 | Miltiadis Vasilakis | |
107 | 605c8932 | Miltiadis Vasilakis | - (void)invalidateChildrenRecursive { |
108 | 605c8932 | Miltiadis Vasilakis | if (freshness == PithosNodeStateFresh) { |
109 | 605c8932 | Miltiadis Vasilakis | for (PithosNode *child in children) { |
110 | 605c8932 | Miltiadis Vasilakis | [child invalidateChildrenRecursive]; |
111 | 605c8932 | Miltiadis Vasilakis | } |
112 | 605c8932 | Miltiadis Vasilakis | freshness = PithosNodeStateRefreshNeeded; |
113 | e5fdf4d9 | Miltiadis Vasilakis | } |
114 | e5fdf4d9 | Miltiadis Vasilakis | } |
115 | e5fdf4d9 | Miltiadis Vasilakis | |
116 | 4ae10a2b | Miltiadis Vasilakis | - (void)refresh { |
117 | 4ae10a2b | Miltiadis Vasilakis | [self invalidateChildren]; |
118 | 4ae10a2b | Miltiadis Vasilakis | self.children; |
119 | 4ae10a2b | Miltiadis Vasilakis | } |
120 | 4ae10a2b | Miltiadis Vasilakis | |
121 | 90fadc45 | Miltiadis Vasilakis | - (void)forceRefresh { |
122 | 90fadc45 | Miltiadis Vasilakis | forcedRefresh = YES; |
123 | 90fadc45 | Miltiadis Vasilakis | [self refresh]; |
124 | 90fadc45 | Miltiadis Vasilakis | } |
125 | 90fadc45 | Miltiadis Vasilakis | |
126 | 2d9996a2 | Miltiadis Vasilakis | - (void)showPithosNodeInfo:(id)sender { |
127 | 515cd8db | Miltiadis Vasilakis | // Abstract method |
128 | 2d9996a2 | Miltiadis Vasilakis | } |
129 | 2d9996a2 | Miltiadis Vasilakis | |
130 | 2d9996a2 | Miltiadis Vasilakis | - (void)pithosNodeInfoWillClose:(id)sender { |
131 | 2d9996a2 | Miltiadis Vasilakis | if (pithosNodeInfoController) { |
132 | 2d9996a2 | Miltiadis Vasilakis | [pithosNodeInfoController release]; |
133 | 2d9996a2 | Miltiadis Vasilakis | pithosNodeInfoController = nil; |
134 | 2d9996a2 | Miltiadis Vasilakis | } |
135 | 2d9996a2 | Miltiadis Vasilakis | } |
136 | 2d9996a2 | Miltiadis Vasilakis | |
137 | 6a9b9f40 | Miltiadis Vasilakis | - (void)pithosNodeWillBeRemoved { |
138 | 6a9b9f40 | Miltiadis Vasilakis | if (pithosNodeInfoController) { |
139 | 6a9b9f40 | Miltiadis Vasilakis | pithosNodeInfoController.node = nil; |
140 | 6a9b9f40 | Miltiadis Vasilakis | [[pithosNodeInfoController window] close]; |
141 | 6a9b9f40 | Miltiadis Vasilakis | } |
142 | 6a9b9f40 | Miltiadis Vasilakis | for (PithosNode *child in children) { |
143 | 6a9b9f40 | Miltiadis Vasilakis | [child pithosNodeWillBeRemoved]; |
144 | 6a9b9f40 | Miltiadis Vasilakis | } |
145 | 6a9b9f40 | Miltiadis Vasilakis | } |
146 | 6a9b9f40 | Miltiadis Vasilakis | |
147 | 5f54c6be | Miltiadis Vasilakis | #pragma mark - |
148 | 5f54c6be | Miltiadis Vasilakis | #pragma mark ASIHTTPRequestDelegate |
149 | 5f54c6be | Miltiadis Vasilakis | |
150 | 5f54c6be | Miltiadis Vasilakis | - (void)performRequestFinishedDelegateInBackground:(ASIPithosRequest *)request { |
151 | 5f54c6be | Miltiadis Vasilakis | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
152 | 5f54c6be | Miltiadis Vasilakis | [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFinishSelector"]) withObject:request]; |
153 | 5f54c6be | Miltiadis Vasilakis | }); |
154 | 5f54c6be | Miltiadis Vasilakis | } |
155 | 5f54c6be | Miltiadis Vasilakis | |
156 | 5f54c6be | Miltiadis Vasilakis | - (void)performRequestFailedDelegateInBackground:(ASIPithosRequest *)request { |
157 | 5f54c6be | Miltiadis Vasilakis | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ |
158 | 5f54c6be | Miltiadis Vasilakis | [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFailSelector"]) withObject:request]; |
159 | 5f54c6be | Miltiadis Vasilakis | }); |
160 | 5f54c6be | Miltiadis Vasilakis | } |
161 | 5f54c6be | Miltiadis Vasilakis | |
162 | e5fdf4d9 | Miltiadis Vasilakis | @end |