diff --git a/NextcloudTalk/Rooms/NCRoomsManager.m b/NextcloudTalk/Rooms/NCRoomsManager.m index dc042dd86..5d6a4b941 100644 --- a/NextcloudTalk/Rooms/NCRoomsManager.m +++ b/NextcloudTalk/Rooms/NCRoomsManager.m @@ -164,16 +164,25 @@ - (void)updateRoomsUpdatingUserStatus:(BOOL)updateStatus onlyLastModified:(BOOL) NSMutableArray *roomsWithNewMessages = [NSMutableArray new]; if (!error) { + __block BOOL expired = NO; BGTaskHelper *bgTask = [BGTaskHelper startBackgroundTaskWithName:@"NCUpdateRoomsTransaction" expirationHandler:^(BGTaskHelper *task) { + expired = YES; NSString *logMessage = [NSString stringWithFormat:@"ExpirationHandler called NCUpdateRoomsTransaction, number of rooms %ld", rooms.count]; [NCUtils log:logMessage]; }]; RLMRealm *realm = [RLMRealm defaultRealm]; - NSInteger updateTimestamp = [[NSDate date] timeIntervalSince1970]; + [realm transactionWithBlock:^{ + NSInteger updateTimestamp = [[NSDate date] timeIntervalSince1970]; + // Add or update rooms for (NSDictionary *roomDict in rooms) { + if (expired) { + [realm cancelWriteTransaction]; + return; + } + BOOL roomContainsNewMessages = [self updateRoomWithDict:roomDict withAccount:activeAccount withTimestamp:updateTimestamp withRealm:realm]; if (roomContainsNewMessages) { @@ -181,10 +190,9 @@ - (void)updateRoomsUpdatingUserStatus:(BOOL)updateStatus onlyLastModified:(BOOL) [roomsWithNewMessages addObject:room]; } } - }]; - // Only delete rooms if it was a complete rooms update (not using modifiedSince) - if (!onlyLastModified) { - [realm transactionWithBlock:^{ + + // Only delete rooms if it was a complete rooms update (not using modifiedSince) + if (!onlyLastModified) { // Delete old rooms NSPredicate *roomsQuery = [NSPredicate predicateWithFormat:@"accountId = %@ AND lastUpdate != %ld", activeAccount.accountId, (long)updateTimestamp]; RLMResults *managedRoomsToBeDeleted = [NCRoom objectsWithPredicate:roomsQuery]; @@ -202,8 +210,8 @@ - (void)updateRoomsUpdatingUserStatus:(BOOL)updateStatus onlyLastModified:(BOOL) } } [realm deleteObjects:managedRoomsToBeDeleted]; - }]; - } + } + }]; [bgTask stopBackgroundTask]; } else {