gupax/src/README.md
2022-10-15 15:15:27 -04:00

51 lines
3 KiB
Markdown

# Gupax source files
* [Structure](#Structure)
* [Bootstrap](#Bootstrap)
* [State](#State)
## Structure
| File/Folder | Purpose |
|----------------|---------|
| `about.rs` | Struct/impl for `About` tab
| `constants.rs` | General constants needed in Gupax
| `gupax.rs` | Struct/impl for `Gupax` tab
| `main.rs` | Struct/enum/impl for `App/Tab/State`, init functions, main function
| `node.rs` | Struct/impl for Community Nodes
| `p2pool.rs` | Struct/impl for `P2Pool` tab
| `state.rs` | Struct/impl for `gupax.toml`, the disk state
| `status.rs` | Struct/impl for `Status` tab
| `xmrig.rs` | Struct/impl for `XMRig` tab
## Bootstrap
This is how Gupax works internally when starting up, divided into 3 sections.
1. **INIT**
- Initialize custom console logging with `log`, `env_logger` || *warn!*
- Initialize misc data (structs, text styles, thread count, images, etc) || *panic!*
- Check for admin privilege (for XMRig) || *warn!*
- Attempt to read `gupax.toml` || *warn!*, *initialize config with default options*
- If errors were found, pop-up window
2. **AUTO**
- If `auto_update` == `true`, pop-up auto-updating window || *info!*, *skip auto-update*
- Multi-threaded GitHub API check on Gupax -> P2Pool -> XMRig || *warn!*, *skip auto-update*
- Multi-threaded download if current version != new version || *warn!*, *skip auto-update*
- After download, atomically replace current binaries with new || *warn!*, *skip auto-update*
- Update version metadata || *warn!*, *skip auto-update*
- If `auto_select` == `true`, ping community nodes and select fastest one || *warn!*
3. **MAIN**
- All data must be initialized at this point, either via `gupax.toml` or default options || *panic!*
- Start `App` frame || *panic!*
- Write state to `gupax.toml` on user clicking `Save` (after checking input for correctness) || *warn!*
- If `ask_before_quit` == `true`, check for running processes, unsaved state, and update connections before quitting
- Kill processes, kill connections, exit
## State
Internal state is saved in the "OS data folder" as `gupax.toml`, using the [TOML](https://github.com/toml-lang/toml) format. If the version can't be parsed (not in the `vX.X.X` or `vX.X` format), the auto-updater will be skipped. [If not found, a default `gupax.toml` file will be created with `State::default`.](https://github.com/hinto-janaiyo/gupax/blob/main/src/state.rs) Gupax will `panic!` if `gupax.toml` has IO or parsing issues.
| OS | Data Folder | Example |
|----------|----------------------------------------- |-----------------------------------------------------------|
| Windows | `{FOLDERID_LocalAppData}` | C:\Users\Alice\AppData\Roaming\Gupax\gupax.toml |
| macOS | `$HOME`/Library/Application Support | /Users/Alice/Library/Application Support/Gupax/gupax.toml |
| Linux | `$XDG_DATA_HOME` or `$HOME`/.local/share | /home/alice/.local/share/gupax/gupax.toml |