Compare commits

..

1049 Commits

Author SHA1 Message Date
lucas lelievre
181c6599b7 Increment versionCodeOffset from 4 to 5 2026-03-31 21:10:00 +02:00
gorbit99
fb77d3cf8a Downgrade JavaOSC version (#1801) 2026-03-31 21:02:01 +02:00
lucas lelievre
1a4b19a5e1 Make sure tags are fetched for version number checks 2026-03-30 05:42:47 +02:00
lucas lelievre
a9f553729e Electron fixes macos (#1797) 2026-03-26 08:09:10 +01:00
lucas lelievre
ed96742680 Electron fixes after RC feedbacks (#1784) 2026-03-26 05:15:41 +01:00
lucas lelievre
5e7816d72d New Pontoon translations (#1674) 2026-03-17 11:06:50 +01:00
SlimeVR-bot
abab38e422 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
7835b17379 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
30612a866b Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
bba574ce86 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
6d3d725b6c Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
948bc06542 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
8f4ee3268d Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
8f97bd997b Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
18f6c9c24f Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
c7bdd041f2 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
f75a011fb3 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
Co-authored-by: R4MOS <alexandrerrangel99@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
555764914d Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
e4be98c7e7 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
701ce9dc0a Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
3f950cc11d Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
d8ce34a962 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
ef9d5e7862 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
e3f06eff55 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
7a062b7d7b Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
121f3297ae Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
9951f00979 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
d8bb744ce4 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
4db342b4ae Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
Co-authored-by: Pesky12 <avianearts@gmail.com> (cs)
Co-authored-by: Jeeko <d.safarik06@gmail.com> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
e9f96e6d21 Pontoon/GUI: Update Czech (cs)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
56c6ebdadf Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
4f941a5892 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
bf69046efe Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
cdcdb1b443 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
f875e9df4d Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
12dd408f0b Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
5e53bae9dc Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
b19e190004 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
06c8bdc81a Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
62338250e8 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
1ff79ebb13 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
2f9678d882 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
94d70cbe55 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
f5c26f97aa Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:36 +00:00
SlimeVR-bot
b367c7d3d6 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
c9cae35946 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
Co-authored-by: R4MOS <alexandrerrangel99@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
a895b0b583 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: R4MOS <alexandrerrangel99@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
5321c25bb2 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
b39691b879 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
74e7f02668 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
09e1510298 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
0d95a731e3 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
7d5706520b Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
e887b3153d Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
a7aa897fad Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
29e2fd863b Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
330cac26ec Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
ca9195ba97 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
908270ffff Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
942fbcf6f6 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
dbc6bae898 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
8482802375 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
fdd3614204 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
706a2780d9 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
97a90076a4 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
ef85b8f3e1 Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
83700a1d1a Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
36a363f8ed Pontoon/GUI: Update Brazilian Portuguese (pt-BR)
Co-authored-by: inex <rui.bisneto@gmail.com> (pt-BR)
Co-authored-by: R4MOS <alexandrerrangel99@gmail.com> (pt-BR)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
1c8381337a Pontoon/GUI: Update French (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: Nicalay2 <Habbo.rieranicolas08@gmail.com> (fr)
Co-authored-by: Natsuko <maisonasse@gmail.com> (fr)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
f698b27be5 Pontoon/GUI: Update French (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: Nicalay2 <Habbo.rieranicolas08@gmail.com> (fr)
Co-authored-by: Natsuko <maisonasse@gmail.com> (fr)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
f2767cf3bc Pontoon/GUI: Update French (fr)
Co-authored-by: Natsuko <maisonasse@gmail.com> (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
fe873729b6 Pontoon/GUI: Update French (fr)
Co-authored-by: Nicalay2 <Habbo.rieranicolas08@gmail.com> (fr)
Co-authored-by: Natsuko <maisonasse@gmail.com> (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: Naoto <naotomuramasa@gmail.com> (fr)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
031b35eb06 Pontoon/GUI: Update French (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: Nicalay2 <Habbo.rieranicolas08@gmail.com> (fr)
Co-authored-by: Natsuko <maisonasse@gmail.com> (fr)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
bcc604cf63 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
adf01eed16 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
bd1750f252 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
49adf0ee84 Pontoon/GUI: Update German (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
Co-authored-by: NichtTube <Marvin-semmler@gmx.net> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
04a2fa72a7 Pontoon/GUI: Update German (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
Co-authored-by: NichtTube <Marvin-semmler@gmx.net> (de)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
064c41d419 Pontoon/GUI: Update German (de)
Co-authored-by: NichtTube <Marvin-semmler@gmx.net> (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
7c92023af7 Pontoon/GUI: Update Simplified Chinese (zh-Hans)
Co-authored-by: nekomona <nekomona@163.com> (zh-Hans)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
ac01b75342 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
95a7801a50 Pontoon/GUI: Update Dutch (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
Co-authored-by: Nola <stefsecretdesecret@gmail.com> (nl)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
db1ec5d024 Pontoon/GUI: Update Dutch (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
a96cd8a38f Pontoon/GUI: Update Dutch (nl)
Co-authored-by: Nola <stefsecretdesecret@gmail.com> (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
45d5789685 Pontoon/GUI: Update Dutch (nl)
Co-authored-by: Nola <stefsecretdesecret@gmail.com> (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
4b08123a61 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: Uriel <imurx@proton.me> (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
Co-authored-by: Alejandro <moctezumaalejandro25@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
bfc99ab02c Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
6eb8a18430 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
489b8e6549 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
7bb2ecfff1 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
59b4b34840 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
9597888902 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
dbfcc8ba0a Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
fd8e9fba83 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
f65d1828fe Pontoon/GUI: Update Spain Spanish (es-ES)
Co-authored-by: Baddie <baddie@femboy.gay> (es-ES)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
c32601809b Pontoon/GUI: Update Spain Spanish (es-ES)
Co-authored-by: Baddie <baddie@femboy.gay> (es-ES)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
fdf86a1e56 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
71908523f9 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
2b7d678321 Pontoon/GUI: Update Simplified Chinese (zh-Hans)
Co-authored-by: 寂听 <jiting@jtcat.com> (zh-Hans)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
5d64fa8369 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2026-03-12 01:26:35 +00:00
SlimeVR-bot
fe6bb4534c Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2026-03-12 01:26:35 +00:00
loucass003
95daec6814 Pass server jar properly 2026-03-12 02:26:13 +01:00
lucas lelievre
43b104fcc3 Electron build fix round 2 (#1783) 2026-03-12 02:11:42 +01:00
loucass003
a33d6b1c1a Set better folder for electron storage 2026-03-11 20:45:37 +01:00
loucass003
cf67b9306b Remove electron test from ci 2026-03-11 19:23:56 +01:00
lucas lelievre
238c86ee98 Electron CI fixes (#1780) 2026-03-11 19:12:47 +01:00
loucass003
7f56209ca9 Fix windows zip 2026-03-11 16:57:33 +01:00
loucass003
a3e50cdc02 fix server.jar output path 2026-03-11 01:39:41 +01:00
loucass003
b7c43d8373 Fix release out 2026-03-11 01:23:38 +01:00
lucas lelievre
cadc13f2e0 Revert "Bump actions/upload-artifact from 6 to 7" (#1779) 2026-03-11 01:02:49 +01:00
dependabot[bot]
7965d2e081 Bump actions/upload-artifact from 6 to 7 (#1770)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 23:33:56 +01:00
Butterscotch!
b829a20169 Bump Gradle, plugin, and package versions (#1746)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2026-03-10 22:40:41 +01:00
loucass003
653b8b4014 Make macos build 2026-03-10 22:04:43 +01:00
lucas lelievre
a891203204 Switch to Electron (#1747)
Co-authored-by: Hannah Lindrob <hannahlindrob@ourlook.com>
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2026-03-10 21:38:02 +01:00
Sapphire
0236a05f26 Allow showing 'Up to date' version for third-party trackers (#1756) 2026-02-25 23:08:31 +01:00
Butterscotch!
28deb357da Revert TrackerResetsHandler & add comments (#1748) 2026-02-20 11:26:23 +01:00
jabberrock
4d93f87a01 Clarify AI policy on contributions (#1752) 2026-02-17 03:59:11 +03:00
Sapphire
88adfce242 Hide tracker firmware version when board type is unknown (#1721) 2026-02-09 21:58:36 +01:00
Sapphire
3d02795dbc Don't trigger timeout when Wi-Fi provisioning is done (#1725)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2026-02-09 21:57:56 +01:00
Sapphire
7ff50f78eb Don't ask for full reset on timeout with manual or saved mounting (#1727) 2026-02-02 18:06:38 +01:00
Sapphire
0e3aaf105c Display more accurate info for OpenVR devices (#1731) 2026-02-02 18:06:17 +01:00
sctanf
f638540886 TrackerBattery disable tooltip while charging (#1733) 2026-02-02 18:05:50 +01:00
Sapphire
343d69d690 Support feet mounting reset over Protobuf bridge (#1737) 2026-02-02 18:05:31 +01:00
H3
e2d7d354c6 Add ESP32-S2 to USB-Serial Accept-List (#1730)
Co-authored-by: unlogisch04 <98281608+unlogisch04@users.noreply.github.com>
2026-01-29 22:54:37 +03:00
sctanf
cc6f297b92 Re-add missing battery runtime estimate to DataFeedBuilder (#1732) 2026-01-29 14:00:18 +04:00
H114514191981
2add43e71a add CH343 support (#1568)
Co-authored-by: unlogisch04 <98281608+unlogisch04@users.noreply.github.com>
2026-01-28 10:39:25 +02:00
Sapphire
0a493ac345 Fix scheduled resets triggering immediately when delay is unspecified (#1724) 2026-01-25 07:08:25 +02:00
Sapphire
17bb2703d1 Fix unassigned HMD flightlist step never showing (#1723) 2026-01-24 07:34:37 +02:00
Sapphire
f0981bf709 ProtocolAPI: Initialise RPCHandler after other members (#1722) 2026-01-24 01:17:25 +03:00
peelz
99de554c18 Add delay param to ResetRequest (#1712) 2026-01-23 03:38:08 +04:00
Sapphire
f95a4d56d7 Add feet mounting reset keybind (#1717) 2026-01-23 03:14:27 +04:00
Sapphire
1df3c9d322 Hide devices with unknown board type in DIY firmware tool (#1718) 2026-01-23 03:14:12 +04:00
sctanf
e0838cce6c Battery indicators (#1714) 2026-01-23 03:13:36 +04:00
Sapphire
e25d3201c2 Fix translation key for Autobone processing text (#1719) 2026-01-23 03:12:18 +04:00
Sapphire
5d14f14139 Fix alignment of neck and head dots in tracker assignment page (#1720) 2026-01-23 03:11:37 +04:00
Eiren Rain
09e81f5ace Fix trackers table having an extra header 2026-01-19 20:29:23 +01:00
Maya
8f57ef2de4 Migrate core/dev.slimevr.protocol to Kotlin (#1688)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2026-01-14 15:50:04 +01:00
loucass003
ea242960b3 Lint 2026-01-12 21:34:19 +01:00
Eiren Rain
35ac14a7de Packet loss (#1687)
Co-authored-by: loucass003 <loucass003@gmail.com>
2026-01-12 21:22:53 +01:00
Aed
690a8b5c6e add manual mounting to stay alligned setup (#1692) 2026-01-08 02:16:08 +01:00
sctanf
255b8b2865 Detect and use tracker PID during HID enumeration (#1556) 2026-01-07 10:13:33 +01:00
Eiren Rain
e27ec63985 Accept fixed tracker accel (#1706) 2026-01-07 08:57:24 +03:00
Butterscotch!
9f8be6551c Accept fixed tracker accel 2026-01-06 22:51:17 -05:00
lucas lelievre
f09cd687c7 Make ignore buttons be session only in checklist (#1675) 2026-01-05 16:21:36 +01:00
lucas lelievre
686499f8dd fix fw tool source (#1690) 2026-01-05 16:20:45 +01:00
Butterscotch!
a3bcc61892 Fix race conditions from Play Store (#1696) 2025-12-26 10:28:39 +01:00
sctanf
faf70c9a39 Add nRF consts (#1685) 2025-12-26 09:26:32 +01:00
sctanf
2aa8d3a056 hid add "unknown" runtime state (#1693) 2025-12-25 16:41:46 +01:00
Meia
23df46ca33 Amplify UI sounds by 8dB (#1694) 2025-12-25 16:41:08 +01:00
lucas lelievre
8407f52777 Better columns width for table view (#1691) 2025-12-19 00:24:28 +01:00
lucas lelievre
b44dcaa9c2 Runtime (#1678) 2025-12-19 00:11:10 +01:00
sctanf
ff0d823aff Merge remote-tracking branch 'upstream/main' into runtime 2025-12-18 10:46:44 -06:00
sctanf
2e8bfa5373 Update solarxr-protocol 2025-12-18 02:35:33 -06:00
sctanf
87940ddd03 TrackerBattery tooltip remove classes 2025-12-18 00:04:07 -06:00
sctanf
6208979ce9 TrackerBattery battery level tooltip if not shown 2025-12-17 23:48:00 -06:00
lucas lelievre
9a27fb1320 separate firmware date from version (#1650) 2025-12-18 06:46:10 +01:00
sctanf
53129328d0 Update solarxr-protocol 2025-12-17 22:59:24 -06:00
lucas lelievre
2d79c5a0e9 Add @ImSapphire as code owner for i18n directory 2025-12-18 05:03:19 +01:00
sctanf
74f5a92ce1 fw date default 2025-12-15 09:16:47 -06:00
sctanf
146930279c add firmware date to new field 2025-12-15 09:16:47 -06:00
sctanf
0c33579858 HIDCommon don't show firmware date in version 2025-12-15 09:16:46 -06:00
sctanf
c9783d097b show voltage in less situations 2025-12-15 09:16:30 -06:00
sctanf
d3eafb8d06 only show runtime if nonzero 2025-12-15 09:16:30 -06:00
sctanf
09d44b51d6 linter borked it 2025-12-15 09:16:30 -06:00
sctanf
cf357e71f5 lint 2025-12-15 09:16:29 -06:00
sctanf
122efacc52 show runtime in gui 2025-12-15 09:16:29 -06:00
sctanf
7f536528d0 Parse runtime from HID tracker 2025-12-15 09:16:28 -06:00
Eiren Rain
3982249ebf Bump actions/upload-artifact from 5 to 6 (#1683) 2025-12-15 17:53:59 +03:00
Eiren Rain
388bea2e72 Bump actions/download-artifact from 6 to 7 (#1684) 2025-12-15 17:53:41 +03:00
dependabot[bot]
921a760817 Bump actions/download-artifact from 6 to 7
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 14:12:16 +00:00
dependabot[bot]
55bcec4dda Bump actions/upload-artifact from 5 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-15 14:12:07 +00:00
Eiren Rain
bb08e8dc6a DesktopHID only warn if device cannot open (#1682) 2025-12-15 11:08:44 +03:00
sctanf
a82f950eb6 DesktopHID only warn if device cannot open 2025-12-14 20:52:14 -06:00
Eiren Rain
e2dbaab8ba hid packet 6 and packet 7 (data2) (#1679) 2025-12-14 10:25:49 +03:00
sctanf
3611bb5cc7 hid packet 6 and packet 7 (data2)
this is the worst meme ever
2025-12-13 23:59:36 -06:00
lucas lelievre
f01f599526 New Pontoon translations (#1672) 2025-12-11 20:39:52 +01:00
SlimeVR-bot
6847526ce8 Pontoon/GUI: Update Simplified Chinese (zh-Hans)
Co-authored-by: pwnint <ahndkp@gmail.com> (zh-Hans)
Co-authored-by: 寂听 <jiting@jtcat.com> (zh-Hans)
Co-authored-by: nekomona <nekomona@163.com> (zh-Hans)
2025-12-11 19:03:14 +00:00
SlimeVR-bot
c5f28a6a01 Pontoon/GUI: Update Simplified Chinese (zh-Hans)
Co-authored-by: 寂听 <jiting@jtcat.com> (zh-Hans)
Co-authored-by: Joshh <josh229411@icloud.com> (zh-Hans)
Co-authored-by: pwnint <ahndkp@gmail.com> (zh-Hans)
Co-authored-by: nekomona <nekomona@163.com> (zh-Hans)
2025-12-11 19:03:14 +00:00
lucas lelievre
86d7d5fdc6 Fix tracker set selection (#1668) 2025-12-11 20:02:52 +01:00
lucas lelievre
781f4d489a Better Android signing & Google Play bundle building (#1670) 2025-12-11 19:56:07 +01:00
jabberrock
5a42426048 [Stay Aligned] Fix broken tracker rotations (#1669) 2025-12-11 07:26:12 -05:00
Butterscotch!
44643f2cc6 Rename Google Play artifact 2025-12-11 07:06:02 -05:00
Butterscotch!
d902515f4f Change message 2025-12-11 06:30:40 -05:00
Butterscotch!
f9df08aefd Include all Android tasks for signing & Play CI 2025-12-11 06:27:20 -05:00
Butterscotch!
28b18e0d42 Handle KeyStore secret directly in Gradle 2025-12-11 06:27:20 -05:00
loucass003
247c063791 Lint 2025-12-11 10:11:16 +01:00
lucas lelievre
ab248287cc Update gui/src/components/onboarding/pages/trackers-assign/TrackerAssignOptions.tsx
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-11 09:44:33 +01:00
lucas lelievre
9a26fc98b8 Update gui/src/components/onboarding/pages/trackers-assign/TrackerAssignOptions.tsx
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-11 09:44:28 +01:00
loucass003
16a2ac8474 Lint 2025-12-11 09:36:02 +01:00
loucass003
c4acf4cc41 Better selection + only set the prefered once for a new user 2025-12-11 09:30:21 +01:00
loucass003
4b0a2d27d0 Fix tracker set selection 2025-12-11 09:19:25 +01:00
lucas lelievre
2c6708bfe7 Don't show fw update icon when update is blocked (#1667) 2025-12-11 08:35:46 +01:00
Sapphire
2880623cce Fix fw update icon low battery warning 2025-12-11 00:30:54 -06:00
Sapphire
17400ca337 Don't show fw update icon when update is blocked 2025-12-11 00:24:06 -06:00
lucas lelievre
3276f6db7a Fix tooltips on table and reset buttons (#1666) 2025-12-11 06:21:56 +01:00
loucass003
db59537adc Fix tooltips on table and reset buttons 2025-12-11 06:17:05 +01:00
lucas lelievre
4f1fd82923 Tooltip: Better handling of disabled buttons (#1665) 2025-12-11 04:02:12 +01:00
loucass003
f6ccb5970f Lint 2025-12-11 03:57:06 +01:00
loucass003
c937b91267 Better handling of disabled buttons 2025-12-11 03:54:23 +01:00
lucas lelievre
2d1f32b950 Disable R8 optimization for Android (#1664) 2025-12-11 03:28:49 +01:00
Butterscotch!
8acba98bcc Temporarily disable Proguard optimization 2025-12-10 21:23:38 -05:00
lucas lelievre
d7ba1b8335 Fix mobile tooltip (#1662) 2025-12-11 03:13:13 +01:00
lucas lelievre
d20e9bfd94 Fix tiertiary dropdown text color (#1663) 2025-12-11 02:56:37 +01:00
loucass003
3d54a86bd8 Fix tiertiary dropdown text color 2025-12-11 02:54:22 +01:00
loucass003
c9883f5eb4 Fix mobile tooltip 2025-12-11 02:28:09 +01:00
lucas lelievre
8bd36fac25 Increase accent text contrast for ace theme (#1656) 2025-12-11 02:26:43 +01:00
lucas lelievre
ab4d507d9f Snep theme (#1659) 2025-12-11 02:26:26 +01:00
lucas lelievre
9efb985260 Sentry fixes (#1658) 2025-12-11 02:26:10 +01:00
loucass003
2c2c227187 Fix scaled proportions event not triggering 2025-12-11 02:24:00 +01:00
sctanf
63cca6756e lint 2025-12-10 19:07:28 -06:00
lucas lelievre
b0d7fefa5e Only skip server start when CLI arg is passed (#1660) 2025-12-11 02:02:57 +01:00
Butterscotch!
35a5cb47d9 Disable Android obfuscation 2025-12-10 19:07:54 -05:00
lucas lelievre
dfc4383271 Update gui/src/hooks/app.ts
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-10 21:58:47 +01:00
lucas lelievre
185431a733 Update gui/src/hooks/tracking-checklist.ts
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-10 21:58:35 +01:00
Sapphire
5b68a01186 Only skip server start when CLI arg is passed 2025-12-10 14:36:56 -06:00
lucas lelievre
2c4dd4085f Remove Ktor dependency (#1655) 2025-12-10 21:34:35 +01:00
sctanf
4d3ff0e9c9 snep 2025-12-10 11:42:16 -06:00
loucass003
ee6182bb23 lint 2025-12-10 17:15:07 +01:00
loucass003
9576d6e034 Sentry fixes 2025-12-10 17:12:25 +01:00
lucas lelievre
227ddc87d2 Increment Android version code and log config (#1657) 2025-12-10 13:51:46 +01:00
Butterscotch!
b3b7730b2c Increment Android version code and log config 2025-12-10 07:14:54 -05:00
Butterscotch!
075a155f13 Increase accent text contrast for ace theme 2025-12-10 05:31:43 -05:00
Butterscotch!
79a3b66e43 Fix formatting 2025-12-10 05:08:29 -05:00
lucas lelievre
fe58968718 New Pontoon translations (#1654) 2025-12-10 09:38:53 +01:00
Butterscotch!
276e73e724 Remove Ktor dependency 2025-12-10 00:39:27 -05:00
SlimeVR-bot
01dd916498 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 20:00:05 +00:00
SlimeVR-bot
6ebf9792ac Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 16:30:06 +00:00
SlimeVR-bot
02f8195b5b Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 15:26:14 +00:00
SlimeVR-bot
7b4946f41d Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 15:26:14 +00:00
SlimeVR-bot
5f4c90128f Pontoon/GUI: Update German (de)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
2025-12-09 15:26:14 +00:00
SlimeVR-bot
6a2a30e319 Pontoon/GUI: Update Dutch (nl), German (de)
Co-authored-by: Nola <stefsecretdesecret@gmail.com> (nl)
Co-authored-by: Joshh <josh229411@icloud.com> (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
Co-authored-by: Smeltie <martijnklerks123@gmail.com> (nl)
Co-authored-by: C0D3 M4513R <mail@c0d3m4513r.com> (de)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
Co-authored-by: stephaniegoldschmidt9 <stephaniegoldschmidt9@gmail.com> (de)
2025-12-09 15:26:14 +00:00
SlimeVR-bot
8a5f27e8d9 Pontoon/GUI: Update 28 localizations 2025-12-09 15:26:14 +00:00
lucas lelievre
199bec40e1 Build and sign release APK (#1653) 2025-12-09 16:25:49 +01:00
lucas lelievre
9d32220275 Merge branch 'main' into bscotch/android-signing-ci 2025-12-09 14:51:16 +01:00
lucas lelievre
8b689d6df8 Android fixes & update (#1648) 2025-12-09 14:50:59 +01:00
Butterscotch!
490005ae69 Merge remote-tracking branch 'upstream/main' into bscotch/android-fixes 2025-12-09 07:53:46 -05:00
Butterscotch!
575778ab85 Don't fail for keystore 2025-12-09 07:25:54 -05:00
Butterscotch!
85ee162d58 Remove unused import 2025-12-09 07:18:26 -05:00
Butterscotch!
712fa6a1ad Avoid Android Gradle project for desktop tests 2025-12-09 02:55:12 -05:00
Butterscotch!
819481adcd Early fail for keystore issues 2025-12-09 02:36:21 -05:00
Butterscotch!
bc26227443 Build and sign release with Gradle 2025-12-09 02:36:21 -05:00
lucas lelievre
ac43ca947e New Pontoon translations (#1646) 2025-12-09 05:25:55 +01:00
SlimeVR-bot
4451d8aaf4 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
79a9e15c5a Pontoon/GUI: Update Thai (th), German (de)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Cusmo84 <saopob@gmail.com> (th)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
5403cdb28e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
272f37374e Pontoon/GUI: Update Thai (th), German (de)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
Co-authored-by: Zahnatom <zahnatomletsplay@gmail.com> (de)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
4147578dc8 Pontoon/GUI: Update Thai (th), German (de)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
65bd03c272 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
4835e89c5f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
7ea4516545 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
2f208fe08a Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
db584baed3 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
1d41627fb1 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
63b8d4c8cb Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
8e60ecd070 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
6ee173791e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
b9d72c0a40 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
36b2e01d88 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
569315f6dc Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
a4fab8afed Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
d1e3c35693 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
d12f3c4854 Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
Co-authored-by: ReDoX <redox01@o2.pl> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
e32903f36f Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
ab126c336c Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
79a6d62506 Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
08f691b5b6 Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
b12632fd1a Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
Co-authored-by: ReDoX <redox01@o2.pl> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
54f3ab4634 Pontoon/GUI: Update Polish (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
415168d040 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
6be313144e Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
98e571c94b Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
1561c464e9 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-09 04:25:34 +00:00
SlimeVR-bot
4992d599aa Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-09 04:25:34 +00:00
lucas lelievre
90b3dfe0db v18.0rc1 fixes (#1651) 2025-12-09 05:25:07 +01:00
lucas lelievre
ab87c5b1e8 Update gui/src/hooks/crypto.ts
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-12-09 04:46:35 +01:00
lucas lelievre
3ee6c065cf Disable root overscroll (#1652) 2025-12-09 04:41:25 +01:00
lucas lelievre
d1249d2b44 Apply suggestions from code review
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-09 04:37:12 +01:00
Butterscotch!
94a70d3b2e Update Ktor to latest 2.3.X version 2025-12-08 21:50:53 -05:00
Butterscotch!
b67162eb43 Revert Ktor version update 2025-12-08 21:47:00 -05:00
Lasse Lauwerys
4390d35e00 Disable root overscroll 2025-12-09 02:37:13 +01:00
lucas lelievre
19126c0d4d Update gui/public/i18n/en/translation.ftl
Co-authored-by: Maya <jovannmc@femboyfurry.net>
2025-12-08 09:51:43 +01:00
lucas lelievre
0cf0f6cb49 Update gui/public/i18n/en/translation.ftl
Co-authored-by: Maya <jovannmc@femboyfurry.net>
2025-12-08 09:51:36 +01:00
lucas lelievre
d3d3838761 Update gui/src/components/onboarding/pages/WifiCreds.tsx
Co-authored-by: Maya <jovannmc@femboyfurry.net>
2025-12-08 09:47:15 +01:00
loucass003
4984026f6b Lint 2025-12-08 09:28:09 +01:00
loucass003
bb7e825c41 Remove confusion with dongles in the Connect page 2025-12-08 09:25:03 +01:00
loucass003
bc96ddd555 More fixes and metrics 2025-12-08 05:40:33 +01:00
loucass003
ec85284f78 Lint 2025-12-08 05:31:57 +01:00
loucass003
867287e740 More sentry metrics 2025-12-08 05:25:07 +01:00
loucass003
2e93187021 More sentry metrics 2025-12-08 05:12:05 +01:00
loucass003
2a19d67974 Make sentry report anonymous unique user ids so we can count release adoption 2025-12-08 04:28:00 +01:00
loucass003
176f7e4271 Round one of fixes 2025-12-08 03:39:49 +01:00
Butterscotch!
3a6c60d912 Only get GUI port once 2025-12-07 05:23:03 -05:00
Butterscotch!
066c28adb4 Use randomized Android GUI port 2025-12-07 05:20:13 -05:00
Butterscotch!
364ed3209c Prevent Android GUI race condition 2025-12-07 05:12:56 -05:00
Butterscotch!
dab6ec28af Simpler bytesSkipped check 2025-12-07 04:53:09 -05:00
Butterscotch!
b221250ba7 More Gradle cleanup 2025-12-07 04:48:09 -05:00
Butterscotch!
215635634f Update Android versions & Proguard settings 2025-12-07 04:43:15 -05:00
Butterscotch!
184133a613 Fix OTA upload socket not being closed 2025-12-07 04:22:01 -05:00
Butterscotch!
32248c75cf Fix Android SDK level errors 2025-12-07 04:21:37 -05:00
lucas lelievre
0671c0e89f New Pontoon translations (#1631) 2025-12-06 00:38:06 +01:00
SlimeVR-bot
2acadbe11b Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
5688c71d2e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
d3c89618f1 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
478ffdb611 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
0b7e5781d5 Pontoon/GUI: Update 28 localizations 2025-12-05 23:37:48 +00:00
SlimeVR-bot
446a53277e Pontoon/GUI: Update 28 localizations 2025-12-05 23:37:48 +00:00
SlimeVR-bot
b2acc1b28d Pontoon/GUI: Update French (fr)
Co-authored-by: lucas <llelievr2@gmail.com> (fr)
Co-authored-by: Naoto <naotomuramasa@gmail.com> (fr)
Co-authored-by: Joshh <josh229411@icloud.com> (fr)
Co-authored-by: Arya <arya.allermoz@gmail.com> (fr)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
27d2fff725 Pontoon/GUI: Update 28 localizations 2025-12-05 23:37:48 +00:00
SlimeVR-bot
0c1f9b3e25 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
cfa4039e9e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
7b62b21e6f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
cc3af4ae7e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
09c44fc935 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
92f441d51f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
d5912513ff Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
6417bf3167 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
5bf0694734 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
7b95837663 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
40067df800 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
c5546d71d2 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
307c250240 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
ca1afaa0aa Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
809a0b81b2 Pontoon/GUI: Update Thai (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
01d5456f9f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
b81605dcf9 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
bb3be2fd17 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
b34da7dd3e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
0cc97ba9f8 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
a754a24d3f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
df209436c8 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
6abd06d435 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
43f6a9fac9 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
e07a152d46 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
e73dcad9a8 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
87de27e4ec Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
e851abfd4f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
561dfd2d2e Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
4e716ac53b Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
12cd7908ef Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
1e1cb435a2 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
0bd6d4fdbd Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
9f2bd7f2e7 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
a6c5de6ef3 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
86046993b8 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
f7106833ed Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
ef35b93569 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
2f5649a90a Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Cusmo84 <saopob@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
efd07a9afb Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
2fad9b2563 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
8d2b74b254 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
Co-authored-by: Cusmo84 <saopob@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: yuyavx <yuyavxvtuber@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
3f1a614ac6 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
326284853c Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
3ae337b3d8 Pontoon/GUI: Update Thai (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
fbef209d2d Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
544b060691 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
63bceb49ca Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
be9265cb97 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:48 +00:00
SlimeVR-bot
c7286f8e48 Pontoon/GUI: Update German (de)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
a8e76e9198 Pontoon/GUI: Update German (de)
Co-authored-by: Patty <pattycoder@gmx.de> (de)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
be09af8ca6 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
d47533db08 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
c34944912b Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
67b764026f Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
9b74665e94 Pontoon/GUI: Update Thai (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
855d708464 Pontoon/GUI: Update Thai (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
760ecc6ae6 Pontoon/GUI: Update Thai (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
2f4bcb17b6 Pontoon/GUI: Update 28 localizations 2025-12-05 23:37:47 +00:00
SlimeVR-bot
78e7517363 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
27e4af57f1 Pontoon/GUI: Update Latinamerican Spanish (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
1d029a6c3a Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
Co-authored-by: 白貓 <yen.max@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
fe547cf56b Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
9bddff99d8 Pontoon/GUI: Update Traditional Chinese (zh-Hant)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
11fc8a3fa7 Pontoon/GUI: Update Spain Spanish (es-ES)
Co-authored-by: Baddie <baddie@femboy.gay> (es-ES)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
075ca4715e Pontoon/GUI: Update French (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
2025-12-05 23:37:47 +00:00
SlimeVR-bot
991299b4fc Pontoon/GUI: Update French (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
2025-12-05 23:37:47 +00:00
lucas lelievre
84d85c29b7 Before RC fixes (#1644)
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-06 00:37:23 +01:00
lucas lelievre
5f1167f0de Remove the need for restart before OTA on newer firmware (#1627) 2025-12-05 22:12:03 +01:00
loucass003
d74b26fbda Lint 2025-12-05 20:08:02 +01:00
loucass003
838a60172d Make version check for 18.0 switch 2025-12-05 20:04:02 +01:00
lucas lelievre
d6c05d2f9c Improved tracker assignment ui (#1643) 2025-12-05 18:53:53 +01:00
lucas lelievre
25e74767be Remove useless onboarding pages (#1642) 2025-12-05 18:18:15 +01:00
lucas lelievre
742a3fcafe Small UI fixes (#1641) 2025-12-05 18:17:51 +01:00
lucas lelievre
45f0e14582 Make reset sound loop better when more than 3s (#1640) 2025-12-05 18:17:19 +01:00
loucass003
937c810f7a Fix solarxr 2025-12-05 10:15:08 +01:00
lucas lelievre
80a68e9a37 Scaled proportions rework (#1636)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: Aed <145398159+Aed-1@users.noreply.github.com>
Co-authored-by: Sapphire <imsapphire0@gmail.com>
2025-12-05 10:02:59 +01:00
loucass003
ce6b3439c9 Revert "New tracker assignment + Fix concurency error with tap"
This reverts commit 12dd1cb314.
2025-12-05 06:42:49 +01:00
loucass003
12dd1cb314 New tracker assignment + Fix concurency error with tap 2025-12-05 06:41:01 +01:00
Sapphire
d420bf0007 Update en translation (#1639) 2025-12-03 03:26:23 +01:00
Butterscotch!
8e885a8890 Simplify reset code (again) (#1595)
Co-authored-by: loucass003 <loucass003@gmail.com>
2025-12-02 18:26:03 +01:00
lucas lelievre
a5160fbb8a Server Guards: Mounting timeout and yaw reset guard (#1628)
Co-authored-by: sctanf <36978460+sctanf@users.noreply.github.com>
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: Aed <145398159+Aed-1@users.noreply.github.com>
2025-12-02 15:13:54 +01:00
lucas lelievre
2e1ec07b23 Session flightlist (#1407)
Co-authored-by: sctanf <36978460+sctanf@users.noreply.github.com>
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: Aed <145398159+Aed-1@users.noreply.github.com>
2025-12-02 14:49:45 +01:00
peelz
0dc78a7e72 Skip starting server from GUI when server is already running (#1612) 2025-12-02 14:03:08 +01:00
dependabot[bot]
ebd7712862 Bump actions/checkout from 5 to 6 (#1633)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-02 13:48:39 +01:00
Erimel
25beefd973 Check driver version (#1618) 2025-12-02 13:47:55 +01:00
Aed
2ee65a9bd2 Stay Aligned UI Improvements (#1632) 2025-11-24 11:05:17 +01:00
Sapphire
d986a5e116 Fix race condition in DataFeedHandler::sendDataFeedUpdate (#1621)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-11-22 12:13:47 -05:00
Eiren Rain
8018ce7283 Android fixes (#1629) 2025-11-20 13:34:39 +03:00
Butterscotch!
a5cdbffa4c Fix packet hex formatting on Android 2025-11-20 02:30:16 -05:00
Butterscotch!
3b690eac53 Fix activity context 2025-11-20 02:09:33 -05:00
Butterscotch!
1cdca18538 Redo v0.17.0 release 2025-11-20 02:09:33 -05:00
lucas lelievre
6d77045aa1 Better flakes / deprecate shell.nix (#1626) 2025-11-20 07:00:42 +01:00
Eiren Rain
b02234f9fc New Pontoon translations (#1625) 2025-11-18 23:28:50 +03:00
SlimeVR-bot
eb10f07711 Pontoon/GUI: Update French (fr), German (de)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: C0D3 M4513R <mail@c0d3m4513r.com> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
Co-authored-by: bongocatlifelol <bongocatlifelol@gmail.com> (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
Co-authored-by: stephaniegoldschmidt9 <stephaniegoldschmidt9@gmail.com> (de)
2025-11-17 19:25:36 +00:00
SlimeVR-bot
f15a503936 Pontoon/GUI: Update 28 localizations
Co-authored-by: Bader <baq100@gmail.com> (ar)
Co-authored-by: Vaso <dudysoso1@gmail.com> (ar)
Co-authored-by: FennT <0094falcon@gmail.com> (ar)
Co-authored-by: nekomona <nekomona@163.com> (zh-Hans)
Co-authored-by: pwnint <ahndkp@gmail.com> (zh-Hans)
Co-authored-by: ZZNYJIDI <zznyjidi@hotmail.com> (zh-Hans)
Co-authored-by: Yingxue <a1175815821@163.com> (zh-Hans)
Co-authored-by: Meow Wei <medicalwei@gmail.com> (zh-Hant)
Co-authored-by: JaydenHa <jayden@jaydenha.uk> (zh-Hant)
Co-authored-by: Cheezik <cheatistv@email.cz> (cs)
Co-authored-by: Jeeko <d.safarik06@gmail.com> (cs)
Co-authored-by: viwas45hu978ot <viwashuot@gmail.com> (da)
Co-authored-by: Nola <stefsecretdesecret@gmail.com> (nl)
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com> (nl)
Co-authored-by: SaabAerospace <SaabAerospace@hotmail.com> (nl)
Co-authored-by: siofrain <maradaichides@gmail.com> (fi)
Co-authored-by: Iris <vakotoneva@gmail.com> (fi)
Co-authored-by: SlimePuppy <minouviolet2007+github@gmail.com> (fr)
Co-authored-by: Erimel <loukalemire@gmail.com> (fr)
Co-authored-by: the1pigeon <the1pigeon@gmail.com> (fr)
Co-authored-by: martin <martin@dolez.fr> (fr)
Co-authored-by: rascrifice <noppyfloppy69@gmail.com> (fr)
Co-authored-by: C0D3 M4513R <mail@c0d3m4513r.com> (de)
Co-authored-by: dennis.staudacher <dennis.staudacher@icloud.com> (de)
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz> (de)
Co-authored-by: Jatoxo <jatoxo123@gmail.com> (de)
Co-authored-by: unlogisch <unlogisch@gmx.ch> (de)
Co-authored-by: Kyra <sebastianzockt@gmail.com> (de)
Co-authored-by: stephaniegoldschmidt9 <stephaniegoldschmidt9@gmail.com> (de)
Co-authored-by: odydoubouridis <odydoubouridis@gmail.com> (el)
Co-authored-by: origalili123 <origalili123@gmail.com> (he)
Co-authored-by: Daniel <danielkariv98@gmail.com> (he)
Co-authored-by: Etch9 <mario.mazzara30@gmail.com> (it)
Co-authored-by: namakeingo <namakeingo@gmail.com> (en-x-owo, it)
Co-authored-by: infopcgood <sshs_student_412@outlook.kr> (ko)
Co-authored-by: Kamilake <exjang0@gmail.com> (ko)
Co-authored-by: abb128 <abb128@sapples.net> (lt)
Co-authored-by: eivind.eriksen <eivind.eriksen08@gmail.com> (nb-NO)
Co-authored-by: darkowsness <darkowsness@gmail.com> (nb-NO)
Co-authored-by: ReDoX <redox01@o2.pl> (pl)
Co-authored-by: Yexo <patrykcyranski@gmail.com> (pl)
Co-authored-by: Tailsy <tailsy13@gmail.com> (pl)
Co-authored-by: michael091 <michael_m1@o2.pl> (pl)
Co-authored-by: mygz <miguelmiguelmnogueira@gmail.com> (pt-BR)
Co-authored-by: Sander Fernandes <sander@novatrackers.com.br> (pt-BR)
Co-authored-by: Gaabbu <gabrielsonada@outlook.com.br> (pt-BR)
Co-authored-by: lindetinn <Kuzmenko3g@gmail.com> (ru)
Co-authored-by: Flar <kani.dragonflar@gmail.com> (ru)
Co-authored-by: SummerArtz <summerpzmail@gmail.com> (ru)
Co-authored-by: Sergey <serezhenka.soldatov.2020@mail.ru> (ru)
Co-authored-by: Graphite0 <olegek.permjakov@gmail.com> (ru)
Co-authored-by: Clay <code.clayt@gmail.com> (ru)
Co-authored-by: viberbread <panfilov.iva2015@yandex.ru> (ru)
Co-authored-by: Alejandro <moctezumaalejandro25@gmail.com> (es-419)
Co-authored-by: MaxEvil <xicovalle@gmail.com> (es-419)
Co-authored-by: Uriel <imurx@proton.me> (es-419, es-ES, sv-SE)
Co-authored-by: Andokai <da.nova@duocuc.cl> (es-419)
Co-authored-by: Renka <lunastarletvr@gmail.com> (es-419, es-ES)
Co-authored-by: Baddie <baddie@femboy.gay> (es-ES)
Co-authored-by: adriangoldenhero <adriangoldenhero@gmail.com> (es-ES)
Co-authored-by: LavAriz <thecakegirl092@gmail.com> (es-ES)
Co-authored-by: cabbemannen <cabbemannen10@gmail.com> (sv-SE)
Co-authored-by: catdrout <c4tdrout@protonmail.com> (sv-SE)
Co-authored-by: YumeTomo <Sodnoobe@gmail.com> (th)
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com> (th)
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com> (th)
Co-authored-by: rwrdetenrl <NightAniMer@hotmail.com> (tr)
Co-authored-by: HappyTownCats <HappyTownCats@gmail.com> (uk)
Co-authored-by: Shans <KaluhinShans@gmail.com> (uk)
Co-authored-by: MenacingExiler <menacingexiler@gmail.com> (vi)
Co-authored-by: Dau <unnamedau@nowhatethis.com> (en-x-owo)
Co-authored-by: beq <beqbdean@gmail.com> (en-x-owo)
Co-authored-by: Mini <alexanderawatson64@gmail.com> (en-x-owo)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com> (en-x-owo)
2025-11-17 19:25:36 +00:00
lucas lelievre
c580aecb11 Refactor pull request creation command in workflow 2025-11-17 20:25:13 +01:00
lucas lelievre
81879afa32 Add a cute note to the README 2025-11-17 19:50:44 +01:00
lucas lelievre
1cb4edb651 Fix pontoon ci (#1624) 2025-11-17 19:14:04 +01:00
Sapphire
26e04db950 Fix 'Filter Slimes and HMD' dev setting only showing OpenVR HMD (#1614) 2025-11-10 11:25:03 +01:00
Eiren Rain
fade902fc0 Better fw update cache handling (#1617) 2025-11-08 02:41:48 +03:00
loucass003
e072fc75c6 Do not show release if no deploy file 2025-11-06 02:06:27 +01:00
loucass003
94da52c0e4 Better fw update cache handling 2025-11-06 02:05:08 +01:00
lucas lelievre
56c3290e1c Add digest to fw update files (#1616)
Co-authored-by: gorbit99 <gorbitgames@gmail.com>
2025-11-06 01:07:26 +01:00
gorbit99
e0f1ad8d4f Various rc fixes (#1615) 2025-11-05 19:12:28 +01:00
kruemmelbande
bd4ec047c3 fix linux safe mode icon (#1613) 2025-11-03 22:48:56 +01:00
lucas lelievre
e3b3cb77d1 Fix linux ci (#1611) 2025-11-03 20:22:54 +01:00
lucas lelievre
5a8804630b Fix lint (#1610) 2025-11-03 19:37:19 +01:00
Uriel
0df8b938d8 Update spotless and ktlint (#1528)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: loucass003 <loucass003@gmail.com>
2025-11-03 18:52:58 +01:00
lucas lelievre
7180f4eaa7 Make socket recover if slimevr crashed (#1604) 2025-11-03 18:01:25 +01:00
gorbit99
2a55617e3a Enable text input on the serial console page (#1562)
Co-authored-by: loucass003 <loucass003@gmail.com>
2025-11-03 16:20:59 +01:00
gorbit99
1777d584fe Rework Dropdown component (#1606) 2025-11-03 14:55:03 +01:00
unlogisch04
edd9ea02e1 Update jSerialComm to 2.11.3 (#1608) 2025-11-01 21:16:47 +01:00
sctanf
119d9158c0 Calibration tutorial fix settling (#1521)
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2025-11-01 00:42:42 +01:00
gorbit99
0e073a01fd Update eslint and add stylistic/jsx-self-closing-comp (#1607) 2025-11-01 00:41:53 +01:00
lucas lelievre
4e9fdb206c Firmware tool V2 (#1585) 2025-10-31 18:16:13 +01:00
Collin
0a08d57426 Positional tracker support (#920)
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-31 17:54:07 +01:00
Butterscotch!
c316c50f30 Fix tracker drift logging (#1588) 2025-10-31 17:43:32 +01:00
Uriel
81716be512 Migrate to tauri logger (#1537)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-31 17:42:13 +01:00
Polymoria
1d273ac651 Smaller paddings in alerts (#1450) 2025-10-31 17:40:23 +01:00
sctanf
7dc815cd86 ManualProportions do not wrap height text (#1529) 2025-10-31 17:35:14 +01:00
Butterscotch!
d6f771e6b2 BVH rewrite (#1542) 2025-10-31 17:20:08 +01:00
Sapphire
3aeb0569b1 Show startup error when tracker server port is in use (#1596) 2025-10-31 17:17:56 +01:00
Summer
bf2c5d59ab Add Positional UDP packet (#1546) 2025-10-31 17:16:30 +01:00
Butterscotch!
94b2309945 Delete target web-gui before copying (#1573)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-31 17:12:12 +01:00
kruemmelbande
e81c9c5b2d add safe mode .desktop file (#1600) 2025-10-29 19:40:21 +01:00
Eiren Rain
900bdc03ca Bump actions/setup-node from 5 to 6 (#1591) 2025-10-27 18:45:09 +03:00
Eiren Rain
5a73ad77f2 Bump awalsh128/cache-apt-pkgs-action from 1.5.3 to 1.6.0 (#1592) 2025-10-27 18:45:00 +03:00
dependabot[bot]
1c6a29940a Bump actions/setup-node from 5 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 15:31:25 +00:00
dependabot[bot]
adb0ae969d Bump awalsh128/cache-apt-pkgs-action from 1.5.3 to 1.6.0
Bumps [awalsh128/cache-apt-pkgs-action](https://github.com/awalsh128/cache-apt-pkgs-action) from 1.5.3 to 1.6.0.
- [Release notes](https://github.com/awalsh128/cache-apt-pkgs-action/releases)
- [Commits](https://github.com/awalsh128/cache-apt-pkgs-action/compare/v1.5.3...v1.6.0)

---
updated-dependencies:
- dependency-name: awalsh128/cache-apt-pkgs-action
  dependency-version: 1.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 15:30:41 +00:00
Eiren Rain
ae5783ce9f Bump actions/download-artifact from 5 to 6 (#1599) 2025-10-27 18:25:32 +03:00
Eiren Rain
4408b36ffb Bump actions/upload-artifact from 4 to 5 (#1598) 2025-10-27 18:25:05 +03:00
dependabot[bot]
8708778596 Bump actions/download-artifact from 5 to 6
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 15:24:31 +00:00
dependabot[bot]
b045c88158 Bump actions/upload-artifact from 4 to 5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 15:00:37 +00:00
Eiren Rain
0235660642 Fix PFR extension being used for PFS file (#1593) 2025-10-22 20:49:46 +03:00
Butterscotch!
3d90d22b56 Fix PFR extension being used for PFS file 2025-10-21 23:05:21 -04:00
dependabot[bot]
7ac3993543 Bump gradle/actions from 4 to 5 (#1582)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-18 03:43:06 +02:00
Erimel
79294e95c7 Fix network adapter status vars (#1589) 2025-10-18 03:35:18 +02:00
gorbit99
2e9256a630 Remove the GET INFO button (#1587) 2025-10-17 17:03:43 +02:00
gorbit99
0e0992e6d4 Don't allow the same value for port in and port out (#1563)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-16 06:08:34 +02:00
gorbit99
5be7896d8b Add pausing to the serial console (#1569)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-10-16 05:45:46 +02:00
lucas lelievre
25c659ba03 Revert "Progress"
This reverts commit e38a4b40b5.
2025-10-10 19:02:50 +02:00
lucas lelievre
e38a4b40b5 Progress 2025-10-10 19:02:28 +02:00
Eiren Rain
de16acbcf4 New Pontoon translations (#1512) 2025-09-30 00:24:22 +03:00
Erimel
486cb295ac Pontoon: Update French (fr) localization of GUI
Co-Authored-By: Erimel <loukalemire@gmail.com>
Co-Authored-By: SlimePuppy <minouviolet2007+github@gmail.com>
2025-09-23 21:00:09 +00:00
nekomona
dd3fe24294 Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
2025-09-23 21:00:09 +00:00
Alejandro
59bdedecbb Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Alejandro <moctezumaalejandro25@gmail.com>
2025-09-23 21:00:09 +00:00
YumeTomo
fc3d049019 Pontoon: Update Thai (th) localization of GUI
Co-Authored-By: YumeTomo <Sodnoobe@gmail.com>
Co-Authored-By: Cusmo84 <saopob@gmail.com>
Co-Authored-By: Kaiera huzu <patsakorn9090@gmail.com>
2025-09-23 21:00:09 +00:00
ReDoX
de150e7349 Pontoon: Update Polish (pl) localization of GUI
Co-authored-by: ReDoX <redox01@o2.pl>
2025-09-23 21:00:09 +00:00
Meow Wei
06b3f61d37 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-09-23 21:00:09 +00:00
Bader
82b96d5ebe Pontoon: Update Arabic (ar) localization of GUI
Co-Authored-By: Bader <baq100@gmail.com>
Co-Authored-By: FennT <0094falcon@gmail.com>
2025-09-23 21:00:09 +00:00
Aed
f2b4d468c2 Added Done button to end of mounting calibration (#1557) 2025-09-23 22:59:22 +02:00
Eiren Rain
1c0f5c381b Update CODEOWNERS (#1558) 2025-09-23 23:54:01 +03:00
lucas lelievre
fb25421ab0 OOPS 2025-09-23 20:23:51 +00:00
lucas lelievre
4890b4a71c Update CODEOWNERS 2025-09-23 22:17:57 +02:00
lucas lelievre
e38732a81c Remove secondary colors usage + improve spacing (#1554) 2025-09-22 21:27:07 +02:00
Eiren Rain
2a78354b17 Disable update prompt on Android (#1547) 2025-09-19 19:55:27 +03:00
Eiren Rain
3fb4347277 Fix Stagered fw update detection (#1544) 2025-09-19 19:55:17 +03:00
Eiren Rain
081e88ead4 Update gui/src/hooks/firmware-update.ts
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-09-18 15:34:56 +03:00
Uriel
73f41f8fc6 Disable update prompt on Android 2025-09-17 19:32:30 -03:00
loucass003
f233f59079 Fix Stagered fw update detection 2025-09-16 23:24:53 +02:00
Eiren Rain
9644b00690 fix: use transaction id in RPC reponses (#1527) 2025-09-16 18:54:12 +03:00
Eiren Rain
543e319c25 HID support on Android (#1532) 2025-09-16 14:57:24 +03:00
Eiren Rain
b7ef70f5c6 Bump actions/setup-java from 4 to 5 (#1522) 2025-09-16 14:25:42 +03:00
Eiren Rain
af171f8812 Fix Android serial support (#1533) 2025-09-16 14:25:11 +03:00
dependabot[bot]
8ec3cade06 Bump actions/setup-java from 4 to 5
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4 to 5.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-16 11:23:12 +00:00
Eiren Rain
bec8be46ca Add folder icon option for the file input (#1536) 2025-09-16 14:22:47 +03:00
Eiren Rain
ac7f809132 Bump actions/setup-node from 4 to 5 (#1540) 2025-09-16 14:22:10 +03:00
Eiren Rain
fcb241fab8 Bump actions/labeler from 5 to 6 (#1541) 2025-09-16 14:21:55 +03:00
Eiren Rain
fbdcf2fa2d Race condition patch for constraints (#1535) 2025-09-16 14:21:13 +03:00
Butterscotch!
73c821e07b Merge remote-tracking branch 'upstream/main' into bscotch/android-serial-fix 2025-09-11 16:07:57 -04:00
Butterscotch!
422ddd7ee8 Write serial directly on Android 2025-09-11 16:07:49 -04:00
Butterscotch!
943ad974ec Limit Android serial buffer to 1024 chars 2025-09-11 16:03:57 -04:00
dependabot[bot]
12a5d59e89 Bump actions/labeler from 5 to 6
Bumps [actions/labeler](https://github.com/actions/labeler) from 5 to 6.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 14:22:53 +00:00
dependabot[bot]
85286651dd Bump actions/setup-node from 4 to 5
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 14:22:49 +00:00
Uriel
e9b3efe3d5 Add folder icon option for the file input 2025-09-05 14:13:54 -04:00
Uriel
0f06ac0253 update linux metadata (#1524) 2025-09-04 13:44:17 -03:00
Butterscotch!
75fa1aa1e2 Messy race condition patch for constraints 2025-09-04 06:50:34 -04:00
Butterscotch!
7d642a21f5 Use a read buffer for Android serial
The serial reader on Android does not have a big enough buffer for our serial output, causing issues when parsing it. We can buffer until we reach a newline character to make parsing work.
2025-09-04 06:35:30 -04:00
Butterscotch!
4e1421180c Ensure serial port closure 2025-09-04 04:33:39 -04:00
Butterscotch!
f0a72645d7 Clear request more & update usbReceiver comment 2025-09-04 04:27:20 -04:00
Butterscotch!
86b8e0a904 Fix serial staying open after disconnect 2025-09-04 04:18:52 -04:00
Butterscotch!
789e6a6962 Make ACTION_USB_PERMISSION const 2025-09-04 02:37:52 -04:00
Butterscotch!
f03b300d72 Use val for usbReceiver 2025-09-04 02:26:36 -04:00
Butterscotch!
6b0822c0f6 Rename HID "Service" to "Manager" 2025-09-04 02:26:08 -04:00
Butterscotch!
d9774cab87 Extra requestingPermission handling for new device 2025-09-04 02:24:21 -04:00
Butterscotch!
f07f9f3718 Add comments for USB attach/detach events 2025-09-04 02:22:23 -04:00
Butterscotch!
486be0973b Use USB events for serial & re-request permission 2025-09-04 02:17:28 -04:00
Butterscotch!
9246dd00d3 Additional comments 2025-09-04 01:41:01 -04:00
Butterscotch!
baf515791d Fix HID service comments 2025-09-04 01:37:15 -04:00
Butterscotch!
876450d764 Make Android USB host mode optional 2025-09-04 01:34:22 -04:00
Butterscotch!
44e90e255b Rename HID classes for clarity 2025-09-04 01:34:06 -04:00
Butterscotch!
41026ab851 Move deviceIdLookup to HIDCommon 2025-09-04 01:28:26 -04:00
Butterscotch!
d8509c431d Remove device reattach handling
Events should be good enough :3
2025-09-04 01:05:35 -04:00
Butterscotch!
66df65eb80 Use Android USB events for HID instead of polling 2025-09-04 00:31:43 -04:00
Butterscotch!
30641a5809 Reconnect HID 2025-09-04 00:31:43 -04:00
Butterscotch!
574523daec Persist UsbDeviceConnection 2025-09-04 00:31:43 -04:00
Butterscotch!
1913605d16 De-duplicate HID code 2025-09-04 00:31:42 -04:00
Butterscotch!
8aeecab51f Implement awful reading 2025-09-04 00:29:45 -04:00
Butterscotch!
9fd5d6a187 Initial Android USB HID support 2025-09-04 00:29:45 -04:00
Butterscotch!
4568ebb41a Foot snapping fix (#1519) 2025-09-03 21:11:24 -03:00
Ilia Ki
2777d8af89 Fix endian docs for smol HID (#1520) 2025-09-03 20:03:39 -03:00
peelz
0c09c22306 fix: use transaction id in RPC reponses 2025-09-01 13:46:48 -04:00
Eiren Rain
3f9b997ffa Bump awalsh128/cache-apt-pkgs-action from 1.5.1 to 1.5.3 (#1515) 2025-08-19 21:45:46 +02:00
dependabot[bot]
df379ee234 Bump awalsh128/cache-apt-pkgs-action from 1.5.1 to 1.5.3
Bumps [awalsh128/cache-apt-pkgs-action](https://github.com/awalsh128/cache-apt-pkgs-action) from 1.5.1 to 1.5.3.
- [Release notes](https://github.com/awalsh128/cache-apt-pkgs-action/releases)
- [Commits](https://github.com/awalsh128/cache-apt-pkgs-action/compare/v1.5.1...v1.5.3)

---
updated-dependencies:
- dependency-name: awalsh128/cache-apt-pkgs-action
  dependency-version: 1.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-19 12:17:12 +00:00
Eiren Rain
acd628637e Bump actions/download-artifact from 4 to 5 (#1516) 2025-08-19 14:14:48 +02:00
dependabot[bot]
155dbfbff1 Bump actions/download-artifact from 4 to 5
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-19 12:13:29 +00:00
Eiren Rain
eda3d74c54 Bump actions/checkout from 4 to 5 (#1517) 2025-08-19 14:12:25 +02:00
dependabot[bot]
4b9f393cee Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 22:56:14 +00:00
Eiren Rain
069da63d1f fix(gui): export proportions button doesn't work (#1513) 2025-08-01 11:51:31 +03:00
DevMiner
3fbe58b027 fix(gui): export proportions button doesn't work 2025-08-01 02:21:26 +02:00
Eiren Rain
aa6b5ab028 Bring back resetMountingFeet toggle for mounting resets (#1509) 2025-07-31 22:07:30 +03:00
Erimel
b2ee4e0b5e Change icons for new mounting reset buttons 2025-07-29 17:29:25 -04:00
Erimel
34ab0c6252 Bring back resetMountingFeet toggle for mounting resets 2025-07-29 17:14:05 -04:00
Butterscotch!
a8116a7f35 Fix mounting reset not working for feet (#1508) 2025-07-29 16:33:27 -04:00
Eiren Rain
8c65129bb4 New Pontoon translations (#1502) 2025-07-26 06:02:35 +03:00
Nola
acaf6a7679 Pontoon: Update Dutch (nl) localization of GUI
Co-authored-by: Nola <stefsecretdesecret@gmail.com>
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com>
2025-07-26 05:01:55 +02:00
nekomona
8044a8a824 Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
2025-07-26 05:01:55 +02:00
Yexo
1ec03b83b6 Pontoon: Update Polish (pl) localization of GUI
Co-Authored-By: Yexo <patrykcyranski@gmail.com>
2025-07-26 05:01:55 +02:00
lucas lelievre
44caf24126 FW update + Fix download url 2025-07-26 05:00:37 +02:00
Erimel
a125195695 Pontoon: Update French (fr) localization of GUI
Co-authored-by: Erimel <loukalemire@gmail.com>
2025-07-22 23:08:56 +00:00
Erimel
d27385dfa4 Allow partial/separate resets for feet and fingers (#1441)
Co-authored-by: Uriel <imurx@proton.me>
2025-07-22 19:08:34 -04:00
DevMiner
68bd670d7c fix(gui/wizard): manual calibration reset body proportions's reset button isn't primary (#1503) 2025-07-20 22:26:46 +02:00
Eiren Rain
42eda428ae New Pontoon translations (#1499) 2025-07-18 02:11:40 +03:00
YumeTomo
6504ebb9fb Pontoon: Update Thai (th) localization of GUI
Co-authored-by: YumeTomo <Sodnoobe@gmail.com>
2025-07-17 21:50:41 +00:00
MenacingExiler
6332615b08 Pontoon: Update Vietnamese (vi) localization of GUI
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
2025-07-17 21:50:41 +00:00
Uriel
e054c393ea Add loucas003 for GUI settings codeowner 2025-07-17 18:50:23 -03:00
dependabot[bot]
85c30b9425 Bump awalsh128/cache-apt-pkgs-action from 1.5.0 to 1.5.1 (#1495)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-17 18:10:00 -03:00
DevMiner
5f5d96a1c7 fix: Nix Rust toolchain hash (#1500) 2025-07-16 20:17:19 +02:00
lucas lelievre
2bce1af454 Fix deploy data fetching (#1494)
Co-authored-by: Uriel <imurx@proton.me>
2025-07-16 19:29:32 +02:00
Uriel
d45527f72e Fix RPM packages not working in newer Fedora versions (#1496) 2025-07-15 17:47:14 +02:00
DevMiner
bd3acf1889 ci: guess no node cache? (#1498) 2025-07-15 16:09:04 +02:00
lucas lelievre
347fcf503f ci: add update manifest generation workflow (#1497)
Co-authored-by: DevMiner <devminer@devminer.xyz>
2025-07-15 15:45:12 +02:00
Eiren Rain
12c3379e9a New Pontoon translations (#1485) 2025-07-09 22:35:44 +03:00
Bader
77a871239d Pontoon: Update Arabic (ar) localization of GUI
Co-Authored-By: Bader <baq100@gmail.com>
Co-Authored-By: FennT <0094falcon@gmail.com>
2025-07-09 21:34:39 +02:00
YumeTomo
337d345ded Pontoon: Update Thai (th) localization of GUI
Co-Authored-By: YumeTomo <Sodnoobe@gmail.com>
Co-Authored-By: Kaiera huzu <patsakorn9090@gmail.com>
Co-Authored-By: jesdaaup <jesdaaup@gmail.com>
Co-Authored-By: SparklingSakura <natthakitw.2006@gmail.com>
Co-Authored-By: yuyavx <yuyavxvtuber@gmail.com>
Co-Authored-By: Cusmo84 <saopob@gmail.com>
2025-07-09 21:34:39 +02:00
Nola
34de9c3586 Pontoon: Update Dutch (nl) localization of GUI
Co-Authored-By: Vyolex <25586367+Vyolex@users.noreply.github.com>
Co-Authored-By: Nola <stefsecretdesecret@gmail.com>
2025-07-09 21:34:39 +02:00
lucas lelievre
cb28221c58 Staggered fw upate system (#1491) 2025-07-09 22:28:54 +03:00
Butterscotch!
64903038e0 Simplify deltaTime for ticks in Tracker (#1492) 2025-07-09 22:22:37 +03:00
Butterscotch!
4cbc6031f8 Enable pnpm and npm in Nix flake (#1493) 2025-07-09 18:23:09 +03:00
Butterscotch!
66f619bb4f Yaw reset smoothing fix (#1490) 2025-07-04 11:19:10 +02:00
Butterscotch!
09a0ed153b Clean-up PoseStreamer and PoseRecorder (#1369) 2025-07-04 11:02:14 +02:00
Butterscotch!
e8fa981225 Grammer and speeling feex (#1474)
Co-authored-by: ShineBrightMeow <142170650+ShineBrightMeow@users.noreply.github.com>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-07-04 10:39:25 +02:00
0forks
54f9907238 Use JNA for network profile detection (#1480)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-07-04 10:20:08 +02:00
Uriel
8525f85d59 Check monitor size before recovering old window state (#1470) 2025-07-04 10:00:27 +02:00
Uriel
7293ddaa90 Add save file prompt for BVH recordings (#1483) 2025-07-04 08:49:49 +02:00
Uriel
3ec6a61763 Add ARM builds in CI (#1482) 2025-07-03 01:28:05 +02:00
Uriel
7874bbca27 include udev rules in the linux installers (#1488) 2025-07-03 01:27:06 +02:00
Uriel
b978eaf3f1 Add support for Linux registry checking for VRChat (#1459) 2025-07-01 23:55:09 +02:00
Uriel
b2817cb3ba Fix GUI errors when in smaller sizes (#1472) 2025-07-01 22:36:21 +02:00
Uriel
ab265d1689 Update jSerialComm to latest version (#1487) 2025-07-01 22:28:37 +02:00
Uriel
527c4c7f91 Fix concurrency issue with status interacting with multiple threads (#1484) 2025-07-01 22:24:58 +02:00
Butterscotch!
7c506a3fe2 Add mounting reset protobuf binding (#1473) 2025-07-01 22:12:27 +02:00
Uriel
217dc875d5 Update to latest versions in metainfo (#1486) 2025-07-01 08:30:16 +03:00
Uriel
489052141d Revert "Temporary CI measures for building 0.16"
This reverts commit 62553f4227.
2025-06-30 15:59:25 -04:00
Uriel
62553f4227 Temporary CI measures for building 0.16 2025-06-30 15:18:03 -04:00
Uriel
89c18f8488 New Pontoon translations (#1437) 2025-06-30 20:58:25 +02:00
Shans
a8a2197f91 Pontoon: Update Ukrainian (uk) localization of GUI
Co-authored-by: Shans <KaluhinShans@gmail.com>
2025-06-30 13:53:19 -04:00
YumeTomo
535f502169 Pontoon: Update Thai (th) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: SparklingSakura <natthakitw.2006@gmail.com>
Co-authored-by: yuyavx <yuyavxvtuber@gmail.com>
Co-authored-by: YumeTomo <Sodnoobe@gmail.com>
Co-authored-by: jesdaaup <jesdaaup@gmail.com>
Co-authored-by: Cusmo84 <saopob@gmail.com>
2025-06-30 13:53:07 -04:00
Uriel
bcc4dd4018 add 2 languages to the dropdown 2025-06-30 13:53:06 -04:00
mygz
eebdd61e47 Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: mygz <miguelmiguelmnogueira@gmail.com>
2025-06-30 13:53:06 -04:00
Baddie
b3e2b0f77f Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Baddie <baddie@femboy.gay>
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Aveña <victor@priv.ericeikrem.com>
2025-06-30 13:53:01 -04:00
catdrout
fbf487c9ad Pontoon: Update Swedish (sv-SE) localization of GUI
Co-authored-by: cabbemannen <cabbemannen10@gmail.com>
Co-authored-by: catdrout <c4tdrout@protonmail.com>
Co-authored-by: Uriel <imurx@proton.me>
2025-06-30 13:52:54 -04:00
martin
c0d23c80e6 Pontoon: Update French (fr) localization of GUI
Co-authored-by: martin <martin@dolez.fr>
Co-authored-by: FR_KF_FR <scomtat@wanadoo.fr>
Co-authored-by: Erimel <loukalemire@gmail.com>
2025-06-30 13:52:47 -04:00
ReDoX
6b8931699b Pontoon: Update Polish (pl) localization of GUI
Co-authored-by: Yexo <patrykcyranski@gmail.com>
Co-authored-by: ReDoX <redox01@o2.pl>
2025-06-30 13:52:33 -04:00
Flar
3b41398ef2 Pontoon: Update Russian (ru) localization of GUI
Co-authored-by: Flar <kani.dragonflar@gmail.com>
Co-authored-by: lindetinn <Kuzmenko3g@gmail.com>
Co-authored-by: SummerArtz <summerpzmail@gmail.com>
Co-authored-by: Arom <shura.bekker.00@bk.ru>
Co-authored-by: Sergey <serezhenka.soldatov.2020@mail.ru>
Co-authored-by: viberbread <panfilov.iva2015@yandex.ru>
2025-06-30 13:52:11 -04:00
Laszlo
73ee6f7ced Pontoon: Update Norwegian Bokmål (nb-NO) localization of GUI
Co-authored-by: Laszlo <schlorpian@proton.me>
Co-authored-by: eivind.eriksen <eivind.eriksen08@gmail.com>
Co-authored-by: Aveña <victor@priv.ericeikrem.com>
2025-06-30 13:51:57 -04:00
Andokai
c59595a669 Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Andokai <da.nova@duocuc.cl>
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: MaxEvil <xicovalle@gmail.com>
2025-06-30 13:51:50 -04:00
Cheezik
c85f27fa80 Pontoon: Update Czech (cs) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Cheezik <cheatistv@email.cz>
2025-06-30 13:51:46 -04:00
abb128
1ab4023200 Pontoon: Update Lithuanian (lt) localization of GUI
Co-authored-by: abb128 <abb128@sapples.net>
2025-06-30 13:51:45 -04:00
nekomona
50fdd1869e Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-Authored-By: nekomona <nekomona@163.com>
2025-06-30 13:51:45 -04:00
Etch9
d8153fee52 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
Co-authored-by: Etch9 <mario.mazzara30@gmail.com>
2025-06-30 13:51:38 -04:00
Meow Wei
d5323fd050 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-Authored-By: Meow Wei <medicalwei@gmail.com>
2025-06-30 13:51:31 -04:00
Uriel
84bfc3687e Fix __ANDROID__ being not initialized and crashing GUI 2025-06-29 13:53:11 -04:00
Uriel
dd06e2b28a Update VRM reader to the new VMC 1.0 spec (#1481) 2025-06-26 06:24:24 +03:00
Uriel
add1e4eb5d Remove BVH button on android builds (#1478) 2025-06-25 21:56:29 -03:00
lucas lelievre
5a7a650f83 Fix number / order of steps in stay aligned (#1475) 2025-06-25 22:57:47 +02:00
Uriel
0427f16e72 Improve the maintenance of the Linux-side (#1463) 2025-06-20 17:39:03 +02:00
lucas lelievre
89ec689a46 Individual Pose calibration for stay aligned (#1452) 2025-06-20 14:07:28 +02:00
Polymoria
4ae5fb7215 Manual proportions visual fixes (#1449)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-06-15 11:54:29 +02:00
jabberrock
241179a924 [Stay Aligned] Fix wild swings when yaw resetting by resetting Stay Aligned before filtering (#1468) 2025-06-15 11:36:00 +02:00
Erimel
ad16d05c42 Fix vrc tracker model unknown text (#1469) 2025-06-15 11:26:55 +02:00
Erimel
3ef550d8b1 Fix neck length not being able to be used for VMC (#1466) 2025-06-11 06:37:27 +02:00
lucas lelievre
26f330c762 Remove Drift compensation (#1461) 2025-06-03 19:11:42 +03:00
lucas lelievre
79eb43fca3 Revert "Just aligned together some elements" (#1460) 2025-06-02 16:14:05 +02:00
lucas lelievre
712fbc3ee8 Optimise Tracker assignment re renders (#1454) 2025-06-02 14:35:10 +02:00
Uriel
0add9bad97 Use fetchResourceUrl for the setup wizard video (#1457) 2025-06-02 14:34:40 +02:00
sctanf
b308cc8ce3 TrackersHID only reopen if no data received (#1444) 2025-06-01 21:22:34 -03:00
Uriel
3920654370 Update linux metadata releases (#1458) 2025-06-01 21:01:42 -03:00
Uriel
503637cb0a Improve typing on xylophone (#1456) 2025-06-02 02:45:05 +03:00
Polymoria
45ff48d9ac Just aligned together some elements (#1451) 2025-05-30 19:45:17 +02:00
loucass003
47b6f0f3c3 lint 2025-05-30 15:06:47 +02:00
Polymoria
a6dd914e83 Free the text coursour? (#1448) 2025-05-30 06:04:04 +02:00
loucass003
7832783388 Fix preview framerate wierdness + fix errors when devSettings key does not exist 2025-05-28 06:36:03 +02:00
lucas lelievre
37553ea889 stay aligned fixes (#1447) 2025-05-28 03:45:37 +02:00
lucas lelievre
419841d9f9 stay aligned wizard (#1442) 2025-05-28 01:00:04 +02:00
lucas lelievre
a4c14aa23e bump flasher lib (#1446) 2025-05-28 01:33:36 +03:00
jabberrock
d71879cc4d [Stay Aligned] Increase yaw correction rate for good IMUs (#1445) 2025-05-27 21:40:01 +02:00
sctanf
ca14fa05e5 add server/*/bin to .gitignore (#1443) 2025-05-24 18:26:54 -03:00
jabberrock
4f4c90d129 [Stay Aligned] Move reset stay aligned after filtering (#1439) 2025-05-24 03:03:13 +02:00
jabberrock
c56d953516 [Stay Aligned] Select yaw correction rate based on IMU type (#1438) 2025-05-21 21:34:20 +02:00
Ilia Ki
b58e9b9074 Add a proper tracker name for gestures trackers (#1440) 2025-05-21 17:51:18 +03:00
lucas lelievre
85d227c926 [Stay Aligned] Simplify Stay Aligned settings (#1436) 2025-05-20 18:47:54 +02:00
Jabberrock
b9d97bb2d8 Update solarxr-protocol 2025-05-20 09:09:06 -07:00
Jabberrock
4fc09c348a Use multiline string for debug output 2025-05-20 09:08:15 -07:00
Jabberrock
795d73dd19 [Stay Aligned] Simplify Stay Aligned settings 2025-05-19 20:55:02 -07:00
lucas lelievre
01130b858e Stay Aligned (#1418) 2025-05-19 22:58:46 +02:00
Jabberrock
85ea808119 Update solarxr-protocol 2025-05-19 13:45:13 -07:00
Jabberrock
44765d5b6e Add "Setup Stay Aligned" flow 2025-05-19 13:07:12 -07:00
Jabberrock
853d112737 Stay Aligned
Keeps your trackers aligned by slowly adjusting the yaw of your trackers to
correct for drift.

Every tick, Stay Aligned adjusts the yaw of one tracker. It looks at the
player's current pose, and adjusts the yaw of the tracker by a tiny amount, in
the direction which is closest to the relaxed pose that the player set up. Over
time, this has the effect of keeping all the trackers in a human-like pose.
2025-05-19 13:07:12 -07:00
lucas lelievre
8881746941 New Pontoon translations (#1391) 2025-05-18 16:19:03 +02:00
Meow Wei
d3ee82cccc Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
947f440600 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Mama-Gen
8e887395f1 Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
3f42b8ab51 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
52a8e24d9e Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
80248e82f9 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
647964fe99 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
Meow Wei
010018b400 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-05-16 03:00:27 +00:00
nekomona
4783eab37c Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: Luarshey <smallkay063@outlook.com>
2025-05-16 03:00:27 +00:00
unlogisch
f693d562ba Pontoon: Update German (de) localization of GUI
Co-authored-by: unlogisch <unlogisch@gmx.ch>
2025-05-16 03:00:27 +00:00
Uriel
964b19be01 Fix manual proportions not running in old browser versions (#1435) 2025-05-16 00:00:05 -03:00
loucass003
00c768919d Lint 2025-05-14 14:50:54 +02:00
loucass003
c9415b2c02 Check if vrcConfigSetting is suported in the settings 2025-05-14 14:46:55 +02:00
loucass003
93d666a233 Update wifi profile warning link to something usefull 2025-05-13 17:17:50 +02:00
Aleksandra M
cc8538a332 Add note to update gui dependencies when change SolarXR protocol (#1432) 2025-05-12 21:26:36 +02:00
lucas lelievre
f9d619f93a Show warnings when network is set to public on windows (#1425) 2025-05-12 22:24:18 +03:00
Butterscotch!
471714afd0 Tracking pause unit test (#1360) 2025-05-12 21:08:06 +03:00
Aleksandra M
91ce0ed734 Add magnetic field vector (#1416) 2025-05-12 18:59:44 +03:00
sctanf
a35d2a77a2 TrackersHID clearly define acceleration axes (#1431) 2025-05-12 18:53:02 +03:00
sctanf
ea31d58fb8 IMUVisualizerWidget accel replace three arrows with one vector (#1430) 2025-05-12 18:52:50 +03:00
sctanf
e74dee1892 TrackersHID report magnetometer packet (#1428) 2025-05-12 18:52:41 +03:00
sctanf
d84fc40b23 TrackersHID keep opening existing devices (#1429) 2025-05-12 18:52:29 +03:00
Uriel
0dd004825d Fix macOS heap error in CI (#1426) 2025-05-06 20:08:36 +02:00
lucas lelievre
9f36444169 Allow to mute vrc warnings (#1420) 2025-05-06 12:07:51 +03:00
sctanf
52509c7950 Tracker display names (#1417) 2025-05-06 12:02:16 +03:00
Uriel
868c441220 Stop using Twemoji and just use SVGs for it (#1364) 2025-05-06 12:01:46 +03:00
jabberrock
5ad408f61d Reduce log entry size when logging invalid UDP packets (#1424) 2025-05-06 11:46:39 +03:00
sctanf
9b30f9800c TrackersHID fix exception from null magStatus (#1419) 2025-05-04 21:18:14 +02:00
lucas lelievre
07e5ef647a Make sure Global mag setting is saved (#1421) 2025-05-02 21:50:27 +03:00
lucas lelievre
47909ad46c Fix battery resistances being sent as string instead of numbers (#1413) 2025-04-28 17:59:11 +02:00
sctanf
99c92fad9e make tracker entry borders consistent with no border (#1411)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-04-28 16:51:06 +02:00
sctanf
d7861614b7 Better battery and wifi statuses behavior (#1410)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-04-28 16:44:27 +02:00
unlogisch04
b4a3e9cbd5 fix Firewall Rules for java.exe (#1415) 2025-04-28 14:56:43 +02:00
lucas lelievre
e58946f622 Bring back onboarding (#1414) 2025-04-28 14:55:52 +02:00
Erimel
c8532c76c2 Fix lower_leg-desc and elbow_offset-desc typos (#1412) 2025-04-27 01:29:57 +02:00
Butterscotch!
6f26ea7b50 Add OTA port to firewall uninstall script (#1409) 2025-04-26 16:01:22 +02:00
Butterscotch!
a848dfac43 Filtering fixes (#1405)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-04-25 17:27:20 +02:00
lucas lelievre
e5ea747cde Fix fw tool crash (#1408) 2025-04-25 17:21:25 +02:00
sctanf
34a782193b add transition to tracker shadows (#1402) 2025-04-25 08:37:17 +02:00
lucas lelievre
8498270df6 More provisioning errors (#1404)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-04-25 08:28:37 +02:00
Butterscotch!
cd6ed7296b Interpolation tests & better skeleton test class (#1359) 2025-04-24 00:19:21 +03:00
lucas lelievre
57541e560c vrconfig linux fix (#1403) 2025-04-23 21:22:08 +02:00
Erimel
6f877c3852 Apply filtering post-reset, reapply 180° fix removal & fix getYawQuaternion polarity (#1352)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-04-23 15:18:20 +02:00
lucas lelievre
ca8d75e749 Optimise re-renders (#1355)
Co-authored-by: Uriel <imurx@proton.me>
2025-04-23 14:58:19 +02:00
lucas lelievre
0dc073ca48 VRChat Config Warnings (#1358)
Co-authored-by: Erimel <marioluigivideo@gmail.com>
2025-04-23 14:36:29 +02:00
lucas lelievre
edbaf49e7a manual proportions rework (#1346)
Co-authored-by: Erimel <marioluigivideo@gmail.com>
2025-04-23 13:48:31 +02:00
Butterscotch!
ca790a3799 Load configured height for manual height config (#1395)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-04-23 12:20:54 +03:00
Uriel
3639bdc0ff Use automatic hyphenation when possible (#1362) 2025-04-23 11:16:21 +02:00
sctanf
6817eca793 Use HID tracker magnetometer status from mag_id (#1366) 2025-04-23 12:14:43 +03:00
dependabot[bot]
03365eb050 Bump awalsh128/cache-apt-pkgs-action from 1.4.3 to 1.5.0 (#1361)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 12:12:16 +03:00
sctanf
df5744b861 add fade out to reset button borders (#1400) 2025-04-23 11:06:46 +02:00
unlogisch04
bc602892b4 Fix for override.ftl not working (#1398) 2025-04-21 04:13:14 +02:00
sctanf
f49121b8a4 softer reset sounds (#1394) 2025-04-19 18:23:12 +02:00
lucas lelievre
c31aab8237 fw update server deadlock fix (#1393) 2025-04-19 18:22:59 +02:00
Butterscotch!
8e7070d257 Add OTA port to firewall script (#1397) 2025-04-19 19:22:14 +03:00
Butterscotch!
bf9a7fe7f4 Simplify mounting reset status checking (#1382) 2025-04-15 19:18:47 +02:00
lucas lelievre
00690dc351 New Pontoon translations (#1374) 2025-04-15 19:05:12 +02:00
Mama-Gen
2a4b9d29a1 Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
2025-04-15 17:04:56 +00:00
Meow Wei
4080540e03 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-04-15 17:04:56 +00:00
unlogisch
e2bd7fa37c Pontoon: Update German (de) localization of GUI
Co-authored-by: unlogisch <unlogisch@gmx.ch>
2025-04-15 17:04:56 +00:00
Baddie
23ce2464ab Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Baddie <baddie@femboy.gay>
Co-authored-by: Uriel <imurx@proton.me>
2025-04-15 17:04:56 +00:00
Baddie
fa6ea23533 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Baddie <baddie@femboy.gay>
Co-authored-by: Uriel <imurx@proton.me>
2025-04-15 17:04:56 +00:00
Butterscotch!
eed5d21074 Increase default log limits and refactor FileLogHandler (#1381) 2025-04-15 19:04:37 +02:00
lucas lelievre
f5cb587e00 Make Firmware update more reliable, prevent deadlocks of ui (#1389) 2025-04-15 19:00:57 +02:00
Butterscotch!
e395347421 Scale arms on proportions reset (#1383) 2025-04-15 19:00:08 +02:00
lucas lelievre
7fec2f7468 Battery level check before update (#1387)
Co-authored-by: Uriel <imurx@proton.me>
2025-04-15 18:59:33 +02:00
Butterscotch!
44fc23d2f8 Limit prediction slerp amount (#1388) 2025-04-15 18:51:21 +02:00
lucas lelievre
3dfaf1fdac Allow unset password (#1385) 2025-04-15 18:49:47 +02:00
lucas lelievre
972d113afb Remove unsupported boards from fw tool (#1384) 2025-04-15 18:49:24 +02:00
lucas lelievre
ffc6ca485f Change fw tool reboot wording (#1386) 2025-04-15 18:41:15 +02:00
Uriel
6a6771a7da Fix uncatched errors from not having Tauri (#1379) 2025-04-14 20:47:55 +02:00
Uriel
15e4f9d3a5 Use roaming folder for windows logs when trying to open it (#1380) 2025-04-14 17:04:51 +02:00
lucas lelievre
843aeae581 Fix translations versions (#1375) 2025-04-10 06:03:50 -04:00
lucas lelievre
26703ed04e Better warnings for scaled proportions (#1371) 2025-04-09 22:31:30 +02:00
lucas lelievre
4663d71eac More translation fix (#1373) 2025-04-09 20:38:38 +02:00
lucas lelievre
cd2c170327 Sentry modal text fixes (#1372) 2025-04-09 20:09:32 +03:00
Eiren Rain
2f211e8514 SlimeVR Trademark Clarifications (#1370) 2025-04-09 15:40:01 +03:00
Eiren Rain
69a446c987 Minor fixes 2025-04-09 15:37:11 +03:00
Uriel
3aace3ee3f New Pontoon translations (#1354) 2025-04-09 06:56:09 +02:00
Yingxue
186fd0c9f7 Pontoon: Update Japanese (ja) localization of GUI
Co-authored-by: Yingxue <a1175815821@163.com>
2025-04-09 03:00:06 +00:00
mygz
cc8f3fda9c Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
Co-authored-by: mygz <miguelmiguelmnogueira@gmail.com>
2025-04-09 04:08:30 +02:00
unlogisch
b48c678800 Pontoon: Update German (de) localization of GUI
Co-authored-by: dennis.staudacher <dennis.staudacher@icloud.com>
Co-authored-by: unlogisch <unlogisch@gmx.ch>
Co-authored-by: Zeidurth <github@zeidurth.de>
2025-04-09 04:08:24 +02:00
Baddie
2f7fd22b09 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Baddie <baddie@femboy.gay>
2025-04-09 04:08:24 +02:00
infopcgood
b50c940b24 Pontoon: Update Korean (ko) localization of GUI
Co-authored-by: infopcgood <sshs_student_412@outlook.kr>
Co-authored-by: Kamilake <exjang0@gmail.com>
2025-04-09 04:08:24 +02:00
Butterscotch!
f341d1d312 Pontoon: Update Engwish (en-x-owo) localization of GUI
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: Mini <alexanderawatson64@gmail.com>
Co-authored-by: Dau <gamer.buds2@gmail.com>
2025-04-09 04:08:17 +02:00
Cheezik
19e0e22ebf Pontoon: Update Czech (cs) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Cheezik <cheatistv@email.cz>
2025-04-09 04:08:11 +02:00
Alejandro
347eaf269b Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Alejandro <moctezumaalejandro25@gmail.com>
2025-04-09 04:08:05 +02:00
Meow Wei
51ed5dbef2 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-04-09 04:07:57 +02:00
Erimel
aa0a96c3c5 Pontoon: Update French (fr) localization of GUI
Co-authored-by: Erimel <loukalemire@gmail.com>
Co-authored-by: martin <martin@dolez.fr>
Co-authored-by: rascrifice <noppyfloppy69@gmail.com>
2025-04-09 04:07:50 +02:00
namakeingo
a51c6136c2 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-04-07 13:00:54 +00:00
lucas lelievre
457536b781 Fix manual proportions export (#1368) 2025-04-07 15:00:28 +02:00
Eiren Rain
b514a48b37 Remove logo from the trademark file 2025-04-07 10:08:39 +03:00
Collin
b7dd646594 Decrease shoulder joint's constraints (#1367) 2025-04-07 06:33:30 +02:00
Eiren Rain
616419be7a Fix logs folder opening wrong folder in Linux and macOS (#1363) 2025-04-02 01:54:08 +02:00
Uriel
df74e162bd Take into account logs folder being different in each OS 2025-04-01 20:41:56 -03:00
Eiren Rain
25374847f6 Prepare Firmware Constants for Gestures Release (#997) 2025-03-30 18:19:22 +03:00
Ilia Ki
7289c78fec Update server/core/src/main/java/dev/slimevr/tracking/trackers/udp/FirmwareConstants.kt
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2025-03-30 22:03:04 +07:00
Ilia Ki
33ca7734e5 Update FirmwareConstants.kt 2025-03-30 19:28:19 +07:00
Ilia Ki
58ab5efa6e Merge branch 'main' into patch-1 2025-03-30 19:27:45 +07:00
Eiren Rain
01d2f5ae5f Implement Sentry error logging for GUI (#1153) 2025-03-27 20:59:39 +03:00
loucass003
07542aa2b1 lint 2025-03-27 18:32:05 +01:00
loucass003
83f76154ff Add trackers info to sentry context 2025-03-27 18:29:49 +01:00
loucass003
3996a60bf5 Remove test comment 2025-03-26 21:26:44 +01:00
loucass003
0cecc6e4c5 Re enable text on replays 2025-03-26 21:26:27 +01:00
loucass003
14011a8246 Optimise config loading for early loading of sentry. remove loading state of config as not needed anymore. Update sentry to latest 2025-03-26 21:11:59 +01:00
loucass003
78ed11bd62 Move sentry loading further up in the react graph 2025-03-26 20:29:32 +01:00
loucass003
5b5d2d88e5 Fix solarxr 2025-03-26 20:15:08 +01:00
loucass003
5bddc22da5 Update to main + better translations 2025-03-26 20:10:08 +01:00
loucass003
3d9c6c5fce Merge branch 'main' of github.com:SlimeVR/SlimeVR-Server into sentry-gui 2025-03-26 19:13:15 +01:00
Eiren Rain
a06161bbfa Fix GUI freezing when reopening config folder (#1357) 2025-03-26 13:14:09 +03:00
Maya
837ec60062 remove plugin-shell in tauri config 2025-03-23 07:26:45 +03:00
JovannMC
4b3b4d33ff fix freezing when reopening config folder
for some reason, the entire app froze when you click on "open folder" again, without closing the first explorer window

fixed by moving the code to the rust side
2025-03-23 06:04:40 +03:00
Eiren Rain
400bad5eae Small fixes 2025-03-19 21:49:53 +03:00
Eiren Rain
346149a259 Fix typos 2025-03-19 21:45:31 +03:00
Eiren Rain
7e895b0405 Fix readme link 2025-03-19 21:35:00 +03:00
Eiren Rain
b6ab0f306b Added trademark and logo usage rules 2025-03-19 21:33:19 +03:00
lucas lelievre
315bd81197 Send reset finished status on all reset timers (#1353) 2025-03-19 13:41:07 +01:00
Eiren Rain
8b73ca434b New Pontoon translations (#1315) 2025-03-16 17:25:19 +03:00
Meow Wei
b1d7a026a1 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-03-16 14:24:41 +00:00
namakeingo
ed9401427e Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-03-16 14:24:41 +00:00
namakeingo
8c8f7b3b38 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
Co-authored-by: Kekko <saccofra8@gmail.com>
2025-03-16 14:24:41 +00:00
Erimel
bf2ef355b7 Pontoon: Update French (fr) localization of GUI
Co-authored-by: Erimel <loukalemire@gmail.com>
2025-03-16 14:24:41 +00:00
Butterscotch!
3f1a794148 Full height for manual configuration (#1329)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-03-16 16:24:22 +02:00
Butterscotch!
a0cedde4b7 Unit test toe snap + fix leg tweaks & default proportions (#1350) 2025-03-16 14:07:07 +02:00
Butterscotch!
eb23778bec Fix moving average quaternion desync & smoothing (#1351) 2025-03-16 14:04:10 +02:00
Romain D.
5353101fff Add more actions to Websocket JSON API (#1347) 2025-03-14 15:31:41 +02:00
DevMiner
d32f91e6b8 fix(solarxr): unbreak other SolarXR clients caused by Vive emulation removal (#1348) 2025-03-14 15:26:44 +02:00
Butterscotch!
f0d07466cd Add skeleton resets unit tests (#1336) 2025-03-11 19:03:20 +02:00
Butterscotch!
49bcc86c4e Fix manual height not submitting form value (#1342)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-03-11 17:43:12 +01:00
lucas lelievre
e7b29b1a2e Better Error page when connection lost + Open logs folder btn (#1340) 2025-03-11 13:12:04 +01:00
lucas lelievre
b2c030c275 Scaled proportions as default (#1339) 2025-03-11 12:50:11 +01:00
lucas lelievre
9e92450700 Merge branch 'main' into 1327-scaled-proportions-should-be-the-main-option 2025-03-11 11:35:50 +01:00
loucass003
2eab516216 Disable Autobone when no vr headset 2025-03-11 11:06:04 +01:00
loucass003
808dd0f670 Better tones -> with poly 2025-03-10 16:24:02 +01:00
loucass003
171ad8b271 Lint 2025-03-10 11:35:20 +01:00
loucass003
50585e40c8 Scaled proportions as default + Autobone moved into manual proportions + Removal of the choose page between manual and scaled proportions + Move export/import proportions to manual 2025-03-10 11:33:55 +01:00
lucas lelievre
9a14eef55e BVH Status and Paused tracking is not presisted in gui (#1332) 2025-03-10 03:02:40 +01:00
lucas lelievre
264710a1fb Redo all tap sounds with better volume and tones / remove mp3s (#1338) 2025-03-10 02:48:43 +01:00
Butterscotch!
c649b9a5fe Fix skeleton config "changed" arrays (#1330) 2025-03-08 13:25:25 -03:00
lucas lelievre
7ab6515a10 Better status messages and ui feedback when needing user actions on the firmware tool (#1331) 2025-03-06 19:45:27 +03:00
Butterscotch!
38f40cadbf Estimate full height and clarify height config translations (#1325) 2025-03-04 19:00:36 +02:00
Butterscotch!
9febcf8166 New PoseFrame streaming format (#1284) 2025-03-04 18:58:41 +02:00
Butterscotch!
4ae197618e Use bones for AutoBone error calculation (#1312) 2025-03-04 18:55:51 +02:00
Butterscotch!
4dac7d28e4 Fix GUI crashing on standalone builds (#1310) 2025-03-04 18:53:36 +02:00
Butterscotch!
589ed15ac2 Remove Vive Emulation (#1324) 2025-03-04 18:52:43 +02:00
Erimel
e944b8a8fa Add a toggle for OSCQuery (#1322)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-03-04 18:29:23 +02:00
rcelyte
2c5ec62c11 Fix erroneous sign extension in Protobuf IPC packet handling (#1318) 2025-03-04 17:12:16 +02:00
Butterscotch!
6b7ec2adc6 AutoBone iteration abstraction (#1301) 2025-03-04 17:11:07 +02:00
Butterscotch!
20c8c3e7c8 Update firmware constants and translations (#1319) 2025-03-04 17:09:02 +02:00
Butterscotch!
ceb6bd6f5a Document fields in TrackerResetsHandler (#1320) 2025-03-04 17:07:03 +02:00
Butterscotch!
9c4ff8c064 Accept rest calibration in sensor info packet (#1317) 2025-02-26 12:35:49 +03:00
SlimeVR-bot
4f364acecc New Pontoon translations (#1296)
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: ZZNYJIDI <zznyjidi@hotmail.com>
Co-authored-by: Yingxue <a1175815821@163.com>
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-02-13 01:30:12 +02:00
lucas lelievre
f701075cf3 Improve reset sounds (#1294) 2025-02-13 01:13:05 +02:00
Collin
d498feee31 Disable correct with constraints server side and hide option in GUI (#1303) 2025-02-13 00:27:05 +02:00
jabberrock
ecae40ece8 Updates nodeOffset when body proportions change (#1304) 2025-02-13 00:26:54 +02:00
lucas lelievre
2eb4bab240 Make tap over threshold always available (#1300) 2025-02-10 01:45:14 +03:00
Erimel
9e666a74e1 Revert "Fix over 180 degrees rotations in HumanSkeleton" (#1302) 2025-02-10 01:43:14 +03:00
lucas lelievre
f89f9ae35b Move autimatic steamvr tracker assignment checkbox first (#1299) 2025-02-04 19:35:49 +01:00
loucass003
2cfda2272d Revert "lint"
This reverts commit d63587fcd1.
2025-02-03 00:21:27 +01:00
loucass003
256545ab62 Revert "Change reset sounds so you have clues at the begining and end of the reset action"
This reverts commit 18778db7c3.
2025-02-03 00:21:05 +01:00
loucass003
d63587fcd1 lint 2025-02-03 00:17:26 +01:00
loucass003
18778db7c3 Change reset sounds so you have clues at the begining and end of the reset action 2025-02-03 00:13:16 +01:00
lucas lelievre
fb23ba8522 Small ui fixes on firmware updates (#1291) 2025-01-31 13:54:26 +01:00
lucas lelievre
15ea04d7c9 New Pontoon translations (#1239) 2025-01-31 13:42:21 +01:00
Meow Wei
154fb39794 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
a02de9790a Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
98f40ac920 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
555e6959da Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
f8520cd379 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
aee41cc3d4 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
Uriel
0d8135a09e Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
2025-01-31 12:35:15 +00:00
namakeingo
2c7b5c44f1 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
1a73ea7f58 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
4355a987ca Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
bf7351c57d Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Vyolex
0c3090b716 Pontoon: Update Dutch (nl) localization of GUI
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com>
2025-01-31 12:35:15 +00:00
Vyolex
daace77eb3 Pontoon: Update Dutch (nl) localization of GUI
Co-authored-by: ruben <ruben@balduk.nl>
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com>
2025-01-31 12:35:15 +00:00
Meow Wei
9e9dd9e9de Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
59e5228b1d Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
e93b06f471 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
93d69711d6 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
b495266a41 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
4acd1015b9 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
509ad76f2c Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
1e7ce92839 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
d960fb3c04 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
0b873977e8 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Meow Wei
1cbde8a1e1 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
Uriel
45173fa069 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
2025-01-31 12:35:15 +00:00
Uriel
af543a72e2 Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
2025-01-31 12:35:15 +00:00
nekomona
a7633d2106 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
5e4bb6f105 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
Uriel
e526530ef0 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
2025-01-31 12:35:15 +00:00
Uriel
449235843e Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Uriel <imurx@proton.me>
2025-01-31 12:35:15 +00:00
Mama-Gen
591e85eded Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
2025-01-31 12:35:15 +00:00
nekomona
f8673a97ed Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: Yingxue <a1175815821@163.com>
2025-01-31 12:35:15 +00:00
namakeingo
7aa4e62bbf Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
nekomona
0225d27abb Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
e14aa93748 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
namakeingo
3b0fcf7be7 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
2025-01-31 12:35:15 +00:00
Etch9
ae03c9dc2a Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
Co-authored-by: Etch9 <mario.mazzara30@gmail.com>
2025-01-31 12:35:15 +00:00
lucas lelievre
b19d38a64f Give voltage value to the battery icon (#1292) 2025-01-31 13:34:53 +01:00
lucas lelievre
92eb829041 Tooltips API for mobile and desktop (#1271) 2025-01-31 11:18:01 +01:00
Uriel
4ea57510ed Make SlimeVR icon rounded (#1286)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-01-29 15:05:00 +01:00
Butterscotch!
d389b5acec Implement skeleton constraint toggles (#1290) 2025-01-29 15:56:36 +02:00
Uriel
eb08cb5aa1 Improve close window request checks (#1285) 2025-01-29 14:52:49 +01:00
Uriel
d102cb3778 add university of maryland mirror for Eclipse formatter (#1289) 2025-01-26 19:33:52 +03:00
Collin
bfb30c472b Skeleton Constraints (#1222)
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
2025-01-26 12:36:10 -03:00
Butterscotch!
4ad9d5cfca Expand skeleton height config (#1156)
Co-authored-by: Uriel <imurx@proton.me>
2025-01-23 17:21:38 +01:00
Uriel
2c49d1dc65 Update apt cache action to fix CI error (#1287) 2025-01-23 17:06:44 +01:00
rcelyte
fcd82324a9 SolarXR IPC Socket (#1247) 2025-01-22 18:53:48 +01:00
Butterscotch!
b4df1d1444 Improve log file behaviour (#1262) 2025-01-22 19:30:28 +02:00
Erimel
181ba089c2 Attempt to fix moving average quaternions not resetting properly (#1278) 2025-01-13 23:24:22 +01:00
Yao Wei
394c1dd438 i18n: improve SlimeVR tracker flashing instruction (#1276) 2025-01-07 18:12:34 +01:00
JovannMC
2ff6e99385 Fix "trackers still on" when closing via tray (#1265)
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2025-01-06 15:16:26 +01:00
Uriel
3614612ac2 Fix CI bugs that appeared recently (#1272) 2025-01-03 01:29:21 +03:00
Butterscotch!
dfeb4e79a4 AutoBone bone contribution fix & cleanup (#1249) 2025-01-03 01:28:31 +03:00
Erimel
a606c5a375 Fix over 180 degrees rotations in HumanSkeleton (#1277) 2025-01-02 22:24:56 +01:00
Butterscotch!
4e698b693c Don't filter non-temporal trackers (#1255) 2025-01-03 00:19:10 +03:00
Uriel
208beff5e5 Merge branch 'main' into sentry-gui 2024-12-21 00:20:23 +01:00
Uriel
0eb81eec04 Disable update notifications for pnpm 2024-12-20 23:54:26 +01:00
Butterscotch!
35f5d132c8 Use jSerialComm 2.11.1-SNAPSHOT (#1269) 2024-12-20 17:06:37 +01:00
Uriel
02cc2496f0 Fix eslint error 2024-12-20 15:34:53 +01:00
loucass003
d84eaa203a Add more feedback 2024-12-20 00:48:23 +01:00
Uriel
e0d372e9bb fix translation files key naming 2024-12-20 00:00:32 +01:00
Uriel
b7a54f6aef fix bugs and stuff 2024-12-19 21:54:42 +01:00
lucas lelievre
9d65477af7 Automatic firmware update for official trackers (#1241)
Co-authored-by: ImUrX <urielfontan2002@gmail.com>
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: Eiren Rain <Eirenliel@users.noreply.github.com>
2024-12-19 20:03:43 +02:00
lucas lelievre
73cdc890f2 Firmware tool (#880)
Co-authored-by: ImUrX <urielfontan2002@gmail.com>
Co-authored-by: Uriel <imurx@proton.me>
2024-12-19 19:35:54 +02:00
Vocaloid Fan
e8afb49685 Refactor + Check for env variables (#1261) 2024-12-12 17:05:54 -03:00
Uriel
716bc7bcf6 add modal and text 2024-12-12 19:00:39 +01:00
Uriel
a05ae8c043 Merge branch 'main' into sentry-gui 2024-12-12 17:40:42 +01:00
Uriel
bc487f8655 Fix Appimage crashing for people (#1253) 2024-12-11 17:09:17 +02:00
Uriel
2708b5a15b Small improvements on packaging for Tauri (#1254) 2024-12-11 17:08:17 +02:00
Vocaloid Fan
b52e705dc4 Fix Rust logging by disabling ANSI for file output. (#1256) 2024-12-08 12:33:54 -03:00
Eiren Rain
1a5584bcfc Fix SolarXR on main 2024-12-07 12:22:22 +01:00
Erimel
8238f569c6 Flex resistance and angle support (#1242) 2024-11-27 01:11:19 +03:00
abb128
1051d0c5e5 Improve VRM model file input (#1246) 2024-11-21 21:48:17 +02:00
Collin
8fe2540f91 Potentially fix weird hip issues (#1244) 2024-11-21 21:46:53 +02:00
sctanf
6232903691 make HID Device a slime (#1235) 2024-11-21 21:46:34 +02:00
Uriel
819d2fc3b8 Fix error on labeler 2024-11-20 21:14:10 +01:00
Uriel
565a64b0e3 Make GUI check well against translation changes (#1227) 2024-11-19 22:15:48 +01:00
Erimel
18f291345d Finger tracking skeleton and VMC support (#1091) 2024-11-15 19:10:17 +02:00
Uriel
67df399f14 Fix ktor crashing because proguard minifies for Android (#1240) 2024-11-14 02:25:49 +03:00
Uriel
222359692e Support not having git for making android builds (#1237) 2024-11-13 18:08:56 -03:00
Uriel
288db165a7 Repair husky migration to v9 2024-11-11 22:55:27 +01:00
Uriel
5c5636aa24 New Pontoon translations (#1228) 2024-11-06 12:25:32 +01:00
Meow Wei
8e449763a1 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2024-11-06 12:14:41 +01:00
unlogisch
002de7bcef Pontoon: Update German (de) localization of GUI
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz>
Co-authored-by: unlogisch <unlogisch@gmx.ch>
Co-authored-by: antonyscherrer <antonyscherrer@protonmail.com>
2024-11-06 12:14:25 +01:00
Uriel
db616eaa95 dont create vrconfig.yml folder (#1229) 2024-11-06 12:12:21 +01:00
Uriel
8eaa59f0ce tested and improved the code 2024-11-06 12:07:26 +01:00
Uriel
d121973e85 delete folder if it already exists 2024-11-06 11:42:01 +01:00
Uriel
30367a9204 dont create `vrconfig.yml folder 2024-11-06 11:34:11 +01:00
Uriel
ab10629b84 New Pontoon translations (#1171) 2024-11-05 18:27:42 +01:00
infopcgood
f7d04365cd Pontoon: Update Korean (ko) localization of GUI
Co-authored-by: infopcgood <sshs_student_412@outlook.kr>
Co-authored-by: Kamilake <exjang0@gmail.com>
2024-11-05 18:17:14 +01:00
Graphite0
618914dbf1 Pontoon: Update Russian (ru) localization of GUI
Co-authored-by: Graphite0 <olegek.permjakov@gmail.com>
Co-authored-by: Flar <kani.dragonflar@gmail.com>
Co-authored-by: Sergey <serezhenka.soldatov.2020@mail.ru>
Co-authored-by: SummerArtz <summerpzmail@gmail.com>
2024-11-05 18:17:08 +01:00
LavAriz
2d107b1617 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: LavAriz <thecakegirl092@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
2024-11-05 18:17:08 +01:00
MaxEvil
4922a84ee5 Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: MaxEvil <xicovalle@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
2024-11-05 18:17:03 +01:00
Kyra
2dcb530bef Pontoon: Update German (de) localization of GUI
Co-authored-by: antonyscherrer <antonyscherrer@protonmail.com>
Co-authored-by: Kyra <sebastianzockt@gmail.com>
Co-authored-by: unlogisch <unlogisch@gmx.ch>
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz>
2024-11-05 18:16:51 +01:00
Mama-Gen
22a357c3dd Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
Co-authored-by: Mitsuaky <parmenashp@gmail.com>
2024-11-05 18:16:35 +01:00
Erimel
0de869e91a Pontoon: Update French (fr) localization of GUI
Co-authored-by: Erimel <loukalemire@gmail.com>
2024-11-05 18:16:23 +01:00
MenacingExiler
8d58e02816 Pontoon: Update Vietnamese (vi) localization of GUI
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
2024-11-05 18:16:19 +01:00
nekomona
cfcfa3a999 Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
2024-11-05 18:16:14 +01:00
JaydenHa
55a1f7a4ce Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: JaydenHa <jayden@jaydenha.uk>
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2024-11-05 18:16:05 +01:00
Tailsy
28182eb776 Pontoon: Update Polish (pl) localization of GUI
Co-authored-by: ReDoX <redox01@o2.pl>
Co-authored-by: michael091 <michael_m1@o2.pl>
Co-authored-by: stronzo <adam_skur@wp.pl>
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
Co-authored-by: Tailsy <tailsy13@gmail.com>
2024-11-05 18:15:58 +01:00
Uriel
fa096d627e Make label of tracker name use the translation function (#1224) 2024-11-03 16:23:39 -03:00
Uriel
662ac1fc84 Check if buffer is the size of a u16 at least before getting it (#1226) 2024-11-03 16:15:15 -03:00
Uriel
e676a15609 Improve logic of magnetometer toggle (#1225) 2024-10-31 22:56:26 +03:00
Uriel
7a0292756d Add check for magnetometer not being supported on SensorConfig 2024-10-31 19:25:24 +01:00
Uriel
d753926967 Fix magnetometer status bug and fix locale string plural rules (#1223) 2024-10-30 23:07:59 -03:00
Uriel
76b2803ce8 Update nix flake (#1221) 2024-10-30 21:57:06 +02:00
Uriel
d26420a3e0 Fix labeler having wrong regex for GUI label 2024-10-30 20:55:06 +01:00
Uriel
6b6e0c6e22 Fix missing translation key on tracker settings for Tracker name (#1215) 2024-10-30 21:03:00 +02:00
Uriel
45c49e60be Implement magnetometer toggle for firmware (#1114) 2024-10-30 21:02:30 +02:00
Uriel
9733cf0430 Fix finishing setup wizard not make it be skipped next time (#1212) 2024-10-30 20:33:18 +02:00
Uriel
c57a758ed3 Don't upload desktop.jar on CI (#1211) 2024-10-30 20:19:02 +02:00
Erimel
acbf99dc4a Fix Drift compensation prediction description (#1216) 2024-10-30 20:18:30 +02:00
sctanf
11576c1e66 Hid update protocol (#1200) 2024-10-30 20:17:32 +02:00
Uriel
a998797435 Auto label pull requests (#1217) 2024-10-30 19:53:55 +02:00
Butterscotch!
eb9d9145f1 Clarify AutoBone error after #1185 (#1214)
Co-authored-by: Erimel <marioluigivideo@gmail.com>
2024-10-28 18:56:50 -03:00
Butterscotch!
3bbf5cb3e3 Fix style for tracker "shadow" & add to all cases (#1204) 2024-10-25 21:47:06 -03:00
Uriel
26ec95b2a7 Fix tauri not autosaving store on close anymore (#1209) 2024-10-25 21:33:24 -03:00
Uriel
7cb500abef Fix typo on OBTAINING_MAC_ADDRESS (#1206) 2024-10-25 19:41:31 +02:00
Erimel
16779364c9 Fix vmc head shift for lock head (#1208) 2024-10-25 18:06:13 +02:00
Butterscotch!
e058c69192 Add asexual theme (#1207) 2024-10-22 21:37:16 -03:00
Uriel
99a4141a7d Fix spacing issues on advanced settings (#1198) 2024-10-16 13:52:06 -03:00
sctanf
5d65b807ef catch unable to find hid library (#1199) 2024-10-15 22:52:57 -03:00
Butterscotch!
9cacf993ad Remove check for port 35903 (#1195) 2024-10-15 22:39:49 -03:00
Uriel
8f9e83c231 add runtime check for appindicator on linux (#1193) 2024-10-14 18:22:08 +02:00
Uriel
a0b1abed43 Update to Tauri v2 stable (#1194) 2024-10-14 13:18:43 +02:00
Uriel
066760bf79 Update all gradle dependencies we have (#1173) 2024-10-10 14:58:13 +02:00
JovannMC
a2d842d8cc Add settings reset & advanced section (#1154)
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Butterscotch! <5095026+ButterscotchV@users.noreply.github.com>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 18:09:06 +02:00
Butterscotch!
ca13ca5fb4 Restrict mounting reset on server by tracker reset status (#1169)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 17:25:53 +02:00
Butterscotch!
33a213f10f Handle missing local IP (#1174)
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 16:53:57 +02:00
Butterscotch!
1a6560a9cf Block AutoBone with high error values (#1185)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 16:28:42 +02:00
Uriel
449c6f80dc add a way to skip rest calibration tutorial (#1186)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 16:19:06 +02:00
nekomona
1a88eba476 Add extrapolated prediction to drift compensation (#1184)
Co-authored-by: loucass003 <loucass003@gmail.com>
2024-10-09 16:07:36 +02:00
JovannMC
8d55440dbd Add warning to proportions reset (#1179)
Co-authored-by: Uriel <imurx@proton.me>
Co-authored-by: Butterscotch! <5095026+ButterscotchV@users.noreply.github.com>
2024-10-09 10:51:29 -03:00
Uriel
8da5d84e0a Add OS decorations toggle (#1180)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 14:05:15 +02:00
JovannMC
027e6549b6 Add acceleration & position to tracker page (#1191)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-09 13:29:20 +02:00
Uriel
95c8c08f86 enforce lf with editorconfig (#1192)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-08 19:15:57 +02:00
JovannMC
ba3a2ce125 Hide navbar onboarding (#1152) 2024-10-08 19:15:21 +02:00
JovannMC
ed34001962 Add drift compensation warning (#1160) 2024-10-08 19:05:52 +02:00
Polymoria
1dae302b27 Tracker status box shadow color fix (#1170)
Co-authored-by: Uriel <imurx@proton.me>
2024-10-08 18:41:22 +02:00
sctanf
505a9fc5d5 Sleep HID dataRead with devices present (#1183)
Co-authored-by: lucas lelievre <loucass003@gmail.com>
2024-10-04 16:29:46 +03:00
Uriel
c58209a140 use 128MB of memory for server (#1178) 2024-09-30 20:34:05 +02:00
lucas lelievre
15264526ce Move top level await to tauri.ts (#1181)
Co-authored-by: Uriel <imurx@proton.me>
2024-09-25 20:05:56 +02:00
Uriel
136434e5c7 Config check if config path exists and create it if not (#1176) 2024-09-25 18:12:46 +02:00
Uriel
27244ff974 Update appstream data (#1177) 2024-09-23 20:14:55 +02:00
DevMiner
aadf38d2a9 fix(gui): tab title (#1175) 2024-09-23 16:05:42 +02:00
Uriel
439f60b89e New Pontoon translations (#1076) 2024-09-20 16:43:07 +02:00
Meow Wei
21f4468c00 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: JaydenHa <jayden@jaydenha.uk>
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2024-09-20 16:33:41 +02:00
VocalFan
00f46f01b1 Pontoon: Update Japanese (ja) localization of GUI
Co-authored-by: beq <beqbdean@gmail.com>
Co-authored-by: VocalFan <auronhines@gmail.com>
2024-09-20 16:33:41 +02:00
Iris
af8e6fc3f3 Pontoon: Update Finnish (fi) localization of GUI
Co-authored-by: Iris <vakotoneva@gmail.com>
2024-09-20 16:33:41 +02:00
VocalFan
28d4199f12 Pontoon: Update Czech (cs) localization of GUI
Co-authored-by: VocalFan <auronhines@gmail.com>
2024-09-20 16:33:41 +02:00
Flar
0c309da528 Pontoon: Update Russian (ru) localization of GUI
Co-authored-by: viberbread <panfilov.iva2015@yandex.ru>
Co-authored-by: VocalFan <auronhines@gmail.com>
Co-authored-by: SummerArtz <summerpzmail@gmail.com>
Co-authored-by: Flar <kani.dragonflar@gmail.com>
2024-09-20 16:33:41 +02:00
Renka
3c765dbd8a Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: adriangoldenhero <adriangoldenhero@gmail.com>
Co-authored-by: Renka <lunastarletvr@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
2024-09-20 16:33:41 +02:00
Uriel
eb9928ad08 Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: Renka <lunastarletvr@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
Co-authored-by: Alejandro <moctezumaalejandro25@gmail.com>
2024-09-20 16:33:41 +02:00
Mama-Gen
90dcf986f8 Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
2024-09-20 16:33:41 +02:00
SebastianZ
eb602df452 Pontoon: Update German (de) localization of GUI
Co-authored-by: SebastianZ <sebastianzockt@gmail.com>
Co-authored-by: Piranja <info@hollihn.ch>
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz>
Co-authored-by: unlogisch <unlogisch@gmx.ch>
2024-09-20 16:33:41 +02:00
michael091
e157fe7ed5 Pontoon: Update Polish (pl) localization of GUI
Co-authored-by: ReDoX <redox01@o2.pl>
Co-authored-by: michael091 <michael_m1@o2.pl>
Co-authored-by: stronzo <adam_skur@wp.pl>
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
Co-authored-by: Tailsy <tailsy13@gmail.com>
2024-09-20 16:33:41 +02:00
Vyolex
e3e48d3b0f Pontoon: Update Dutch (nl) localization of GUI
Co-authored-by: timovandegriend <timovandegriend@gmail.com>
Co-authored-by: SaabAerospace <SaabAerospace@hotmail.com>
Co-authored-by: Rat. <staf.dierickx@gmail.com>
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com>
2024-09-20 16:33:41 +02:00
infopcgood
018056b728 Pontoon: Update Korean (ko) localization of GUI
Co-authored-by: infopcgood <sshs_student_412@outlook.kr>
Co-authored-by: Kamilake <exjang0@gmail.com>
2024-09-20 16:33:41 +02:00
MenacingExiler
d1b21f2f17 Pontoon: Update Vietnamese (vi) localization of GUI
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
2024-09-20 16:33:41 +02:00
beq
8eeaa62760 Pontoon: Update Engwish (en-x-owo) localization of GUI
Co-authored-by: Butterscotch! <bscotchvanilla@gmail.com>
Co-authored-by: beq <beqbdean@gmail.com>
Co-authored-by: infopcgood <sshs_student_412@outlook.kr>
Co-authored-by: Mini <alexanderawatson64@gmail.com>
2024-09-20 16:33:41 +02:00
namakeingo
564e99c52c Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
Co-authored-by: Etch9 <mario.mazzara30@gmail.com>
2024-09-20 16:33:41 +02:00
VocalFan
b483699cf0 Pontoon: Update French (fr) localization of GUI
Co-authored-by: VocalFan <auronhines@gmail.com>
Co-authored-by: Erimel <loukalemire@gmail.com>
2024-09-20 16:33:34 +02:00
Uriel
7cea1c7b47 remove fastutil as it has weird behavior and its not used 2024-09-13 23:20:29 +02:00
Uriel
7c96ee89c1 Fix audio/video issues not playing on Linux (#1151) 2024-09-13 11:19:50 -03:00
Butterscotch!
1c867efe16 Fix tracker reset logic (#1150) 2024-09-13 02:41:56 +02:00
Uriel
9371938a00 improve text and config of sentry 2024-09-07 13:46:01 +02:00
Uriel
eeac1586f5 Merge branch 'main' into sentry-gui 2024-09-07 13:41:33 +02:00
Uriel
2c146169ac Add scripts for checking licenses (#1099) 2024-08-28 16:51:11 +02:00
John Marshall
5c0d3e9932 Fix SlimeVR server from not working reliably on Quest standalone (#1141) 2024-08-28 15:19:15 +02:00
Uriel
384a0c2252 smol improvements 2024-08-23 17:17:26 +02:00
Uriel
ec9845364d continue integration 2024-08-23 00:32:22 +02:00
Uriel
93944aad55 start implementing sentry 2024-08-22 17:12:28 +02:00
Uriel
456485071b Convert to WebP in mounting reset once again (#1146) 2024-08-21 19:32:32 -03:00
Uriel
e2d268df2d Update mounting reset image to a newer one (#1145) 2024-08-20 16:19:58 +02:00
dependabot[bot]
2beb449171 Bump gradle/actions from 3 to 4 (#1143)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-20 15:52:58 +02:00
dependabot[bot]
49865f8e2e Bump pnpm/action-setup from 3 to 4 (#1144)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-20 15:45:00 +02:00
Butterscotch!
25f7d8fe95 Add dependabot for GitHub Actions (#1137) 2024-08-20 09:17:16 -03:00
Uriel
62563ab1c2 remove discord log that includes user information (#1139) 2024-08-20 09:11:57 -03:00
Ondrej Hruska
9bec98f8f5 Add small top padding to show highlighting on tracker assignment page (#1138) 2024-08-20 13:29:19 +02:00
Ondrej Hruska
60f8db7079 show current direction on manual mounting (#1108)
Co-authored-by: Uriel <imurx@proton.me>
2024-08-14 00:20:49 +02:00
Uriel
b06f038777 Change automatic mounting pose image to new one (#1135) 2024-08-13 15:43:43 +02:00
Butterscotch!
1fba4e67ab Fix Android build & OSC support (#1133) 2024-08-12 22:44:06 -03:00
Erimel
1950a419a8 Reset upper chest tracker (#1134) 2024-08-12 22:31:58 -03:00
Uriel
9238c7211b Fix many GUI bugs found (#1129) 2024-08-07 19:03:18 -03:00
Butterscotch!
518fe8d2ef Fix skeleton issues (#1132) 2024-08-07 17:41:01 -03:00
Butterscotch!
8b97c0eb27 Change Android webserver port to 34536 (#1131) 2024-08-07 20:14:34 +02:00
Uriel
9bf7f1fa5c Fix git version script trimming wrong command (#1128) 2024-08-01 18:55:27 -03:00
Butterscotch!
4abd171efc Use default security attributes for named pipes (#1116) 2024-08-01 23:35:08 +02:00
Erimel
af4f9a96bf Computed head reset (#1057) 2024-08-01 00:05:34 -03:00
Erimel
58ca3fe8c1 OSCQuery support (#958)
Co-authored-by: Uriel <imurx@proton.me>
2024-07-31 18:01:38 +02:00
gale
0859abf08d Update flake nixpkgs revision (#1121) 2024-07-24 22:13:33 -03:00
Uriel
b32e1cad50 Add a way to save serial logs as a file (#1029) 2024-07-24 22:00:55 -03:00
Butterscotch!
c2566afa5e Update jSerialComm library (#1117) 2024-07-23 20:32:53 -03:00
VocalFan
7a9a23c3d4 Improvement on firewall batch scripts (#1030) 2024-07-23 20:27:16 -03:00
Uriel
76b29c4af6 Update to latest tauri again (#1097) 2024-07-19 20:38:51 -03:00
ShineBrightMeow
0be9b34320 Updated IMU Constants (#1100) 2024-07-12 17:38:04 +02:00
Ondrej Hruska
0b01a4d67a Issue#1079 - Add a background to the 3d preview skeleton (#1107) 2024-07-11 21:37:24 -03:00
Ondrej Hruska
c316313d2a Issue#1082 - The Exit Modals does not go on top of other (#1105) 2024-07-11 21:30:20 +03:00
Uriel
d8695d3e88 Add missing head tracker status (#962) 2024-07-11 17:50:18 +02:00
Ondrej Hruska
6e942780de Issue#1092 - White theme has correct manual mounting colors (#1103) 2024-07-11 05:02:05 +02:00
Erimel
0d9f9289fb Don't use neck length if head tracker doesn't have position (#1019) 2024-07-03 16:46:27 +02:00
Erimel
a6d0517a5b Fix VMC foot offset (#1020) 2024-07-03 16:37:07 +02:00
AxisAngles
708135ff4c Fix Quaternion biAlign (#1094) 2024-07-03 16:23:40 +02:00
JovannMC
1f434e1c88 Sync server constants with firmware (#1093) 2024-07-02 16:09:20 +02:00
lucas lelievre
7ab8435595 assignments enhancements (#1083)
Co-authored-by: Ondrej Hruska <11602729+ZycaR@users.noreply.github.com>
2024-06-26 16:39:46 +02:00
lucas lelievre
94aec1f4ba Remove useLayout (#1080) 2024-06-25 12:10:34 +02:00
Ondrej Hruska
6a268fbbad Issue#1066 - Show the current selected direction on the tracker mounting radial menu (#1077) 2024-06-18 11:15:01 -07:00
Ondrej Hruska
5ade5eb626 Issue#1074 - Icon of the body part in correct color (#1075) 2024-06-18 00:06:11 +02:00
Uriel
63384f40b5 Update to latest Tauri v2 (#1023) 2024-06-17 18:18:51 +02:00
Ondrej Hruska
d9da5544bb GUI - Tracker assignment options (#1009)
Co-authored-by: Erimel <marioluigivideo@gmail.com>
Co-authored-by: loucass003 <loucass003@gmail.com>
2024-06-17 08:45:06 -07:00
rcelyte
cfd9223390 Fix WebSocketVRBridge HMD (#1072) 2024-06-17 08:18:59 -07:00
Uriel
a135ca3459 Add Futura back to codeowners 2024-06-17 13:22:29 +02:00
Uriel
9bcccc6c36 Delete old resources from java (#984) 2024-06-17 13:02:48 +02:00
Uriel
00ef667c58 Add Discord Rich Presence support (#1027)
Co-authored-by: Erimel <marioluigivideo@gmail.com>
2024-06-14 18:32:00 +02:00
Uriel
fbb0b8a460 Override tauri config version with git tag (#994) 2024-06-14 17:55:09 +02:00
Zhenfu Shi
6626cabeaa macOS app naming improvements (#991) 2024-06-14 17:50:25 +02:00
nekomona
d23c92dec2 De-duplicate repeated HID packets (#1036) 2024-06-14 17:36:38 +02:00
Uriel
1356e7fbe6 Create tarball of GUI bundle on release (#1004) 2024-06-14 17:31:28 +02:00
Uriel
ec2909406b fix waitUntil failing with arrays and objects (#1028) 2024-06-14 17:21:16 +02:00
Uriel
37de960c1b Update how Linux bundling is done (#983) 2024-06-14 17:03:09 +02:00
Uriel
638d4e3fb1 Update metainfo to latest (#1024) 2024-06-14 15:40:39 +02:00
Uriel
a6f377992d Don't check for waist or hip on hasChest (#1031) 2024-06-14 14:51:27 +02:00
Uriel
27386d5b29 Use `Exit event instead of ExitRequested` (#1062) 2024-06-13 18:50:49 +02:00
Uriel
d67acf6c28 keep up with quality guidelines in Flathub (#1063) 2024-06-13 18:22:32 +02:00
Erimel
4471aaaa49 Add VMC toggle to mirror tracking (#1065) 2024-06-13 18:12:19 +02:00
Erimel
a3faad4a72 Update serial console description (#1064) 2024-06-13 17:13:55 +02:00
Uriel
4e4edc24da Add padding to tracker list on onboarding (#1058) 2024-06-13 16:20:36 +02:00
Collin
e64edb76dd Fix mocap mode breaking on startup (#1046) 2024-06-07 01:25:57 +03:00
Erimel
721a74aacc Fix VMC floating (#1039) 2024-06-06 01:25:01 +03:00
Erimel
775f5e9f30 Fix update button not redirecting to the installer directly on Windows (#1037) 2024-06-06 01:22:35 +03:00
VocalFan
6ca2eb6905 Begone Slimevr-ui.exe (#1018) 2024-06-06 01:21:47 +03:00
sctanf
9808ea8709 Use assigned vid/pid for HID tracker (#1044) 2024-05-31 12:31:10 -03:00
Uriel
e2a511b552 fix erimel breaking codeowners (#1032) 2024-05-14 18:17:43 +03:00
Uriel
2d55672f0a fix macOS bundling action (#1015) 2024-04-30 00:28:25 +03:00
Ondrej Hruska
74ee8211a3 GUI - Fix condition for promise detection in a11y (#1016) 2024-04-29 18:21:29 -03:00
Erimel
18fcb80d4c don't toggle trackers if tracking is paused (#1013) 2024-04-29 13:56:24 -03:00
Ilia Ki
046be5f5e7 Fix the HID decoding, replace Q14 with Q15, optimize (#1000) 2024-04-29 10:13:59 -03:00
sctanf
91a31b399d Change usb enumeration to only specific Vid/Pid (#1012) 2024-04-28 20:50:00 -03:00
Ilia Ki
6d014912c4 Add more compact bundle protocol (#999) 2024-04-28 12:33:10 -03:00
Ilia Ki
8c0c3d1053 UDPPacket23RotationAndAcceleration: Switch x and y around to adjust for different axes (#1007) 2024-04-27 11:46:17 -03:00
Uriel
24f2895238 New Pontoon translations (#914) 2024-04-23 23:56:55 -03:00
timovandegriend
c901d80915 Pontoon: Update Dutch (nl) localization of GUI
Co-authored-by: timovandegriend <timovandegriend@gmail.com>
Co-authored-by: Vyolex <25586367+Vyolex@users.noreply.github.com>
2024-04-23 22:48:23 -03:00
nekomona
8b52d0f135 Pontoon: Update Simplified Chinese (zh-Hans) localization of GUI
Co-authored-by: nekomona <nekomona@163.com>
2024-04-23 22:48:23 -03:00
Meow Wei
3d88dcd974 Pontoon: Update Traditional Chinese (zh-Hant) localization of GUI
Co-authored-by: Meow Wei <medicalwei@gmail.com>
2024-04-23 22:48:23 -03:00
Kaiera huzu
9041b4c35e Pontoon: Update Thai (th) localization of GUI
Co-authored-by: Uriel <urielfontan2002@gmail.com>
Co-authored-by: Kaiera huzu <patsakorn9090@gmail.com>
2024-04-23 22:48:23 -03:00
Clay
804ca64d29 Pontoon: Update Russian (ru) localization of GUI
Co-authored-by: Clay <code.clayt@gmail.com>
Co-authored-by: kanava <creedfqr@gmail.com>
Co-authored-by: SummerArtz <summerpzmail@gmail.com>
Co-authored-by: Hornil <vixlyaev@gmail.com>
2024-04-23 22:48:23 -03:00
Tailsy
530315ff06 Pontoon: Update Polish (pl) localization of GUI
Co-authored-by: ReDoX <redox01@o2.pl>
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
Co-authored-by: PlFarmer <pufat.pasztecik@gmail.com>
Co-authored-by: Tailsy <przemyslaw.romaniak@intel.com>
2024-04-23 22:48:23 -03:00
MaxEvil
86b3aec926 Pontoon: Update Latinamerican Spanish (es-419) localization of GUI
Co-authored-by: MaxEvil <xicovalle@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
2024-04-23 22:48:23 -03:00
Pesky12
7f920c1db3 Pontoon: Update Czech (cs) localization of GUI
Co-authored-by: Uriel <urielfontan2002@gmail.com>
Co-authored-by: Pesky12 <avianearts@gmail.com>
2024-04-23 22:48:23 -03:00
Erimel
369a3496ec Pontoon: Update French (fr) localization of GUI
Co-authored-by: Erimel <loukalemire@gmail.com>
2024-04-23 22:48:23 -03:00
白貓
55af27e59e Pontoon: Update Japanese (ja) localization of GUI
Co-authored-by: 白貓 <yen.max@gmail.com>
Co-authored-by: coin_battery <coin_battery@ichigo-tosuta.sakura.ne.jp>
2024-04-23 22:48:23 -03:00
Mama-Gen
eade92acee Pontoon: Update Brazilian Portuguese (pt-BR) localization of GUI
Co-authored-by: Mama-Gen <tiodapamonha145@gmail.com>
Co-authored-by: Gaabbu <gabrielsonada@outlook.com.br>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
2024-04-23 22:48:23 -03:00
Iris
923e203f1c Pontoon: Update Finnish (fi) localization of GUI
Co-authored-by: siofrain <maradaichides@gmail.com>
Co-authored-by: Iris <vakotoneva@gmail.com>
2024-04-23 22:48:23 -03:00
Kamilake
f252e602bc Pontoon: Update Korean (ko) localization of GUI
Co-authored-by: Kamilake <exjang0@gmail.com>
Co-authored-by: infopcgood <sshs_student_412@outlook.kr>
2024-04-23 22:48:23 -03:00
namakeingo
abeedf2a87 Pontoon: Update Italian (it) localization of GUI
Co-authored-by: namakeingo <namakeingo@gmail.com>
Co-authored-by: Etch9 <mario.mazzara30@gmail.com>
2024-04-23 22:48:23 -03:00
Louie365
dec1091587 Pontoon: Update Spain Spanish (es-ES) localization of GUI
Co-authored-by: Louie365 <alexibiza123@gmail.com>
Co-authored-by: Uriel <urielfontan2002@gmail.com>
Co-authored-by: Luna <lunastarletvr@gmail.com>
Co-authored-by: Danielle <controltab3@gmail.com>
Co-authored-by: Iván <ivanbogdasaebersold@live.com.ar>
2024-04-23 22:48:23 -03:00
MenacingExiler
9ca6d54d25 Pontoon: Update Vietnamese (vi) localization of GUI
Co-authored-by: MenacingExiler <menacingexiler@gmail.com>
2024-04-23 22:48:23 -03:00
FennT
eb362c135b Pontoon: Update Arabic (ar) localization of GUI
Co-authored-by: Modrnaklob <hamzah.jubran@hotmail.com>
Co-authored-by: FennT <0094falcon@gmail.com>
2024-04-23 22:48:23 -03:00
unlogisch
a75aa8cd78 Pontoon: Update German (de) localization of GUI
Co-authored-by: Zahnatom <zahnatomletsplay@gmail.com>
Co-authored-by: Piranja <info@hollihn.ch>
Co-authored-by: unlogisch <unlogisch@gmx.ch>
Co-authored-by: TheDevMinerTV <devminer@devminer.xyz>
2024-04-23 22:48:13 -03:00
Uriel
6896f9f3e2 Update Github action versions to non-deprecated ones (#1005) 2024-04-22 22:18:33 +03:00
Uriel
827e2ceef8 update hid4java to 0.8 (#992)
Co-authored-by: sctanf <36978460+sctanf@users.noreply.github.com>
2024-04-21 19:31:28 -03:00
Ilia Ki
ae4391bff1 Add compact IMU frame (rot+acc) (#1001) 2024-04-21 20:22:38 +03:00
Uriel
be76cd1b6f Check if saved window size is at least the minimum allowed (#993) 2024-04-21 18:59:32 +03:00
abb128
884424c7b4 Fix missing space in BVH (#996) 2024-04-21 12:49:39 -03:00
Ilia Ki
e0d3224393 Support Datagrams up to 1472 bytes (#998) 2024-04-21 17:05:40 +03:00
Ilia Ki
d992cd3f63 Prepare Firmware Constants for Gestures Release 2024-04-21 13:11:05 +07:00
744 changed files with 66819 additions and 30957 deletions

1
.envrc
View File

@@ -2,7 +2,6 @@ if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs="
fi
nix_direnv_watch_file rust-toolchain.toml
nix_direnv_watch_file package.json
if ! use flake . --impure
then

5
.gitattributes vendored Normal file
View File

@@ -0,0 +1,5 @@
* text=auto
*.png binary
*.webp binary
*.gif binary

75
.github/CODEOWNERS vendored
View File

@@ -1,38 +1,37 @@
# Global code owner
* @Eirenliel
# Make everyone be able to approve SolarXR submodule changes
/solarxr-protocol @ButterscotchV @Louka3000 @ImUrX
# Make Loucas and Uriel the owners of all GUI stuff
/gui/ @ImUrX
/pnpm-lock.yaml @ImUrX
/pnpm-workspace.yaml @ImUrX
# Uriel and Erimel responsible for i18n
/gui/public/i18n/ @ImUrX @Louka3000
/gui/src/i18n/ @ImUrX @Louka3000
/l10n.toml @ImUrX @Louka3000
/gui/src/components/settings/ @Louka3000 @ImUrX
# Rust part of the GUI
/gui/src-tauri/ @ImUrX
/Cargo.lock @ImUrX
# Some server code~
/server/ @ButterscotchV @Eirenliel @Louka3000
/server/src/main/java/dev/slimevr/autobone/ @ButterscotchV
/server/src/main/java/dev/slimevr/poserecorder/ @ButterscotchV
/server/src/main/java/dev/slimevr/posestreamer/ @ButterscotchV
/server/src/main/java/dev/slimevr/osc/ @Louka3000
/server/src/main/java/dev/slimevr/tracking/processor/ @Louka3000
/server/src/main/java/dev/slimevr/filtering/ @Louka3000
# Linux files
*.nix @ImUrX
/flake.lock @ImUrX
/dev.slimevr.SlimeVR.metainfo.xml @ImUrX
/.envrc @ImUrX
# Global code owner
* @Eirenliel
# Make everyone be able to approve SolarXR submodule changes
/solarxr-protocol @ButterscotchV @Erimelowo @loucass003
# Make Loucass the owner of all GUI stuff
/gui/ @loucass003
/pnpm-lock.yaml @loucass003
/pnpm-workspace.yaml @loucass003
# loucass003 and Erimel responsible for i18n
/gui/public/i18n/ @loucass003 @Erimelowo @ImSapphire
/gui/src/i18n/ @loucass003 @Erimelowo
/l10n.toml @loucass003 @Erimelowo
/gui/src/components/settings/ @Erimelowo @loucass003
# Rust part of the GUI
/gui/electron/ @loucass003
# Some server code~
/server/ @ButterscotchV @Eirenliel @Erimelowo
/server/src/main/java/dev/slimevr/autobone/ @ButterscotchV
/server/src/main/java/dev/slimevr/poserecorder/ @ButterscotchV
/server/src/main/java/dev/slimevr/posestreamer/ @ButterscotchV
/server/src/main/java/dev/slimevr/osc/ @Erimelowo
/server/src/main/java/dev/slimevr/tracking/processor/ @Erimelowo
/server/src/main/java/dev/slimevr/filtering/ @Erimelowo
# Linux files
*.nix @loucass003
/flake.lock @loucass003
/dev.slimevr.SlimeVR.metainfo.xml @loucass003
/.envrc @loucass003

8
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,8 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
# Check for updates to GitHub Actions every week
interval: "weekly"

37
.github/labeler.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
"Area: Continuous Integration":
- changed-files:
- any-glob-to-any-file: ".github/**"
"Area: Application Protocol":
- changed-files:
- any-glob-to-any-file: ["solarxr-protocol"]
"Area: AutoBone":
- changed-files:
- any-glob-to-any-file: "server/core/src/main/java/dev/slimevr/autobone/**"
"Area: Documentation":
- changed-files:
- any-glob-to-any-file: "**/*.md"
"Area: GUI":
- all:
- changed-files:
- all-globs-to-any-file: ["gui/**/*", "!gui/public/i18n/**/*"]
"Area: Hardware Protocol":
- changed-files:
- any-glob-to-any-file: "server/core/src/main/java/dev/slimevr/tracking/trackers/udp/**"
"Area: Server":
- changed-files:
- any-glob-to-any-file: ["server/**", "*gradle*", "gradle/**"]
"Area: Skeletal Model":
- changed-files:
- any-glob-to-any-file: "server/core/src/main/java/dev/slimevr/tracking/processor/**"
"Area: SteamVR Driver":
- changed-files:
- any-glob-to-any-file: "server/desktop/src/main/java/dev/slimevr/desktop/platform/**"
"Area: Translation":
- changed-files:
- any-glob-to-any-file: "gui/public/i18n/**"
"Area: VMC":
- changed-files:
- any-glob-to-any-file: ["server/core/src/main/java/dev/slimevr/osc/Unity*", "server/core/src/main/java/dev/slimevr/osc/VMC*", "server/core/src/main/java/dev/slimevr/osc/VRM*"]
"Area: VRCOSC":
- changed-files:
- any-glob-to-any-file: ["server/core/src/main/java/dev/slimevr/osc/VRC*"]

View File

@@ -1,117 +0,0 @@
name: Build GUI
on:
push:
branches:
- main
paths:
- .github/workflows/build-gui.yml
- gui/**
- package*.json
pull_request:
paths:
- .github/workflows/build-gui.yml
- gui/**
- package*.json
workflow_dispatch:
create:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Build
run: |
pnpm i
cd gui
pnpm run lint
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
env:
# Don't mark warnings as errors
CI: false
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- if: matrix.os == 'ubuntu-22.04'
name: Set up Linux dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: libgtk-3-dev webkit2gtk-4.1 libappindicator3-dev librsvg2-dev patchelf
# Increment to invalidate the cache
version: 1.0
# Enables a workaround to attempt to run pre and post install scripts
execute_install_scripts: true
# Disables uploading logs as a build artifact
debug: false
- name: Cache cargo dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: "${{ matrix.os }}"
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
# Tauri has a broken cache issue in windows, let's clean it for now
- name: Clean cache in Windows (Fixes tauri-apps/tauri#9045)
if: matrix.os == 'windows-latest'
run: cargo clean
- name: Build
run: |
pnpm i
pnpm run skipbundler
- if: matrix.os == 'windows-latest'
name: Upload a Build Artifact (Windows)
uses: actions/upload-artifact@v3
with:
# Artifact name
name: SlimeVR-GUI-Windows
# A file, directory or wildcard pattern that describes what to upload
path: target/release/slimevr.exe
- if: matrix.os == 'ubuntu-22.04'
name: Upload a Build Artifact (Linux)
uses: actions/upload-artifact@v3
with:
# Artifact name
name: SlimeVR-GUI-Linux
# A file, directory or wildcard pattern that describes what to upload
path: target/release/slimevr
- if: matrix.os == 'macos-latest'
name: Upload a Build Artifact (macOS)
uses: actions/upload-artifact@v3
with:
# Artifact name
name: SlimeVR-GUI-macOS
# A file, directory or wildcard pattern that describes what to upload
path: target/release/slimevr

291
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,291 @@
name: SlimeVR Full Build
on:
push:
branches: [main]
tags: ["v*"]
pull_request:
workflow_dispatch:
jobs:
setup-matrix:
name: Configure Build Matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- id: set-matrix
shell: bash
run: |
BASE='[{"os":"ubuntu-22.04","platform":"linux"},{"os":"windows-latest","platform":"windows"},{"os":"macos-latest","platform":"macos"}]'
EXTRA='[{"os":"ubuntu-22.04-arm","platform":"linux"},{"os":"windows-11-arm","platform":"windows"}]'
if [[ "${{ github.ref }}" == refs/tags/v* || "${{ github.ref }}" == refs/heads/main || "${{ github.event_name }}" == "workflow_dispatch" ]]; then
RESULT=$(echo "$BASE $EXTRA" | jq -c -s 'add')
else
RESULT=$(echo "$BASE" | jq -c '.')
fi
echo "matrix={\"include\":$RESULT}" >> "$GITHUB_OUTPUT"
gui-checks:
name: Gui Checks
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Setup PNPM
uses: pnpm/action-setup@v4
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: GUI Lint
run: pnpm i && cd gui && pnpm run lint
java-checks:
name: Java Checks
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Java Spotless Check
run: ./gradlew spotlessCheck --build-cache
build-server-jar:
name: Build Desktop Server
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Build ShadowJar
run: ./gradlew :server:desktop:shadowJar --build-cache
- name: Test with Gradle
run: ./gradlew :server:desktop:test
- name: Upload Server Jar
uses: actions/upload-artifact@v6
with:
name: server-jar
path: |
server/desktop/build/libs/slimevr.jar
server/core/resources
build-gui-frontend:
name: Build GUI Assets
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Setup PNPM
uses: pnpm/action-setup@v4
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Build JS
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
run: pnpm i && cd gui && pnpm run build
- name: Tar GUI Dist
run: tar -czf slimevr-gui-dist.tar.gz -C gui/out .
- name: Upload GUI Dist
uses: actions/upload-artifact@v6
with:
name: gui-dist
path: slimevr-gui-dist.tar.gz
package-desktop:
name: Package Desktop (${{ matrix.platform }} - ${{ matrix.os }})
needs: [setup-matrix, build-server-jar, build-gui-frontend]
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup-matrix.outputs.matrix) }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Setup PNPM
uses: pnpm/action-setup@v4
- name: Setup Node
uses: actions/setup-node@v6
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Download Server Jar
uses: actions/download-artifact@v6
with:
name: server-jar
path: server
- name: Download GUI Dist
uses: actions/download-artifact@v6
with:
name: gui-dist
- name: Extract GUI for Electron
shell: bash
run: mkdir -p gui/out && tar -xzf slimevr-gui-dist.tar.gz -C gui/out
- name: Run Electron Builder
shell: bash
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
run: |
mkdir -p gui/dist/artifacts/linux/ \
gui/dist/artifacts/win \
gui/dist/artifacts/mac
cd gui
pnpm i
pnpm exec electron-builder --${{ matrix.platform }} \
${{ matrix.platform == 'macos' && '--universal' || '' }} \
--publish never
- name: Collect and Rename Artifacts
shell: bash
run: |
SRC_DIR="${{ github.workspace }}/gui/dist/artifacts"
DEST_DIR="${{ github.workspace }}/release-out"
mkdir -p "$DEST_DIR"
if [ "${{ matrix.platform }}" == "windows" ]; then
[[ "${{ matrix.os }}" == *"arm"* ]] && SUFFIX="win-aarch64" || SUFFIX="win64"
cp "$SRC_DIR"/win/*.zip "$DEST_DIR/SlimeVR-$SUFFIX.zip"
elif [ "${{ matrix.platform }}" == "linux" ]; then
for f in "$SRC_DIR"/linux/*; do
[ -d "$f" ] && continue
BASE=$(basename "$f")
NEW_NAME=$(echo "$BASE" | sed -e 's/x86_64/amd64/g' -e 's/arm64/aarch64/g')
cp "$f" "$DEST_DIR/$NEW_NAME"
done
elif [ "${{ matrix.platform }}" == "macos" ]; then
cp "$SRC_DIR"/mac/*.dmg "$DEST_DIR/SlimeVR-mac.dmg"
fi
echo "Collected files:"
ls -lh "$DEST_DIR"
- name: Upload For Release
uses: actions/upload-artifact@v6
with:
name: release-${{ matrix.platform }}-${{ matrix.os }}
path: release-out/*
bundle-android:
name: Build Android APK
needs: [build-gui-frontend]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'adopt'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Download GUI Dist
uses: actions/download-artifact@v6
with:
name: gui-dist
- name: Extract GUI for Android
run: mkdir -p gui/out && tar -xzf slimevr-gui-dist.tar.gz -C gui/out
- name: Build APK
run: ./gradlew :server:android:build --build-cache
env:
ANDROID_STORE_FILE: ${{ secrets.ANDROID_STORE_FILE }}
ANDROID_STORE_PASSWD: ${{ secrets.ANDROID_STORE_PASSWD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWD: ${{ secrets.ANDROID_KEY_PASSWD }}
- name: Test with Gradle
run: ./gradlew test
- name: Prepare APK
run: cp server/android/build/outputs/apk/release/*.apk ./SlimeVR-android.apk
- name: Upload APK
uses: actions/upload-artifact@v6
with:
name: release-android
path: SlimeVR-android.apk
- name: Build Google Play release bundle
if: startsWith(github.ref, 'refs/tags/')
run: ./gradlew :server:android:bundleRelease
env:
ANDROID_STORE_FILE: ${{ secrets.ANDROID_GPLAY_STORE_FILE }}
ANDROID_STORE_PASSWD: ${{ secrets.ANDROID_GPLAY_STORE_PASSWD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_GPLAY_KEY_ALIAS }}
ANDROID_KEY_PASSWD: ${{ secrets.ANDROID_GPLAY_KEY_PASSWD }}
- name: Upload the Google Play artifact
uses: actions/upload-artifact@v6
if: startsWith(github.ref, 'refs/tags/')
with:
# Artifact name
name: 'SlimeVR-Android-GPDev' # optional, default is artifact
# A file, directory or wildcard pattern that describes what to upload
path: server/android/build/outputs/bundle/release/*
create-release:
name: Finalize Release Draft
needs: [package-desktop, bundle-android, build-server-jar, build-gui-frontend]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- name: Download All Release Artifacts
uses: actions/download-artifact@v6
with:
pattern: release-*
path: release-out
merge-multiple: true
- name: Download Server Jar
uses: actions/download-artifact@v6
with:
name: server-jar
path: server
- name: Download GUI Dist
uses: actions/download-artifact@v6
with:
name: gui-dist
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
draft: true
generate_release_notes: true
files: |
release-out/*
server/desktop/build/libs/slimevr.jar
slimevr-gui-dist.tar.gz

View File

@@ -0,0 +1,34 @@
# This workflow will build the update manifest for the updater and update a GitHub release
name: Generate update manifest
on:
workflow_dispatch:
release:
types: [released]
jobs:
generate-manifest:
runs-on: ubuntu-22.04
steps:
- uses: actions/setup-node@v6
with:
node-version: '22.x'
- name: Generate update-manifest.json
run: |
npx @slimevr/update-manifest-generator@latest
- uses: actions/upload-artifact@v6
with:
name: "update-manifest.json"
path: ./update-manifest.json
- name: Upload update-manifest.json to release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ secrets.UPDATE_MANIFEST_RELEASE_TAG }}
files: ./update-manifest.json
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,357 +0,0 @@
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: SlimeVR Server
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
create:
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "adopt"
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- run: mkdir ./gui/dist && touch ./gui/dist/somefile
shell: bash
- name: Check code formatting
run: ./gradlew spotlessCheck
- name: Test with Gradle
run: ./gradlew test
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "adopt"
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Build with Gradle
run: ./gradlew shadowJar
- name: Upload the Server JAR as a Build Artifact
uses: actions/upload-artifact@v3
with:
# Artifact name
name: "SlimeVR-Server" # optional, default is artifact
# A file, directory or wildcard pattern that describes what to upload
path: server/desktop/build/libs/*
- name: Upload to draft release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
generate_release_notes: true
files: |
server/desktop/build/libs/*
bundle-android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Get tags
run: git fetch --tags origin --recurse-submodules=no --force
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: "17"
distribution: "adopt"
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Build GUI
run: |
pnpm i
cd gui && pnpm run build
- name: Build with Gradle
run: ./gradlew :server:android:assembleDebug
- name: Upload the Android Build Artifact
uses: actions/upload-artifact@v3
with:
# Artifact name
name: "SlimeVR-Android" # optional, default is artifact
# A file, directory or wildcard pattern that describes what to upload
path: server/android/build/outputs/apk/*
- name: Prepare for release
if: startsWith(github.ref, 'refs/tags/')
run: |
cp server/android/build/outputs/apk/debug/android-debug.apk ./SlimeVR-android.apk
- name: Upload to draft release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
generate_release_notes: true
files: |
./SlimeVR-android.apk
bundle-linux:
runs-on: ubuntu-22.04
needs: [build, test]
if: contains(fromJSON('["workflow_dispatch", "create"]'), github.event_name)
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/download-artifact@v3
with:
name: "SlimeVR-Server"
path: server/desktop/build/libs/
- name: Set up Linux dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: libgtk-3-dev webkit2gtk-4.1 libappindicator3-dev librsvg2-dev patchelf libfuse2
# Increment to invalidate the cache
version: 1.0
# Enables a workaround to attempt to run pre and post install scripts
execute_install_scripts: true
# Disables uploading logs as a build artifact
debug: false
- name: Cache cargo dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: "ubuntu-22.04"
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Build
run: |
pnpm i
pnpm run tauri build
- uses: actions/upload-artifact@v3.1.0
with:
name: SlimeVR-GUI-Deb
path: target/release/bundle/deb/slimevr*.deb
- name: Install appimage-builder
run: |
wget "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod a+x appimagetool-x86_64.AppImage
sudo mv appimagetool-x86_64.AppImage /usr/local/bin/appimagetool
- name: Modify and Build AppImage
run: |
cd target/release/bundle/appimage
chmod a+x slimevr*.AppImage
./slimevr*.AppImage --appimage-extract
cp $( git rev-parse --show-toplevel )/server/desktop/build/libs/slimevr.jar squashfs-root/slimevr.jar
chmod 644 squashfs-root/slimevr.jar
appimagetool squashfs-root slimevr*.AppImage
- uses: actions/upload-artifact@v3.1.0
with:
name: SlimeVR-GUI-AppImage
path: target/release/bundle/appimage/slimevr*.AppImage
- name: Prepare for release
if: startsWith(github.ref, 'refs/tags/')
run: |
cp target/release/bundle/appimage/slimevr*.AppImage ./SlimeVR-amd64.appimage
cp target/release/bundle/deb/slimevr*.deb ./SlimeVR-amd64.deb
- name: Upload to draft release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
generate_release_notes: true
files: |
./SlimeVR-amd64.appimage
./SlimeVR-amd64.deb
bundle-mac:
runs-on: macos-latest
needs: [build, test]
if: contains(fromJSON('["workflow_dispatch", "create"]'), github.event_name)
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/download-artifact@v3
with:
name: "SlimeVR-Server"
path: server/desktop/build/libs/
- name: Cache cargo dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: "macos-latest"
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Build
run: |
rustup target add aarch64-apple-darwin
pnpm i
pnpm run tauri build --target universal-apple-darwin
- name: Modify Application
run: |
cd target/universal-apple-darwin/release/bundle/macos/slimevr.app/Contents/MacOS
cp $( git rev-parse --show-toplevel )/server/desktop/build/libs/slimevr.jar ./
cd ../../../../dmg/
./bundle_dmg.sh --volname slimevr --icon slimevr 180 170 --app-drop-link 480 170 \
--window-size 660 400 --hide-extension ../macos/slimevr.app \
--volicon ../macos/slimevr.app/Contents/Resources/icon.icns --skip-jenkins \
--eula ../../../../LICENSE-MIT slimevr.dmg ../macos/slimevr.app
- uses: actions/upload-artifact@v3.1.0
with:
name: SlimeVR-GUI-MacApp
path: target/universal-apple-darwin/release/bundle/macos/slimevr*.app
- uses: actions/upload-artifact@v3.1.0
with:
name: SlimeVR-GUI-MacDmg
path: target/universal-apple-darwin/release/bundle/dmg/slimevr.dmg
- name: Prepare for release
if: startsWith(github.ref, 'refs/tags/')
run: |
cp target/universal-apple-darwin/release/bundle/dmg/slimevr.dmg ./SlimeVR-mac.dmg
- name: Upload to draft release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
generate_release_notes: true
files: |
./SlimeVR-mac.dmg
bundle-windows:
runs-on: windows-latest
needs: [build, test]
if: contains(fromJSON('["workflow_dispatch", "create"]'), github.event_name)
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/download-artifact@v3
with:
name: "SlimeVR-Server"
path: server/desktop/build/libs/
- name: Cache cargo dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: "windows-latest"
- uses: pnpm/action-setup@v2
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.node-version'
cache: 'pnpm'
- name: Clean cache in Windows (Fixes tauri-apps/tauri#9045)
run: cargo clean
- name: Build
run: |
pnpm i
pnpm run skipbundler
- name: Bundle to zips
shell: bash
run: |
mkdir SlimeVR
cp gui/src-tauri/icons/icon.ico ./SlimeVR/run.ico
cp server/desktop/build/libs/slimevr.jar ./SlimeVR/slimevr.jar
cp server/core/resources/* ./SlimeVR/
cp target/release/slimevr.exe ./SlimeVR/
7z a -tzip SlimeVR-win64.zip ./SlimeVR/
mv ./SlimeVR/slimevr.exe ./SlimeVR/slimevr-ui.exe
7z a -tzip SlimeVR.zip ./SlimeVR/
- uses: actions/upload-artifact@v3.1.0
with:
name: SlimeVR-GUI-Windows
path: ./SlimeVR*.zip
- name: Upload to draft release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
draft: true
generate_release_notes: true
files: |
./SlimeVR-win64.zip
./SlimeVR.zip

22
.github/workflows/label.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
# This workflow will triage pull requests and apply a label based on the
# paths that are modified in the pull request.
#
# To use this workflow, you will need to set up a .github/labeler.yml
# file with configuration. For more information, see:
# https://github.com/actions/labeler
name: Labeler
on: [pull_request_target]
jobs:
label:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/labeler@v6
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -3,22 +3,19 @@ on:
push:
branches:
- pontoon
jobs:
pull_request:
if: ${{ github.repository == 'SlimeVR/SlimeVR-Server' }}
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
with:
submodules: recursive
- uses: repo-sync/pull-request@v2
with:
destination_branch: "main"
pr_title: "New Pontoon translations"
pr_body: "Please don't squash me 🥺"
pr_label: "Area: Translation"
github_token: ${{ secrets.PONTOON_BOT_KEY }}
- name: pull-request
env:
GH_TOKEN: ${{ secrets.PONTOON_BOT_KEY }}
run: |
gh_pr_up() { gh pr create "$@" --label "Area: Translation" --base main || gh pr edit "$@"; }
gh_pr_up --title "New Pontoon translations" --body "Please don't squash me 🥺"

View File

@@ -15,7 +15,7 @@ jobs:
contents: write
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
with:
ref: pontoon
submodules: recursive
@@ -24,7 +24,7 @@ jobs:
- name: Rebase
run: |
git config --local user.name "slimevr-bot"
git config --local user.email pantoon@slimevr.dev
git config --local user.email 'pantoon@slimevr.dev'
git fetch origin main
git rebase origin/main
git submodule update
@@ -36,3 +36,4 @@ jobs:
commit-message: "update"
force-push: "true"
name: "slimevr-bot"
email: "pantoon@slimevr.dev"

13
.gitignore vendored
View File

@@ -17,6 +17,7 @@
# VSCode stuff
/.vscode/settings.json
/.vscode/launch.json
# Ignore eclipse stuff
.project
@@ -27,16 +28,22 @@
/node_modules
.husky
# kotlin stuff
/.kotlin
# ignore gradle build folder
build/
# Rust build artifacts
/target
# direnv has been claimed for Nix usage
.direnv/
.devenv
# Ignore Android local properties
local.properties
# Ignore temporary config
vrconfig.yml.tmp
# Nixos
.bin/

View File

@@ -1,6 +1,3 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
YELLOW="\033[1;33m"
GREEN="\033[1;32m"
RESET="\033[0m"

View File

@@ -1 +1 @@
18.12.1
22.17.0

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
update-notifier=false

View File

@@ -7,7 +7,6 @@
"gaborv.flatbuffers",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"rust-lang.rust-analyzer",
"bradlc.vscode-tailwindcss",
"EditorConfig.EditorConfig",
"macabeus.vscode-fluent",

View File

@@ -7,8 +7,6 @@ This document describes essential knowledge required to contribute to the SlimeV
- [Git](https://git-scm.com/downloads)
- [Java v17+](https://adoptium.net/temurin/releases/)
- [Node.js v16.9+](https://nodejs.org) (We recommend the use of `nvm` instead of installing Node.js directly)
- [Microsoft Edge WebView2](https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section) or `webkit2gtk` for Linux
- [Rust](https://rustup.rs)
## Cloning the code
First, clone the codebase using git in a terminal in the folder you want.
@@ -32,13 +30,13 @@ be at `server/build/libs/slimevr.jar` (you can ignore `server.jar`).
(Note: Your IDE may be able to do all of the above for you.)
### Tauri (gui)
### Electron (gui)
- Activate corepack (included with Node.JS) via `corepack enable` (might require administrator permissions)
- Run `pnpm i` in your IDE's terminal to download and install dependencies.
- To launch the GUI in dev mode, run `pnpm gui`.
- Finally, to compile for production, run `pnpm run tauri build`. The result
will be at `target/release/slimevr.exe`.
- Finally, to compile for production, run `pnpm package:build`. The result
will be at `dist/artifacts/` content will change depending of the platform.
## Code style
@@ -84,7 +82,7 @@ Import the formatting settings defined in `spotless.xml`, like this:
Eclipse will only do a subset of the checks in `spotless`, so you may still want to do
`./gradlew spotlessApply` if you ever see an error from spotless.
### Tauri (gui)
### Electron (gui)
We use ESLint and Prettier to format GUI code.
- First, go into the GUI's directory with your terminal by running `cd gui`.
@@ -105,6 +103,7 @@ When touching SolarXR:
- After editing files, you should run `cd solarxr-protocol`, then either run
`./generate-flatbuffer.ps1` (Windows) or `./generate-flatbuffer.sh` (Linux/OSX)
- Make sure to commit your changes inside the submodule.
- To make sure the gui use the latest generated code, run `pnpm i`.
## Code Licensing
SlimeVR uses dual MIT and Apache-2.0 license. Be sure that any code that you reference,
@@ -115,3 +114,9 @@ licensed under `GPL-v3`.
## Discord
We use discord *a lot* to coordinate and discuss development. Come join us at
https://discord.gg/SlimeVR!
## Use of AI
We DO NOT accept contributions that are generated with AI (for example, "vibe-coding").
If you do use AI, and you believe your usage of AI is reasonable, you must clearly disclose
how you used AI in your submission.

5482
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
[workspace]
# Use 2021 edition resolver, better resolves crate features.
resolver = "2"
# A list of all rust crates in the workspace.
members = ["gui/src-tauri"]
# These settings can be inherited by workspace members
[workspace.package]
edition = "2021"
license = "MIT OR Apache-2.0"
rust-version = "1.75" # This version stabilized GATs and let-else
repository = "https://github.com/SlimeVR/SlimeVR-Server"
[profile.release]
lto = "thin"

View File

@@ -47,6 +47,11 @@ on SlimeVR, you need to be aware of them:**
Please refer to the [LICENSE-MIT] and [LICENSE-APACHE] files if you are at any point
uncertain what the exact requirements are.
## Trademark and Logo use
**SlimeVR is a trademark or a registered trademark of SlimeVR B.V. Usage of SlimeVR software, hardware, or other intellectual property in this or other repositories does not grant you the right to use SlimeVR trademark as your own.**
For more information, please refer to the [TRADEMARK].
## Contributions
Any contributions submitted for inclusion in this repository will be dual-licensed under
either:
@@ -64,3 +69,7 @@ okay with this and that you are authorized to provide the above licenses.
[LICENSE-MIT]: LICENSE-MIT
[LICENSE-APACHE]: LICENSE-APACHE
[TRADEMARK]: TRADEMARK.md
*if you read this, u cute*

33
TRADEMARK.md Normal file
View File

@@ -0,0 +1,33 @@
## SlimeVR is a trademark or a registered trademark of SlimeVR B.V.
**Usage of SlimeVR software, hardware, or other intellectual property in this or other repositories does not grant you the right to use SlimeVR trademark as your own.**
The purpose of a trademark is to remove uncertainty for users and customers regarding the product's manufacturer or endorsement. You're not allowed to market your product using SlimeVR name, and your usage of the name should be only factual and descriptive. For example, calling original SlimeVR products SlimeVR or describing compatibility of other products or derivatives. This applies to all products, including software, and hardware including non-official Full-Body Trackers.
**Here are a few _acceptable_ uses of SlimeVR name when selling unofficial Slime trackers:**
* SlimeVR-compatible trackers
* Unofficial SlimeVR trackers / Non-official SlimeVR trackers
* DIY SlimeVR trackers
* Third-party SlimeVR Trackers
* Custom SlimeVR-compatible trackers
* < Your Brand > Slime Trackers
* Using "SlimeVR" as a search tag
**_Unacceptable_ uses include, but are not limited to:**
* SlimeVR store
* Buy SlimeVR
* SlimeVR Trackers
* Original SlimeVR
* Official SlimeVR
* SlimeVR BMI270 (or any other IMU model along with SlimeVR name)
* < Your brand > SlimeVR / < your brand > SlimeVR Trackers
Use of the SlimeVR name that can cause confusion is not allowed in any part of the listing, including, but not limited to: product title, product description, product metadata, site title, site name, site metadata, site texts, social media posts, or other advertisement.
Also, please ensure you use the correct spelling and capitalization: only **"SlimeVR" is acceptable**. Not "Slimevr", "slimevr", or "Slime VR". You're allowed to use the word "slime" as you wish, it's not a trademark.
Please understand that we have an obligation to reduce confusion for the customers, and we believe that our usage terms are generous compared to many other companies and products. This applies to all sellers or derivative products, we do not make exceptions.
---
If you have any questions about SlimeVR trademark or copyrighted materials, you can reach out to us at *tm[at]slimevr.dev*.

View File

@@ -1,105 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
dev.slimevr.SlimeVR.metainfo.xml by SlimeVR contributors
To the extent possible under law, the person who associated CC0 with
dev.slimevr.SlimeVR.metainfo.xml has waived all copyright and related or neighboring rights
to dev.slimevr.SlimeVR.metainfo.xml.
You should have received a copy of the CC0 legalcode along with this
work. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
-->
<component type="desktop-application">
<id>dev.slimevr.SlimeVR</id>
<name>SlimeVR</name>
<summary>An app for facilitating full-body tracking in virtual reality</summary>
<developer_name>SlimeVR Team</developer_name>
<!-- CC0 so attribution is not required -->
<metadata_license>CC0-1.0</metadata_license>
<project_license>MIT OR Apache-2.0</project_license>
<content_rating type="oars-1.1" />
<url type="homepage">https://slimevr.dev/</url>
<url type="bugtracker">https://github.com/SlimeVR/SlimeVR-Server/issues</url>
<url type="faq">https://docs.slimevr.dev/slimevr101.html</url>
<url type="donation">https://github.com/sponsors/SlimeVR</url>
<url type="vcs-browser">https://github.com/SlimeVR/SlimeVR-Server</url>
<url type="translate">https://i18n.slimevr.dev</url>
<url type="help">https://docs.slimevr.dev/server-setup/slimevr-setup.html</url>
<url type="contribute">https://github.com/SlimeVR/SlimeVR-Server/blob/main/CONTRIBUTING.md</url>
<url type="contact">https://discord.gg/SlimeVR</url>
<recommends>
<display_length compare="ge">300</display_length>
</recommends>
<supports>
<control>pointing</control>
<control>keyboard</control>
<control>touch</control>
</supports>
<branding>
<color type="primary">#663499</color>
</branding>
<description>
<p>
SlimeVR is a set of open hardware sensors and open source software that facilitates full-body
tracking (FBT) in virtual reality. With no base station required, SlimeVR makes wireless
VR FBT affordable and comfortable.
</p>
</description>
<launchable type="desktop-id">dev.slimevr.SlimeVR.desktop</launchable>
<screenshots>
<screenshot type="default">
<caption>The onboarding for the GUI</caption>
<image>https://raw.githubusercontent.com/SlimeVR/SlimeVR-Server/main/assets/img/onboarding.png</image>
</screenshot>
</screenshots>
<provides>
<binary>slimevr</binary>
</provides>
<releases>
<release version="0.11.0" date="2023-12-23"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.11.0</url></release>
<release version="0.11.0~rc.2" type="development" date="2023-12-08"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.11.0-rc.2</url></release>
<release version="0.11.0~rc.1" type="development" date="2023-11-23"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.11.0-rc.1</url></release>
<release version="0.10.1" date="2023-09-30"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.10.1</url></release>
<release version="0.10.1~rc.1" type="development" date="2023-09-29"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.10.1-rc.1</url></release>
<release version="0.10.0" date="2023-09-22"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.10.0</url></release>
<release version="0.10.0~rc.2" type="development" date="2023-09-15"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.10.0-rc.2</url></release>
<release version="0.10.0~rc.1" type="development" date="2023-09-02"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.10.0-rc.1</url></release>
<release version="0.9.1" date="2023-08-30"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.1</url></release>
<release version="0.9.1~rc.4" type="development" date="2023-08-28"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.1-rc.4</url></release>
<release version="0.9.1~rc.3" type="development" date="2023-08-19"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.1-rc.3</url></release>
<release version="0.9.1~rc.2" type="development" date="2023-08-15"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.1-rc.2</url></release>
<release version="0.9.1~rc.1" type="development" date="2023-08-13"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.1-rc.1</url></release>
<release version="0.9.0" date="2023-08-05"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.0</url></release>
<release version="0.9.0~rc.2" type="development" date="2023-08-02"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.0-rc.2</url></release>
<release version="0.9.0~rc.1" type="development" date="2023-07-31"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.9.0-rc.1</url></release>
<release version="0.8.3" date="2023-07-09"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.3</url></release>
<release version="0.8.2" date="2023-07-09"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.2</url></release>
<release version="0.8.2~rc.1" type="development" date="2023-07-07"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.2-rc.1</url></release>
<release version="0.8.1" date="2023-07-04"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.1</url></release>
<release version="0.8.0" date="2023-06-22"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.0</url></release>
<release version="0.8.0~rc.3" type="development" date="2023-06-20"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.0-rc.3</url></release>
<release version="0.8.0~rc.2" type="development" date="2023-06-15"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.0-rc.2</url></release>
<release version="0.8.0~rc.1" type="development" date="2023-06-01"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.8.0-rc.1</url></release>
<release version="0.7.1" date="2023-04-14"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.7.1</url></release>
<release version="0.7.0" date="2023-04-11"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.7.0</url></release>
<release version="0.6.3" date="2023-02-22"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.6.3</url></release>
<release version="0.6.2" date="2023-02-17"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.6.2</url></release>
<release version="0.6.1" date="2023-02-12"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.6.1</url></release>
<release version="0.6.0" date="2023-01-05"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.6.0</url></release>
<release version="0.5.1" date="2022-12-12"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.5.1</url></release>
<release version="0.5.0" date="2022-12-07"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.5.0</url></release>
<release version="0.4.0" date="2022-11-24"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.4.0</url></release>
<release version="0.3.1" date="2022-11-22"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.3.1</url></release>
<release version="0.3.0" date="2022-11-16"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.3.0</url></release>
<release version="0.2.1" date="2022-08-24"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.2.1</url></release>
<release version="0.2.0" date="2022-06-28"><url>https://github.com/SlimeVR/SlimeVR-Server/releases/tag/v0.2.0</url></release>
</releases>
</component>

417
flake.lock generated
View File

@@ -1,443 +1,58 @@
{
"nodes": {
"devenv": {
"inputs": {
"flake-compat": "flake-compat",
"nix": "nix",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
"lastModified": 1699541523,
"narHash": "sha256-Rv0ryuBC5KtA/3YqwIEe58Tabu71qSGnGcGRd67mMUY=",
"owner": "cachix",
"repo": "devenv",
"rev": "14fdefc0bb80c3d6f3a18a491e33429b4064c371",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "devenv",
"type": "github"
}
},
"fenix": {
"inputs": {
"nixpkgs": "nixpkgs_2",
"rust-analyzer-src": "rust-analyzer-src"
},
"locked": {
"lastModified": 1699683614,
"narHash": "sha256-XT2tIoIiiv0AxRs9g76nuRhfQf7KU1dE3ho8BL5CYM4=",
"owner": "nix-community",
"repo": "fenix",
"rev": "ca6415d87d2e1b5975d59b2a68ae19029de1759c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1698882062,
"narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
"lastModified": 1762980239,
"narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1685518550,
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1694529238,
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"devenv",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1660459072,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"rev": "52a2caecc898d0b46b2b905f058ccc5081f842da",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"lowdown-src": {
"flake": false,
"locked": {
"lastModified": 1633514407,
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
"owner": "kristapsdz",
"repo": "lowdown",
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
"type": "github"
},
"original": {
"owner": "kristapsdz",
"repo": "lowdown",
"type": "github"
}
},
"mk-shell-bin": {
"locked": {
"lastModified": 1677004959,
"narHash": "sha256-/uEkr1UkJrh11vD02aqufCxtbF5YnhRTIKlx5kyvf+I=",
"owner": "rrbutani",
"repo": "nix-mk-shell-bin",
"rev": "ff5d8bd4d68a347be5042e2f16caee391cd75887",
"type": "github"
},
"original": {
"owner": "rrbutani",
"repo": "nix-mk-shell-bin",
"type": "github"
}
},
"nix": {
"inputs": {
"lowdown-src": "lowdown-src",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"nixpkgs-regression": "nixpkgs-regression"
},
"locked": {
"lastModified": 1676545802,
"narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=",
"owner": "domenkozar",
"repo": "nix",
"rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f",
"type": "github"
},
"original": {
"owner": "domenkozar",
"ref": "relaxed-flakes",
"repo": "nix",
"type": "github"
}
},
"nix2container": {
"inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1697285352,
"narHash": "sha256-tRGLm/DO8+anGUCgLYxTF5EPqWv8EZ9MVFWRdh285HU=",
"owner": "nlewo",
"repo": "nix2container",
"rev": "9d7f33ef0058f4df4c0912025f43c758a3289d76",
"type": "github"
},
"original": {
"owner": "nlewo",
"repo": "nix2container",
"type": "github"
}
},
"nixgl": {
"inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1685908677,
"narHash": "sha256-E4zUPEUFyVWjVm45zICaHRpfGepfkE9Z2OECV9HXfA4=",
"owner": "guibou",
"repo": "nixGL",
"rev": "489d6b095ab9d289fe11af0219a9ff00fe87c7c5",
"type": "github"
},
"original": {
"owner": "guibou",
"repo": "nixGL",
"repo": "flake-parts",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1678875422,
"narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=",
"lastModified": 1756787288,
"narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459",
"rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"dir": "lib",
"lastModified": 1698611440,
"narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735",
"lastModified": 1761765539,
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
"type": "github"
},
"original": {
"dir": "lib",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-regression": {
"locked": {
"lastModified": 1643052045,
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1685801374,
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1699099776,
"narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1660551188,
"narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "441dc5d512153039f19ef198e662e4f3dbb9fd65",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_4": {
"locked": {
"lastModified": 1699099776,
"narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": [
"devenv",
"flake-compat"
],
"flake-utils": "flake-utils",
"gitignore": "gitignore",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1688056373,
"narHash": "sha256-2+SDlNRTKsgo3LBRiMUcoEUb6sDViRNQhzJquZ4koOI=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "5843cf069272d92b60c3ed9e55b7a8989c01d4c7",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"root": {
"inputs": {
"devenv": "devenv",
"fenix": "fenix",
"flake-parts": "flake-parts",
"mk-shell-bin": "mk-shell-bin",
"nix2container": "nix2container",
"nixgl": "nixgl",
"nixpkgs": "nixpkgs_4"
}
},
"rust-analyzer-src": {
"flake": false,
"locked": {
"lastModified": 1699629149,
"narHash": "sha256-oDxT2FTYLRnwBRgxgWMApbgvNsbsPV4EeH4TZtp70F0=",
"owner": "rust-lang",
"repo": "rust-analyzer",
"rev": "11a87c917943dac5a568579f799c2d7458324103",
"type": "github"
},
"original": {
"owner": "rust-lang",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
"nixpkgs": "nixpkgs"
}
}
},

165
flake.nix
View File

@@ -1,139 +1,50 @@
{
description = "Affordable full-body tracking for VR!";
description = "SlimeVR Server & GUI";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
devenv.url = "github:cachix/devenv";
nix2container.url = "github:nlewo/nix2container";
nix2container.inputs.nixpkgs.follows = "nixpkgs";
mk-shell-bin.url = "github:rrbutani/nix-mk-shell-bin";
nixgl.url = "github:guibou/nixGL";
fenix.url = "github:nix-community/fenix";
flake-parts.url = "github:hercules-ci/flake-parts";
};
nixConfig = {
extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=";
extra-substituters = "https://devenv.cachix.org";
};
outputs = inputs@{ self, nixpkgs, flake-parts, ... }:
flake-parts.lib.mkFlake { inherit inputs; } {
systems = [ "x86_64-linux" ];
outputs = inputs @ {
self,
flake-parts,
nixgl,
...
}:
flake-parts.lib.mkFlake {inherit inputs;} {
imports = [
inputs.devenv.flakeModule
];
systems = ["x86_64-linux" "i686-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin"];
perSystem = { pkgs, ... }:
let
runtimeLibs = pkgs: (with pkgs; [
jdk17
perSystem = {
config,
self',
inputs',
pkgs,
system,
lib,
...
}: {
# Per-system attributes can be defined here. The self' and inputs'
# module parameters provide easy access to attributes of the same
# system.
alsa-lib at-spi2-atk at-spi2-core cairo cups dbus expat
gdk-pixbuf glib gtk3 libdrm libgbm libglvnd libnotify
libxkbcommon mesa nspr nss pango systemd vulkan-loader
wayland xorg.libX11 xorg.libXcomposite xorg.libXdamage
xorg.libXext xorg.libXfixes xorg.libXrandr xorg.libxcb
xorg.libxshmfence libusb1 udev libxcrypt-legacy
rpm fpm
# Equivalent to inputs'.nixpkgs.legacyPackages.hello;
# packages.default = pkgs.hello;
_module.args.pkgs = import self.inputs.nixpkgs {
inherit system;
overlays = [nixgl.overlay];
wineWow64Packages.stable
zlib squashfsTools fakeroot libarchive icu
nodejs_22 pnpm pkg-config python3 gcc gnumake binutils git
pkgs.nodePackages.node-gyp-build
]);
slimeShell = pkgs.buildFHSEnv {
name = "slimevr-env";
targetPkgs = runtimeLibs;
profile = ''
export JAVA_HOME=${pkgs.jdk17}
export PATH="${pkgs.jdk17}/bin:$PATH"
# Tell electron-builder to use system tools instead of downloading them
export USE_SYSTEM_FPM=true
export USE_SYSTEM_MKSQUASHFS=true
'';
runScript = "bash";
};
in
{
devShells.default = slimeShell.env;
};
devenv.shells.default = let
fenixpkgs = inputs'.fenix.packages;
rust_toolchain = lib.importTOML ./rust-toolchain.toml;
in {
name = "slimevr";
imports = [
# This is just like the imports in devenv.nix.
# See https://devenv.sh/guides/using-with-flake-parts/#import-a-devenv-module
# ./devenv-foo.nix
];
# https://devenv.sh/reference/options/
packages =
(with pkgs; [
pkgs.nixgl.nixGLIntel
cacert
])
++ lib.optionals pkgs.stdenv.isLinux (with pkgs; [
appimagekit
atk
cairo
dbus
dbus.lib
dprint
gdk-pixbuf
glib.out
glib-networking
gobject-introspection
gtk3
harfbuzz
libffi
libsoup_3
openssl.out
pango
pkg-config
treefmt
webkitgtk_4_1
zlib
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
librsvg
freetype
expat
libayatana-appindicator
libusb1
])
++ lib.optionals pkgs.stdenv.isDarwin [
pkgs.darwin.apple_sdk.frameworks.Security
];
languages.java = {
enable = true;
gradle.enable = true;
jdk.package = pkgs.jdk17;
};
languages.kotlin.enable = true;
languages.javascript = {
enable = true;
corepack.enable = true;
};
languages.rust = {
enable = true;
toolchain = fenixpkgs.fromToolchainName {
name = rust_toolchain.toolchain.channel;
sha256 = "sha256-3St/9/UKo/6lz2Kfq2VmlzHyufduALpiIKaaKX4Pq0g=";
};
components = rust_toolchain.toolchain.components;
};
env = {
GIO_EXTRA_MODULES = "${pkgs.glib-networking}/lib/gio/modules:${pkgs.dconf.lib}/lib/gio/modules";
};
enterShell = with pkgs; ''
'';
};
};
flake = {
# The usual flake attributes can be defined here, including system-
# agnostic ones like nixosModule and system-enumerating ones, although
# those are more easily expressed in perSystem.
};
};
}

View File

@@ -13,8 +13,10 @@ android.useAndroidX=true
android.nonTransitiveRClass=true
org.gradle.unsafe.configuration-cache=false
kotlinVersion=1.9.23
spotlessVersion=6.25.0
shadowJarVersion=8.1.1
buildconfigVersion=5.3.5
grgitVersion=5.2.2
kotlinVersion=2.3.10
spotlessVersion=8.2.1
shadowJarVersion=9.3.1
buildconfigVersion=6.0.7
# We should probably stop using grgit, see:
# https://andrewoberstar.com/posts/2024-04-02-dont-commit-to-grgit/
grgitVersion=5.3.3

Binary file not shown.

View File

@@ -1,6 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip
distributionSha256Sum=f1771298a70f6db5a29daf62378c4e18a17fc33c9ba6b14362e0cdf40610380d
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

34
gradlew vendored
View File

@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -83,10 +85,9 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -133,10 +134,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -197,11 +201,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

22
gradlew.bat vendored
View File

@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail

8
gui/.env Normal file
View File

@@ -0,0 +1,8 @@
VITE_FIRMWARE_TOOL_URL=https://fw-tool-api-v2.slimevr.io
VITE_FIRMWARE_TOOL_S3_URL=https://fw-tool-bucket-v2.slimevr.io
FIRMWARE_TOOL_SCHEMA_URL=https://fw-tool-api-v2.slimevr.io/api-json
# VITE_FIRMWARE_TOOL_URL=http://localhost:3000
# VITE_FIRMWARE_TOOL_S3_URL=http://localhost:9099
# FIRMWARE_TOOL_SCHEMA_URL=http://localhost:3000/api-json

View File

@@ -1,51 +0,0 @@
{
"env": {
"browser": true,
"es2021": true,
"jest": true
},
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:@dword-design/import-alias/recommended"],
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": "latest",
"sourceType": "module"
},
"plugins": ["react-hooks", "@typescript-eslint"],
"rules": {
"react/react-in-jsx-scope": "off",
"react/prop-types": "off",
"spaced-comment": "error",
"quotes": ["error", "single"],
"no-duplicate-imports": "error",
"no-inline-styles": "off",
"@typescript-eslint/no-explicit-any": "off",
"react/no-unescaped-entities": "off",
"camelcase": "error",
"@typescript-eslint/no-unused-vars": [
"warn",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"@dword-design/import-alias/prefer-alias": [
"error",
{
"alias": {
"@": "./src/"
}
}
]
},
"settings": {
"import/resolver": {
"typescript": {}
},
"react": {
"version": "detect"
}
}
}

8
gui/.gitignore vendored
View File

@@ -28,6 +28,14 @@ yarn-error.log*
# vite
/dist
/stats.html
vite.config.ts.timestamp*
electron.vite.config.*.mjs
# eslint
.eslintcache
# Sentry Config File
.env.sentry-build-plugin
# electron
out/

View File

@@ -1,5 +1,5 @@
export default {
'**/*.{ts,tsx}': () => 'tsc -p tsconfig.json --noEmit',
'**/*.{js,jsx,ts,tsx}': 'eslint --max-warnings=0 --cache --fix',
'**/*.{js,jsx,ts,tsx,css,md,json}': 'prettier --write',
'src/**/*.{js,jsx,ts,tsx}': 'eslint --max-warnings=0 --no-warn-ignored --cache --fix',
'**/*.{js,jsx,ts,tsx,css,scss,md,json}': 'prettier --write',
};

70
gui/electron-builder.yml Normal file
View File

@@ -0,0 +1,70 @@
appId: dev.slimevr.SlimeVR
productName: SlimeVR
# Global naming pattern
artifactName: "${productName}-${version}-${os}-${arch}.${ext}"
directories:
output: dist/artifacts/${os}
asar: true
asarUnpack:
- out/main/chunks/*.jar
electronLanguages:
- en-US
files:
- out/**/*
- index.html
- package.json
- node_modules/**
- "!node_modules/*/{README,readme,README.md,readme.md,CHANGELOG,CHANGELOG.md,changelog.md}"
- "!node_modules/*/{test,tests,__tests__,docs,doc,example,examples}"
- "!node_modules/*/.{git,github,vscode,editorconfig,eslintrc,prettierrc}"
- "!node_modules/**/*.{map,ts,tsx,d.ts}"
- "!**/.DS_Store"
linux:
category: Game
artifactName: "${productName}-${arch}.${ext}"
target:
- target: AppImage
- target: deb
- target: rpm
extraFiles:
- from: "../server/desktop/build/libs/slimevr.jar"
to: "."
- from: "./electron/resources/69-slimevr-devices.rules"
to: "."
icon: "./electron/resources/icons"
deb:
depends: [openjdk-17-jre-headless, udev]
afterInstall: "./electron/resources/scripts/postinstall.sh"
afterRemove: "./electron/resources/scripts/postremove.sh"
rpm:
depends: [java-latest-openjdk, udev]
afterInstall: "./electron/resources/scripts/postinstall.sh"
afterRemove: "./electron/resources/scripts/postremove.sh"
win:
artifactName: "${productName}-${os}-${arch}.${ext}"
target: zip
icon: "./electron/resources/icons/icon.ico"
extraFiles:
- from: "../server/desktop/build/libs/slimevr.jar"
to: "."
- from: "../server/core/resources"
to: "."
filter: ["**/*"]
mac:
target: dmg
artifactName: "SlimeVR-mac.${ext}"
x64ArchFiles: "**/register-protocol-handler.node"
icon: "./electron/resources/icons/icon.icns"
extraFiles:
- from: "../server/desktop/build/libs/slimevr.jar"
to: "Resources/slimevr.jar"

View File

@@ -0,0 +1,47 @@
import { defineConfig } from 'electron-vite'
import { resolve } from 'path'
import rendererConfig from './vite.config' // Import your existing React config
export default defineConfig({
main: {
build: {
rollupOptions: {
input: resolve(__dirname, 'electron/main/index.ts'),
external: [
'pino',
'pino-pretty',
'pino-roll',
'commander',
'open'
]
}
}
},
preload: {
build: {
rollupOptions: {
input: resolve(__dirname, 'electron/preload/index.ts'),
output: {
format: 'cjs', // Force CJS for the preload
entryFileNames: 'index.js' // Change back to .js
}
}
}
},
renderer: {
...rendererConfig,
root: '.',
build: {
commonjsOptions: {
// Force Rollup to treat the protocol directory as CommonJS
// even though it's not in node_modules
include: [/solarxr-protocol/, /node_modules/],
// Required for Flatbuffers/Generated code interop
transformMixedEsModules: true,
},
rollupOptions: {
input: resolve(__dirname, 'index.html')
}
}
}
})

1
gui/electron/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
resources/java-version/JavaVersion.class

12
gui/electron/main/cli.ts Normal file
View File

@@ -0,0 +1,12 @@
import { program } from "commander";
program
.option('-p --path <path>', 'set launch path')
.option(
'--skip-server-if-running',
'gui will not launch the server if it is already running'
)
.allowUnknownOption();
program.parse(process.argv);
export const options = program.opts();

477
gui/electron/main/index.ts Normal file
View File

@@ -0,0 +1,477 @@
import {
app,
BrowserWindow,
dialog,
Menu,
nativeImage,
net,
protocol,
screen,
shell,
Tray,
} from 'electron';
import { IPC_CHANNELS } from '../shared';
import path, { dirname, join } from 'path';
import open from 'open';
import trayIcon from '../resources/icons/icon.png?asset';
import appleTrayIcon from '../resources/icons/Square30x30Logo.png?asset';
import { readFile, stat } from 'fs/promises';
import { getPlatform, handleIpc, isPortAvailable } from './utils';
import {
findServerJar,
findSystemJRE,
getGuiDataFolder,
getLogsFolder,
getServerDataFolder,
getWindowStateFile,
} from './paths';
import { stores } from './store';
import { closeLogger, logger } from './logger';
import { writeFileSync } from 'node:fs';
import { spawn } from 'node:child_process';
import { discordPresence } from './presence';
import { options } from './cli';
import { ServerStatusEvent } from 'electron/preload/interface';
import { mkdir } from 'node:fs/promises';
import { MenuItem } from 'electron/main';
// Fixes colors looking washed on linux
// Might affect hdr
if (process.platform === 'linux') {
app.commandLine.appendSwitch('disable-features', 'WaylandWpColorManagerV1');
app.commandLine.appendSwitch('force-color-profile', 'srgb');
}
app.setPath('userData', getGuiDataFolder());
app.setPath('sessionData', join(getGuiDataFolder(), 'electron'));
protocol.registerSchemesAsPrivileged([
{
scheme: 'app',
privileges: {
standard: true,
secure: true,
supportFetchAPI: true,
corsEnabled: true,
},
},
]);
let mainWindow: BrowserWindow | null = null;
handleIpc(IPC_CHANNELS.GH_FETCH, async (e, options) => {
if (options.type === 'fw-releases') {
return fetch(
'https://api.github.com/repos/SlimeVR/SlimeVR-Tracker-ESP/releases'
).then((res) => res.json());
}
if (options.type === 'asset') {
if (
!options.url.startsWith(
'https://github.com/SlimeVR/SlimeVR-Tracker-ESP/releases/download'
)
)
return null;
return fetch(options.url).then((res) => res.json());
}
});
handleIpc(IPC_CHANNELS.OS_STATS, async () => {
return {
type: getPlatform(),
};
});
handleIpc(IPC_CHANNELS.I18N_OVERRIDE, async () => {
const overridefile = join(getServerDataFolder(), 'override.ftl');
const exists = await stat(overridefile)
.then(() => true)
.catch(() => false);
if (!exists) return false;
return readFile(overridefile, { encoding: 'utf-8' });
});
handleIpc(IPC_CHANNELS.LOG, (e, type, ...args) => {
let payload: Record<string, unknown> = {};
const messageParts: unknown[] = [];
args.forEach((arg) => {
if (arg instanceof Error) {
payload.err = arg;
} else if (typeof arg === 'object' && arg !== null) {
payload = { ...payload, ...arg };
} else {
messageParts.push(arg);
}
});
const msg = messageParts.join(' ');
switch (type) {
case 'error':
logger.error(payload, msg);
break;
case 'warn':
logger.warn(payload, msg);
break;
default:
logger.info(payload, msg);
}
});
handleIpc(IPC_CHANNELS.OPEN_URL, (e, url) => {
const allowed_urls = [
/steam:\/\/.*/,
/ms-settings:network$/,
/https:\/\/.*\.slimevr\.dev.*/,
/https:\/\/github\.com\/.*/,
/https:\/\/discord\.gg\/slimevr$/,
];
if (allowed_urls.find((a) => url.match(a))) open(url);
else logger.error({ url }, 'attempted to open non-whitelisted URL');
});
handleIpc(IPC_CHANNELS.STORAGE, async (e, { type, method, key, value }) => {
const store = stores[type];
if (!store) throw new Error(`Storage type ${type} not found`);
switch (method) {
case 'get':
return store.get(key!);
case 'set':
return store.set(key!, value);
case 'delete':
return store.delete(key!);
case 'save':
return store.save();
}
});
handleIpc(IPC_CHANNELS.DISCORD_PRESENCE, async (e, options) => {
if (options.enable && !discordPresence.state.ready) {
await discordPresence.connect();
discordPresence.updateActivity(options.activity);
} else if (!options.enable && discordPresence.state.ready) {
discordPresence.destroy();
}
});
handleIpc(IPC_CHANNELS.OPEN_FILE, (e, folder) => {
const requestedPath = path.resolve(folder);
const isAllowed = [getServerDataFolder(), getGuiDataFolder(), getLogsFolder()].some(
(parent) => {
const absoluteParent = path.resolve(parent);
const relative = path.relative(absoluteParent, requestedPath);
return !relative.includes('..') && !path.isAbsolute(relative);
}
);
if (isAllowed) {
shell.openPath(requestedPath);
} else {
logger.error({ path: requestedPath }, 'Blocked unauthorized path');
}
});
handleIpc(IPC_CHANNELS.GET_FOLDER, (e, folder) => {
switch (folder) {
case 'config':
return getGuiDataFolder();
case 'logs':
return getLogsFolder();
}
});
const windowStateFile = await readFile(getWindowStateFile(), {
encoding: 'utf-8',
}).catch(() => null);
const defaultWindowState: {
width: number;
height: number;
x?: number;
y?: number;
} = {
width: 1289.0,
height: 709.0,
x: undefined,
y: undefined,
};
const windowState = windowStateFile ? JSON.parse(windowStateFile) : defaultWindowState;
const MIN_WIDTH = 393;
const MIN_HEIGHT = 667;
function validateWindowState(state: typeof defaultWindowState) {
if (state.x === undefined || state.y === undefined) {
return state;
}
const displays = screen.getAllDisplays();
const isVisible = displays.some((display) => {
return (
state.x! >= display.bounds.x &&
state.y! >= display.bounds.y &&
state.x! + state.width <= display.bounds.x + display.bounds.width &&
state.y! + state.height <= display.bounds.y + display.bounds.height
);
});
const minWidth = MIN_WIDTH;
const minHeight = MIN_HEIGHT;
if (!isVisible || state.width < minWidth || state.height < minHeight) {
return defaultWindowState;
}
return state;
}
const saveWindowState = async () => {
await mkdir(dirname(getWindowStateFile()), { recursive: true });
writeFileSync(getWindowStateFile(), JSON.stringify(windowState));
};
function createWindow() {
const validatedState = validateWindowState(windowState);
mainWindow = new BrowserWindow({
width: validatedState.width,
height: validatedState.height,
x: validatedState.x,
y: validatedState.y,
minHeight: MIN_HEIGHT,
minWidth: MIN_WIDTH,
movable: true,
frame: false,
roundedCorners: true,
webPreferences: {
preload: join(__dirname, '../preload/index.js'),
nodeIntegration: false,
contextIsolation: true,
devTools: true,
},
});
if (process.env.ELECTRON_RENDERER_URL) {
mainWindow.loadURL(process.env.ELECTRON_RENDERER_URL);
mainWindow.webContents.openDevTools();
} else {
mainWindow.loadURL('app://./index.html');
}
mainWindow.on('closed', () => {
mainWindow = null;
});
handleIpc('window-actions', (e, action) => {
switch (action) {
case 'close':
mainWindow?.close();
break;
case 'hide':
mainWindow?.hide();
break;
case 'minimize':
mainWindow?.minimize();
break;
case 'maximize':
mainWindow?.maximize();
break;
}
});
handleIpc('open-dialog', (e, options) => dialog.showOpenDialog(options));
handleIpc('save-dialog', (e, options) => dialog.showSaveDialog(options));
const icon = nativeImage.createFromPath(
getPlatform() === 'macos' ? appleTrayIcon : trayIcon
);
const tray = new Tray(icon);
tray.setToolTip('SlimeVR');
tray.on('click', () => {
mainWindow?.show();
});
const contextMenu = Menu.buildFromTemplate([
{
label: 'Show',
click: () => {
mainWindow?.show();
},
},
{
label: 'Hide',
click: () => {
mainWindow?.hide();
},
},
{ role: 'quit' },
]);
tray.setContextMenu(contextMenu);
const updateWindowState = () => {
if (!mainWindow) return;
windowState.minimized = mainWindow.isMinimized();
if (!mainWindow.isMinimized() && !mainWindow.isMaximized()) {
const bounds = mainWindow.getBounds();
windowState.width = bounds.width;
windowState.height = bounds.height;
windowState.x = bounds.x;
windowState.y = bounds.y;
}
};
mainWindow.on('move', updateWindowState);
mainWindow.on('resize', updateWindowState);
mainWindow.on('minimize', updateWindowState);
mainWindow.on('maximize', updateWindowState);
mainWindow.webContents.on('context-menu', (event, params) => {
const menu = new Menu();
menu.append(
new MenuItem({
label: 'Inspect Element',
click: () => {
mainWindow?.webContents.inspectElement(params.x, params.y);
},
})
);
menu.append(new MenuItem({ type: 'separator' }));
menu.append(new MenuItem({ label: 'Copy', role: 'copy' }));
menu.append(new MenuItem({ label: 'Paste', role: 'paste' }));
if (mainWindow) menu.popup({ window: mainWindow });
});
}
const checkEnvironmentVariables = () => {
const to_check = ['_JAVA_OPTIONS', 'JAVA_TOOL_OPTIONS'];
const set = to_check.filter((env) => !!process.env[env]);
if (set.length > 0) {
dialog.showErrorBox(
'SlimeVR',
`You have environment variables ${set.join(', ')} set, which may cause the SlimeVR Server to fail to launch properly.`
);
app.quit();
}
};
const isServerRunning = async () => !(await isPortAvailable(21110));
const spawnServer = async () => {
if (options.skipServerIfRunning && (await isServerRunning())) {
logger.info(
{ skipServerIfRunning: options.skipServerIfRunning },
'Server is already running, skipping server start'
);
return;
}
const serverJar = findServerJar();
if (!serverJar) {
logger.info('server jar not found, skipping');
return;
}
const sharedDir = dirname(serverJar);
const javaBin = await findSystemJRE(sharedDir);
if (!javaBin) {
dialog.showErrorBox(
'SlimeVR',
`Couldn't find a compatible Java version, please download Java 17 or higher`
);
app.quit()
return;
}
logger.info({ javaBin, serverJar }, 'Found Java and server jar');
const platform = getPlatform();
const serverWorkdir = getServerDataFolder()
const serverProcess = spawn(javaBin, ['-Xmx128M', '-jar', serverJar, 'run'], {
cwd: serverWorkdir,
shell: false,
env:
platform === 'windows'
? {
...process.env,
APPDATA: app.getPath('appData'),
LOCALAPPDATA: process.env['USERPROFILE'] ? path.join(process.env['USERPROFILE'], 'AppData', 'Local') : undefined,
}
: undefined,
});
const sendToWindow = (event: ServerStatusEvent) => {
if (mainWindow && !mainWindow.webContents.isDestroyed()) {
mainWindow.webContents.send(IPC_CHANNELS.SERVER_STATUS, event);
}
};
serverProcess.stdout?.on('data', (message) => {
sendToWindow({ message: message.toString(), type: 'stdout' });
});
serverProcess.stderr?.on('data', (message) => {
sendToWindow({ message: message.toString(), type: 'stderr' });
});
serverProcess.on('error', (err) => {
logger.info({ err }, 'Error launching the java server');
if (!isQuitting) app.quit();
})
serverProcess.on('exit', () => {
logger.info('Server process exiting');
})
const exited = new Promise<void>((resolve) => serverProcess.once('exit', resolve));
return {
process: serverProcess,
close: () => serverProcess.kill(),
waitForExit: () => exited,
};
};
let isQuitting = false;
app.whenReady().then(async () => {
// Register protocol handler for app:// scheme to handle assets with leading slashes
protocol.handle('app', (request) => {
const url = request.url.slice('app://'.length);
const filePath = path.normalize(join(__dirname, '../renderer', url));
return net.fetch('file://' + filePath);
});
checkEnvironmentVariables();
const server = await spawnServer();
createWindow();
logger.info('SlimeVR started!');
app.on('window-all-closed', () => {
app.quit();
});
app.on('before-quit', async (event) => {
if (isQuitting) return;
isQuitting = true;
event.preventDefault();
logger.info('App quitting, saving...');
server?.close();
await server?.waitForExit();
stores.settings.save();
stores.cache.save();
discordPresence.destroy();
await saveWindowState();
await closeLogger();
app.exit(0);
});
});

View File

@@ -0,0 +1,34 @@
import pino from 'pino';
import { getLogsFolder } from './paths';
import { join } from 'node:path';
const transport = pino.transport({
targets: [
{
target: 'pino-roll',
options: {
file: join(getLogsFolder(), 'slimevr-gui.log'),
frequency: 'daily',
size: '10m',
mkdir: true,
limit: { count: 7 },
},
level: 'info',
},
{
target: 'pino-pretty',
options: { colorize: true },
level: 'debug',
},
],
});
export const logger = pino(transport);
export const closeLogger = () =>
new Promise<void>((resolve) => {
logger.flush(() => {
transport.once('close', resolve);
transport.end();
});
});

120
gui/electron/main/paths.ts Normal file
View File

@@ -0,0 +1,120 @@
import { app } from 'electron';
import path, { join } from 'node:path';
import { getPlatform } from './utils';
import { glob } from 'glob';
import { spawn } from 'node:child_process';
import javaVersionJar from '../resources/java-version/JavaVersion.jar?asset&asarUnpack';
import { existsSync } from 'node:fs';
import { options } from './cli';
const javaBin = getPlatform() === 'windows' ? 'java.exe' : 'java';
export const CONFIG_IDENTIFIER = 'dev.slimevr.SlimeVR';
export const getGuiDataFolder = () => {
const platform = getPlatform();
switch (platform) {
case 'linux':
if (process.env['XDG_DATA_HOME'])
return join(process.env['XDG_DATA_HOME'], CONFIG_IDENTIFIER);
return join(app.getPath('home'), '.local/share', CONFIG_IDENTIFIER);
case 'windows':
return join(app.getPath('appData'), CONFIG_IDENTIFIER);
case 'macos':
return join(
app.getPath('home'),
'Library/Application Support',
CONFIG_IDENTIFIER
);
case 'unknown':
throw 'error';
}
};
export const getServerDataFolder = () => {
const platform = getPlatform();
switch (platform) {
case 'linux':
case 'windows':
case 'macos':
return join(app.getPath('appData'), CONFIG_IDENTIFIER);
case 'unknown':
throw 'error';
}
};
export const getLogsFolder = () => {
return join(getGuiDataFolder(), 'logs');
};
export const getWindowStateFile = () =>
join(getServerDataFolder(), '.window-state.json');
const localJavaBin = (sharedDir: string) => {
const jre = join(sharedDir, 'jre/bin', javaBin);
return jre;
};
const javaHomeBin = () => {
const javaHome = process.env['JAVA_HOME'];
if (!javaHome) return null;
const javaHomeJre = join(javaHome, 'bin', javaBin);
return javaHomeJre;
};
export const findSystemJRE = async (sharedDir: string) => {
const paths = [
localJavaBin(sharedDir),
javaHomeBin(),
...(await glob('/usr/lib/jvm/*/bin/' + javaBin)),
...(await glob('/Library/Java/JavaVirtualMachines/*/Contents/Home/bin/' + javaBin)),
];
for (const path of paths) {
if (!path) continue;
const version = await new Promise<number | null>((resolve) => {
const process = spawn(path, ['-jar', javaVersionJar], {});
let version: number | null = null;
process.stdout?.once('data', (data) => {
try {
version = parseFloat(data.toString());
} catch {
version = null;
}
});
process.on('error', () => {
resolve(null);
});
process.on('exit', () => {
resolve(version);
});
});
if (version && version >= 17) return path;
}
return null;
};
export const findServerJar = () => {
const paths = [
options.path ? path.resolve(options.path) : undefined,
app.isPackaged ? path.resolve(process.resourcesPath) : undefined,
// AppImage passes the fakeroot in `APPDIR` env var.
process.env['APPDIR']
? path.resolve(join(process.env['APPDIR'], 'usr/share/slimevr/'))
: undefined,
path.dirname(app.getPath('exe')),
// For flatpack container
path.resolve('/app/share/slimevr/'),
path.resolve('/usr/share/slimevr/'),
];
return paths
.filter((p) => !!p)
.map((p) => join(p!, 'slimevr.jar'))
.find((p) => existsSync(p));
};

View File

@@ -0,0 +1,49 @@
import { Client } from '@xhayper/discord-rpc';
import { logger } from './logger';
export const richPresence = () => {
const initialState = () => ({ ready: false, start: Date.now() });
const state = initialState();
const client = new Client({
clientId: '1237970689009647639',
transport: { type: 'ipc' },
});
client.on('ready', () => {
state.ready = true;
});
client.on('disconnected', () => {
state.ready = false;
});
return {
state,
connect: async () => {
try {
await client.login();
} catch (e) {
logger.error(e, 'unable to connect to discord rpc');
}
},
updateActivity: (content: string) => {
if (!state.ready) return;
client.user
?.setActivity({
state: content,
largeImageKey: 'icon',
startTimestamp: state.start,
})
.catch((e) => {
logger.error(e, 'unable to update rpc activity');
});
},
destroy: () => {
client.destroy();
Object.assign(state, initialState());
},
};
};
export const discordPresence = richPresence();

View File

@@ -0,0 +1,76 @@
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
import { dirname, join } from "path";
import { logger } from "./logger";
import { getGuiDataFolder } from "./paths";
export class CustomStore {
private data: Record<string, unknown> = {};
private saveTimeout: NodeJS.Timeout | null = null;
private filePath: string;
private debounceMs: number;
constructor(filePath: string, debounceMs: number = 2000) {
this.filePath = filePath;
this.debounceMs = debounceMs;
this.load();
}
private load() {
try {
if (existsSync(this.filePath)) {
const raw = readFileSync(this.filePath, 'utf-8');
this.data = JSON.parse(raw);
}
} catch (err) {
logger.error(err, `Failed to load store at ${this.filePath}`);
this.data = {};
}
}
/** Set a key and trigger the debounced auto-save */
set(key: string, value: unknown) {
this.data[key] = value;
this.triggerAutoSave();
}
get<T>(key: string): T | undefined {
return this.data[key] as T;
}
delete(key: string): boolean {
if (key in this.data) {
delete this.data[key];
this.triggerAutoSave();
return true;
}
return false;
}
private triggerAutoSave() {
if (this.saveTimeout) clearTimeout(this.saveTimeout);
this.saveTimeout = setTimeout(() => {
this.save();
}, this.debounceMs);
}
save(): boolean {
try {
if (this.saveTimeout) clearTimeout(this.saveTimeout);
const dir = dirname(this.filePath);
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
writeFileSync(this.filePath, JSON.stringify(this.data, null, 2), 'utf-8');
return true;
} catch (err) {
logger.error(err, 'Save failed', this.filePath);
return false;
}
}
}
export const stores = {
settings: new CustomStore(join(getGuiDataFolder(), 'gui-settings.dat'), 1000),
cache: new CustomStore(join(getGuiDataFolder(), 'gui-cache.dat'), 100),
};

View File

@@ -0,0 +1,50 @@
import os from 'os'
import { OSStats } from "../preload/interface";
import { ipcMain, IpcMainInvokeEvent } from 'electron';
import { IpcInvokeMap } from '../shared';
import net from 'net'
export const getPlatform = (): OSStats['type'] => {
switch (os.platform()) {
case 'darwin':
return 'macos';
case 'win32':
return 'windows';
case 'linux':
return 'linux';
default:
return 'unknown';
}
};
export const isPortAvailable = (port: number) => {
return new Promise((resolve) => {
const s = net.createServer();
s.once('error', (err) => {
s.close();
if ("code" in err && err["code"] == "EADDRINUSE") {
resolve(false);
} else {
resolve(false);
}
});
s.once('listening', () => {
resolve(true);
s.close();
});
s.listen(port);
});
};
export function handleIpc<K extends keyof IpcInvokeMap>(
channel: K,
handler: (
event: IpcMainInvokeEvent,
...args: Parameters<IpcInvokeMap[K]>
) => ReturnType<IpcInvokeMap[K]>
) {
ipcMain.handle(channel, (event, ...args) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return handler(event, ...args as any);
});
}

View File

@@ -0,0 +1,40 @@
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
import { IElectronAPI, ServerStatusEvent } from './interface';
import { IPC_CHANNELS } from '../shared';
contextBridge.exposeInMainWorld('electronAPI', {
onServerStatus: (callback) => {
const subscription = (_event: IpcRendererEvent, value: ServerStatusEvent) =>
callback(value);
ipcRenderer.on(IPC_CHANNELS.SERVER_STATUS, subscription);
return () => ipcRenderer.removeListener(IPC_CHANNELS.SERVER_STATUS, subscription);
},
openUrl: (url) => ipcRenderer.invoke(IPC_CHANNELS.OPEN_URL, url),
osStats: () => ipcRenderer.invoke(IPC_CHANNELS.OS_STATS),
close: () => ipcRenderer.invoke(IPC_CHANNELS.WINDOW_ACTIONS, 'close'),
hide: () => ipcRenderer.invoke(IPC_CHANNELS.WINDOW_ACTIONS, 'hide'),
minimize: () => ipcRenderer.invoke(IPC_CHANNELS.WINDOW_ACTIONS, 'minimize'),
maximize: () => ipcRenderer.invoke(IPC_CHANNELS.WINDOW_ACTIONS, 'maximize'),
getStorage: async (type) => {
return {
get: (key) =>
ipcRenderer.invoke(IPC_CHANNELS.STORAGE, { type, method: 'get', key }),
set: (key, value) =>
ipcRenderer.invoke(IPC_CHANNELS.STORAGE, { type, method: 'set', key, value }),
delete: (key) =>
ipcRenderer.invoke(IPC_CHANNELS.STORAGE, { type, method: 'delete', key }),
save: () => ipcRenderer.invoke(IPC_CHANNELS.STORAGE, { type, method: 'save' }),
};
},
log: (type, ...args) => ipcRenderer.invoke(IPC_CHANNELS.LOG, type, ...args),
i18nOverride: async () => ipcRenderer.invoke(IPC_CHANNELS.I18N_OVERRIDE),
showDecorations: () => {},
setTranslations: () => {},
openDialog: (options) => ipcRenderer.invoke(IPC_CHANNELS.OPEN_DIALOG, options),
saveDialog: (options) => ipcRenderer.invoke(IPC_CHANNELS.SAVE_DIALOG, options),
openConfigFolder: async () => ipcRenderer.invoke(IPC_CHANNELS.OPEN_FILE, await ipcRenderer.invoke(IPC_CHANNELS.GET_FOLDER, 'config')),
openLogsFolder: async () => ipcRenderer.invoke(IPC_CHANNELS.OPEN_FILE, await ipcRenderer.invoke(IPC_CHANNELS.GET_FOLDER, 'logs')),
openFile: (path) => ipcRenderer.invoke(IPC_CHANNELS.OPEN_FILE, path),
ghGet: (req) => ipcRenderer.invoke(IPC_CHANNELS.GH_FETCH, req),
setPresence: (options) => ipcRenderer.invoke(IPC_CHANNELS.DISCORD_PRESENCE, options)
} satisfies IElectronAPI);

65
gui/electron/preload/interface.d.ts vendored Normal file
View File

@@ -0,0 +1,65 @@
import {
OpenDialogOptions,
OpenDialogReturnValue,
SaveDialogOptions,
SaveDialogReturnValue,
} from 'electron';
export type ServerStatusEvent = {
type: 'stdout' | 'stderr' | 'error' | 'terminated' | 'other';
message: string;
};
export type OSStats = {
type: 'linux' | 'windows' | 'macos' | 'unknown';
};
export interface CrossStorage {
set(key: string, value: unknown): Promise<void>;
get<T>(key: string): Promise<T | undefined>;
delete(key: string): Promise<boolean>;
save(): Promise<boolean>;
}
export type GHGet = { type: 'fw-releases' } | { type: 'asset'; url: string };
export type GHReturn = {
asset: [number, string][] | null;
['fw-releases']:
| {
assets: { browser_download_url: string; name: string; digest: string }[];
prerelease: boolean;
tag_name: string;
body: string;
}[]
| null;
};
export type DiscordPresence = { enable: false } | { enable: true, activity: string }
export interface IElectronAPI {
onServerStatus: (cb: (data: ServerStatusEvent) => void) => () => void;
openUrl: (url: string) => Promise<void>;
osStats: () => Promise<OSStats>;
openLogsFolder: () => Promise<void>;
openConfigFolder: () => Promise<void>;
close: () => void;
hide: () => void;
minimize: () => void;
maximize: () => void;
showDecorations: (decorations: boolean) => void;
setTranslations: (translations: Record<string, string>) => void;
i18nOverride: () => Promise<string | false>;
getStorage: (type: 'settings' | 'cache') => Promise<CrossStorage>;
openDialog: (options: OpenDialogOptions) => Promise<OpenDialogReturnValue>;
saveDialog: (options: SaveDialogOptions) => Promise<SaveDialogReturnValue>;
log: (type: 'info' | 'error' | 'warn', ...args: unknown[]) => void;
openFile: (path: string) => void;
ghGet: <T extends GHGet>(options: T) => Promise<GHReturn[T['type']]>;
setPresence: (options: DiscordPresence) => void;
}
declare global {
interface Window {
electronAPI: IElectronAPI;
}
}

View File

@@ -0,0 +1,46 @@
# Copyright 2025 Eiren Rain and SlimeVR Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## QinHeng
# CH340
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="7522", MODE="0660", TAG+="uaccess"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="7523", MODE="0660", TAG+="uaccess"
# CH341
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="5523", MODE="0660", TAG+="uaccess"
# CH343
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="55D3", MODE="0660", TAG+="uaccess"
# CH9102x
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="55D4", MODE="0660", TAG+="uaccess"
## Silabs
# CP210x
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10C4", ATTRS{idProduct}=="EA60", MODE="0660", TAG+="uaccess"
## Espressif
# ESP32-S3 / ESP32-C3 / ESP32-C5 / ESP32-C6 / ESP32-C61 / ESP32-H2 / ESP32-P4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="303A", ATTRS{idProduct}=="1001", MODE="0660", TAG+="uaccess"
# ESP32-S2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="303A", ATTRS{idProduct}=="0002", MODE="0660", TAG+="uaccess"
## FTDI
# FT232BM/L/Q, FT245BM/L/Q
# FT232RL/Q, FT245RL/Q
# VNC1L with VDPS Firmware
# VNC2 with FT232Slave
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0660", TAG+="uaccess"
## SlimeVR
# smol slime dongle
SUBSYSTEM=="usb", ATTR{idVendor}=="1209", ATTR{idProduct}=="7690", MODE="0660", TAG+="uaccess"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="7690", MODE="0660", TAG+="uaccess"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 922 B

After

Width:  |  Height:  |  Size: 922 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" stroke-miterlimit="10" clip-rule="evenodd" version="1.1" viewBox="0 0 380 380" xml:space="preserve"><rect id="bg" width="380" height="380" fill="#663499" stroke-width="1" rx="76" /><g id="logo" fill="none" stroke="#fff"><path id="left" stroke-width="13.62" d="m72.867 191.74 37-39 39 36"/><path id="right" stroke-width="13.62" d="m208.87 187.74 38-35 36 38"/><path id="outer" stroke-linecap="square" stroke-width="17" d="m56.867 253.74s130.61-31.182 248 5c13.45 4.146 20.244 2.975 20-8s1.909-126.06-46-131"/></g></svg>

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 848 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

View File

@@ -1,8 +1,8 @@
public class JavaVersion {
public static void main(String[] args)
{
var version = Runtime.version().version().get(0);
System.exit(version);
System.out.println(version);
}
}

View File

@@ -0,0 +1,26 @@
#!/bin/bash
SRC="/opt/SlimeVR/69-slimevr-devices.rules"
DESTDIRS=("/lib" "/usr/lib")
if [[ ! -f "$SRC" ]]; then
echo "SlimeVR udev rules not found, serial console and dongles may not work" >&2
exit 0
fi
echo "Configuring SlimeVR udev rules..."
for DIR in "${DESTDIRS[@]}"; do
if [[ -d "$DIR" && ! -h "$DIR" ]]; then
echo "Copying rules to $DIR"
install -Dm644 "$SRC" "$DIR/udev/rules.d/69-slimevr-devices.rules"
if command -v udevadm >/dev/null 2>&1; then
udevadm control --reload-rules
udevadm trigger
fi
exit 0
fi
done
echo "Couldn't copy SlimeVR udev rules, serial console and dongles may not work" >&2

View File

@@ -0,0 +1,8 @@
#!/bin/bash
echo "Removing SlimeVR udev rules..."
rm -f "/lib/udev/rules.d/69-slimevr-devices.rules"
rm -f "/usr/lib/udev/rules.d/69-slimevr-devices.rules"
if command -v udevadm >/dev/null 2>&1; then
udevadm control --reload-rules
fi

49
gui/electron/shared.ts Normal file
View File

@@ -0,0 +1,49 @@
import {
OpenDialogOptions,
OpenDialogReturnValue,
SaveDialogOptions,
SaveDialogReturnValue,
} from 'electron';
import { DiscordPresence, GHGet, GHReturn, OSStats } from './preload/interface';
export const IPC_CHANNELS = {
SERVER_STATUS: 'server-status',
OPEN_URL: 'open-url',
OS_STATS: 'os-stats',
WINDOW_ACTIONS: 'window-actions',
LOG: 'log',
STORAGE: 'storage',
OPEN_DIALOG: 'open-dialog',
SAVE_DIALOG: 'save-dialog',
I18N_OVERRIDE: 'i18n-override',
OPEN_FILE: 'open-file',
GET_FOLDER: 'get-folder',
GH_FETCH: 'gh-fetch',
DISCORD_PRESENCE: 'discord-presence'
} as const;
export interface IpcInvokeMap {
[IPC_CHANNELS.OPEN_URL]: (url: string) => void;
[IPC_CHANNELS.OS_STATS]: () => Promise<OSStats>;
[IPC_CHANNELS.WINDOW_ACTIONS]: (action: 'close' | 'minimize' | 'maximize' | 'hide') => void;
[IPC_CHANNELS.LOG]: (type: 'info' | 'error' | 'warn', ...args: unknown[]) => void;
[IPC_CHANNELS.OPEN_DIALOG]: (
options: OpenDialogOptions
) => Promise<OpenDialogReturnValue>;
[IPC_CHANNELS.SAVE_DIALOG]: (
options: SaveDialogOptions
) => Promise<SaveDialogReturnValue>;
[IPC_CHANNELS.I18N_OVERRIDE]: () => Promise<string | false>;
[IPC_CHANNELS.STORAGE]: (args: {
type: 'settings' | 'cache';
method: 'get' | 'set' | 'delete' | 'save';
key?: string;
value?: unknown;
}) => Promise<unknown>;
[IPC_CHANNELS.OPEN_FILE]: (path: string) => void;
[IPC_CHANNELS.GET_FOLDER]: (folder: 'config' | 'logs') => string;
[IPC_CHANNELS.GH_FETCH]: <T extends GHGet>(
options: T
) => Promise<GHReturn[T['type']]>;
[IPC_CHANNELS.DISCORD_PRESENCE]: (options: DiscordPresence) => void;
}

82
gui/eslint.config.js Normal file
View File

@@ -0,0 +1,82 @@
import { FlatCompat } from '@eslint/eslintrc';
import eslint from '@eslint/js';
import globals from 'globals';
import tseslint from 'typescript-eslint';
import stylistic from '@stylistic/eslint-plugin';
const compat = new FlatCompat();
export const gui = [
eslint.configs.recommended,
...tseslint.configs.recommended,
...compat.extends('plugin:@dword-design/import-alias/recommended'),
...compat.plugins('eslint-plugin-react-hooks'),
// Add import-alias rule inside compat because plugin doesn't like flat configs
...compat.config({
rules: {
'@dword-design/import-alias/prefer-alias': [
'error',
{
alias: {
'@': './src/',
},
},
],
},
}),
{
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: tseslint.parser,
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
globals: {
...globals.browser,
...globals.jest,
},
},
files: ['src/**/*.{js,jsx,ts,tsx,json}'],
plugins: {
'@typescript-eslint': tseslint.plugin,
'@stylistic': stylistic,
},
rules: {
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'spaced-comment': 'error',
quotes: ['error', 'single'],
'no-duplicate-imports': 'error',
'no-inline-styles': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'react/no-unescaped-entities': 'off',
camelcase: 'error',
'@typescript-eslint/no-unused-vars': [
'warn',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
ignoreRestSiblings: true,
},
],
'@stylistic/jsx-self-closing-comp': 'error',
},
settings: {
'import/resolver': {
typescript: {},
},
react: {
version: 'detect',
},
},
},
// Global ignore
{
ignores: ['**/firmware-tool-api/'],
},
];
export default gui;

View File

@@ -10,7 +10,7 @@
<link rel="manifest" href="/manifest.json" />
<title>React App</title>
<title>SlimeVR GUI</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>

View File

@@ -0,0 +1,28 @@
import {
generateSchemaTypes,
generateReactQueryComponents,
} from '@openapi-codegen/typescript';
import { defineConfig } from '@openapi-codegen/cli';
import dotenv from 'dotenv';
dotenv.config()
export default defineConfig({
firmwareTool: {
from: {
source: 'url',
url: process.env.FIRMWARE_TOOL_SCHEMA_URL ?? 'http://localhost:3000/api-json',
},
outputDir: 'src/firmware-tool-api',
to: async (context) => {
const filenamePrefix = 'firmwareTool';
const { schemasFiles } = await generateSchemaTypes(context, {
filenamePrefix,
});
await generateReactQueryComponents(context, {
filenamePrefix,
schemasFiles,
});
},
},
});

View File

@@ -1,105 +1,113 @@
{
"name": "slimevr-ui",
"version": "0.5.1",
"private": true,
"name": "slimevr",
"version": "0.0.0",
"author": "SlimeVR Team <contact@slimevr.dev>",
"homepage": "https://slimevr.dev",
"type": "module",
"dependencies": {
"@fluent/bundle": "^0.18.0",
"@fluent/react": "^0.15.2",
"@fontsource/poppins": "^5.0.12",
"@formatjs/intl-localematcher": "^0.2.32",
"@react-three/drei": "^9.105.1",
"@react-three/fiber": "^8.16.1",
"@tauri-apps/api": "=2.0.0-beta.7",
"@tauri-apps/plugin-dialog": "=2.0.0-beta.2",
"@tauri-apps/plugin-fs": "=2.0.0-beta.2",
"@tauri-apps/plugin-os": "=2.0.0-beta.2",
"@tauri-apps/plugin-shell": "=2.0.0-beta.2",
"@tauri-apps/plugin-store": "=2.0.0-beta.2",
"@vitejs/plugin-react": "^4.2.1",
"browser-fs-access": "^0.35.0",
"browserslist": "^4.23.0",
"classnames": "^2.5.1",
"eslint-config-react-app": "^7.0.1",
"flatbuffers": "^22.10.26",
"identity-obj-proxy": "^3.0.0",
"intl-pluralrules": "^2.0.1",
"ip-num": "^1.5.1",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^9.5.2",
"prompts": "^2.4.2",
"react": "^18.2.0",
"react-dev-utils": "^12.0.1",
"react-dom": "^18.2.0",
"react-error-boundary": "^4.0.13",
"react-helmet": "^6.1.0",
"react-hook-form": "^7.51.0",
"react-modal": "^3.16.1",
"react-responsive": "^10.0.0",
"react-router-dom": "^6.22.3",
"semver": "^7.6.0",
"solarxr-protocol": "file:../solarxr-protocol",
"three": "^0.163.0",
"ts-pattern": "^5.0.8",
"typescript": "^5.4.3"
"@ryuziii/discord-rpc": "1.0.1-rc.1",
"@xhayper/discord-rpc": "^1.3.0",
"commander": "^14.0.3",
"discord-rich-presence": "^0.0.8",
"glob": "^13.0.3",
"open": "^11.0.0",
"pino": "^10.3.1",
"pino-pretty": "^13.1.3",
"pino-roll": "^4.0.0"
},
"scripts": {
"start": "vite --force",
"build": "vite build",
"dev": "tauri dev",
"skipbundler": "tauri build --no-bundle",
"tauri": "tauri",
"lint": "tsc --noEmit && eslint --max-warnings=0 \"src/**/*.{js,jsx,ts,tsx,json}\" && prettier --check \"src/**/*.{js,jsx,ts,tsx,css,md,json}\"",
"gui": "electron-vite dev --config electron.vite.config.ts --watch",
"build": "electron-vite build --config electron.vite.config.ts",
"package": "electron-builder",
"package:build": "pnpm build && pnpm package",
"preview": "electron-vite preview --config electron.vite.config.ts",
"skipbundler": "vite build",
"lint": "tsc --noEmit && eslint --max-warnings=0 \"src/**/*.{js,jsx,ts,tsx,json}\" && prettier --check \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
"lint:fix": "tsc --noEmit && eslint --fix --max-warnings=0 \"src/**/*.{js,jsx,ts,tsx,json}\" && pnpm run format",
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,md,json}\"",
"preview-vite": "vite preview",
"javaversion-build": "cd src-tauri/src/ && javac JavaVersion.java && jar cvfe JavaVersion.jar JavaVersion JavaVersion.class"
},
"eslintConfig": {
"extends": [
"react-app"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,scss,md,json}\"",
"javaversion-build": "cd electron/resources/java-version/ && javac JavaVersion.java && jar cvfe JavaVersion.jar JavaVersion JavaVersion.class",
"gen:javaversion": "cd electron/resources/java-version/ && javac JavaVersion.java && jar cvfe JavaVersion.jar JavaVersion JavaVersion.class",
"gen:firmware-tool": "openapi-codegen gen firmwareTool"
},
"devDependencies": {
"@dword-design/eslint-plugin-import-alias": "^4.0.9",
"@tailwindcss/forms": "^0.5.7",
"@tauri-apps/cli": "=2.0.0-beta.12",
"@electron/asar": "^4.0.1",
"@fluent/bundle": "^0.18.0",
"@fluent/react": "^0.15.2",
"@fontsource/poppins": "^5.1.0",
"@formatjs/intl-localematcher": "^0.2.32",
"@hookform/resolvers": "^3.6.0",
"@openapi-codegen/cli": "^3.1.0",
"@openapi-codegen/typescript": "^8.0.2",
"@react-hookz/deep-equal": "^3.0.3",
"@sentry/react": "10.29.0",
"@sentry/vite-plugin": "^2.22.7",
"@stylistic/eslint-plugin": "^5.5.0",
"@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15",
"@tanstack/react-query": "^5.48.0",
"@tweenjs/tween.js": "^25.0.0",
"@twemoji/svg": "^15.0.0",
"@types/file-saver": "^2.0.7",
"@types/react": "^18.2.73",
"@types/react-dom": "^18.2.23",
"@types/node": "^24.3.1",
"@types/react": "^18.3.11",
"@types/react-dom": "^18.3.0",
"@types/react-helmet": "^6.1.11",
"@types/react-modal": "3.16.3",
"@types/semver": "^7.5.8",
"@types/three": "^0.163.0",
"@typescript-eslint/eslint-plugin": "^7.4.0",
"@typescript-eslint/parser": "^7.4.0",
"autoprefixer": "^10.4.19",
"cross-env": "^7.0.3",
"eslint": "^8.57.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.34.1",
"eslint-plugin-react-hooks": "^4.6.0",
"postcss": "^8.4.38",
"prettier": "^3.2.5",
"pretty-quick": "^4.0.0",
"@typescript-eslint/eslint-plugin": "^8.48.1",
"@typescript-eslint/parser": "^8.48.1",
"@vitejs/plugin-react": "^4.3.2",
"ajv": "^8.17.1",
"autoprefixer": "^10.4.20",
"browser-fs-access": "^0.35.0",
"classnames": "^2.5.1",
"convert": "^5.12.0",
"dmg-license": "^1.0.11",
"dotenv": "^16.4.5",
"electron": "^40.3.0",
"electron-builder": "^26.7.0",
"electron-vite": "^5.0.0",
"eslint": "^9.39.1",
"eslint-import-resolver-typescript": "^3.10.1",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1",
"flatbuffers": "22.10.26",
"globals": "^15.10.0",
"intl-pluralrules": "^2.0.1",
"ip-num": "^1.5.1",
"jotai": "^2.12.2",
"prettier": "^3.3.3",
"prompts": "^2.4.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-error-boundary": "^4.0.13",
"react-helmet": "^6.1.0",
"react-hook-form": "^7.63.0",
"react-markdown": "^9.0.1",
"react-modal": "^3.16.1",
"react-responsive": "^10.0.0",
"react-router-dom": "^6.26.2",
"remark-gfm": "^4.0.0",
"rollup-plugin-visualizer": "^5.12.0",
"sass": "^1.79.4",
"semver": "^7.6.3",
"solarxr-protocol": "file:../solarxr-protocol",
"spdx-satisfies": "^5.0.1",
"tailwind-gradient-mask-image": "^1.2.0",
"tailwindcss": "^3.4.3",
"vite": "^5.2.7"
}
"tailwindcss": "^3.4.13",
"three": "^0.163.0",
"ts-pattern": "^5.4.0",
"typescript": "^5.6.3",
"typescript-eslint": "^8.46.2",
"use-double-tap": "^1.3.6",
"uuid": "^13.0.0",
"vite": "^5.4.8",
"yup": "^1.4.0"
},
"main": "./out/main/index.js"
}

Binary file not shown.

View File

@@ -7,8 +7,13 @@
## Websocket (server) status
websocket-connecting = يتم التوصيل بالسيرفر
websocket-connection_lost = انقطع الاتصال بالسيرفر. يتم إعادة التوصيل...
websocket-connecting = جاري التحميل...
websocket-connection_lost = تعطل الخادم!
websocket-connection_lost-desc = يبدو أن خادم SlimeVR تعطل. تحقق من السجلات وأعد تشغيل البرنامج
websocket-timedout = تعذر الاتصال بالخادم
websocket-timedout-desc = يبدو أن خادم SlimeVR قد تعطل أو انتهت مهلته. تحقق من السجلات وأعد تشغيل البرنامج
websocket-error-close = الخروج من SlimeVR
websocket-error-logs = افتح مجلد السجلات
## Update notification
@@ -23,6 +28,11 @@ tips-find_tracker = لست متأكد من أجهزة التعقب؟ قم بتح
tips-do_not_move_heels = يرجى عدم تحريك كاحليك أثناء التسجيل!
tips-file_select = اسحب الملفات وأفلتها لاستخدامها أو <u> تصفح </ u>
tips-tap_setup = يمكنك النقر ببطء مرتين على جهاز التعقب لاختياره بدلاً من تحديده من القائمة.
tips-turn_on_tracker = هل تستخدم أجهزة تعقب SlimeVR الرسمية؟ تذكر <b><em> أن تشغل أجهزة التعقب </em></b> بعد توصيلها بالكمبيوتر!
tips-failed_webgl = فشل تهيئة WebGL.
## Units
## Body parts
@@ -47,12 +57,72 @@ body_part-LEFT_HAND = اليد اليسرى
body_part-LEFT_UPPER_LEG = الفخذ الأيسر
body_part-LEFT_LOWER_LEG = الكاحل الأيسر
body_part-LEFT_FOOT = القدم اليسرى
body_part-LEFT_THUMB_METACARPAL = عظم مشط الإبهام الأيسر
body_part-LEFT_THUMB_PROXIMAL = الإبهام الأيسر القريب
body_part-LEFT_THUMB_DISTAL = الإبهام الأيسر البعيد
body_part-LEFT_INDEX_PROXIMAL = السبابة اليسرى القريبة
body_part-LEFT_INDEX_INTERMEDIATE = السبابة اليسرى المتوسطة
body_part-LEFT_INDEX_DISTAL = السبابة اليسرى البعيدة
body_part-LEFT_MIDDLE_PROXIMAL = الجزء الأوسط الأيسر القريب
body_part-LEFT_MIDDLE_INTERMEDIATE = الوسط الأيسر المتوسط
body_part-LEFT_MIDDLE_DISTAL = الجزء الأوسط الأيسر البعيد
body_part-LEFT_RING_PROXIMAL = الحلقة اليسرى القريبة
body_part-LEFT_RING_INTERMEDIATE = الحلقة اليسرى المتوسطة
body_part-LEFT_RING_DISTAL = الحلقة اليسرى البعيدة
body_part-LEFT_LITTLE_PROXIMAL = الجزء الأيسر الصغير القريب
body_part-LEFT_LITTLE_INTERMEDIATE = اليسار الصغير المتوسط
body_part-LEFT_LITTLE_DISTAL = الجزء البعيد الأيسر الصغير
body_part-RIGHT_THUMB_METACARPAL = مشط الإبهام الأيمن
body_part-RIGHT_THUMB_PROXIMAL = الإبهام الأيمن القريب
body_part-RIGHT_THUMB_DISTAL = الإبهام الأيمن البعيد
body_part-RIGHT_INDEX_PROXIMAL = السبابة اليمنى القريبة
body_part-RIGHT_INDEX_INTERMEDIATE = السبابة اليمنى المتوسطة
body_part-RIGHT_INDEX_DISTAL = السبابة اليمنى البعيدة
body_part-RIGHT_MIDDLE_PROXIMAL = منتصف اليمين القريب
body_part-RIGHT_MIDDLE_INTERMEDIATE = الوسط الأيمن المتوسط
body_part-RIGHT_MIDDLE_DISTAL = منتصف اليمين البعيد
body_part-RIGHT_RING_PROXIMAL = الحلقة اليمنى القريبة
body_part-RIGHT_RING_INTERMEDIATE = الحلقة اليمنى المتوسطة
body_part-RIGHT_RING_DISTAL = الحلقة اليمنى البعيدة
body_part-RIGHT_LITTLE_PROXIMAL = الجزء القريب الأيمن الصغير
body_part-RIGHT_LITTLE_INTERMEDIATE = المتوسط ​​الصغير الأيمن
body_part-RIGHT_LITTLE_DISTAL = الجزء البعيد الصغير الأيمن
## BoardType
board_type-UNKNOWN = مجهول
board_type-NODEMCU = NodeMCU
board_type-CUSTOM = لوحة مخصصة
board_type-WROOM32 = WROOM32
board_type-WEMOSD1MINI = Wemos D1 Mini
board_type-TTGO_TBASE = TTGO T-Base
board_type-ESP01 = ESP-01
board_type-SLIMEVR = سلايم في آر
board_type-LOLIN_C3_MINI = Lolin C3 Mini
board_type-BEETLE32C3 = Beetle ESP32-C3
board_type-ESP32C3DEVKITM1 = Espressif ESP32-C3 DevKitM-1
board_type-OWOTRACK = owoTrack
board_type-WRANGLER = رانجلر جويكونز
board_type-MOCOPI = سوني موكوبي (Mocopi)
board_type-WEMOSWROOM02 = Wemos Wroom-02 D1 Mini
board_type-XIAO_ESP32C3 = Seeed Studio XIAO ESP32C3
board_type-HARITORA = Haritora
board_type-ESP32C6DEVKITC1 = Espressif ESP32-C6 DevKitC-1
board_type-GLOVE_IMU_SLIMEVR_DEV = قفاز SlimeVR تطوير IMU
## Proportions
skeleton_bone-NONE = غير محدد
skeleton_bone-HEAD = إمالة الرأس
skeleton_bone-HEAD-desc =
هذه هي المسافة من سماعة الرأس إلى منتصف رأسك.
لضبط المسافة ، هز رأسك من اليسار إلى اليمين كما لو كنت لا توافق وقم بتعديله
حتى أي حركة في أجهزة التتبع الأخرى لا تكاد تذكر.
skeleton_bone-NECK = طول العنق
skeleton_bone-NECK-desc =
هذه هي المسافة من منتصف رأسك إلى قاعدة رقبتك.
لضبطها ، حرك رأسك لأعلى ولأسفل كما لو كنت تومئ رأسك أو تميل رأسك
إلى اليسار واليمين وقم بتعديله حتى تصبح أي حركة في أجهزة التتبع الأخرى ضئيلة.
skeleton_bone-torso_group = طول الجذع
skeleton_bone-UPPER_CHEST = طول أعلى الصدر
skeleton_bone-CHEST_OFFSET = درجة تشريد الصدر
@@ -79,6 +149,14 @@ skeleton_bone-ELBOW_OFFSET = درجة تشريد الكوع
## Tracker reset buttons
reset-reset_all = إعادة تعيين جميع النسب
reset-reset_all_warning-v2 =
<b>تحذير:</b> ستتم إعادة تعيين النسب إلى الإعدادات الافتراضية التي تم تحجيمها إلى الارتفاع الذي تم تكوينه.
هل أنت متأكد من أنك تريد القيام بذلك؟
reset-reset_all_warning-reset = إعادة تعيين النسب
reset-reset_all_warning-cancel = إلغاء
reset-reset_all_warning_default-v2 =
<b>تحذير:</b> لم يتم ضبط طولك، وسيتم إعادة تعيين نسبك إلى الإعدادات الافتراضية مع الارتفاع الافتراضي.
هل أنت متأكد من أنك تريد القيام بذلك؟
reset-full = اعاده تعيين
reset-mounting = إعادة تعيين التركيب
reset-yaw = إعادة تعيين الانعراج
@@ -122,7 +200,7 @@ widget-overlay-is_mirrored_label = عكس تراكب الشاشة
widget-drift_compensation-clear = حذف تعويض الانجراف
## Widget: Clear Reset Mounting
## Widget: Clear Mounting calibration
widget-clear_mounting = مسح إعادة تعيين التركيب
@@ -140,9 +218,17 @@ widget-developer_mode-more_info = المزيد
## Widget: IMU Visualizer
widget-imu_visualizer = دوران
widget-imu_visualizer-preview = عرض
widget-imu_visualizer-hide = إخفاء
widget-imu_visualizer-rotation_raw = صافي
widget-imu_visualizer-rotation_preview = عرض مسبق
widget-imu_visualizer-rotation_hide = إخفاء
widget-imu_visualizer-acceleration = التسارع
widget-imu_visualizer-position = الموضع
## Widget: Skeleton Visualizer
widget-skeleton_visualizer-preview = إظهار الهيكل العظمي
widget-skeleton_visualizer-hide = إخفاء
## Tracker status
@@ -152,6 +238,7 @@ tracker-status-error = خطأ
tracker-status-disconnected = فقد الاتصال
tracker-status-occluded = محجوب
tracker-status-ok = حسنًا
tracker-status-timed_out = انتهت المهله
## Tracker status columns
@@ -188,8 +275,17 @@ tracker-infos-url = عنوان URL لجهاز التعقب
tracker-infos-version = إصدار البرنامج الثابت
tracker-infos-hardware_rev = مراجعة الأجهزة
tracker-infos-hardware_identifier = معرف الجهاز
tracker-infos-data_support = دعم البيانات
tracker-infos-imu = مستشعر IMU
tracker-infos-board_type = اللوحة الرئيسية
tracker-infos-network_version = نسخة البروتوكول
tracker-infos-magnetometer = المقياس المغناطيسي
tracker-infos-magnetometer-status-v1 =
{ $status ->
[DISABLED] ملغي
[ENABLED] فعال
*[NOT_SUPPORTED] غير مدعوم
}
## Tracker settings
@@ -204,11 +300,25 @@ tracker-settings-mounting_section-edit = تعديل التركيب
tracker-settings-drift_compensation_section = السماح بتعويض الانجراف
tracker-settings-drift_compensation_section-description = هل يجب أن يعوض جهاز التعقب عن انحرافه عند تمكين تعويض الانجراف؟
tracker-settings-drift_compensation_section-edit = السماح بتعويض الانجراف
tracker-settings-use_mag = اسمح بالمقياس المغناطيسي على هذا المتتبع
# Multiline!
tracker-settings-use_mag-description =
هل يجب أن يستخدم هذا المتتبع مقياس المغناطيسية لتقليل الانجراف عند السماح باستخدام المقياس المغناطيسي؟ <b>من فضلا لا تغلق جهاز التتبع الخاص بك أثناء تبديل هذا!</b>
تحتاج إلى السماح باستخدام مقياس المغناطيسية أولا ، <magSetting>انقر هنا للذهاب إلى الإعداد</magSetting>.
tracker-settings-use_mag-label = السماح بالمقياس المغناطيسي
# The .<name> means it's an attribute and it's related to the top key.
# In this case that is the settings for the assignment section.
tracker-settings-name_section = اسم جهاز التعقب
tracker-settings-name_section-description = أعطها لقب لطيف :)
tracker-settings-name_section-placeholder = ساق نايتي بيست اليسرى
tracker-settings-name_section-label = اسم جهاز التعقب
tracker-settings-forget = انسي جهاز التعقب
tracker-settings-forget-description = يزيل جهاز التعقب من خادم SlimeVR ويمنعه من الاتصال به حتى يتم إعادة تشغيل الخادم. لن تضيع تكوين جهاز التعقب.
tracker-settings-forget-label = ننسى جهاز التعقب
tracker-settings-update-up_to_date = حديث
tracker-settings-update = التحديث الآن
tracker-settings-update-title = إصدار البرنامج الثابت
## Tracker part card info
@@ -284,6 +394,9 @@ settings-sidebar-utils = الأدوات المساعدة
settings-sidebar-serial = وحدة التحكم التسلسلية
settings-sidebar-appearance = مظهر
settings-sidebar-notifications = إشعارات
settings-sidebar-behavior = سلوك
settings-sidebar-firmware-tool = أداة برامج الجهاز المصنوع بنفسك
settings-sidebar-advanced = متقدم
## SteamVR settings
@@ -298,10 +411,22 @@ settings-general-steamvr-description =
مفيد فقط للألعاب أو التطبيقات التي تدعم أجهزة تعقب معينة.
settings-general-steamvr-trackers-waist = الخصر
settings-general-steamvr-trackers-chest = الصدر
settings-general-steamvr-trackers-feet = القدمين
settings-general-steamvr-trackers-knees = الركبتين
settings-general-steamvr-trackers-elbows = الكوعين
settings-general-steamvr-trackers-hands = اليدين
settings-general-steamvr-trackers-left_foot = القدم اليسرى
settings-general-steamvr-trackers-right_foot = القدم اليمنى
settings-general-steamvr-trackers-left_knee = الركبة اليسرى
settings-general-steamvr-trackers-right_knee = الركبة اليمنى
settings-general-steamvr-trackers-left_elbow = الكوع الأيسر
settings-general-steamvr-trackers-right_elbow = الكوع الأيمن
settings-general-steamvr-trackers-left_hand = اليد اليسرى
settings-general-steamvr-trackers-right_hand = اليد اليمنى
settings-general-steamvr-trackers-tracker_toggling = تعيين جهاز التعقب تلقائي
settings-general-steamvr-trackers-tracker_toggling-description = يتعامل تلقائيا مع تبديل أجهزة تعقب SteamVR أو إيقاف تشغيلها اعتمادا على مهام التعقب الحالية
settings-general-steamvr-trackers-tracker_toggling-label = تعيين جهاز التعقب التلقائي
settings-general-steamvr-trackers-hands-warning =
<b>تحذير:</b> ستتجاوز أجهزة تعقب اليد وحدات التحكم الخاصة بك.
هل أنت متأكد؟
settings-general-steamvr-trackers-hands-warning-cancel = إلغاء
settings-general-steamvr-trackers-hands-warning-done = نعم
## Tracker mechanics
@@ -319,14 +444,39 @@ settings-general-tracker_mechanics-filtering-type-smoothing-description = ينع
settings-general-tracker_mechanics-filtering-type-prediction = التنبؤ
settings-general-tracker_mechanics-filtering-type-prediction-description = يقلل من وقت الإستجابة ويجعل الحركات أكثر سرعة ، ولكنه قد يزيد من التوتر.
settings-general-tracker_mechanics-filtering-amount = المبلغ
settings-general-tracker_mechanics-yaw-reset-smooth-time = إعادة ضبط الانعراج على نحو سلس (يتعطل التنعيم 0 ثوان)
settings-general-tracker_mechanics-drift_compensation = تعويض الانجراف
# This cares about multilines
settings-general-tracker_mechanics-drift_compensation-description =
يعوض عن انجراف انعراج وحدة IMU بتطبيق دوران عكسي.
قم بتغيير كمية التعويض وعدد عمليات إعادة التعيين التي يتم أخذها في الاعتبار.
settings-general-tracker_mechanics-drift_compensation-enabled-label = تعويض الانجراف
settings-general-tracker_mechanics-drift_compensation-prediction = التنبؤ بتعويض الانحراف
# This cares about multilines
settings-general-tracker_mechanics-drift_compensation-prediction-description =
يتنبأ بتعويض انحراف الانعراج خارج النطاق المقاس مسبقا.
قم بتمكين هذا إذا كانت أجهزة التتبع تدور باستمرار على محور الانعراج.
settings-general-tracker_mechanics-drift_compensation-prediction-label = التنبؤ بتعويض الانحراف
settings-general-tracker_mechanics-drift_compensation_warning =
<b>تحذير:</b> استخدم تعويض الانحراف فقط إذا كنت بحاجة إلى إعادة الضبط
في كثير من الأحيان (كل ~ 5-10 دقائق).
تتضمن بعض وحدات IMU المعرضة لإعادة الضبط المتكرر ما يلي:
Joy-Cons و owoTrack و MPUs (بدون برامج ثابتة حديثة).
settings-general-tracker_mechanics-drift_compensation_warning-cancel = إلغاء
settings-general-tracker_mechanics-drift_compensation_warning-done = أتفهم
settings-general-tracker_mechanics-drift_compensation-amount-label = مبلغ التعويض
settings-general-tracker_mechanics-drift_compensation-max_resets-label = استخدام ما يصل إلى x عمليات إعادة التعيين الأخيرة
settings-general-tracker_mechanics-save_mounting_reset = حفظ معايرة إعادة ضبط التركيب التلقائي
settings-general-tracker_mechanics-save_mounting_reset-description =
يحفظ معايرة إعادة تعيين التثبيت التلقائي لأجهزة التتبع بين عمليات إعادة التشغيل. مفيد
عند ارتداء بدلة حيث لا تتحرك المتتبعات بين الجلسات. <b>لا ينصح به للمستخدمين العاديين!</b>
settings-general-tracker_mechanics-save_mounting_reset-enabled-label = حفظ إعادة تعيين التركيب
settings-general-tracker_mechanics-use_mag_on_all_trackers = استخدم المقياس المغناطيسي على جميع أجهزة تتبع IMU التي تدعمه
settings-general-tracker_mechanics-use_mag_on_all_trackers-description =
يستخدم المقياس المغناطيسي على جميع أجهزة التعقب التي تحتوي على برامج ثابتة متوافقة له ، مما يقلل من الانحراف في البيئات المغناطيسية المستقرة.
يمكن تعطيله لكل جهاز تعقب في إعدادات التعقب. <b>من فضلك لا تغلق أيا من أجهزة التعقب أثناء تبديل هذا!</b>
settings-general-tracker_mechanics-use_mag_on_all_trackers-label = استخدم المقياس المغناطيسي على أجهزة التعقب
## FK/Tracking settings
@@ -348,11 +498,17 @@ settings-general-fk_settings-leg_tweak-floor_clip-description = يمكن أن ي
settings-general-fk_settings-leg_tweak-toe_snap-description = الانجذاب إلى أصابع القدم يحاول تخمين دوران قدميك إذا لم تكن أجهزة تعقب القدم قيد الاستخدام.
settings-general-fk_settings-leg_tweak-foot_plant-description = تثبيت اصبع القدم يحاول تخمين دوران قدميك إذا لم تكن أجهزة تعقب القدم قيد الاستخدام.
settings-general-fk_settings-leg_fk = تعقب الساق
settings-general-fk_settings-leg_fk-reset_mounting_feet-description = تمكين إعادة ضبط تركيب القدمين عن طريق المشي على رؤوس الأصابع.
settings-general-fk_settings-leg_fk-reset_mounting_feet = إعادة تعيين تركيب القدمين
settings-general-fk_settings-enforce_joint_constraints = حدود الهيكل العظمي
settings-general-fk_settings-enforce_joint_constraints-enforce_constraints = فرض القيود
settings-general-fk_settings-enforce_joint_constraints-enforce_constraints-description = منع المفاصل من الدوران إلى ما بعد الحد الأقصى
settings-general-fk_settings-enforce_joint_constraints-correct_constraints = التصحيح مع قيود
settings-general-fk_settings-enforce_joint_constraints-correct_constraints-description = تصحيح دوران المفاصل عندما تتجاوز حدودها
settings-general-fk_settings-arm_fk = تعقب الذراع
settings-general-fk_settings-arm_fk-description = تغيير طريقة تعقب الذراعين.
settings-general-fk_settings-arm_fk-force_arms = إجبار الذراعين من ايتش أم دي
settings-general-fk_settings-reset_settings = إعادة تعيين الإعدادات
settings-general-fk_settings-reset_settings-reset_hmd_pitch-description = أعد تعيين درجة جهاز الرأس (الدوران الرأسي) عند إجراء إعادة تعيين كاملة. مفيد في حالة ارتداء جهاز الرأس على الجبهة ل VTubing أو mocap. لا تقم بتمكين لVR.
settings-general-fk_settings-reset_settings-reset_hmd_pitch = إعادة تعيين درجة جهاز الرأس
settings-general-fk_settings-arm_fk-reset_mode-description = قم بتغيير وضع الذراع المتوقع لإعادة ضبط المتصاعد.
settings-general-fk_settings-arm_fk-back = العودة
settings-general-fk_settings-arm_fk-back-description = الوضع الافتراضي، مع وضع الذراعين العلويين إلى الخلف والساعدين للأمام.
@@ -378,9 +534,6 @@ settings-general-fk_settings-skeleton_settings-interp_knee_tracker_ankle = مت
settings-general-fk_settings-skeleton_settings-interp_knee_ankle = متوسط انحراف الركبتين ولفة مع الكاحلين
settings-general-fk_settings-self_localization-title = وضع Mocap
settings-general-fk_settings-self_localization-description = يسمح وضع Mocap للهيكل العظمي بتعقب موضعه تقريبا بدون سماعة رأس أو أجهزة تعقب أخرى. لاحظ أن هذا يتطلب أجهزة تعقب القدمين والرأس للعمل ولا تزال تجريبية.
settings-general-fk_settings-vive_emulation-title = محاكاة فايف
settings-general-fk_settings-vive_emulation-description = محاكاة مشاكل تعقب الخصر التي تعاني منها أجهزة تعقب فايف. هذه مزحة وتجعل التتبع أسوأ.
settings-general-fk_settings-vive_emulation-label = تمكين محاكاة فايف
## Gesture control settings (tracker tapping)
@@ -429,6 +582,9 @@ settings-general-interface-dev_mode = وضع المطوّر
settings-general-interface-dev_mode-description = يمكن أن يكون هذا الوضع مفيدًا إذا كنت بحاجة إلى بيانات متعمقة أو للتفاعل مع أجهزة التعقب المتصلة على مستوى أكثر تقدمًا.
settings-general-interface-dev_mode-label = وضع المطوّر
settings-general-interface-theme = موضوع اللون
settings-general-interface-show-navbar-onboarding = إظهار "{ navbar-onboarding }" على قائمة التنقل
settings-general-interface-show-navbar-onboarding-description = يغير هذا إذا ظهر الزر "{ navbar-onboarding }" على قائمة التنقل.
settings-general-interface-show-navbar-onboarding-label = إظهار "{ navbar-onboarding }"
settings-general-interface-lang = اختر اللغة
settings-general-interface-lang-description = قم بتغيير اللغة الافتراضية التي تريد استخدامها.
settings-general-interface-lang-placeholder = اختر اللغة التي تريد استخدامها
@@ -440,6 +596,9 @@ settings-interface-appearance-font-os_font = خط نظام التشغيل
settings-interface-appearance-font-slime_font = الخط الافتراضي
settings-interface-appearance-font_size = قياس الخط الأساسي
settings-interface-appearance-font_size-description = يؤثر هذا على حجم خط الواجهة بأكملها باستثناء لوحة الإعدادات هذه.
settings-interface-appearance-decorations = استخدم الزخارف الأصلية للنظام
settings-interface-appearance-decorations-description = لن يؤدي هذا إلى عرض الشريط الأعلى للواجهة وسيستخدم نظام التشغيل بدلا من ذلك.
settings-interface-appearance-decorations-label = استخدم الزخارف الأصلية
## Notification settings
@@ -451,6 +610,37 @@ settings-general-interface-feedback_sound = صوت ردود الفعل
settings-general-interface-feedback_sound-description = سيصدر هذا الخيار صوتًا عند تشغيل إعادة الضبط
settings-general-interface-feedback_sound-label = صوت ردود الفعل
settings-general-interface-feedback_sound-volume = حجم صوت ردود الفعل
settings-general-interface-connected_trackers_warning = تحذير عن أجهزة التعقب المتصلة
settings-general-interface-connected_trackers_warning-description = سيعرض هذا الخيار نافذة كل مرة تحاول فيها الخروج من SlimeVR أثناء وجود جهاز أو أكثر من أجهزة التعقب المتصلة. سيذكرك بإيقاف تشغيل أجهزة التعقب عند الانتهاء للحفاظ على عمر البطارية.
settings-general-interface-connected_trackers_warning-label = تحذير عن أجهزة التعقب المتصلة عند الخروج
## Behavior settings
settings-interface-behavior = السلوك
settings-general-interface-use_tray = تصغير إلى علبة النظام
settings-general-interface-use_tray-description = يتيح لك إغلاق النافذة دون إغلاق خادم SlimeVR حتى تتمكن من الاستمرار في استخدامه دون إزعاجك من واجهة المستخدم الرسومية.
settings-general-interface-use_tray-label = تصغير إلى علبة النظام
settings-general-interface-discord_presence = مشاركة النشاط على Discord
settings-general-interface-discord_presence-description = يخبر عميل Discord الخاص بك أنك تستخدم SlimeVR جنبا إلى جنب مع عدد أجهزة تعقب IMU التي تستخدمها.
settings-general-interface-discord_presence-label = مشاركة النشاط على Discord
settings-general-interface-discord_presence-message =
{ $amount ->
[0] صفر
[zero] صفر
[one] واحد
[two] اثنان
[few] قليل
[many] كثيرة
*[other] أخرى
}
settings-interface-behavior-error_tracking = جمع الأخطاء عبر Sentry.io
settings-interface-behavior-error_tracking-description_v2 =
<h1>هل توافق على جمع بيانات الخطأ مجهولة المصدر؟</h1>
<b>نحن لا نجمع معلومات شخصية</b> مثل عنوان IP الخاص بك أو بيانات الاعتماد اللاسلكية. يقدر SlimeVR خصوصيتك!
لتوفير أفضل تجربة للمستخدم، نقوم بجمع تقارير الأخطاء ومقاييس الأداء ومعلومات نظام التشغيل مجهولة المصدر. يساعدنا هذا في اكتشاف الأخطاء والمشكلات المتعلقة ب SlimeVR. يتم جمع هذه المقاييس عبر Sentry.io.
settings-interface-behavior-error_tracking-label = إرسال الأخطاء إلى المطورين
## Serial settings
@@ -469,9 +659,11 @@ settings-serial-factory_reset-warning =
مما يعني أن إعدادات واي فاي والمعايرة <b>ستفقد جميعا!</b>
settings-serial-factory_reset-warning-ok = أنا أعرف ماذا أفعل
settings-serial-factory_reset-warning-cancel = إلغاء
settings-serial-get_infos = احصل على معلومات
settings-serial-serial_select = اختر منفذ تسلسلي
settings-serial-auto_dropdown_item = تلقائي
settings-serial-get_wifi_scan = احصل على فحص WiFi
settings-serial-file_type = نص عادي
settings-serial-save_logs = حفظ في ملف
## OSC router settings
@@ -502,14 +694,22 @@ settings-osc-router-network-address-placeholder = عنوان آي بي في 4
settings-osc-vrchat = أجهزة تعقب "في ار تشات أوه أس سي"
# This cares about multilines
settings-osc-vrchat-description =
قم بتغيير الإعدادات الخاصة ب في ار تشات لتلقي بيانات ايتش أم دي وإرسالها
بيانات أجهزة تعقب لتعقب الجسم (يعمل على كوست مستقل).
settings-osc-vrchat-description-v1 =
تغيير الإعدادات الخاصة بمعيار أجهزة تعقب OSC المستخدم لإرسال
بيانات التعقب إلى التطبيقات التي لا تحتوي على SteamVR (مثل Quest المستقل).
تأكد من تمكين OSC في VRChat عبر قائمة الإجراءات ضمن OSC > ممكن.
settings-osc-vrchat-enable = تمكين
settings-osc-vrchat-enable-description = بتبديل إرسال واستقبال البيانات.
settings-osc-vrchat-enable-label = تمكين
settings-osc-vrchat-oscqueryEnabled = تمكين OSCQuery
settings-osc-vrchat-oscqueryEnabled-description =
يكتشف OSCQuery تلقائيا مثيلات VRChat قيد التشغيل ويرسل البيانات إليها.
يمكنه أيضا الإعلان عن نفسه لهم من أجل تلقي بيانات HMD ووحدة التحكم.
للسماح بتلقي بيانات HMD ووحدة التحكم من VRChat ، انتقل إلى إعدادات القائمة الرئيسية
ضمن "التتبع و IK (الحركة العكسية)" وتمكين "السماح بإرسال بيانات OSC لتتبع الرأس والمعصم".
settings-osc-vrchat-oscqueryEnabled-label = تمكين OSCQuery
settings-osc-vrchat-network = منافذ الشبكة
settings-osc-vrchat-network-description = قم بتعيين المنافذ للاستماع وإرسال البيانات إلى في ار تشات
settings-osc-vrchat-network-description-v1 = ضبط المنافذ الاستماع إلى البيانات وإرسالها. يمكن تركها دون أن تمس ل VRChat.
settings-osc-vrchat-network-port_in =
.label = منفذ الدخول
.placeholder = منفذ الدخول (الإفتراضي: 9001)
@@ -517,7 +717,7 @@ settings-osc-vrchat-network-port_out =
.label = منفذ الخروج
.placeholder = منفذ الخروج (الإفتراضي: 9000)
settings-osc-vrchat-network-address = عنوان الشبكة
settings-osc-vrchat-network-address-description = اختر العنوان الذي تريد إرسال البيانات إلى في ار تشات (تحقق من إعدادات واي فاي على جهازك)
settings-osc-vrchat-network-address-description-v1 = اختر العنوان الذي تريد إرسال البيانات إليه. يمكن تركها دون أن تمس ل VRChat.
settings-osc-vrchat-network-address-placeholder = عنوان آي بي الخاص بفي ار تشات
settings-osc-vrchat-network-trackers = أجهزة التعقب
settings-osc-vrchat-network-trackers-description = تبديل إرسال أجهزة تتبع محددة عبر أوه أس سي.
@@ -550,16 +750,54 @@ settings-osc-vmc-network-address-description = قم بتعيين العنوان
settings-osc-vmc-network-address-placeholder = عنوان آي بي في 4
settings-osc-vmc-vrm = نموذج في ار إم
settings-osc-vmc-vrm-description = قم بتحميل نموذج في ار إم للسماح بتركيز الرأس وتمكين توافق أعلى مع تطبيقات الأخرى
settings-osc-vmc-vrm-model_unloaded = لم يتم تحميل أي نموذج
settings-osc-vmc-vrm-model_loaded =
{ $titled ->
[true] تحميل النموذج: { $name }
*[other] تم تحميل نموذج بدون عنوان
}
settings-osc-vmc-vrm-untitled_model = نموذج بدون عنوان
settings-osc-vmc-vrm-file_select = اسحب نموذج وأفلته لاستخدامه أو <u> تصفح </ u>
settings-osc-vmc-anchor_hip = ثبت في الوركين
settings-osc-vmc-anchor_hip-description = ثبت التعقب في الوركين، هو مفيد إن كنت تيوبنغ جالسًا. في حالة التعطيل، قم بتحميل نموذج في ار إم.
settings-osc-vmc-anchor_hip-label = ثبت في الوركين
settings-osc-vmc-mirror_tracking = اعكس التعقب
settings-osc-vmc-mirror_tracking-description = اعكس التعقب أفقيا.
settings-osc-vmc-mirror_tracking-label = اعكس التعقب
## Common OSC settings
## Advanced settings
settings-utils-advanced = متقدم
settings-utils-advanced-reset-gui = إعادة تعيين إعدادات واجهة المستخدم الرسومية (GUI)
settings-utils-advanced-reset-gui-description = قم باستعادة الإعدادات الافتراضية للواجهة.
settings-utils-advanced-reset-gui-label = إعادة تعيين واجهة المستخدم الرسومية
settings-utils-advanced-reset-server = إعادة تعيين إعدادات التعقب
settings-utils-advanced-reset-server-description = استعادة الإعدادات الافتراضية للتعقب.
settings-utils-advanced-reset-server-label = إعادة تعيين التعقب
settings-utils-advanced-reset-all = إعادة تعيين جميع الإعدادات
settings-utils-advanced-reset-all-description = قم باستعادة الإعدادات الافتراضية لكل من الواجهة و التعقب.
settings-utils-advanced-reset-all-label = إعادة تعيين الكل
settings-utils-advanced-reset_warning =
{ $type ->
[gui]
<b>تحذير:</b> سيؤدي هذا إلى إعادة تعيين جميع الإعدادات الخاصة بك إلى الإعدادات الافتراضية.
هل أنت متأكد من أنك تريد القيام بذلك؟
[server] <b>تحذير:</b> سيؤدي هذا إلى إعادة تعيين إعدادات التعقب إلى الإعدادات الافتراضية. هل أنت متأكد من أنك تريد القيام بذلك؟
*[all]
<b>تحذير:</b> سيؤدي هذا إلى إعادة تعيين جميع الإعدادات الخاصة بك إلى الإعدادات الافتراضية.
هل أنت متأكد من أنك تريد القيام بذلك؟
}
settings-utils-advanced-reset_warning-reset = إعادة تعيين الإعدادات
settings-utils-advanced-reset_warning-cancel = إلغاء
settings-utils-advanced-open_data-v1 = مجلد التكوين
settings-utils-advanced-open_data-description-v1 = فتح مجلد إعدادات SlimeVR في مستكشف الملفات ، والذي يحتوي على الإعدادات
settings-utils-advanced-open_data-label = فتح المجلد
settings-utils-advanced-open_logs = مجلد السجلات
settings-utils-advanced-open_logs-description = افتح مجلد سجلات SlimeVR في مستكشف الملفات ، والذي يحتوي على سجلات التطبيق
settings-utils-advanced-open_logs-label = فتح المجلد
## Home Screen
## Tracking Checlist
## Setup/onboarding menu
@@ -576,16 +814,12 @@ onboarding-setup_warning-cancel = متابعة الإعداد
## Wi-Fi setup
onboarding-wifi_creds-back = العودة إلى المقدمة
onboarding-wifi_creds = إدخل بيانات اعتماد واي فاي
# This cares about multilines
onboarding-wifi_creds-description =
ستستخدم أجهزة التعقب بيانات الاعتماد هذه للاتصال لاسلكيًا.
الرجاء استخدام بيانات الاعتماد التي تتصل بها حاليًا.
onboarding-wifi_creds-skip = تخطى إعدادات واي فاي
onboarding-wifi_creds-submit = إرسال!
onboarding-wifi_creds-ssid =
.label = اسم الواي فاي
.placeholder = أدخل اسم الواي فاي
onboarding-wifi_creds-ssid-required = مطلوب اسم Wi-Fi
onboarding-wifi_creds-password =
.label = كلمة السر
.placeholder = أدخل كلمة السر
@@ -620,13 +854,6 @@ onboarding-reset_tutorial-2 =
onboarding-home = مرحبا بكم في سلايم في ار
onboarding-home-start = هيا نتجهز!
## Enter VR part of setup
onboarding-enter_vr-back = العودة إلى تعيين أجهزة التعقب
onboarding-enter_vr-title = حان وقت دخول في ار!
onboarding-enter_vr-description = ضع كل أجهزة التعقب ثم أدخل في ار!
onboarding-enter_vr-ready = أنا جاهز
## Setup done
onboarding-done-title = أنت جاهز تمامًا!
@@ -637,12 +864,13 @@ onboarding-done-close = إغلاق الدليل
onboarding-connect_tracker-back = العودة إلى بيانات اعتماد الواي فاي
onboarding-connect_tracker-title = ربط أجهزة التعقب
onboarding-connect_tracker-description-p0 = ننتقل الآن إلى الجزء الممتع ، ربط جميع أجهزة التعقب!
onboarding-connect_tracker-description-p1 = ما عليك سوى توصيل كل ما لم يتم توصيله بعد من خلال منفذ يو أس بي.
onboarding-connect_tracker-description-p0-v1 = ننتقل الآن إلى الجزء الممتع ، ربط أجهزة التعقب!
onboarding-connect_tracker-description-p1-v1 = قم بتوصيل كل جهاز تعقب واحدا تلو الآخر من خلال منفذ USB.
onboarding-connect_tracker-issue-serial = أواجه مشكلة في الاتصال!
onboarding-connect_tracker-usb = جهاز تعقب يو أس بي
onboarding-connect_tracker-connection_status-none = نبحث عن أجهزة التعقب
onboarding-connect_tracker-connection_status-serial_init = نتواصل بجهاز التسلسلي
onboarding-connect_tracker-connection_status-obtaining_mac_address = الحصول على عنوان mac الخاص بجهاز التعقب
onboarding-connect_tracker-connection_status-provisioning = نرسل بيانات اعتماد واي فاي
onboarding-connect_tracker-connection_status-connecting = جارٍ إرسال بيانات اعتماد الواي فاي
onboarding-connect_tracker-connection_status-looking_for_server = نبحث عن السرفر
@@ -670,12 +898,12 @@ onboarding-connect_tracker-next = لقد قمت بتوصيل جميع أجهزة
onboarding-calibration_tutorial = برنامج تعليم معايرة IMU
onboarding-calibration_tutorial-subtitle = سوف يساعد هذا في تقليل الانجراف التعقب!
onboarding-calibration_tutorial-description = كل مرة تقوم بتشغيل أجهزة التعقب، يجب أن تستريح للحظة على سطح مستوٍ للمعايرة. لنفعل الشيء نفسه بالنقر فوق الزر "{ onboarding-calibration_tutorial-calibrate }" ، <b>لا تحركها!</b>
onboarding-calibration_tutorial-calibrate = وضعت أجهزة التعقب على الطاولة
onboarding-calibration_tutorial-status-waiting = بانتظارك
onboarding-calibration_tutorial-status-calibrating = جاري المعايرة
onboarding-calibration_tutorial-status-success = رائع!
onboarding-calibration_tutorial-status-error = تم نقل جهاز التعقب
onboarding-calibration_tutorial-skip = تخطي البرنامج التعليمي
## Tracker assignment tutorial
@@ -706,6 +934,32 @@ onboarding-assign_trackers-assigned =
}
onboarding-assign_trackers-advanced = إظهار مواقع التعيين المتقدمة
onboarding-assign_trackers-next = لقد عينت جميع أجهزة التعقب
onboarding-assign_trackers-mirror_view = عرض المرآة
onboarding-assign_trackers-option-amount =
{ $trackersCount ->
[zero] صفر
[one] واحد
[two] اثنان
[few] قليلة
[many] كثيرة
*[other] أخرى
}
onboarding-assign_trackers-option-label =
{ $mode ->
[lower-body] الجسم السفلي
[core] أساس الجسم
[enhanced-core] الأساس المحسن
[full-body] الجسم الكامل
*[all] الكل
}
onboarding-assign_trackers-option-description =
{ $mode ->
[lower-body] الحد الأدنى لتعقب الجسم الكامل في الواقع الافتراضي
[core] + تحسين تعقب العمود الفقري
[enhanced-core] + دوران القدم
[full-body] + تعقب الكوع
*[all] جميع مهام التعقب المتاحة
}
## Tracker assignment warnings
@@ -781,13 +1035,20 @@ onboarding-choose_mounting = ما طريقة معايرة التركيب الم
# Multiline text
onboarding-choose_mounting-description = اتجاه التركيب يصحح وضع أجهزة التعقب على جسمك.
onboarding-choose_mounting-auto_mounting = التركيب التلقائي
# Italized text
onboarding-choose_mounting-auto_mounting-label = تجريبي
# Italicized text
onboarding-choose_mounting-auto_mounting-label-v2 = الموصى به
onboarding-choose_mounting-auto_mounting-description = سيكتشف هذا تلقائيًا اتجاهات التركيب لجميع أجهزة التعقب من وضعين
onboarding-choose_mounting-manual_mounting = التركيب اليدوي
# Italized text
onboarding-choose_mounting-manual_mounting-label = المستحسن
# Italicized text
onboarding-choose_mounting-manual_mounting-label-v2 = قد لا تكون الدقة كافية
onboarding-choose_mounting-manual_mounting-description = سيسمح لك باختيار اتجاه التثبيت يدويًا لكل جهاز تعقب
# Multiline text
onboarding-choose_mounting-manual_modal-title =
هل أنت متأكد من أنك تريد
معايرة التركيب التلقائي؟
onboarding-choose_mounting-manual_modal-description = <b>يوصى بمعايرة التركيب اليدوي للمستخدمين الجدد</b> ، حيث قد يكون من الصعب الحصول على أوضاع معايرة التركيب التلقائي الصحيحة من اول مرة وقد تتطلب بعض التمرين.
onboarding-choose_mounting-manual_modal-confirm = أنا أعرف ماذا أفعل
onboarding-choose_mounting-manual_modal-cancel = إلغاء
## Tracker manual mounting setup
@@ -812,43 +1073,18 @@ onboarding-automatic_mounting-mounting_reset-title = إعادة تعيين ال
onboarding-automatic_mounting-mounting_reset-step-0 = 1. قرفص في وضع "التزلج" مع ثني ساقيك ، وإمالة الجزء العلوي من جسمك إلى الأمام ، وثني ذراعيك.
onboarding-automatic_mounting-mounting_reset-step-1 = 2. اضغط على زر "إعادة تعيين التركيب" وانتظر لمدة 3 ثوان قبل إعادة تعيين دوران تركيب أجهزة التعقب.
onboarding-automatic_mounting-preparation-title = التحضير
onboarding-automatic_mounting-preparation-step-0 = 1. قف بشكل مستقيم مع ذراعيك على جانبيك.
onboarding-automatic_mounting-preparation-step-1 = اضغط على زر "إعادة ضبط" و انتظر لمدة 3 ثوانٍ قبل إعادة تعيين أجهزة التعقب.
onboarding-automatic_mounting-put_trackers_on-title = ارتدي أجهزة التعقب
onboarding-automatic_mounting-put_trackers_on-description = لمعايرة دوران التركيب، سنستخدم أجهزة التعقب التي قمت بتعيينها. ارتدي جميع أجهزة التعقب، يمكنك معرفة أي منها في المستند على اليمين.
onboarding-automatic_mounting-put_trackers_on-next = ارتديت جميع أجهزة التعقب.
## Tracker proportions method choose
## Tracker manual proportions setupa
onboarding-choose_proportions = ما هي طريقة معايرة النسب التي يجب استخدامها؟
# Multiline string
onboarding-choose_proportions-description =
تستخدم نسب الجسم لمعرفة قياسات جسمك. هم مطلوبون لحساب مواقع أجهزة التعقب.
عندما لا تتطابق نسب جسمك مع تلك المحفوظة ، ستكون دقة التتبع لديك أسوأ وستلاحظ أشياء مثل التزلج أو الانزلاق ، أو أن جسمك لا يتطابق مع الصورة الرمزية بشكل جيد.
onboarding-choose_proportions-auto_proportions = النسب التلقائية
# Italized text
onboarding-choose_proportions-auto_proportions-subtitle = الموصى به
onboarding-choose_proportions-auto_proportions-descriptionv2 =
سيؤدي ذلك إلى تخمين نسبك عن طريق تسجيل عينة من تحركاتك وتمريرها عبر خوارزمية.
<b>هذا يتطلب توصيل HMD الخاص بك ب SlimeVR!</b>
onboarding-choose_proportions-manual_proportions = النسب اليدوية
# Italized text
onboarding-choose_proportions-manual_proportions-subtitle = للمسات الصغيرة
onboarding-choose_proportions-manual_proportions-description = سيسمح لك بتعديل النسب يدويًا عن طريق تعديلها مباشرة
onboarding-choose_proportions-export = تصدير النسب
onboarding-choose_proportions-import = استيراد النسب
onboarding-choose_proportions-import-success = تم استيراده
onboarding-choose_proportions-import-failed = فشل
onboarding-choose_proportions-file_type = ملف نسب الجسم
## Tracker manual proportions setup
onboarding-manual_proportions-back = العودة إلى برنامج تعليم إعادة التعيين
onboarding-manual_proportions-title = نسب الجسم اليدوية
onboarding-manual_proportions-precision = ضبط الدقة
onboarding-manual_proportions-auto = المعايرة التلقائية
onboarding-manual_proportions-ratio = اضبط حسب مجموعات النسب
onboarding-manual_proportions-fine_tuning_button = ضبط النسب تلقائيا
onboarding-manual_proportions-fine_tuning_button-disabled-tooltip = يرجى توصيل سماعة رأس VR لاستخدام الضبط الدقيق التلقائي
onboarding-manual_proportions-export = تصدير النسب
onboarding-manual_proportions-import = استيراد النسب
onboarding-manual_proportions-file_type = ملف نسب الجسم
## Tracker automatic proportions setup
@@ -862,26 +1098,40 @@ onboarding-automatic_proportions-put_trackers_on-description = لمعايرة ن
onboarding-automatic_proportions-put_trackers_on-next = ارتديت جميع أجهزة التعقب.
onboarding-automatic_proportions-requirements-title = المتطلبات
# Each line of text is a different list item
onboarding-automatic_proportions-requirements-description =
لديك على الأقل ما يكفي من أجهزة تعقب لتعقب قدميك (بشكل عام 5 أجهزة تعقب).
ارتديت أجهزة التعقب وسماعة الرأس.
شغلت أجهزة التعقب وسماعة الرأس.
أجهزة التعقب وسماعات الرأس متصلة بسرفر سلايم في ار.
تعمل أجهزة التتبع وسماعات الرأس بشكل صحيح داخل سرفر سلايم في ار .
تقوم سماعة الرأس الخاصة بك بالإبلاغ عن بيانات الموقع إلى سرفر سلايم في ار (وهذا يعني بشكل عام تشغيل سلايم في ار وتوصيله بـ سلايم في ار باستخدام برنامج تشغيل ستيم في ار من سلايم في ار ).
onboarding-automatic_proportions-requirements-descriptionv2 =
لديك على الأقل ما يكفي من أجهزة التعقب لتتبع قدميك (بشكل عام 5 أجهزة تعقب).
لديك أجهزة التعقب وجهاز الواقع الافتراضي الخاص بك وترتديهم.
أجهزة التعقب وجهاز الواقع الافتراضي متصلة بخادم SlimeVR وتعمل بشكل صحيح (مثلاً، لا يوجد تأتأة أو قطع اتصال ، إلخ).
يقوم جهاز الواقع الافتراضي بالإبلاغ عن البيانات الموضعية إلى خادم SlimeVR (وهذا يعني عموما تشغيل SteamVR وتوصيله ب SlimeVR باستخدام برنامج تشغيل SteamVR الخاص ب SlimeVR).
يعمل التتبع الخاص بك ويمثل تحركاتك بدقة (على سبيل المثال ، لقد أجريت إعادة تعيين كاملة وتتحرك في الاتجاه الصحيح عند الركل, الانحناء, الجلوس, إلخ).
onboarding-automatic_proportions-requirements-next = لقد قرأت المتطلبات
onboarding-automatic_proportions-check_height-title = تحقق من طولك
onboarding-automatic_proportions-check_height-description = نستخدم طولك كأساس لقياساتنا باستخدام ارتفاع HMD كتقريب لطولك الفعلي ، ولكن من الأفضل التحقق مما إذا كانت صحيحة بنفسك!
onboarding-automatic_proportions-check_height-title-v3 = قم بقياس ارتفاع سماعة الرأس
onboarding-automatic_proportions-check_height-description-v2 = يجب أن يكون ارتفاع سماعة الرأس (HMD) أقل قليلا من طولك الكامل ، حيث تقيس سماعات الرأس ارتفاع عينيك. سيتم استخدام هذا القياس كخط أساس لنسب جسمك.
# All the text is in bold!
onboarding-automatic_proportions-check_height-calculation_warning = يرجى الضغط على الزر أثناء الوقوف <u>في وضع مستقيم</u> لحساب طولك. لديك 3 ثوان بعد الضغط على الزر!
onboarding-automatic_proportions-check_height-fetch_height = أنا واقف!
onboarding-automatic_proportions-check_height-calculation_warning-v3 = ابدأ في القياس أثناء الوقوف <u>في وضع مستقيم</u> لقياس طولك. احرص على عدم رفع يديك أعلى من سماعة الرأس ، لأنها قد تؤثر على القياس!
onboarding-automatic_proportions-check_height-guardian_tip =
إذا كنت تستخدم سماعة رأس VR مستقلة ، فتأكد من تشغيل حدود الحارس /
لكي يكون طولك صحيحا!
# Context is that the height is unknown
onboarding-automatic_proportions-check_height-unknown = مجهول
# Shows an element below it
onboarding-automatic_proportions-check_height-hmd_height1 = طولك من خلال HMD
# Shows an element below it
onboarding-automatic_proportions-check_height-height1 = لذا فإن طولك الفعلي هو
onboarding-automatic_proportions-check_height-hmd_height2 = ارتفاع سماعة الرأس هو:
onboarding-automatic_proportions-check_height-measure-start = ابدأ القياس
onboarding-automatic_proportions-check_height-measure-stop = توقف عن القياس
onboarding-automatic_proportions-check_height-measure-reset = إعادة محاولة القياس
onboarding-automatic_proportions-check_height-next_step = انهم بخير
onboarding-automatic_proportions-check_floor_height-title = قم بقياس الارتفاع عن الأرض (اختياري)
onboarding-automatic_proportions-check_floor_height-description = في بعض الحالات، قد لا يتم ضبط الارتفاع عن الأرض بشكل صحيح بواسطة سماعة الرأس، مما يتسبب في قياس ارتفاع سماعة الرأس على أنه أعلى مما ينبغي. يمكنك قياس "الارتفاع" عن الأرض لتصحيح ارتفاع سماعة الرأس.
# All the text is in bold!
onboarding-automatic_proportions-check_floor_height-calculation_warning-v2 = ابدأ بقياس و ضع وحدة التحكم على الأرض لقياس ارتفاعها. إذا كنت متأكدا من صحة الارتفاع عن الأرض ، فيمكنك تخطي هذه الخطوة.
# Shows an element below it
onboarding-automatic_proportions-check_floor_height-floor_height = الارتفاع عن الأرض هو:
onboarding-automatic_proportions-check_floor_height-full_height = طولك الكامل المقدر هو:
onboarding-automatic_proportions-check_floor_height-measure-start = ابدأ القياس
onboarding-automatic_proportions-check_floor_height-measure-stop = توقف عن القياس
onboarding-automatic_proportions-check_floor_height-measure-reset = إعد محاولة القياس
onboarding-automatic_proportions-check_floor_height-skip_step = تخطي الخطوة وحفظ
onboarding-automatic_proportions-check_floor_height-next_step = استخدم الارتفاع عن الأرض وحفظه
onboarding-automatic_proportions-start_recording-title = استعد للتحرك
onboarding-automatic_proportions-start_recording-description = سنقوم الآن بتسجيل بعض الوضعيات والحركات المحددة. ستتم مطالبتك بذلك في الشاشة التالية. كن مستعدا للبدء عند الضغط على الزر!
onboarding-automatic_proportions-start_recording-next = بدء التسجيل
@@ -915,15 +1165,35 @@ onboarding-automatic_proportions-verify_results-redo = إعادة التسجيل
onboarding-automatic_proportions-verify_results-confirm = تبدو صحيحة
onboarding-automatic_proportions-done-title = تم قياس الجسم و حفظه.
onboarding-automatic_proportions-done-description = اكتملت معايرة نسب جسمك!
onboarding-automatic_proportions-error_modal =
<b>تحذير:</b> تم العثور على خطأ أثناء تقدير النسب!
يرجى <docs>التحقق من المستندات</docs> أو الانضمام إلى <discord>Discord</discord> للحصول على المساعدة ^_^
onboarding-automatic_proportions-error_modal-v2 =
<b>تحذير:</b> حدث خطأ أثناء تقدير النسب!
من المحتمل أن تكون هذه مشكلة معايرة التركيب. تأكد من أن التعقب يعمل بشكل صحيح قبل المحاولة مرة أخرى.
يرجى <docs>التحقق من التعليمات</docs> أو الانضمام إلى <discord>Discord</discord> للحصول على المساعدة ^_^
onboarding-automatic_proportions-error_modal-confirm = مفهوم!
onboarding-automatic_proportions-smol_warning =
الارتفاع الذي تم تكوينه هو { $height } و هو أصغر من الحد الأدنى للارتفاع المقبول البالغ { $minHeight }.
<b>يرجى إعادة القياسات والتأكد من صحتها.</b>
onboarding-automatic_proportions-smol_warning-cancel = الرجوع
## User height calibration
## Stay Aligned setup
## Home
home-no_trackers = لم يتم الكشف أو تعيين عن أي جهاز تعقب
## Trackers Still On notification
trackers_still_on-modal-title = أجهزة التعقب لا تزال قيد التشغيل
trackers_still_on-modal-description =
لا يزال واحد أو أكثر من أجهزة التعقب قيد التشغيل.
هل مازلت تريد الخروج من SlimeVR؟
trackers_still_on-modal-confirm = الخروج من SlimeVR
trackers_still_on-modal-cancel = انتظر...
## Status system
status_system-StatusTrackerReset = يوصى بإجراء إعادة تعيين كاملة نظرًا لعدم تعديل واحد أو أكثر من أجهزة التعقب.
@@ -933,3 +1203,67 @@ status_system-StatusSteamVRDisconnected =
*[other] حاليًا غير متصل بـ SteamVR عبر برنامج تشغيل SlimeVR.
}
status_system-StatusTrackerError = يحتوي جهاز التعقب { $trackerName } على خطأ.
status_system-StatusUnassignedHMD = يجب تعيين سماعة رأس VR كجهاز تعقب للرأس.
## Firmware tool globals
firmware_tool-next_step = الخطوة التالية
firmware_tool-previous_step = الخطوة السابقة
firmware_tool-ok = تبدو جيدة
firmware_tool-retry = اعادة المحاولة
firmware_tool-loading = تحميل...
## Firmware tool Steps
firmware_tool = أداة البرامج الثابتة DIY
firmware_tool-description = يسمح لك بتكوين و لتحديث أجهزة التعقب DIY الخاصة بك
firmware_tool-not_available = عفوا ، أداة البرامج الثابتة غير متوفرة في الوقت الحالي. عد لاحقا!
firmware_tool-not_compatible = أداة البرنامج الثابت غير متوافقة مع هذا الإصدار من الخادم. يرجى تحديث الخادم الخاص بك!
firmware_tool-flash_method_step = طريقة التثبيت
firmware_tool-flash_method_step-description = الرجاء حدد طريقة التثبيت التي تريد استخدامها
firmware_tool-flashbtn_step = اضغط على زر التمهيد
firmware_tool-flashbtn_step-description = قبل الانتقال إل الخطوة التالية، هناك بعض الأشياء التي عليك القيام بها
firmware_tool-flashbtn_step-board_SLIMEVR = أوقف تشغيل جهاز التعقب، قم بإزالة العلبة (إن وجدت)، وقم بتوصيل كابل USB بهذا الكمبيوتر ، ثم قم بإحدى الخطوات التالية وفقا لمراجعة لوحة SlimeVR:
## firmware tool build status
## Firmware update status
## Dedicated Firmware Update Page
## Tray Menu
tray_menu-show = عرض
tray_menu-hide = إخفاء
tray_menu-quit = انهاء
## First exit modal
tray_or_exit_modal-title = ماذا يجب أن يفعل زر الإغلاق؟
# Multiline text
tray_or_exit_modal-description =
يتيح لك ذلك اختيار ما إذا كنت تريد الخروج من الخادم أو تصغيره إلى علبة النظام عند الضغط على زر الإغلاق.
يمكنك تغيير هذا لاحقا في إعدادات الواجهة!
tray_or_exit_modal-radio-exit = الخروج عند الإغلاق
tray_or_exit_modal-radio-tray = تصغير إلى علبة النظام
tray_or_exit_modal-submit = احفظ
tray_or_exit_modal-cancel = إلغاء
## Unknown device modal
unknown_device-modal-title = تم العثور على جهاز تعقب جديد!
unknown_device-modal-description =
هناك جهاز تعقب جديد مع عنوان MAC <b>{ $deviceId }</b>.
هل تريد توصيله ب SlimeVR؟
unknown_device-modal-confirm = أكيد
unknown_device-modal-forget = تجاهلها
## Error collection consent modal
## Tracking checklist section

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,3 @@
### SlimeVR complete GUI translations
# Please developers (not translators) don't reuse a key inside another key
# or concat text with a translation string in the code, use the appropriate
# features like variables and selectors in each appropriate case!
@@ -27,6 +24,9 @@ tips-do_not_move_heels = Sørg for, at dine hæle ikke bevæger sig under optage
tips-file_select = Træk og slip filer for at bruge, eller <u>gennemse</u>.
tips-tap_setup = Du kan trykke langsomt 2 gange på din tracker for at vælge den i stedet for at vælge den i menuen.
## Units
## Body parts
body_part-NONE = Ikke tildelt
@@ -50,14 +50,17 @@ body_part-LEFT_UPPER_LEG = Venstre lår
body_part-LEFT_LOWER_LEG = Venstre ankel
body_part-LEFT_FOOT = Venstre fod
## BoardType
## Proportions
skeleton_bone-NONE = Ingen
skeleton_bone-HEAD = Hoved skift
skeleton_bone-NECK = Hals længde
skeleton_bone-torso_group = Torso Længde
skeleton_bone-CHEST = Bryst Længde
skeleton_bone-CHEST_OFFSET = Bryst Juster
skeleton_bone-CHEST = Bryst Længde
skeleton_bone-WAIST = Taljelængde
skeleton_bone-HIP = Hoftelængde
skeleton_bone-HIP_OFFSET = Hofte Juster
@@ -103,11 +106,14 @@ navbar-mounting = Montage Kalibrering
navbar-onboarding = Opsætningsguide
navbar-settings = Indstillinger
## Bounding volume hierarchy recording
## Biovision hierarchy recording
bvh-start_recording = Optag BVH
bvh-recording = Optager...
## Tracking pause
## Widget: Overlay settings
widget-overlay = Overlejring
@@ -118,6 +124,9 @@ widget-overlay-is_mirrored_label = Vis Overlejring som Spejl
widget-drift_compensation-clear = Klar afdriftskompensation
## Widget: Clear Mounting calibration
## Widget: Developer settings
widget-developer_mode = Udviklertilstand
@@ -134,7 +143,9 @@ widget-developer_mode-more_info = Mere info
widget-imu_visualizer = Rotation
widget-imu_visualizer-rotation_raw = Rå
widget-imu_visualizer-rotation_preview = Forhåndsvisning
widget-imu_visualizer-rotation_hide = Skjul
## Widget: Skeleton Visualizer
## Tracker status
@@ -279,10 +290,6 @@ settings-general-steamvr-description =
Nyttig til spil eller apps, der kun understøtter bestemte trackere.
settings-general-steamvr-trackers-waist = Talje
settings-general-steamvr-trackers-chest = Bryst
settings-general-steamvr-trackers-feet = Fødder
settings-general-steamvr-trackers-knees = Knæ
settings-general-steamvr-trackers-elbows = Albuer
settings-general-steamvr-trackers-hands = Hænder
## Tracker mechanics
@@ -326,14 +333,7 @@ settings-general-fk_settings-leg_fk = Bensporing
settings-general-fk_settings-arm_fk = Arm sporing
settings-general-fk_settings-arm_fk-description = Tving arme til spore fra HMD, selvom positionshånddata er tilgængelige.
settings-general-fk_settings-arm_fk-force_arms = Tving arme fra HMD
settings-general-fk_settings-skeleton_settings = Indstillinger for skelet
settings-general-fk_settings-skeleton_settings-description = Slå skeletindstillinger til eller fra. Det anbefales at lade disse være på.
settings-general-fk_settings-skeleton_settings-extended_spine = Udvidet rygsøjle
settings-general-fk_settings-skeleton_settings-extended_pelvis = Forlænget pelvis
settings-general-fk_settings-skeleton_settings-extended_knees = Forlænget knæ
settings-general-fk_settings-vive_emulation-title = Vive emulering
settings-general-fk_settings-vive_emulation-description = Emuler de taljetrackerproblemer, som Vive-trackere har. Dette er en joke og gør sporing værre.
settings-general-fk_settings-vive_emulation-label = Aktivér Vive-emulering
## Gesture control settings (tracker tapping)
@@ -347,12 +347,18 @@ settings-general-gesture_control-taps =
}
settings-general-gesture_control-yawResetEnabled = Aktivér tryk for at yaw resette
## Interface settings
## Appearance settings
settings-general-interface = Brugergrænseflade
settings-general-interface-dev_mode = Udvikler-tilstand
settings-general-interface-dev_mode-description = Denne tilstand kan være nyttig, hvis du har brug for dybdegående data eller for at interagere med tilsluttede trackere på et mere avanceret niveau.
settings-general-interface-dev_mode-label = Udvikler-tilstand
settings-general-interface-theme = Farvetema
settings-general-interface-lang = Vælg sprog
settings-general-interface-lang-description = Skift det standardsprog, du vil bruge.
settings-general-interface-lang-placeholder = Vælg det sprog, der skal bruges
## Notification settings
settings-general-interface-serial_detection = Seriel enhedsregistrering
settings-general-interface-serial_detection-description = Denne mulighed viser en pop-up, hver gang du tilslutter en ny seriel enhed, der kan være en tracker. Det hjælper med at forbedre opsætningsprocessen for en tracker.
settings-general-interface-serial_detection-label = Seriel enhedsregistrering
@@ -360,10 +366,9 @@ settings-general-interface-feedback_sound = Feedback lyd
settings-general-interface-feedback_sound-description = Denne indstilling afspiller en lyd, når du nulstiller
settings-general-interface-feedback_sound-label = Feedback lyd
settings-general-interface-feedback_sound-volume = Feedback lydstyrke
settings-general-interface-theme = Farvetema
settings-general-interface-lang = Vælg sprog
settings-general-interface-lang-description = Skift det standardsprog, du vil bruge.
settings-general-interface-lang-placeholder = Vælg det sprog, der skal bruges
## Behavior settings
## Serial settings
@@ -378,7 +383,6 @@ settings-serial-factory_reset-warning =
Hvilket betyder, at alle Wi-Fi- og kalibreringsindstillinger <b>går tabt!</b>
settings-serial-factory_reset-warning-ok = Jeg ved hvad jeg laver
settings-serial-factory_reset-warning-cancel = Annuller
settings-serial-get_infos = Hent oplysninger
settings-serial-serial_select = Vælg en seriel port
settings-serial-auto_dropdown_item = Auto
@@ -409,14 +413,9 @@ settings-osc-router-network-address-placeholder = IPV4-adresse
## OSC VRChat settings
settings-osc-vrchat = VRChat OSC trackere
# This cares about multilines
settings-osc-vrchat-description =
Skift VRChat-specifikke indstillinger for at modtage HMD-data og sende
trackerdata til FBT uden SteamVR (f.eks. Quest standalone).
settings-osc-vrchat-enable = Aktiver
settings-osc-vrchat-enable-label = Aktiver
settings-osc-vrchat-network = Netværksporte
settings-osc-vrchat-network-description = Indstil portene til at lytte og sende data til VRChat.
settings-osc-vrchat-network-port_in =
.label = Port ind
.placeholder = Port ind (standard: 9001)
@@ -424,7 +423,6 @@ settings-osc-vrchat-network-port_out =
.label = Port ud
.placeholder = Port ud (standard: 9000)
settings-osc-vrchat-network-address = Netværksadresse
settings-osc-vrchat-network-address-description = Vælg hvilken adresse der skal sende data til VRChat (tjek dine Wi-Fi-indstillinger på din enhed).
settings-osc-vrchat-network-address-placeholder = VRChat ip-adresse
settings-osc-vrchat-network-trackers = Trackere
settings-osc-vrchat-network-trackers-description = Skift afsendelse af specifikke trackere via OSC.
@@ -457,9 +455,20 @@ settings-osc-vmc-network-address-description = Vælg hvilken adresse du vil send
settings-osc-vmc-network-address-placeholder = IPV4-adresse
settings-osc-vmc-vrm = VRM-model
settings-osc-vmc-vrm-description = Indlæs en VRM-model for at tillade hovedanker og muliggøre en højere kompatibilitet med andre applikationer
settings-osc-vmc-vrm-model_unloaded = Ingen model indlæst
settings-osc-vmc-vrm-file_select = Træk og slip en model, du vil bruge, eller <u>gennemse</u>
## Common OSC settings
## Advanced settings
## Home Screen
## Tracking Checlist
## Setup/onboarding menu
onboarding-skip = Spring opsætning over
@@ -474,11 +483,6 @@ onboarding-setup_warning-cancel = Fortsæt konfigurationen
## Wi-Fi setup
onboarding-wifi_creds-back = Gå tilbage til introduktion
onboarding-wifi_creds = Indtast Wi-Fi-oplysninger
# This cares about multilines
onboarding-wifi_creds-description =
Trackerne bruger disse oplysninger til at oprette forbindelse trådløst.
Brug de oplysninger, du i øjeblikket har forbindelse til.
onboarding-wifi_creds-skip = Spring Wi-Fi-indstillinger over
onboarding-wifi_creds-submit = Færdig!
onboarding-wifi_creds-ssid =
@@ -492,20 +496,12 @@ onboarding-wifi_creds-password =
onboarding-reset_tutorial-back = Gå tilbage til monteringskalibrering
onboarding-reset_tutorial = Start forfra
onboarding-reset_tutorial-description = Denne funktion er ikke færdig, bare tryk på fortsæt
## Setup start
onboarding-home = Velkommen til SlimeVR
onboarding-home-start = Lad os komme i gang!
## Enter VR part of setup
onboarding-enter_vr-back = Gå tilbage til Tracker-tildeler
onboarding-enter_vr-title = Tid til at gå ind i VR!
onboarding-enter_vr-description = Tag alle dine trackere på, og gå derefter på VR!
onboarding-enter_vr-ready = Jeg er klar
## Setup done
onboarding-done-title = Du er klar!
@@ -516,8 +512,6 @@ onboarding-done-close = Luk opsætning
onboarding-connect_tracker-back = Gå tilbage til Wi-Fi-oplysninger
onboarding-connect_tracker-title = Tilslut trackere
onboarding-connect_tracker-description-p0 = Nu til den sjove del, forbind alle trackere!
onboarding-connect_tracker-description-p1 = Du skal blot tilslutte alle, der ikke er tilsluttet endnu, via en USB-port.
onboarding-connect_tracker-issue-serial = Jeg har problemer med at oprette forbindelse!
onboarding-connect_tracker-usb = USB-tracker
onboarding-connect_tracker-connection_status-none = Leder efter trackere
@@ -544,6 +538,9 @@ onboarding-connect_tracker-next = Jeg har tilsluttet alle mine trackere
## Tracker calibration tutorial
## Tracker assignment tutorial
## Tracker assignment setup
onboarding-assign_trackers-back = Gå tilbage til Wi-Fi-oplysninger
@@ -567,12 +564,8 @@ onboarding-assign_trackers-next = Jeg har tildelt alle trackerene
onboarding-choose_mounting = Hvilken monteringskalibreringsmetode vil du bruge?
onboarding-choose_mounting-auto_mounting = Automatisk montering
# Italized text
onboarding-choose_mounting-auto_mounting-subtitle = Anbefalet
onboarding-choose_mounting-auto_mounting-description = Dette registrerer automatisk monteringsretningerne til alle dine trackere fra 2 stillinger
onboarding-choose_mounting-manual_mounting = Manuel montering
# Italized text
onboarding-choose_mounting-manual_mounting-subtitle = Hvis du ved hvad du laver
onboarding-choose_mounting-manual_mounting-description = Dette giver dig mulighed for manuelt at vælge monteringsretningen for hver tracker
## Tracker manual mounting setup
@@ -593,12 +586,7 @@ onboarding-automatic_mounting-put_trackers_on-title = Tag dine trackere på
onboarding-automatic_mounting-put_trackers_on-description = For at kalibrere rotationer bruger vi de trackere, du lige har tildelt. Tag alle dine trackere på du kan se hvilke der er hvilke i figuren til højre.
onboarding-automatic_mounting-put_trackers_on-next = Jeg har alle mine trackere på
## Tracker proportions method choose
# Italized text
onboarding-choose_proportions-auto_proportions-subtitle = Anbefalet
## Tracker manual proportions setup
## Tracker manual proportions setupa
## Tracker automatic proportions setup
@@ -621,6 +609,48 @@ onboarding-automatic_proportions-verify_results-redo = prøv igen
onboarding-automatic_proportions-done-title = Krop målt og gemt.
onboarding-automatic_proportions-done-description = Kalibreringen af dine kropsproportioner er fuldført!
## User height calibration
## Stay Aligned setup
## Home
home-no_trackers = Ingen trackere registreret eller tildelt
## Trackers Still On notification
## Status system
## Firmware tool globals
## Firmware tool Steps
## firmware tool build status
## Firmware update status
## Dedicated Firmware Update Page
## Tray Menu
## First exit modal
## Unknown device modal
## Error collection consent modal
## Tracking checklist section

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More