Skip to content
This repository was archived by the owner on Sep 5, 2025. It is now read-only.

Commit 9aed671

Browse files
committed
Settings: Manage the API break on MXFileStore.diskUsage
1 parent b4a6412 commit 9aed671

File tree

1 file changed

+50
-8
lines changed

1 file changed

+50
-8
lines changed

matrixConsole/ViewController/SettingsViewController.m

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ @interface SettingsViewController ()
6363
UISwitch *sortMembersSwitch;
6464
UISwitch *displayLeftMembersSwitch;
6565
MXKTableViewCellWithLabelAndSlider* maxCacheSizeCell;
66+
NSUInteger cacheSize;
6667
NSUInteger minimumCacheSize;
6768
UIButton *clearCacheButton;
6869

@@ -151,7 +152,10 @@ - (void)viewWillAppear:(BOOL)animated
151152
}
152153

153154
selectedCountryCode = countryCode = [_settings phonebookCountryCode];
154-
155+
156+
// Refresh file stores disk usage asynchronously
157+
[self updateMXCacheSize];
158+
155159
// Update the minimum cache size with the current value
156160
// Dispatch this operation to not freeze the app
157161
dispatch_async(dispatch_get_main_queue(), ^{
@@ -166,6 +170,12 @@ - (void)viewWillAppear:(BOOL)animated
166170

167171
// Refresh table to remove this account
168172
[self.tableView reloadData];
173+
174+
// Refresh file stores disk usage
175+
// Dispatch this operation to not freeze the app
176+
dispatch_async(dispatch_get_main_queue(), ^{
177+
[self updateMXCacheSize];
178+
});
169179
}];
170180
}
171181

@@ -298,6 +308,7 @@ - (IBAction)onButtonPressed:(id)sender
298308
else if (sender == clearCacheButton)
299309
{
300310
[[AppDelegate theDelegate] reloadMatrixSessions:YES];
311+
[self updateMXCacheSize];
301312
}
302313
}
303314

@@ -799,19 +810,50 @@ - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComp
799810
// return the MX cache size in bytes
800811
- (NSUInteger)MXCacheSize
801812
{
802-
NSUInteger cacheSize = 0;
803-
804-
NSArray *mxSessions = self.mxSessions;
805-
for (MXSession *mxSession in mxSessions)
813+
return cacheSize;
814+
}
815+
816+
// Refresh file stores disk usage asynchronously
817+
- (void)updateMXCacheSize
818+
{
819+
[self MXCacheSize:0 intermediateDiskUsage:0 block:^(NSUInteger diskUsage) {
820+
821+
cacheSize = diskUsage;
822+
823+
[self.tableView reloadRowsAtIndexPaths:@[
824+
[NSIndexPath indexPathForRow:SETTINGS_SECTION_ROOMS_SET_CACHE_SIZE_INDEX + afterChromeOffset
825+
inSection:SETTINGS_SECTION_ROOMS_INDEX],
826+
[NSIndexPath indexPathForRow:SETTINGS_SECTION_ROOMS_CLEAR_CACHE_INDEX + afterChromeOffset
827+
inSection:SETTINGS_SECTION_ROOMS_INDEX],
828+
] withRowAnimation:UITableViewRowAnimationNone];
829+
}];
830+
}
831+
832+
// Recursive method to asynchronously get the disk usage of all file stores of all sessions
833+
- (void)MXCacheSize:(NSUInteger)sessionIndex intermediateDiskUsage:(NSUInteger)intermediateDiskUsage block:(void(^)(NSUInteger diskUsage))block
834+
{
835+
if (sessionIndex == self.mxSessions.count)
806836
{
837+
block(intermediateDiskUsage);
838+
}
839+
else
840+
{
841+
MXSession *mxSession = self.mxSessions[sessionIndex];
842+
807843
if (mxSession.store && [mxSession.store isKindOfClass:[MXFileStore class]])
808844
{
809845
MXFileStore *fileStore = (MXFileStore*)mxSession.store;
810-
cacheSize += fileStore.diskUsage;
846+
847+
[fileStore diskUsageWithBlock:^(NSUInteger diskUsage) {
848+
849+
[self MXCacheSize:(sessionIndex + 1) intermediateDiskUsage:(intermediateDiskUsage + diskUsage) block:block];
850+
}];
851+
}
852+
else
853+
{
854+
[self MXCacheSize:(sessionIndex + 1) intermediateDiskUsage:intermediateDiskUsage block:block];
811855
}
812856
}
813-
814-
return cacheSize;
815857
}
816858

817859
// return the sum of the caches (MX cache + media cache ...) in bytes

0 commit comments

Comments
 (0)