Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0.13.0 and 0.13.1 #233

Merged
merged 258 commits into from
Oct 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
258 commits
Select commit Hold shift + click to select a range
d74834a
add sub-crate for proc macros
Raicuparta Jun 25, 2024
90ce535
use proc macro for serializable struct
Raicuparta Jun 25, 2024
95face2
eventerinos
Raicuparta Jun 25, 2024
e303515
working events
Raicuparta Jun 25, 2024
e4a162c
Pass data directly in events
Raicuparta Jun 25, 2024
1627635
smarty pants way
Raicuparta Jun 26, 2024
a6ae2a7
partial updates gooding
Raicuparta Jun 26, 2024
04ac45f
every provider doin it
Raicuparta Jun 26, 2024
c5d8454
use callback instead of passing handle around
Raicuparta Jun 26, 2024
c4245a5
Partial owned games too
Raicuparta Jun 26, 2024
d836dfb
fix itch double callback
Raicuparta Jun 27, 2024
9d8d958
partial return of remote games
Raicuparta Jun 28, 2024
2033b13
csp so spooky
Raicuparta Jun 28, 2024
fe787bd
update node dependencies
Raicuparta Jun 28, 2024
ec7a92a
fix logs plugin
Raicuparta Jun 29, 2024
f1f59c9
better steam appinfo value errors
Raicuparta Jun 29, 2024
8151503
starting to somewhat read appinfo v3
Raicuparta Jun 29, 2024
0e77595
reading keys at the start
Raicuparta Jun 29, 2024
7f4a0de
Check appinfo version and act accordingly
Raicuparta Jun 29, 2024
27a7758
cleanup
Raicuparta Jun 29, 2024
014fb79
add appinfo v29 test data
Raicuparta Jun 29, 2024
6d756c7
Steam appinfo v3 (#220)
Raicuparta Jun 29, 2024
58e0c6d
cleanup lint rules
Raicuparta Jun 29, 2024
c7867e4
cleanup
Raicuparta Jun 29, 2024
9681b84
Cleanup
Raicuparta Jun 29, 2024
f6eedbe
Merge branch 'tauri-2-yet-again' of https://github.com/Raicuparta/rai…
Raicuparta Jun 29, 2024
e2da209
type woops
Raicuparta Jul 6, 2024
90b0250
handle all leftover unhandled errors
Raicuparta Jul 6, 2024
a2bb4f1
ignore unused async in main
Raicuparta Jul 6, 2024
d56e08d
better error handling via result
Raicuparta Jul 6, 2024
26a989b
fix single game refresh
Raicuparta Jul 6, 2024
c7f1cb4
update state not emitting events
Raicuparta Jul 6, 2024
2c9380c
remove redundant events
Raicuparta Jul 6, 2024
9764b77
avoid blocking everything while getting steam appinfo
Raicuparta Jul 6, 2024
a29a5dc
appinfo iterator
Raicuparta Jul 6, 2024
8c0fab9
better performance for frontend state updates
Raicuparta Jul 6, 2024
1280b7d
cheating
Raicuparta Jul 13, 2024
cdc2c43
throttle again
Raicuparta Jul 13, 2024
9766dbc
full steam owned games
Raicuparta Jul 13, 2024
ce09ca9
cleanup
Raicuparta Jul 13, 2024
f61da26
getting installed games, but very slowly
Raicuparta Jul 13, 2024
0b464c3
might be right
Raicuparta Jul 13, 2024
427ac0f
dont filter owned games by local library you doofus
Raicuparta Jul 13, 2024
ba4554b
get remote games after rest
Raicuparta Jul 13, 2024
a462c87
cleanup
Raicuparta Jul 13, 2024
ed48667
add counts to tabs
Raicuparta Jul 13, 2024
46fc995
cleanup
Raicuparta Jul 13, 2024
84f238a
gog games too
Raicuparta Jul 13, 2024
365c70a
itch joins the game
Raicuparta Jul 13, 2024
b6eac6c
for each concurrent but dunno if that helps
Raicuparta Jul 14, 2024
8ca127d
use rayon for parallel stuff
Raicuparta Jul 14, 2024
7d8da3a
Revert "use rayon for parallel stuff"
Raicuparta Jul 14, 2024
506d995
finding epic games epically
Raicuparta Jul 14, 2024
7901f0f
cleanup
Raicuparta Jul 14, 2024
f684034
xboxed
Raicuparta Jul 14, 2024
b3e615c
manual games too
Raicuparta Jul 14, 2024
941d604
commands passing entire thing around like crazy
Raicuparta Jul 14, 2024
53aca4c
cleanup
Raicuparta Jul 14, 2024
1228a36
add todo
Raicuparta Jul 14, 2024
f63934e
more todo
Raicuparta Jul 14, 2024
3f3782d
also find sub-games
Raicuparta Jul 14, 2024
528e0fc
cleanup
Raicuparta Jul 14, 2024
d89e282
dirty optimize
Raicuparta Jul 17, 2024
0ac27c3
add steam assets.vdf test data
Raicuparta Jul 17, 2024
d568b87
read assets.vdf only once
Raicuparta Jul 17, 2024
60a3af7
add patrons list in thanks
Raicuparta Jul 24, 2024
7dbf504
numbered list
Raicuparta Jul 25, 2024
c1e943c
avatars
Raicuparta Jul 26, 2024
6cf18da
tooltip
Raicuparta Jul 26, 2024
b2e6a13
better tooltip
Raicuparta Jul 26, 2024
185a136
separate rai-pal-core
Raicuparta Jul 26, 2024
0c0bae9
inherit lints
Raicuparta Jul 26, 2024
53a1fa1
inherit more stuff
Raicuparta Jul 26, 2024
e578545
fetch patrons from url
Raicuparta Jul 27, 2024
14d4cdc
readonly checkboxes to make warnings go away
Raicuparta Jul 27, 2024
f4ee55a
fix owned games whitelist having trash in it
Raicuparta Jul 27, 2024
640c39c
cleanup
Raicuparta Jul 27, 2024
36c6862
clippy cleanup
Raicuparta Jul 27, 2024
0fa1b6d
move app state back to tauri package
Raicuparta Jul 27, 2024
0bc3d7e
move events to tauri crate
Raicuparta Jul 27, 2024
c68b5b2
remove tauri dependency from paths helper
Raicuparta Jul 27, 2024
32783e8
remove tauri dependencies from core
Raicuparta Jul 27, 2024
e467280
organize package dependencies
Raicuparta Jul 27, 2024
58b4fe6
update steamlocate dependency
Raicuparta Jul 27, 2024
57657c7
replace stinky glob crate with globwalk
Raicuparta Jul 27, 2024
f0cfc89
clean up globs a bit now that we have globwalk
Raicuparta Jul 27, 2024
b46bbd5
include engineless games in installed tab. closes #141
Raicuparta Jul 27, 2024
4568eda
reduce code repetition
Raicuparta Jul 27, 2024
8eea420
stop swallowing errors
Raicuparta Jul 27, 2024
9078b74
fix missing dialog plugin
Raicuparta Jul 27, 2024
6b27611
reduce some error logs
Raicuparta Jul 27, 2024
21aeda6
update updater env var names
Raicuparta Jul 27, 2024
0225e0f
attempting to fix the updater
Raicuparta Jul 28, 2024
683a717
fix dependencies for new updater stuff
Raicuparta Jul 28, 2024
390363f
actually finally fix the updater
Raicuparta Jul 28, 2024
a731955
linux cleanup once again
Raicuparta Jul 30, 2024
22e6a38
more crappy linux error logging
Raicuparta Jul 30, 2024
7528b93
add tests support
Raicuparta Jul 31, 2024
7021eb3
usable tests
Raicuparta Jul 31, 2024
9611e1c
funny wrong name
Raicuparta Jul 31, 2024
a54f73f
remove manual games on frontend too
Raicuparta Jul 31, 2024
2bfb565
different way of drag drop event
Raicuparta Jul 31, 2024
9ac2af6
use shcema in capabilities
Raicuparta Jul 31, 2024
8911fc3
try and fail to upgrade tauri specta rc 12
Raicuparta Aug 1, 2024
284f87a
increase recursion limit because of tauri specta shenanigans
Raicuparta Aug 1, 2024
a0bcafe
cleanup
Raicuparta Aug 1, 2024
c830a6c
use enter event
Raicuparta Aug 2, 2024
c94f565
cleanup cargo.toml
Raicuparta Aug 2, 2024
988169f
cleanup todos
Raicuparta Aug 2, 2024
03835ac
auto select manually added game
Raicuparta Aug 2, 2024
4395d81
cleanup
Raicuparta Aug 2, 2024
c4ff3e1
we don't use yarn in this house
Raicuparta Aug 2, 2024
672adfd
forgot to commit bindings
Raicuparta Aug 2, 2024
89b819d
cleanup tauri dependency
Raicuparta Aug 2, 2024
c579332
eslint ignoring stuff
Raicuparta Aug 2, 2024
da9d60f
update dependencies
Raicuparta Aug 2, 2024
f9982d2
update event name
Raicuparta Aug 2, 2024
1ee1cb0
ignore backend folder
Raicuparta Aug 2, 2024
8cd0e8a
more specific watcher ignore
Raicuparta Aug 2, 2024
398ebe0
bump version 0.13.0
Raicuparta Aug 2, 2024
94a6d95
Update steamlocate dependency
Raicuparta Aug 2, 2024
c687e3f
annoying heart animation
Raicuparta Aug 2, 2024
75175bd
tauri rc
Raicuparta Aug 2, 2024
dc66167
drop event working now
Raicuparta Aug 2, 2024
01c9ce1
comment cleanup
Raicuparta Aug 2, 2024
c4919b3
anihilate os info (rip linux)
Raicuparta Aug 2, 2024
8898baa
hide patron leaderboard if empty (sad)
Raicuparta Aug 2, 2024
9cd98a9
tauri rc
Raicuparta Aug 3, 2024
ecc098a
update frontend dependencies
Raicuparta Aug 3, 2024
ab9f984
schema
Raicuparta Aug 3, 2024
a956152
no pcgamingwiki cache who cares
Raicuparta Aug 3, 2024
171e891
cache data in tauri store
Raicuparta Aug 3, 2024
6aded74
fix missing windows stuff
Raicuparta Aug 3, 2024
0977bbb
add decoded epic catalog to test data
Raicuparta Aug 4, 2024
4870b04
annihilate everything related to pcgaming wiki and remote steam id lists
Raicuparta Aug 4, 2024
92c0b26
working new fast remote games
Raicuparta Aug 4, 2024
2ce4736
fix finding games by name
Raicuparta Aug 5, 2024
8ec0634
annihilate old remote game, rename game database to remote game again
Raicuparta Aug 5, 2024
c930d4a
getting remote games in main update_data
Raicuparta Aug 5, 2024
819e185
get games per provider from frontend
Raicuparta Aug 5, 2024
d9b1791
update local mods and update remote games are also individually calle…
Raicuparta Aug 6, 2024
245ecbe
ah woops
Raicuparta Aug 6, 2024
23c83bd
move game drop to separate hook
Raicuparta Aug 6, 2024
41c11dc
send provider ids from backend
Raicuparta Aug 6, 2024
40636f3
reduce repetition
Raicuparta Aug 6, 2024
a7b3e91
cleanup
Raicuparta Aug 6, 2024
79f2fc2
fix csp for images, hide window until somewhat ready
Raicuparta Aug 6, 2024
dc596ee
cleanup
Raicuparta Aug 6, 2024
5a2e591
allow inline styles due to mantine injecting them
Raicuparta Aug 6, 2024
cb4eefc
get remote games without slow-ass event
Raicuparta Aug 6, 2024
ae3fed8
More parsed engine versions
Raicuparta Aug 6, 2024
b354a6c
comment
Raicuparta Aug 6, 2024
fbbdac5
persist selected tab
Raicuparta Aug 6, 2024
6d728ad
persist sorting
Raicuparta Aug 6, 2024
58130e9
commen
Raicuparta Aug 6, 2024
fc62ddb
loading during command data
Raicuparta Aug 6, 2024
34e579a
enable gzip feature for reqwest
Raicuparta Aug 8, 2024
f003aac
dont use storage for remote games for now
Raicuparta Aug 8, 2024
1a220e5
fix cache error handling
Raicuparta Aug 8, 2024
0908073
fix not updating state after loading from cache
Raicuparta Aug 8, 2024
c18c7eb
include original provider game id in owned games
Raicuparta Aug 8, 2024
4a91273
specify rust version in toolchain.toml
Raicuparta Aug 8, 2024
1e8c4b0
cleanup dependencies
Raicuparta Aug 9, 2024
508bf2c
more dependency cleanup
Raicuparta Aug 9, 2024
a502966
show window via rust
Raicuparta Aug 9, 2024
b631e69
update deps
Raicuparta Aug 9, 2024
b9a3d7b
update zip
Raicuparta Aug 9, 2024
787250a
no need for async_trait dependency anymore
Raicuparta Aug 9, 2024
4a1a92c
more dependency cleanup
Raicuparta Aug 9, 2024
03b8cc3
cleaner pelite
Raicuparta Aug 9, 2024
522aa11
ditch rand
Raicuparta Aug 9, 2024
1465534
fix table sort messing with filters
Raicuparta Aug 9, 2024
156eb8c
cleanup
Raicuparta Aug 9, 2024
fad8b49
prevent panics being reported after window closes
Raicuparta Aug 9, 2024
87f2f77
no need for futures crate
Raicuparta Aug 10, 2024
ddd6775
no direct tokio dependency
Raicuparta Aug 10, 2024
728f046
update zip dependency
Raicuparta Aug 10, 2024
1f1e0c7
lets not use maps
Raicuparta Aug 10, 2024
58ebdd5
fix clear cache button
Raicuparta Aug 10, 2024
c689732
small refactor
Raicuparta Aug 10, 2024
0b30d6d
fix data cache clear
Raicuparta Aug 10, 2024
cf15948
async data cache helper
Raicuparta Aug 10, 2024
7b2f818
use-async-command not using onsuccess anymore
Raicuparta Aug 10, 2024
e8040d2
cache on backend
Raicuparta Aug 11, 2024
53cdd6d
save frontend state with same shape as cache
Raicuparta Aug 11, 2024
117835f
better way to check if owned game is installed
Raicuparta Aug 11, 2024
59f5451
no need to include individual games in events anymore
Raicuparta Aug 11, 2024
a8fe090
also use app state
Raicuparta Aug 11, 2024
4be330d
cleanup
Raicuparta Aug 11, 2024
370e6c1
reset cache if broken
Raicuparta Aug 11, 2024
ae75e02
run tauri dev with nightly
Raicuparta Aug 12, 2024
a834e46
use new provider ids format
Raicuparta Aug 14, 2024
65201b2
use new game database format on frontend
Raicuparta Aug 14, 2024
bed69f5
prevent stuff being in cache forever
Raicuparta Aug 19, 2024
c1af6c7
refreshing and removing games using backend state
Raicuparta Aug 19, 2024
772c2e7
sort engines per game
Raicuparta Aug 19, 2024
2248e42
you know what that's not a todo anymore
Raicuparta Aug 19, 2024
0f5d513
add gamepass games testing data
Raicuparta Aug 22, 2024
5d916d7
find gamepass games from test data
Raicuparta Aug 22, 2024
e0b3b6d
add box art too
Raicuparta Aug 22, 2024
fd96f07
add ea play games
Raicuparta Aug 22, 2024
1f5610a
normalize title in backend
Raicuparta Aug 23, 2024
797b505
remove repeated normalized titles
Raicuparta Aug 23, 2024
9d2facc
another normalization method
Raicuparta Aug 23, 2024
7338742
more lax remote game engine version regex
Raicuparta Aug 23, 2024
89deb68
Add ubisoft provider
Raicuparta Aug 23, 2024
4dc0a5a
tags instead of extra columns
Raicuparta Aug 23, 2024
60f1c98
type adjustment
Raicuparta Aug 24, 2024
9ec9aae
nicer way of showing tags
Raicuparta Aug 24, 2024
7d6524b
scrollable tags
Raicuparta Aug 24, 2024
e959cb3
cleanup
Raicuparta Aug 24, 2024
aa66c3d
cleanup
Raicuparta Aug 24, 2024
13d78d5
add subscription list to owned games
Raicuparta Aug 24, 2024
0f4b315
buildable on linux
Raicuparta Aug 24, 2024
aa38c9d
cleanup
Raicuparta Aug 24, 2024
a4ea58e
add subscriptions selector
Raicuparta Aug 24, 2024
8863eb8
rename
Raicuparta Aug 24, 2024
111a0e3
xbox provider commands
Raicuparta Sep 2, 2024
c5ecc84
add contributing
Raicuparta Sep 2, 2024
0e46e9f
Merge branch 'main' into dev
Raicuparta Sep 2, 2024
7dc8984
update remote game format
Raicuparta Sep 2, 2024
a4a354b
disable subscription stuff for now
Raicuparta Sep 2, 2024
b47e6dd
fix publish script for tauri 2 and npm hehe
Raicuparta Sep 2, 2024
80629d1
manually create cache in backend instead of using tauri store plugin
Raicuparta Sep 2, 2024
e57168b
use provider cache files instead of folders, prevent read errors for …
Raicuparta Sep 3, 2024
eff2267
prevent error when itch app not installed
Raicuparta Sep 3, 2024
9d911f4
prevent error when GOG not installed
Raicuparta Sep 3, 2024
016c462
prevent errors when epic not installed
Raicuparta Sep 3, 2024
5067c9a
fix error on xbox not found
Raicuparta Sep 3, 2024
d17881d
use "open" dependency only on rai-pal-core
Raicuparta Sep 3, 2024
ea759a9
update dependencies
Raicuparta Sep 3, 2024
bb1fbf2
separate tauri app from workspace
Raicuparta Sep 3, 2024
ad15eae
move rai-pal-core to core
Raicuparta Sep 3, 2024
990c588
update frontend dependencies and move stuff around
Raicuparta Sep 4, 2024
50fc3be
specify resolver
Raicuparta Sep 4, 2024
747642e
update dependencies sorta
Raicuparta Sep 15, 2024
fa617b6
ignore tauri gen folder
Raicuparta Sep 15, 2024
7a38eeb
add tauri shell plugin (makes links work)
Raicuparta Sep 15, 2024
b27e852
update dependencies
Raicuparta Sep 21, 2024
86c4ecf
update dependencies
Raicuparta Sep 21, 2024
73b6257
update more depdendencies
Raicuparta Sep 22, 2024
b352365
workaround for broken links
Raicuparta Sep 22, 2024
807fb43
cleanup
Raicuparta Sep 23, 2024
0da1b11
change binary name in cargo.toml
Raicuparta Sep 23, 2024
5ab6d10
update dependencies, tauri v2 stable!
Raicuparta Oct 2, 2024
213dd72
roll back workaround for external links, update deps
Raicuparta Oct 3, 2024
826be18
ignore entire backend folder in vite watcher
Raicuparta Oct 3, 2024
848e7bc
add util import path alias
Raicuparta Oct 3, 2024
4f2b4c4
prevent showing users errors when providers missing
Raicuparta Oct 27, 2024
1f0d405
bump version
Raicuparta Oct 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[target.x86_64-pc-windows-msvc]
# LLD linker
#
# You may need to install it:
#
# ```
# cargo install -f cargo-binutils
# rustup component add llvm-tools
# ```
linker = "rust-lld.exe"
rustdocflags = ["-Clinker=rust-lld.exe"]
rustflags = [
# Nightly
# "-Zshare-generics=n", # This needs to be off if you use dynamic linking on Windows.
# "-Zthreads=0",
]
24 changes: 0 additions & 24 deletions .eslintrc

This file was deleted.

26 changes: 9 additions & 17 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ jobs:

- name: setup node
uses: actions/setup-node@v3
with:
node-version: 16

- name: install Rust stable
uses: dtolnay/rust-toolchain@stable
Expand All @@ -30,27 +28,21 @@ jobs:
with:
workspaces: "./backend -> target"

- uses: pnpm/action-setup@v2
name: Install pnpm
with:
version: 8
run_install: false

- name: Get pnpm store directory
- name: Get npm store directory
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
echo "STORE_PATH=$(npm store path --silent)" >> $GITHUB_ENV

- uses: actions/cache@v3
name: Setup pnpm cache
name: Setup npm cache
with:
path: ${{ env.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
key: ${{ runner.os }}-npm-store-${{ hashFiles('**/package.lock.json') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
${{ runner.os }}-npm-store-

- name: Install frontend dependencies
run: pnpm install
run: npm install

- name: Build
id: build
Expand All @@ -59,14 +51,14 @@ jobs:
$version = $output | Select-Object -Last 1
"version=$version" >> $env:GITHUB_OUTPUT
env:
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
ANALYTICS_API_KEY: ${{ secrets.ANALYTICS_API_KEY }}

- name: Release
uses: softprops/action-gh-release@v1
with:
draft: false
draft: true
name: Rai Pal ${{ steps.build.outputs.version }}
tag_name: v${{ steps.build.outputs.version }}
body: "${{ github.event.pull_request.body }}\n\n[![Download Rai Pal for Windows](https://shields.io/badge/-Download_Rai_Pal_for_Windows-8A2BE2?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/Raicuparta/rai-pal/releases/latest/download/RaiPal.msi)"
Expand Down
27 changes: 27 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,67 @@
{
"cSpell.words": [
"Andreas",
"Anticheat",
"appguid",
"appinfo",
"appname",
"Arkham",
"cargoquery",
"catcache",
"chrono",
"Clippy",
"compat",
"compatdata",
"ctypes",
"dtolnay",
"epicgames",
"flashbang",
"frontends",
"fullscreen",
"gamemaker",
"Gamepass",
"globbed",
"globwalk",
"hasher",
"HKEY",
"icns",
"ICONERROR",
"IDYES",
"Infobox",
"installsource",
"isfreeapp",
"KTJZNR",
"Leaderboard",
"librarycache",
"Loggable",
"mantine",
"msxbox",
"needsadmin",
"otherinstallcmd",
"Pardeike",
"partof",
"praydog",
"predef",
"PTLP",
"Raicuparta",
"redownload",
"repairtype",
"reqwest",
"runas",
"rusqlite",
"RUSTUP",
"shellapi",
"softprops",
"specta",
"subchild",
"subkey",
"substr",
"Swatinem",
"SYSTEMMODAL",
"tabler",
"tauri",
"thiserror",
"ubisoft",
"uevr",
"ureq",
"UUVR",
Expand Down
51 changes: 51 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Contributing

Before starting any of this: please make an issue about your potential contribution and discuss it with me (unless we already discussed it of course).

Rai Pal is currently undergoing a major rewrite, so this might be outdated. Message me if you need help.

## Setting up

Rai Pal is made with [Tauri v2](https://v2.tauri.app/). You'll need to follow the instructions in the [Tauri Prerequisites](https://v2.tauri.app/start/prerequisites/) page to install all the dependencies, including [Node section](https://v2.tauri.app/start/prerequisites/#nodejs). Ignore anything related to mobile.

Once that's taken care of:
- Clone this repo.
- `cd` into the root folder of the project.
- Run the usual `npm install` to install all dependencies
- Run `npm run dev` to start the local dev server and frontend. First time will take a while.

## Project Structure

The project is split into two main parts:

[`/backend`](/backend): Rust code that does most of the heavy lifting.
[`/frontend`](/frontend): TypeScript React code that handles drawing the actual app views, and some of the logic too.

## Backend

[`/backend/Cargo.toml`](/backend/Cargo.toml) is the [cargo workspace](https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html) manifest. So it's Rust settings and stuff that relates to all crates within the workspace. Those crates are:

- [`/backend/tauri-app`](/backend/tauri-app): Anything specific to Tauri, like all the app commands and events that can be called.
- [`/backend/core`](/backend/core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. The crate in `tauri-app` will reference this crate, to actually do the Rai Pal magic.
- [`/backend/proc-macros`](/backend/proc-macros): Procedural macros ([read more](https://doc.rust-lang.org/reference/procedural-macros.html)).

Dependencies that are used by multiple crates in the workspace get defined at the workspace level, on the root `Cargo.toml`. Dependencies that are only used by a specific create, get defined in that crate's `Cargo.toml`.

The root/workspace `Cargo.toml` also contains the settings for profiles and linters. Set up your IDE (probably [VSCode](https://code.visualstudio.com/)) to automatically format your code using [Clippy](https://doc.rust-lang.org/clippy/).

## Frontend

I initially tried to keep all business logic on the backend, but eventually settled on a balance that prevented the Rust side from getting too confusing. For instance, the logic for merging different types of data (like installed games, owned games, and remote games) is on the frontend, because I went insane trying to reconcile all that on the backend without making the frontend wait for the entire thing to be processed. So there are a lot of situations where you'll need to decide whether some piece of logic should be on the frontend or on the backend. I usually go by how annoying the Rust code can get: if it gets pretty annoying, I make it dumber and move some logic to the frontend. And of course, anything performance-intensive should be on the Rust side.

## General architecture

The way I fetch data from the backend might be a bit uncommon. I admit that I didn't really look up similar projects to figure out how they did it, I was just winging it. I did learn a lot from the [Outer Wilds Mod Manager](https://github.com/ow-mods/ow-mod-man), but Rai Pal has some different requirements. What I want from Rai Pal is:
- The frontend shouldn't visibly block while fetching or computing data.
- Data should be visible on the frontend as soon as possible.
- Slow data processes shouldn't prevent other processes from delivering their data to the frontend.

Some people have 800 games installed at the same time (not even exaggerating). So parsing through that entire list takes a long time. Ideally, the user shouldn't need to wait for the process of discovering installed games to finish before starting to find the list of owned (but not necessarily installed) games. Same goes for the other way around. Some people own 23k games on Steam (again, not exaggerating, an actual number). Parsing that list takes a long time. So we need to make sure one process doesn't block the other, and that we show the results progressively (games show as they're discovered).

There's also a lot of caching involved, but I'm still trying to figure out the best implementation.

There's probably a lot more confusing stuff going on in this project, but it's hard for me to go over it all. Please to message me if you want to contribute and need more help unravelling this god forsaken thing.
Loading
Loading