Statistics
| Branch: | Tag: | Revision:

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