Migrate environment variables to preferences view controller

Also, remove some more legacy code + make the migration code better
This commit is contained in:
Eilionoir Tunnicliff committed 2023-05-08 13:49:52 -04:00
1 parent e75858a545
commit 4cff4dc949
6 files changed
+35 -51

No files matched your search

+13 -17
View File
@@ -22,7 +22,7 @@ extern char **environ;
static int margc = -1;
static const char* margv[1000];
void init_loadCustomEnv() {
void init_loadDefaultEnv() {
/* Define default env */
// Silent Caciocavallo NPE error in locating Android-only lib
@@ -42,35 +42,30 @@ void init_loadCustomEnv() {
// Runs JVM in a separate thread
setenv("HACK_IGNORE_START_ON_FIRST_THREAD", "1", 1);
}
/* Load custom env */
NSString *envFile = [NSString stringWithFormat:@"%s/custom_env.txt", getenv("POJAV_HOME")];
NSString *linesStr = [NSString stringWithContentsOfFile:envFile
encoding:NSUTF8StringEncoding error:nil];
if (linesStr == nil) return;
NSLog(@"[Pre-init] Reading custom environment variables (custom_env.txt)");
NSArray *lines = [linesStr componentsSeparatedByCharactersInSet:
NSCharacterSet.newlineCharacterSet];
for (NSString *line in lines) {
if (line.length == 0 || [line hasPrefix:@"#"]) {
continue;
} else if (![line containsString:@"="]) {
NSLog(@"[Pre-init] Warning: skipped empty value custom env: %@", line);
void init_loadCustomEnv() {
NSString *envvars = getPreference(@"env_variables");
if (envvars == nil) return;
NSLog(@"[JavaLauncher] Reading custom environment variables");
for (NSString *line in [envvars componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceCharacterSet]) {
if (![line containsString:@"="]) {
NSLog(@"[JavaLauncher] Warning: skipped empty value custom env variable: %@", line);
continue;
}
NSRange range = [line rangeOfString:@"="];
NSString *key = [line substringToIndex:range.location];
NSString *value = [line substringFromIndex:range.location+range.length];
setenv(key.UTF8String, value.UTF8String, 1);
NSLog(@"[Pre-init] Added custom env: %@", line);
NSLog(@"[JavaLauncher] Added custom env variable: %@", line);
}
}
void init_loadCustomJvmFlags() {
NSString *jvmargs = getPreference(@"java_args");
if (jvmargs == nil) return;
BOOL isFirstArg = YES;
NSLog(@"[JavaLauncher] Reading custom JVM flags");
for (NSString *jvmarg in [jvmargs componentsSeparatedByString:@" -"]) {
if ([jvmarg length] == 0) continue;
//margv[margc] = (char *) [jvmarg UTF8String];
@@ -108,6 +103,7 @@ NSString* environmentFailsafes(int minVersion) {
}
int launchJVM(NSString *username, id launchTarget, int width, int height, int minVersion) {
init_loadDefaultEnv();
init_loadCustomEnv();
NSString *librariesPath = [NSString stringWithFormat:@"%s/libs", getenv("BUNDLE_PATH")];
+1 -1
View File
@@ -86,7 +86,6 @@ void fillDefaultWarningDict() {
setDefaultValueForPref(warnPrefDict, @"local_warn", @YES);
setDefaultValueForPref(warnPrefDict, @"mem_warn", @YES);
setDefaultValueForPref(warnPrefDict, @"auto_ram_warn", @YES);
setDefaultValueForPref(warnPrefDict, @"legacy_device_warn", @YES);
setDefaultValueForPref(warnPrefDict, @"limited_ram_warn", @YES);
}
@@ -133,6 +132,7 @@ void loadPreferences(BOOL reset) {
setDefaultValueForPref(envPrefDict, @"default_gamepad_ctrl", @"default.json");
setDefaultValueForPref(envPrefDict, @"game_directory", @"default");
setDefaultValueForPref(envPrefDict, @"java_args", @"");
setDefaultValueForPref(envPrefDict, @"env_variables", @"");
setDefaultValueForPref(envPrefDict, @"allocated_memory", [NSNumber numberWithFloat:roundf((NSProcessInfo.processInfo.physicalMemory / 1048576) * 0.25)]);
setDefaultValueForPref(envPrefDict, @"jitstreamer_server", @"69.69.0.1");
setDefaultValueForPref(envPrefDict, @"max_framerate", @YES);
@@ -379,6 +379,12 @@ typedef void(^CreateView)(UITableViewCell *, NSString *, NSDictionary *);
@"type": self.typeTextField,
@"enableCondition": whenNotInGame
},
@{@"key": @"env_variables",
@"hasDetail": @YES,
@"icon": @"terminal",
@"type": self.typeTextField,
@"enableCondition": whenNotInGame
},
@{@"key": @"auto_ram",
@"hasDetail": @YES,
@"icon": @"slider.horizontal.3",
+12 -33
View File
@@ -104,24 +104,6 @@ void init_checkForJailbreak() {
}
void init_logDeviceAndVer(char *argument) {
// Legacy IDs
NSDictionary *legacyIDs = @{
@"iPhone6,1" : @"iPhone 5s",
@"iPhone6,2" : @"iPhone 5s",
@"iPhone7,1" : @"iPhone 6 Plus",
@"iPhone7,2" : @"iPhone 6",
@"iPad4,1" : @"iPad Air (1st generation)",
@"iPad4,2" : @"iPad Air (1st generation)",
@"iPad4,3" : @"iPad Air (1st generation)",
@"iPad4,4" : @"iPad mini (2nd generation)",
@"iPad4,5" : @"iPad mini (2nd generation)",
@"iPad4,6" : @"iPad mini (2nd generation)",
@"iPad4,7" : @"iPad mini (3rd generation)",
@"iPad4,8" : @"iPad mini (3rd generation)",
@"iPad4,9" : @"iPad mini (3rd generation)",
@"iPod7,1" : @"iPod touch (6th generation)"
};
// PojavLauncher version
NSLog(@"[Pre-Init] PojavLauncher INIT!");
NSLog(@"[Pre-Init] Version: %@-%s", NSBundle.mainBundle.infoDictionary[@"CFBundleShortVersionString"], CONFIG_TYPE);
@@ -144,14 +126,6 @@ void init_logDeviceAndVer(char *argument) {
NSLog(@"[Pre-Init] Device: %s", getenv("POJAV_DETECTEDHW"));
NSLog(@"[Pre-Init] iOS %s (%s)", getenv("POJAV_DETECTEDSW"), getenv("POJAV_DETECTEDINST"));
if(legacyIDs[[HostManager GetModelIdentifier]] != nil) {
NSLog(@"[Pre-Init] Currently running on legacy device");
} else {
if([HostManager GetPlatformVersion].floatValue < 14) {
NSLog(@"[Pre-Init] Currently running on legacy iOS");
}
}
NSString *jvmPath = [NSString stringWithFormat:@"%s/java_runtimes", getenv("BUNDLE_PATH")];
if (![fm fileExistsAtPath:jvmPath]) {
#if !CONFIG_RELEASE
@@ -185,16 +159,20 @@ void init_migrateDirIfNecessary() {
}
void init_migrateToPlist(char* prefKey, char* filename) {
// NSString *readmeStr = @"#README - this file has been merged into launcher_preferences.plist";
NSError *error;
NSString *str, *path_str;
// overrideargs.txt
path_str = [NSString stringWithFormat:@"%s/%s", getenv("POJAV_HOME"), filename];
str = [NSString stringWithContentsOfFile:path_str encoding:NSUTF8StringEncoding error:&error];
NSString *path_str = [NSString stringWithFormat:@"%s/%s", getenv("POJAV_HOME"), filename];
NSLog(@"[Pre-Init] Beginning migration for file \"%@\"", path_str);
NSString *str = [NSString stringWithContentsOfFile:path_str encoding:NSUTF8StringEncoding error:&error];
if (error == nil && ![str hasPrefix:@"#README"]) {
setPreference(@(prefKey), str);
NSString *finalized = @"";
for (NSString *line in [str componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet]) {
finalized = [finalized stringByAppendingString:[NSString stringWithFormat:@"%@ ", line]];
}
setPreference(@(prefKey), finalized);
[@"#README - this file has been merged into launcher_preferences.plist" writeToFile:path_str atomically:YES encoding:NSUTF8StringEncoding error:nil];
} else {
NSLog(@"[Pre-Init] File \"%@\" was already migrated");
}
}
@@ -388,6 +366,7 @@ int main(int argc, char *argv[]) {
init_migrateToPlist("selected_version", "config_ver.txt");
init_migrateToPlist("java_args", "overrideargs.txt");
init_migrateToPlist("env_variables", "custom_env.txt");
// If sandbox is disabled, W^X JIT can be enabled by PojavLauncher itself
if (!isJITEnabled(true) && getEntitlementValue(@"com.apple.private.security.no-sandbox")) {
Binary file not shown.
@@ -218,6 +218,9 @@
"preference.title.java_args" = "JVM Launch arguments";
"preference.detail.java_args" = "Pass arguments to Java when launching Minecraft. Be careful, this can make the game crash if modified incorrectly.";
"preference.placeholder.java_args" = "Specify arguments...";
"preference.title.env_variables" = "Environment variables";
"preference.detail.env_variables" = "Set custom environment variables when launching Minecraft. Be careful, this can make the game crash if modified incorrectly.";
"preference.placeholder.env_variables" = "Specify variables...";
"preference.title.auto_ram" = "Auto RAM";
"preference.detail.auto_ram" = "Enables automatic RAM adjuster";
"preference.warn.auto_ram" = "Disabling this option on an unjailbroken device can create instability if altered. Proceed with caution.";