[Sandbox] Synchronize write accesses to storage
Synchronize writing to the bookmark storage to the main thread. Signed-off-by: Christopher Snowhill <kode54@gmail.com>swiftingly
parent
4ce180fb2a
commit
d739e68e8e
|
@ -212,6 +212,14 @@ static SandboxBroker *kSharedSandboxBroker = nil;
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_block_t block) {
|
||||||
|
if(dispatch_queue_get_label(queue) == dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)) {
|
||||||
|
block();
|
||||||
|
} else {
|
||||||
|
dispatch_sync(queue, block);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)addFolderIfMissing:(NSURL *)folderUrl {
|
- (void)addFolderIfMissing:(NSURL *)folderUrl {
|
||||||
if(![folderUrl isFileURL]) return;
|
if(![folderUrl isFileURL]) return;
|
||||||
|
|
||||||
|
@ -237,18 +245,16 @@ static SandboxBroker *kSharedSandboxBroker = nil;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
dispatch_sync_reentrant(dispatch_get_main_queue(), ^{
|
||||||
|
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
|
|
||||||
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
||||||
|
|
||||||
if(token) {
|
if(token) {
|
||||||
token.path = [folderUrl path];
|
token.path = [folderUrl path];
|
||||||
token.bookmark = bookmark;
|
token.bookmark = bookmark;
|
||||||
[pc.viewContext save:&err];
|
|
||||||
if(err) {
|
|
||||||
ALog(@"Error saving bookmark: %@", [err localizedDescription]);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -285,17 +291,15 @@ static SandboxBroker *kSharedSandboxBroker = nil;
|
||||||
|
|
||||||
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
|
|
||||||
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
dispatch_sync_reentrant(dispatch_get_main_queue(), ^{
|
||||||
|
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
||||||
|
|
||||||
if(token) {
|
if(token) {
|
||||||
token.path = [url path];
|
token.path = [url path];
|
||||||
token.bookmark = bookmark;
|
token.bookmark = bookmark;
|
||||||
token.folder = NO;
|
token.folder = NO;
|
||||||
[pc.viewContext save:&err];
|
|
||||||
if(err) {
|
|
||||||
ALog(@"Error saving bookmark: %@", [err localizedDescription]);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue