mirror of
https://github.com/hinto-janai/gupax.git
synced 2024-12-23 19:39:21 +00:00
51 lines
3 KiB
Markdown
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 |
|