From 8c740097d417ab3545fa38ae15fd9fe9b627d71c Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 12 May 2023 19:28:44 -0400 Subject: [PATCH 01/19] [META] Try To Fix CLI Release Action Again --- .github/workflows/release_cli.yml | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release_cli.yml b/.github/workflows/release_cli.yml index 012df6a7..a0943102 100644 --- a/.github/workflows/release_cli.yml +++ b/.github/workflows/release_cli.yml @@ -4,13 +4,29 @@ on: workflow_dispatch: jobs: + # I hate this etc + get_version: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.pkg-version.outputs.version }} + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Setup Rust Toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: Get Package Version + id: pkg-version + run: echo "version=$(cargo metadata --no-deps --format-version=1 --no-default-features | jq -r '.packages[] | select(.name=="owmods_cli") | .version')" >> $GITHUB_OUTPUT release: permissions: contents: write strategy: fail-fast: false matrix: - platform: [ubuntu-20.04] + platform: [ubuntu-20.04, windows-latest] + needs: get_version runs-on: ${{ matrix.platform }} steps: @@ -48,20 +64,16 @@ jobs: env: ANALYTICS_API_KEY: ${{ secrets.ANALYTICS_API_KEY }} - - name: Get Package Version - id: pkg-version - run: echo "verison=$(cargo xtask cli_version)" >> $GITHUB_OUTPUT - - name: Upload CLI uses: softprops/action-gh-release@v1 with: - name: Outer Wilds Mod Manager CLI Version ${{ steps.pkg-version.outputs.version }} - tag_name: cli_v${{ steps.pkg-version.outputs.version }} + name: Outer Wilds Mod Manager CLI Version ${{ needs.get_version.outputs.version }} + tag_name: cli_v${{ needs.get_version.outputs.version }} fail_on_unmatched_files: false generate_release_notes: false draft: true files: | owmods.tar.zst - target/debian/owmods-cli_${{ steps.pkg-version.outputs.version }}_amd64.deb + target/debian/owmods-cli_${{ needs.get_version.outputs.version }}_amd64.deb target/release/owmods target/release/owmods.exe -- 2.51.2 From f2671afee15d8b9eee2cfa1cd09c9db9c4507c59 Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 12 May 2023 22:23:35 -0400 Subject: [PATCH 02/19] [GUI] Fix Window Not Focusing On Protocol Install --- owmods_gui/backend/Cargo.toml | 2 +- owmods_gui/backend/tauri.conf.json | 3 ++- .../frontend/src/components/modals/InstallFromModal.tsx | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/owmods_gui/backend/Cargo.toml b/owmods_gui/backend/Cargo.toml index 205df0a5..23518547 100644 --- a/owmods_gui/backend/Cargo.toml +++ b/owmods_gui/backend/Cargo.toml @@ -11,7 +11,7 @@ tauri-build = { version = "1.3.0", features = [] } owmods_core = { version = "0.6.0", path = "../../owmods_core" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.3.0", features = ["app-all", "dialog-ask", "dialog-confirm", "dialog-message", "dialog-open", "dialog-save", "os-all", "shell-open", "updater", "window-close", "window-set-title"] } +tauri = { version = "1.3.0", features = ["app-all", "dialog-ask", "dialog-confirm", "dialog-message", "dialog-open", "dialog-save", "os-all", "shell-open", "updater", "window-close", "window-set-focus", "window-set-title"] } anyhow = "1.0.69" tokio = { version = "1.25.0", features = ["sync", "macros"] } log = { version = "0.4.17", features = ["std", "serde"] } diff --git a/owmods_gui/backend/tauri.conf.json b/owmods_gui/backend/tauri.conf.json index 82deed92..24df2ff9 100644 --- a/owmods_gui/backend/tauri.conf.json +++ b/owmods_gui/backend/tauri.conf.json @@ -31,7 +31,8 @@ }, "window": { "setTitle": true, - "close": true + "close": true, + "setFocus": true } }, "bundle": { diff --git a/owmods_gui/frontend/src/components/modals/InstallFromModal.tsx b/owmods_gui/frontend/src/components/modals/InstallFromModal.tsx index 76177e58..4da529bf 100644 --- a/owmods_gui/frontend/src/components/modals/InstallFromModal.tsx +++ b/owmods_gui/frontend/src/components/modals/InstallFromModal.tsx @@ -7,7 +7,7 @@ import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from "re import { BsExclamationTriangleFill } from "react-icons/bs"; import Modal, { ModalHandle } from "./Modal"; import { ProtocolInstallType, ProtocolPayload } from "@types"; -import { UserAttentionType, getCurrent } from "@tauri-apps/api/window"; +import { getCurrent } from "@tauri-apps/api/window"; type SourceType = "UNIQUE_NAME" | "URL" | "ZIP" | "JSON"; @@ -91,7 +91,7 @@ const InstallFromModal = forwardRef(function InstallFromModal(_: object, ref) { setPrerelease(protocolPayload.installType === "installPreRelease"); } modalRef.current?.open(); - getCurrent().requestUserAttention(UserAttentionType.Critical); + getCurrent().setFocus().catch(console.warn); } }) .then(() => commands.popProtocolURL()) -- 2.51.2 From d35c695de0be44797b5efc1e9963d6764be0a38a Mon Sep 17 00:00:00 2001 From: JohnCorby Date: Fri, 12 May 2023 23:22:49 -0700 Subject: [PATCH 03/19] [GUI] make log message selectable --- owmods_gui/frontend/src/styles/logs.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/owmods_gui/frontend/src/styles/logs.scss b/owmods_gui/frontend/src/styles/logs.scss index bfde3af5..49812864 100644 --- a/owmods_gui/frontend/src/styles/logs.scss +++ b/owmods_gui/frontend/src/styles/logs.scss @@ -24,6 +24,8 @@ $log-border: 1px solid var(--accent-bg); & .message { flex-grow: 1; width: 65%; + -webkit-user-select: text; + user-select: text; } & .sender { -- 2.51.2 From 2cd670a853eb30c64e334a6565848bbda2583d9c Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 11:40:17 -0400 Subject: [PATCH 04/19] [ALL] Update Deps --- Cargo.lock | 12 +-- owmods_gui/backend/Cargo.toml | 2 +- owmods_gui/backend/tauri.conf.json | 1 - owmods_gui/frontend/pnpm-lock.yaml | 156 ++++++++++++++--------------- 4 files changed, 85 insertions(+), 86 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7dbb0469..e16be2e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1345,9 +1345,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21" +checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" dependencies = [ "bytes", "fnv", @@ -3000,9 +3000,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.8.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -3013,9 +3013,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" dependencies = [ "core-foundation-sys", "libc", diff --git a/owmods_gui/backend/Cargo.toml b/owmods_gui/backend/Cargo.toml index 23518547..45030483 100644 --- a/owmods_gui/backend/Cargo.toml +++ b/owmods_gui/backend/Cargo.toml @@ -11,7 +11,7 @@ tauri-build = { version = "1.3.0", features = [] } owmods_core = { version = "0.6.0", path = "../../owmods_core" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.3.0", features = ["app-all", "dialog-ask", "dialog-confirm", "dialog-message", "dialog-open", "dialog-save", "os-all", "shell-open", "updater", "window-close", "window-set-focus", "window-set-title"] } +tauri = { version = "1.3.0", features = ["app-all", "dialog-ask", "dialog-confirm", "dialog-message", "dialog-open", "dialog-save", "os-all", "shell-open", "updater", "window-set-focus", "window-set-title"] } anyhow = "1.0.69" tokio = { version = "1.25.0", features = ["sync", "macros"] } log = { version = "0.4.17", features = ["std", "serde"] } diff --git a/owmods_gui/backend/tauri.conf.json b/owmods_gui/backend/tauri.conf.json index 24df2ff9..da28521b 100644 --- a/owmods_gui/backend/tauri.conf.json +++ b/owmods_gui/backend/tauri.conf.json @@ -31,7 +31,6 @@ }, "window": { "setTitle": true, - "close": true, "setFocus": true } }, diff --git a/owmods_gui/frontend/pnpm-lock.yaml b/owmods_gui/frontend/pnpm-lock.yaml index 6b567d95..db038a2d 100644 --- a/owmods_gui/frontend/pnpm-lock.yaml +++ b/owmods_gui/frontend/pnpm-lock.yaml @@ -371,10 +371,10 @@ packages: to-fast-properties: 2.0.0 dev: true - /@esbuild/android-arm64@0.17.18: + /@esbuild/android-arm64@0.17.19: resolution: { - integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw== + integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== } engines: { node: ">=12" } cpu: [arm64] @@ -383,10 +383,10 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.17.18: + /@esbuild/android-arm@0.17.19: resolution: { - integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw== + integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== } engines: { node: ">=12" } cpu: [arm] @@ -395,10 +395,10 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.17.18: + /@esbuild/android-x64@0.17.19: resolution: { - integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg== + integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== } engines: { node: ">=12" } cpu: [x64] @@ -407,10 +407,10 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.17.18: + /@esbuild/darwin-arm64@0.17.19: resolution: { - integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ== + integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== } engines: { node: ">=12" } cpu: [arm64] @@ -419,10 +419,10 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.17.18: + /@esbuild/darwin-x64@0.17.19: resolution: { - integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A== + integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== } engines: { node: ">=12" } cpu: [x64] @@ -431,10 +431,10 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.17.18: + /@esbuild/freebsd-arm64@0.17.19: resolution: { - integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA== + integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== } engines: { node: ">=12" } cpu: [arm64] @@ -443,10 +443,10 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.17.18: + /@esbuild/freebsd-x64@0.17.19: resolution: { - integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew== + integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== } engines: { node: ">=12" } cpu: [x64] @@ -455,10 +455,10 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.17.18: + /@esbuild/linux-arm64@0.17.19: resolution: { - integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ== + integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== } engines: { node: ">=12" } cpu: [arm64] @@ -467,10 +467,10 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.17.18: + /@esbuild/linux-arm@0.17.19: resolution: { - integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg== + integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== } engines: { node: ">=12" } cpu: [arm] @@ -479,10 +479,10 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.17.18: + /@esbuild/linux-ia32@0.17.19: resolution: { - integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ== + integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== } engines: { node: ">=12" } cpu: [ia32] @@ -491,10 +491,10 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.17.18: + /@esbuild/linux-loong64@0.17.19: resolution: { - integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ== + integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== } engines: { node: ">=12" } cpu: [loong64] @@ -503,10 +503,10 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.17.18: + /@esbuild/linux-mips64el@0.17.19: resolution: { - integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA== + integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== } engines: { node: ">=12" } cpu: [mips64el] @@ -515,10 +515,10 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.17.18: + /@esbuild/linux-ppc64@0.17.19: resolution: { - integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ== + integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== } engines: { node: ">=12" } cpu: [ppc64] @@ -527,10 +527,10 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.17.18: + /@esbuild/linux-riscv64@0.17.19: resolution: { - integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA== + integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== } engines: { node: ">=12" } cpu: [riscv64] @@ -539,10 +539,10 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.17.18: + /@esbuild/linux-s390x@0.17.19: resolution: { - integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw== + integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== } engines: { node: ">=12" } cpu: [s390x] @@ -551,10 +551,10 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.17.18: + /@esbuild/linux-x64@0.17.19: resolution: { - integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA== + integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== } engines: { node: ">=12" } cpu: [x64] @@ -563,10 +563,10 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.17.18: + /@esbuild/netbsd-x64@0.17.19: resolution: { - integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg== + integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== } engines: { node: ">=12" } cpu: [x64] @@ -575,10 +575,10 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.17.18: + /@esbuild/openbsd-x64@0.17.19: resolution: { - integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA== + integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== } engines: { node: ">=12" } cpu: [x64] @@ -587,10 +587,10 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.17.18: + /@esbuild/sunos-x64@0.17.19: resolution: { - integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg== + integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== } engines: { node: ">=12" } cpu: [x64] @@ -599,10 +599,10 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.17.18: + /@esbuild/win32-arm64@0.17.19: resolution: { - integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg== + integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== } engines: { node: ">=12" } cpu: [arm64] @@ -611,10 +611,10 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.17.18: + /@esbuild/win32-ia32@0.17.19: resolution: { - integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw== + integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== } engines: { node: ">=12" } cpu: [ia32] @@ -623,10 +623,10 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.17.18: + /@esbuild/win32-x64@0.17.19: resolution: { - integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg== + integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== } engines: { node: ">=12" } cpu: [x64] @@ -1303,8 +1303,8 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true dependencies: - caniuse-lite: 1.0.30001486 - electron-to-chromium: 1.4.392 + caniuse-lite: 1.0.30001487 + electron-to-chromium: 1.4.394 node-releases: 2.0.10 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: true @@ -1354,10 +1354,10 @@ packages: tslib: 2.5.0 dev: true - /caniuse-lite@1.0.30001486: + /caniuse-lite@1.0.30001487: resolution: { - integrity: sha512-uv7/gXuHi10Whlj0pp5q/tsK/32J2QSqVRKQhs2j8VsDCjgyruAh/eEXHF822VqO9yT6iZKw3nRwZRSPBE9OQg== + integrity: sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA== } dev: true @@ -1729,10 +1729,10 @@ packages: jake: 10.8.5 dev: true - /electron-to-chromium@1.4.392: + /electron-to-chromium@1.4.394: resolution: { - integrity: sha512-TXQOMW9tnhIms3jGy/lJctLjICOgyueZFJ1KUtm6DTQ+QpxX3p7ZBwB6syuZ9KBuT5S4XX7bgY1ECPgfxKUdOg== + integrity: sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw== } dev: true @@ -1828,37 +1828,37 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild@0.17.18: + /esbuild@0.17.19: resolution: { - integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w== + integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== } engines: { node: ">=12" } hasBin: true requiresBuild: true optionalDependencies: - "@esbuild/android-arm": 0.17.18 - "@esbuild/android-arm64": 0.17.18 - "@esbuild/android-x64": 0.17.18 - "@esbuild/darwin-arm64": 0.17.18 - "@esbuild/darwin-x64": 0.17.18 - "@esbuild/freebsd-arm64": 0.17.18 - "@esbuild/freebsd-x64": 0.17.18 - "@esbuild/linux-arm": 0.17.18 - "@esbuild/linux-arm64": 0.17.18 - "@esbuild/linux-ia32": 0.17.18 - "@esbuild/linux-loong64": 0.17.18 - "@esbuild/linux-mips64el": 0.17.18 - "@esbuild/linux-ppc64": 0.17.18 - "@esbuild/linux-riscv64": 0.17.18 - "@esbuild/linux-s390x": 0.17.18 - "@esbuild/linux-x64": 0.17.18 - "@esbuild/netbsd-x64": 0.17.18 - "@esbuild/openbsd-x64": 0.17.18 - "@esbuild/sunos-x64": 0.17.18 - "@esbuild/win32-arm64": 0.17.18 - "@esbuild/win32-ia32": 0.17.18 - "@esbuild/win32-x64": 0.17.18 + "@esbuild/android-arm": 0.17.19 + "@esbuild/android-arm64": 0.17.19 + "@esbuild/android-x64": 0.17.19 + "@esbuild/darwin-arm64": 0.17.19 + "@esbuild/darwin-x64": 0.17.19 + "@esbuild/freebsd-arm64": 0.17.19 + "@esbuild/freebsd-x64": 0.17.19 + "@esbuild/linux-arm": 0.17.19 + "@esbuild/linux-arm64": 0.17.19 + "@esbuild/linux-ia32": 0.17.19 + "@esbuild/linux-loong64": 0.17.19 + "@esbuild/linux-mips64el": 0.17.19 + "@esbuild/linux-ppc64": 0.17.19 + "@esbuild/linux-riscv64": 0.17.19 + "@esbuild/linux-s390x": 0.17.19 + "@esbuild/linux-x64": 0.17.19 + "@esbuild/netbsd-x64": 0.17.19 + "@esbuild/openbsd-x64": 0.17.19 + "@esbuild/sunos-x64": 0.17.19 + "@esbuild/win32-arm64": 0.17.19 + "@esbuild/win32-ia32": 0.17.19 + "@esbuild/win32-x64": 0.17.19 dev: true /escalade@3.1.1: @@ -3540,10 +3540,10 @@ packages: glob: 7.2.3 dev: true - /rollup@3.21.6: + /rollup@3.21.7: resolution: { - integrity: sha512-SXIICxvxQxR3D4dp/3LDHZIJPC8a4anKMHd4E3Jiz2/JnY+2bEjqrOokAauc5ShGVNFHlEFjBXAXlaxkJqIqSg== + integrity: sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w== } engines: { node: ">=14.18.0", npm: ">=8.0.0" } hasBin: true @@ -4093,9 +4093,9 @@ packages: terser: optional: true dependencies: - esbuild: 0.17.18 + esbuild: 0.17.19 postcss: 8.4.23 - rollup: 3.21.6 + rollup: 3.21.7 sass: 1.62.1 optionalDependencies: fsevents: 2.3.2 -- 2.51.2 From db9745ac4ed100b79b7ffb77d3ee95fd0f6a226a Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 18:05:27 -0400 Subject: [PATCH 05/19] [META] Make CLI Release Workflow Better --- .github/workflows/release_cli.yml | 26 +++++-------------- .../frontend/src/components/logs/LogList.tsx | 2 +- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release_cli.yml b/.github/workflows/release_cli.yml index a0943102..934f6c73 100644 --- a/.github/workflows/release_cli.yml +++ b/.github/workflows/release_cli.yml @@ -4,21 +4,6 @@ on: workflow_dispatch: jobs: - # I hate this etc - get_version: - runs-on: ubuntu-latest - outputs: - version: ${{ steps.pkg-version.outputs.version }} - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Setup Rust Toolchain - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - - name: Get Package Version - id: pkg-version - run: echo "version=$(cargo metadata --no-deps --format-version=1 --no-default-features | jq -r '.packages[] | select(.name=="owmods_cli") | .version')" >> $GITHUB_OUTPUT release: permissions: contents: write @@ -26,7 +11,6 @@ jobs: fail-fast: false matrix: platform: [ubuntu-20.04, windows-latest] - needs: get_version runs-on: ${{ matrix.platform }} steps: @@ -50,6 +34,10 @@ jobs: env: ANALYTICS_API_KEY: ${{ secrets.ANALYTICS_API_KEY }} + - name: Get Version + id: get_version + run: echo "version=$(./target/release/owmods version)" >> $GITHUB_OUTPUT + - name: Generate Dist Folder if: matrix.platform == 'ubuntu-20.04' run: cargo xtask dist_cli @@ -67,13 +55,13 @@ jobs: - name: Upload CLI uses: softprops/action-gh-release@v1 with: - name: Outer Wilds Mod Manager CLI Version ${{ needs.get_version.outputs.version }} - tag_name: cli_v${{ needs.get_version.outputs.version }} + name: Outer Wilds Mod Manager CLI Version ${{ steps.get_version.outputs.version }} + tag_name: cli_v${{ steps.get_version.outputs.version }} fail_on_unmatched_files: false generate_release_notes: false draft: true files: | owmods.tar.zst - target/debian/owmods-cli_${{ needs.get_version.outputs.version }}_amd64.deb + target/debian/owmods-cli_${{ steps.get_version.outputs.version }}_amd64.deb target/release/owmods target/release/owmods.exe diff --git a/owmods_gui/frontend/src/components/logs/LogList.tsx b/owmods_gui/frontend/src/components/logs/LogList.tsx index 1d3baf47..b54c4a92 100644 --- a/owmods_gui/frontend/src/components/logs/LogList.tsx +++ b/owmods_gui/frontend/src/components/logs/LogList.tsx @@ -24,7 +24,7 @@ const LogList = memo(function LogList(props: LogListProps) { itemContent={(_, data) => ( )} - atBottomThreshold={100} + atBottomThreshold={1000} followOutput alignToBottom /> -- 2.51.2 From 19dfbb800aff890c412b8f76c7e77461cf6725f3 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 18:15:59 -0400 Subject: [PATCH 06/19] [ALL] Bump Version --- Cargo.lock | 6 +++--- owmods_cli/Cargo.toml | 4 ++-- owmods_core/Cargo.toml | 2 +- owmods_gui/backend/Cargo.toml | 4 ++-- owmods_gui/backend/tauri.conf.json | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e16be2e2..dcd92059 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2300,7 +2300,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owmods_cli" -version = "0.6.0" +version = "0.6.1" dependencies = [ "anyhow", "clap", @@ -2315,7 +2315,7 @@ dependencies = [ [[package]] name = "owmods_core" -version = "0.6.0" +version = "0.6.1" dependencies = [ "anyhow", "directories", @@ -2340,7 +2340,7 @@ dependencies = [ [[package]] name = "owmods_gui" -version = "0.6.0" +version = "0.6.1" dependencies = [ "anyhow", "log", diff --git a/owmods_cli/Cargo.toml b/owmods_cli/Cargo.toml index 57f95d59..cab9293f 100644 --- a/owmods_cli/Cargo.toml +++ b/owmods_cli/Cargo.toml @@ -2,7 +2,7 @@ name = "owmods_cli" authors = ["Bwc9876 "] description = "A CLI Tool To Manage OWML Mods" -version = "0.6.0" +version = "0.6.1" edition = "2021" readme = "./README.md" repository = "https://github.com/Bwc9876/ow-mod-man/" @@ -12,7 +12,7 @@ license = "GPL-3.0-or-later" depends = "libssl1.1" [dependencies] -owmods_core = { version = "0.6.0", path = "../owmods_core"} +owmods_core = { version = "0.6.1", path = "../owmods_core"} clap = { version = "4.1.1", features = ["derive"] } colored = "2.0.0" anyhow = "1.0.68" diff --git a/owmods_core/Cargo.toml b/owmods_core/Cargo.toml index e3c64e78..1626c317 100644 --- a/owmods_core/Cargo.toml +++ b/owmods_core/Cargo.toml @@ -2,7 +2,7 @@ name = "owmods_core" authors = ["Bwc9876 "] description = "The core library for the Outer Wilds Mod Manager" -version = "0.6.0" +version = "0.6.1" edition = "2021" readme = "./README.md" license = "GPL-3.0-or-later" diff --git a/owmods_gui/backend/Cargo.toml b/owmods_gui/backend/Cargo.toml index 45030483..e399ad1d 100644 --- a/owmods_gui/backend/Cargo.toml +++ b/owmods_gui/backend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "owmods_gui" -version = "0.6.0" +version = "0.6.1" license = "GPL-3.0-or-later" edition = "2021" @@ -8,7 +8,7 @@ edition = "2021" tauri-build = { version = "1.3.0", features = [] } [dependencies] -owmods_core = { version = "0.6.0", path = "../../owmods_core" } +owmods_core = { version = "0.6.1", path = "../../owmods_core" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tauri = { version = "1.3.0", features = ["app-all", "dialog-ask", "dialog-confirm", "dialog-message", "dialog-open", "dialog-save", "os-all", "shell-open", "updater", "window-set-focus", "window-set-title"] } diff --git a/owmods_gui/backend/tauri.conf.json b/owmods_gui/backend/tauri.conf.json index da28521b..c2ee0431 100644 --- a/owmods_gui/backend/tauri.conf.json +++ b/owmods_gui/backend/tauri.conf.json @@ -7,7 +7,7 @@ }, "package": { "productName": "Outer Wilds Mod Manager", - "version": "0.6.0" + "version": "0.6.1" }, "tauri": { "allowlist": { -- 2.51.2 From 606f366d7810022170c3fcc3642a3135b5f3deaf Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 18:55:59 -0400 Subject: [PATCH 07/19] [ALL] Add Prepatcher Warning --- .cargo/config.toml | 4 +++- owmods_cli/src/main.rs | 13 ++++++++-- owmods_core/src/mods/local.rs | 7 ++++++ owmods_core/src/toggle.rs | 23 ++++++++++++++---- owmods_gui/backend/src/commands.rs | 15 ++++++------ .../src/assets/translations/english.json | 2 ++ owmods_gui/frontend/src/commands.ts | 4 ++-- .../src/components/mods/local/LocalMods.tsx | 24 ++++++++++++++----- .../src/components/mods/local/ValidModRow.tsx | 13 ++++++++-- 9 files changed, 80 insertions(+), 25 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index f0ccbc9a..be2f5026 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,4 @@ [alias] -xtask = "run --package xtask --" \ No newline at end of file +xtask = "run --package xtask --" +lint = "clippy --all-targets -- -D warnings" + diff --git a/owmods_cli/src/main.rs b/owmods_cli/src/main.rs index ed0b2992..06cf0ba0 100644 --- a/owmods_cli/src/main.rs +++ b/owmods_cli/src/main.rs @@ -306,12 +306,21 @@ async fn run_from_cli(cli: BaseCli) -> Result<()> { Commands::Enable { unique_name } | Commands::Disable { unique_name } => { let db = LocalDatabase::fetch(&config.owml_path)?; let enable = matches!(cli.command, Commands::Enable { unique_name: _ }); + let mut show_warnings_for: Vec = vec![]; if unique_name == "*" || unique_name == "all" { for local_mod in db.valid() { - toggle_mod(&local_mod.manifest.unique_name, &db, enable, false)?; + show_warnings_for.extend(toggle_mod( + &local_mod.manifest.unique_name, + &db, + enable, + false, + )?); } } else { - toggle_mod(unique_name, &db, enable, r)?; + show_warnings_for = toggle_mod(unique_name, &db, enable, r)?; + } + for mod_name in show_warnings_for { + warn!("========\n{mod_name} possibly modified game files.\nIn order to disable it completely, use the \"verify game files\" option in Steam / Epic.\nCheck {mod_name}'s readme for more information.\n========") } } Commands::LogServer { port } => { diff --git a/owmods_core/src/mods/local.rs b/owmods_core/src/mods/local.rs index 33e84396..d76c139c 100644 --- a/owmods_core/src/mods/local.rs +++ b/owmods_core/src/mods/local.rs @@ -17,6 +17,12 @@ pub struct LocalMod { pub manifest: ModManifest, } +impl LocalMod { + pub fn uses_pre_patcher(&self) -> bool { + self.manifest.patcher.is_some() + } +} + /// Represents a mod that completely failed to load #[typeshare] #[derive(Serialize, Clone)] @@ -157,6 +163,7 @@ pub struct ModManifest { pub conflicts: Option>, pub paths_to_preserve: Option>, pub warning: Option, + pub patcher: Option, } /// Represents a warning a mod wants to show to the user on start diff --git a/owmods_core/src/toggle.rs b/owmods_core/src/toggle.rs index d979c338..e605be6e 100644 --- a/owmods_core/src/toggle.rs +++ b/owmods_core/src/toggle.rs @@ -56,6 +56,11 @@ pub fn get_mod_enabled(mod_path: &Path) -> Result { /// Toggle a mod to a given enabled value. /// Also support applying this action recursively. /// +/// +/// ## Returns +/// +/// A list of mod names that were disabled and use pre patchers, and therefore **should alert the user to check the mod's README for instructions on how to fully disable it**. +/// /// ## Errors /// /// If we can't read/save to the config files of the mod or (if recursive is true) any of it's dependents. @@ -65,19 +70,27 @@ pub fn toggle_mod( local_db: &LocalDatabase, enabled: bool, recursive: bool, -) -> Result<()> { +) -> Result> { + let mut show_warnings_for: Vec = vec![]; + let local_mod = local_db .get_mod(unique_name) .ok_or_else(|| anyhow!("Mod {} not found", unique_name))?; let config_path = PathBuf::from(&local_mod.mod_path).join("config.json"); + + if !enabled && local_mod.uses_pre_patcher() { + show_warnings_for.push(local_mod.manifest.name.clone()); + } + if config_path.is_file() { let mut config = read_config(&config_path)?; config.enabled = enabled; write_config(&config, &config_path)?; } else { generate_config(&config_path)?; - toggle_mod(unique_name, local_db, enabled, recursive)?; + show_warnings_for.extend(toggle_mod(unique_name, local_db, enabled, recursive)?); } + if recursive { if let Some(deps) = local_mod.manifest.dependencies.as_ref() { for dep in deps.iter() { @@ -98,12 +111,12 @@ pub fn toggle_mod( } } if flag { - toggle_mod( + show_warnings_for.extend(toggle_mod( &dep_mod.manifest.unique_name, local_db, enabled, recursive, - )?; + )?); } } } else { @@ -112,7 +125,7 @@ pub fn toggle_mod( } } } - Ok(()) + Ok(show_warnings_for) } #[cfg(test)] diff --git a/owmods_gui/backend/src/commands.rs b/owmods_gui/backend/src/commands.rs index d0aa4039..9425960a 100644 --- a/owmods_gui/backend/src/commands.rs +++ b/owmods_gui/backend/src/commands.rs @@ -208,24 +208,25 @@ pub async fn toggle_mod( unique_name: &str, enabled: bool, state: tauri::State<'_, State>, -) -> Result { +) -> Result> { let db = state.local_db.read().await; - owmods_core::toggle::toggle_mod(unique_name, &db, enabled, false)?; - Ok(()) + let show_warnings_for = owmods_core::toggle::toggle_mod(unique_name, &db, enabled, false)?; + Ok(show_warnings_for) } #[tauri::command] -pub async fn toggle_all(enabled: bool, state: tauri::State<'_, State>) -> Result { +pub async fn toggle_all(enabled: bool, state: tauri::State<'_, State>) -> Result> { let local_db = state.local_db.read().await; + let mut show_warnings_for: Vec = vec![]; for local_mod in local_db.valid() { - owmods_core::toggle::toggle_mod( + show_warnings_for.extend(owmods_core::toggle::toggle_mod( &local_mod.manifest.unique_name, &local_db, enabled, false, - )?; + )?); } - Ok(()) + Ok(show_warnings_for) } #[tauri::command] diff --git a/owmods_gui/frontend/src/assets/translations/english.json b/owmods_gui/frontend/src/assets/translations/english.json index 41c3c801..4a2f6736 100644 --- a/owmods_gui/frontend/src/assets/translations/english.json +++ b/owmods_gui/frontend/src/assets/translations/english.json @@ -77,6 +77,8 @@ "Outdated": "This mod is outdated, consider updating (latest version is v$payload$)", "PLATFORM": "Platform: $platform$", "PRERELEASE_WARNING": "Prereleases are experimental versions of mods that may not work correctly. Are you sure you want to install?", + "PREPATCHER_WARNING": "$name$ possibly modified game files. In order to disable it completely, use the \"verify game files\" option in Steam / Epic. Check $name$'s readme for more information.", + "PREPATCHER_WARNING_TITLE": "Warning for $name$", "Pink": "Pink", "Purple": "Purple", "RAINBOW": "Rainbow Mode", diff --git a/owmods_gui/frontend/src/commands.ts b/owmods_gui/frontend/src/commands.ts index e5f5a7d5..1dc50c51 100644 --- a/owmods_gui/frontend/src/commands.ts +++ b/owmods_gui/frontend/src/commands.ts @@ -37,8 +37,8 @@ const commandInfo = { getLocalMod: $>("get_local_mod"), getRemoteMod: $>("get_remote_mod"), getLogLine: $>("get_game_message"), - toggleMod: $>("toggle_mod"), - toggleAll: $>("toggle_all"), + toggleMod: $>("toggle_mod"), + toggleAll: $>("toggle_all"), openModFolder: $("open_mod_folder"), openModReadme: $("open_mod_readme"), uninstallMod: $("uninstall_mod"), diff --git a/owmods_gui/frontend/src/components/mods/local/LocalMods.tsx b/owmods_gui/frontend/src/components/mods/local/LocalMods.tsx index 03866102..ba428756 100644 --- a/owmods_gui/frontend/src/components/mods/local/LocalMods.tsx +++ b/owmods_gui/frontend/src/components/mods/local/LocalMods.tsx @@ -7,6 +7,7 @@ import ModValidationModal, { import { useGetTranslation } from "@hooks"; import { memo, useCallback, useEffect, useRef, useState } from "react"; import UnsafeModRow from "./UnsafeModRow"; +import { dialog } from "@tauri-apps/api"; const LocalMods = memo(function LocalMods() { const validationModalRef = useRef(); @@ -20,12 +21,23 @@ const LocalMods = memo(function LocalMods() { commands.refreshLocalDb(); }, []); - const onToggleAll = useCallback((enabled: boolean) => { - commands - .toggleAll({ enabled }) - .then(() => commands.refreshLocalDb()) - .catch(console.warn); - }, []); + const onToggleAll = useCallback( + (enabled: boolean) => { + commands + .toggleAll({ enabled }) + .then((warnings) => { + commands.refreshLocalDb(); + for (const modName of warnings) { + dialog.message(getTranslation("PREPATCHER_WARNING", { name: modName }), { + type: "warning", + title: getTranslation("PREPATCHER_WARNING_TITLE", { name: modName }) + }); + } + }) + .catch(console.warn); + }, + [getTranslation] + ); const onSearch = (newFilter: string) => { if (activeTimeout !== null) { diff --git a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx index dbfd9747..7dc4ed6e 100644 --- a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx +++ b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx @@ -5,6 +5,7 @@ import { confirm } from "@tauri-apps/api/dialog"; import { LocalMod, ModValidationError } from "@types"; import { memo, useCallback } from "react"; import LocalModRow from "./LocalModRow"; +import { dialog } from "@tauri-apps/api"; interface LocalModRowProps { mod: LocalMod; @@ -45,9 +46,17 @@ const ValidModRow = memo(function ValidModRow({ mod, onValidationClick }: LocalM uniqueName: mod.manifest.uniqueName, enabled: newVal }) - .then(() => commands.refreshLocalDb()); + .then((warnings) => { + commands.refreshLocalDb(); + for (const modName of warnings) { + dialog.message(getTranslation("PREPATCHER_WARNING", { name: modName }), { + type: "warning", + title: getTranslation("PREPATCHER_WARNING_TITLE", { name: modName }) + }); + } + }); }, - [mod.manifest.uniqueName] + [mod.manifest.uniqueName, getTranslation] ); const onOpen = useCallback(() => { -- 2.51.2 From a509dcf49a8656df382f98225717fb2fc8c11232 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 22:19:16 -0400 Subject: [PATCH 08/19] [GUI] Make Question Mark Icon Bigger --- owmods_gui/frontend/src/components/nav/Nav.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/owmods_gui/frontend/src/components/nav/Nav.tsx b/owmods_gui/frontend/src/components/nav/Nav.tsx index c56674bb..e298a163 100644 --- a/owmods_gui/frontend/src/components/nav/Nav.tsx +++ b/owmods_gui/frontend/src/components/nav/Nav.tsx @@ -1,10 +1,10 @@ import { BsPlayFill, - BsQuestion, BsGearFill, BsInfoCircleFill, BsBoxArrowInDown, - BsBoxArrowUpRight + BsBoxArrowUpRight, + BsQuestionLg } from "react-icons/bs"; import NavButton from "@components/nav/NavButton"; @@ -113,7 +113,7 @@ const Nav = () => { labelPlacement="bottom" ariaLabel={getTranslation("HELP")} > - + {/* Dropdown uses RTL */} -- 2.51.2 From baddb1a50e8b57c5918cb92e4a7e53b2b80ec12a Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 22:35:29 -0400 Subject: [PATCH 09/19] [GUI] Also Show Pre Patcher Warning On Mod Uninstall --- Cargo.lock | 2 +- owmods_cli/src/logging.rs | 4 ++++ owmods_cli/src/main.rs | 9 +++++--- owmods_core/src/remove.rs | 21 ++++++++++++++++--- owmods_gui/backend/src/commands.rs | 9 +++++--- owmods_gui/frontend/src/commands.ts | 2 +- .../src/components/mods/local/ValidModRow.tsx | 12 ++++++++--- xtask/Cargo.toml | 2 +- 8 files changed, 46 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dcd92059..595c7b4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4759,7 +4759,7 @@ dependencies = [ [[package]] name = "xtask" -version = "0.6.0" +version = "0.6.1" dependencies = [ "anyhow", "clap", diff --git a/owmods_cli/src/logging.rs b/owmods_cli/src/logging.rs index 80ad4fd9..fb1a5b71 100644 --- a/owmods_cli/src/logging.rs +++ b/owmods_cli/src/logging.rs @@ -180,3 +180,7 @@ pub fn log_mod_validation_errors(local_mod: &UnsafeLocalMod, local_db: &LocalDat } } } + +pub fn show_pre_patcher_warning(mod_name: &str) { + warn!("========\n{mod_name} possibly modified game files.\nIn order to disable it completely, use the \"verify game files\" option in Steam / Epic.\nCheck {mod_name}'s readme for more information.\n========"); +} diff --git a/owmods_cli/src/main.rs b/owmods_cli/src/main.rs index 06cf0ba0..d920eef5 100644 --- a/owmods_cli/src/main.rs +++ b/owmods_cli/src/main.rs @@ -27,7 +27,7 @@ mod logging; use cli::{BaseCli, Commands, ModListTypes}; use game::{start_game, start_just_logs}; -use logging::{log_mod_validation_errors, Logger}; +use logging::{log_mod_validation_errors, show_pre_patcher_warning, Logger}; async fn run_from_cli(cli: BaseCli) -> Result<()> { let r = cli.recursive; @@ -272,7 +272,10 @@ async fn run_from_cli(cli: BaseCli) -> Result<()> { unique_name, if r { " and dependencies" } else { "" } ); - remove_mod(local_mod, &db, r)?; + let show_warnings_for = remove_mod(local_mod, &db, r)?; + for mod_name in show_warnings_for { + show_pre_patcher_warning(&mod_name); + } info!("Done"); } else { error!("Mod {} Is Not Installed", unique_name); @@ -320,7 +323,7 @@ async fn run_from_cli(cli: BaseCli) -> Result<()> { show_warnings_for = toggle_mod(unique_name, &db, enable, r)?; } for mod_name in show_warnings_for { - warn!("========\n{mod_name} possibly modified game files.\nIn order to disable it completely, use the \"verify game files\" option in Steam / Epic.\nCheck {mod_name}'s readme for more information.\n========") + show_pre_patcher_warning(&mod_name); } } Commands::LogServer { port } => { diff --git a/owmods_core/src/remove.rs b/owmods_core/src/remove.rs index 248ee243..b9eaecfd 100644 --- a/owmods_core/src/remove.rs +++ b/owmods_core/src/remove.rs @@ -14,26 +14,41 @@ use crate::{ /// Uninstall a mod /// +/// ## Returns +/// +/// A Vec of mods that have pre-patchers and need to have a warning shown to the user +/// /// ## Errors /// /// If we can't delete the mod's folder. /// -pub fn remove_mod(local_mod: &LocalMod, db: &LocalDatabase, recursive: bool) -> Result<()> { +pub fn remove_mod( + local_mod: &LocalMod, + db: &LocalDatabase, + recursive: bool, +) -> Result> { + let mut show_warnings_for: Vec = vec![]; + if PathBuf::from(&local_mod.mod_path).is_dir() { // In case weird circular dep stuff happens, just don't delete it if it doesn't exist remove_dir_all(&local_mod.mod_path)?; + if local_mod.uses_pre_patcher() { + show_warnings_for.push(local_mod.manifest.name.clone()); + } } + if recursive { let empty: &Vec = &vec![]; let deps = local_mod.manifest.dependencies.as_ref().unwrap_or(empty); for dep in deps.iter() { let dep = db.get_mod(dep); if let Some(dep) = dep { - remove_mod(dep, db, true)?; + show_warnings_for.extend(remove_mod(dep, db, true)?); } } } - Ok(()) + + Ok(show_warnings_for) } /// Removes a [FailedMod] diff --git a/owmods_gui/backend/src/commands.rs b/owmods_gui/backend/src/commands.rs index 9425960a..c58c927f 100644 --- a/owmods_gui/backend/src/commands.rs +++ b/owmods_gui/backend/src/commands.rs @@ -285,13 +285,16 @@ pub async fn install_zip(path: &str, state: tauri::State<'_, State>) -> Result { } #[tauri::command] -pub async fn uninstall_mod(unique_name: &str, state: tauri::State<'_, State>) -> Result { +pub async fn uninstall_mod( + unique_name: &str, + state: tauri::State<'_, State>, +) -> Result> { let db = state.local_db.read().await; let local_mod = db .get_mod(unique_name) .ok_or_else(|| anyhow!("Mod {} not found", unique_name))?; - remove_mod(local_mod, &db, false)?; - Ok(()) + let warnings = remove_mod(local_mod, &db, false)?; + Ok(warnings) } #[tauri::command] diff --git a/owmods_gui/frontend/src/commands.ts b/owmods_gui/frontend/src/commands.ts index 1dc50c51..aa6c52b1 100644 --- a/owmods_gui/frontend/src/commands.ts +++ b/owmods_gui/frontend/src/commands.ts @@ -41,7 +41,7 @@ const commandInfo = { toggleAll: $>("toggle_all"), openModFolder: $("open_mod_folder"), openModReadme: $("open_mod_readme"), - uninstallMod: $("uninstall_mod"), + uninstallMod: $>("uninstall_mod"), uninstallBrokenMod: $>("uninstall_broken_mod"), installMod: $>("install_mod"), installUrl: $>("install_url"), diff --git a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx index 7dc4ed6e..a673c9d2 100644 --- a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx +++ b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx @@ -66,9 +66,15 @@ const ValidModRow = memo(function ValidModRow({ mod, onValidationClick }: LocalM const onUninstall = useCallback(() => { confirm(uninstallConfirmText, getTranslation("CONFIRM")).then((answer) => { if (answer) { - commands - .uninstallMod({ uniqueName: mod.manifest.uniqueName }) - .then(() => commands.refreshLocalDb()); + commands.uninstallMod({ uniqueName: mod.manifest.uniqueName }).then((warnings) => { + commands.refreshLocalDb(); + for (const modName of warnings) { + dialog.message(getTranslation("PREPATCHER_WARNING", { name: modName }), { + type: "warning", + title: getTranslation("PREPATCHER_WARNING_TITLE", { name: modName }) + }); + } + }); } }); }, [uninstallConfirmText, getTranslation, mod.manifest.uniqueName]); diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index 144c7b2f..e8289f14 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xtask" -version = "0.6.0" +version = "0.6.1" edition = "2021" [dependencies] -- 2.51.2 From 7a3b7ab4455582948a3697d79510a92e9b70e980 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 23:26:22 -0400 Subject: [PATCH 10/19] [META] Add lint alias for cargo --- .github/workflows/ci.yml | 3 +-- owmods_cli/CONTRIBUTING.md | 2 +- owmods_core/CONTRIBUTING.md | 2 +- owmods_gui/CONTRIBUTING.md | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59657eaf..c1ea14b1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,8 +50,7 @@ jobs: - name: Check Clippy uses: actions-rs/cargo@v1 with: - command: clippy - args: --all-targets -- -D warnings + command: lint - name: Run Tests uses: actions-rs/cargo@v1 diff --git a/owmods_cli/CONTRIBUTING.md b/owmods_cli/CONTRIBUTING.md index f0fbb93a..4f3ec9ce 100644 --- a/owmods_cli/CONTRIBUTING.md +++ b/owmods_cli/CONTRIBUTING.md @@ -12,7 +12,7 @@ Please format and lint your code before pushing: ```sh cargo fmt -cargo clippy --all-targets -- -D warnings +cargo lint ``` Git hooks are setup to run clippy on every commit, meaning they may take longer. diff --git a/owmods_core/CONTRIBUTING.md b/owmods_core/CONTRIBUTING.md index a0eba2e0..4667a3ad 100644 --- a/owmods_core/CONTRIBUTING.md +++ b/owmods_core/CONTRIBUTING.md @@ -20,7 +20,7 @@ Please format and lint your code before pushing: ```sh cargo fmt -cargo clippy --all-targets -- -D warnings +cargo lint ``` Git hooks are setup to run clippy on every commit, meaning they may take longer. diff --git a/owmods_gui/CONTRIBUTING.md b/owmods_gui/CONTRIBUTING.md index 8656b6b7..0019373e 100644 --- a/owmods_gui/CONTRIBUTING.md +++ b/owmods_gui/CONTRIBUTING.md @@ -35,7 +35,7 @@ Please format and lint your code before pushing: ```sh cargo fmt -cargo clippy --all-targets -- -D warnings +cargo lint ``` And lint and format the frontend as well: -- 2.51.2 From 77087c79471cb1be7dfc7aca1c79d1c48cc1430b Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 13 May 2023 23:30:44 -0400 Subject: [PATCH 11/19] [GUI] Update Translation Template, Sort Keys --- owmods_gui/frontend/src/assets/translations/english.json | 2 +- owmods_gui/frontend/src/assets/translations/template.json | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/owmods_gui/frontend/src/assets/translations/english.json b/owmods_gui/frontend/src/assets/translations/english.json index 4a2f6736..4c49043c 100644 --- a/owmods_gui/frontend/src/assets/translations/english.json +++ b/owmods_gui/frontend/src/assets/translations/english.json @@ -76,9 +76,9 @@ "Orange": "Orange", "Outdated": "This mod is outdated, consider updating (latest version is v$payload$)", "PLATFORM": "Platform: $platform$", - "PRERELEASE_WARNING": "Prereleases are experimental versions of mods that may not work correctly. Are you sure you want to install?", "PREPATCHER_WARNING": "$name$ possibly modified game files. In order to disable it completely, use the \"verify game files\" option in Steam / Epic. Check $name$'s readme for more information.", "PREPATCHER_WARNING_TITLE": "Warning for $name$", + "PRERELEASE_WARNING": "Prereleases are experimental versions of mods that may not work correctly. Are you sure you want to install?", "Pink": "Pink", "Purple": "Purple", "RAINBOW": "Rainbow Mode", diff --git a/owmods_gui/frontend/src/assets/translations/template.json b/owmods_gui/frontend/src/assets/translations/template.json index 0052162e..355b9c77 100644 --- a/owmods_gui/frontend/src/assets/translations/template.json +++ b/owmods_gui/frontend/src/assets/translations/template.json @@ -74,7 +74,10 @@ "OWML_SETTINGS": "", "OWML_SETUP_MESSAGE": "", "Orange": "", + "Outdated": "", "PLATFORM": "", + "PREPATCHER_WARNING": "", + "PREPATCHER_WARNING_TITLE": "", "PRERELEASE_WARNING": "", "Pink": "", "Purple": "", -- 2.51.2 From 3c633d64e281b45bf3c189b96deeb0288879f9fb Mon Sep 17 00:00:00 2001 From: Ben C Date: Sun, 14 May 2023 17:22:57 -0400 Subject: [PATCH 12/19] [CHORE] Update Deps --- Cargo.lock | 32 +++++++++++++++--------------- owmods_gui/frontend/pnpm-lock.yaml | 31 +++++++++++++++-------------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 595c7b4a..b56c6e10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -124,7 +124,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -431,7 +431,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -685,7 +685,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -696,7 +696,7 @@ checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" dependencies = [ "darling_core", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -1010,7 +1010,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -2254,7 +2254,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3067,7 +3067,7 @@ checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3089,7 +3089,7 @@ checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3138,7 +3138,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3333,9 +3333,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.15" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01" dependencies = [ "proc-macro2", "quote", @@ -3725,7 +3725,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3804,7 +3804,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -3925,7 +3925,7 @@ checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", ] [[package]] @@ -4186,7 +4186,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", "wasm-bindgen-shared", ] @@ -4220,7 +4220,7 @@ checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" dependencies = [ "proc-macro2", "quote", - "syn 2.0.15", + "syn 2.0.16", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/owmods_gui/frontend/pnpm-lock.yaml b/owmods_gui/frontend/pnpm-lock.yaml index db038a2d..e124b94a 100644 --- a/owmods_gui/frontend/pnpm-lock.yaml +++ b/owmods_gui/frontend/pnpm-lock.yaml @@ -1173,7 +1173,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-string: 1.0.7 dev: true @@ -1208,7 +1208,7 @@ packages: define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /async@3.2.4: @@ -1333,7 +1333,7 @@ packages: } dependencies: function-bind: 1.1.1 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /callsites@3.1.0: @@ -1765,7 +1765,7 @@ packages: es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 @@ -1802,7 +1802,7 @@ packages: } engines: { node: ">= 0.4" } dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 dev: true @@ -2260,14 +2260,15 @@ packages: engines: { node: ">=6.9.0" } dev: true - /get-intrinsic@1.2.0: + /get-intrinsic@1.2.1: resolution: { - integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== } dependencies: function-bind: 1.1.1 has: 1.0.3 + has-proto: 1.0.1 has-symbols: 1.0.3 dev: true @@ -2279,7 +2280,7 @@ packages: engines: { node: ">= 0.4" } dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /github-from-package@0.0.0: @@ -2372,7 +2373,7 @@ packages: integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /graceful-fs@4.2.11: @@ -2418,7 +2419,7 @@ packages: integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== } dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 dev: true /has-proto@1.0.1: @@ -2564,7 +2565,7 @@ packages: } engines: { node: ">= 0.4" } dependencies: - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -2576,7 +2577,7 @@ packages: } dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-typed-array: 1.1.10 dev: true @@ -3574,7 +3575,7 @@ packages: } dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 is-regex: 1.1.4 dev: true @@ -3662,7 +3663,7 @@ packages: } dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 object-inspect: 1.12.3 dev: true @@ -3736,7 +3737,7 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - get-intrinsic: 1.2.0 + get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 regexp.prototype.flags: 1.5.0 -- 2.51.2 From a2e25e0c8f25be6e6be1767a66485187301ccdbe Mon Sep 17 00:00:00 2001 From: Ben C Date: Tue, 16 May 2023 15:15:30 -0400 Subject: [PATCH 13/19] [CHORE] Update Deps --- Cargo.lock | 44 ++++----- owmods_gui/frontend/package.json | 8 +- owmods_gui/frontend/pnpm-lock.yaml | 138 ++++++++++++++--------------- 3 files changed, 95 insertions(+), 95 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b56c6e10..fec912f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1754,9 +1754,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.62" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5" +checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" dependencies = [ "wasm-bindgen", ] @@ -2630,9 +2630,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" dependencies = [ "unicode-ident", ] @@ -4075,9 +4075,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.3.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" dependencies = [ "getrandom 0.2.9", "rand 0.8.5", @@ -4167,9 +4167,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4" +checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4177,9 +4177,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822" +checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" dependencies = [ "bumpalo", "log", @@ -4192,9 +4192,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.35" +version = "0.4.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083abe15c5d88556b77bdf7aef403625be9e327ad37c62c4e4129af740168163" +checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" dependencies = [ "cfg-if", "js-sys", @@ -4204,9 +4204,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434" +checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4214,9 +4214,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869" +checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" dependencies = [ "proc-macro2", "quote", @@ -4227,15 +4227,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.85" +version = "0.2.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb" +checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "web-sys" -version = "0.3.62" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b5f940c7edfdc6d12126d98c9ef4d1b3d470011c47c76a6581df47ad9ba721" +checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" dependencies = [ "js-sys", "wasm-bindgen", @@ -4770,9 +4770,9 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e92305c174683d78035cbf1b70e18db6329cc0f1b9cae0a52ca90bf5bfe7125" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" dependencies = [ "byteorder", "crc32fast", diff --git a/owmods_gui/frontend/package.json b/owmods_gui/frontend/package.json index cfb154ed..9a8fa421 100644 --- a/owmods_gui/frontend/package.json +++ b/owmods_gui/frontend/package.json @@ -28,8 +28,8 @@ "devDependencies": { "@types/react": "^18.2.6", "@types/react-dom": "^18.2.4", - "@typescript-eslint/eslint-plugin": "^5.59.5", - "@typescript-eslint/parser": "^5.59.5", + "@typescript-eslint/eslint-plugin": "^5.59.6", + "@typescript-eslint/parser": "^5.59.6", "@vitejs/plugin-react": "^4.0.0", "eslint": "^8.40.0", "eslint-plugin-react": "^7.32.2", @@ -37,8 +37,8 @@ "prettier": "^2.8.8", "sass": "^1.62.1", "typescript": "^5.0.4", - "vite": "^4.3.5", - "vite-imagetools": "^5.0.3", + "vite": "^4.3.7", + "vite-imagetools": "^5.0.4", "vite-plugin-html": "^3.2.0" } } diff --git a/owmods_gui/frontend/pnpm-lock.yaml b/owmods_gui/frontend/pnpm-lock.yaml index e124b94a..258a9e03 100644 --- a/owmods_gui/frontend/pnpm-lock.yaml +++ b/owmods_gui/frontend/pnpm-lock.yaml @@ -31,14 +31,14 @@ devDependencies: specifier: ^18.2.4 version: 18.2.4 "@typescript-eslint/eslint-plugin": - specifier: ^5.59.5 - version: 5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4) + specifier: ^5.59.6 + version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4) "@typescript-eslint/parser": - specifier: ^5.59.5 - version: 5.59.5(eslint@8.40.0)(typescript@5.0.4) + specifier: ^5.59.6 + version: 5.59.6(eslint@8.40.0)(typescript@5.0.4) "@vitejs/plugin-react": specifier: ^4.0.0 - version: 4.0.0(vite@4.3.5) + version: 4.0.0(vite@4.3.7) eslint: specifier: ^8.40.0 version: 8.40.0 @@ -58,14 +58,14 @@ devDependencies: specifier: ^5.0.4 version: 5.0.4 vite: - specifier: ^4.3.5 - version: 4.3.5(sass@1.62.1) + specifier: ^4.3.7 + version: 4.3.7(sass@1.62.1) vite-imagetools: - specifier: ^5.0.3 - version: 5.0.3 + specifier: ^5.0.4 + version: 5.0.4 vite-plugin-html: specifier: ^3.2.0 - version: 3.2.0(vite@4.3.5) + version: 3.2.0(vite@4.3.7) packages: /@ampproject/remapping@2.2.1: @@ -903,10 +903,10 @@ packages: } dev: true - /@typescript-eslint/eslint-plugin@5.59.5(@typescript-eslint/parser@5.59.5)(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4): resolution: { - integrity: sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg== + integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: @@ -918,10 +918,10 @@ packages: optional: true dependencies: "@eslint-community/regexpp": 4.5.1 - "@typescript-eslint/parser": 5.59.5(eslint@8.40.0)(typescript@5.0.4) - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/type-utils": 5.59.5(eslint@8.40.0)(typescript@5.0.4) - "@typescript-eslint/utils": 5.59.5(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/parser": 5.59.6(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/type-utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) debug: 4.3.4 eslint: 8.40.0 grapheme-splitter: 1.0.4 @@ -934,10 +934,10 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.5(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.59.6(eslint@8.40.0)(typescript@5.0.4): resolution: { - integrity: sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== + integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: @@ -947,9 +947,9 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/typescript-estree": 5.59.5(typescript@5.0.4) + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) debug: 4.3.4 eslint: 8.40.0 typescript: 5.0.4 @@ -957,21 +957,21 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@5.59.5: + /@typescript-eslint/scope-manager@5.59.6: resolution: { - integrity: sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== + integrity: sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/visitor-keys": 5.59.5 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/visitor-keys": 5.59.6 dev: true - /@typescript-eslint/type-utils@5.59.5(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/type-utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): resolution: { - integrity: sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg== + integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: @@ -981,8 +981,8 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/typescript-estree": 5.59.5(typescript@5.0.4) - "@typescript-eslint/utils": 5.59.5(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) + "@typescript-eslint/utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) debug: 4.3.4 eslint: 8.40.0 tsutils: 3.21.0(typescript@5.0.4) @@ -991,18 +991,18 @@ packages: - supports-color dev: true - /@typescript-eslint/types@5.59.5: + /@typescript-eslint/types@5.59.6: resolution: { - integrity: sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== + integrity: sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dev: true - /@typescript-eslint/typescript-estree@5.59.5(typescript@5.0.4): + /@typescript-eslint/typescript-estree@5.59.6(typescript@5.0.4): resolution: { - integrity: sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== + integrity: sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: @@ -1011,8 +1011,8 @@ packages: typescript: optional: true dependencies: - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/visitor-keys": 5.59.5 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/visitor-keys": 5.59.6 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1023,10 +1023,10 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.59.5(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): resolution: { - integrity: sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA== + integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: @@ -1035,9 +1035,9 @@ packages: "@eslint-community/eslint-utils": 4.4.0(eslint@8.40.0) "@types/json-schema": 7.0.11 "@types/semver": 7.5.0 - "@typescript-eslint/scope-manager": 5.59.5 - "@typescript-eslint/types": 5.59.5 - "@typescript-eslint/typescript-estree": 5.59.5(typescript@5.0.4) + "@typescript-eslint/scope-manager": 5.59.6 + "@typescript-eslint/types": 5.59.6 + "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) eslint: 8.40.0 eslint-scope: 5.1.1 semver: 7.5.1 @@ -1046,18 +1046,18 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@5.59.5: + /@typescript-eslint/visitor-keys@5.59.6: resolution: { - integrity: sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== + integrity: sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: - "@typescript-eslint/types": 5.59.5 + "@typescript-eslint/types": 5.59.6 eslint-visitor-keys: 3.4.1 dev: true - /@vitejs/plugin-react@4.0.0(vite@4.3.5): + /@vitejs/plugin-react@4.0.0(vite@4.3.7): resolution: { integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ== @@ -1070,7 +1070,7 @@ packages: "@babel/plugin-transform-react-jsx-self": 7.21.0(@babel/core@7.21.8) "@babel/plugin-transform-react-jsx-source": 7.19.6(@babel/core@7.21.8) react-refresh: 0.14.0 - vite: 4.3.5(sass@1.62.1) + vite: 4.3.7(sass@1.62.1) transitivePeerDependencies: - supports-color dev: true @@ -1304,7 +1304,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001487 - electron-to-chromium: 1.4.394 + electron-to-chromium: 1.4.397 node-releases: 2.0.10 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: true @@ -1726,13 +1726,13 @@ packages: engines: { node: ">=0.10.0" } hasBin: true dependencies: - jake: 10.8.5 + jake: 10.8.6 dev: true - /electron-to-chromium@1.4.394: + /electron-to-chromium@1.4.397: resolution: { - integrity: sha512-0IbC2cfr8w5LxTz+nmn2cJTGafsK9iauV2r5A5scfzyovqLrxuLoxOHE5OBobP3oVIggJT+0JfKnw9sm87c8Hw== + integrity: sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q== } dev: true @@ -2480,7 +2480,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.17.3 + terser: 5.17.4 dev: true /ieee754@1.2.1: @@ -2498,10 +2498,10 @@ packages: engines: { node: ">= 4" } dev: true - /imagetools-core@4.0.2: + /imagetools-core@4.0.3: resolution: { - integrity: sha512-VG5x5MA2W5aQEBMFmk2rgRt+apkR6MSqxLgkw2QDfhOXsS+2R2dCMTjdlcEWUrn8M291bbsW4A15yF5YODc5Dw== + integrity: sha512-Cn+xuuRiA2UC5XzSWKWaRBJGA9iFhwtaVLUIgujfv6SM4TF/wOAwAqWeZkbv/yyhmapdhFR5stsKE9owUge0jQ== } engines: { node: ">=12.0.0" } dependencies: @@ -2626,10 +2626,10 @@ packages: engines: { node: ">= 0.4" } dev: true - /is-core-module@2.12.0: + /is-core-module@2.12.1: resolution: { - integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== + integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== } dependencies: has: 1.0.3 @@ -2767,10 +2767,10 @@ packages: } dev: true - /jake@10.8.5: + /jake@10.8.6: resolution: { - integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + integrity: sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA== } engines: { node: ">=10" } hasBin: true @@ -3518,7 +3518,7 @@ packages: } hasBin: true dependencies: - is-core-module: 2.12.0 + is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -3541,10 +3541,10 @@ packages: glob: 7.2.3 dev: true - /rollup@3.21.7: + /rollup@3.21.8: resolution: { - integrity: sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w== + integrity: sha512-SSFV2T2fWtQ/vvBip85u2Nr0GNKireabH9d7nXswBg+XSH+jbVDSYptRAEbCEsquhs503rpPA9POYAp0/Jhasw== } engines: { node: ">=14.18.0", npm: ">=8.0.0" } hasBin: true @@ -3867,10 +3867,10 @@ packages: readable-stream: 3.6.2 dev: true - /terser@5.17.3: + /terser@5.17.4: resolution: { - integrity: sha512-AudpAZKmZHkG9jueayypz4duuCFJMMNGRMwaPvQKWfxKedh8Z2x3OCoDqIIi1xx5+iwx1u6Au8XQcc9Lke65Yg== + integrity: sha512-jcEKZw6UPrgugz/0Tuk/PVyLAPfMBJf5clnGueo45wTweoV8yh7Q7PEkhkJ5uuUbC7zAxEcG3tqNr1bstkQ8nw== } engines: { node: ">=10" } hasBin: true @@ -4030,20 +4030,20 @@ packages: } dev: true - /vite-imagetools@5.0.3: + /vite-imagetools@5.0.4: resolution: { - integrity: sha512-K4578Kq7d608i4U/tCPfHVn9iOIUd+VyjtxuFtp3wSXOJZbsAZNc7V3G53s8LHiDY+ROKeoWyfXtq1VwTv9UFQ== + integrity: sha512-EIRstqWlmoQipsucFCioqCYpfp+rG5v8gpKDFvFJBxEKEAEBPnxW+swmE5dfoRQkwMKkYwmBWeXYsnMaDohUtg== } engines: { node: ">=12.0.0" } dependencies: "@rollup/pluginutils": 5.0.2 - imagetools-core: 4.0.2 + imagetools-core: 4.0.3 transitivePeerDependencies: - rollup dev: true - /vite-plugin-html@3.2.0(vite@4.3.5): + /vite-plugin-html@3.2.0(vite@4.3.7): resolution: { integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ== @@ -4063,13 +4063,13 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.3.5(sass@1.62.1) + vite: 4.3.7(sass@1.62.1) dev: true - /vite@4.3.5(sass@1.62.1): + /vite@4.3.7(sass@1.62.1): resolution: { - integrity: sha512-0gEnL9wiRFxgz40o/i/eTBwm+NEbpUeTWhzKrZDSdKm6nplj+z4lKz8ANDgildxHm47Vg8EUia0aicKbawUVVA== + integrity: sha512-MTIFpbIm9v7Hh5b0wSBgkcWzSBz7SAa6K/cBTwS4kUiQJfQLFlZZRJRQgqunCVzhTPCk674tW+0Qaqh3Q00dBg== } engines: { node: ^14.18.0 || >=16.0.0 } hasBin: true @@ -4096,7 +4096,7 @@ packages: dependencies: esbuild: 0.17.19 postcss: 8.4.23 - rollup: 3.21.7 + rollup: 3.21.8 sass: 1.62.1 optionalDependencies: fsevents: 2.3.2 -- 2.51.2 From 09fe291264cc5805b170435a0207df5fce181869 Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 19 May 2023 13:55:21 -0400 Subject: [PATCH 14/19] [GUI] Add Auto Enable Mod Dependencies --- owmods_gui/backend/src/commands.rs | 22 +++++++++- owmods_gui/backend/src/gui_config.rs | 3 ++ owmods_gui/backend/src/main.rs | 3 +- .../src/assets/translations/english.json | 3 ++ owmods_gui/frontend/src/commands.ts | 8 +++- .../src/components/modals/SettingsModal.tsx | 7 +++ .../src/components/mods/local/ValidModRow.tsx | 43 +++++++++++++------ owmods_gui/frontend/src/types.d.ts | 2 + 8 files changed, 74 insertions(+), 17 deletions(-) diff --git a/owmods_gui/backend/src/commands.rs b/owmods_gui/backend/src/commands.rs index c58c927f..72047968 100644 --- a/owmods_gui/backend/src/commands.rs +++ b/owmods_gui/backend/src/commands.rs @@ -207,10 +207,11 @@ pub async fn open_mod_folder(unique_name: &str, state: tauri::State<'_, State>) pub async fn toggle_mod( unique_name: &str, enabled: bool, + recursive: bool, state: tauri::State<'_, State>, ) -> Result> { let db = state.local_db.read().await; - let show_warnings_for = owmods_core::toggle::toggle_mod(unique_name, &db, enabled, false)?; + let show_warnings_for = owmods_core::toggle::toggle_mod(unique_name, &db, enabled, recursive)?; Ok(show_warnings_for) } @@ -773,3 +774,22 @@ pub async fn get_mod_busy(unique_name: &str, state: tauri::State<'_, State>) -> let exists = mods_in_progress.contains(&unique_name.to_string()); Ok(exists) } + +#[tauri::command] +pub async fn has_disabled_deps(unique_name: &str, state: tauri::State<'_, State>) -> Result { + let db = state.local_db.read().await; + let local_mod = db + .get_mod(unique_name) + .ok_or_else(|| anyhow!("Mod Not Found: {unique_name}"))?; + let mut flag = false; + if let Some(deps) = &local_mod.manifest.dependencies { + for dep in deps.iter() { + if let Some(dep) = db.get_mod(dep) { + if !dep.enabled { + flag = true; + } + } + } + } + Ok(flag) +} diff --git a/owmods_gui/backend/src/gui_config.rs b/owmods_gui/backend/src/gui_config.rs index d2855d2e..8c910126 100644 --- a/owmods_gui/backend/src/gui_config.rs +++ b/owmods_gui/backend/src/gui_config.rs @@ -52,6 +52,8 @@ pub struct GuiConfig { no_warning: bool, #[serde(default = "_default_false")] pub log_multi_window: bool, + #[serde(default = "_default_false")] + auto_enable_deps: bool, } impl Default for GuiConfig { @@ -63,6 +65,7 @@ impl Default for GuiConfig { watch_fs: true, no_warning: false, log_multi_window: false, + auto_enable_deps: false, } } } diff --git a/owmods_gui/backend/src/main.rs b/owmods_gui/backend/src/main.rs index 24bb13c1..f33a2cc5 100644 --- a/owmods_gui/backend/src/main.rs +++ b/owmods_gui/backend/src/main.rs @@ -155,7 +155,8 @@ fn main() -> Result<(), Box> { get_defaults, get_downloads, clear_downloads, - get_mod_busy + get_mod_busy, + has_disabled_deps ]) .plugin(tauri_plugin_window_state::Builder::default().build()) .plugin(tauri_plugin_fs_watch::init()) diff --git a/owmods_gui/frontend/src/assets/translations/english.json b/owmods_gui/frontend/src/assets/translations/english.json index 4c49043c..8444b4c4 100644 --- a/owmods_gui/frontend/src/assets/translations/english.json +++ b/owmods_gui/frontend/src/assets/translations/english.json @@ -1,6 +1,8 @@ { "ABOUT": "About", "ALERT_URL": "Alert URL", + "AUTO_ENABLE_DEPS": "Auto Enable Dependencies", + "ENABLE_DEPS_MESSAGE": "This mod has dependencies that are currently disabled\n Would you like to enable the dependencies as well?\n(You can always enable dependencies and skip this dialog in Settings)", "ANY": "Any", "APP_TITLE": "Outer Wilds Mod Manager", "ARCHITECTURE": "Architecture: $arch$", @@ -104,6 +106,7 @@ "TOOLTIP_OWML_DEBUG_MODE": "Makes OWML log more stuff", "TOOLTIP_OWML_PATH": "Must be an absolute path. All mods are installed in a 'Mods' folder inside this.", "TOOLTIP_WATCH_FS": "Watches OWML's Mods folder for changes in files and refreshes if detected", + "TOOLTIP_AUTO_ENABLE_DEPS": "When enabling a mod that has dependencies that are disabled, enable the dependencies without a prompt.", "UNINSTALL": "Uninstall", "UNINSTALL_CONFIRM": "Are you sure you want to uninstall $name$?", "UNIQUE_NAME": "Unique Name", diff --git a/owmods_gui/frontend/src/commands.ts b/owmods_gui/frontend/src/commands.ts index aa6c52b1..6a2ca177 100644 --- a/owmods_gui/frontend/src/commands.ts +++ b/owmods_gui/frontend/src/commands.ts @@ -37,7 +37,10 @@ const commandInfo = { getLocalMod: $>("get_local_mod"), getRemoteMod: $>("get_remote_mod"), getLogLine: $>("get_game_message"), - toggleMod: $>("toggle_mod"), + toggleMod: + $>( + "toggle_mod" + ), toggleAll: $>("toggle_all"), openModFolder: $("open_mod_folder"), openModReadme: $("open_mod_readme"), @@ -77,7 +80,8 @@ const commandInfo = { checkOWML: $>("check_owml"), getDownloads: $>("get_downloads"), clearDownloads: $("clear_downloads"), - getModBusy: $>("get_mod_busy") + getModBusy: $>("get_mod_busy"), + hasDisabledDeps: $>("has_disabled_deps") }; type Command = keyof typeof commandInfo; diff --git a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx index 32b04eb8..133861db 100644 --- a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx +++ b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx @@ -275,6 +275,13 @@ const SettingsForm = forwardRef(function SettingsForm(props: SettingsFormProps, id="logMultiWindow" tooltip={getTranslation("TOOLTIP_LOG_MULTI_WINDOW")} /> +

{getTranslation("OWML_SETTINGS")} onReset(2)} />

diff --git a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx index a673c9d2..d270fc17 100644 --- a/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx +++ b/owmods_gui/frontend/src/components/mods/local/ValidModRow.tsx @@ -19,6 +19,8 @@ const ValidModRow = memo(function ValidModRow({ mod, onValidationClick }: LocalM uniqueName: mod.manifest.uniqueName })[1]; + const autoEnableDeps = hooks.getGuiConfig("GUI_CONFIG_RELOAD")[1]?.autoEnableDeps ?? false; + const uninstallConfirmText = getTranslation("UNINSTALL_CONFIRM", { name: mod.manifest.name }); @@ -41,22 +43,37 @@ const ValidModRow = memo(function ValidModRow({ mod, onValidationClick }: LocalM const onToggle = useCallback( (newVal: boolean) => { - commands - .toggleMod({ + const task = async () => { + let enableDeps = false; + const hasDisabledDeps = newVal + ? await commands.hasDisabledDeps({ uniqueName: mod.manifest.uniqueName }) + : false; + if (hasDisabledDeps) { + enableDeps = + autoEnableDeps || + (await dialog.ask(getTranslation("ENABLE_DEPS_MESSAGE"), { + type: "info", + title: getTranslation("CONFIRM") + })); + } + const warnings = await commands.toggleMod({ uniqueName: mod.manifest.uniqueName, - enabled: newVal - }) - .then((warnings) => { - commands.refreshLocalDb(); - for (const modName of warnings) { - dialog.message(getTranslation("PREPATCHER_WARNING", { name: modName }), { - type: "warning", - title: getTranslation("PREPATCHER_WARNING_TITLE", { name: modName }) - }); - } + enabled: newVal, + recursive: enableDeps }); + commands.refreshLocalDb(); + for (const modName of warnings) { + dialog.message(getTranslation("PREPATCHER_WARNING", { name: modName }), { + type: "warning", + title: getTranslation("PREPATCHER_WARNING_TITLE", { + name: modName + }) + }); + } + }; + task(); }, - [mod.manifest.uniqueName, getTranslation] + [mod.manifest.uniqueName, getTranslation, autoEnableDeps] ); const onOpen = useCallback(() => { diff --git a/owmods_gui/frontend/src/types.d.ts b/owmods_gui/frontend/src/types.d.ts index 63583eed..be2a39c6 100644 --- a/owmods_gui/frontend/src/types.d.ts +++ b/owmods_gui/frontend/src/types.d.ts @@ -46,6 +46,7 @@ export interface ModManifest { conflicts?: string[]; pathsToPreserve?: string[]; warning?: ModWarning; + patcher?: string; } /** Represents a warning a mod wants to show to the user on start */ @@ -116,6 +117,7 @@ export interface GuiConfig { watchFs: boolean; noWarning: boolean; logMultiWindow: boolean; + autoEnableDeps: boolean; } export interface LogPayload { -- 2.51.2 From 75d8e73d035a7fbded9b529d9d2b48d596af8be7 Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 19 May 2023 13:58:19 -0400 Subject: [PATCH 15/19] [CHORE] Update Deps --- Cargo.lock | 91 ++++++++++++++++-------------- owmods_gui/frontend/package.json | 4 +- owmods_gui/frontend/pnpm-lock.yaml | 68 +++++++++++----------- 3 files changed, 86 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fec912f7..7bd2cb18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -213,9 +213,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.2.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a6904aef64d73cf10ab17ebace7befb918b82164785cb89907993be7f83813" +checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84" [[package]] name = "block" @@ -391,9 +391,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.7" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34d21f9bf1b425d2968943631ec91202fe5e837264063503708b83013f8fc938" +checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc" dependencies = [ "clap_builder", "clap_derive", @@ -402,9 +402,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.7" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914c8c79fb560f238ef6429439a30023c862f7a28e688c58f7203f12b29970bd" +checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990" dependencies = [ "anstream", "anstyle", @@ -415,18 +415,18 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.2.3" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1594fe2312ec4abf402076e407628f5c313e54c32ade058521df4ee34ecac8a8" +checksum = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12" dependencies = [ "clap", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -436,15 +436,15 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "clap_mangen" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4237e29de9c6949982ba87d51709204504fb8ed2fd38232fcb1e5bf7d4ba48c8" +checksum = "6bcbd911d903a985de775aabe3bcef9b88e2a7d943e36aa8691617012d2b7731" dependencies = [ "clap", "roff", @@ -516,15 +516,15 @@ dependencies = [ [[package]] name = "console" -version = "0.15.5" +version = "0.15.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +checksum = "d0525278dce688103060006713371cedbad27186c7d913f33d866b498da0f595" dependencies = [ "encode_unicode", "lazy_static", "libc", "unicode-width", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -714,9 +714,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -1493,9 +1493,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" dependencies = [ "http", "hyper", @@ -2029,9 +2029,9 @@ dependencies = [ [[package]] name = "notify" -version = "5.1.0" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9" +checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486" dependencies = [ "bitflags 1.3.2", "crossbeam-channel", @@ -2043,7 +2043,7 @@ dependencies = [ "mio", "serde", "walkdir", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -2630,9 +2630,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.57" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16" +checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" dependencies = [ "unicode-ident", ] @@ -2808,9 +2808,9 @@ checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" [[package]] name = "reqwest" -version = "0.11.17" +version = "0.11.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" dependencies = [ "base64 0.21.0", "bytes", @@ -2921,14 +2921,14 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.8" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" +checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] @@ -2940,6 +2940,16 @@ dependencies = [ "base64 0.21.0", ] +[[package]] +name = "rustls-webpki" +version = "0.100.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.12" @@ -3000,9 +3010,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -3094,9 +3104,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4" +checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d" dependencies = [ "serde", ] @@ -3591,7 +3601,7 @@ version = "0.1.0" source = "git+https://github.com/tauri-apps/plugins-workspace?branch=dev#dce0f02bc571128308c30278cde3233f341e6a50" dependencies = [ "bincode", - "bitflags 2.2.1", + "bitflags 2.3.1", "log", "serde", "serde_json", @@ -3809,13 +3819,12 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] @@ -3879,9 +3888,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" +checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" dependencies = [ "serde", ] diff --git a/owmods_gui/frontend/package.json b/owmods_gui/frontend/package.json index 9a8fa421..2a224100 100644 --- a/owmods_gui/frontend/package.json +++ b/owmods_gui/frontend/package.json @@ -22,7 +22,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-icons": "^4.8.0", - "react-virtuoso": "^4.3.6", + "react-virtuoso": "^4.3.7", "tauri-plugin-fs-watch-api": "github:tauri-apps/tauri-plugin-fs-watch" }, "devDependencies": { @@ -37,7 +37,7 @@ "prettier": "^2.8.8", "sass": "^1.62.1", "typescript": "^5.0.4", - "vite": "^4.3.7", + "vite": "^4.3.8", "vite-imagetools": "^5.0.4", "vite-plugin-html": "^3.2.0" } diff --git a/owmods_gui/frontend/pnpm-lock.yaml b/owmods_gui/frontend/pnpm-lock.yaml index 258a9e03..ee92d818 100644 --- a/owmods_gui/frontend/pnpm-lock.yaml +++ b/owmods_gui/frontend/pnpm-lock.yaml @@ -17,11 +17,11 @@ dependencies: specifier: ^4.8.0 version: 4.8.0(react@18.2.0) react-virtuoso: - specifier: ^4.3.6 - version: 4.3.6(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.3.7 + version: 4.3.7(react-dom@18.2.0)(react@18.2.0) tauri-plugin-fs-watch-api: specifier: github:tauri-apps/tauri-plugin-fs-watch - version: github.com/tauri-apps/tauri-plugin-fs-watch/2139f484000ecd62ea44a2e380c90cff810dc57d + version: github.com/tauri-apps/tauri-plugin-fs-watch/5876048ff3d3d23c8863a37a0f0e91ed90553026 devDependencies: "@types/react": @@ -38,7 +38,7 @@ devDependencies: version: 5.59.6(eslint@8.40.0)(typescript@5.0.4) "@vitejs/plugin-react": specifier: ^4.0.0 - version: 4.0.0(vite@4.3.7) + version: 4.0.0(vite@4.3.8) eslint: specifier: ^8.40.0 version: 8.40.0 @@ -58,14 +58,14 @@ devDependencies: specifier: ^5.0.4 version: 5.0.4 vite: - specifier: ^4.3.7 - version: 4.3.7(sass@1.62.1) + specifier: ^4.3.8 + version: 4.3.8(sass@1.62.1) vite-imagetools: specifier: ^5.0.4 version: 5.0.4 vite-plugin-html: specifier: ^3.2.0 - version: 3.2.0(vite@4.3.7) + version: 3.2.0(vite@4.3.8) packages: /@ampproject/remapping@2.2.1: @@ -1057,7 +1057,7 @@ packages: eslint-visitor-keys: 3.4.1 dev: true - /@vitejs/plugin-react@4.0.0(vite@4.3.7): + /@vitejs/plugin-react@4.0.0(vite@4.3.8): resolution: { integrity: sha512-HX0XzMjL3hhOYm+0s95pb0Z7F8O81G7joUHgfDd/9J/ZZf5k4xX6QAMFkKsHFxaHlf6X7GD7+XuaZ66ULiJuhQ== @@ -1070,7 +1070,7 @@ packages: "@babel/plugin-transform-react-jsx-self": 7.21.0(@babel/core@7.21.8) "@babel/plugin-transform-react-jsx-source": 7.19.6(@babel/core@7.21.8) react-refresh: 0.14.0 - vite: 4.3.7(sass@1.62.1) + vite: 4.3.8(sass@1.62.1) transitivePeerDependencies: - supports-color dev: true @@ -1303,8 +1303,8 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true dependencies: - caniuse-lite: 1.0.30001487 - electron-to-chromium: 1.4.397 + caniuse-lite: 1.0.30001488 + electron-to-chromium: 1.4.401 node-releases: 2.0.10 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: true @@ -1351,13 +1351,13 @@ packages: } dependencies: pascal-case: 3.1.2 - tslib: 2.5.0 + tslib: 2.5.2 dev: true - /caniuse-lite@1.0.30001487: + /caniuse-lite@1.0.30001488: resolution: { - integrity: sha512-83564Z3yWGqXsh2vaH/mhXfEM0wX+NlBCm1jYHOb97TrTWJEmPTccZgeLTPBUUb0PNVo+oomb7wkimZBIERClA== + integrity: sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ== } dev: true @@ -1699,7 +1699,7 @@ packages: } dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /dotenv-expand@8.0.3: @@ -1729,10 +1729,10 @@ packages: jake: 10.8.6 dev: true - /electron-to-chromium@1.4.397: + /electron-to-chromium@1.4.401: resolution: { - integrity: sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q== + integrity: sha512-AswqHsYyEbfSn0x87n31Na/xttUqEAg7NUjpiyxC20MaWKLyadOYHMzyLdF78N1iw+FK8/2KHLpZxRdyRILgtA== } dev: true @@ -2901,7 +2901,7 @@ packages: integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== } dependencies: - tslib: 2.5.0 + tslib: 2.5.2 dev: true /lru-cache@5.1.1: @@ -3027,7 +3027,7 @@ packages: } dependencies: lower-case: 2.0.2 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /node-abi@3.40.0: @@ -3214,7 +3214,7 @@ packages: } dependencies: dot-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /parent-module@1.0.1: @@ -3234,7 +3234,7 @@ packages: } dependencies: no-case: 3.0.4 - tslib: 2.5.0 + tslib: 2.5.2 dev: true /path-exists@4.0.0: @@ -3437,10 +3437,10 @@ packages: engines: { node: ">=0.10.0" } dev: true - /react-virtuoso@4.3.6(react-dom@18.2.0)(react@18.2.0): + /react-virtuoso@4.3.7(react-dom@18.2.0)(react@18.2.0): resolution: { - integrity: sha512-t2yzA9QKwMrcECLytVfZcBZMusuQ9Ahgt62SL8uC/sYm9Sk/h14sYTJC0MVO6CAtl3BzKiLKSC79Vp+W3KOXMg== + integrity: sha512-XPNRzmhXUyBoXjPxNYdqD5wubNXtDIbBFbhTR4awx4yEC98EegM5RLeaghIK0BBAhZyRFu8sMvrPnwE12KLOJg== } engines: { node: ">=10" } peerDependencies: @@ -3541,10 +3541,10 @@ packages: glob: 7.2.3 dev: true - /rollup@3.21.8: + /rollup@3.22.0: resolution: { - integrity: sha512-SSFV2T2fWtQ/vvBip85u2Nr0GNKireabH9d7nXswBg+XSH+jbVDSYptRAEbCEsquhs503rpPA9POYAp0/Jhasw== + integrity: sha512-imsigcWor5Y/dC0rz2q0bBt9PabcL3TORry2hAa6O6BuMvY71bqHyfReAz5qyAqiQATD1m70qdntqBfBQjVWpQ== } engines: { node: ">=14.18.0", npm: ">=8.0.0" } hasBin: true @@ -3913,10 +3913,10 @@ packages: } dev: true - /tslib@2.5.0: + /tslib@2.5.2: resolution: { - integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== } dev: true @@ -4043,7 +4043,7 @@ packages: - rollup dev: true - /vite-plugin-html@3.2.0(vite@4.3.7): + /vite-plugin-html@3.2.0(vite@4.3.8): resolution: { integrity: sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ== @@ -4063,13 +4063,13 @@ packages: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 4.3.7(sass@1.62.1) + vite: 4.3.8(sass@1.62.1) dev: true - /vite@4.3.7(sass@1.62.1): + /vite@4.3.8(sass@1.62.1): resolution: { - integrity: sha512-MTIFpbIm9v7Hh5b0wSBgkcWzSBz7SAa6K/cBTwS4kUiQJfQLFlZZRJRQgqunCVzhTPCk674tW+0Qaqh3Q00dBg== + integrity: sha512-uYB8PwN7hbMrf4j1xzGDk/lqjsZvCDbt/JC5dyfxc19Pg8kRm14LinK/uq+HSLNswZEoKmweGdtpbnxRtrAXiQ== } engines: { node: ^14.18.0 || >=16.0.0 } hasBin: true @@ -4096,7 +4096,7 @@ packages: dependencies: esbuild: 0.17.19 postcss: 8.4.23 - rollup: 3.21.8 + rollup: 3.22.0 sass: 1.62.1 optionalDependencies: fsevents: 2.3.2 @@ -4178,10 +4178,10 @@ packages: engines: { node: ">=10" } dev: true - github.com/tauri-apps/tauri-plugin-fs-watch/2139f484000ecd62ea44a2e380c90cff810dc57d: + github.com/tauri-apps/tauri-plugin-fs-watch/5876048ff3d3d23c8863a37a0f0e91ed90553026: resolution: { - tarball: https://codeload.github.com/tauri-apps/tauri-plugin-fs-watch/tar.gz/2139f484000ecd62ea44a2e380c90cff810dc57d + tarball: https://codeload.github.com/tauri-apps/tauri-plugin-fs-watch/tar.gz/5876048ff3d3d23c8863a37a0f0e91ed90553026 } name: tauri-plugin-fs-watch-api version: 0.0.0 -- 2.51.2 From 4f9b3be2efb2649a064c062fffbc44e595a5f010 Mon Sep 17 00:00:00 2001 From: Ben C Date: Fri, 19 May 2023 14:09:24 -0400 Subject: [PATCH 16/19] [CHORE] Update Template Translation, Sort Keys --- owmods_gui/frontend/src/assets/translations/english.json | 6 +++--- owmods_gui/frontend/src/assets/translations/template.json | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/owmods_gui/frontend/src/assets/translations/english.json b/owmods_gui/frontend/src/assets/translations/english.json index 8444b4c4..9b9daf59 100644 --- a/owmods_gui/frontend/src/assets/translations/english.json +++ b/owmods_gui/frontend/src/assets/translations/english.json @@ -1,11 +1,10 @@ { "ABOUT": "About", "ALERT_URL": "Alert URL", - "AUTO_ENABLE_DEPS": "Auto Enable Dependencies", - "ENABLE_DEPS_MESSAGE": "This mod has dependencies that are currently disabled\n Would you like to enable the dependencies as well?\n(You can always enable dependencies and skip this dialog in Settings)", "ANY": "Any", "APP_TITLE": "Outer Wilds Mod Manager", "ARCHITECTURE": "Architecture: $arch$", + "AUTO_ENABLE_DEPS": "Auto Enable Dependencies", "BROWSE": "Browse", "BY": "v$version$ by $author$", "Blue": "Blue", @@ -29,6 +28,7 @@ "DisabledDep": "Dependency $payload$ is installed, but it's disabled", "DuplicateMod": "A mod with this unique name was already loaded from $payload$", "ENABLE_ALL": "Enable All", + "ENABLE_DEPS_MESSAGE": "This mod has dependencies that are currently disabled\n Would you like to enable the dependencies as well?\n(You can always enable dependencies and skip this dialog in Settings)", "EXPORT_MODS": "Export Mods", "Error": "Error", "FATAL_ERROR": "Fatal Error", @@ -97,6 +97,7 @@ "Success": "Success", "THEME": "Theme", "TOOLTIP_ALERT_URL": "URL used to get alerts to display in the Mod Manager.", + "TOOLTIP_AUTO_ENABLE_DEPS": "When enabling a mod that has dependencies that are disabled, enable the dependencies without a prompt.", "TOOLTIP_DATABASE_URL": "URL used to check for updates for mods and OWML", "TOOLTIP_DISABLE_WARNING": "Any mod issues (Missing Dependencies, Conflicts, etc) will be ignored on launch", "TOOLTIP_FORCE_EXE": "If enabled, launches game exe instead of launching via Steam / Epic. Needs to be disabled for DLC to work via the Epic store.", @@ -106,7 +107,6 @@ "TOOLTIP_OWML_DEBUG_MODE": "Makes OWML log more stuff", "TOOLTIP_OWML_PATH": "Must be an absolute path. All mods are installed in a 'Mods' folder inside this.", "TOOLTIP_WATCH_FS": "Watches OWML's Mods folder for changes in files and refreshes if detected", - "TOOLTIP_AUTO_ENABLE_DEPS": "When enabling a mod that has dependencies that are disabled, enable the dependencies without a prompt.", "UNINSTALL": "Uninstall", "UNINSTALL_CONFIRM": "Are you sure you want to uninstall $name$?", "UNIQUE_NAME": "Unique Name", diff --git a/owmods_gui/frontend/src/assets/translations/template.json b/owmods_gui/frontend/src/assets/translations/template.json index 355b9c77..0139bb70 100644 --- a/owmods_gui/frontend/src/assets/translations/template.json +++ b/owmods_gui/frontend/src/assets/translations/template.json @@ -4,6 +4,7 @@ "ANY": "", "APP_TITLE": "", "ARCHITECTURE": "", + "AUTO_ENABLE_DEPS": "", "BROWSE": "", "BY": "", "Blue": "", @@ -27,6 +28,7 @@ "DisabledDep": "", "DuplicateMod": "", "ENABLE_ALL": "", + "ENABLE_DEPS_MESSAGE": "", "EXPORT_MODS": "", "Error": "", "FATAL_ERROR": "", @@ -95,6 +97,7 @@ "Success": "", "THEME": "", "TOOLTIP_ALERT_URL": "", + "TOOLTIP_AUTO_ENABLE_DEPS": "", "TOOLTIP_DATABASE_URL": "", "TOOLTIP_DISABLE_WARNING": "", "TOOLTIP_FORCE_EXE": "", -- 2.51.2 From 1cb53e4fcab2962f612d8e76abf2fe96d4cbabfb Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 20 May 2023 22:53:06 -0400 Subject: [PATCH 17/19] [ALL] Redo Game Running, Add New Window Option --- owmods_cli/src/cli.rs | 12 ++ owmods_cli/src/game.rs | 37 +++-- owmods_cli/src/main.rs | 14 +- owmods_core/Cargo.toml | 2 +- owmods_core/src/game.rs | 145 ++++++++++-------- owmods_core/src/socket.rs | 99 +++++++----- owmods_gui/backend/src/commands.rs | 11 +- owmods_gui/backend/src/gui_config.rs | 3 + owmods_gui/backend/src/main.rs | 2 +- .../src/assets/translations/english.json | 2 + .../src/assets/translations/template.json | 2 + .../src/components/modals/SettingsModal.tsx | 19 +++ owmods_gui/frontend/src/types.d.ts | 1 + 13 files changed, 227 insertions(+), 122 deletions(-) diff --git a/owmods_cli/src/cli.rs b/owmods_cli/src/cli.rs index fdf84628..eea54336 100644 --- a/owmods_cli/src/cli.rs +++ b/owmods_cli/src/cli.rs @@ -137,6 +137,18 @@ pub enum Commands { help = "Force the game to run even if there's conflicting mods or missing dependencies" )] force: bool, + #[arg( + short = 'n', + long = "no-server", + help = "Don't start a log server, send OWML's logs to stdout directly (this will be set to true if you pass --new-window)" + )] + no_server: bool, + #[arg( + short = 'w', + long = "new-window", + help = "Start the logs in a new cmd window (*WINDOWS ONLY*)" + )] + new_window: bool, #[arg( short = 'p', long = "port", diff --git a/owmods_cli/src/game.rs b/owmods_cli/src/game.rs index 8d019a6a..139c4551 100644 --- a/owmods_cli/src/game.rs +++ b/owmods_cli/src/game.rs @@ -49,7 +49,12 @@ pub async fn start_just_logs(port: &u16) -> Result<()> { Ok(()) } -pub async fn start_game(local_db: &LocalDatabase, config: &Config, port: &u16) -> Result<()> { +pub async fn start_game( + local_db: &LocalDatabase, + config: &Config, + port: Option<&u16>, + new_window: bool, +) -> Result<()> { let names = config.viewed_alerts.iter().map(|n| n.as_str()).collect(); let warnings = get_warnings(local_db.active().collect(), names); @@ -68,21 +73,27 @@ pub async fn start_game(local_db: &LocalDatabase, config: &Config, port: &u16) - config.save()?; - let server = LogServer::new(*port).await?; - let port = server.port; + if let Some(port) = port { + let server = LogServer::new(*port).await?; + let port = server.port; - let (tx, mut rx) = mpsc::channel(32); + let (tx, mut rx) = mpsc::channel(32); - try_join!( - server.listen(tx, true), - launch_game(&config, &port), - async { - while let Some(msg) = rx.recv().await { - handle_game_log(&msg); + try_join!( + server.listen(tx, true), + launch_game(&config, false, Some(&port)), + async { + while let Some(msg) = rx.recv().await { + handle_game_log(&msg); + } + Ok(()) } - Ok(()) - } - )?; + )?; + } else if new_window && cfg!(windows) { + launch_game(&config, true, None).await?; + } else { + launch_game(&config, false, None).await?; + } Ok(()) } diff --git a/owmods_cli/src/main.rs b/owmods_cli/src/main.rs index d920eef5..55e3623e 100644 --- a/owmods_cli/src/main.rs +++ b/owmods_cli/src/main.rs @@ -329,7 +329,12 @@ async fn run_from_cli(cli: BaseCli) -> Result<()> { Commands::LogServer { port } => { start_just_logs(port).await?; } - Commands::Run { force, port } => { + Commands::Run { + force, + port, + no_server, + new_window, + } => { info!("Attempting to launch game..."); let mut local_db = LocalDatabase::fetch(&config.owml_path)?; let remote_db = RemoteDatabase::fetch(&config.database_url).await; @@ -347,7 +352,12 @@ async fn run_from_cli(cli: BaseCli) -> Result<()> { info!("...or run with -f to launch anyway"); return Ok(()); } - start_game(&local_db, &config, port).await?; + let no_server = *no_server || *new_window; + if *new_window && cfg!(unix) { + warn!("Skipping option --new-window as this is a Windows only flag"); + } + let port = if no_server { None } else { Some(port) }; + start_game(&local_db, &config, port, *new_window).await?; } Commands::Open { identifier } => { info!("Opening {}", identifier); diff --git a/owmods_core/Cargo.toml b/owmods_core/Cargo.toml index 1626c317..54371600 100644 --- a/owmods_core/Cargo.toml +++ b/owmods_core/Cargo.toml @@ -22,7 +22,7 @@ anyhow = "1.0.68" zip = { version = "0.6.3", default-features = false, features = ["deflate", "zstd"] } futures = "0.3.26" log = "0.4.17" -tokio = { version = "1.25.0", features = ["net", "time", "process"] } +tokio = { version = "1.25.0", features = ["net", "time", "process", "macros"] } serde_repr = "0.1.10" uuid = { version = "1.3.0", features = ["v4", "fast-rng"] } typeshare = "1.0.0" diff --git a/owmods_core/src/game.rs b/owmods_core/src/game.rs index 76d0babd..4613dc79 100644 --- a/owmods_core/src/game.rs +++ b/owmods_core/src/game.rs @@ -1,24 +1,96 @@ -use std::path::PathBuf; +use std::{path::PathBuf, process::Stdio}; -use anyhow::Result; +use anyhow::{anyhow, Result}; +use log::warn; use tokio::process::Command; -use crate::{config::Config, constants::OWML_EXE_NAME}; +use crate::{config::Config, constants::OWML_EXE_NAME, owml::OWMLConfig}; /// Launch the game using the given port for logs -#[cfg(windows)] -pub async fn launch_game(config: &Config, port: &u16) -> Result<()> { - let owml_path = PathBuf::from(&config.owml_path); - let mut child = Command::new(owml_path.join(OWML_EXE_NAME).to_str().unwrap()) - .arg("-consolePort") - .arg(port.to_string()) - .current_dir(PathBuf::from(&owml_path)) - .spawn()?; - child.wait().await?; +/// If no port is given, the output of OWML.Launcher.exe will be written to stdout. +/// You can set `open_in_new_window` to `true` to make the command open in a new cmd window (**Windows Only**). +/// On Linux there's no reliable way to open a new terminal window, so it's recommended you disallow that arg to be false on linux. +pub async fn launch_game( + config: &Config, + open_in_new_window: bool, + port: Option<&u16>, +) -> Result<()> { + let mut cmd = get_cmd(config, open_in_new_window)?; + + cmd.current_dir(PathBuf::from(&config.owml_path)); + + if let Some(port) = port { + cmd.arg("-consolePort") + .arg(port.to_string()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + // Sometimes OWML.Launcher.exe doesn't like setting the socket port, just do it ourselves. + let mut owml_config = OWMLConfig::get(config)?; + owml_config.socket_port = *port; + owml_config.save(config)?; + } + + let child = cmd.spawn().map_err(|why| { + if cfg!(windows) { + anyhow!("Failed to launch game: {why:?}") + } else { + anyhow!("Failed to launch game: {why:?}. Is Mono Installed?") + } + })?; + + let res = child + .wait_with_output() + .await + .map_err(|why| anyhow!("Failed to launch game: {why:?}"))?; + + if !res.status.success() { + warn!( + "Potentially failed to start game (exit code): {}", + res.status + .code() + .map(|c| c.to_string()) + .unwrap_or("Unknown".to_string()) + ); + if let Ok(stdout) = String::from_utf8(res.stdout) { + warn!("Potentially Failed to Start Game (stdout): {stdout}"); + } + if let Ok(stderr) = String::from_utf8(res.stderr) { + warn!("Potentially Failed to Start Game (stderr): {stderr}"); + } + } + Ok(()) } -#[cfg(not(windows))] +#[cfg(windows)] +fn get_cmd(config: &Config, open_in_new_window: bool) -> Result { + let owml_path = PathBuf::from(&config.owml_path).join(OWML_EXE_NAME); + let exe_path = owml_path.to_str().unwrap(); + if open_in_new_window { + let mut cmd = Command::new("cmd"); + cmd.arg("/c") + .arg("start") + .arg("cmd") + .arg("/c") + .arg(exe_path); + Ok(cmd) + } else { + let cmd = Command::new(exe_path); + Ok(cmd) + } +} + +#[cfg(unix)] +fn get_cmd(config: &Config, _: bool) -> Result { + let owml_path = PathBuf::from(&config.owml_path).join(OWML_EXE_NAME); + let exe_path = owml_path.to_str().unwrap(); + fix_dlls(config)?; + let mut cmd = Command::new("mono"); + cmd.arg(exe_path); + Ok(cmd) +} + +#[cfg(unix)] fn fix_dlls(config: &Config) -> Result<()> { use std::{fs::File, io::Write}; @@ -38,50 +110,3 @@ fn fix_dlls(config: &Config) -> Result<()> { Ok(()) } - -/// Launch the game using the given port for logs -#[cfg(not(windows))] -pub async fn launch_game(config: &Config, port: &u16) -> Result<()> { - use std::process::Stdio; - - use anyhow::anyhow; - use log::{error, info}; - - use crate::owml::OWMLConfig; - - fix_dlls(config)?; - - // Sometimes OWML.Launcher.exe doesn't like setting the socket port, just do it ourselves. - let mut owml_config = OWMLConfig::get(config)?; - owml_config.socket_port = *port; - owml_config.save(config)?; - - let child = Command::new("mono") - .stdout(Stdio::piped()) - .stderr(Stdio::piped()) - .arg(OWML_EXE_NAME) - .arg("-consolePort") - .arg(port.to_string()) - .current_dir(PathBuf::from(&config.owml_path)) - .spawn() - .map_err(|e| anyhow!("Couldn't Run OWML: {:?}. Is Mono installed/working?", e))?; - - let res = child.wait_with_output().await; - - match res { - Ok(res) => { - if !res.status.success() { - info!( - "{:?}\n{:?}", - String::from_utf8(res.stdout).unwrap_or("".to_string()), - String::from_utf8(res.stderr).unwrap_or("".to_string()) - ); - } - } - Err(why) => { - error!("Failed to launch game: {:?}", why); - } - } - - Ok(()) -} diff --git a/owmods_core/src/socket.rs b/owmods_core/src/socket.rs index dea6a1e8..bf8db85c 100644 --- a/owmods_core/src/socket.rs +++ b/owmods_core/src/socket.rs @@ -1,15 +1,15 @@ use anyhow::{anyhow, Result}; -use log::error; +use log::{error, info}; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; use tokio::{ io::{AsyncBufReadExt, BufReader}, net::{TcpListener, TcpStream}, - sync::mpsc::Sender, + sync::mpsc, }; use typeshare::typeshare; -pub type LogServerSender = Sender; +pub type LogServerSender = mpsc::Sender; /// Represents the type of message sent from the game #[typeshare] @@ -99,9 +99,10 @@ impl LogServer { Ok(Self { port, listener }) } - async fn accept(mut stream: TcpStream, tx: &LogServerSender) { + async fn accept(mut stream: TcpStream, tx: &LogServerSender) -> bool { let mut reader = BufReader::new(&mut stream); let mut body = String::new(); + let mut flag = false; while let Ok(bytes_read) = reader.read_line(&mut body).await { if bytes_read == 0 { break; @@ -114,6 +115,7 @@ impl LogServer { Ok(message) => { match message.message_type { SocketMessageType::Quit => { + flag = true; break; } _ => { @@ -134,6 +136,7 @@ impl LogServer { } body.clear(); } + flag } async fn yield_log(tx: &LogServerSender, message: SocketMessage) { @@ -158,47 +161,59 @@ impl LogServer { ) .await; - let mut keep_going = true; - while keep_going { - let stream = self.listener.accept().await; - match stream { - Ok((stream, _)) => { - let tx2 = tx.clone(); - tokio::spawn(async move { - Self::yield_log( - &tx2, - SocketMessage::make_internal( - "====== Client Connected To Console ======".to_string(), - SocketMessageType::Info, - ), - ) - .await; + let (shutdown_sender, mut shutdown_receiver) = mpsc::channel::<()>(2); - Self::accept(stream, &tx2).await; + tokio::select! { + _ = async { + let shutdown_sender = &shutdown_sender.clone(); + loop { + let stream = self.listener.accept().await; + match stream { + Ok((stream, _)) => { + let tx2 = tx.clone(); + let shutdown_sender2 = shutdown_sender.clone(); + tokio::spawn(async move { + Self::yield_log( + &tx2, + SocketMessage::make_internal( + "====== Client Connected To Console ======".to_string(), + SocketMessageType::Info, + ), + ) + .await; - Self::yield_log( - &tx2, - SocketMessage::make_internal( - "====== Client Disconnected From Console ======".to_string(), - SocketMessageType::Info, - ), - ) - .await; - }); - keep_going = !disconnect_on_quit; - } - Err(why) => { - Self::yield_log( - &tx, - SocketMessage::make_internal( - format!("Client Connection Failure! {why:?}"), - SocketMessageType::Error, - ), - ) - .await; + let quit_received = Self::accept(stream, &tx2).await; + + if quit_received && disconnect_on_quit { + shutdown_sender2.send(()).await.ok(); + } + + Self::yield_log( + &tx2, + SocketMessage::make_internal( + "====== Client Disconnected From Console ======".to_string(), + SocketMessageType::Info, + ), + ) + .await; + }); + } + Err(why) => { + Self::yield_log( + &tx, + SocketMessage::make_internal( + format!("Client Connection Failure! {why:?}"), + SocketMessageType::Error, + ), + ) + .await; + } + } } - } - } + } => {}, + _ = shutdown_receiver.recv() => info!("Quit Message Received") + }; + Ok(()) } } diff --git a/owmods_gui/backend/src/commands.rs b/owmods_gui/backend/src/commands.rs index 72047968..9227956e 100644 --- a/owmods_gui/backend/src/commands.rs +++ b/owmods_gui/backend/src/commands.rs @@ -500,7 +500,12 @@ pub async fn update_all_mods( pub async fn start_logs(state: tauri::State<'_, State>, handle: tauri::AppHandle) -> Result { let game_logs = state.game_log.read().await; let gui_config = state.gui_config.read().await; - if gui_config.log_multi_window || game_logs.keys().count() == 0 { + let config = state.config.read().await.clone(); + if gui_config.no_log_server { + drop(gui_config); + launch_game(&config, true, None).await?; + return Ok(()); + } else if gui_config.log_multi_window || game_logs.keys().count() == 0 { drop(game_logs); drop(gui_config); make_log_window(&handle).await?; @@ -509,7 +514,7 @@ pub async fn start_logs(state: tauri::State<'_, State>, handle: tauri::AppHandle let config = state.config.read().await.clone(); let port = *game_logs.keys().next().unwrap_or(&0); drop(game_logs); - launch_game(&config, &port).await?; + launch_game(&config, false, Some(&port)).await?; } Ok(()) } @@ -610,7 +615,7 @@ pub async fn run_game(state: tauri::State<'_, State>, window: tauri::Window) -> try_join!( log_server.listen(tx, false), - launch_game(&config, &port), + launch_game(&config, false, Some(&port)), log_handler ) .map_err(|e| anyhow!("Can't Start Game: {:?}", e))?; diff --git a/owmods_gui/backend/src/gui_config.rs b/owmods_gui/backend/src/gui_config.rs index 8c910126..4fb2835c 100644 --- a/owmods_gui/backend/src/gui_config.rs +++ b/owmods_gui/backend/src/gui_config.rs @@ -54,6 +54,8 @@ pub struct GuiConfig { pub log_multi_window: bool, #[serde(default = "_default_false")] auto_enable_deps: bool, + #[serde(default = "_default_false")] + pub no_log_server: bool, } impl Default for GuiConfig { @@ -66,6 +68,7 @@ impl Default for GuiConfig { no_warning: false, log_multi_window: false, auto_enable_deps: false, + no_log_server: false, } } } diff --git a/owmods_gui/backend/src/main.rs b/owmods_gui/backend/src/main.rs index f33a2cc5..7b5009d2 100644 --- a/owmods_gui/backend/src/main.rs +++ b/owmods_gui/backend/src/main.rs @@ -46,7 +46,7 @@ pub struct State { gui_config: StatePart, /// A map of ports to the log messages sent to that port game_log: StatePart, - /// The protocol url used to incoke the program, if any. This is should only be gotten once and removed after + /// The protocol url used to invoke the program, if any. This is should only be gotten once and removed after protocol_url: StatePart>, /// The progress bars of installs/updates/downloads/etc. progress_bars: StatePart, diff --git a/owmods_gui/frontend/src/assets/translations/english.json b/owmods_gui/frontend/src/assets/translations/english.json index 9b9daf59..6d598ab6 100644 --- a/owmods_gui/frontend/src/assets/translations/english.json +++ b/owmods_gui/frontend/src/assets/translations/english.json @@ -55,6 +55,7 @@ "JSON": "JSON File", "LANGUAGE": "Language", "LAUNCH_ANYWAY": "Issues have been detected with your mod configuration that may result in broken or unloaded mods, continue nevertheless?", + "LET_OWML_HANDLE_LOGS": "Let OWML Handle Logs", "LOCATE_OWML": "Locate An Existing OWML Instance", "LOGS": "Logs", "LOGS_TITLE": "Game Logs (Port $port$)", @@ -103,6 +104,7 @@ "TOOLTIP_FORCE_EXE": "If enabled, launches game exe instead of launching via Steam / Epic. Needs to be disabled for DLC to work via the Epic store.", "TOOLTIP_GAME_PATH": "Directory that contains the game exe. Leave empty for automatic detection on launch.", "TOOLTIP_INCREMENTAL_GC": "If enabled, forces the game to use Unity's incremental garbage collector. Can reduce lag spikes in some situations.", + "TOOLTIP_LET_OWML_HANDLE_LOGS": "Open a new cmd window and let OWML handle displaying game logs instead of the manager.", "TOOLTIP_LOG_MULTI_WINDOW": "Makes launching multiple instances of the game open multiple windows instead of all logging to one", "TOOLTIP_OWML_DEBUG_MODE": "Makes OWML log more stuff", "TOOLTIP_OWML_PATH": "Must be an absolute path. All mods are installed in a 'Mods' folder inside this.", diff --git a/owmods_gui/frontend/src/assets/translations/template.json b/owmods_gui/frontend/src/assets/translations/template.json index 0139bb70..7fdd9e04 100644 --- a/owmods_gui/frontend/src/assets/translations/template.json +++ b/owmods_gui/frontend/src/assets/translations/template.json @@ -55,6 +55,7 @@ "JSON": "", "LANGUAGE": "", "LAUNCH_ANYWAY": "", + "LET_OWML_HANDLE_LOGS": "", "LOCATE_OWML": "", "LOGS": "", "LOGS_TITLE": "", @@ -103,6 +104,7 @@ "TOOLTIP_FORCE_EXE": "", "TOOLTIP_GAME_PATH": "", "TOOLTIP_INCREMENTAL_GC": "", + "TOOLTIP_LET_OWML_HANDLE_LOGS": "", "TOOLTIP_LOG_MULTI_WINDOW": "", "TOOLTIP_OWML_DEBUG_MODE": "", "TOOLTIP_OWML_PATH": "", diff --git a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx index 133861db..f2409600 100644 --- a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx +++ b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx @@ -4,6 +4,7 @@ import { forwardRef, memo, useCallback, + useEffect, useImperativeHandle, useRef, useState @@ -16,6 +17,7 @@ import { OpenFileInput } from "@components/common/FileInput"; import Icon from "@components/common/Icon"; import { BsArrowCounterclockwise } from "react-icons/bs"; import { type TranslationKey, TranslationNameMap } from "@components/common/TranslationContext"; +import { os } from "@tauri-apps/api"; const ThemeArr = Object.values(Theme); const LanguageArr = Object.values(Language); @@ -175,6 +177,14 @@ const SettingsForm = forwardRef(function SettingsForm(props: SettingsFormProps, const [guiConfig, setGuiConfig] = useState(props.initialGuiConfig); const getTranslation = useGetTranslation(); + const [showLogServerOption, setShowLogServerOption] = useState(false); + + useEffect(() => { + os.platform().then((p) => { + setShowLogServerOption(p === "win32"); + }); + }, []); + useImperativeHandle( ref, () => ({ @@ -282,6 +292,15 @@ const SettingsForm = forwardRef(function SettingsForm(props: SettingsFormProps, id="autoEnableDeps" tooltip={getTranslation("TOOLTIP_AUTO_ENABLE_DEPS")} /> + {showLogServerOption && ( + + )}

{getTranslation("OWML_SETTINGS")} onReset(2)} />

diff --git a/owmods_gui/frontend/src/types.d.ts b/owmods_gui/frontend/src/types.d.ts index be2a39c6..0441399f 100644 --- a/owmods_gui/frontend/src/types.d.ts +++ b/owmods_gui/frontend/src/types.d.ts @@ -118,6 +118,7 @@ export interface GuiConfig { noWarning: boolean; logMultiWindow: boolean; autoEnableDeps: boolean; + noLogServer: boolean; } export interface LogPayload { -- 2.51.2 From d340aa983bb7ff415fdc5194784c3b1a11dac0c0 Mon Sep 17 00:00:00 2001 From: Ben C Date: Sat, 20 May 2023 23:31:46 -0400 Subject: [PATCH 18/19] [GUI] Fix Settings Modal State Reset On Cancel --- owmods_core/src/game.rs | 8 ++--- owmods_core/src/remove.rs | 2 +- .../src/components/modals/SettingsModal.tsx | 35 ++++++++++++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/owmods_core/src/game.rs b/owmods_core/src/game.rs index 4613dc79..00f33e2e 100644 --- a/owmods_core/src/game.rs +++ b/owmods_core/src/game.rs @@ -6,10 +6,10 @@ use tokio::process::Command; use crate::{config::Config, constants::OWML_EXE_NAME, owml::OWMLConfig}; -/// Launch the game using the given port for logs -/// If no port is given, the output of OWML.Launcher.exe will be written to stdout. -/// You can set `open_in_new_window` to `true` to make the command open in a new cmd window (**Windows Only**). -/// On Linux there's no reliable way to open a new terminal window, so it's recommended you disallow that arg to be false on linux. +/// Launch the game using the given port for logs. +/// If no port is given, the output of OWML.Launcher.exe will be written to stdout. +/// You can set `open_in_new_window` to `true` to make the command open in a new cmd window (**Windows Only**). +/// On Linux there's no reliable way to open a new terminal window, so it's recommended you disallow that arg to be false on linux. pub async fn launch_game( config: &Config, open_in_new_window: bool, diff --git a/owmods_core/src/remove.rs b/owmods_core/src/remove.rs index b9eaecfd..4ae8cc67 100644 --- a/owmods_core/src/remove.rs +++ b/owmods_core/src/remove.rs @@ -16,7 +16,7 @@ use crate::{ /// /// ## Returns /// -/// A Vec of mods that have pre-patchers and need to have a warning shown to the user +/// A `Vec` of mods that have pre-patchers and need to have a warning shown to the user /// /// ## Errors /// diff --git a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx index f2409600..30007273 100644 --- a/owmods_gui/frontend/src/components/modals/SettingsModal.tsx +++ b/owmods_gui/frontend/src/components/modals/SettingsModal.tsx @@ -10,7 +10,7 @@ import { useState } from "react"; import { Config, GuiConfig, Language, OWMLConfig, Theme } from "@types"; -import Modal from "./Modal"; +import Modal, { ModalHandle } from "./Modal"; import { useGetTranslation } from "@hooks"; import { commands, hooks } from "@commands"; import { OpenFileInput } from "@components/common/FileInput"; @@ -30,6 +30,7 @@ interface SettingsFormProps { interface SettingsFormHandle { save: () => void; + reset: () => void; } interface SettingsRowProps { @@ -202,9 +203,21 @@ const SettingsForm = forwardRef(function SettingsForm(props: SettingsFormProps, } }; task().catch(console.error); + }, + reset: () => { + setConfig(props.initialConfig); + setGuiConfig(props.initialGuiConfig); + setOwmlConfig(props.initialOwmlConfig); } }), - [config, owmlConfig, guiConfig, props.initialConfig] + [ + config, + owmlConfig, + guiConfig, + props.initialConfig, + props.initialGuiConfig, + props.initialOwmlConfig + ] ); const getVal = (e: HTMLInputElement | HTMLSelectElement) => { @@ -363,6 +376,19 @@ const SettingsForm = forwardRef(function SettingsForm(props: SettingsFormProps, const SettingsModal = forwardRef(function SettingsModal(_: object, ref) { const settingsFormRef = useRef(); + const modalRef = useRef(null); + + useImperativeHandle( + ref, + () => ({ + open: () => { + settingsFormRef.current?.reset?.(); + modalRef.current?.open?.(); + }, + close: () => modalRef.current?.close?.() + }), + [] + ); const [configStatus, config, err1] = hooks.getConfig("CONFIG_RELOAD"); const [guiConfigStatus, guiConfig, err2] = hooks.getGuiConfig("GUI_CONFIG_RELOAD"); @@ -380,7 +406,7 @@ const SettingsModal = forwardRef(function SettingsModal(_: object, ref) { showCancel heading={getTranslation("SETTINGS")} confirmText={getTranslation("SAVE")} - ref={ref} + ref={modalRef} > <>

@@ -396,10 +422,11 @@ const SettingsModal = forwardRef(function SettingsModal(_: object, ref) { return ( settingsFormRef.current?.save()} + onCancel={() => settingsFormRef.current?.reset()} showCancel heading={getTranslation("SETTINGS")} confirmText={getTranslation("SAVE")} - ref={ref} + ref={modalRef} > Date: Sat, 20 May 2023 23:32:36 -0400 Subject: [PATCH 19/19] [CHORE] Update Deps --- Cargo.lock | 4 +- owmods_gui/frontend/package.json | 2 +- owmods_gui/frontend/pnpm-lock.yaml | 91 +++++++++++++++--------------- 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7bd2cb18..f5a52f28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1828,9 +1828,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "lock_api" diff --git a/owmods_gui/frontend/package.json b/owmods_gui/frontend/package.json index 2a224100..225cbca9 100644 --- a/owmods_gui/frontend/package.json +++ b/owmods_gui/frontend/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/eslint-plugin": "^5.59.6", "@typescript-eslint/parser": "^5.59.6", "@vitejs/plugin-react": "^4.0.0", - "eslint": "^8.40.0", + "eslint": "^8.41.0", "eslint-plugin-react": "^7.32.2", "eslint-plugin-react-hooks": "^4.6.0", "prettier": "^2.8.8", diff --git a/owmods_gui/frontend/pnpm-lock.yaml b/owmods_gui/frontend/pnpm-lock.yaml index ee92d818..e3e7d961 100644 --- a/owmods_gui/frontend/pnpm-lock.yaml +++ b/owmods_gui/frontend/pnpm-lock.yaml @@ -32,22 +32,22 @@ devDependencies: version: 18.2.4 "@typescript-eslint/eslint-plugin": specifier: ^5.59.6 - version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4) + version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4) "@typescript-eslint/parser": specifier: ^5.59.6 - version: 5.59.6(eslint@8.40.0)(typescript@5.0.4) + version: 5.59.6(eslint@8.41.0)(typescript@5.0.4) "@vitejs/plugin-react": specifier: ^4.0.0 version: 4.0.0(vite@4.3.8) eslint: - specifier: ^8.40.0 - version: 8.40.0 + specifier: ^8.41.0 + version: 8.41.0 eslint-plugin-react: specifier: ^7.32.2 - version: 7.32.2(eslint@8.40.0) + version: 7.32.2(eslint@8.41.0) eslint-plugin-react-hooks: specifier: ^4.6.0 - version: 4.6.0(eslint@8.40.0) + version: 4.6.0(eslint@8.41.0) prettier: specifier: ^2.8.8 version: 2.8.8 @@ -635,7 +635,7 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): resolution: { integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== @@ -644,7 +644,7 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.40.0 + eslint: 8.41.0 eslint-visitor-keys: 3.4.1 dev: true @@ -676,10 +676,10 @@ packages: - supports-color dev: true - /@eslint/js@8.40.0: + /@eslint/js@8.41.0: resolution: { - integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== + integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dev: true @@ -903,7 +903,7 @@ packages: } dev: true - /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4): resolution: { integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw== @@ -918,12 +918,12 @@ packages: optional: true dependencies: "@eslint-community/regexpp": 4.5.1 - "@typescript-eslint/parser": 5.59.6(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/parser": 5.59.6(eslint@8.41.0)(typescript@5.0.4) "@typescript-eslint/scope-manager": 5.59.6 - "@typescript-eslint/type-utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) - "@typescript-eslint/utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/type-utils": 5.59.6(eslint@8.41.0)(typescript@5.0.4) + "@typescript-eslint/utils": 5.59.6(eslint@8.41.0)(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -934,7 +934,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: { integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA== @@ -951,7 +951,7 @@ packages: "@typescript-eslint/types": 5.59.6 "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -968,7 +968,7 @@ packages: "@typescript-eslint/visitor-keys": 5.59.6 dev: true - /@typescript-eslint/type-utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/type-utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: { integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ== @@ -982,9 +982,9 @@ packages: optional: true dependencies: "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) - "@typescript-eslint/utils": 5.59.6(eslint@8.40.0)(typescript@5.0.4) + "@typescript-eslint/utils": 5.59.6(eslint@8.41.0)(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: @@ -1023,7 +1023,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: { integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg== @@ -1032,13 +1032,13 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.40.0) + "@eslint-community/eslint-utils": 4.4.0(eslint@8.41.0) "@types/json-schema": 7.0.11 "@types/semver": 7.5.0 "@typescript-eslint/scope-manager": 5.59.6 "@typescript-eslint/types": 5.59.6 "@typescript-eslint/typescript-estree": 5.59.6(typescript@5.0.4) - eslint: 8.40.0 + eslint: 8.41.0 eslint-scope: 5.1.1 semver: 7.5.1 transitivePeerDependencies: @@ -1304,8 +1304,8 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001488 - electron-to-chromium: 1.4.401 - node-releases: 2.0.10 + electron-to-chromium: 1.4.402 + node-releases: 2.0.11 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: true @@ -1729,10 +1729,10 @@ packages: jake: 10.8.6 dev: true - /electron-to-chromium@1.4.401: + /electron-to-chromium@1.4.402: resolution: { - integrity: sha512-AswqHsYyEbfSn0x87n31Na/xttUqEAg7NUjpiyxC20MaWKLyadOYHMzyLdF78N1iw+FK8/2KHLpZxRdyRILgtA== + integrity: sha512-gWYvJSkohOiBE6ecVYXkrDgNaUjo47QEKK0kQzmWyhkH+yoYiG44bwuicTGNSIQRG3WDMsWVZJLRnJnLNkbWvA== } dev: true @@ -1885,7 +1885,7 @@ packages: engines: { node: ">=10" } dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.40.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.41.0): resolution: { integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== @@ -1894,10 +1894,10 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.40.0 + eslint: 8.41.0 dev: true - /eslint-plugin-react@7.32.2(eslint@8.40.0): + /eslint-plugin-react@7.32.2(eslint@8.41.0): resolution: { integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== @@ -1910,7 +1910,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.40.0 + eslint: 8.41.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -1954,18 +1954,18 @@ packages: engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dev: true - /eslint@8.40.0: + /eslint@8.41.0: resolution: { - integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== + integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } hasBin: true dependencies: - "@eslint-community/eslint-utils": 4.4.0(eslint@8.40.0) + "@eslint-community/eslint-utils": 4.4.0(eslint@8.41.0) "@eslint-community/regexpp": 4.5.1 "@eslint/eslintrc": 2.0.3 - "@eslint/js": 8.40.0 + "@eslint/js": 8.41.0 "@humanwhocodes/config-array": 0.11.8 "@humanwhocodes/module-importer": 1.0.1 "@nodelib/fs.walk": 1.2.8 @@ -1985,13 +1985,12 @@ packages: find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.20.0 - grapheme-splitter: 1.0.4 + graphemer: 1.4.0 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -2390,6 +2389,13 @@ packages: } dev: true + /graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + } + dev: true + /has-bigints@1.0.2: resolution: { @@ -2781,13 +2787,6 @@ packages: minimatch: 3.1.2 dev: true - /js-sdsl@4.4.0: - resolution: - { - integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== - } - dev: true - /js-tokens@4.0.0: resolution: { @@ -3057,10 +3056,10 @@ packages: he: 1.2.0 dev: true - /node-releases@2.0.10: + /node-releases@2.0.11: resolution: { - integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + integrity: sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q== } dev: true -- 2.51.2