Revision ce32510a
| 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