PLProfiles.m 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #import "LauncherPreferences.h"
  2. #import "PLProfiles.h"
  3. #import "utils.h"
  4. static PLProfiles* current;
  5. @interface PLProfiles()
  6. @end
  7. @implementation PLProfiles
  8. + (id)defaultProfiles {
  9. return @{
  10. @"profiles": @{
  11. @"(Default)": @{
  12. @"name": @"(Default)",
  13. @"lastVersionId": @"latest-release"
  14. }
  15. },
  16. @"selectedProfile": @"(Default)"
  17. }.mutableCopy;
  18. }
  19. + (PLProfiles *)current {
  20. if (!current) {
  21. [self updateCurrent];
  22. }
  23. return current;
  24. }
  25. + (void)updateCurrent {
  26. current = [[PLProfiles alloc] initWithCurrentInstance];
  27. }
  28. + (id)profile:(NSMutableDictionary *)profile resolveKey:(id)key {
  29. NSString *value = profile[key];
  30. if (value.length > 0) {
  31. //NSDebugLog(@"[PLProfiles] Applying %@: \"%@\"", key, value);
  32. return value;
  33. }
  34. NSDictionary *valueDefaults = @{
  35. @"javaVersion": @"0",
  36. @"gameDir": @"."
  37. };
  38. if (valueDefaults[key]) {
  39. return valueDefaults[key];
  40. }
  41. NSDictionary *prefDefaults = @{
  42. @"defaultTouchCtrl": @"control.default_ctrl",
  43. @"defaultGamepadCtrl": @"control.default_gamepad_ctrl",
  44. @"javaArgs": @"java.java_args",
  45. @"renderer": @"video.renderer"
  46. };
  47. return getPrefObject(prefDefaults[key]);
  48. }
  49. + (id)resolveKeyForCurrentProfile:(id)key {
  50. return [self profile:self.current.selectedProfile resolveKey:key];
  51. }
  52. - (id)initWithCurrentInstance {
  53. self = [super init];
  54. self.profilePath = [@(getenv("POJAV_GAME_DIR")) stringByAppendingPathComponent:@"launcher_profiles.json"];
  55. self.profileDict = parseJSONFromFile(self.profilePath);
  56. if (self.profileDict[@"NSErrorObject"]) {
  57. self.profileDict = PLProfiles.defaultProfiles;
  58. [self save];
  59. }
  60. return self;
  61. }
  62. - (id)profiles {
  63. return self.profileDict[@"profiles"];
  64. }
  65. - (id)selectedProfile {
  66. return self.profiles[self.selectedProfileName];
  67. }
  68. - (NSString *)selectedProfileName {
  69. return (id)self.profileDict[@"selectedProfile"];
  70. }
  71. - (void)setSelectedProfileName:(NSString *)name {
  72. self.profileDict[@"selectedProfile"] = (id)name;
  73. [self save];
  74. }
  75. - (void)save {
  76. saveJSONToFile(self.profileDict, self.profilePath);
  77. }
  78. @end