[Sandbox / Core Data] Refine global variable usage
Refine the global variable usage, eliminating double underscore prefixes and trusting that static global variables will exist in the object where the class was created. Got rid of that nasty NSApplication extension hack that was previously in use. Signed-off-by: Christopher Snowhill <kode54@gmail.com>swiftingly
parent
4ac566c308
commit
5cb08291bf
|
@ -19,10 +19,6 @@
|
||||||
@class SpotlightWindowController;
|
@class SpotlightWindowController;
|
||||||
@class PlaybackController;
|
@class PlaybackController;
|
||||||
|
|
||||||
@interface NSApplication (CoreDataStorageExtension)
|
|
||||||
- (NSPersistentContainer *_Nonnull)sharedPersistentContainer;
|
|
||||||
@end
|
|
||||||
|
|
||||||
typedef NS_ENUM(NSInteger, RepeatMode) {
|
typedef NS_ENUM(NSInteger, RepeatMode) {
|
||||||
RepeatModeNoRepeat = 0,
|
RepeatModeNoRepeat = 0,
|
||||||
RepeatModeRepeatOne,
|
RepeatModeRepeatOne,
|
||||||
|
@ -69,7 +65,6 @@ typedef NS_ENUM(NSInteger, URLOrigin) {
|
||||||
@property(retain) NSString *_Nullable totalTime;
|
@property(retain) NSString *_Nullable totalTime;
|
||||||
@property(retain) NSString *_Nullable currentStatus;
|
@property(retain) NSString *_Nullable currentStatus;
|
||||||
|
|
||||||
@property(strong, nonatomic, readonly) NSOperationQueue *_Nonnull persistentContainerQueue;
|
|
||||||
@property(strong, nonatomic, readonly) NSPersistentContainer *_Nonnull persistentContainer;
|
@property(strong, nonatomic, readonly) NSPersistentContainer *_Nonnull persistentContainer;
|
||||||
@property(strong, nonatomic, readonly) NSMutableDictionary<NSString *, AlbumArtwork *> *_Nonnull persistentArtStorage;
|
@property(strong, nonatomic, readonly) NSMutableDictionary<NSString *, AlbumArtwork *> *_Nonnull persistentArtStorage;
|
||||||
|
|
||||||
|
@ -139,6 +134,8 @@ typedef NS_ENUM(NSInteger, URLOrigin) {
|
||||||
- (void)readQueueFromDataStore;
|
- (void)readQueueFromDataStore;
|
||||||
- (void)readShuffleListFromDataStore;
|
- (void)readShuffleListFromDataStore;
|
||||||
|
|
||||||
|
+ (NSPersistentContainer *_Nonnull)sharedPersistentContainer;
|
||||||
|
|
||||||
// reload metadata of selection
|
// reload metadata of selection
|
||||||
- (IBAction)reloadTags:(id _Nullable)sender;
|
- (IBAction)reloadTags:(id _Nullable)sender;
|
||||||
|
|
||||||
|
|
|
@ -27,13 +27,7 @@
|
||||||
|
|
||||||
extern BOOL kAppControllerShuttingDown;
|
extern BOOL kAppControllerShuttingDown;
|
||||||
|
|
||||||
NSPersistentContainer *__persistentContainer = nil;
|
NSPersistentContainer *kPersistentContainer = nil;
|
||||||
|
|
||||||
@implementation NSApplication (CoreDataStorageExtension)
|
|
||||||
- (NSPersistentContainer *_Nonnull)sharedPersistentContainer {
|
|
||||||
return __persistentContainer;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation PlaylistController
|
@implementation PlaylistController
|
||||||
|
|
||||||
|
@ -43,7 +37,7 @@ NSPersistentContainer *__persistentContainer = nil;
|
||||||
|
|
||||||
static NSArray *cellIdentifiers = nil;
|
static NSArray *cellIdentifiers = nil;
|
||||||
|
|
||||||
NSMutableDictionary<NSString *, AlbumArtwork *> *__artworkDictionary = nil;
|
NSMutableDictionary<NSString *, AlbumArtwork *> *kArtworkDictionary = nil;
|
||||||
|
|
||||||
static void *playlistControllerContext = &playlistControllerContext;
|
static void *playlistControllerContext = &playlistControllerContext;
|
||||||
|
|
||||||
|
@ -126,16 +120,20 @@ static void *playlistControllerContext = &playlistControllerContext;
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
__persistentContainer = self.persistentContainer;
|
kPersistentContainer = self.persistentContainer;
|
||||||
|
|
||||||
self.persistentContainer.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
|
self.persistentContainer.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
|
||||||
|
|
||||||
_persistentArtStorage = [[NSMutableDictionary alloc] init];
|
_persistentArtStorage = [[NSMutableDictionary alloc] init];
|
||||||
__artworkDictionary = self.persistentArtStorage;
|
kArtworkDictionary = self.persistentArtStorage;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
+ (NSPersistentContainer *)sharedPersistentContainer {
|
||||||
|
return kPersistentContainer;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)awakeFromNib {
|
- (void)awakeFromNib {
|
||||||
[super awakeFromNib];
|
[super awakeFromNib];
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
#import "SHA256Digest.h"
|
#import "SHA256Digest.h"
|
||||||
#import "SecondsFormatter.h"
|
#import "SecondsFormatter.h"
|
||||||
|
|
||||||
extern NSPersistentContainer *__persistentContainer;
|
extern NSPersistentContainer *kPersistentContainer;
|
||||||
extern NSMutableDictionary<NSString *, AlbumArtwork *> *__artworkDictionary;
|
extern NSMutableDictionary<NSString *, AlbumArtwork *> *kArtworkDictionary;
|
||||||
|
|
||||||
@implementation PlaylistEntry (Extension)
|
@implementation PlaylistEntry (Extension)
|
||||||
|
|
||||||
|
@ -344,7 +344,7 @@ extern NSMutableDictionary<NSString *, AlbumArtwork *> *__artworkDictionary;
|
||||||
@dynamic albumArtInternal;
|
@dynamic albumArtInternal;
|
||||||
- (NSData *)albumArtInternal {
|
- (NSData *)albumArtInternal {
|
||||||
NSString *imageCacheTag = self.artHash;
|
NSString *imageCacheTag = self.artHash;
|
||||||
return [__artworkDictionary objectForKey:imageCacheTag].artData;
|
return [kArtworkDictionary objectForKey:imageCacheTag].artData;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setAlbumArtInternal:(NSData *)albumArtInternal {
|
- (void)setAlbumArtInternal:(NSData *)albumArtInternal {
|
||||||
|
@ -354,12 +354,12 @@ extern NSMutableDictionary<NSString *, AlbumArtwork *> *__artworkDictionary;
|
||||||
|
|
||||||
self.artHash = imageCacheTag;
|
self.artHash = imageCacheTag;
|
||||||
|
|
||||||
if(![__artworkDictionary objectForKey:imageCacheTag]) {
|
if(![kArtworkDictionary objectForKey:imageCacheTag]) {
|
||||||
AlbumArtwork *art = [NSEntityDescription insertNewObjectForEntityForName:@"AlbumArtwork" inManagedObjectContext:__persistentContainer.viewContext];
|
AlbumArtwork *art = [NSEntityDescription insertNewObjectForEntityForName:@"AlbumArtwork" inManagedObjectContext:kPersistentContainer.viewContext];
|
||||||
art.artHash = imageCacheTag;
|
art.artHash = imageCacheTag;
|
||||||
art.artData = albumArtInternal;
|
art.artData = albumArtInternal;
|
||||||
|
|
||||||
[__artworkDictionary setObject:art forKey:imageCacheTag];
|
[kArtworkDictionary setObject:art forKey:imageCacheTag];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -505,7 +505,7 @@ NSURL *_Nullable urlForPath(NSString *_Nullable path) {
|
||||||
request.predicate = predicate;
|
request.predicate = predicate;
|
||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSArray *results = [__persistentContainer.viewContext executeFetchRequest:request error:&error];
|
NSArray *results = [kPersistentContainer.viewContext executeFetchRequest:request error:&error];
|
||||||
|
|
||||||
if(!results || [results count] < 1) {
|
if(!results || [results count] < 1) {
|
||||||
NSPredicate *filenamePredicate = [NSPredicate predicateWithFormat:@"filename == %@", self.filename];
|
NSPredicate *filenamePredicate = [NSPredicate predicateWithFormat:@"filename == %@", self.filename];
|
||||||
|
@ -513,7 +513,7 @@ NSURL *_Nullable urlForPath(NSString *_Nullable path) {
|
||||||
request = [NSFetchRequest fetchRequestWithEntityName:@"PlayCount"];
|
request = [NSFetchRequest fetchRequestWithEntityName:@"PlayCount"];
|
||||||
request.predicate = filenamePredicate;
|
request.predicate = filenamePredicate;
|
||||||
|
|
||||||
results = [__persistentContainer.viewContext executeFetchRequest:request error:&error];
|
results = [kPersistentContainer.viewContext executeFetchRequest:request error:&error];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!results || [results count] < 1) return nil;
|
if(!results || [results count] < 1) return nil;
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
@import Firebase;
|
@import Firebase;
|
||||||
|
|
||||||
extern NSMutableDictionary<NSString *, AlbumArtwork *> *__artworkDictionary;
|
extern NSMutableDictionary<NSString *, AlbumArtwork *> *kArtworkDictionary;
|
||||||
|
|
||||||
@implementation PlaylistLoader
|
@implementation PlaylistLoader
|
||||||
|
|
||||||
|
@ -839,7 +839,7 @@ NSURL *_Nullable urlForPath(NSString *_Nullable path);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(AlbumArtwork *art in results) {
|
for(AlbumArtwork *art in results) {
|
||||||
[__artworkDictionary setObject:art forKey:art.artHash];
|
[kArtworkDictionary setObject:art forKey:art.artHash];
|
||||||
}
|
}
|
||||||
|
|
||||||
request = [NSFetchRequest fetchRequestWithEntityName:@"PlaylistEntry"];
|
request = [NSFetchRequest fetchRequestWithEntityName:@"PlaylistEntry"];
|
||||||
|
|
|
@ -29,25 +29,23 @@
|
||||||
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"path" ascending:YES];
|
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"path" ascending:YES];
|
||||||
[self setSortDescriptors:@[sortDescriptor]];
|
[self setSortDescriptors:@[sortDescriptor]];
|
||||||
|
|
||||||
if([NSApp respondsToSelector:@selector(sharedPersistentContainer)]) {
|
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
NSPersistentContainer *pc = [NSApp sharedPersistentContainer];
|
|
||||||
|
|
||||||
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SandboxToken"];
|
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SandboxToken"];
|
||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSArray *results = [pc.viewContext executeFetchRequest:request error:&error];
|
NSArray *results = [pc.viewContext executeFetchRequest:request error:&error];
|
||||||
|
|
||||||
if(results && [results count] > 0) {
|
if(results && [results count] > 0) {
|
||||||
for(SandboxToken *token in results) {
|
for(SandboxToken *token in results) {
|
||||||
BOOL isStale = YES;
|
BOOL isStale = YES;
|
||||||
NSError *err = nil;
|
NSError *err = nil;
|
||||||
NSURL *bookmarkUrl = [NSURL URLByResolvingBookmarkData:token.bookmark options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&isStale error:&err];
|
NSURL *bookmarkUrl = [NSURL URLByResolvingBookmarkData:token.bookmark options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&isStale error:&err];
|
||||||
if(!bookmarkUrl) {
|
if(!bookmarkUrl) {
|
||||||
ALog(@"Stale bookmark for path: %@, with error: %@", token.path, [err localizedDescription]);
|
ALog(@"Stale bookmark for path: %@, with error: %@", token.path, [err localizedDescription]);
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
[self addObject:@{ @"path": token.path, @"valid": (isStale ? NSLocalizedPrefString(@"ValidNo") : NSLocalizedPrefString(@"ValidYes")) }];
|
|
||||||
}
|
}
|
||||||
|
[self addObject:@{ @"path": token.path, @"valid": (isStale ? NSLocalizedPrefString(@"ValidNo") : NSLocalizedPrefString(@"ValidYes")) }];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,10 +58,7 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(![NSApp respondsToSelector:@selector(sharedPersistentContainer)])
|
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
return;
|
|
||||||
|
|
||||||
NSPersistentContainer *pc = [NSApp sharedPersistentContainer];
|
|
||||||
|
|
||||||
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
SandboxToken *token = [NSEntityDescription insertNewObjectForEntityForName:@"SandboxToken" inManagedObjectContext:pc.viewContext];
|
||||||
|
|
||||||
|
@ -81,10 +76,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)removePath:(NSString *)path {
|
- (void)removePath:(NSString *)path {
|
||||||
if(![NSApp respondsToSelector:@selector(sharedPersistentContainer)])
|
NSPersistentContainer *pc = [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
return;
|
|
||||||
|
|
||||||
NSPersistentContainer *pc = [NSApp sharedPersistentContainer];
|
|
||||||
|
|
||||||
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"path == %@", path];
|
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"path == %@", path];
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// with format (entryKey, transformerName)
|
// with format (entryKey, transformerName)
|
||||||
static NSDictionary *importKeys;
|
static NSDictionary *importKeys;
|
||||||
|
|
||||||
extern NSPersistentContainer *__persistentContainer;
|
extern NSPersistentContainer *kPersistentContainer;
|
||||||
|
|
||||||
@implementation SpotlightPlaylistEntry
|
@implementation SpotlightPlaylistEntry
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ extern NSPersistentContainer *__persistentContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (PlaylistEntry *)playlistEntryWithMetadataItem:(NSMetadataItem *)metadataItem {
|
+ (PlaylistEntry *)playlistEntryWithMetadataItem:(NSMetadataItem *)metadataItem {
|
||||||
PlaylistEntry *entry = [NSEntityDescription insertNewObjectForEntityForName:@"PlaylistEntry" inManagedObjectContext:__persistentContainer.viewContext];
|
PlaylistEntry *entry = [NSEntityDescription insertNewObjectForEntityForName:@"PlaylistEntry" inManagedObjectContext:kPersistentContainer.viewContext];
|
||||||
|
|
||||||
entry.deLeted = YES;
|
entry.deLeted = YES;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
#import "SHA256Digest.h"
|
#import "SHA256Digest.h"
|
||||||
|
|
||||||
extern NSPersistentContainer *__persistentContainer;
|
extern NSPersistentContainer *kPersistentContainer;
|
||||||
|
|
||||||
NSString *getDatabasePath(void) {
|
NSString *getDatabasePath(void) {
|
||||||
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
|
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
|
||||||
|
@ -1443,7 +1443,7 @@ static SQLiteStore *g_sharedStore = nil;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
- (PlaylistEntry *_Nonnull)getTrack:(int64_t)trackId {
|
- (PlaylistEntry *_Nonnull)getTrack:(int64_t)trackId {
|
||||||
PlaylistEntry *entry = [NSEntityDescription insertNewObjectForEntityForName:@"PlaylistEntry" inManagedObjectContext:__persistentContainer.viewContext];
|
PlaylistEntry *entry = [NSEntityDescription insertNewObjectForEntityForName:@"PlaylistEntry" inManagedObjectContext:kPersistentContainer.viewContext];
|
||||||
|
|
||||||
if(trackId < 0) {
|
if(trackId < 0) {
|
||||||
entry.error = YES;
|
entry.error = YES;
|
||||||
|
@ -1863,7 +1863,7 @@ static SQLiteStore *g_sharedStore = nil;
|
||||||
entry.index = index;
|
entry.index = index;
|
||||||
entry.entryId = entryId;
|
entry.entryId = entryId;
|
||||||
} else {
|
} else {
|
||||||
[__persistentContainer.viewContext deleteObject:entry];
|
[kPersistentContainer.viewContext deleteObject:entry];
|
||||||
entry = nil;
|
entry = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,17 +17,7 @@
|
||||||
|
|
||||||
#import "PlaylistController.h"
|
#import "PlaylistController.h"
|
||||||
|
|
||||||
static SandboxBroker *__sharedSandboxBroker = nil;
|
static SandboxBroker *kSharedSandboxBroker = nil;
|
||||||
|
|
||||||
@interface NSApplication (SandboxBrokerExtension)
|
|
||||||
- (SandboxBroker *)sharedSandboxBroker;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSApplication (SandboxBrokerExtension)
|
|
||||||
- (SandboxBroker *)sharedSandboxBroker {
|
|
||||||
return __sharedSandboxBroker;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
static NSURL *urlWithoutFragment(NSURL *u) {
|
static NSURL *urlWithoutFragment(NSURL *u) {
|
||||||
if(![u isFileURL]) return u;
|
if(![u isFileURL]) return u;
|
||||||
|
@ -111,9 +101,13 @@ static NSURL *urlWithoutFragment(NSURL *u) {
|
||||||
+ (id)sharedSandboxBroker {
|
+ (id)sharedSandboxBroker {
|
||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
__sharedSandboxBroker = [[self alloc] init];
|
kSharedSandboxBroker = [[self alloc] init];
|
||||||
});
|
});
|
||||||
return [NSApp sharedSandboxBroker];
|
return kSharedSandboxBroker;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (NSPersistentContainer *)sharedPersistentContainer {
|
||||||
|
return [NSClassFromString(@"PlaylistController") sharedPersistentContainer];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)init {
|
- (id)init {
|
||||||
|
@ -156,7 +150,7 @@ static NSURL *urlWithoutFragment(NSURL *u) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NSPersistentContainer *pc = [NSApp sharedPersistentContainer];
|
NSPersistentContainer *pc = [SandboxBroker sharedPersistentContainer];
|
||||||
|
|
||||||
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"path.length" ascending:NO];
|
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"path.length" ascending:NO];
|
||||||
|
|
||||||
|
@ -196,7 +190,6 @@ static NSURL *urlWithoutFragment(NSURL *u) {
|
||||||
- (const void *)beginFolderAccess:(NSURL *)fileUrl {
|
- (const void *)beginFolderAccess:(NSURL *)fileUrl {
|
||||||
NSURL *folderUrl = [urlWithoutFragment(fileUrl) URLByDeletingLastPathComponent];
|
NSURL *folderUrl = [urlWithoutFragment(fileUrl) URLByDeletingLastPathComponent];
|
||||||
if(![folderUrl isFileURL]) return NULL;
|
if(![folderUrl isFileURL]) return NULL;
|
||||||
if(![NSApp respondsToSelector:@selector(sharedPersistentContainer)]) return NULL;
|
|
||||||
|
|
||||||
SandboxEntry *entry;
|
SandboxEntry *entry;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue