From 3c1d0717aaaeaad3f71500146cef12c9cbbb3a50 Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Mon, 4 Dec 2023 15:55:29 +0200 Subject: [PATCH] About dialog, small UI fixes, readme --- Cargo.toml | 3 +- README.md | 61 +++++++++++++++++++++++++++++++ screenshots/configuration.png | Bin 0 -> 35070 bytes screenshots/loading.png | Bin 0 -> 13009 bytes screenshots/plotting.png | Bin 0 -> 20121 bytes screenshots/syncing.png | Bin 0 -> 20509 bytes src/main.rs | 66 +++++++++++++++++++++++++++++----- 7 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 README.md create mode 100644 screenshots/configuration.png create mode 100644 screenshots/loading.png create mode 100644 screenshots/plotting.png create mode 100644 screenshots/syncing.png diff --git a/Cargo.toml b/Cargo.toml index 85ee641b..239f31f4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "space-acres" -description = "" +description = "Space Acres is an opinionated unofficial GUI application for farming on Subspace Network" license = "0BSD" version = "0.0.1" authors = ["Nazar Mokrynskyi "] @@ -10,7 +10,6 @@ include = [ "/Cargo.toml", ] - [dependencies] anyhow = "1.0.75" arc-swap = "1.6.0" diff --git a/README.md b/README.md new file mode 100644 index 00000000..5a13b8c2 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +# Space Acres + +Space Acres is an opinionated unofficial GUI application for farming on [Subspace Network](https://subspace.network/). + +## Current status + +Current status of the project is Alpha. + +This means that while it should generally work, expect things to not work sometimes, break in unexpected ways and error +handling to be lacking. + +Current version supports Gemini 3g chain only and doesn't allow to select anything else. + +## Features + +Current features: +* Initial configuration +* Node sync with displayed progress +* Farmer plotting/farming with a single farm with displayed plotting/replotting progress + +Some of the upcoming features/capabilities (not necessarily in priority order): +* Automatic builds in CI with pre-built executables +* Testing on Windows and macOS +* Welcome screen +* Writing logs to a file +* Displaying of earned farming rewards or at least link to block explorers +* Better status reporting of the node and farmer (piece cache sync, etc.) +* Displaying sync/plotting/replotting speed (UI already supports this, but there is no backend code to calculate the speed) +* Support for multiple farms (backend and config file already support this if you edit config manually, but you will not see them in UI) +* Farmer benchmarking support +* Re-configuration screen with old configuration filled instead of starting from scratch + +## Project structure + +The project at high level is structured in a few large modules: +* `backend` handles all the backend functionality + * `config` contains configuration data structure with ability to read, write and validate it + * `farmer` contains farmer implementation with a wrapper data structure that abstracts away its internals + * `networking` contains networking stack that is shared between `farmer` and `node` with a wrapper data structure that abstracts away its internals + * `node` contains consensus node with a wrapper data structure that abstracts away its internals + * `utils` contains some low-level utilities +* `main.rs` contains UI and communication with backend, though UI will move into `frontend` in the future +* `res/app.css` contains a few small non-critical tweaks for presentation, it will likely be necessary to ship a GTK4 theme with the app in the future to ensure consistent look + +Application supports bare minimum configuration and doesn't support operator functionality (not yet anyway). + +## How to build + +In order to build this app you'll need to install both dependencies necessary for building +[Subspace](https://github.com/subspace/subspace) and [GTK4](https://github.com/gtk-rs/gtk4-rs), follow their +documentation for details, otherwise `cargo run` will get you where to want to be. + +## Contribution +Contributions of various kinds are welcome and appreciated. + +## License +Zero-Clause BSD + +https://opensource.org/licenses/0BSD + +https://tldrlegal.com/license/bsd-0-clause-license diff --git a/screenshots/configuration.png b/screenshots/configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..54990ab09c5168cde17e607f14ee3e7a4b912166 GIT binary patch literal 35070 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 V@etmZ5MEJ&Peq@kK2m%AzW{Ik99RGV literal 0 HcmV?d00001 diff --git a/screenshots/syncing.png b/screenshots/syncing.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fbfe4ae7838ae535d88c4b7e8b5ac706174025 GIT binary patch literal 20509 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, open_dialog: Controller, + menu_popover: gtk::Popover, + about_dialog: gtk::AboutDialog, } #[relm4::component(async)] @@ -176,6 +179,27 @@ impl AsyncComponent for App { set_orientation: gtk::Orientation::Vertical, gtk::HeaderBar { + pack_end = >k::MenuButton { + set_direction: gtk::ArrowType::None, + set_icon_name: "open-menu-symbolic", + #[wrap(Some)] + set_popover: menu_popover = >k::Popover { + set_halign: gtk::Align::End, + set_position: gtk::PositionType::Bottom, + + gtk::Box { + set_orientation: gtk::Orientation::Vertical, + set_spacing: 5, + + gtk::Button { + set_label: "About", + connect_clicked[sender] => move |_| { + sender.input(AppInput::ShowAboutDialog); + }, + }, + }, + }, + }, }, gtk::Box { @@ -458,19 +482,20 @@ impl AsyncComponent for App { gtk::Box { set_height_request: 100, set_orientation: gtk::Orientation::Vertical, + set_spacing: 10, gtk::Label { add_css_class: "heading", set_halign: gtk::Align::Start, set_label: "Consensus node", - set_margin_bottom: 10, }, - // Match only because `if let Some(x) = y` is not yet supported here + // TODO: Match only because `if let Some(x) = y` is not yet supported here: https://github.com/Relm4/Relm4/issues/582 #[transition = "SlideUpDown"] match &node_state.sync_state { Some(sync_state) => gtk::Box { set_orientation: gtk::Orientation::Vertical, + set_spacing: 10, gtk::Box { gtk::Label { @@ -504,8 +529,6 @@ impl AsyncComponent for App { gtk::ProgressBar { #[watch] set_fraction: node_state.best_block_number as f64 / sync_state.target as f64, - set_margin_bottom: 10, - set_margin_top: 10, }, }, None => gtk::Box { @@ -523,23 +546,25 @@ impl AsyncComponent for App { gtk::Box { set_orientation: gtk::Orientation::Vertical, + set_spacing: 10, set_valign: gtk::Align::Start, gtk::Label { add_css_class: "heading", set_halign: gtk::Align::Start, set_label: "Farmer", - set_margin_bottom: 10, }, // TODO: Render all farms, not just the first one - // Match only because `if let Some(x) = y` is not yet supported here + // TODO: Match only because `if let Some(x) = y` is not yet supported here: https://github.com/Relm4/Relm4/issues/582 #[transition = "SlideUpDown"] match (&farmer_state.plotting_state[0], node_state.sync_state.is_none()) { (Some(plotting_state), true) => gtk::Box { set_orientation: gtk::Orientation::Vertical, gtk::Box { + set_spacing: 10, + gtk::Label { set_halign: gtk::Align::Start, @@ -571,8 +596,6 @@ impl AsyncComponent for App { gtk::ProgressBar { #[watch] set_fraction: plotting_state.progress as f64 / 100.0, - set_margin_bottom: 10, - set_margin_top: 10, }, }, (None, true) => gtk::Box { @@ -653,14 +676,35 @@ impl AsyncComponent for App { OpenDialogResponse::Cancel => AppInput::Ignore, }); - let model = App { + let about_dialog = gtk::AboutDialog::builder() + .title("About") + .program_name("Space Acres") + .version(env!("CARGO_PKG_VERSION")) + .authors(env!("CARGO_PKG_AUTHORS").split(':').collect::>()) + // TODO: Use https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6643 once available + .license("Zero-Clause BSD: https://opensource.org/license/0bsd/") + .website("https://github.com/nazar-pc/space-acres") + .comments(env!("CARGO_PKG_DESCRIPTION")) + .transient_for(&root) + .build(); + about_dialog.connect_close_request(|about_dialog| { + about_dialog.hide(); + gtk::glib::Propagation::Stop + }); + + let mut model = App { current_view: View::Loading(String::new()), backend_action_sender: action_sender, open_dialog, + // Hack to initialize a field before this data structure is used + menu_popover: gtk::Popover::default(), + about_dialog, }; let widgets = view_output!(); + model.menu_popover = widgets.menu_popover.clone(); + AsyncComponentParts { model, widgets } } @@ -677,6 +721,10 @@ impl AsyncComponent for App { AppInput::Configuration(event) => { self.process_configuration_event(event).await; } + AppInput::ShowAboutDialog => { + self.menu_popover.hide(); + self.about_dialog.show(); + } AppInput::Ignore => { // Ignore }