// or implied, of GRNET S.A.
#import "PithosNode.h"
+#import "PithosNodeInfoController.h"
+#import "ASIDownloadCache.h"
+#import "ASIPithosRequest.h"
@implementation PithosNode
-@dynamic url, children, displayName, icon, kind, size, modified, modifiedBy, version;
-@synthesize isLeafItem;
+@synthesize forcedRefresh, parent, shared, sharingAccount, displayName, isLeafItem, icon;
+@dynamic url, children, pithosContainer, pithosObject;
#pragma mark -
#pragma mark Object Lifecycle
- (id)init {
- if ((self == [super init])) {
- childrenDirty = YES;
+ if ((self = [super init])) {
+ freshness = PithosNodeStateRefreshNeeded;
+ forcedRefresh = NO;
+ shared = NO;
isLeafItem = NO;
}
return self;
}
- (void)dealloc {
+ [pithosNodeInfoController release];
+ [sharingAccount release];
[icon release];
[displayName release];
- [previousChildren release];
+ [newChildren release];
[children release];
[url release];
[super dealloc];
}
- (BOOL)isEqual:(id)anObject {
- if ([anObject isKindOfClass:[self class]]) {
- return [((PithosNode *)anObject).url isEqual:self.url];
- }
- return NO;
+ return ([anObject isKindOfClass:[self class]] && [((PithosNode *)anObject).url isEqual:self.url]);
}
- (NSUInteger)hash {
return self.url.hash;
}
+#pragma mark -
+#pragma mark Properties
+
+- (void)setShared:(BOOL)aShared {
+ if (shared != aShared) {
+ shared = aShared;
+ [url release];
+ url = nil;
+ }
+}
+
+- (void)setSharingAccount:(NSString *)aSharingAccount {
+ if (![sharingAccount isEqualToString:aSharingAccount]) {
+ [sharingAccount release];
+ sharingAccount = [aSharingAccount retain];
+ [url release];
+ url = nil;
+ }
+}
+
+#pragma mark -
+#pragma mark Actions
+
- (void)invalidateChildren {
- childrenDirty = YES;
+ if (freshness == PithosNodeStateFresh)
+ freshness = PithosNodeStateRefreshNeeded;
+}
+
+- (void)invalidateChildrenRecursive {
+ if (freshness == PithosNodeStateFresh) {
+ for (PithosNode *child in children) {
+ [child invalidateChildrenRecursive];
+ }
+ freshness = PithosNodeStateRefreshNeeded;
+ }
+}
+
+- (void)refresh {
+ [self invalidateChildren];
+ self.children;
+}
+
+- (void)forceRefresh {
+ forcedRefresh = YES;
+ [self refresh];
+}
+
+- (void)showPithosNodeInfo:(id)sender {
+ // Abstract method
+}
+
+- (void)pithosNodeInfoWillClose:(id)sender {
+ if (pithosNodeInfoController) {
+ [pithosNodeInfoController release];
+ pithosNodeInfoController = nil;
+ }
+}
+
+- (void)pithosNodeWillBeRemoved {
+ if (pithosNodeInfoController) {
+ pithosNodeInfoController.node = nil;
+ [[pithosNodeInfoController window] close];
+ }
for (PithosNode *child in children) {
- [child invalidateChildren];
+ [child pithosNodeWillBeRemoved];
}
}
+#pragma mark -
+#pragma mark ASIHTTPRequestDelegate
+
+- (void)performRequestFinishedDelegateInBackground:(ASIPithosRequest *)request {
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
+ [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFinishSelector"]) withObject:request];
+ });
+}
+
+- (void)performRequestFailedDelegateInBackground:(ASIPithosRequest *)request {
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
+ [self performSelector:NSSelectorFromString([request.userInfo objectForKey:@"didFailSelector"]) withObject:request];
+ });
+}
+
@end
\ No newline at end of file