#import "LauncherPreferences.h" #import "PLProfiles.h" #import "utils.h" static PLProfiles* current; @interface PLProfiles() @end @implementation PLProfiles + (id)defaultProfiles { return @{ @"profiles": @{ @"(Default)": @{ @"name": @"(Default)", @"lastVersionId": @"latest-release" } }, @"selectedProfile": @"(Default)" }.mutableCopy; } + (PLProfiles *)current { if (!current) { [self updateCurrent]; } return current; } + (void)updateCurrent { current = [[PLProfiles alloc] initWithCurrentInstance]; } + (id)profile:(NSMutableDictionary *)profile resolveKey:(id)key { NSString *value = profile[key]; if (value.length > 0) { //NSDebugLog(@"[PLProfiles] Applying %@: \"%@\"", key, value); return value; } NSDictionary *valueDefaults = @{ @"javaVersion": @"0", @"gameDir": @"." }; if (valueDefaults[key]) { return valueDefaults[key]; } NSDictionary *prefDefaults = @{ @"defaultTouchCtrl": @"control.default_ctrl", @"defaultGamepadCtrl": @"control.default_gamepad_ctrl", @"javaArgs": @"java.java_args", @"renderer": @"video.renderer" }; return getPrefObject(prefDefaults[key]); } + (id)resolveKeyForCurrentProfile:(id)key { return [self profile:self.current.selectedProfile resolveKey:key]; } - (id)initWithCurrentInstance { self = [super init]; self.profilePath = [@(getenv("POJAV_GAME_DIR")) stringByAppendingPathComponent:@"launcher_profiles.json"]; self.profileDict = parseJSONFromFile(self.profilePath); if (self.profileDict[@"NSErrorObject"]) { self.profileDict = PLProfiles.defaultProfiles; [self save]; } return self; } - (id)profiles { return self.profileDict[@"profiles"]; } - (id)selectedProfile { return self.profiles[self.selectedProfileName]; } - (NSString *)selectedProfileName { return (id)self.profileDict[@"selectedProfile"]; } - (void)setSelectedProfileName:(NSString *)name { self.profileDict[@"selectedProfile"] = (id)name; [self save]; } - (void)save { saveJSONToFile(self.profileDict, self.profilePath); } @end