From 713f8637e86dd24deac596a457f156f2bdc5e142 Mon Sep 17 00:00:00 2001
From: Renegade-Master <renegade@renegade-master.com>
Date: Sun, 28 Jan 2024 16:39:00 +0000
Subject: [PATCH] WIP Add to PostInstall;

---
 .github/workflows/docker-build.yml | 11 ++++-----
 go.mod                             |  1 +
 go.sum                             |  2 ++
 internal/utils.go                  | 37 ++++++++++++++++++++++++++----
 4 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml
index 6d9dd62..82b26e8 100644
--- a/.github/workflows/docker-build.yml
+++ b/.github/workflows/docker-build.yml
@@ -122,7 +122,7 @@ jobs:
             podman-compose.yaml
             ${{ steps.volumes.outputs.configdir }}/Server/GitHubActionTest.ini
             ${{ steps.volumes.outputs.configdir }}/Server/GitHubActionTest_SandboxVars.lua
-            ZomboidDedicatedServer/ProjectZomboid64.json
+            ${{ steps.volumes.outputs.installdir }}/ProjectZomboid64.json
             dedicated-server-install-listing.txt
             dedicated-server-config-listing.txt
             root-fs-listing.txt
@@ -138,7 +138,6 @@ jobs:
     strategy:
       matrix:
         system: [ podman ]
-        #system: [ docker, docker-compose, podman ]
     steps:
       - name: Checkout Repository
         uses: actions/checkout@v3
@@ -196,11 +195,11 @@ jobs:
       - name: Test - Server JVM Configuration Applied
         run: |
           check_for_config() {
-            if ! grep -q -iE "$1" "./ZomboidDedicatedServer/ProjectZomboid64.json"; then
-              printf "Could not find [%s] in [%s]\n" "$1" "./ZomboidDedicatedServer/ProjectZomboid64.json"
+            if ! grep -q -iE "$1" "${{ steps.volumes.outputs.installdir }}/ProjectZomboid64.json"; then
+              printf "Could not find [%s] in [%s]\n" "$1" "${{ steps.volumes.outputs.installdir }}/ProjectZomboid64.json"
               exit 1
             else
-              printf "Found [%s] in [%s]\n" "$1" "./ZomboidDedicatedServer/ProjectZomboid64.json"
+              printf "Found [%s] in [%s]\n" "$1" "${{ steps.volumes.outputs.installdir }}/ProjectZomboid64.json"
             fi
           }
 
@@ -209,7 +208,7 @@ jobs:
 
       - name: Test - Server Configuration Applied
         run: |
-          install_directory="./ZomboidDedicatedServer"
+          install_directory="${{ steps.volumes.outputs.installdir }}"
           workshop_directory="${install_directory}/steamapps/workshop"
           mods_directory="${workshop_directory}/content/108600/522891356/mods"
           bedford_maps="${mods_directory}/Bedford Falls/media/maps"
diff --git a/go.mod b/go.mod
index 2563053..daa6c2e 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,7 @@ module renegade-master/zomboid-dedicated-server
 go 1.21.0
 
 require (
+	github.com/buger/jsonparser v1.1.1
 	github.com/mitchellh/go-ps v1.0.0
 	gopkg.in/ini.v1 v1.67.0
 )
diff --git a/go.sum b/go.sum
index b965e4e..c0a1175 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
+github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
diff --git a/internal/utils.go b/internal/utils.go
index 88a921a..be0506f 100644
--- a/internal/utils.go
+++ b/internal/utils.go
@@ -17,6 +17,7 @@
 package internal
 
 import (
+	"github.com/buger/jsonparser"
 	"github.com/mitchellh/go-ps"
 	"gopkg.in/ini.v1"
 	"log"
@@ -135,20 +136,46 @@ func TestFirstRun() {
 
 func ApplyPostInstallConfig() {
 	log.Println("Applying PostInstall Config")
-	configFile := configDir + "Server/" + os.Getenv("SERVER_NAME") + ".ini"
+	serverConfigFile := configDir + "Server/" + os.Getenv("SERVER_NAME") + ".ini"
+	jvmConfigFile := baseGameDir + "ProjectZomboid64.json"
 	ini.PrettyFormat = false
 
-	if cfg, err := ini.Load(configFile); err != nil {
-		log.Fatalf("Could not open Server Config File [%s]. Error:\n%s\n", configFile, err)
+	if cfg, err := ini.Load(serverConfigFile); err != nil {
+		log.Fatalf("Could not open Server Config File [%s]. Error:\n%s\n", serverConfigFile, err)
 	} else {
 		cfg.Section("").Key("RCONPort").SetValue(os.Getenv("RCON_PORT"))
 		cfg.Section("").Key("RCONPassword").SetValue(os.Getenv("RCON_PASSWORD"))
 
-		if err := cfg.SaveTo(configFile); err != nil {
-			log.Fatalf("Could not save changes to Server Config File [%s]. Error:\n%s\n", configFile, err)
+		if err := cfg.SaveTo(serverConfigFile); err != nil {
+			log.Fatalf("Could not save changes to Server Config File [%s]. Error:\n%s\n", serverConfigFile, err)
 		}
 	}
 
+	values := map[string]string{
+		"-Xmx.*": "-Xmx" + os.Getenv("MAX_RAM"),
+	}
+
+	if file, err := os.ReadFile(jvmConfigFile); err != nil {
+		log.Fatalf("Could not open File [%s] for editing. Error:\n%s\n", jvmConfigFile, err)
+	} else {
+		idx := 0
+
+		if offset, err := jsonparser.ArrayEach(file, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
+			log.Printf("Found Key: [%s] at Index [%d] position [%d]\n", value, idx, offset)
+			jsonparser.Set(file)
+
+			idx++
+		}, "vmArgs"); err != nil {
+			log.Fatalf("Error encountered when Parsing JSON:\n%s\n", err)
+		} else {
+			log.Printf("Found Key at position [%d]\n", offset)
+		}
+
+		//if err := os.WriteFile(jvmConfigFile, newFile, 0444); err != nil {
+		//	log.Fatalf("Could not write new content [%s] to file [%s]. Error:\n%s\n", newFile, jvmConfigFile, err)
+		//}
+	}
+
 	log.Println("PostInstall Config Applied!")
 }