mirror of
https://github.com/an-anime-team/sleepy-launcher.git
synced 2024-11-24 13:49:34 +03:00
commit
c8b1ea3b2b
59 changed files with 1337 additions and 1094 deletions
2
.github/workflows/check_source_code.yml
vendored
2
.github/workflows/check_source_code.yml
vendored
|
@ -27,7 +27,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: |
|
||||
apt update
|
||||
apt install -y libgtk-4-dev libadwaita-1-dev git curl
|
||||
apt install -y build-essential libgtk-4-dev libadwaita-1-dev git curl
|
||||
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
|
|
2
.github/workflows/compile_release_build.yml
vendored
2
.github/workflows/compile_release_build.yml
vendored
|
@ -26,7 +26,7 @@ jobs:
|
|||
- name: Install dependencies
|
||||
run: |
|
||||
apt update
|
||||
apt install -y libgtk-4-dev libadwaita-1-dev git curl
|
||||
apt install -y build-essential libgtk-4-dev libadwaita-1-dev git curl
|
||||
|
||||
- uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
|
|
18
CHANGELOG.md
18
CHANGELOG.md
|
@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
|
||||
- Bundle `applications-system-symbolic` icon to the app
|
||||
- Added "force grab cursor" option to the gamescope settings
|
||||
- Added Thai
|
||||
- Added Ukrainian
|
||||
|
||||
### Changed
|
||||
|
||||
- Update wish url
|
||||
- Updated dependencies
|
||||
- Improved app args parsing
|
||||
- Updated locales
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed GtkSwitch UI state representation
|
||||
|
||||
## [3.9.4] - 29.12.2023
|
||||
|
||||
### Changed
|
||||
|
|
644
Cargo.lock
generated
644
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
17
Cargo.toml
17
Cargo.toml
|
@ -15,34 +15,35 @@ lto = true
|
|||
opt-level = "s"
|
||||
|
||||
[build-dependencies]
|
||||
glib-build-tools = "0.18"
|
||||
glib-build-tools = "0.19"
|
||||
|
||||
[dependencies.anime-launcher-sdk]
|
||||
git = "https://github.com/an-anime-team/anime-launcher-sdk"
|
||||
tag = "1.12.5"
|
||||
tag = "1.12.7"
|
||||
features = ["all", "genshin"]
|
||||
|
||||
# path = "../anime-launcher-sdk" # ! for dev purposes only
|
||||
|
||||
[dependencies]
|
||||
relm4 = { version = "0.7.0-beta.2", features = ["macros", "libadwaita"] }
|
||||
gtk = { package = "gtk4", version = "0.7.3", features = ["v4_12"] }
|
||||
adw = { package = "libadwaita", version = "0.5.3", features = ["v1_3"] }
|
||||
relm4 = { version = "0.8.1", features = ["macros", "libadwaita"] }
|
||||
gtk = { package = "gtk4", version = "0.8.1", features = ["v4_12"] }
|
||||
adw = { package = "libadwaita", version = "0.6.0", features = ["v1_4"] }
|
||||
|
||||
rfd = { version = "0.12.1", features = ["xdg-portal"], default-features = false }
|
||||
rfd = { version = "0.14.1", features = ["xdg-portal", "tokio"], default-features = false }
|
||||
open = "5.0.0"
|
||||
whatadistro = "0.1.0"
|
||||
|
||||
serde_json = "1.0"
|
||||
anyhow = "1.0"
|
||||
lazy_static = "1.4.0"
|
||||
cached = { version = "0.46", features = ["proc_macro"] }
|
||||
cached = { version = "0.49", features = ["proc_macro"] }
|
||||
md-5 = { version = "0.10", features = ["asm"] }
|
||||
enum-ordinalize = "4.3"
|
||||
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = "0.3"
|
||||
|
||||
fluent-templates = "0.8"
|
||||
fluent-templates = "0.9"
|
||||
unic-langid = "0.9"
|
||||
|
||||
human-panic = "1.2.2"
|
||||
|
|
4
assets/images/icons/applications-system-symbolic.svg
Normal file
4
assets/images/icons/applications-system-symbolic.svg
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="m 8 0 c -0.550781 0 -1 0.449219 -1 1 v 0.238281 c 0 0.46875 -0.375 0.902344 -0.820312 1.046875 c -0.023438 0.007813 -0.042969 0.011719 -0.0625 0.019532 c -0.445313 0.148437 -1.003907 0.019531 -1.28125 -0.359376 l -0.140626 -0.195312 c -0.15625 -0.214844 -0.390624 -0.359375 -0.652343 -0.398438 c -0.261719 -0.042968 -0.527344 0.019532 -0.742188 0.175782 c -0.449219 0.324218 -0.550781 0.953125 -0.222656 1.398437 l 0.140625 0.199219 c 0.277344 0.378906 0.226562 0.953125 -0.050781 1.328125 c -0.011719 0.015625 -0.023438 0.035156 -0.035157 0.050781 c -0.273437 0.378906 -0.804687 0.601563 -1.25 0.457032 l -0.230468 -0.074219 c -0.523438 -0.171875 -1.089844 0.117187 -1.257813 0.640625 c -0.171875 0.527344 0.113281 1.089844 0.640625 1.261718 l 0.222656 0.074219 c 0.445313 0.144531 0.738282 0.636719 0.75 1.101563 v 0.070312 c 0.015626 0.464844 -0.304687 0.960938 -0.746093 1.105469 l -0.226563 0.074219 c -0.527344 0.167968 -0.8125 0.734375 -0.640625 1.257812 c 0.167969 0.527344 0.734375 0.8125 1.257813 0.644532 l 0.230468 -0.078126 c 0.445313 -0.144531 0.976563 0.078126 1.25 0.457032 c 0.011719 0.019531 0.027344 0.035156 0.039063 0.050781 c 0.277344 0.375 0.324219 0.953125 0.050781 1.328125 l -0.144531 0.203125 c -0.324219 0.445313 -0.226563 1.070313 0.222656 1.394531 c 0.445313 0.324219 1.070313 0.226563 1.394531 -0.21875 l 0.144532 -0.199218 c 0.273437 -0.375 0.835937 -0.507813 1.277344 -0.359376 c 0.019531 0.007813 0.042968 0.011719 0.0625 0.019532 c 0.445312 0.140625 0.820312 0.578125 0.820312 1.046875 v 0.238281 c 0 0.550781 0.449219 1 1 1 c 0.554688 0 1 -0.449219 1 -1 v -0.238281 c 0 -0.46875 0.378906 -0.90625 0.824219 -1.046875 c 0.019531 -0.007813 0.039062 -0.015625 0.0625 -0.019532 c 0.441406 -0.148437 1.003906 -0.019531 1.277343 0.359376 l 0.144532 0.199218 c 0.324218 0.445313 0.949218 0.542969 1.394531 0.21875 c 0.445313 -0.324218 0.546875 -0.949218 0.222656 -1.394531 l -0.144531 -0.203125 c -0.277344 -0.375 -0.226562 -0.953125 0.050781 -1.328125 c 0.011719 -0.015625 0.023438 -0.03125 0.035157 -0.050781 c 0.273437 -0.378906 0.804687 -0.601563 1.25 -0.457032 l 0.234374 0.078126 c 0.523438 0.167968 1.089844 -0.117188 1.257813 -0.644532 c 0.171875 -0.523437 -0.117187 -1.089844 -0.640625 -1.257812 l -0.230469 -0.074219 c -0.445312 -0.144531 -0.734375 -0.640625 -0.742187 -1.105469 c -0.003906 -0.023437 -0.003906 -0.046875 -0.003906 -0.070312 c -0.015626 -0.464844 0.300781 -0.957032 0.746093 -1.101563 l 0.230469 -0.074219 c 0.523438 -0.171874 0.8125 -0.734374 0.640625 -1.261718 c -0.171875 -0.523438 -0.734375 -0.8125 -1.257813 -0.640625 l -0.230468 0.074219 c -0.445313 0.144531 -0.976563 -0.078126 -1.25 -0.457032 c -0.015625 -0.015625 -0.027344 -0.035156 -0.039063 -0.050781 c -0.277343 -0.375 -0.324219 -0.949219 -0.050781 -1.328125 l 0.144531 -0.199219 c 0.324219 -0.445312 0.226563 -1.074219 -0.222656 -1.398437 c -0.214844 -0.15625 -0.480469 -0.21875 -0.742187 -0.175782 c -0.261719 0.039063 -0.5 0.183594 -0.652344 0.398438 l -0.144532 0.195312 c -0.273437 0.378907 -0.835937 0.507813 -1.277343 0.363282 c -0.023438 -0.007813 -0.042969 -0.015625 -0.066407 -0.023438 c -0.441406 -0.140625 -0.820312 -0.578125 -0.820312 -1.046875 v -0.238281 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 4 c 0.871094 0 1.675781 0.273438 2.332031 0.742188 c 0.003907 0.007812 0.011719 0.015624 0.019531 0.023437 c 0.011719 0.003906 0.019532 0.007813 0.03125 0.015625 c 0.660157 0.484375 1.160157 1.175781 1.421876 1.976562 v 0.007813 s 0.003906 0.003906 0.003906 0.007813 c 0.292968 0.851562 0.15625 1.65625 0 2.457031 c 0 0 -0.003906 0.003906 -0.003906 0.007812 v 0.003907 c -0.257813 0.800781 -0.757813 1.488281 -1.414063 1.976562 c -0.015625 0.003906 -0.027344 0.011719 -0.039063 0.019531 c -0.007812 0.007813 -0.015624 0.011719 -0.019531 0.019531 c -0.65625 0.46875 -1.460937 0.742188 -2.332031 0.742188 c -0.855469 0 -1.644531 -0.265625 -2.289062 -0.714844 c -0.019532 -0.015625 -0.042969 -0.03125 -0.0625 -0.046875 c -0.011719 -0.007812 -0.023438 -0.015625 -0.035157 -0.019531 c -0.648437 -0.484375 -1.148437 -1.160156 -1.40625 -1.945312 c -0.003906 -0.011719 -0.007812 -0.023438 -0.011719 -0.035157 c -0.003906 -0.007812 -0.007812 -0.011719 -0.011718 -0.019531 c -0.28125 -0.847656 -0.148438 -1.644531 0 -2.4375 c 0.003906 -0.003906 0.007812 -0.011719 0.011718 -0.015625 c 0.003907 -0.015625 0.007813 -0.027344 0.011719 -0.039063 c 0.261719 -0.789062 0.761719 -1.464843 1.414063 -1.945312 c 0.007812 -0.007812 0.019531 -0.011719 0.027344 -0.015625 c 0.019531 -0.015625 0.042968 -0.035156 0.0625 -0.050781 c 0.644531 -0.449219 1.433593 -0.714844 2.289062 -0.714844 z m 0 0" fill="#2e3436"/>
|
||||
</svg>
|
After Width: | Height: | Size: 4.7 KiB |
|
@ -32,3 +32,4 @@ ko-kr = 한국어
|
|||
id-id = Indonesia
|
||||
vi-vn = Tiếng Việt
|
||||
uk-ua = Українська
|
||||
th-th = ไทย
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Eine Open-Source-Upscaling-Technik, die von Nvidia als herstel
|
|||
other-settings = Andere Einstellungen
|
||||
framerate-limit = Framerate-Limit
|
||||
unfocused-framerate-limit = Unfokussiert Framerate-Limit
|
||||
|
||||
force-grab-cursor = Cursor greifen erzwingen
|
||||
force-grab-cursor-description = Verwende immer den relativen Mausmodus, anstatt abhängig von der Sichtbarkeit des Cursors umzuschalten. Der Mauszeiger wird korrekt in der Mitte des Spiels zentriert.
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = An open source upscaling technique developed by Nvidia as a cr
|
|||
other-settings = Other settings
|
||||
framerate-limit = Framerate limit
|
||||
unfocused-framerate-limit = Unfocused framerate limit
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Una técnica de escalado de código abierto desarrollada por N
|
|||
other-settings = Otras opciones
|
||||
framerate-limit = Límite de framerate
|
||||
unfocused-framerate-limit = Límite de framerate en segundo plano
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Une technologie de mise à l'échelle Open Source développée
|
|||
other-settings = Autres paramètres
|
||||
framerate-limit = Limitation des FPS
|
||||
unfocused-framerate-limit = Limitation des FPS hors focus
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -48,8 +48,8 @@ fps-unlocker-description = Eltávolítja az fps limitet. Az anti-cheat észreveh
|
|||
|
||||
enabled = Bekapcsolva
|
||||
|
||||
fps-unlocker-interval = Overwrite interval
|
||||
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting
|
||||
fps-unlocker-interval = Felülírási időköz
|
||||
fps-unlocker-interval-description = Milliszekundumban (ms) hogy mekkora időközönként van felülírva az fps limit értéke. Erre szükség van hogy ne állítsa vissza magát az fps limit
|
||||
|
||||
window-mode = Ablak mód
|
||||
borderless = Keretmentes
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Open source upscaling technika az Nvidia-tól, alternatíva a
|
|||
other-settings = Egyéb beállítások
|
||||
framerate-limit = FPS limit
|
||||
unfocused-framerate-limit = Fókuszon kívüli FPS limit
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -48,8 +48,8 @@ fps-unlocker-description = Meniadakan batas maksimum frame yang dapat dirender o
|
|||
|
||||
enabled = Aktifkan
|
||||
|
||||
fps-unlocker-interval = Overwrite interval
|
||||
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting
|
||||
fps-unlocker-interval = Interval penulisan ulang FPS
|
||||
fps-unlocker-interval-description = Jeda antara penulisan ulang nilai batas FPS dalam milidetik. Penulisan ulang secara berkala dibutuhkan untuk mencegah nilai batas FPS kembali seperti semula
|
||||
|
||||
window-mode = Window Mode
|
||||
borderless = Tanpa border
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Teknik peningkatan skala yang dikembangkan oleh Nvidia sebagai
|
|||
other-settings = Pengaturan lainnya
|
||||
framerate-limit = Batas framerate
|
||||
unfocused-framerate-limit = Batas framerate saat tidak fokus
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -48,8 +48,8 @@ fps-unlocker-description = Rimuovi la limitazione del rendering dei frame modifi
|
|||
|
||||
enabled = Abilitato
|
||||
|
||||
fps-unlocker-interval = Overwrite interval
|
||||
fps-unlocker-interval-description = Delay in milliseconds between overwriting the FPS limit value. Periodic overwrites are necessary to prevent it from resetting
|
||||
fps-unlocker-interval = Intervallo di sovrascrittura
|
||||
fps-unlocker-interval-description = Ritardo in millisecondi tra le sovrascritture del valore limite FPS. Sovrascritture periodiche sono necessarie per impedire che si reimposti al valore predefinito
|
||||
|
||||
window-mode = Modalità della finestra
|
||||
borderless = Senza bordi
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Una tecnica di upscaling open-source sviluppata da Nvidia per
|
|||
other-settings = Altre impostazioni
|
||||
framerate-limit = Limite del framerate
|
||||
unfocused-framerate-limit = Limite del framerate quando fuori dal focus
|
||||
|
||||
force-grab-cursor = Forza la cattura del cursore
|
||||
force-grab-cursor-description = Usa sempre la modalità relativa del mouse invece di cambiare in base alla visibilità del cursore. Il cursore del mouse verrà correttamente centrato nel gioco
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = An open source upscaling technique developed by Nvidia as a cr
|
|||
other-settings = その他の設定
|
||||
framerate-limit = FPS制限
|
||||
unfocused-framerate-limit = 非フォーカス時の最大FPS
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Nvidia가 독점 DLSS 솔루션에 대한 낮은 오버헤드
|
|||
other-settings = 기타 설정
|
||||
framerate-limit = 프레임 속도 제한
|
||||
unfocused-framerate-limit = 초점이 맞지 않는 프레임 속도 제한
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Een open source opschalingstechniek ontwikkeld door Nvidia als
|
|||
other-settings = Andere instellingen
|
||||
framerate-limit = Frameratelimiet
|
||||
unfocused-framerate-limit = Ongefocuste frameratelimiet
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Technika skalowania otwartego źródła opracowana przez Nvidi
|
|||
other-settings = Inne ustawienia
|
||||
framerate-limit = Limit klatek na sekundę
|
||||
unfocused-framerate-limit = Limit klatek na sekundę po utraceniu skupienia
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Uma técnica de upscaling de código aberto desenvolvida pela
|
|||
other-settings = Outras configuraões
|
||||
framerate-limit = Limite de taxa de quadros
|
||||
unfocused-framerate-limit = Limite de taxa de quadros desfocado
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Открытая техника масштабирования
|
|||
other-settings = Другие настройки
|
||||
framerate-limit = Лимит числа кадров
|
||||
unfocused-framerate-limit = Лимит числа кадров вне фокуса
|
||||
|
||||
force-grab-cursor = Принудительный захват курсора
|
||||
force-grab-cursor-description = Использовать относительный режим мыши вместо переворачивания в зависимости от видимости курсора. Курсор мыши будет правильно центрирован в игре
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = En uppskalningsteknik med öppen källkod som utvecklats av Nv
|
|||
other-settings = Andra inställningar
|
||||
framerate-limit = Gräns för bilduppdateringshastighet
|
||||
unfocused-framerate-limit = Gräns för bilduppdateringshastighet utan fokus
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
20
assets/locales/th/components.ftl
Normal file
20
assets/locales/th/components.ftl
Normal file
|
@ -0,0 +1,20 @@
|
|||
components = ส่วนประกอบ
|
||||
components-description = จัดการเวอร์ชัน Wine และ DXVK
|
||||
|
||||
selected-version = เวอร์ชันที่เลือก
|
||||
recommended-only = แสดงเเวอร์ชั่นที่แนะนำเท่านั้น
|
||||
|
||||
wine-version = เวอร์ชันของ Wine
|
||||
wine-recommended-description = แสดงเฉพาะเวอร์ชัน Wine ที่แนะนำเท่านั้น
|
||||
|
||||
wine-options = การตั้งค่าของ Wine
|
||||
|
||||
wine-use-shared-libraries = ใช้ไลบรารีที่ใช้ร่วมกันของ Wine
|
||||
wine-use-shared-libraries-description = ตั้งค่าตัว LD_LIBRARY_PATH เพื่อโหลดไลบรารีระบบจากบิลด์ Wine ที่เลือก
|
||||
|
||||
gstreamer-use-shared-libraries = ใช้ไลบรารีที่ใช้ร่วมกันของ gstreamer
|
||||
gstreamer-use-shared-libraries-description = ตั้งค่าตัวแปร GST_PLUGIN_PATH เพื่อโหลดไลบรารี gstreamer จากบิลด์ Wine ที่เลือก
|
||||
|
||||
dxvk-version = เวอร์ชันของ DXVK
|
||||
dxvk-selection-disabled = การเลือก DXVK ถูกปิดใช้งานโดยการตั้งค่ากลุ่ม Wine ของคุณ
|
||||
dxvk-recommended-description = แสดงเฉพาะเวอร์ชัน DXVK ที่แนะนำเท่านั้น
|
57
assets/locales/th/enhancements.ftl
Normal file
57
assets/locales/th/enhancements.ftl
Normal file
|
@ -0,0 +1,57 @@
|
|||
game-settings-description = จัดการการตั้งค่าในเกมและเซสชันบัญชี
|
||||
sandbox-settings-description = รันเกมในแซนด์บ็อกซ์ คล้ายกับที่ Flatpak ทำ
|
||||
environment-settings-description = ระบุตัวแปรสภาวะแวดล้อมและคำสั่งเปิดเกม
|
||||
|
||||
wine = Wine
|
||||
|
||||
synchronization = การซิงโครไนซ์
|
||||
wine-sync-description = เทคโนโลยีที่ใช้ในการประสานเหตุการณ์ Wine ภายใน
|
||||
|
||||
language = ภาษา
|
||||
wine-lang-description = ภาษาที่ใช้ในสภาพแวดล้อมไวน์ สามารถแก้ไขปัญหารูปแบบแป้นพิมพ์ได้
|
||||
system = ระบบ
|
||||
|
||||
borderless-window = หน้าต่างไร้ขอบ
|
||||
virtual-desktop = เดสก์ท็อปเสมือน
|
||||
|
||||
map-drive-c = เชื่อม ไดรฟ์ C:
|
||||
map-drive-c-description = เชื่อมโยง ไดรฟ์ C: จาก Wine prefix ไปยังระบบ dosdevices โดยอัตโนมัติ
|
||||
|
||||
map-game-folder = เชื่อม โฟลเดอร์เกม
|
||||
map-game-folder-description = เชื่อมโยงโฟลเดอร์เกมไปยังระบบ dosdevices โดยอัตโนมัติ
|
||||
|
||||
game = เกม
|
||||
|
||||
hud = HUD
|
||||
|
||||
fsr = FSR
|
||||
fsr-description = ยกระดับความชัดเกมให้เข้ากับขนาดจอภาพของคุณ หากต้องการใช้เลือกความละเอียดที่ต่ำกว่าในการตั้งค่าของเกมแล้วกด Alt+Enter
|
||||
ultra-quality = คุณภาพเยี่ยม
|
||||
quality = คุณภาพ
|
||||
balanced = พอประมาณ
|
||||
performance = เร็วที่สุด
|
||||
|
||||
gamemode = Gamemode
|
||||
gamemode-description = จัดลำดับความสำคัญของเกมเหนือกระบวนการอื่น
|
||||
|
||||
gamescope = Gamescope
|
||||
gamescope-description = Gamescope เป็นเครื่องมือจาก Valve ที่ช่วยให้เกมทำงานในอินสแตนซ์ Xwayland ที่แยกจากระบบ และรองรับ GPU ของ AMD, Intel และ Nvidia
|
||||
|
||||
discord-rpc = Discord RPC
|
||||
discord-rpc-description = Discord RPC อนุญาตให้คุณให้ข้อมูล Discord ที่คุณกำลังเล่นเกมอยู่เพื่อแจ้งให้เพื่อนของคุณทราบ
|
||||
icon = ไอคอน
|
||||
title = หัวข้อ
|
||||
description = คำอธิบาย
|
||||
|
||||
fps-unlocker = FPS Unlocker
|
||||
fps-unlocker-description = ลบข้อจำกัดในการเรนเดอร์เฟรมโดยการปรับเปลี่ยนหน่วยความจำของเกม สามารถตรวจจับได้โดยระบบการป้องกันการโกงของเกม
|
||||
|
||||
enabled = เปิดใช้งาน
|
||||
|
||||
fps-unlocker-interval = เขียนทับช่วงเวลา
|
||||
fps-unlocker-interval-description = การเขียนทับค่าจำกัด FPS ทุกมิลลิวินาที จำเป็นต้องเขียนทับเป็นระยะเพื่อป้องกันไม่ให้รีเซ็ต
|
||||
|
||||
window-mode = โหมดหน้าต่างเกม
|
||||
borderless = โหมดไร้ขอบเขต
|
||||
popup = ป๊อปอัพ
|
||||
fullscreen = เต็มจอ
|
7
assets/locales/th/environment.ftl
Normal file
7
assets/locales/th/environment.ftl
Normal file
|
@ -0,0 +1,7 @@
|
|||
environment = สภาวะแวดล้อม
|
||||
game-command = คำสั่งเกม
|
||||
game-command-description = คำสั่งที่ใช้ในการเปิดเกม ตัวยึดตำแหน่ง %command% ถูกสร้างขึ้นโดยอัตโนมัติโดยตัวเรียกใช้งาน ตัวอย่างเช่น: gamemoderun '%command%'
|
||||
new-variable = ตัวแปรใหม่
|
||||
name = ชื่อ
|
||||
value = ค่า
|
||||
add = เพิ่ม
|
66
assets/locales/th/errors.ftl
Normal file
66
assets/locales/th/errors.ftl
Normal file
|
@ -0,0 +1,66 @@
|
|||
launcher-folder-opening-error = ไม่สามารถเปิดโฟลเดอร์ Launcher ได้
|
||||
game-folder-opening-error = ไม่สามารถเปิดโฟลเดอร์เกมได้
|
||||
config-file-opening-error = ไม่สามารถเปิดไฟล์ config ได้
|
||||
debug-file-opening-error = ไม่สามารถเปิดไฟล์ debug ได้
|
||||
|
||||
wish-url-search-failed = ไม่พบ URL การอธิษฐาน
|
||||
wish-url-opening-error = ไม่สามารถเปิด URL การอธิษฐานได้
|
||||
|
||||
wine-run-error = ล้มเหลวในการปฏิบัติการเรียกใช้ไฟล์ {$executable} โดยใช้ Wine
|
||||
|
||||
game-launching-failed = ไม่สามารถเปิดเกมได้
|
||||
failed-get-selected-wine = ไม่สามารถดาวน์โหลดเวอร์ชัน wine ที่เลือกไปได้
|
||||
downloading-failed = การดาวน์โหลดล้มเหลว
|
||||
unpacking-failed = การแกะไฟล์ล้มเหลว
|
||||
|
||||
kill-game-process-failed = ไม่สามารถฆ่ากระบวนการของเกมได้
|
||||
|
||||
game-file-repairing-error = ไม่สามารถซ่อมแซมไฟล์เกมได้
|
||||
integrity-files-getting-error = ไม่สามารถรับไฟล์การตรวจสอบความสมบูรณ์ได้
|
||||
|
||||
background-downloading-failed = ดาวน์โหลดภาพพื้นหลังไม่สำเร็จ
|
||||
components-index-sync-failed = ไม่สามารถซิงค์ index ส่วนประกอบ
|
||||
components-index-verify-failed = ไม่สามารถตรวจสอบ index ส่วนประกอบได้
|
||||
config-update-error = บันทึกการกำหนดค่าไม่สำเร็จ
|
||||
wine-prefix-update-failed = ไม่สามารถอัปเดตการตั้งค่า Wine
|
||||
dxvk-install-failed = ติดตั้ง DXVK ไม่สำเร็จ
|
||||
voice-package-deletion-error = ลบแพ็คเกจเสียงไม่สำเร็จ
|
||||
|
||||
game-diff-finding-error = ไม่พบความแตกต่างของเกม
|
||||
patch-info-fetching-error = ไม่สามารถเรียกข้อมูลแพตช์ได้
|
||||
launcher-state-updating-error = อัปเดตสถานะ launcher ไม่สำเร็จ
|
||||
|
||||
package-not-available = ไม่พบแพ็คเกจนี้: {$package}
|
||||
wine-download-error = ดาวน์โหลด Wine ไม่สำเร็จ
|
||||
wine-unpack-errror = ไม่สามารถแกะไฟล์ Wine ได้
|
||||
wine-install-failed = ไม่สามารถติดตั้ง Wine ได้
|
||||
dxvk-download-error = ดาวน์โหลด DXVK ไม่สำเร็จ
|
||||
dxvk-unpack-error = ไม่สามารถแกะไฟล์ DXVK ได้
|
||||
dxvk-apply-error = ไม่สามารถติดตั้ง DXVK ได้
|
||||
|
||||
downloaded-wine-list-failed = ไม่สามารถแสดงเวอร์ชัน Wine ที่ดาวน์โหลดไปแล้วได้
|
||||
|
||||
patch-sync-failed = ไม่สามารถซิงค์โฟลเดอร์แพตช์ได้
|
||||
patch-state-check-failed = ไม่สามารถตรวจสอบสถานะโฟลเดอร์แพตช์ได้
|
||||
game-patching-error = ไม่สามารถแพตช์เกมได้
|
||||
|
||||
# Disable telemetry
|
||||
|
||||
telemetry-servers-disabling-error = ไม่สามารถปิดใช้งานเซิร์ฟเวอร์การวัดและส่งข้อมูล
|
||||
|
||||
# Sandbox
|
||||
|
||||
documentation-url-open-failed = ไม่สามารถเปิด URL เอกสารประกอบ
|
||||
|
||||
# Game
|
||||
|
||||
game-session-add-failed = ไม่สามารถเพิ่มเซสชันเกมได้
|
||||
game-session-update-failed = ไม่สามารถอัปเดตเซสชันเกมได้
|
||||
game-session-remove-failed = ไม่สามารถลบเซสชันเกมได้
|
||||
game-session-set-current-failed = ไม่สามารถตั้งเซสชันเกมปัจจุบันได้
|
||||
game-session-apply-failed = ไม่สามารถติดตั้งเซสชันเกมได้
|
||||
|
||||
# Enhancements
|
||||
|
||||
discord-rpc-icons-fetch-failed = ไม่สามารถดึงไอคอน Discord RPC
|
||||
discord-rpc-icon-download-failed = ไม่สามารถดาวน์โหลดไอคอน Discord RPC
|
64
assets/locales/th/first_run.ftl
Normal file
64
assets/locales/th/first_run.ftl
Normal file
|
@ -0,0 +1,64 @@
|
|||
welcome = ยินดีต้อนรับ
|
||||
|
||||
welcome-page-message =
|
||||
สวัสดี! ยินดีต้อนรับสู่ An Anime Game Launcher
|
||||
|
||||
เราจำเป็นต้องเตรียมบางสิ่งและดาวน์โหลดส่วนประกอบเริ่มต้นก่อนที่คุณจะสามารถเล่นเกมได้
|
||||
|
||||
tos-violation-warning = คำเตือนการละเมิดข้อตกลงการใช้บริการของเกม
|
||||
|
||||
tos-violation-warning-message =
|
||||
Launcher นี้เป็นเครื่องมือที่ไม่การเกี่ยวข้องแต่อย่างใดกับ {company-name} หรือ {company-alter-name}.
|
||||
|
||||
เครื่องมือนี้ออกแบบมาเพื่ออำนวยความสะดวกในการเล่น {game-name} บน Linux และสร้างขึ้นโดยมีวัตถุประสงค์เพียงอย่างเดียวในการติดตั้งและรันเกมโดยมีความยุ่งยากที่น้อยลง
|
||||
|
||||
Launcher นี้ทำงานได้โดยใช้คอมโพเนนต์ที่มีอยู่แล้ว ผู้ใช้จึงจะได้รับประสบการณ์ที่เรียบง่าย
|
||||
|
||||
อย่างไรก็ตาม ส่วนประกอบบางอย่างที่ใช้อาจฝ่าฝืนข้อกำหนดในการให้บริการของ {company-name} สำหรับเกม {game-name}
|
||||
|
||||
หากคุณใช้ Launcher นี้ บัญชีของคุณอาจถูกระบุว่าไม่เป็นไปตามข้อกำหนดของ {company-name}/{company-alter-name}.
|
||||
|
||||
หากเกิดเหตุการณ์เช่นนี้ เนื่องจากบัญชีของคุณไม่ปฏิบัติตามข้อกำหนด, {company-name}/{company-alter-name} จึงมีอิสระที่จะทำสิ่งที่พวกเขาอยาก รวมถึงการแบนบัญชีของคุณ
|
||||
|
||||
หากคุณเข้าใจถึงความเสี่ยงในการพยายามเล่นเกมอย่างไม่เป็นทางการ ให้กด ตกลง เพื่อดำเนินการต่อ
|
||||
|
||||
tos-dialog-title = คุณแน่ใจหรือว่าคุณเข้าใจสิ่งที่เราพูด?
|
||||
tos-dialog-message =
|
||||
1. อย่าเผยแพร่ข้อมูลใดๆ เกี่ยวกับโครงการนี้
|
||||
2. อย่าใช้มันในทางที่ผิดโดยใช้ไคลเอนต์ดัดแปลง
|
||||
3. ถามคำถามเป็นพิเศษในเซิร์ฟเวอร์ Discord หรือ Matrix ของเรา
|
||||
|
||||
|
||||
dependencies = โปรแกรมที่จำเป็น
|
||||
missing-dependencies-title = คุณขาดโปรแกรมที่จำเป็น!
|
||||
missing-dependencies-message = คุณต้องติดตั้งแพ็คเกจบางอย่างให้กับระบบของคุณก่อนที่จะดำเนินการติดตั้งต่อ
|
||||
|
||||
|
||||
default-paths = เส้นทางเริ่มต้น
|
||||
choose-default-paths = เลือกเส้นทางเริ่มต้น
|
||||
show-all-folders = ฉันรู้ว่าฉันกำลังทำอะไรอยู่
|
||||
show-all-folders-subtitle = แสดงการตั้งค่าการเลือกเส้นทางเพิ่มเติม (ทำตามที่ฉันบอก...)
|
||||
runners-folder = โฟลเดอร์ Runners
|
||||
dxvks-folder = โฟลเดอร์ DXVKs
|
||||
wine-prefix-folder = โฟลเดอร์ prefix ของ Wine
|
||||
global-game-installation-folder = โฟลเดอร์การติดตั้งเวอร์ชันเกมสากล
|
||||
chinese-game-installation-folder = โฟลเดอร์การติดตั้งเวอร์ชันเกมจีน
|
||||
fps-unlocker-folder = โฟลเดอร์ FPS Unlocker
|
||||
components-index = Index ส่วนประกอบ
|
||||
patch-folder = โฟลเดอร์แพทช์
|
||||
temp-folder = โฟลเดอร์ชั่วคราว
|
||||
|
||||
migrate = ย้าย
|
||||
|
||||
|
||||
select-voice-packages = เลือกแพ็คเกจภาษาเสียง
|
||||
|
||||
|
||||
download-components = ดาวน์โหลดส่วนประกอบ
|
||||
download-dxvk = ดาวน์โหลด DXVK
|
||||
apply-dxvk = ติดตั้ง DXVK
|
||||
|
||||
|
||||
finish = สำเร็จ
|
||||
finish-title = ทุกอย่างเสร็จแล้ว!
|
||||
finish-message = ดาวน์โหลดส่วนประกอบพื้นฐานทั้งหมดแล้ว ตอนนี้คุณสามารถรีสตาร์ท Launcher และดาวน์โหลดเกมได้ ยินดีต้อนรับสู่ club ของเรา!
|
7
assets/locales/th/game.ftl
Normal file
7
assets/locales/th/game.ftl
Normal file
|
@ -0,0 +1,7 @@
|
|||
game-sessions = เซสชันเกม
|
||||
|
||||
active-sessions = เซสชันที่ใช้งานอยู่
|
||||
active-session-description = เซสชั่นเกมที่เลือกในปัจจุบัน อัปเดตหลังจากเปิดตัวเกมแต่ละครั้ง
|
||||
|
||||
update-session = อัปเดตเซสชันโดยใช้ค่าตั้งค่า Wine ปัจจุบัน
|
||||
delete-session = ลบเซสชัน
|
16
assets/locales/th/gamescope.ftl
Normal file
16
assets/locales/th/gamescope.ftl
Normal file
|
@ -0,0 +1,16 @@
|
|||
game-resolution = ความละเอียดของเกม
|
||||
gamescope-resolution = ความละเอียดของ Gamescope
|
||||
|
||||
upscaling = การเพิ่มขนาดความละเอียด
|
||||
|
||||
integer-scaling = มาตราส่วนจำนวนเต็ม
|
||||
integer-scaling-description = เปลี่ยนแต่ละพิกเซลเป็นกลุ่มสี่เหลี่ยมจัตุรัสหรือสี่เหลี่ยมของจำนวนเต็มของพิกเซลสีเดียวกัน ป้องกันการสูญเสียความคมชัดเมื่อปรับขนาด Full HD เป็น 4K
|
||||
gamescope-fsr-description = เทคนิคการขยายขนาดที่พัฒนาโดย AMD เพื่อคุณภาพการขยายขนาดที่ดีขึ้น
|
||||
nis-description = เทคนิคการขยายขนาดโอเพ่นซอร์สที่พัฒนาโดย Nvidia เป็นทางเลือกข้ามผู้จำหน่ายและมีค่าใช้จ่ายต่ำแทนโซลูชัน DLSS ที่เป็นกรรมสิทธิ์ ซึ่งหมายความว่าใช้งานได้กับ AMD และ Intel GPU รวมถึง Nvidia GPU
|
||||
|
||||
other-settings = การตั้งค่าอื่นๆ
|
||||
framerate-limit = ขีดจำกัดเฟรมเรต
|
||||
unfocused-framerate-limit = เฟรมเรทจำกัดขณะไม่ได้โฟกัส
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
70
assets/locales/th/general.ftl
Normal file
70
assets/locales/th/general.ftl
Normal file
|
@ -0,0 +1,70 @@
|
|||
appearance = รูปร่าง
|
||||
modern = โมเดิร์น
|
||||
classic = คลาสสิค
|
||||
update-background = อัพเดตภาพพื้นหลัง
|
||||
update-background-description = ดาวน์โหลดภาพพื้นหลังสำหรับ launcher คุณสามารถปิดการใช้งานเพื่อใช้รูปภาพที่คุณกำหนดเองแทนได้
|
||||
|
||||
launcher-language = ภาษาของ launcher
|
||||
launcher-language-description = ใช้หลังจากรีสตาร์ท launcher
|
||||
|
||||
game-edition = ฉบับเกม
|
||||
global = สากล
|
||||
china = จีน
|
||||
|
||||
game-environment = สภาพแวดล้อมของเกม
|
||||
game-environment-description = รับคุณสมบัติเฉพาะ เช่น วิธีการชำระเงินอื่นๆ
|
||||
|
||||
game-voiceovers = ภาษาพากย์เสียงเกม
|
||||
game-voiceovers-description = ภาษาเสียงพากย์เกมที่ดาวน์โหลดได้ คุณสามารถเลือกในการตั้งค่าเกม
|
||||
english = ภาษาอังกฤษ
|
||||
japanese = ภาษาญี่ปุ่น
|
||||
korean = ภาษาเกาหลี
|
||||
chinese = ภาษาจีน
|
||||
|
||||
migrate-installation = ย้ายการติดตั้งเกม
|
||||
migrate-installation-description = เปิดหน้าต่างพิเศษที่คุณสามารถเปลี่ยนโฟลเดอร์การติดตั้งเกมของคุณได้
|
||||
repair-game = ซ่อมแซมการติดตั้งเกม
|
||||
|
||||
status = สถานะ
|
||||
|
||||
game-version = เวอร์ชันเกม
|
||||
game-not-installed = ยังไม่ได้ติดตั้ง
|
||||
|
||||
game-predownload-available = มีการอัปเดตเกมให้ดาวน์โหลดได้ล่วงหน้าแล้ว: {$old} -> {$new}
|
||||
game-update-available = มีอัปเดตเวอร์ชันเกมใหม่: {$old} -> {$new}
|
||||
game-outdated = เวอร์ชันเกมล้าสมัยเกินไปและไม่สามารถอัปเดตได้. เวอร์ชันล่าสุด: {$latest}
|
||||
|
||||
player-patch-version = เวอร์ชั่นแพทช์
|
||||
player-patch-version-description = แพทช์หลักที่ให้คุณเล่นเกมบน Linux
|
||||
|
||||
patch-not-available = ไม่พร้อมใช้งาน
|
||||
patch-not-available-tooltip = ไม่สามารถเข้าถึงเซิร์ฟเวอร์แพทช์ได้
|
||||
|
||||
patch-outdated = แพทช์ล้าสมัย ({$current})
|
||||
patch-outdated-tooltip = แพทช์ล้าสมัยแล้ว: {$current} -> {$latest}
|
||||
|
||||
patch-preparation = เตรียมการ
|
||||
patch-preparation-tooltip = แพทช์อยู่ระหว่างการพัฒนา
|
||||
|
||||
patch-testing-tooltip = มีแพทช์ทดสอบให้ใช้งาน
|
||||
patch-not-applied-tooltip = แพทช์ยังไม่มีการติดตั้ง
|
||||
|
||||
apply-main-patch = ติดตั้งแพทช์หลัก
|
||||
apply-main-patch-description = การทดลอง. การปิดใช้งานจะทำให้คุณสามารถรันเกมได้โดยไม่ต้องใช้แพตช์ สิ่งนี้อาจไม่ทำงานหรือต้องมีการแก้ไขไฟล์ด้วยตนเอง ใใช้เฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่
|
||||
|
||||
disable-mhypbase = ปิดการใช้งาน mhypbase
|
||||
disable-mhypbase-description = การทดลอง. หากเปิดใช้งาน launcher จะปิดใช้งาน mhypbase.dll ในระหว่างการติดตั้งแพตช์หลัก ซึ่งในปัจจุบันเทียบเท่ากับแพตช์ xlua ปรับปรุงประสิทธิภาพและลดการใช้งาน CPU
|
||||
|
||||
ask-superuser-permissions = ขอสิทธิ์ผู้ใช้ขั้นสูง (superuser)
|
||||
ask-superuser-permissions-description = Launcher จะใช้ไฟล์เหล่านี้เพื่ออัปเดตไฟล์โฮสต์ของคุณโดยอัตโนมัติ สิ่งนี้ไม่จำเป็นในรุ่น flatpak
|
||||
|
||||
launcher-behavior = พฤติกรรม Launcher
|
||||
launcher-behavior-description = หน้าต่าง Launcher ควรทำอย่างไรเมื่อเริ่มเกม
|
||||
|
||||
wine-tools = เครื่องมือ Wine
|
||||
command-line = Command line
|
||||
registry-editor = Registry editor
|
||||
explorer = Explorer
|
||||
task-manager = Task manager
|
||||
configuration = Configuration
|
||||
debugger = Debugger
|
76
assets/locales/th/main.ftl
Normal file
76
assets/locales/th/main.ftl
Normal file
|
@ -0,0 +1,76 @@
|
|||
custom = กำหนดเอง
|
||||
none = ไม่ใช้
|
||||
default = ค่าเริ่มต้น
|
||||
details = รายละเอียด
|
||||
options = ตัวเลือก
|
||||
|
||||
width = ความกว้าง
|
||||
height = ความสูง
|
||||
|
||||
# Menu items
|
||||
|
||||
launcher-folder = โฟลเดอร์ Launcher
|
||||
game-folder = โฟลเดอร์เกม
|
||||
config-file = ไฟล์ Config
|
||||
debug-file = ไฟล์ Debug
|
||||
wish-url = เปิด URL การอธิษฐาน
|
||||
about = เกี่ยวกับ
|
||||
|
||||
|
||||
close = ปิด
|
||||
hide = ซ่อน
|
||||
nothing = ไม่ทำอะไร
|
||||
save = บันทึก
|
||||
continue = ดำเนินการต่อ
|
||||
resume = ดำเนินการต่อ
|
||||
exit = ออก
|
||||
check = ตรวจสอบ
|
||||
restart = เริ่มต้นใหม่
|
||||
agree = ตกลง
|
||||
|
||||
|
||||
loading-data = กำลังโหลดข้อมูล
|
||||
downloading-background-picture = กำลังดาวน์โหลดภาพพื้นหลัง
|
||||
updating-components-index = กำลังอัปเดต index ส่วนประกอบ
|
||||
loading-game-version = กำลังโหลดเวอร์ชั่นเกม
|
||||
loading-patch-status = กำลังโหลดสถานะแพทช์
|
||||
loading-launcher-state = กำลังโหลดสถานะ launcher
|
||||
loading-launcher-state--game = กำลังโหลดสถานะ launcher: กำลังตรวจสอบเวอร์ชันเกม
|
||||
loading-launcher-state--voice = กำลังโหลดสถานะ launcher: กำลังตรวจสอบภาษาพากย์เสียง {$locale}
|
||||
loading-launcher-state--patch = กำลังโหลดสถานะ launcher: กำลังตรวจสอบแพตช์ที่ติดตั้ง
|
||||
|
||||
|
||||
checking-free-space = กำลังตรวจสอบพื้นที่ว่าง
|
||||
downloading = กำลังดาวน์โหลด
|
||||
updating-permissions = กำลังอัปเดตสิทธิ์
|
||||
unpacking = กำลังแกะ
|
||||
verifying-files = กำลังตรวจสอบไฟล์
|
||||
repairing-files = กำลังซ่อมแซมไฟล์
|
||||
migrating-folders = กำลังย้ายโฟลเดอร์
|
||||
applying-hdiff = กำลังติดตั้งแพตช์ hdiff
|
||||
removing-outdated = กำลังลบไฟล์ที่ล้าสมัย
|
||||
|
||||
|
||||
components-index-updated = อัปเดตส่วนประกอบแล้ว
|
||||
|
||||
|
||||
launch = เริ่มเกมส์
|
||||
migrate-folders = ย้ายโฟลเดอร์
|
||||
migrate-folders-tooltip = อัพเดตโครงสร้างโฟลเดอร์เกม
|
||||
apply-patch = ติดตั้งแพทช์
|
||||
disable-telemetry = ปิดใช้งานการวัดและส่งข้อมูล
|
||||
download-wine = ดาวน์โหลด Wine
|
||||
create-prefix = สร้างการตั้งค่า Wine
|
||||
update = อัปเดต
|
||||
download = ดาวน์โหลด
|
||||
predownload-update = ดาวน์โหลดล่วงหน้า {$version} อัปเดต ({$size})
|
||||
|
||||
kill-game-process = ฆ่ากระบวนการเกม
|
||||
|
||||
main-window--patch-unavailable-tooltip = เซิร์ฟเวอร์แพตช์ไม่พร้อมใช้งานและ launcher ไม่สามารถตรวจสอบสถานะการแพตช์ของเกมได้ คุณสามารถรันเกมได้แต่ต้องยอมรับความเสี่ยงเอง
|
||||
main-window--patch-outdated-tooltip = โแพตช์ล้าสมัยหรืออยู่ในสถานะเตรียมการ ดังนั้นจึงไม่สามารถใช้งานได้ โปรดกลับมาใหม่ในภายหลังเพื่อดูสถานะ
|
||||
main-window--version-outdated-tooltip = เวอร์ชันล้าสมัยเกินไปและไม่สามารถอัปเดตได้
|
||||
|
||||
preferences = การตั้งค่า
|
||||
general = ทั่วไป
|
||||
enhancements = การปรับปรุง
|
28
assets/locales/th/sandbox.ftl
Normal file
28
assets/locales/th/sandbox.ftl
Normal file
|
@ -0,0 +1,28 @@
|
|||
sandbox = แซนด์บ็อกซ์
|
||||
sandbox-description = รันเกมที่แยกออกจากระบบ เพื่อป้องกันไม่ให้เข้าถึงข้อมูลส่วนบุคคลของคุณ
|
||||
|
||||
enable-sandboxing = เปิดใช้งานแซนด์บ็อกซ์
|
||||
enable-sandboxing-description = รันเกมในระบบไฟล์รูทของคุณแบบอ่านได้อย่างเดียว
|
||||
|
||||
hide-home-directory = ซ่อนโฮมไดเร็กตอรี่
|
||||
hide-home-directory-description = ซ่อนโฟลเดอร์ /home, /var/home/$USER และ $HOME ของคุณจากเกม
|
||||
|
||||
hostname = ชื่อโฮสต์
|
||||
additional-arguments = arguments เพิ่มเติม
|
||||
|
||||
private-directories = ไดเรกทอรีส่วนตัว
|
||||
private-directories-description = โฟลเดอร์เหล่านี้จะถูกแทนที่ด้วยระบบไฟล์เสมือนที่ว่างเปล่า (tmpfs) และไฟล์เหล่านั้นจะไม่สามารถเข้าถึงได้โดยเกมแซนด์บ็อกซ์
|
||||
|
||||
path = เส้นทาง
|
||||
|
||||
shared-directories = ไดเรกทอรีใช้ร่วมกัน
|
||||
shared-directories-description = ไดเร็กทอรีเหล่านี้จะเชื่อมโยงกับไดเร็กทอรีในระบบโฮสต์ของคุณ
|
||||
|
||||
original-path = เส้นทางเดิม
|
||||
new-path = เส้นทางใหม่
|
||||
|
||||
read-only = อ่านได้เท่านั้น
|
||||
read-only-description = ห้ามเกมเขียนข้อมูลใดๆ ลงในไดเร็กทอรีนี้
|
||||
|
||||
symlinks = Symlinks
|
||||
symlinks-description = สร้าง Symbolic Link จากตำแหน่งเดิมไปยังตำแหน่งใหม่ภายในแซนด์บ็อกซ์ของคุณ
|
|
@ -11,3 +11,6 @@ nis-description = DLSS teknolojisine düşük maliyetli bir alternatif olarak Nv
|
|||
other-settings = Diğer ayarlar
|
||||
framerate-limit = Kare hızı limiti
|
||||
unfocused-framerate-limit = Odakta değilken kare hızı limiti
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Відкрита техніка масштабування з
|
|||
other-settings = Інші налаштування
|
||||
framerate-limit = Обмеження кількості кадрів
|
||||
unfocused-framerate-limit = Обмеження кількості кадрів поза фокусом
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -11,3 +11,6 @@ nis-description = Một kỹ thuật nâng cấp mã nguồn mở do Nvidia phá
|
|||
other-settings = Cài đặt khác
|
||||
framerate-limit = Giới hạn tốc độ khung hình
|
||||
unfocused-framerate-limit = Giới hạn tốc độ khung hình khi không tập trung
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
game-resolution = 游戏分辨率
|
||||
gamescope-resolution = Gamescope 分辨率
|
||||
|
||||
integer-scaling = 整数倍数缩放
|
||||
|
||||
other-settings = 其它设置
|
||||
framerate-limit = 帧率限制
|
||||
unfocused-framerate-limit = 切出游戏帧率限制
|
||||
integer-scaling = 整数倍数缩放
|
||||
|
||||
force-grab-cursor = Force grab cursor
|
||||
force-grab-cursor-description = Always use relative mouse mode instead of flipping dependent on cursor visibility. The mouse cursor will correctly be centered in the game
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
<file preprocess="xml-stripblanks" alias="list-add-symbolic.svg">images/icons/list-add-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="view-refresh-symbolic.svg">images/icons/view-refresh-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="applications-games-symbolic.svg">images/icons/applications-games-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="applications-system-symbolic.svg">images/icons/applications-system-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="applications-graphics-symbolic.svg">images/icons/applications-graphics-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="go-next-symbolic.svg">images/icons/go-next-symbolic.svg</file>
|
||||
<file preprocess="xml-stripblanks" alias="dialog-information-symbolic.svg">images/icons/dialog-information-symbolic.svg</file>
|
||||
|
|
11
src/i18n.rs
11
src/i18n.rs
|
@ -27,7 +27,8 @@ pub const SUPPORTED_LANGUAGES: &[LanguageIdentifier] = &[
|
|||
langid!("pl-pl"),
|
||||
langid!("vi-vn"),
|
||||
langid!("nl-nl"),
|
||||
langid!("uk-ua")
|
||||
langid!("uk-ua"),
|
||||
langid!("th-th")
|
||||
];
|
||||
|
||||
pub static mut LANG: LanguageIdentifier = langid!("en-us");
|
||||
|
@ -105,9 +106,7 @@ macro_rules! tr {
|
|||
use fluent_templates::Loader;
|
||||
|
||||
#[allow(unused_unsafe)]
|
||||
$crate::i18n::LOCALES
|
||||
.lookup(unsafe { &$crate::i18n::LANG }, $id)
|
||||
.expect(&format!("Failed to find a message with given id: {}", stringify!($id)))
|
||||
$crate::i18n::LOCALES.lookup(unsafe { &$crate::i18n::LANG }, $id)
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -125,9 +124,7 @@ macro_rules! tr {
|
|||
)*
|
||||
|
||||
#[allow(unused_unsafe)]
|
||||
$crate::i18n::LOCALES
|
||||
.lookup_complete(unsafe { &$crate::i18n::LANG }, $id, Some(&args))
|
||||
.expect(&format!("Failed to find a message with given id: {}", stringify!($id)))
|
||||
$crate::i18n::LOCALES.lookup_complete(unsafe { &$crate::i18n::LANG }, $id, Some(&args))
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
92
src/main.rs
92
src/main.rs
|
@ -70,6 +70,36 @@ lazy_static::lazy_static! {
|
|||
///
|
||||
/// Standard is `$HOME/.local/share/anime-game-launcher/.first-run`
|
||||
pub static ref FIRST_RUN_FILE: PathBuf = LAUNCHER_FOLDER.join(".first-run");
|
||||
|
||||
/// Global app's css
|
||||
static ref GLOBAL_CSS: String = format!("
|
||||
progressbar > text {{
|
||||
margin-bottom: 4px;
|
||||
}}
|
||||
|
||||
window.classic-style {{
|
||||
background: url(\"file://{}\");
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}}
|
||||
|
||||
window.classic-style progressbar {{
|
||||
background-color: #00000020;
|
||||
border-radius: 16px;
|
||||
padding: 8px 16px;
|
||||
}}
|
||||
|
||||
window.classic-style progressbar:hover {{
|
||||
background-color: #00000060;
|
||||
color: #ffffff;
|
||||
transition-duration: 0.5s;
|
||||
transition-timing-function: linear;
|
||||
}}
|
||||
|
||||
.round-bin {{
|
||||
border-radius: 24px;
|
||||
}}
|
||||
", BACKGROUND_FILE.to_string_lossy());
|
||||
}
|
||||
|
||||
fn main() -> anyhow::Result<()> {
|
||||
|
@ -105,22 +135,24 @@ fn main() -> anyhow::Result<()> {
|
|||
let mut no_verbose_tracing = false;
|
||||
|
||||
let args = std::env::args().collect::<Vec<_>>();
|
||||
let mut gtk_args = Vec::new();
|
||||
|
||||
// Parse arguments
|
||||
for i in 0..args.len() {
|
||||
if args[i] == "--debug" {
|
||||
force_debug = true;
|
||||
} else if args[i] == "--run-game" {
|
||||
run_game = true;
|
||||
} else if args[i] == "--just-run-game" {
|
||||
just_run_game = true;
|
||||
} else if args[i] == "--no-verbose-tracing" {
|
||||
no_verbose_tracing = true;
|
||||
} else if args[i] == "--session" {
|
||||
match args[i].as_str() {
|
||||
"--debug" => force_debug = true,
|
||||
"--run-game" => run_game = true,
|
||||
"--just-run-game" => just_run_game = true,
|
||||
"--no-verbose-tracing" => no_verbose_tracing = true,
|
||||
|
||||
"--session" => {
|
||||
// Switch active session prior running the app
|
||||
if let Some(session) = args.get(i + 1) {
|
||||
Sessions::set_current(session.to_owned())?;
|
||||
}
|
||||
},
|
||||
|
||||
arg => gtk_args.push(arg.to_string())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -170,36 +202,6 @@ fn main() -> anyhow::Result<()> {
|
|||
gtk::glib::set_application_name("An Anime Game Launcher");
|
||||
gtk::glib::set_program_name(Some("An Anime Game Launcher"));
|
||||
|
||||
// Set global css
|
||||
relm4::set_global_css(&format!("
|
||||
progressbar > text {{
|
||||
margin-bottom: 4px;
|
||||
}}
|
||||
|
||||
window.classic-style {{
|
||||
background: url(\"file://{}\");
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
}}
|
||||
|
||||
window.classic-style progressbar {{
|
||||
background-color: #00000020;
|
||||
border-radius: 16px;
|
||||
padding: 8px 16px;
|
||||
}}
|
||||
|
||||
window.classic-style progressbar:hover {{
|
||||
background-color: #00000060;
|
||||
color: #ffffff;
|
||||
transition-duration: 0.5s;
|
||||
transition-timing-function: linear;
|
||||
}}
|
||||
|
||||
.round-bin {{
|
||||
border-radius: 24px;
|
||||
}}
|
||||
", BACKGROUND_FILE.to_string_lossy()));
|
||||
|
||||
// Set UI language
|
||||
let lang = CONFIG.launcher.language.parse().expect("Wrong language format used in config");
|
||||
|
||||
|
@ -210,7 +212,11 @@ fn main() -> anyhow::Result<()> {
|
|||
// Run FirstRun window if .first-run file persist
|
||||
if FIRST_RUN_FILE.exists() {
|
||||
// Create the app
|
||||
let app = RelmApp::new(APP_ID);
|
||||
let app = RelmApp::new(APP_ID)
|
||||
.with_args(gtk_args);
|
||||
|
||||
// Set global css
|
||||
app.set_global_css(&GLOBAL_CSS);
|
||||
|
||||
// Show first run window
|
||||
app.run::<FirstRunApp>(());
|
||||
|
@ -240,7 +246,11 @@ fn main() -> anyhow::Result<()> {
|
|||
}
|
||||
|
||||
// Create the app
|
||||
let app = RelmApp::new(APP_ID);
|
||||
let app = RelmApp::new(APP_ID)
|
||||
.with_args(gtk_args);
|
||||
|
||||
// Set global css
|
||||
app.set_global_css(&GLOBAL_CSS);
|
||||
|
||||
// Show main window
|
||||
app.run::<App>(());
|
||||
|
|
|
@ -77,7 +77,9 @@ impl SimpleComponent for AboutDialog {
|
|||
"日本語 — @zozonteq https://github.com/zozonteq",
|
||||
"한국어 — @project-dy https://github.com/project-dy",
|
||||
"Indonesia — @yumekarisu https://github.com/yumekarisu",
|
||||
"Tiếng Việt — Nguyễn Hữu Chánh https://github.com/Chanhnh"
|
||||
"Tiếng Việt — Nguyễn Hữu Chánh https://github.com/Chanhnh",
|
||||
"Українська — Іван Потієнко https://github.com/xxanqw",
|
||||
"ไทย — @thegooglerider https://github.com/TheGoogleRider2"
|
||||
].join("\n"),
|
||||
|
||||
set_debug_info: &[
|
||||
|
@ -92,10 +94,28 @@ impl SimpleComponent for AboutDialog {
|
|||
|
||||
set_release_notes_version: &APP_VERSION,
|
||||
set_release_notes: &[
|
||||
"<p>Added</p>",
|
||||
|
||||
"<ul>",
|
||||
"<li>Bundle applications-system-symbolic icon to the app</li>",
|
||||
"<li>Added force grab cursor option to the gamescope settings</li>",
|
||||
"<li>Added Thai</li>",
|
||||
"<li>Added Ukrainian</li>",
|
||||
"</ul>",
|
||||
|
||||
"<p>Changed</p>",
|
||||
|
||||
"<ul>",
|
||||
"<li>Replaced FPS unlocker by a custom one</li>",
|
||||
"<li>Update wish url</li>",
|
||||
"<li>Updated dependencies</li>",
|
||||
"<li>Improved app args parsing</li>",
|
||||
"<li>Updated locales</li>",
|
||||
"</ul>",
|
||||
|
||||
"<p>Fixed</p>",
|
||||
|
||||
"<ul>",
|
||||
"<li>Fixed GtkSwitch UI state representation</li>",
|
||||
"</ul>"
|
||||
].join("\n"),
|
||||
|
||||
|
@ -113,11 +133,7 @@ impl SimpleComponent for AboutDialog {
|
|||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
fn init(_init: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
|
||||
tracing::info!("Initializing about dialog");
|
||||
|
||||
let model = Self {
|
||||
|
|
|
@ -287,11 +287,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let model = Self {
|
||||
progress_bar: ProgressBar::builder()
|
||||
.launch(ProgressBarInit {
|
||||
|
|
|
@ -135,11 +135,7 @@ impl SimpleAsyncComponent for DependenciesApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let distro = whatadistro::identify();
|
||||
|
||||
let model = Self {
|
||||
|
|
|
@ -264,11 +264,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let model = Self {
|
||||
progress_bar: ProgressBar::builder()
|
||||
.launch(ProgressBarInit {
|
||||
|
|
|
@ -68,11 +68,7 @@ impl SimpleAsyncComponent for FinishApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let model = Self;
|
||||
let widgets = view_output!();
|
||||
|
||||
|
|
|
@ -115,11 +115,7 @@ impl SimpleComponent for FirstRunApp {
|
|||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
_parent: Self::Init,
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
fn init(_parent: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
|
||||
tracing::info!("Initializing first run window");
|
||||
|
||||
let toast_overlay = adw::ToastOverlay::new();
|
||||
|
|
|
@ -51,7 +51,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
#[local_ref]
|
||||
add_suffix = english -> gtk::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_state: true
|
||||
set_active: true
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -110,11 +110,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let model = Self {
|
||||
english: gtk::Switch::new(),
|
||||
japanese: gtk::Switch::new(),
|
||||
|
|
|
@ -68,11 +68,7 @@ impl SimpleAsyncComponent for WelcomeApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
let model = Self;
|
||||
let widgets = view_output!();
|
||||
|
||||
|
|
|
@ -625,11 +625,7 @@ impl SimpleComponent for App {
|
|||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
fn init(_init: Self::Init, root: Self::Root, sender: ComponentSender<Self>) -> ComponentParts<Self> {
|
||||
tracing::info!("Initializing main window");
|
||||
|
||||
let model = App {
|
||||
|
@ -763,7 +759,7 @@ impl SimpleComponent for App {
|
|||
let web_cache = String::from_utf8_lossy(&web_cache);
|
||||
|
||||
// https://webstatic-sea.[ho-yo-ver-se].com/[ge-nsh-in]/event/e20190909gacha-v2/index.html?......
|
||||
if let Some(url) = web_cache.lines().rev().find(|line| line.contains("gacha-v2/index.html")) {
|
||||
if let Some(url) = web_cache.lines().rev().find(|line| line.contains("gacha-v3/index.html")) {
|
||||
let url_begin_pos = url.find("https://").unwrap();
|
||||
let url_end_pos = url_begin_pos + url[url_begin_pos..].find("\0\0\0\0").unwrap();
|
||||
|
||||
|
|
|
@ -36,11 +36,7 @@ impl SimpleComponent for MigrateInstallationApp {
|
|||
}
|
||||
}
|
||||
|
||||
fn init(
|
||||
_init: Self::Init,
|
||||
root: &Self::Root,
|
||||
_sender: ComponentSender<Self>,
|
||||
) -> ComponentParts<Self> {
|
||||
fn init(_init: Self::Init, root: Self::Root, _sender: ComponentSender<Self>) -> ComponentParts<Self> {
|
||||
tracing::info!("Initializing migration window");
|
||||
|
||||
let model = Self {
|
||||
|
|
|
@ -71,21 +71,15 @@ impl SimpleAsyncComponent for EnvironmentPage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("environment")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -150,12 +144,9 @@ impl SimpleAsyncComponent for EnvironmentPage {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing environment settings");
|
||||
|
||||
let mut model = Self {
|
||||
|
|
|
@ -74,11 +74,7 @@ impl AsyncFactoryComponent for GameSession {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init_model(
|
||||
init: Self::Init,
|
||||
_index: &DynamicIndex,
|
||||
_sender: AsyncFactorySender<Self>,
|
||||
) -> Self {
|
||||
async fn init_model(init: Self::Init, _index: &DynamicIndex, _sender: AsyncFactorySender<Self>) -> Self {
|
||||
init
|
||||
}
|
||||
}
|
||||
|
@ -105,21 +101,15 @@ impl SimpleAsyncComponent for GamePage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("game")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -150,12 +140,9 @@ impl SimpleAsyncComponent for GamePage {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing game settings");
|
||||
|
||||
let mut model = Self {
|
||||
|
|
|
@ -17,6 +17,8 @@ use anime_launcher_sdk::anime_game_core::installer::downloader::Downloader;
|
|||
use anime_launcher_sdk::discord_rpc::DiscordRpc;
|
||||
use anime_launcher_sdk::is_available;
|
||||
|
||||
use enum_ordinalize::Ordinalize;
|
||||
|
||||
pub mod game;
|
||||
pub mod sandbox;
|
||||
pub mod environment;
|
||||
|
@ -232,12 +234,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.wine.borderless,
|
||||
set_active: CONFIG.game.wine.borderless,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.borderless = switch.state();
|
||||
config.game.wine.borderless = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -277,12 +279,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.wine.virtual_desktop.enabled,
|
||||
set_active: CONFIG.game.wine.virtual_desktop.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.virtual_desktop.enabled = switch.state();
|
||||
config.game.wine.virtual_desktop.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -298,12 +300,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.wine.drives.drive_c,
|
||||
set_active: CONFIG.game.wine.drives.drive_c,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.drives.drive_c = switch.state();
|
||||
config.game.wine.drives.drive_c = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -343,12 +345,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.wine.drives.game_folder.is_some(),
|
||||
set_active: CONFIG.game.wine.drives.game_folder.is_some(),
|
||||
|
||||
connect_state_notify[map_game_folder_row] => move |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
if switch.state() {
|
||||
if switch.is_active() {
|
||||
config.game.wine.drives.game_folder = Some(AllowedDrives::list()[map_game_folder_row.selected() as usize]);
|
||||
} else {
|
||||
config.game.wine.drives.game_folder = None;
|
||||
|
@ -415,12 +417,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.enhancements.fsr.enabled,
|
||||
set_active: CONFIG.game.enhancements.fsr.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.fsr.enabled = switch.state();
|
||||
config.game.enhancements.fsr.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -438,12 +440,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.enhancements.gamemode,
|
||||
set_active: CONFIG.game.enhancements.gamemode,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamemode = switch.state();
|
||||
config.game.enhancements.gamemode = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -470,12 +472,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.enhancements.gamescope.enabled,
|
||||
set_active: CONFIG.game.enhancements.gamescope.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamescope.enabled = switch.state();
|
||||
config.game.enhancements.gamescope.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -494,12 +496,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_state: CONFIG.launcher.discord_rpc.enabled,
|
||||
set_active: CONFIG.launcher.discord_rpc.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.launcher.discord_rpc.enabled = switch.state();
|
||||
config.launcher.discord_rpc.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -588,12 +590,12 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.game.enhancements.fps_unlocker.enabled,
|
||||
set_active: CONFIG.game.enhancements.fps_unlocker.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.fps_unlocker.enabled = switch.state();
|
||||
config.game.enhancements.fps_unlocker.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -627,13 +629,13 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
},
|
||||
|
||||
#[local_ref]
|
||||
game_page -> gtk::Box {},
|
||||
game_page -> adw::NavigationPage,
|
||||
|
||||
#[local_ref]
|
||||
sandbox_page -> gtk::Box {},
|
||||
sandbox_page -> adw::NavigationPage,
|
||||
|
||||
#[local_ref]
|
||||
environment_page -> gtk::Box {}
|
||||
environment_page -> adw::NavigationPage,
|
||||
}
|
||||
|
||||
async fn init(
|
||||
|
@ -769,28 +771,28 @@ impl SimpleAsyncComponent for EnhancementsApp {
|
|||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.close_subpage();
|
||||
.pop_subpage();
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenGameSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.game_page.widget());
|
||||
.push_subpage(self.game_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenSandboxSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.sandbox_page.widget());
|
||||
.push_subpage(self.sandbox_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::OpenEnvironmentSettingsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.environment_page.widget());
|
||||
.push_subpage(self.environment_page.widget());
|
||||
}
|
||||
|
||||
EnhancementsAppMsg::Toast { title, description } => {
|
||||
|
|
|
@ -98,21 +98,15 @@ impl SimpleAsyncComponent for SandboxPage {
|
|||
type Output = EnhancementsAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("sandbox")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(EnhancementsAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -133,12 +127,12 @@ impl SimpleAsyncComponent for SandboxPage {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.enabled,
|
||||
set_active: CONFIG.sandbox.enabled,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.enabled = switch.state();
|
||||
config.sandbox.enabled = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -154,12 +148,12 @@ impl SimpleAsyncComponent for SandboxPage {
|
|||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
||||
set_state: CONFIG.sandbox.isolate_home,
|
||||
set_active: CONFIG.sandbox.isolate_home,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.sandbox.isolate_home = switch.state();
|
||||
config.sandbox.isolate_home = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -321,12 +315,9 @@ impl SimpleAsyncComponent for SandboxPage {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing sandbox settings");
|
||||
|
||||
let mut model = Self {
|
||||
|
|
|
@ -6,6 +6,8 @@ use anime_launcher_sdk::genshin::config::Config;
|
|||
|
||||
use anime_launcher_sdk::config::schema_blanks::prelude::*;
|
||||
|
||||
use enum_ordinalize::Ordinalize;
|
||||
|
||||
use crate::*;
|
||||
|
||||
pub struct GamescopeApp;
|
||||
|
@ -128,12 +130,12 @@ impl SimpleAsyncComponent for GamescopeApp {
|
|||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_state: CONFIG.game.enhancements.gamescope.integer_scaling,
|
||||
set_active: CONFIG.game.enhancements.gamescope.integer_scaling,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamescope.integer_scaling = switch.state();
|
||||
config.game.enhancements.gamescope.integer_scaling = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -148,12 +150,12 @@ impl SimpleAsyncComponent for GamescopeApp {
|
|||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_state: CONFIG.game.enhancements.gamescope.fsr,
|
||||
set_active: CONFIG.game.enhancements.gamescope.fsr,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamescope.fsr = switch.state();
|
||||
config.game.enhancements.gamescope.fsr = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -168,12 +170,12 @@ impl SimpleAsyncComponent for GamescopeApp {
|
|||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_state: CONFIG.game.enhancements.gamescope.nis,
|
||||
set_active: CONFIG.game.enhancements.gamescope.nis,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamescope.nis = switch.state();
|
||||
config.game.enhancements.gamescope.nis = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -250,17 +252,33 @@ impl SimpleAsyncComponent for GamescopeApp {
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: &tr!("force-grab-cursor"),
|
||||
set_subtitle: &tr!("force-grab-cursor-description"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
set_active: CONFIG.game.enhancements.gamescope.force_grab_cursor,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.enhancements.gamescope.force_grab_cursor = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
_sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, _sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing gamescope settings");
|
||||
|
||||
let model = Self;
|
||||
|
|
|
@ -49,21 +49,15 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
type Output = GeneralAppMsg;
|
||||
|
||||
view! {
|
||||
gtk::Box {
|
||||
adw::NavigationPage {
|
||||
#[wrap(Some)]
|
||||
set_child = >k::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
|
||||
adw::HeaderBar {
|
||||
#[wrap(Some)]
|
||||
set_title_widget = &adw::WindowTitle {
|
||||
set_title: &tr!("components")
|
||||
},
|
||||
|
||||
pack_start = >k::Button {
|
||||
set_icon_name: "go-previous-symbolic",
|
||||
|
||||
connect_clicked[sender] => move |_| {
|
||||
sender.output(GeneralAppMsg::OpenMainPage).unwrap();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -107,11 +101,11 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_recommended_notify)]
|
||||
set_state: true,
|
||||
set_active: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.state()));
|
||||
sender.input(ComponentsPageMsg::WineRecommendedOnly(switch.is_active()));
|
||||
}
|
||||
} @wine_recommended_notify
|
||||
}
|
||||
|
@ -133,12 +127,12 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(wine_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.wine,
|
||||
set_active: CONFIG.game.wine.shared_libraries.wine,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.wine = switch.state();
|
||||
config.game.wine.shared_libraries.wine = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -155,12 +149,12 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(gstreamer_shared_libraries_notify)]
|
||||
set_state: CONFIG.game.wine.shared_libraries.gstreamer,
|
||||
set_active: CONFIG.game.wine.shared_libraries.gstreamer,
|
||||
|
||||
connect_state_notify => |switch| {
|
||||
if is_ready() {
|
||||
if let Ok(mut config) = Config::get() {
|
||||
config.game.wine.shared_libraries.gstreamer = switch.state();
|
||||
config.game.wine.shared_libraries.gstreamer = switch.is_active();
|
||||
|
||||
Config::update(config);
|
||||
}
|
||||
|
@ -219,11 +213,11 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
set_valign: gtk::Align::Center,
|
||||
|
||||
#[block_signal(dxvk_recommended_notify)]
|
||||
set_state: true,
|
||||
set_active: true,
|
||||
|
||||
connect_state_notify[sender] => move |switch| {
|
||||
if is_ready() {
|
||||
sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.state()));
|
||||
sender.input(ComponentsPageMsg::DxvkRecommendedOnly(switch.is_active()));
|
||||
}
|
||||
} @dxvk_recommended_notify
|
||||
}
|
||||
|
@ -239,12 +233,9 @@ impl SimpleAsyncComponent for ComponentsPage {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
_init: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(_init: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing general settings -> components page");
|
||||
|
||||
let model = Self {
|
||||
|
|
|
@ -232,7 +232,7 @@ impl SimpleAsyncComponent for GeneralApp {
|
|||
|
||||
connect_state_notify => |switch| {
|
||||
#[allow(unused_must_use)]
|
||||
if switch.state() {
|
||||
if switch.is_active() {
|
||||
std::fs::remove_file(KEEP_BACKGROUND_FILE.as_path());
|
||||
} else {
|
||||
std::fs::write(KEEP_BACKGROUND_FILE.as_path(), "");
|
||||
|
@ -528,7 +528,7 @@ impl SimpleAsyncComponent for GeneralApp {
|
|||
},
|
||||
|
||||
#[local_ref]
|
||||
components_page -> gtk::Box {}
|
||||
components_page -> adw::NavigationPage,
|
||||
}
|
||||
|
||||
async fn init(
|
||||
|
@ -664,14 +664,14 @@ impl SimpleAsyncComponent for GeneralApp {
|
|||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.close_subpage();
|
||||
.pop_subpage();
|
||||
}
|
||||
|
||||
GeneralAppMsg::OpenComponentsPage => unsafe {
|
||||
PREFERENCES_WINDOW.as_ref()
|
||||
.unwrap_unchecked()
|
||||
.widget()
|
||||
.present_subpage(self.components_page.widget());
|
||||
.push_subpage(self.components_page.widget());
|
||||
}
|
||||
|
||||
#[allow(unused_must_use)]
|
||||
|
|
|
@ -68,11 +68,7 @@ impl SimpleAsyncComponent for PreferencesApp {
|
|||
}
|
||||
}
|
||||
|
||||
async fn init(
|
||||
parent: Self::Init,
|
||||
root: Self::Root,
|
||||
sender: AsyncComponentSender<Self>,
|
||||
) -> AsyncComponentParts<Self> {
|
||||
async fn init(parent: Self::Init, root: Self::Root, sender: AsyncComponentSender<Self>) -> AsyncComponentParts<Self> {
|
||||
tracing::info!("Initializing preferences window");
|
||||
|
||||
let model = Self {
|
||||
|
|
Loading…
Reference in a new issue