diff --git a/Cargo.lock b/Cargo.lock index 9017663..a0f192a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -269,6 +269,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "built" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99c4cdc7b2c2364182331055623bdf45254fcb679fea565c40c3c11c101889a" +dependencies = [ + "cargo-lock", + "chrono", + "git2", +] + [[package]] name = "bumpalo" version = "3.13.0" @@ -330,11 +341,26 @@ dependencies = [ "vec_map", ] +[[package]] +name = "cargo-lock" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11c675378efb449ed3ce8de78d75d0d80542fc98487c26aba28eb3b82feac72" +dependencies = [ + "semver", + "serde", + "toml 0.7.4", + "url", +] + [[package]] name = "cc" version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] [[package]] name = "cfg-expr" @@ -1320,6 +1346,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "git2" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + [[package]] name = "glam" version = "0.21.3" @@ -1961,6 +2000,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + [[package]] name = "jpeg-decoder" version = "0.3.0" @@ -2041,6 +2089,18 @@ version = "0.2.144" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +[[package]] +name = "libgit2-sys" +version = "0.15.2+1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + [[package]] name = "libloading" version = "0.7.4" @@ -2057,6 +2117,18 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +[[package]] +name = "libz-sys" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -3277,6 +3349,15 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +dependencies = [ + "serde", +] + [[package]] name = "serde" version = "1.0.163" @@ -3335,6 +3416,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bincode", + "built", "bytes", "chrono", "clap", diff --git a/Cargo.toml b/Cargo.toml index 05da7c2..39be3fb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,9 @@ html2text = "0.6.0" bytes = "1.4.0" rfd = "0.11.4" +[build-dependencies] +built = { version = "0.6.1", features = ["git2", "chrono"] } + [profile.release] lto = true strip = true diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..d8f91cb --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + built::write_built_file().expect("Failed to acquire build-time information"); +} diff --git a/src/gui/view/settings_view.rs b/src/gui/view/settings_view.rs index 0201e39..970f211 100644 --- a/src/gui/view/settings_view.rs +++ b/src/gui/view/settings_view.rs @@ -9,6 +9,7 @@ use crate::gui::{styles, troxide_widget, Message as GuiMessage, Tab}; use caching_widget::{Caching, Message as CachingMessage}; use database_widget::{Database, Message as DatabaseMessage}; +mod about_widget; mod caching_widget; mod database_widget; @@ -79,6 +80,7 @@ impl SettingsTab { self.appearance_settings_view(), self.database_settings.view().map(Message::Database), self.caching_settings.view().map(Message::Caching), + about_widget::about_widget(), ] .spacing(5) .padding(5); diff --git a/src/gui/view/settings_view/about_widget.rs b/src/gui/view/settings_view/about_widget.rs new file mode 100644 index 0000000..55be644 --- /dev/null +++ b/src/gui/view/settings_view/about_widget.rs @@ -0,0 +1,52 @@ +use crate::gui::styles; + +use super::Message; +use iced::{ + widget::{column, container, text}, + Element, Renderer, +}; +use iced_aw::Grid; + +pub fn about_widget() -> Element<'static, Message, Renderer> { + let mut grid = Grid::with_columns(2); + + grid.insert(text("Program")); + grid.insert(text(built_info::PKG_NAME)); + + grid.insert(text("Author")); + grid.insert(text(built_info::PKG_AUTHORS)); + + grid.insert(text("Version")); + grid.insert(text(built_info::PKG_VERSION)); + + if !built_info::GIT_DIRTY.unwrap_or(false) { + if let Some(commit_hash) = built_info::GIT_COMMIT_HASH { + grid.insert(text("Commit Hash")); + grid.insert(text(commit_hash)); + } + } + + grid.insert(text("Build Time")); + grid.insert(text(built_info::BUILT_TIME_UTC)); + + grid.insert(text("Rust Version ")); // adding some space in grid since it is the longest text + grid.insert(text(built_info::RUSTC_VERSION)); + + let content = column![ + text("About") + .style(styles::text_styles::purple_text_theme()) + .size(25), + grid + ] + .spacing(10); + + container(content) + .style(styles::container_styles::first_class_container_theme()) + .width(1000) + .padding(5) + .into() +} + +mod built_info { + include!(concat!(env!("OUT_DIR"), "/built.rs")); +}