Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 44 additions & 19 deletions FirebaseDatabase/Sources/Core/FRepoManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,33 @@
return configs;
}

+ (NSArray<FRepo *> *)reposForConfigIdentifier:(NSString *)sessionIdentifier
inConfigs:(FRepoDictionary *)configs {
@synchronized(configs) {
return [[configs[sessionIdentifier] allValues] copy] ?: @[];
Comment thread
paulb777 marked this conversation as resolved.
Resolved
}
}

+ (NSArray<FRepo *> *)removeReposForConfigIdentifier:(NSString *)sessionIdentifier
inConfigs:(FRepoDictionary *)configs {
@synchronized(configs) {
NSArray<FRepo *> *repos = [configs[sessionIdentifier].allValues copy];
[configs removeObjectForKey:sessionIdentifier];
return repos ?: @[];
}
}

+ (NSArray<FRepo *> *)allReposInConfigs:(FRepoDictionary *)configs {
@synchronized(configs) {
NSMutableArray<FRepo *> *repos = [NSMutableArray array];
for (NSDictionary<FRepoInfo *, FRepo *> *reposByInfo in
[configs allValues]) {
[repos addObjectsFromArray:[reposByInfo allValues]];
}
return [repos copy];
}
}

/**
* Used for legacy unit tests. The public API should go through
* FirebaseDatabase which calls createRepo.
Expand All @@ -58,7 +85,7 @@

+ (FRepo *)createRepo:(FRepoInfo *)repoInfo
config:(FIRDatabaseConfig *)config
database:(FIRDatabase *)database {

Check warning on line 88 in FirebaseDatabase/Sources/Core/FRepoManager.m

View workflow job for this annotation

GitHub Actions / spm (DatabaseUnitSwift) / spm (xcode-27, watchOS)

'FIRDatabase' is deprecated: first deprecated in watchOS 9.0 - Socket connections are not supported on watchOS 9.0 and higher. Use the Firebase Database REST API instead. See github.com/firebase/firebase-ios-sdk/issues/10195 for more details. [-Wdeprecated-declarations]
[config freeze];
FRepoDictionary *configs = [FRepoManager configs];
@synchronized(configs) {
Expand Down Expand Up @@ -87,9 +114,10 @@
+ (void)interrupt:(FIRDatabaseConfig *)config {
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
FRepoDictionary *configs = [FRepoManager configs];
NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
configs[config.sessionIdentifier];
for (FRepo *repo in [repos allValues]) {
NSArray<FRepo *> *repos =
[FRepoManager reposForConfigIdentifier:config.sessionIdentifier
inConfigs:configs];
for (FRepo *repo in repos) {
[repo interrupt];
}
});
Expand All @@ -98,21 +126,19 @@
+ (void)interruptAll {
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
FRepoDictionary *configs = [FRepoManager configs];
for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in
[configs allValues]) {
for (FRepo *repo in [repos allValues]) {
[repo interrupt];
}
for (FRepo *repo in [FRepoManager allReposInConfigs:configs]) {
[repo interrupt];
}
});
}

+ (void)resume:(FIRDatabaseConfig *)config {
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
FRepoDictionary *configs = [FRepoManager configs];
NSMutableDictionary<FRepoInfo *, FRepo *> *repos =
configs[config.sessionIdentifier];
for (FRepo *repo in [repos allValues]) {
NSArray<FRepo *> *repos =
[FRepoManager reposForConfigIdentifier:config.sessionIdentifier
inConfigs:configs];
for (FRepo *repo in repos) {
[repo resume];
}
});
Expand All @@ -121,11 +147,8 @@
+ (void)resumeAll {
dispatch_async([FIRDatabaseQuery sharedQueue], ^{
FRepoDictionary *configs = [FRepoManager configs];
for (NSMutableDictionary<FRepoInfo *, FRepo *> *repos in
[configs allValues]) {
for (FRepo *repo in [repos allValues]) {
[repo resume];
}
for (FRepo *repo in [FRepoManager allReposInConfigs:configs]) {
[repo resume];
}
});
}
Expand All @@ -137,11 +160,13 @@
dispatch_sync([FIRDatabaseQuery sharedQueue], ^{
FFLog(@"I-RDB040001", @"Disposing all repos for Config with name %@",
config.sessionIdentifier);
NSMutableDictionary *configs = [FRepoManager configs];
for (FRepo *repo in [configs[config.sessionIdentifier] allValues]) {
FRepoDictionary *configs = [FRepoManager configs];
NSArray<FRepo *> *repos =
[FRepoManager removeReposForConfigIdentifier:config.sessionIdentifier
inConfigs:configs];
for (FRepo *repo in repos) {
[repo dispose];
}
[configs removeObjectForKey:config.sessionIdentifier];
});
}

Expand Down
Loading