Statistics
| Branch: | Tag: | Revision:

root / pithos-macos / PithosNode.m @ 7da4ebcc

History | View | Annotate | Download (4.7 kB)

1
//
2
//  PithosNode.m
3
//  pithos-macos
4
//
5
// Copyright 2011 GRNET S.A. All rights reserved.
6
//
7
// Redistribution and use in source and binary forms, with or
8
// without modification, are permitted provided that the following
9
// conditions are met:
10
// 
11
//   1. Redistributions of source code must retain the above
12
//      copyright notice, this list of conditions and the following
13
//      disclaimer.
14
// 
15
//   2. Redistributions in binary form must reproduce the above
16
//      copyright notice, this list of conditions and the following
17
//      disclaimer in the documentation and/or other materials
18
//      provided with the distribution.
19
// 
20
// THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27
// USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
// POSSIBILITY OF SUCH DAMAGE.
32
// 
33
// The views and conclusions contained in the software and
34
// documentation are those of the authors and should not be
35
// interpreted as representing official policies, either expressed
36
// or implied, of GRNET S.A.
37

    
38
#import "PithosNode.h"
39
#import "PithosNodeInfoController.h"
40
#import "ASIDownloadCache.h"
41
#import "ASIPithosRequest.h"
42

    
43
@implementation PithosNode
44
@synthesize forcedRefresh, parent, shared, sharingAccount, childrenUpdatedNotificationName, displayName, isLeafItem, icon;
45
@dynamic url, children, pithos, pithosAccount, pithosContainer, pithosObject;
46

    
47
#pragma mark -
48
#pragma mark Object Lifecycle
49

    
50
- (id)init {
51
    if ((self = [super init])) {
52
        freshness = PithosNodeStateRefreshNeeded;
53
        forcedRefresh = NO;
54
        shared = NO;
55
        isLeafItem = NO;
56
    }
57
    return self;
58
}
59

    
60
- (void)dealloc {
61
    [pithosNodeInfoController release];
62
    [sharingAccount release];
63
    [icon release];
64
    [displayName release];
65
    [childrenUpdatedNotificationName release];
66
    [newChildren release];
67
    [children release];
68
    [url release];
69
    [super dealloc];
70
}
71

    
72
- (BOOL)isEqual:(id)anObject {
73
    return ([anObject isKindOfClass:[self class]] && [((PithosNode *)anObject).url isEqual:self.url]);
74
}
75

    
76
- (NSUInteger)hash {
77
    return self.url.hash;
78
}
79

    
80
#pragma mark -
81
#pragma mark Properties
82

    
83
- (void)setShared:(BOOL)aShared {
84
    if (shared != aShared) {
85
        shared = aShared;
86
        [url release];
87
        url = nil;
88
    }
89
}
90

    
91
- (void)setSharingAccount:(NSString *)aSharingAccount {
92
    if (![sharingAccount isEqualToString:aSharingAccount]) {
93
        [sharingAccount release];
94
        sharingAccount = [aSharingAccount retain];
95
        [url release];
96
        url = nil;
97
    }
98
}
99

    
100
#pragma mark -
101
#pragma mark Actions
102

    
103
- (void)invalidateChildren {
104
    if (freshness == PithosNodeStateFresh)
105
        freshness = PithosNodeStateRefreshNeeded;
106
}
107

    
108
- (void)invalidateChildrenRecursive {    
109
    if (freshness == PithosNodeStateFresh) {
110
        for (PithosNode *child in children) {
111
            [child invalidateChildrenRecursive];
112
        }
113
        freshness = PithosNodeStateRefreshNeeded;
114
    }
115
}
116

    
117
- (void)refresh {
118
    [self invalidateChildren];
119
    self.children;
120
}
121

    
122
- (void)forceRefresh {
123
    forcedRefresh = YES;
124
    [self refresh];
125
}
126

    
127
- (void)showPithosNodeInfo:(id)sender {
128
    // Abstract method
129
}
130

    
131
- (void)pithosNodeInfoWillClose:(id)sender {
132
    if (pithosNodeInfoController) {
133
        [pithosNodeInfoController release];
134
        pithosNodeInfoController = nil;
135
    }
136
}
137

    
138
- (void)pithosNodeWillBeRemoved {
139
    if (pithosNodeInfoController) {
140
        pithosNodeInfoController.node = nil;
141
        [[pithosNodeInfoController window] close];
142
    }
143
    for (PithosNode *child in children) {
144
        [child pithosNodeWillBeRemoved];
145
    }
146
}
147

    
148
#pragma mark -
149
#pragma mark ASIHTTPRequestDelegate
150

    
151
- (void)performRequestFinishedDelegateInBackground:(ASIPithosRequest *)request {
152
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
153
        [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFinishSelector"]) withObject:request];
154
    });
155
}
156

    
157
- (void)performRequestFailedDelegateInBackground:(ASIPithosRequest *)request {
158
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
159
        [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFailSelector"]) withObject:request];
160
    });
161
}
162

    
163
@end