@@ -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
0 commit comments