Revision ce32510a

View differences:

ChatSecure/Classes/Controllers/OTRMediaFileManager.h
30 30
     completion:(void (^)(NSInteger bytesWritten, NSError * _Nullable error))completion
31 31
completionQueue:(nullable dispatch_queue_t)completionQueue;
32 32

  
33
//#865
34
- (void)deleteDataForItem:(OTRMediaItem *)mediaItem
35
            buddyUniqueId:(NSString *)buddyUniqueId
36
               completion:(void (^)(BOOL success, NSError * _Nullable error))completion
37
          completionQueue:(nullable dispatch_queue_t)completionQueue;
38

  
33 39
- (nullable NSData*)dataForItem:(OTRMediaItem *)mediaItem
34 40
                  buddyUniqueId:(NSString *)buddyUniqueId
35 41
                          error:(NSError* __autoreleasing *)error;
ChatSecure/Classes/Controllers/OTRMediaFileManager.m
128 128
    }];
129 129
}
130 130

  
131
//#865
132
- (void)deleteDataForItem:(OTRMediaItem *)mediaItem
133
            buddyUniqueId:(NSString *)buddyUniqueId
134
               completion:(void (^)(BOOL success, NSError * _Nullable error))completion
135
          completionQueue:(nullable dispatch_queue_t)completionQueue {
136
    if (!completionQueue) {
137
        completionQueue = dispatch_get_main_queue();
138
    }
139
    [self performAsyncWrite:^{
140
        NSString *path = [[self class] pathForMediaItem:mediaItem buddyUniqueId:buddyUniqueId];
141
        if (![path length]) {
142
            NSError *error = [NSError errorWithDomain:kOTRErrorDomain code:150 userInfo:@{NSLocalizedDescriptionKey:@"Unable to create file path"}];
143
            if (completion) {
144
                dispatch_async(completionQueue, ^{
145
                    completion(NO, error);
146
                });
147
            }
148
            return;
149
        }
150
        
151
        BOOL fileExists = [self.ioCipher fileExistsAtPath:path isDirectory:NULL];
152
        
153
        if (fileExists) {
154
            NSError *error = nil;
155
            [self.ioCipher removeItemAtPath:path error:&error];
156
            if (error) {
157
                NSError *error = [NSError errorWithDomain:kOTRErrorDomain code:151 userInfo:@{NSLocalizedDescriptionKey:@"Unable to remove existing file"}];
158
                if (completion) {
159
                    dispatch_async(completionQueue, ^{
160
                        completion(NO, error);
161
                    });
162
                }
163
                return;
164
            }
165
        }
166
        
167
        if (completion) {
168
            dispatch_async(completionQueue, ^{
169
                completion(YES, nil);
170
            });
171
        }
172
    }];
173
}
174

  
131 175
/* Internal. If "length" is set, only return the length of the data, otherwise the data ifself */
132 176
- (nullable NSData*)dataForItem:(OTRMediaItem *)mediaItem
133 177
                  buddyUniqueId:(NSString *)buddyUniqueId
ChatSecure/Classes/Model/Yap Storage/OTRMediaItem.m
329 329

  
330 330
- (id)yapDatabaseRelationshipEdgeDeleted:(YapDatabaseRelationshipEdge *)edge withReason:(YDB_NotifyReason)reason
331 331
{
332
    //TODO:Delete File because the parent OTRMessage was deleted
332
    //#865 Delete File because the parent OTRMessage was deleted
333
    __block id<OTRThreadOwner> thread = nil;
334
    __block id<OTRMessageProtocol> message = nil;
335
    [OTRDatabaseManager.shared.readOnlyDatabaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) {
336
        message = [self parentMessageWithTransaction:transaction];
337
        thread = [message threadOwnerWithTransaction:transaction];
338
    }];
339
    if (!message || !thread) {
340
        DDLogError(@"Missing parent message or thread for media message!");
341
        return nil;
342
    }
343
    
344
    NSString *buddyUniqueId = [thread threadIdentifier];
345
    if (!buddyUniqueId) {
346
        return nil;
347
    }
348
    
349
    [[OTRMediaFileManager sharedInstance] deleteDataForItem:self buddyUniqueId:buddyUniqueId completion:^(BOOL success, NSError *error) {
350
        if (error) {
351
            DDLogError(@"ERROR in deleting data for media item");
352
        }
353
    } completionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];
354
    
333 355
    return nil;
334 356
}
335 357

  
Podfile
59 59
  pod 'gtm-oauth2', :podspec => 'Podspecs/gtm-oauth2.podspec'
60 60

  
61 61
  # Storage
62
  pod 'YapDatabase/SQLCipher', '~> 3.0.2'
63
  # pod 'YapDatabase/SQLCipher', :git => 'https://github.com/yapstudios/YapDatabase.git', :commit => 'd632658'
62
  # pod 'YapDatabase/SQLCipher', '~> 3.0.2'
63
  pod 'YapDatabase/SQLCipher', :git => 'https://github.com/yapstudios/YapDatabase.git', :commit => 'ce9c8db' # 865 fix
64 64
  pod 'libsqlfs/SQLCipher', :git => 'https://github.com/ChatSecure/libsqlfs.git', :branch => 'podspec-fix'
65 65
  pod 'IOCipher/GCDWebServer', :path => 'Submodules/IOCipher/IOCipher.podspec'
66 66
  pod 'YapTaskQueue/SQLCipher', :git => 'https://github.com/ChatSecure/YapTaskQueue.git', :branch => 'swift4'

Also available in: Unified diff