Revision da7bfe47

b/pithos-macos/PithosAccountNode.h
49 49
    
50 50
    ASIPithosAccountRequest *applyMetadataAccountRequest;
51 51
    ASIPithosAccountRequest *refreshMetadataAccountRequest;
52
    
53
    BOOL reset;
52 54
}
53 55

  
54 56
@property(nonatomic, retain) ASIPithos *pithos;
b/pithos-macos/PithosAccountNode.m
60 60

  
61 61
- (id)initWithPithos:(ASIPithos *)aPithos {
62 62
    if ((self = [super init])) {
63
        self.pithos = aPithos;
63
        pithos = [aPithos retain];
64 64
    }
65 65
    return self;
66 66
}
......
87 87
        pithos = [aPithos retain];
88 88
        [url release];
89 89
        url = nil;
90
        [accountRequest clearDelegatesAndCancel];
91
        [accountRequest release];
92
        accountRequest = nil;
93
        [refreshMetadataAccountRequest clearDelegatesAndCancel];
94
        [refreshMetadataAccountRequest release];
95
        refreshMetadataAccountRequest = nil;
96
        [applyMetadataAccountRequest clearDelegatesAndCancel];
97
        [applyMetadataAccountRequest release];
98
        applyMetadataAccountRequest = nil;
99
        reset = YES;
90 100
    }
91 101
}
92 102

  
......
100 110

  
101 111
- (NSArray *)children {
102 112
    @synchronized(self) {
113
        if (reset) {
114
            [accountRequest clearDelegatesAndCancel];
115
            [accountRequest release];
116
            accountRequest = nil;
117
            [refreshMetadataAccountRequest clearDelegatesAndCancel];
118
            [refreshMetadataAccountRequest release];
119
            refreshMetadataAccountRequest = nil;
120
            [applyMetadataAccountRequest clearDelegatesAndCancel];
121
            [applyMetadataAccountRequest release];
122
            applyMetadataAccountRequest = nil;
123
            [children release];
124
            children = nil;
125
            [newChildren release];
126
            newChildren = nil;
127
            self.pithosAccount = nil;
128
            freshness = PithosNodeStateRefreshNeeded;
129
            forcedRefresh = YES;
130
            reset = NO;
131
            [self postChildrenUpdatedNotificationName];
132
        }
103 133
        switch (freshness) {
104 134
            case PithosNodeStateFresh:
105 135
                break;
......
158 188

  
159 189
- (void)accountRequestFailed:(ASIPithosAccountRequest *)request {
160 190
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
191
    NSString *message;
192
    NSError *error = [accountRequest error];
193
    if (error)
194
        message = [NSString stringWithFormat:@"Account listing %@ failed: %@", accountRequest.url, [error localizedDescription]];
195
    else
196
        message = [NSString stringWithFormat:@"Account listing %@ failed: (%d) %@", 
197
                   accountRequest.url, accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
198
    dispatch_async(dispatch_get_main_queue(), ^{
199
        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
200
    });
161 201
    NSUInteger retries = [[accountRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
162 202
    if (retries > 0) {
163 203
        ASIPithosAccountRequest *newAccountRequest = (ASIPithosAccountRequest *)[PithosUtilities copyRequest:accountRequest];
......
166 206
        accountRequest = newAccountRequest;
167 207
        [[PithosUtilities prepareRequest:accountRequest priority:[[accountRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
168 208
    } else {
169
        NSString *message;
170
        NSError *error = [accountRequest error];
171
        if (error)
172
            message = [NSString stringWithFormat:@"Account listing failed: %@", error];
173
        else
174
            message = [NSString stringWithFormat:@"Account listing failed: (%d) %@", 
175
                       accountRequest.responseStatusCode, accountRequest.responseStatusMessage];
176
        dispatch_async(dispatch_get_main_queue(), ^{
177
            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
178
        });
179 209
        [newChildren release];
180 210
        newChildren = nil;
181 211
        [accountRequest release];
b/pithos-macos/PithosContainerNode.m
222 222

  
223 223
- (void)containerRequestFailed:(ASIPithosContainerRequest *)request {
224 224
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
225
    NSString *message;
226
    NSError *error = [containerRequest error];
227
    if (error)
228
        message = [NSString stringWithFormat:@"Container listing %@ failed: %@", containerRequest.url, [error localizedDescription]];
229
    else
230
        message = [NSString stringWithFormat:@"Container listing %@ failed: (%d) %@", 
231
                   containerRequest.url, containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
232
    dispatch_async(dispatch_get_main_queue(), ^{
233
        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
234
    });
225 235
    NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
226 236
    if (retries > 0) {
227 237
        ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
......
230 240
        containerRequest = newContainerRequest;
231 241
        [[PithosUtilities prepareRequest:containerRequest priority:[[containerRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
232 242
    } else {
233
        NSString *message;
234
        NSError *error = [containerRequest error];
235
        if (error)
236
            message = [NSString stringWithFormat:@"Container listing failed: %@", error];
237
        else
238
            message = [NSString stringWithFormat:@"Container listing failed: (%d) %@", 
239
                       containerRequest.responseStatusCode, containerRequest.responseStatusMessage];
240
        dispatch_async(dispatch_get_main_queue(), ^{
241
            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
242
        });
243 243
        [newChildren release];
244 244
        newChildren = nil;
245 245
        [containerRequest release];
b/pithos-macos/PithosSharingAccountsNode.h
44 44
    
45 45
    NSMutableArray *sharingAccounts;
46 46
    ASIPithosRequest *sharingAccountsRequest;
47
    
48
    BOOL reset;
47 49
}
48 50

  
49 51
@property(nonatomic, retain) ASIPithos *pithos;
b/pithos-macos/PithosSharingAccountsNode.m
52 52

  
53 53
- (id)initWithPithos:(ASIPithos *)aPithos {
54 54
    if ((self = [super init])) {
55
        self.pithos = aPithos;
55
        pithos = [aPithos retain];
56 56
        self.sharingAccount = @"";
57 57
    }
58 58
    return self;
......
75 75
        pithos = [aPithos retain];
76 76
        [url release];
77 77
        url = nil;
78
        [sharingAccountsRequest clearDelegatesAndCancel];
79
        [sharingAccountsRequest release];
80
        sharingAccountsRequest = nil;
81
        reset = YES;
78 82
    }
79 83
}
80 84

  
......
86 90

  
87 91
- (NSArray *)children {
88 92
    @synchronized(self) {
93
        if (reset) {
94
            [sharingAccountsRequest clearDelegatesAndCancel];
95
            [sharingAccountsRequest release];
96
            sharingAccountsRequest = nil;
97
            [children release];
98
            children = nil;
99
            [newChildren release];
100
            newChildren = nil;
101
            freshness = PithosNodeStateRefreshNeeded;
102
            forcedRefresh = YES;
103
            reset = NO;
104
            [self postChildrenUpdatedNotificationName];
105
        }
89 106
        switch (freshness) {
90 107
            case PithosNodeStateFresh:
91 108
                break;
......
132 149

  
133 150
- (void)sharingAccountsRequestFailed:(ASIPithosRequest *)request {
134 151
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
152
    NSString *message;
153
    NSError *error = [sharingAccountsRequest error];
154
    if (error)
155
        message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: %@", 
156
                   sharingAccountsRequest.url, [error localizedDescription]];
157
    else
158
        message = [NSString stringWithFormat:@"Sharing accounts listing %@ failed: (%d) %@", 
159
                   sharingAccountsRequest.url, sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
160
    dispatch_async(dispatch_get_main_queue(), ^{
161
        [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
162
    });
135 163
    NSUInteger retries = [[sharingAccountsRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
136 164
    if (retries > 0) {
137 165
        ASIPithosRequest *newSharingAccountsRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:sharingAccountsRequest];
......
140 168
        sharingAccountsRequest = newSharingAccountsRequest;
141 169
        [[PithosUtilities prepareRequest:sharingAccountsRequest priority:[[sharingAccountsRequest.userInfo objectForKey:@"priority"] integerValue]] startAsynchronous];
142 170
    } else {
143
        NSString *message;
144
        NSError *error = [sharingAccountsRequest error];
145
        if (error)
146
            message = [NSString stringWithFormat:@"Sharing accounts listing failed: %@", error];
147
        else
148
            message = [NSString stringWithFormat:@"Sharing accounts listing failed: (%d) %@", 
149
                       sharingAccountsRequest.responseStatusCode, sharingAccountsRequest.responseStatusMessage];
150
        dispatch_async(dispatch_get_main_queue(), ^{
151
            [[PithosActivityFacility defaultPithosActivityFacility] startAndEndActivityWithType:PithosActivityOther message:message];
152
        });
153 171
        [newChildren release];
154 172
        newChildren = nil;
155 173
        [sharingAccountsRequest release];

Also available in: Unified diff