Migrate environment variables to preferences view controller
Also, remove some more legacy code + make the migration code better
This commit is contained in:
1 parent
e75858a545
commit
4cff4dc949
6 files changed
+35
-51
No files matched your search
+13
-17
@@ -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")];
|
||||
|
||||
@@ -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
@@ -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.";
|
||||
|
||||
Reference in new issue
Block a user