Skip to content

Commit a5c4aa1

Browse files
committed
Log when filters cannot be saved or loaded
1 parent a12a74c commit a5c4aa1

File tree

6 files changed

+81
-2
lines changed

6 files changed

+81
-2
lines changed

MatrixSDK/Data/Store/MXFileStore/MXFileStore.m

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,13 +1652,15 @@ - (void)saveMetaData
16521652
#pragma mark - Matrix filters
16531653
- (void)loadFilters
16541654
{
1655+
MXLogDebug(@"[MXFileStore] Loading filters");
16551656
NSString *file = [storePath stringByAppendingPathComponent:kMXFileStoreFiltersFile];
1656-
filters = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
1657+
filters = [self loadObjectOfClasses:[NSSet setWithArray:@[NSDictionary.class, NSString.class]] fromFile:file];
16571658

16581659
if (!filters)
16591660
{
16601661
// This is used as flag to indicate it has been mounted from the file
16611662
filters = [NSMutableDictionary dictionary];
1663+
MXLogDebug(@"[MXFileStore] No filters loaded, creating empty dictionary");
16621664
}
16631665
}
16641666

@@ -1690,7 +1692,8 @@ - (void)saveFilters
16901692
}
16911693

16921694
// Store new data
1693-
[NSKeyedArchiver archiveRootObject:self->filters toFile:file];
1695+
MXLogDebug(@"[MXFileStore] Saving filters");
1696+
[self saveObject:self->filters toFile:file];
16941697
});
16951698
}
16961699
}
@@ -2171,6 +2174,65 @@ - (MXFileRoomStore *)roomStoreForRoom:(NSString*)roomId
21712174

21722175

21732176
#pragma mark - Tools
2177+
2178+
- (void)saveObject:(id)object toFile:(NSString *)file
2179+
{
2180+
if (@available(iOS 11.0, *))
2181+
{
2182+
NSError *error;
2183+
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object requiringSecureCoding:NO error:&error];
2184+
if (error)
2185+
{
2186+
MXLogDebug(@"[MXFileStore] Failed archiving root object with error: '%@'", error.localizedDescription);
2187+
return;
2188+
}
2189+
2190+
BOOL success = [data writeToFile:file options:0 error:&error];
2191+
if (success)
2192+
{
2193+
MXLogDebug(@"[MXFileStore] Saved data successfully");
2194+
}
2195+
else
2196+
{
2197+
MXLogDebug(@"[MXFileStore] Failed saving data with error: '%@'", error.localizedDescription);
2198+
}
2199+
}
2200+
else
2201+
{
2202+
[NSKeyedArchiver archiveRootObject:object toFile:file];
2203+
}
2204+
}
2205+
2206+
- (id)loadObjectOfClasses:(NSSet<Class> *)classes fromFile:(NSString *)file
2207+
{
2208+
if (@available(iOS 11.0, *))
2209+
{
2210+
NSData *data = [NSData dataWithContentsOfFile:file];
2211+
if (!data)
2212+
{
2213+
MXLogDebug(@"[MXFileStore] No data to load at file %@", file);
2214+
return nil;
2215+
}
2216+
2217+
NSError *error;
2218+
id object = [NSKeyedUnarchiver unarchivedObjectOfClasses:classes fromData:data error:&error];
2219+
if (object)
2220+
{
2221+
MXLogDebug(@"[MXFileStore] Loaded object from class");
2222+
return object;
2223+
}
2224+
else
2225+
{
2226+
MXLogDebug(@"[MXFileStore] Failed loading object from class with error: '%@'", error.localizedDescription);
2227+
return nil;
2228+
}
2229+
}
2230+
else
2231+
{
2232+
return [NSKeyedUnarchiver unarchiveObjectWithFile:file];
2233+
}
2234+
}
2235+
21742236
/**
21752237
List recursevely files in a folder
21762238

MatrixSDK/Data/Store/MXMemoryStore/MXMemoryStore.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,11 @@ - (void)storeFilter:(nonnull MXFilterJSONModel*)filter withFilterId:(nonnull NSS
429429
filters[filterId] = filter.jsonString;
430430
}
431431

432+
- (NSArray<NSString *> *)allFilterIds
433+
{
434+
return filters.allKeys;
435+
}
436+
432437
- (void)filterWithFilterId:(nonnull NSString*)filterId
433438
success:(nonnull void (^)(MXFilterJSONModel * _Nullable filter))success
434439
failure:(nullable void (^)(NSError * _Nullable error))failure

MatrixSDK/Data/Store/MXNoStore/MXNoStore.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,11 @@ - (void)storeFilter:(nonnull MXFilterJSONModel*)filter withFilterId:(nonnull NSS
348348
{
349349
}
350350

351+
- (NSArray<NSString *> *)allFilterIds
352+
{
353+
return @[];
354+
}
355+
351356
- (void)filterWithFilterId:(nonnull NSString*)filterId
352357
success:(nonnull void (^)(MXFilterJSONModel * _Nullable filter))success
353358
failure:(nullable void (^)(NSError * _Nullable error))failure

MatrixSDK/Data/Store/MXStore.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,11 @@
521521
*/
522522
- (void)storeFilter:(nonnull MXFilterJSONModel*)filter withFilterId:(nonnull NSString*)filterId;
523523

524+
/**
525+
Retrieve a list of all stored filter ids.
526+
*/
527+
- (nonnull NSArray <NSString *> *)allFilterIds;
528+
524529
/**
525530
Retrieve a filter with a given id.
526531

MatrixSDKTests/MXFilterTests.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ - (void)testFilterPermanentStorage
175175

176176
XCTAssertNotNil(filter2);
177177
XCTAssertEqualObjects(filter, filter2);
178+
XCTAssertEqualObjects(fileStore.allFilterIds, @[syncFilterId]);
178179

179180
[expectation fulfill];
180181

changelog.d/5873.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MXFileStore: Log when filters cannot be saved or loaded

0 commit comments

Comments
 (0)