From 3c87663d024bdffdf489c58de9059bd32fc9d9ac Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Wed, 15 Mar 2023 14:51:31 +0100 Subject: [PATCH] add icon, fix bug in dark theme --- .github/workflows/build.yml | 5 +- .gitignore | 1 + build.py | 204 +++++++++++++++++++----------- go.mod | 1 + go.sum | 2 + icon.png | Bin 0 -> 21683 bytes ui/gui.go | 58 ++++----- ui/gui/pages/page.go | 5 +- ui/gui/pages/settings/settings.go | 6 +- 9 files changed, 173 insertions(+), 109 deletions(-) create mode 100644 icon.png diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1ed9872..7d3fee0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,7 +47,10 @@ jobs: env: REPO_KEY: ${{ secrets.REPO_KEY }} - - run: go get ./cmd/bedrocktool + - name: dependencies + run: | + go get ./cmd/bedrocktool + go install gioui.org/cmd/gogio@latest - name: build id: build diff --git a/.gitignore b/.gitignore index 37f0c98..f85114e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ token.json *.bmp *.bin *.log +*.syso /bedrocktool /bedrocktool-* diff --git a/build.py b/build.py index c0e340b..b78da39 100644 --- a/build.py +++ b/build.py @@ -16,12 +16,10 @@ print(f"VER: {VER}") print(f"TAG: {TAG}") GITHUB_OUTPUT = os.getenv("GITHUB_OUTPUT") - if GITHUB_OUTPUT: with open(GITHUB_OUTPUT, "a") as f: f.write(f"release_tag=r{VER}\n") - with open("./subcommands/resourcepack-d/resourcepack-d.go", "rb") as f: PACK_SUPPORT = f.read(100).count(b"package ") > 0 print(f"Pack Support: {PACK_SUPPORT}") @@ -35,91 +33,149 @@ PLATFORMS = [ #("android", ["arm64"], ".apk") ] -platform_filter = "" -arch_filter = "" -if len(sys.argv) > 1: - platform_filter = sys.argv[1] -if len(sys.argv) > 2: - arch_filter = sys.argv[2] +def clean(): + if os.path.exists("./tmp"): + shutil.rmtree("./tmp") + if os.path.exists("./builds"): + shutil.rmtree("./builds") + if os.path.exists("./updates"): + shutil.rmtree("./updates") + for file in os.listdir("./cmd/bedrocktool"): + if file.endswith(".syso"): + os.remove(f"./cmd/bedrocktool/{file}") -if os.path.exists("./tmp"): - shutil.rmtree("./tmp") -os.mkdir("./tmp") +def make_dirs(): + os.mkdir("./tmp") + os.mkdir("./builds") + os.mkdir("./updates") -if os.path.exists("./builds"): - shutil.rmtree("./builds") -os.mkdir("./builds") -if os.path.exists("./updates"): - shutil.rmtree("./updates") -os.mkdir("./updates") +def build_cli(platform: str, arch: str, env_in: dict[str,str], tags: list[str], compiled_path: str): + env = {} + env.update(env_in) + env.update({ + "GOOS": platform, + "GOARCH": arch, + }) + args = [ + "go", "build", + "-ldflags", LDFLAGS, + "-trimpath", + "-tags", ",".join(tags), + "-o", compiled_path, + "-v" + ] + args.append("./cmd/bedrocktool") -for (platform_name, archs, ext) in PLATFORMS: - if platform_filter and platform_filter != platform_name: - continue - archs = [a for a in archs if arch_filter == "" or a == arch_filter] - if len(archs) == 0: - continue - for GUI in [False, True]: - if platform_name in ["android"] and not GUI: + env2 = os.environ.copy() + env2.update(env) + subprocess.run(args, env=env2).check_returncode() + + +def build_gui(platform: str, arch: str, env, tags: list[str], compiled_path: str): + ldflags = LDFLAGS + if platform == "windows": + ldflags = "-H=windows " + ldflags + args = [ + "gogio", + "-arch", arch, + "-target", platform, + "-icon", "icon.png", + "-tags", ",".join(tags), + "-ldflags", ldflags, + "-o", compiled_path, + "-x" + ] + if platform in ["android", "ios"]: + args.extend(["-appid", APP_ID]) + args.append("./cmd/bedrocktool") + + env2 = os.environ.copy() + env2.update(env) + subprocess.run(args, env=env2).check_returncode() + + +def package(platform: str, arch: str, compiled_path: str, GUI: bool, ext: str): + SUB1 = '-gui' if GUI else '' + exe_out_path = f"./builds/{NAME}-{platform}-{arch}-{TAG}{SUB1}{ext}" + + # create hash and copy + with open(compiled_path, "rb") as f: + exe_data = f.read() + sha = binascii.b2a_base64(hashlib.sha256(exe_data).digest()).decode("utf8").split("\n")[0] + shutil.copy(compiled_path, exe_out_path) + + # create update + updates_dir = f"./updates/{NAME}{SUB1}" + os.makedirs(updates_dir, exist_ok=True) + with open(f"{updates_dir}/{platform}-{arch}.json", "w") as f: + f.write(json.dumps({ + "Version": TAG, + "Sha256": sha, + }, indent=2)) + + # write update data + os.makedirs(f"{updates_dir}/{TAG}", exist_ok=True) + with gzip.open(f"{updates_dir}/{TAG}/{platform}-{arch}.gz", "wb") as f: + f.write(exe_data) + + os.remove(compiled_path) + + +def build_all(platform_filter: str, arch_filter: str): + for (platform, archs, ext) in PLATFORMS: + if platform_filter and platform_filter != platform: continue + archs = [a for a in archs if arch_filter == "" or a == arch_filter] + if len(archs) == 0: + continue + for GUI in [False, True]: + if platform in ["android"] and not GUI: + continue - print(f"Building {platform_name} gui: {GUI}") - SUB1 = '-gui' if GUI else '' - name = f"{NAME}{SUB1}" + print(f"Building {platform} gui: {GUI}") + SUB1 = '-gui' if GUI else '' + name = f"{NAME}{SUB1}" - tags = [] - if PACK_SUPPORT: - tags.append("packs") - if GUI: - tags.append("gui") + tags = [] + if PACK_SUPPORT: + tags.append("packs") + if GUI: + tags.append("gui") - env = { - "GOVCS": "*:off" - } + env = { + "GOVCS": "*:off" + } - for arch in archs: - compiled_path = f"./tmp/{platform_name}-{arch}{SUB1}/{name}{ext}" - os.makedirs(os.path.dirname(compiled_path), exist_ok=True) - env.update({ - "GOOS": platform_name, - "GOARCH": arch, - }) - args = [ - "go", "build", - "-ldflags", LDFLAGS, - "-trimpath", - "-tags", ",".join(tags), - "-v", - "-o", compiled_path, - ] - args.append("./cmd/bedrocktool") - print(args) + for arch in archs: + compiled_path = f"./tmp/{platform}-{arch}{SUB1}/{name}{ext}" + os.makedirs(os.path.dirname(compiled_path), exist_ok=True) - env2 = os.environ.copy() - env2.update(env) + if GUI and platform != "linux": + build_gui(platform, arch, env, tags, compiled_path) + else: + build_cli(platform, arch, env, tags, compiled_path) + + package(platform, arch, compiled_path, GUI, ext) - out = subprocess.run(args, env=env2) - out.check_returncode() - exe_out_path = f"./builds/{NAME}-{platform_name}-{arch}-{TAG}{SUB1}{ext}" +def main(): + platform_filter = "" + arch_filter = "" + if len(sys.argv) > 1: + platform_filter = sys.argv[1] - with open(compiled_path, "rb") as f: - exe_data = f.read() - sha = binascii.b2a_base64(hashlib.sha256(exe_data).digest()).decode("utf8").split("\n")[0] - shutil.copy(compiled_path, exe_out_path) + if len(sys.argv) > 2: + arch_filter = sys.argv[2] + + if platform_filter == "clean": + clean() + return - updates_dir = f"./updates/{NAME}{SUB1}" - os.makedirs(updates_dir, exist_ok=True) - with open(f"{updates_dir}/{platform_name}-{arch}.json", "w") as f: - f.write(json.dumps({ - "Version": TAG, - "Sha256": sha, - }, indent=2)) - - os.makedirs(f"{updates_dir}/{TAG}", exist_ok=True) - with gzip.open(f"{updates_dir}/{TAG}/{platform_name}-{arch}.gz", "wb") as f: - f.write(exe_data) + clean() + make_dirs() + build_all(platform_filter, arch_filter) - os.remove(compiled_path) + +main() \ No newline at end of file diff --git a/go.mod b/go.mod index 33057f3..364ebfb 100644 --- a/go.mod +++ b/go.mod @@ -39,6 +39,7 @@ require ( require ( gioui.org/cpu v0.0.0-20210817075930-8d6a761490d2 // indirect gioui.org/shader v1.0.6 // indirect + git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 // indirect github.com/benoitkugler/textlayout v0.3.0 // indirect github.com/brentp/intintmap v0.0.0-20190211203843-30dc0ade9af9 // indirect github.com/changkun/lockfree v0.0.1 // indirect diff --git a/go.sum b/go.sum index 32e14bb..e6237e9 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ gioui.org/shader v1.0.6 h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y= gioui.org/shader v1.0.6/go.mod h1:mWdiME581d/kV7/iEhLmUgUK5iZ09XR5XpduXzbePVM= gioui.org/x v0.0.0-20230313161557-05b40af72ed0 h1:jjdcmnjM8R1yhiBBbPinm5TLNs6uRei25fjnvgYBTjU= gioui.org/x v0.0.0-20230313161557-05b40af72ed0/go.mod h1:kmHRtak7XgGZYYuqFgDBJ42PbQjPrV/xOpw9FLx3eVY= +git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0 h1:bGG/g4ypjrCJoSvFrP5hafr9PPB5aw8SjcOWWila7ZI= +git.wow.st/gmp/jni v0.0.0-20210610011705-34026c7e22d0/go.mod h1:+axXBRUTIDlCeE73IKeD/os7LoEnTKdkp8/gQOFjqyo= github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/benoitkugler/pstokenizer v1.0.0/go.mod h1:l1G2Voirz0q/jj0TQfabNxVsa8HZXh/VMxFSRALWTiE= diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92bd11da95d4dd2fd2c2ab33145887902a9cddfa GIT binary patch literal 21683 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