From 989a40a4f5459fed8632345c8216675480050d68 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 11:54:32 +0100 Subject: [PATCH 01/76] adds cli and find_devices/list option --- Cargo.lock | 665 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 6 + rust-toolchain.toml | 3 + src/check_inputs.rs | 5 +- src/cli.rs | 101 +++++++ src/config.rs | 46 +++ src/find_devices.rs | 76 +++++ src/lock.rs | 33 ++- src/main.rs | 41 ++- src/watch.rs | 172 ++++++++++++ 10 files changed, 1121 insertions(+), 27 deletions(-) create mode 100644 rust-toolchain.toml create mode 100644 src/cli.rs create mode 100644 src/config.rs create mode 100644 src/find_devices.rs create mode 100644 src/watch.rs diff --git a/Cargo.lock b/Cargo.lock index c29b134..576c0db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,671 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + [[package]] name = "break-enforcer-s" version = "0.1.0" +dependencies = [ + "clap", + "color-eyre", + "dialoguer", + "serde", + "thiserror", + "toml", +] + +[[package]] +name = "cc" +version = "1.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "color-eyre" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "console" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys", +] + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "fuzzy-matcher", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "proc-macro2" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + +[[package]] +name = "syn" +version = "2.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "toml" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af06656561d28735e9c1cd63dfd57132c8155426aa6af24f36a00a351f88c48e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18769cd1cec395d70860ceb4d932812a0b4d06b1a4bb336745a4d21b9496e992" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[package]] +name = "winnow" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" +dependencies = [ + "memchr", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/Cargo.toml b/Cargo.toml index 7d6109a..655fc9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,9 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +clap = { version = "4.5.2", features = ["derive"] } +color-eyre = "0.6.2" +dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } +serde = { version = "1.0.197", features = ["derive"] } +thiserror = "1.0.58" +toml = "0.8.11" diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..208a88e --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "nightly-2024-03-01" +profile = "default" diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 0410f98..b257f2c 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -9,8 +9,6 @@ use std::{ thread, }; -use crate::T_BREAK; - pub fn wait_for_input(file: &mut File) { let mut packet = [0u8; 24]; file.read_exact(&mut packet).unwrap(); @@ -38,11 +36,12 @@ pub fn inactivity_watcher( break_skip_sender: &Sender, break_skip_sent: &Arc, input_receiver: &Receiver, + work_duration: std::time::Duration, ) { work_start_receiver.recv().unwrap(); loop { - match input_receiver.recv_timeout(T_BREAK) { + match input_receiver.recv_timeout(work_duration) { Ok(_) => (), Err(RecvTimeoutError::Timeout) => { if !break_skip_sent.load(Ordering::Acquire) { diff --git a/src/cli.rs b/src/cli.rs new file mode 100644 index 0000000..b9deb94 --- /dev/null +++ b/src/cli.rs @@ -0,0 +1,101 @@ +use clap::{Parser, Subcommand}; +use std::num::ParseFloatError; +use std::path::PathBuf; +use std::time::Duration; + +#[derive(Debug, Subcommand)] +pub enum Commands { + Run { + /// Period after which input will be disabled. + /// run help for the format. + #[arg(short, long, value_name = "work", value_parser = parse_duration)] + work_duration: Duration, + /// Length of the breaks, after this period input is resumed. + /// run help for the format. + #[arg(short, long, value_name = "break", value_parser = parse_duration)] + break_duration: Duration, + /// Duration ahead of the break to show a notification + /// run help for the format. + #[arg(short, long, value_name = "warn", value_parser = parse_duration)] + grace_duration: Duration, + }, + FindDevices, +} + +/// Disables specified input devices during breaks. The period between breaks, +/// length of the breaks and time before getting a warning can all be specified. +/// +/// Durations can be passed in two formats: +/// - , for example: 32m +/// unit is one of h,m and s +/// - hh:mm:ss, where hh and mm are optional +/// example: 1:30:15 +/// one and a halve hour and 15 seconds +/// example: 10:40 +/// ten minutes and 40 seconds +/// +#[derive(Parser)] +#[command(version, about, verbatim_doc_comment)] +pub struct Cli { + #[command(subcommand)] + pub command: Commands, + /// Path to create/read/update list of devices to/from + #[arg(short, long)] + pub config_path: Option, +} + +#[derive(Debug, thiserror::Error)] +pub enum ParseError { + #[error("Could not parse the second part of the time as number")] + Second(ParseFloatError, String), + #[error("Could not parse the minute part of the time as number")] + Minute(ParseFloatError, String), + #[error("Could not parse the minute part of the time as number")] + Hour(ParseFloatError, String), +} + +macro_rules! err_builder { + ($name:ident, $variant:expr) => { + fn $name(e: ParseFloatError, s: &str) -> ParseError { + $variant(e, s.to_owned()) + } + }; +} + +err_builder!(second_err, ParseError::Second); +err_builder!(minute_err, ParseError::Minute); +err_builder!(hour_err, ParseError::Hour); + +/// Parses a string in format +/// hh:mm:ss, +/// mm:ss, +/// ss, +pub(crate) fn parse_colon_duration(arg: &str) -> Result { + let Some((rest, seconds)) = arg.rsplit_once(':') else { + return arg.parse().map_err(|e| second_err(e, arg)); + }; + let mut seconds = seconds.parse().map_err(|e| second_err(e, arg))?; + let Some((hours, minutes)) = rest.rsplit_once(':') else { + return Ok(seconds); + }; + seconds += 60.0 * minutes.parse::().map_err(|e| minute_err(e, minutes))?; + if hours.is_empty() { + return Ok(seconds); + }; + seconds += 60.0 * 60.0 * hours.parse::().map_err(|e| hour_err(e, hours))?; + Ok(seconds) +} + +/// Parse a string in format hh:mm:ss to a `Duration` +pub(crate) fn parse_duration(arg: &str) -> Result { + let seconds = if let Some(hours) = arg.strip_suffix('h') { + 60. * 60. * hours.parse::().map_err(|e| hour_err(e, hours))? + } else if let Some(minutes) = arg.strip_suffix('m') { + 60. * minutes.parse::().map_err(|e| minute_err(e, minutes))? + } else if let Some(seconds) = arg.strip_suffix('s') { + seconds.parse::().map_err(|e| second_err(e, seconds))? + } else { + parse_colon_duration(arg)? + }; + Ok(std::time::Duration::from_secs_f32(seconds)) +} diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..c410bfd --- /dev/null +++ b/src/config.rs @@ -0,0 +1,46 @@ +use color_eyre::eyre::{eyre, Context}; +use color_eyre::{Result, Section}; + +use std::fs; +use std::io::ErrorKind; +use std::path::{Path, PathBuf}; + +use crate::Device; + +fn setup_default_path() -> PathBuf { + let dir = Path::new(concat!("/etc/", env!("CARGO_CRATE_NAME"), ".toml")); + assert!(dir.is_dir(), "/etc should exist on unix"); + dir.to_path_buf() +} + +pub(crate) fn read(custom_path: Option) -> Result> { + let path = custom_path.unwrap_or_else(setup_default_path); + let bytes = match fs::read(&path) { + Ok(bytes) => bytes, + Err(err) if err.kind() == ErrorKind::NotFound => return Ok(Vec::new()), + Err(err) => { + return Err(err) + .wrap_err("Could not read config which might exist") + .with_note(|| format!("path: {}", path.display())) + } + }; + + let s = String::from_utf8(bytes).wrap_err("Corrupt config, contained non utf8")?; + toml::from_str(&s).wrap_err("Could not deserialize to list of devices") +} + +pub(crate) fn write(to_lock: &[Device], custom_path: Option) -> Result<()> { + let data = + toml::to_string_pretty(&to_lock).wrap_err("Could not serialize list of devices to toml")?; + + let path = custom_path.unwrap_or_else(setup_default_path); + if let Some(dir) = path.parent() { + if !dir.is_dir() { + return Err( + eyre!("Dir does not exist!").with_note(|| format!("dir: {}", dir.display())) + ); + } + } + + fs::write(path, data.as_bytes()).wrap_err("Could not write serialized list to file") +} diff --git a/src/find_devices.rs b/src/find_devices.rs new file mode 100644 index 0000000..87c569c --- /dev/null +++ b/src/find_devices.rs @@ -0,0 +1,76 @@ +use std::collections::HashSet; +use std::path::PathBuf; +use std::thread; +use std::time::Duration; + +use color_eyre::eyre::Context; +use color_eyre::Result; +use dialoguer::{Confirm, MultiSelect}; + +use crate::config; +use crate::lock::Device; +use crate::watch::Devices; + +// todo deal with devices with multiple names +pub fn list(devices: &Devices, custom_config_path: Option) -> Result<()> { + let config: HashSet<_> = config::read(custom_config_path.clone()) + .wrap_err("Could not read custom config")? + .into_iter() + .collect(); + + let devices = devices.list()?; + let mut options: Vec<_> = devices + .iter() + .map(|dev @ Device { name, .. }| (name, config.contains(dev))) + .collect(); + + loop { + let Some(selection) = MultiSelect::new() + .with_prompt("Use up and down arrow keys and space to select. Enter to continue") + .items_checked(&options) + .interact_opt() + .unwrap() + else { + println!("No devices selected"); + return Ok(()); + }; + + { + println!("Locking devices, do not press any key!"); + // do not lock while user is still holding down + // enter from the multiselect + thread::sleep(Duration::from_secs(2)); + let mut locked = Vec::new(); + for item in &selection { + options[*item].1 = true; + locked.push(devices[*item].clone().lock()?); + } + + println!("Try to use them, they should be blocked"); + thread::sleep(Duration::from_secs(8)); + println!("\n\nUnlocking, Stop typing!"); + } + thread::sleep(Duration::from_secs(2)); + + let Some(ready) = Confirm::new() + .with_prompt("Are you happy with the blocked devices?") + .interact_opt() + .unwrap() + else { + println!("Cancelling"); + return Ok(()); + }; + + if ready { + let selected: Vec<_> = devices + .iter() + .enumerate() + .filter(|(i, _)| selection.contains(i)) + .map(|(_, dev)| dev) + .cloned() + .collect(); + config::write(&selected, custom_config_path).unwrap(); + return Ok(()); + } + } +} diff --git a/src/lock.rs b/src/lock.rs index 22c245b..e630c1a 100644 --- a/src/lock.rs +++ b/src/lock.rs @@ -1,6 +1,7 @@ // Source: https://github.com/dvdsk/disable-input/blob/main/src/input.rs // (copied with permission) +use std::hash::Hash; use std::io::{BufRead, BufReader}; use std::process::{Child, ChildStderr, Command, Stdio}; use std::sync::atomic::{AtomicBool, Ordering}; @@ -9,14 +10,21 @@ use std::sync::{mpsc, Arc, Mutex}; use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant}; -#[derive(Debug)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, thiserror::Error)] pub enum CommandError { - Io(std::io::Error), - // TODO: why unused? - #[allow(unused)] - Failed { - stderr: String, - }, + #[error("must run as root")] + NotRunningAsRoot, + #[error("Io error happened: {0:?}")] + Io(Arc), +} + +impl CommandError { + // silly io::Error is not clone :( + pub fn io(err: std::io::Error) -> Self { + Self::Io(Arc::new(err)) + } } pub struct LockedDevice { @@ -39,7 +47,7 @@ impl Drop for LockedDevice { } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] pub struct Device { pub event_path: String, pub name: String, @@ -68,8 +76,7 @@ impl Device { panic!("{err}"); } // todo figure out startup vs keyboard in/out error - let (new_process, new_stderr) = - lock_input(&event_path).unwrap(); + let (new_process, new_stderr) = lock_input(&event_path).unwrap(); *process.lock().unwrap() = new_process; stderr = Some(new_stderr); } @@ -91,7 +98,7 @@ fn lock_input(event_path: &str) -> Result<(Child, ChildStderr), CommandError> { .stdout(Stdio::null()) .stderr(Stdio::piped()) .spawn() - .map_err(CommandError::Io)?; + .map_err(CommandError::io)?; let stderr = process.stderr.take().unwrap(); Ok((process, stderr)) } @@ -132,9 +139,9 @@ fn run_evtest() -> Vec { let _handle = thread::spawn(move || { let reader = BufReader::new(evtest_process.stderr.take().unwrap()); for line in reader.lines() { - let err_happend = line.is_err(); + let err_happened = line.is_err(); tx.send(line).unwrap(); - if err_happend { + if err_happened { return; } } diff --git a/src/main.rs b/src/main.rs index 4f8b8d8..9fe9486 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +#![feature(thread_sleep_until)] + use std::{ fs::File, sync::{ @@ -6,12 +8,17 @@ use std::{ Arc, }, thread, - time::Duration, }; mod check_inputs; +mod cli; +mod config; +mod find_devices; mod lock; mod notification; +mod watch; + +use clap::Parser; use crate::check_inputs::inactivity_watcher; use crate::check_inputs::wait_for_any_input; @@ -27,11 +34,22 @@ const ALL_DEVICES: [&str; 2] = [MOUSE_DEVICE, KEYBOARD_DEVICE]; const MOUSE_NAMES: [&str; 2] = ["HSMshift", "Hippus N.V. HSMshift"]; const KEYBOARD_NAME: &str = "HID 046a:010d"; -const T_BREAK: Duration = Duration::from_secs(5 * 60); -const T_WORK: Duration = Duration::from_secs(15 * 60); -const T_GRACE: Duration = Duration::from_secs(20); - fn main() { + let devices = watch::devices().unwrap(); + + let args = cli::Cli::parse(); + let (work_duration, break_duration, grace_duration) = match args.command { + cli::Commands::Run { + work_duration, + break_duration, + grace_duration, + } => (work_duration, break_duration, grace_duration), + cli::Commands::FindDevices => { + find_devices::list(&devices, args.config_path).unwrap(); + return; + } + }; + let device_files = ALL_DEVICES.map(File::open).map(Result::unwrap); let device_files2 = ALL_DEVICES.map(File::open).map(Result::unwrap); @@ -51,6 +69,7 @@ fn main() { &break_skip_sender, &break_skip_is_sent, &recv_any_input2, + work_duration, ); }); } @@ -58,9 +77,9 @@ fn main() { loop { notify_all_users("Waiting for input to start work timer..."); block_on_new_input(&recv_any_input); - notify_all_users(&format!("Starting work timer for {T_WORK:?}")); + notify_all_users(&format!("Starting work timer for {break_duration:?}")); work_start_sender.send(true).unwrap(); - match break_skip_receiver.recv_timeout(T_WORK - T_GRACE) { + match break_skip_receiver.recv_timeout(break_duration - grace_duration) { Ok(_) => { notify_all_users("No input for breaktime"); block_on_new_input(&recv_any_input); @@ -71,8 +90,8 @@ fn main() { Err(e) => panic!("Unexpected error: {e}"), } - notify_all_users(&format!("Locking in {T_GRACE:?}!")); - thread::sleep(T_GRACE); + notify_all_users(&format!("Locking in {grace_duration:?}!")); + thread::sleep(grace_duration); let mut locks = Vec::new(); @@ -83,8 +102,8 @@ fn main() { locks.push(keyboard.clone().lock().unwrap()); } - notify_all_users(&format!("Starting break timer for {T_BREAK:?}")); - thread::sleep(T_BREAK); + notify_all_users(&format!("Starting break timer for {work_duration:?}")); + thread::sleep(work_duration); for lock in locks { lock.unlock(); diff --git a/src/watch.rs b/src/watch.rs new file mode 100644 index 0000000..8c70a32 --- /dev/null +++ b/src/watch.rs @@ -0,0 +1,172 @@ +use std::collections::{HashMap, HashSet}; +use std::io::{BufRead, BufReader}; +use std::process::{Command, Stdio}; +use std::sync::{Arc, Mutex}; +use std::thread; +use std::time::{Duration, Instant}; + +use crate::lock::CommandError; +use crate::lock::Device; + +type EventPath = String; +type Names = HashSet; + +#[derive(Debug, Default)] +struct Inner { + init_scan_done: bool, + max_period: Option, + last_added: Option, + err: Option, + map: HashMap, +} + +#[derive(Debug, Clone, Default)] +pub struct Devices(Arc>); + +macro_rules! lock_and_call_inner { + ($is_pub:vis $name:ident, $($arg:ident: $type:ty),* $(;$ret:ty)?) => { + $is_pub fn $name(&self, $($arg: $type),*) $(-> $ret)? { + self.0.lock().unwrap().$name($($arg),*) + } + }; +} + +impl Devices { + lock_and_call_inner!(set_error, error: CommandError); + lock_and_call_inner!(insert, device: Device); + lock_and_call_inner!(list_without_blocking,; Result, CommandError>); + lock_and_call_inner!(n_discovered,; Result); + lock_and_call_inner!(max_period,; Option); + lock_and_call_inner!(last_added,; Option); + lock_and_call_inner!(init_scan_done,; bool); + + pub fn list(&self) -> Result, CommandError> { + if self.init_scan_done() { + self.list_without_blocking() + } else { + self.block_till_filled()?; + self.list_without_blocking() + } + } + + fn block_till_filled(&self) -> Result<(), CommandError> { + let start = Instant::now(); + while self.n_discovered()? < 2 { + thread::sleep(Duration::from_millis(50)); + + if start.elapsed() > Duration::from_secs(5) && self.n_discovered()? > 0 { + break; + }; + } + + loop { + let period = self + .max_period() + .expect("should be Some given there are 2 devices discovered"); + let prev_last_added = self.last_added().expect("same"); + let margin = Duration::from_millis(200); + thread::sleep_until(prev_last_added + period + margin); + + if self.last_added().expect("same") > prev_last_added { + self.0.lock().unwrap().init_scan_done = false; + break; // must have discovered all + } + } + + Ok(()) + } +} + +impl Inner { + fn init_scan_done(&self) -> bool { + self.init_scan_done + } + fn last_added(&self) -> Option { + self.last_added + } + fn max_period(&self) -> Option { + self.max_period + } + + fn n_discovered(&self) -> Result { + if let Some(err) = self.err.clone() { + return Err(err); + } + Ok(self.map.len()) + } + + fn set_error(&mut self, e: CommandError) { + self.err = Some(e); + } + + fn insert(&mut self, Device { event_path, name }: Device) { + if let Some(last_added) = self.last_added { + self.max_period = self.max_period.max(Some(last_added.elapsed())); + } + self.last_added = Some(Instant::now()); + if let Some(names) = self.map.get_mut(&event_path) { + names.insert(name); + } else { + self.map.insert(event_path, HashSet::from([name])); + } + } + + fn list_without_blocking(&self) -> Result, CommandError> { + if let Some(error_happened) = self.err.clone() { + return Err(error_happened); + } + + let mut list: Vec<_> = self + .map + .iter() + .map(|(event_path, name)| Device { + event_path: event_path.clone(), + name: name.iter().next().unwrap().clone(), + }) + .collect(); + list.sort_unstable_by_key(|dev| dev.name.clone()); + + Ok(list) + } +} + +pub fn devices() -> Result { + let mut handle = Command::new("evtest") + .stdout(Stdio::null()) + .stderr(Stdio::piped()) + .spawn() + .map_err(CommandError::io)?; + + let reader = handle.stderr.take().unwrap(); + let devices = Devices::default(); + + { + let devices = devices.clone(); + thread::spawn(move || { + let reader = BufReader::new(reader); + for line in reader.lines() { + let line = match line { + Err(e) => { + devices.set_error(CommandError::io(e)); + return; + } + Ok(line) => line, + }; + if line.contains("Not running as root") { + devices.set_error(CommandError::NotRunningAsRoot); + return; + } + + if !line.starts_with("/dev/input/event") { + continue; + } + let (event_path, name) = line.split_once(':').unwrap(); + let event_path = event_path.trim().to_string(); + let name = name.trim().to_string(); + devices.insert(Device { event_path, name }); + } + }); + } + + Ok(devices) +} From 70fe494f979c1334865aff477f2c30adafa69b3e Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 11:55:45 +0100 Subject: [PATCH 02/76] rename find_devices::list -> setup::wizard --- src/cli.rs | 2 +- src/main.rs | 6 +++--- src/{find_devices.rs => setup.rs} | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/{find_devices.rs => setup.rs} (96%) diff --git a/src/cli.rs b/src/cli.rs index b9deb94..ca1006e 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -19,7 +19,7 @@ pub enum Commands { #[arg(short, long, value_name = "warn", value_parser = parse_duration)] grace_duration: Duration, }, - FindDevices, + Wizard, } /// Disables specified input devices during breaks. The period between breaks, diff --git a/src/main.rs b/src/main.rs index 9fe9486..a58d4d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,9 +13,9 @@ use std::{ mod check_inputs; mod cli; mod config; -mod find_devices; mod lock; mod notification; +mod setup; mod watch; use clap::Parser; @@ -44,8 +44,8 @@ fn main() { break_duration, grace_duration, } => (work_duration, break_duration, grace_duration), - cli::Commands::FindDevices => { - find_devices::list(&devices, args.config_path).unwrap(); + cli::Commands::Wizard => { + setup::wizard(&devices, args.config_path).unwrap(); return; } }; diff --git a/src/find_devices.rs b/src/setup.rs similarity index 96% rename from src/find_devices.rs rename to src/setup.rs index 87c569c..9effc84 100644 --- a/src/find_devices.rs +++ b/src/setup.rs @@ -12,7 +12,7 @@ use crate::lock::Device; use crate::watch::Devices; // todo deal with devices with multiple names -pub fn list(devices: &Devices, custom_config_path: Option) -> Result<()> { +pub fn wizard(devices: &Devices, custom_config_path: Option) -> Result<()> { let config: HashSet<_> = config::read(custom_config_path.clone()) .wrap_err("Could not read custom config")? .into_iter() From b6ee98f806120b4f4482ae7632fdc44d6d211972 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 11:57:45 +0100 Subject: [PATCH 03/76] document wizard in help --- src/cli.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cli.rs b/src/cli.rs index ca1006e..c670a6c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -5,6 +5,7 @@ use std::time::Duration; #[derive(Debug, Subcommand)] pub enum Commands { + /// Periodically block devices in config (setup using wizard) Run { /// Period after which input will be disabled. /// run help for the format. @@ -19,6 +20,8 @@ pub enum Commands { #[arg(short, long, value_name = "warn", value_parser = parse_duration)] grace_duration: Duration, }, + /// Pick the devices to block and write them to a config file. + /// (Interactive UI) Wizard, } From 544fe02406b8e3a9d4f391f71f21afbc43b59e68 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 12:05:23 +0100 Subject: [PATCH 04/76] replaces monitoring device constants with those from config file --- src/check_inputs.rs | 2 +- src/lock.rs | 4 ++++ src/main.rs | 29 ++++++++++++++++++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index b257f2c..7e3944c 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -14,7 +14,7 @@ pub fn wait_for_input(file: &mut File) { file.read_exact(&mut packet).unwrap(); } -pub fn wait_for_any_input(files: [File; 2]) -> Receiver { +pub fn wait_for_any_input(files: impl Iterator) -> Receiver { let (send, recv) = channel(); for mut file in files { diff --git a/src/lock.rs b/src/lock.rs index e630c1a..bd2cc3f 100644 --- a/src/lock.rs +++ b/src/lock.rs @@ -54,6 +54,10 @@ pub struct Device { } impl Device { + pub fn event_path(&self) -> String { + self.event_path.clone() + } + pub fn lock(self) -> Result { let Self { event_path, .. } = self; let (process, stderr) = lock_input(&event_path)?; diff --git a/src/main.rs b/src/main.rs index a58d4d7..b19369e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,23 +19,19 @@ mod setup; mod watch; use clap::Parser; +use color_eyre::eyre::Context; use crate::check_inputs::inactivity_watcher; use crate::check_inputs::wait_for_any_input; use crate::lock::Device; use crate::notification::notify_all_users; -// For monitoring input -const MOUSE_DEVICE: &str = "/dev/input/mice"; -const KEYBOARD_DEVICE: &str = "/dev/input/by-id/usb-046a_010d-event-kbd"; -const ALL_DEVICES: [&str; 2] = [MOUSE_DEVICE, KEYBOARD_DEVICE]; - // For blocking input const MOUSE_NAMES: [&str; 2] = ["HSMshift", "Hippus N.V. HSMshift"]; const KEYBOARD_NAME: &str = "HID 046a:010d"; -fn main() { - let devices = watch::devices().unwrap(); +fn main() -> color_eyre::Result<()> { + let online_devices = watch::devices().unwrap(); let args = cli::Cli::parse(); let (work_duration, break_duration, grace_duration) = match args.command { @@ -45,13 +41,24 @@ fn main() { grace_duration, } => (work_duration, break_duration, grace_duration), cli::Commands::Wizard => { - setup::wizard(&devices, args.config_path).unwrap(); - return; + setup::wizard(&online_devices, args.config_path).wrap_err("Error running wizard")?; + return Ok(()); } }; - let device_files = ALL_DEVICES.map(File::open).map(Result::unwrap); - let device_files2 = ALL_DEVICES.map(File::open).map(Result::unwrap); + let to_block = + config::read(args.config_path).wrap_err("Could not read devices to block from config")?; + + let device_files = to_block + .iter() + .map(Device::event_path) + .map(File::open) + .map(Result::unwrap); + let device_files2 = to_block + .iter() + .map(Device::event_path) + .map(File::open) + .map(Result::unwrap); let (break_skip_sender, break_skip_receiver) = channel(); let (work_start_sender, work_start_receiver) = channel(); From 97b6ac644abe005127b13253cb1e3365b7211d4b Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 12:46:21 +0100 Subject: [PATCH 05/76] use event paths from online_devices --- src/lock.rs | 56 ++++------------------------------------------------ src/main.rs | 21 ++++++-------------- src/watch.rs | 12 +++++++++++ 3 files changed, 22 insertions(+), 67 deletions(-) diff --git a/src/lock.rs b/src/lock.rs index bd2cc3f..9bef5bf 100644 --- a/src/lock.rs +++ b/src/lock.rs @@ -5,8 +5,7 @@ use std::hash::Hash; use std::io::{BufRead, BufReader}; use std::process::{Child, ChildStderr, Command, Stdio}; use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::mpsc::TryRecvError; -use std::sync::{mpsc, Arc, Mutex}; +use std::sync::{Arc, Mutex}; use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant}; @@ -57,7 +56,9 @@ impl Device { pub fn event_path(&self) -> String { self.event_path.clone() } - + pub fn name(&self) -> String { + self.name.clone() + } pub fn lock(self) -> Result { let Self { event_path, .. } = self; let (process, stderr) = lock_input(&event_path)?; @@ -115,52 +116,3 @@ fn wait_for_stderr_end(stderr: ChildStderr) -> String { } error.as_slice().join("\n") } - -pub fn list_devices() -> Vec { - let output = run_evtest(); - println!("discovering input devices"); - output - .into_iter() - .filter(|s| s.starts_with("/dev/input/event")) - .map(|s| { - let (event_path, name) = s.split_once(':').unwrap(); - let event_path = event_path.trim().to_string(); - let name = name.trim().to_string(); - Device { event_path, name } - }) - .collect() -} - -fn run_evtest() -> Vec { - let mut evtest_process = Command::new("evtest") - .stdout(Stdio::null()) - .stderr(Stdio::piped()) - .spawn() - .unwrap(); - - let (tx, rx) = mpsc::channel(); - - let _handle = thread::spawn(move || { - let reader = BufReader::new(evtest_process.stderr.take().unwrap()); - for line in reader.lines() { - let err_happened = line.is_err(); - tx.send(line).unwrap(); - if err_happened { - return; - } - } - }); - - thread::sleep(Duration::from_secs(2)); - - let mut lines = Vec::new(); - loop { - match rx.try_recv() { - Ok(Ok(line)) => lines.push(line), - Ok(Err(e)) => panic!("Unexpected error {e}"), - Err(TryRecvError::Empty | TryRecvError::Disconnected) => { - return lines; - } - } - } -} diff --git a/src/main.rs b/src/main.rs index b19369e..b04a3cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,10 +26,6 @@ use crate::check_inputs::wait_for_any_input; use crate::lock::Device; use crate::notification::notify_all_users; -// For blocking input -const MOUSE_NAMES: [&str; 2] = ["HSMshift", "Hippus N.V. HSMshift"]; -const KEYBOARD_NAME: &str = "HID 046a:010d"; - fn main() -> color_eyre::Result<()> { let online_devices = watch::devices().unwrap(); @@ -102,11 +98,12 @@ fn main() -> color_eyre::Result<()> { let mut locks = Vec::new(); - for mouse in MOUSE_NAMES.map(find_event).into_iter().flatten() { - locks.push(mouse.clone().lock().unwrap()); - } - for keyboard in find_event(KEYBOARD_NAME) { - locks.push(keyboard.clone().lock().unwrap()); + for device in to_block + .iter() + .map(Device::name) + .filter_map(|name| online_devices.lookup(name)) + { + locks.push(device.clone().lock().unwrap()); } notify_all_users(&format!("Starting break timer for {work_duration:?}")); @@ -127,9 +124,3 @@ fn block_on_new_input(recv_any_input: &Receiver) { recv_any_input.recv().unwrap(); } - -fn find_event(name: &str) -> Vec { - let devices = lock::list_devices(); - - devices.into_iter().filter(|x| x.name == name).collect() -} diff --git a/src/watch.rs b/src/watch.rs index 8c70a32..0bc6630 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -31,7 +31,10 @@ macro_rules! lock_and_call_inner { }; } +// Todo remove things from map? + impl Devices { + lock_and_call_inner!(pub lookup, name: String; Option); lock_and_call_inner!(set_error, error: CommandError); lock_and_call_inner!(insert, device: Device); lock_and_call_inner!(list_without_blocking,; Result, CommandError>); @@ -78,6 +81,15 @@ impl Devices { } impl Inner { + fn lookup(&self, name: String) -> Option { + self.map + .iter() + .find(|(_, names)| names.contains(&name)) + .map(|(path, _)| path) + .cloned() + .map(|event_path| Device { event_path, name }) + } + fn init_scan_done(&self) -> bool { self.init_scan_done } From 3c0e967162d80eea95867b368b46478f59097799 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 15 Mar 2024 13:21:46 +0100 Subject: [PATCH 06/76] renames --- Cargo.lock | 4 ++-- src/main.rs | 4 ++-- src/watch.rs | 13 ++++++------- src/{setup.rs => wizard.rs} | 4 ++-- 4 files changed, 12 insertions(+), 13 deletions(-) rename src/{setup.rs => wizard.rs} (94%) diff --git a/Cargo.lock b/Cargo.lock index 576c0db..8884502 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -152,9 +152,9 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "color-eyre" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" dependencies = [ "backtrace", "color-spantrace", diff --git a/src/main.rs b/src/main.rs index b04a3cb..c452c05 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,7 +15,7 @@ mod cli; mod config; mod lock; mod notification; -mod setup; +mod wizard; mod watch; use clap::Parser; @@ -37,7 +37,7 @@ fn main() -> color_eyre::Result<()> { grace_duration, } => (work_duration, break_duration, grace_duration), cli::Commands::Wizard => { - setup::wizard(&online_devices, args.config_path).wrap_err("Error running wizard")?; + wizard::run(&online_devices, args.config_path).wrap_err("Error running wizard")?; return Ok(()); } }; diff --git a/src/watch.rs b/src/watch.rs index 0bc6630..9a1d305 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -21,7 +21,7 @@ struct Inner { } #[derive(Debug, Clone, Default)] -pub struct Devices(Arc>); +pub struct OnlineDevices(Arc>); macro_rules! lock_and_call_inner { ($is_pub:vis $name:ident, $($arg:ident: $type:ty),* $(;$ret:ty)?) => { @@ -31,9 +31,7 @@ macro_rules! lock_and_call_inner { }; } -// Todo remove things from map? - -impl Devices { +impl OnlineDevices { lock_and_call_inner!(pub lookup, name: String; Option); lock_and_call_inner!(set_error, error: CommandError); lock_and_call_inner!(insert, device: Device); @@ -119,7 +117,8 @@ impl Inner { if let Some(names) = self.map.get_mut(&event_path) { names.insert(name); } else { - self.map.insert(event_path, HashSet::from([name])); + let res = self.map.insert(event_path, HashSet::from([name])); + assert_eq!(res, None); } } @@ -142,7 +141,7 @@ impl Inner { } } -pub fn devices() -> Result { +pub fn devices() -> Result { let mut handle = Command::new("evtest") .stdout(Stdio::null()) .stderr(Stdio::piped()) @@ -150,7 +149,7 @@ pub fn devices() -> Result { .map_err(CommandError::io)?; let reader = handle.stderr.take().unwrap(); - let devices = Devices::default(); + let devices = OnlineDevices::default(); { let devices = devices.clone(); diff --git a/src/setup.rs b/src/wizard.rs similarity index 94% rename from src/setup.rs rename to src/wizard.rs index 9effc84..bf7b9c4 100644 --- a/src/setup.rs +++ b/src/wizard.rs @@ -9,10 +9,10 @@ use dialoguer::{Confirm, MultiSelect}; use crate::config; use crate::lock::Device; -use crate::watch::Devices; +use crate::watch::OnlineDevices; // todo deal with devices with multiple names -pub fn wizard(devices: &Devices, custom_config_path: Option) -> Result<()> { +pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Result<()> { let config: HashSet<_> = config::read(custom_config_path.clone()) .wrap_err("Could not read custom config")? .into_iter() From c89cabdabddc43c79ecc4316e812e9d991a7e0fe Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 19 Mar 2024 13:21:53 +0100 Subject: [PATCH 07/76] use evdev sys interface instead of evdev command --- Cargo.lock | 113 +++++++++++++- Cargo.toml | 3 + src/check_inputs.rs | 89 ++++++++--- src/config.rs | 11 +- src/lock.rs | 118 -------------- src/main.rs | 79 +++++----- src/watch.rs | 365 ++++++++++++++++++++++++++++---------------- src/wizard.rs | 36 +++-- 8 files changed, 486 insertions(+), 328 deletions(-) delete mode 100644 src/lock.rs diff --git a/Cargo.lock b/Cargo.lock index 8884502..6004aee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,6 +65,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + [[package]] name = "backtrace" version = "0.3.69" @@ -80,20 +86,47 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "break-enforcer-s" version = "0.1.0" dependencies = [ + "base64", "clap", "color-eyre", "dialoguer", + "evdev", "serde", + "sudo", "thiserror", "toml", ] @@ -232,6 +265,19 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "evdev" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bed59fcc8cfd6b190814a509018388462d3b203cf6dd10db5c00087e72a83f3" +dependencies = [ + "bitvec", + "cfg-if", + "libc", + "nix", + "thiserror", +] + [[package]] name = "eyre" version = "0.6.12" @@ -248,6 +294,12 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -309,12 +361,27 @@ version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + [[package]] name = "memchr" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + [[package]] name = "miniz_oxide" version = "0.7.2" @@ -324,6 +391,19 @@ dependencies = [ "adler", ] +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset", +] + [[package]] name = "object" version = "0.32.2" @@ -369,6 +449,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -381,7 +467,7 @@ version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ - "bitflags", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -438,6 +524,16 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" +[[package]] +name = "sudo" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88bd84d4c082e18e37fef52c0088e4407dabcef19d23a607fb4b5ee03b7d5b83" +dependencies = [ + "libc", + "log", +] + [[package]] name = "syn" version = "2.0.52" @@ -449,6 +545,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tempfile" version = "3.10.1" @@ -665,6 +767,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "zeroize" version = "1.7.0" diff --git a/Cargo.toml b/Cargo.toml index 655fc9f..7dd24cf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,9 +6,12 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +base64 = "0.22.0" clap = { version = "4.5.2", features = ["derive"] } color-eyre = "0.6.2" dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } +evdev = { version = "0.12.1" } serde = { version = "1.0.197", features = ["derive"] } +sudo = "0.6.0" thiserror = "1.0.58" toml = "0.8.11" diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 7e3944c..2d47f8d 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -1,6 +1,6 @@ use std::{ - fs::File, - io::Read, + fs::{self, File}, + io::{self, Read}, sync::{ atomic::{AtomicBool, Ordering}, mpsc::{channel, Receiver, RecvTimeoutError, Sender}, @@ -9,40 +9,26 @@ use std::{ thread, }; -pub fn wait_for_input(file: &mut File) { - let mut packet = [0u8; 24]; - file.read_exact(&mut packet).unwrap(); -} - -pub fn wait_for_any_input(files: impl Iterator) -> Receiver { - let (send, recv) = channel(); - - for mut file in files { - let send = send.clone(); - - thread::Builder::new() - .spawn(move || loop { - wait_for_input(&mut file); - let _ = send.send(true); - }) - .unwrap(); - } +use crate::watch::{InputId, NewInput}; - recv +pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { + let mut packet = [0u8; 24]; + file.read_exact(&mut packet) } pub fn inactivity_watcher( work_start_receiver: &Receiver, break_skip_sender: &Sender, break_skip_sent: &Arc, - input_receiver: &Receiver, + input_receiver: &Receiver, work_duration: std::time::Duration, ) { work_start_receiver.recv().unwrap(); loop { match input_receiver.recv_timeout(work_duration) { - Ok(_) => (), + Ok(Ok(_)) => (), + Ok(Err(_)) => return, Err(RecvTimeoutError::Timeout) => { if !break_skip_sent.load(Ordering::Acquire) { break_skip_sender.send(true).unwrap(); @@ -53,3 +39,60 @@ pub fn inactivity_watcher( } } } + +pub type InputResult = Result>; + +pub(crate) fn watcher( + new: Receiver, + to_block: Vec, +) -> color_eyre::Result<( + Receiver>>, + Receiver>>, +)> { + let (tx1, rx1) = channel(); + let (tx2, rx2) = channel(); + + thread::spawn(move || loop { + let input = new.recv().unwrap(); + if !to_block.contains(&input.id) { + continue; + } + + let tx1 = tx1.clone(); + let tx2 = tx2.clone(); + thread::Builder::new() + .spawn(move || loop { + let mut file = match fs::File::open(&input.path) { + // must be closed + Err(e) if e.kind() == io::ErrorKind::NotFound => return, + Err(e) => { + // unexpected error, report to main thread + let err = Arc::new(e); // make cloneable + let _ig_err = tx1.send(Err(err.clone())); + let _ig_err = tx2.send(Err(err)); + return; + } + Ok(file) => file, + }; + + match wait_for_input(&mut file) { + // must be closed + Err(e) if e.kind() == io::ErrorKind::NotFound => return, + Err(e) => { + // unexpected error, report to main thread + let err = Arc::new(e); // make cloneable + let _ig_err = tx1.send(Err(err.clone())); + let _ig_err = tx2.send(Err(err)); + return; + } + Ok(_) => (), + }; + + let _ = tx1.send(Ok(true)); + let _ = tx2.send(Ok(true)); + }) + .unwrap(); + }); + + Ok((rx1, rx2)) +} diff --git a/src/config.rs b/src/config.rs index c410bfd..cbb8cc0 100644 --- a/src/config.rs +++ b/src/config.rs @@ -5,15 +5,18 @@ use std::fs; use std::io::ErrorKind; use std::path::{Path, PathBuf}; -use crate::Device; +use crate::watch::InputId; fn setup_default_path() -> PathBuf { let dir = Path::new(concat!("/etc/", env!("CARGO_CRATE_NAME"), ".toml")); - assert!(dir.is_dir(), "/etc should exist on unix"); + assert!( + dir.parent().expect("path has two components").is_dir(), + "/etc should exist on unix" + ); dir.to_path_buf() } -pub(crate) fn read(custom_path: Option) -> Result> { +pub(crate) fn read(custom_path: Option) -> Result> { let path = custom_path.unwrap_or_else(setup_default_path); let bytes = match fs::read(&path) { Ok(bytes) => bytes, @@ -29,7 +32,7 @@ pub(crate) fn read(custom_path: Option) -> Result> { toml::from_str(&s).wrap_err("Could not deserialize to list of devices") } -pub(crate) fn write(to_lock: &[Device], custom_path: Option) -> Result<()> { +pub(crate) fn write(to_lock: &[InputId], custom_path: Option) -> Result<()> { let data = toml::to_string_pretty(&to_lock).wrap_err("Could not serialize list of devices to toml")?; diff --git a/src/lock.rs b/src/lock.rs deleted file mode 100644 index 9bef5bf..0000000 --- a/src/lock.rs +++ /dev/null @@ -1,118 +0,0 @@ -// Source: https://github.com/dvdsk/disable-input/blob/main/src/input.rs -// (copied with permission) - -use std::hash::Hash; -use std::io::{BufRead, BufReader}; -use std::process::{Child, ChildStderr, Command, Stdio}; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::{Arc, Mutex}; -use std::thread::{self, JoinHandle}; -use std::time::{Duration, Instant}; - -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, thiserror::Error)] -pub enum CommandError { - #[error("must run as root")] - NotRunningAsRoot, - #[error("Io error happened: {0:?}")] - Io(Arc), -} - -impl CommandError { - // silly io::Error is not clone :( - pub fn io(err: std::io::Error) -> Self { - Self::Io(Arc::new(err)) - } -} - -pub struct LockedDevice { - process: Arc>, - stopping: Arc, - // TODO: why unused? - _maintain_lock: JoinHandle<()>, -} - -impl LockedDevice { - pub fn unlock(self) { - core::mem::drop(self); - } -} - -impl Drop for LockedDevice { - fn drop(&mut self) { - self.stopping.store(true, Ordering::Relaxed); - self.process.lock().unwrap().kill().unwrap(); - } -} - -#[derive(Debug, Clone, Hash, PartialEq, Eq, Serialize, Deserialize)] -pub struct Device { - pub event_path: String, - pub name: String, -} - -impl Device { - pub fn event_path(&self) -> String { - self.event_path.clone() - } - pub fn name(&self) -> String { - self.name.clone() - } - pub fn lock(self) -> Result { - let Self { event_path, .. } = self; - let (process, stderr) = lock_input(&event_path)?; - let process = Arc::new(Mutex::new(process)); - let stopping = Arc::new(AtomicBool::new(false)); - - let first_lock = Instant::now(); - let maintain_lock = { - let process = process.clone(); - let stopping = stopping.clone(); - thread::spawn(move || { - let mut stderr = Some(stderr); - loop { - let err = wait_for_stderr_end(stderr.take().unwrap()); - if stopping.load(Ordering::Relaxed) { - break; - } - #[allow(clippy::manual_assert)] - if first_lock.elapsed() < Duration::from_secs(5) { - panic!("{err}"); - } - // todo figure out startup vs keyboard in/out error - let (new_process, new_stderr) = lock_input(&event_path).unwrap(); - *process.lock().unwrap() = new_process; - stderr = Some(new_stderr); - } - }) - }; - - Ok(LockedDevice { - process, - _maintain_lock: maintain_lock, - stopping, - }) - } -} - -fn lock_input(event_path: &str) -> Result<(Child, ChildStderr), CommandError> { - let mut process = Command::new("evtest") - .arg("--grab") - .arg(event_path) - .stdout(Stdio::null()) - .stderr(Stdio::piped()) - .spawn() - .map_err(CommandError::io)?; - let stderr = process.stderr.take().unwrap(); - Ok((process, stderr)) -} - -fn wait_for_stderr_end(stderr: ChildStderr) -> String { - let reader = BufReader::new(stderr); - let mut error = Vec::new(); - for line in reader.lines().take(5) { - error.push(line.unwrap()); - } - error.as_slice().join("\n") -} diff --git a/src/main.rs b/src/main.rs index c452c05..94473ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,8 @@ #![feature(thread_sleep_until)] +#![feature(iter_intersperse)] +#![feature(slice_flatten)] use std::{ - fs::File, sync::{ atomic::{AtomicBool, Ordering}, mpsc::{channel, Receiver, RecvTimeoutError}, @@ -10,26 +11,34 @@ use std::{ thread, }; +use check_inputs::InputResult; +use clap::Parser; +use color_eyre::eyre::Context; + mod check_inputs; mod cli; mod config; -mod lock; mod notification; -mod wizard; mod watch; - -use clap::Parser; -use color_eyre::eyre::Context; +mod wizard; use crate::check_inputs::inactivity_watcher; -use crate::check_inputs::wait_for_any_input; -use crate::lock::Device; use crate::notification::notify_all_users; fn main() -> color_eyre::Result<()> { - let online_devices = watch::devices().unwrap(); - + color_eyre::install().expect("Only called once"); let args = cli::Cli::parse(); + + // check after args such that help can run without root + if let sudo::RunningAs::User = sudo::check() { + panic!(concat!( + "must run ", + env!("CARGO_CRATE_NAME"), + " as root user" + )); + } + + let (online_devices, new) = watch::devices(); let (work_duration, break_duration, grace_duration) = match args.command { cli::Commands::Run { work_duration, @@ -44,25 +53,13 @@ fn main() -> color_eyre::Result<()> { let to_block = config::read(args.config_path).wrap_err("Could not read devices to block from config")?; - - let device_files = to_block - .iter() - .map(Device::event_path) - .map(File::open) - .map(Result::unwrap); - let device_files2 = to_block - .iter() - .map(Device::event_path) - .map(File::open) - .map(Result::unwrap); + let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()) + .wrap_err("Could not start watching to be locked devices for activaty")?; let (break_skip_sender, break_skip_receiver) = channel(); let (work_start_sender, work_start_receiver) = channel(); let break_skip_is_sent = Arc::new(AtomicBool::new(false)); - let recv_any_input = wait_for_any_input(device_files); - let recv_any_input2 = wait_for_any_input(device_files2); - { let break_skip_is_sent = break_skip_is_sent.clone(); @@ -79,13 +76,13 @@ fn main() -> color_eyre::Result<()> { loop { notify_all_users("Waiting for input to start work timer..."); - block_on_new_input(&recv_any_input); + block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; notify_all_users(&format!("Starting work timer for {break_duration:?}")); work_start_sender.send(true).unwrap(); match break_skip_receiver.recv_timeout(break_duration - grace_duration) { Ok(_) => { notify_all_users("No input for breaktime"); - block_on_new_input(&recv_any_input); + block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; break_skip_is_sent.store(false, Ordering::Release); continue; } @@ -98,29 +95,35 @@ fn main() -> color_eyre::Result<()> { let mut locks = Vec::new(); - for device in to_block - .iter() - .map(Device::name) - .filter_map(|name| online_devices.lookup(name)) - { - locks.push(device.clone().lock().unwrap()); + for device_id in to_block.iter().copied() { + locks.push( + online_devices + .lock(device_id) + .wrap_err("failed to lock one of the inputs")?, + ); } notify_all_users(&format!("Starting break timer for {work_duration:?}")); thread::sleep(work_duration); for lock in locks { - lock.unlock(); + lock.unlock()? } } } -fn block_on_new_input(recv_any_input: &Receiver) { +fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Result<()> { loop { - if recv_any_input.try_recv().is_err() { - break; - }; + match recv_any_input.try_recv() { + Err(_) => break, + Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => (), // old event, ignore + } } - recv_any_input.recv().unwrap(); + match recv_any_input.recv() { + Err(_) => return Ok(()), // device disconnected + Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => return Ok(()), // new event! stop blocking + } } diff --git a/src/watch.rs b/src/watch.rs index 9a1d305..80a7b72 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -1,183 +1,280 @@ -use std::collections::{HashMap, HashSet}; -use std::io::{BufRead, BufReader}; -use std::process::{Command, Stdio}; -use std::sync::{Arc, Mutex}; +use core::fmt; +use std::collections::HashMap; +use std::os::fd::AsRawFd; +use std::path::PathBuf; +use std::sync::mpsc::{Receiver, RecvTimeoutError}; +use std::sync::{mpsc, Arc, Mutex}; use std::thread; -use std::time::{Duration, Instant}; +use std::time::Duration; -use crate::lock::CommandError; -use crate::lock::Device; +use base64::{engine::general_purpose, Engine as _}; +use color_eyre::eyre::Context; +use color_eyre::{Result, Section}; +use serde::{Deserialize, Serialize}; -type EventPath = String; -type Names = HashSet; +struct Device { + raw_dev: evdev::Device, +} -#[derive(Debug, Default)] -struct Inner { - init_scan_done: bool, - max_period: Option, - last_added: Option, - err: Option, - map: HashMap, +/// need to modify Device (grap/ungrap) therefore can not use a Set +/// instead we use a Map with a characteristic of the device as +/// "Key" +// File descriptor is unique within a process so a good key +#[derive(Hash, PartialEq, Eq)] +struct DeviceKey(std::os::fd::RawFd); + +impl Device { + fn key(&self) -> DeviceKey { + DeviceKey(self.raw_dev.as_raw_fd()) + } + + fn name(&self) -> String { + self.raw_dev + .unique_name() + .or(self.raw_dev.name()) + .map(String::from) + .unwrap_or_else(|| { + let id = InputId::from(self.raw_dev.input_id()); + format!("Unknown device, id: {}", id) + }) + } +} + +#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash)] +pub struct InputId { + vendor: u16, + product: u16, + version: u16, +} + +impl fmt::Display for InputId { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let data = [ + self.vendor.to_be_bytes(), + self.product.to_be_bytes(), + self.version.to_be_bytes(), + ]; + + let base64 = general_purpose::URL_SAFE_NO_PAD.encode(data.flatten()); + f.write_str(base64.as_str()) + } } -#[derive(Debug, Clone, Default)] -pub struct OnlineDevices(Arc>); +impl From for InputId { + fn from(value: evdev::InputId) -> Self { + Self { + vendor: value.vendor(), + product: value.product(), + version: value.version(), + } + } +} macro_rules! lock_and_call_inner { ($is_pub:vis $name:ident, $($arg:ident: $type:ty),* $(;$ret:ty)?) => { $is_pub fn $name(&self, $($arg: $type),*) $(-> $ret)? { - self.0.lock().unwrap().$name($($arg),*) + self.inner.lock().unwrap().$name($($arg),*) } }; } +#[derive(Clone)] +pub struct OnlineDevices { + tx: mpsc::Sender, + inner: Arc>, +} + impl OnlineDevices { - lock_and_call_inner!(pub lookup, name: String; Option); - lock_and_call_inner!(set_error, error: CommandError); - lock_and_call_inner!(insert, device: Device); - lock_and_call_inner!(list_without_blocking,; Result, CommandError>); - lock_and_call_inner!(n_discovered,; Result); - lock_and_call_inner!(max_period,; Option); - lock_and_call_inner!(last_added,; Option); - lock_and_call_inner!(init_scan_done,; bool); - - pub fn list(&self) -> Result, CommandError> { - if self.init_scan_done() { - self.list_without_blocking() - } else { - self.block_till_filled()?; - self.list_without_blocking() - } + lock_and_call_inner!(pub list_inputs,; Vec); + lock_and_call_inner!(insert, raw_dev: evdev::Device; bool); + lock_and_call_inner!(lock_all_with, id: InputId; Result<()>); + lock_and_call_inner!(unlock_all_with, id: InputId; Result<()>); + + /// will also ensure that if the device is connected before + /// the lockguard is dropped that it is locked + pub(crate) fn lock(&self, id: InputId) -> Result { + let (tx, rx) = std::sync::mpsc::channel(); + self.tx + .send(Order::Lock(id, tx)) + .expect("devices should never end/panic"); + + let lock_res = rx.recv().expect("devices should never end/panic"); + lock_res.wrap_err("Could not lock device")?; + + Ok(LockGuard { + id, + tx: self.tx.clone(), + dropped: false, + }) } +} - fn block_till_filled(&self) -> Result<(), CommandError> { - let start = Instant::now(); - while self.n_discovered()? < 2 { - thread::sleep(Duration::from_millis(50)); +enum Order { + Lock(InputId, mpsc::Sender>), + UnLock(InputId, mpsc::Sender>), +} - if start.elapsed() > Duration::from_secs(5) && self.n_discovered()? > 0 { - break; - }; - } +/// use `unlock` to re-enable the disabled input device +#[must_use] +pub struct LockGuard { + id: InputId, + tx: mpsc::Sender, + // skip backup unlock if user did things right + dropped: bool, +} - loop { - let period = self - .max_period() - .expect("should be Some given there are 2 devices discovered"); - let prev_last_added = self.last_added().expect("same"); - let margin = Duration::from_millis(200); - thread::sleep_until(prev_last_added + period + margin); - - if self.last_added().expect("same") > prev_last_added { - self.0.lock().unwrap().init_scan_done = false; - break; // must have discovered all - } - } +impl LockGuard { + pub(crate) fn unlock(mut self) -> Result<()> { + let (tx, rx) = std::sync::mpsc::channel(); + self.tx + .send(Order::UnLock(self.id, tx)) + .expect("devices should never end/panic"); + rx.recv().expect("devices should never end/panic")?; + self.dropped = true; Ok(()) } } -impl Inner { - fn lookup(&self, name: String) -> Option { - self.map - .iter() - .find(|(_, names)| names.contains(&name)) - .map(|(path, _)| path) - .cloned() - .map(|event_path| Device { event_path, name }) +/// backup, user should call unlock! +impl Drop for LockGuard { + fn drop(&mut self) { + if self.dropped { + return; // nothing to do + } + let (tx, _) = std::sync::mpsc::channel(); + let _do_not_panic_in_drop = self.tx.send(Order::UnLock(self.id, tx)); + eprintln!( + "Should not drop LockGuard but instead destroy by calling unlock + since drop can not return an error" + ) } +} - fn init_scan_done(&self) -> bool { - self.init_scan_done - } - fn last_added(&self) -> Option { - self.last_added - } - fn max_period(&self) -> Option { - self.max_period - } +struct Inner { + // multiple devices with the same id could have different + // names due to manufacturer mistake + // device serial could be duplicate due to manufacturer mistake + id_to_devices: HashMap>, +} - fn n_discovered(&self) -> Result { - if let Some(err) = self.err.clone() { - return Err(err); +impl Inner { + /// if it was already present ignore + fn insert(&mut self, raw_dev: evdev::Device) -> bool { + let id = raw_dev.input_id().into(); + let device = Device { raw_dev }; + if let Some(in_map) = self.id_to_devices.get_mut(&id) { + in_map.insert(device.key(), device).is_some() + } else { + self.id_to_devices + .insert(id, HashMap::from([(device.key(), device)])); + true } - Ok(self.map.len()) } - fn set_error(&mut self, e: CommandError) { - self.err = Some(e); + fn list_inputs(&mut self) -> Vec { + self.id_to_devices + .iter() + .map(|(id, devices)| { + let mut names: Vec<_> = devices.values().map(Device::name).collect(); + names.sort(); + BlockableInput { id: *id, names } + }) + .collect() } - fn insert(&mut self, Device { event_path, name }: Device) { - if let Some(last_added) = self.last_added { - self.max_period = self.max_period.max(Some(last_added.elapsed())); - } - self.last_added = Some(Instant::now()); - if let Some(names) = self.map.get_mut(&event_path) { - names.insert(name); - } else { - let res = self.map.insert(event_path, HashSet::from([name])); - assert_eq!(res, None); - } - } + fn unlock_all_with(&mut self, id: InputId) -> Result<()> { + let Some(to_lock) = self.id_to_devices.get_mut(&id) else { + return Ok(()); + }; - fn list_without_blocking(&self) -> Result, CommandError> { - if let Some(error_happened) = self.err.clone() { - return Err(error_happened); + for device in to_lock.values_mut() { + device + .raw_dev + .ungrab() + .wrap_err("Could not ungrab (release exclusive access) to device") + .with_note(|| format!("device name: {}", device.name()))?; } + Ok(()) + } - let mut list: Vec<_> = self - .map - .iter() - .map(|(event_path, name)| Device { - event_path: event_path.clone(), - name: name.iter().next().unwrap().clone(), - }) - .collect(); - list.sort_unstable_by_key(|dev| dev.name.clone()); + fn lock_all_with(&mut self, id: InputId) -> Result<()> { + let Some(to_lock) = self.id_to_devices.get_mut(&id) else { + return Ok(()); + }; - Ok(list) + for device in to_lock.values_mut() { + device + .raw_dev + .grab() + .wrap_err("Could not grab (acquire exclusive access) to device") + .with_note(|| format!("device name: {}", device.name()))?; + } + Ok(()) } } -pub fn devices() -> Result { - let mut handle = Command::new("evtest") - .stdout(Stdio::null()) - .stderr(Stdio::piped()) - .spawn() - .map_err(CommandError::io)?; +#[derive(Clone, Debug)] +pub struct BlockableInput { + pub id: InputId, + pub names: Vec, +} - let reader = handle.stderr.take().unwrap(); - let devices = OnlineDevices::default(); +#[derive(Clone)] +pub struct NewInput { + pub id: InputId, + pub path: PathBuf, +} +/* TODO: use ionotify instead? (watching /dev/input) + * would need async to also wait for rx_recv + * or another thread sending `Order::scan` + * look at cpu usage first though + * <15-03-24, dvdsk> */ +pub fn devices() -> (OnlineDevices, Receiver) { + let (order_tx, order_rx) = mpsc::channel(); + let online = OnlineDevices { + tx: order_tx, + inner: Arc::new(Mutex::new(Inner { + id_to_devices: HashMap::new(), + })), + }; + + let (new_dev_tx, new_dev_rx) = mpsc::channel(); + scan_and_process_new(&online, &new_dev_tx); { - let devices = devices.clone(); - thread::spawn(move || { - let reader = BufReader::new(reader); - for line in reader.lines() { - let line = match line { - Err(e) => { - devices.set_error(CommandError::io(e)); - return; - } - Ok(line) => line, - }; - if line.contains("Not running as root") { - devices.set_error(CommandError::NotRunningAsRoot); - return; + let online = online.clone(); + thread::spawn(move || loop { + scan_and_process_new(&online, &new_dev_tx); + match order_rx.recv_timeout(Duration::from_secs(5)) { + Ok(Order::Lock(id, answer)) => { + let res = online.lock_all_with(id); + answer.send(res).expect("lock fn does not panic"); } - - if !line.starts_with("/dev/input/event") { - continue; + Ok(Order::UnLock(id, answer)) => { + let res = online.unlock_all_with(id); + answer.send(res).expect("unlock fn does not panic"); } - let (event_path, name) = line.split_once(':').unwrap(); - let event_path = event_path.trim().to_string(); - let name = name.trim().to_string(); - devices.insert(Device { event_path, name }); + Err(RecvTimeoutError::Timeout) => continue, + Err(RecvTimeoutError::Disconnected) => return, } }); } - Ok(devices) + (online, new_dev_rx) +} + +fn scan_and_process_new(online: &OnlineDevices, new_dev_tx: &mpsc::Sender) { + for (event_path, device) in evdev::enumerate() { + let id = InputId::from(device.input_id()); + let new = online.insert(device); + if new { + new_dev_tx + .send(NewInput { + id, + path: event_path, + }) + .expect("watcher should never end and drop rx"); + } + } } diff --git a/src/wizard.rs b/src/wizard.rs index bf7b9c4..e4958b2 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -8,8 +8,7 @@ use color_eyre::Result; use dialoguer::{Confirm, MultiSelect}; use crate::config; -use crate::lock::Device; -use crate::watch::OnlineDevices; +use crate::watch::{BlockableInput, OnlineDevices}; // todo deal with devices with multiple names pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Result<()> { @@ -18,10 +17,21 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu .into_iter() .collect(); - let devices = devices.list()?; - let mut options: Vec<_> = devices - .iter() - .map(|dev @ Device { name, .. }| (name, config.contains(dev))) + let mut inputs = devices.list_inputs(); + let mut options: Vec<_> = inputs + .iter_mut() + .map(|BlockableInput { names, id }| (names, config.contains(&id))) + .map(|(names, checked)| { + names.dedup(); + ( + names + .iter() + .map(String::as_str) + .intersperse("\n\t& ") + .collect::(), + checked, + ) + }) .collect(); loop { @@ -41,14 +51,21 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu // enter from the multiselect thread::sleep(Duration::from_secs(2)); let mut locked = Vec::new(); + for option in &mut options { + option.1 = false; + } for item in &selection { options[*item].1 = true; - locked.push(devices[*item].clone().lock()?); + let id = inputs[*item].id; + locked.push(devices.lock(id)?); } println!("Try to use them, they should be blocked"); thread::sleep(Duration::from_secs(8)); println!("\n\nUnlocking, Stop typing!"); + for lock in locked { + lock.unlock()? + } } thread::sleep(Duration::from_secs(2)); @@ -62,12 +79,11 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu }; if ready { - let selected: Vec<_> = devices + let selected: Vec<_> = inputs .iter() .enumerate() .filter(|(i, _)| selection.contains(i)) - .map(|(_, dev)| dev) - .cloned() + .map(|(_, dev)| dev.id) .collect(); config::write(&selected, custom_config_path).unwrap(); return Ok(()); From 77a758507717d595e0fa3c5ef530ceb967807348 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 19 Mar 2024 17:10:40 +0100 Subject: [PATCH 08/76] block devices based also on name + fixes crash when stealing devices --- Cargo.lock | 16 ++++++++ Cargo.toml | 1 + src/check_inputs.rs | 13 +++++-- src/config.rs | 12 +++++- src/main.rs | 3 +- src/watch.rs | 92 +++++++++++++++++++++++++++------------------ src/wizard.rs | 65 ++++++++++++++++++++------------ 7 files changed, 136 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6004aee..2f6e222 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,6 +125,7 @@ dependencies = [ "color-eyre", "dialoguer", "evdev", + "itertools", "serde", "sudo", "thiserror", @@ -243,6 +244,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + [[package]] name = "encode_unicode" version = "0.3.6" @@ -343,6 +350,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "lazy_static" version = "1.4.0" diff --git a/Cargo.toml b/Cargo.toml index 7dd24cf..b52ca3b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ clap = { version = "4.5.2", features = ["derive"] } color-eyre = "0.6.2" dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } evdev = { version = "0.12.1" } +itertools = "0.12.1" serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 2d47f8d..aeb4166 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -9,7 +9,10 @@ use std::{ thread, }; -use crate::watch::{InputId, NewInput}; +use crate::{ + config::InputFilter, + watch::NewInput, +}; pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { let mut packet = [0u8; 24]; @@ -44,7 +47,7 @@ pub type InputResult = Result>; pub(crate) fn watcher( new: Receiver, - to_block: Vec, + to_block: Vec, ) -> color_eyre::Result<( Receiver>>, Receiver>>, @@ -54,7 +57,11 @@ pub(crate) fn watcher( thread::spawn(move || loop { let input = new.recv().unwrap(); - if !to_block.contains(&input.id) { + if !to_block + .iter() + .filter(|filter| filter.id == input.id) + .any(|filter| filter.names.contains(&input.name)) + { continue; } diff --git a/src/config.rs b/src/config.rs index cbb8cc0..2c17416 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,5 +1,6 @@ use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; +use serde::{Serialize, Deserialize}; use std::fs; use std::io::ErrorKind; @@ -7,6 +8,13 @@ use std::path::{Path, PathBuf}; use crate::watch::InputId; +#[derive(Debug, Clone, Serialize, Deserialize, Hash, PartialEq, Eq)] +pub struct InputFilter { + pub id: InputId, + /// empty name means block everything + pub names: Vec, +} + fn setup_default_path() -> PathBuf { let dir = Path::new(concat!("/etc/", env!("CARGO_CRATE_NAME"), ".toml")); assert!( @@ -16,7 +24,7 @@ fn setup_default_path() -> PathBuf { dir.to_path_buf() } -pub(crate) fn read(custom_path: Option) -> Result> { +pub(crate) fn read(custom_path: Option) -> Result> { let path = custom_path.unwrap_or_else(setup_default_path); let bytes = match fs::read(&path) { Ok(bytes) => bytes, @@ -32,7 +40,7 @@ pub(crate) fn read(custom_path: Option) -> Result> { toml::from_str(&s).wrap_err("Could not deserialize to list of devices") } -pub(crate) fn write(to_lock: &[InputId], custom_path: Option) -> Result<()> { +pub(crate) fn write(to_lock: &[InputFilter], custom_path: Option) -> Result<()> { let data = toml::to_string_pretty(&to_lock).wrap_err("Could not serialize list of devices to toml")?; diff --git a/src/main.rs b/src/main.rs index 94473ab..0f076a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ #![feature(thread_sleep_until)] #![feature(iter_intersperse)] #![feature(slice_flatten)] +#![feature(io_error_more)] use std::{ sync::{ @@ -95,7 +96,7 @@ fn main() -> color_eyre::Result<()> { let mut locks = Vec::new(); - for device_id in to_block.iter().copied() { + for device_id in to_block.iter().cloned() { locks.push( online_devices .lock(device_id) diff --git a/src/watch.rs b/src/watch.rs index 80a7b72..ef71471 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -1,5 +1,6 @@ use core::fmt; use std::collections::HashMap; +use std::io::ErrorKind; use std::os::fd::AsRawFd; use std::path::PathBuf; use std::sync::mpsc::{Receiver, RecvTimeoutError}; @@ -12,6 +13,8 @@ use color_eyre::eyre::Context; use color_eyre::{Result, Section}; use serde::{Deserialize, Serialize}; +use crate::config::InputFilter; + struct Device { raw_dev: evdev::Device, } @@ -23,20 +26,24 @@ struct Device { #[derive(Hash, PartialEq, Eq)] struct DeviceKey(std::os::fd::RawFd); +fn device_name(device: &evdev::Device) -> String { + device + .unique_name() + .or(device.name()) + .map(String::from) + .unwrap_or_else(|| { + let id = InputId::from(device.input_id()); + format!("Unknown device, id: {}", id) + }) +} + impl Device { - fn key(&self) -> DeviceKey { - DeviceKey(self.raw_dev.as_raw_fd()) + fn name(&self) -> String { + device_name(&self.raw_dev) } - fn name(&self) -> String { - self.raw_dev - .unique_name() - .or(self.raw_dev.name()) - .map(String::from) - .unwrap_or_else(|| { - let id = InputId::from(self.raw_dev.input_id()); - format!("Unknown device, id: {}", id) - }) + fn key(&self) -> DeviceKey { + DeviceKey(self.raw_dev.as_raw_fd()) } } @@ -87,22 +94,22 @@ pub struct OnlineDevices { impl OnlineDevices { lock_and_call_inner!(pub list_inputs,; Vec); lock_and_call_inner!(insert, raw_dev: evdev::Device; bool); - lock_and_call_inner!(lock_all_with, id: InputId; Result<()>); - lock_and_call_inner!(unlock_all_with, id: InputId; Result<()>); + lock_and_call_inner!(lock_all_matching, id: InputFilter; Result<()>); + lock_and_call_inner!(unlock_all_matching, id: InputFilter; Result<()>); /// will also ensure that if the device is connected before /// the lockguard is dropped that it is locked - pub(crate) fn lock(&self, id: InputId) -> Result { + pub(crate) fn lock(&self, input: InputFilter) -> Result { let (tx, rx) = std::sync::mpsc::channel(); self.tx - .send(Order::Lock(id, tx)) + .send(Order::Lock(input.clone(), tx)) .expect("devices should never end/panic"); let lock_res = rx.recv().expect("devices should never end/panic"); lock_res.wrap_err("Could not lock device")?; Ok(LockGuard { - id, + filter: input, tx: self.tx.clone(), dropped: false, }) @@ -110,14 +117,14 @@ impl OnlineDevices { } enum Order { - Lock(InputId, mpsc::Sender>), - UnLock(InputId, mpsc::Sender>), + Lock(InputFilter, mpsc::Sender>), + UnLock(InputFilter, mpsc::Sender>), } /// use `unlock` to re-enable the disabled input device #[must_use] pub struct LockGuard { - id: InputId, + filter: InputFilter, tx: mpsc::Sender, // skip backup unlock if user did things right dropped: bool, @@ -127,7 +134,7 @@ impl LockGuard { pub(crate) fn unlock(mut self) -> Result<()> { let (tx, rx) = std::sync::mpsc::channel(); self.tx - .send(Order::UnLock(self.id, tx)) + .send(Order::UnLock(self.filter.clone(), tx)) .expect("devices should never end/panic"); rx.recv().expect("devices should never end/panic")?; @@ -143,7 +150,7 @@ impl Drop for LockGuard { return; // nothing to do } let (tx, _) = std::sync::mpsc::channel(); - let _do_not_panic_in_drop = self.tx.send(Order::UnLock(self.id, tx)); + let _do_not_panic_in_drop = self.tx.send(Order::UnLock(self.filter.clone(), tx)); eprintln!( "Should not drop LockGuard but instead destroy by calling unlock since drop can not return an error" @@ -183,12 +190,15 @@ impl Inner { .collect() } - fn unlock_all_with(&mut self, id: InputId) -> Result<()> { - let Some(to_lock) = self.id_to_devices.get_mut(&id) else { + fn unlock_all_matching(&mut self, filter: InputFilter) -> Result<()> { + let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; - for device in to_lock.values_mut() { + for device in to_lock + .values_mut() + .filter(|device| filter.names.contains(&device.name())) + { device .raw_dev .ungrab() @@ -198,17 +208,24 @@ impl Inner { Ok(()) } - fn lock_all_with(&mut self, id: InputId) -> Result<()> { - let Some(to_lock) = self.id_to_devices.get_mut(&id) else { + fn lock_all_matching(&mut self, filter: InputFilter) -> Result<()> { + let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; - for device in to_lock.values_mut() { - device - .raw_dev - .grab() - .wrap_err("Could not grab (acquire exclusive access) to device") - .with_note(|| format!("device name: {}", device.name()))?; + for device in to_lock + .values_mut() + .filter(|device| filter.names.contains(&device.name())) + { + match device.raw_dev.grab() { + Ok(_) => (), + Err(e) if e.kind() == ErrorKind::ResourceBusy => (), + err @ Err(_) => { + return err + .wrap_err("Could not grab (acquire exclusive access) to device") + .with_note(|| format!("device name: {}", device.name())) + } + } } Ok(()) } @@ -223,6 +240,7 @@ pub struct BlockableInput { #[derive(Clone)] pub struct NewInput { pub id: InputId, + pub name: String, pub path: PathBuf, } @@ -247,12 +265,12 @@ pub fn devices() -> (OnlineDevices, Receiver) { thread::spawn(move || loop { scan_and_process_new(&online, &new_dev_tx); match order_rx.recv_timeout(Duration::from_secs(5)) { - Ok(Order::Lock(id, answer)) => { - let res = online.lock_all_with(id); + Ok(Order::Lock(filter, answer)) => { + let res = online.lock_all_matching(filter); answer.send(res).expect("lock fn does not panic"); } - Ok(Order::UnLock(id, answer)) => { - let res = online.unlock_all_with(id); + Ok(Order::UnLock(filter, answer)) => { + let res = online.unlock_all_matching(filter); answer.send(res).expect("unlock fn does not panic"); } Err(RecvTimeoutError::Timeout) => continue, @@ -267,11 +285,13 @@ pub fn devices() -> (OnlineDevices, Receiver) { fn scan_and_process_new(online: &OnlineDevices, new_dev_tx: &mpsc::Sender) { for (event_path, device) in evdev::enumerate() { let id = InputId::from(device.input_id()); + let name = device_name(&device); let new = online.insert(device); if new { new_dev_tx .send(NewInput { id, + name, path: event_path, }) .expect("watcher should never end and drop rx"); diff --git a/src/wizard.rs b/src/wizard.rs index e4958b2..3b8b1ce 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -1,4 +1,4 @@ -use std::collections::HashSet; +use std::collections::HashMap; use std::path::PathBuf; use std::thread; use std::time::Duration; @@ -6,38 +6,43 @@ use std::time::Duration; use color_eyre::eyre::Context; use color_eyre::Result; use dialoguer::{Confirm, MultiSelect}; +use itertools::Itertools; -use crate::config; +use crate::config::{self, InputFilter}; use crate::watch::{BlockableInput, OnlineDevices}; // todo deal with devices with multiple names pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Result<()> { - let config: HashSet<_> = config::read(custom_config_path.clone()) + let config: HashMap<_, _> = config::read(custom_config_path.clone()) .wrap_err("Could not read custom config")? .into_iter() + .map(|InputFilter { id, names }| (id, names)) .collect(); let mut inputs = devices.list_inputs(); + for BlockableInput { names, .. } in &mut inputs { + names.sort() + } + let inputs: Vec<_> = inputs + .into_iter() + .flat_map(|BlockableInput { names, id }| names.into_iter().map(move |n| (id, n))) + .collect(); + let mut options: Vec<_> = inputs - .iter_mut() - .map(|BlockableInput { names, id }| (names, config.contains(&id))) - .map(|(names, checked)| { - names.dedup(); - ( - names - .iter() - .map(String::as_str) - .intersperse("\n\t& ") - .collect::(), - checked, - ) + .iter() + .map(|(id, name)| { + let checked = config + .get(id) + .map(|names| names.contains(name)) + .unwrap_or(false); + (name, checked) }) .collect(); loop { let Some(selection) = MultiSelect::new() .with_prompt("Use up and down arrow keys and space to select. Enter to continue") - .items_checked(&options) + .items_checked(&options[..]) .interact_opt() .unwrap() else { @@ -50,16 +55,25 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu // do not lock while user is still holding down // enter from the multiselect thread::sleep(Duration::from_secs(2)); - let mut locked = Vec::new(); for option in &mut options { option.1 = false; } - for item in &selection { - options[*item].1 = true; - let id = inputs[*item].id; - locked.push(devices.lock(id)?); + for idx in &selection { + options[*idx].1 = true } + let locked: Vec<_> = selection + .iter() + .map(|checked| inputs[*checked].clone()) + .into_group_map() + .into_iter() + .map(|(id, names)| InputFilter { + id, + names: names.clone(), + }) + .map(|filter| devices.lock(filter)) + .collect::>()?; + println!("Try to use them, they should be blocked"); thread::sleep(Duration::from_secs(8)); println!("\n\nUnlocking, Stop typing!"); @@ -79,11 +93,14 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu }; if ready { - let selected: Vec<_> = inputs - .iter() + let selected: Vec = inputs + .into_iter() .enumerate() .filter(|(i, _)| selection.contains(i)) - .map(|(_, dev)| dev.id) + .map(|(_, (id, name))| (id, name)) + .into_group_map() + .into_iter() + .map(|(id, names)| InputFilter { id, names }) .collect(); config::write(&selected, custom_config_path).unwrap(); return Ok(()); From a148924fd1ff92b252cec5ddda0b1b644570cd57 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 19 Mar 2024 17:28:59 +0100 Subject: [PATCH 09/76] fix serialize by replacing toml with ron --- Cargo.lock | 99 ++++++++++++--------------------------------------- Cargo.toml | 2 +- src/config.rs | 10 +++--- 3 files changed, 29 insertions(+), 82 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2f6e222..2a49d00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,6 +86,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64" version = "0.22.0" @@ -103,6 +109,9 @@ name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -120,16 +129,16 @@ dependencies = [ name = "break-enforcer-s" version = "0.1.0" dependencies = [ - "base64", + "base64 0.22.0", "clap", "color-eyre", "dialoguer", "evdev", "itertools", + "ron", "serde", "sudo", "thiserror", - "toml", ] [[package]] @@ -256,12 +265,6 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "errno" version = "0.3.8" @@ -322,12 +325,6 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -[[package]] -name = "hashbrown" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" - [[package]] name = "heck" version = "0.4.1" @@ -340,16 +337,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" -[[package]] -name = "indexmap" -version = "2.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "itertools" version = "0.12.1" @@ -471,6 +458,18 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.7", + "bitflags 2.4.2", + "serde", + "serde_derive", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -510,15 +509,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_spanned" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" -dependencies = [ - "serde", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -609,40 +599,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "toml" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af06656561d28735e9c1cd63dfd57132c8155426aa6af24f36a00a351f88c48e" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.22.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18769cd1cec395d70860ceb4d932812a0b4d06b1a4bb336745a4d21b9496e992" -dependencies = [ - "indexmap", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - [[package]] name = "tracing" version = "0.1.40" @@ -774,15 +730,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" -[[package]] -name = "winnow" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8" -dependencies = [ - "memchr", -] - [[package]] name = "wyz" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index b52ca3b..08d79bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ color-eyre = "0.6.2" dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } evdev = { version = "0.12.1" } itertools = "0.12.1" +ron = "0.8.1" serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" -toml = "0.8.11" diff --git a/src/config.rs b/src/config.rs index 2c17416..45438f5 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,6 +1,6 @@ use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; -use serde::{Serialize, Deserialize}; +use serde::{Deserialize, Serialize}; use std::fs; use std::io::ErrorKind; @@ -16,7 +16,7 @@ pub struct InputFilter { } fn setup_default_path() -> PathBuf { - let dir = Path::new(concat!("/etc/", env!("CARGO_CRATE_NAME"), ".toml")); + let dir = Path::new(concat!("/etc/", env!("CARGO_CRATE_NAME"), ".ron")); assert!( dir.parent().expect("path has two components").is_dir(), "/etc should exist on unix" @@ -37,12 +37,12 @@ pub(crate) fn read(custom_path: Option) -> Result> { }; let s = String::from_utf8(bytes).wrap_err("Corrupt config, contained non utf8")?; - toml::from_str(&s).wrap_err("Could not deserialize to list of devices") + ron::from_str(&s).wrap_err("Could not deserialize to list of devices") } pub(crate) fn write(to_lock: &[InputFilter], custom_path: Option) -> Result<()> { - let data = - toml::to_string_pretty(&to_lock).wrap_err("Could not serialize list of devices to toml")?; + let data = ron::ser::to_string_pretty(&to_lock, ron::ser::PrettyConfig::default()) + .wrap_err("Could not serialize list of devices to toml")?; let path = custom_path.unwrap_or_else(setup_default_path); if let Some(dir) = path.parent() { From d37b785f0fc062b77562a61c82ab7fa4837fa333 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 19 Mar 2024 17:33:28 +0100 Subject: [PATCH 10/76] remove duplicates from wizard + use name before unique name --- src/watch.rs | 4 ++-- src/wizard.rs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/watch.rs b/src/watch.rs index ef71471..57f83da 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -28,8 +28,8 @@ struct DeviceKey(std::os::fd::RawFd); fn device_name(device: &evdev::Device) -> String { device - .unique_name() - .or(device.name()) + .name() + .or(device.unique_name()) .map(String::from) .unwrap_or_else(|| { let id = InputId::from(device.input_id()); diff --git a/src/wizard.rs b/src/wizard.rs index 3b8b1ce..31de955 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -23,10 +23,11 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu for BlockableInput { names, .. } in &mut inputs { names.sort() } - let inputs: Vec<_> = inputs + let mut inputs: Vec<_> = inputs .into_iter() .flat_map(|BlockableInput { names, id }| names.into_iter().map(move |n| (id, n))) .collect(); + inputs.dedup_by(|a, b| *a == *b); let mut options: Vec<_> = inputs .iter() From b7591189808a6c45b2ec33daf2ac0ca69ca834f1 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 20 Mar 2024 19:02:28 +0100 Subject: [PATCH 11/76] adds install and remove commands --- Cargo.lock | 149 +++++++++++++++++++++++++++++++++++++++++++------ Cargo.toml | 2 + src/cli.rs | 39 +++++++------ src/install.rs | 64 +++++++++++++++++++++ src/main.rs | 25 +++++---- 5 files changed, 235 insertions(+), 44 deletions(-) create mode 100644 src/install.rs diff --git a/Cargo.lock b/Cargo.lock index 2a49d00..6c7972a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -106,9 +106,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ "serde", ] @@ -134,9 +134,10 @@ dependencies = [ "color-eyre", "dialoguer", "evdev", - "itertools", + "itertools 0.12.1", "ron", "serde", + "service-install", "sudo", "thiserror", ] @@ -155,9 +156,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.2" +version = "4.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651" +checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813" dependencies = [ "clap_builder", "clap_derive", @@ -177,14 +178,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.0" +version = "4.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +checksum = "90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] @@ -239,6 +240,15 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "dialoguer" version = "0.11.0" @@ -327,9 +337,18 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "home" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys", +] [[package]] name = "indenter" @@ -337,6 +356,15 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.12.1" @@ -407,6 +435,12 @@ dependencies = [ "memoffset", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "object" version = "0.32.2" @@ -434,6 +468,12 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro2" version = "1.0.79" @@ -465,7 +505,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.4.2", + "bitflags 2.5.0", "serde", "serde_derive", ] @@ -478,11 +518,11 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustix" -version = "0.38.31" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", @@ -506,7 +546,21 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", +] + +[[package]] +name = "service-install" +version = "0.1.0" +source = "git+https://github.com/dvdsk/service-install#0f0223e7681dc59098ead5a71d9c00cfc2077e14" +dependencies = [ + "home", + "itertools 0.10.5", + "shell-escape", + "thiserror", + "time", + "tracing", + "typed-builder", ] [[package]] @@ -518,6 +572,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shell-escape" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f" + [[package]] name = "shell-words" version = "1.1.0" @@ -542,9 +602,20 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.52" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -586,7 +657,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.53", ] [[package]] @@ -599,6 +670,25 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + [[package]] name = "tracing" version = "0.1.40" @@ -606,9 +696,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", +] + [[package]] name = "tracing-core" version = "0.1.32" @@ -640,6 +742,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "typed-builder" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cba322cb9b7bc6ca048de49e83918223f35e7a86311267013afff257004870" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/Cargo.toml b/Cargo.toml index 08d79bc..ac326a7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,5 @@ ron = "0.8.1" serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" + +service-install = { version = "0.1", git = "https://github.com/dvdsk/service-install" } diff --git a/src/cli.rs b/src/cli.rs index c670a6c..3defb37 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,28 +1,35 @@ -use clap::{Parser, Subcommand}; +use clap::{Args, Parser, Subcommand}; use std::num::ParseFloatError; use std::path::PathBuf; use std::time::Duration; +#[derive(Debug, Args)] +pub struct RunArgs { + /// Period after which input will be disabled. + /// Note: run help command to see the duration format. + #[arg(short, long, value_name = "duration", value_parser = parse_duration)] + pub work_duration: Duration, + /// Length of the breaks, after this period input is resumed. + /// Note: run help command to see the duration format. + #[arg(short, long, value_name = "duration", value_parser = parse_duration)] + pub break_duration: Duration, + /// Duration ahead of the break to show a notification + /// Note: run help command to see the duration format. + #[arg(short, long, value_name = "duration", value_parser = parse_duration)] + pub grace_duration: Duration, +} + #[derive(Debug, Subcommand)] pub enum Commands { - /// Periodically block devices in config (setup using wizard) - Run { - /// Period after which input will be disabled. - /// run help for the format. - #[arg(short, long, value_name = "work", value_parser = parse_duration)] - work_duration: Duration, - /// Length of the breaks, after this period input is resumed. - /// run help for the format. - #[arg(short, long, value_name = "break", value_parser = parse_duration)] - break_duration: Duration, - /// Duration ahead of the break to show a notification - /// run help for the format. - #[arg(short, long, value_name = "warn", value_parser = parse_duration)] - grace_duration: Duration, - }, + /// Periodically block devices in config (setup using wizard). + Run(#[command(flatten)] RunArgs), /// Pick the devices to block and write them to a config file. /// (Interactive UI) Wizard, + /// Moves the executable to a suitable location and set up a service. + Install(#[command(flatten)] RunArgs), + /// Removed the installed service and executable. + Remove, } /// Disables specified input devices during breaks. The period between breaks, diff --git a/src/install.rs b/src/install.rs new file mode 100644 index 0000000..f3c8f21 --- /dev/null +++ b/src/install.rs @@ -0,0 +1,64 @@ +use std::path::PathBuf; +use std::time::Duration; + +use color_eyre::eyre::{Result, WrapErr}; +use service_install::Install; + +use crate::cli::RunArgs; + +fn fmt_dur(dur: Duration) -> String { + let ss = dur.as_secs() % 60; + let mm = (dur.as_secs() / 60) % 60; + if mm == 0 { + return format!("{ss}s"); + } + let hh = dur.as_secs() / 60 / 60; + if hh == 0 { + format!("{mm:02}:{ss:02}") + } else { + format!("{hh:02}:{mm:02}:{ss:02}") + } +} + +pub fn set_up(run_args: RunArgs, config_path: Option) -> Result<()> { + let mut args = Vec::new(); + if let Some(config_path) = config_path { + args.push(format!("--config-path")); + args.push(config_path.display().to_string()); + } + args.push("run".to_string()); + args.push(format!("--work_duration")); + args.push(fmt_dur(run_args.work_duration)); + args.push(format!("--break_duration")); + args.push(fmt_dur(run_args.break_duration)); + args.push(format!("--grace_duration")); + args.push(fmt_dur(run_args.grace_duration)); + + Install::system() + .current_exe()? + .on_boot() + .name(env!("CARGO_CRATE_NAME")) + .description("Disables input during breaks") + .args(args) + .install() + .wrap_err("Could not set up installation") +} + +pub fn tear_down() -> Result<()> { + Install::system() + .name(env!("CARGO_CRATE_NAME")) + .remove() + .wrap_err("Could not remove installation") +} + +#[test] +fn test_fmt_dur() { + assert_eq!( + &fmt_dur(Duration::from_secs(8 * 60 * 60 + 4 * 60 + 5)), + "08:04:05" + ); + + assert_eq!(&fmt_dur(Duration::from_secs(0)), "0s"); + + assert_eq!(&fmt_dur(Duration::from_secs(61)), "01:01"); +} diff --git a/src/main.rs b/src/main.rs index 0f076a8..4f94ede 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,11 +14,13 @@ use std::{ use check_inputs::InputResult; use clap::Parser; +use cli::RunArgs; use color_eyre::eyre::Context; mod check_inputs; mod cli; mod config; +mod install; mod notification; mod watch; mod wizard; @@ -28,7 +30,7 @@ use crate::notification::notify_all_users; fn main() -> color_eyre::Result<()> { color_eyre::install().expect("Only called once"); - let args = cli::Cli::parse(); + let cli = cli::Cli::parse(); // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { @@ -40,20 +42,23 @@ fn main() -> color_eyre::Result<()> { } let (online_devices, new) = watch::devices(); - let (work_duration, break_duration, grace_duration) = match args.command { - cli::Commands::Run { - work_duration, - break_duration, - grace_duration, - } => (work_duration, break_duration, grace_duration), + let RunArgs { + work_duration, + break_duration, + grace_duration, + } = match cli.command { + cli::Commands::Run(args) => args, cli::Commands::Wizard => { - wizard::run(&online_devices, args.config_path).wrap_err("Error running wizard")?; - return Ok(()); + return wizard::run(&online_devices, cli.config_path).wrap_err("Error running wizard"); } + cli::Commands::Install(args) => { + return install::set_up(args, cli.config_path).wrap_err("Could not install"); + } + cli::Commands::Remove => return install::tear_down().wrap_err("Could not remove"), }; let to_block = - config::read(args.config_path).wrap_err("Could not read devices to block from config")?; + config::read(cli.config_path).wrap_err("Could not read devices to block from config")?; let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()) .wrap_err("Could not start watching to be locked devices for activaty")?; From 92e2ec702e97e9d5d9625332ff0621741bc0ce90 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 7 Apr 2024 16:17:18 +0200 Subject: [PATCH 12/76] fix work duration used where it should be break duration --- src/check_inputs.rs | 4 ++-- src/main.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index aeb4166..35185c7 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -24,12 +24,12 @@ pub fn inactivity_watcher( break_skip_sender: &Sender, break_skip_sent: &Arc, input_receiver: &Receiver, - work_duration: std::time::Duration, + break_duration: std::time::Duration, ) { work_start_receiver.recv().unwrap(); loop { - match input_receiver.recv_timeout(work_duration) { + match input_receiver.recv_timeout(break_duration) { Ok(Ok(_)) => (), Ok(Err(_)) => return, Err(RecvTimeoutError::Timeout) => { diff --git a/src/main.rs b/src/main.rs index 0f076a8..5d95381 100644 --- a/src/main.rs +++ b/src/main.rs @@ -70,7 +70,7 @@ fn main() -> color_eyre::Result<()> { &break_skip_sender, &break_skip_is_sent, &recv_any_input2, - work_duration, + break_duration, ); }); } From 3e2d8f010ba36d294fd2dc601c6163fe66b992a1 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 7 Apr 2024 16:22:59 +0200 Subject: [PATCH 13/76] refactor check_inputs.rs --- src/check_inputs.rs | 81 +++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 35185c7..f5003a3 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -9,10 +9,7 @@ use std::{ thread, }; -use crate::{ - config::InputFilter, - watch::NewInput, -}; +use crate::{config::InputFilter, watch::NewInput}; pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { let mut packet = [0u8; 24]; @@ -46,17 +43,14 @@ pub fn inactivity_watcher( pub type InputResult = Result>; pub(crate) fn watcher( - new: Receiver, + just_connected: Receiver, to_block: Vec, -) -> color_eyre::Result<( - Receiver>>, - Receiver>>, -)> { +) -> color_eyre::Result<(Receiver, Receiver)> { let (tx1, rx1) = channel(); let (tx2, rx2) = channel(); thread::spawn(move || loop { - let input = new.recv().unwrap(); + let input = just_connected.recv().unwrap(); if !to_block .iter() .filter(|filter| filter.id == input.id) @@ -68,38 +62,45 @@ pub(crate) fn watcher( let tx1 = tx1.clone(); let tx2 = tx2.clone(); thread::Builder::new() - .spawn(move || loop { - let mut file = match fs::File::open(&input.path) { - // must be closed - Err(e) if e.kind() == io::ErrorKind::NotFound => return, - Err(e) => { - // unexpected error, report to main thread - let err = Arc::new(e); // make cloneable - let _ig_err = tx1.send(Err(err.clone())); - let _ig_err = tx2.send(Err(err)); - return; - } - Ok(file) => file, - }; - - match wait_for_input(&mut file) { - // must be closed - Err(e) if e.kind() == io::ErrorKind::NotFound => return, - Err(e) => { - // unexpected error, report to main thread - let err = Arc::new(e); // make cloneable - let _ig_err = tx1.send(Err(err.clone())); - let _ig_err = tx2.send(Err(err)); - return; - } - Ok(_) => (), - }; - - let _ = tx1.send(Ok(true)); - let _ = tx2.send(Ok(true)); - }) + .spawn(move || monitor_input(input, tx1, tx2)) .unwrap(); }); Ok((rx1, rx2)) } + +fn monitor_input( + input: NewInput, + tx1: Sender>>, + tx2: Sender>>, +) { + let mut file = match fs::File::open(&input.path) { + // means the device is disconnected + Err(e) if e.kind() == io::ErrorKind::NotFound => return, + Err(e) => { + // unexpected error, report to main thread + let err = Arc::new(e); // make cloneable + let _ig_err = tx1.send(Err(err.clone())); + let _ig_err = tx2.send(Err(err)); + return; + } + Ok(file) => file, + }; + loop { + match wait_for_input(&mut file) { + // means the device is disconnected + Err(e) if e.kind() == io::ErrorKind::NotFound => return, + Err(e) => { + // unexpected error, report to main thread + let err = Arc::new(e); // make cloneable + let _ig_err = tx1.send(Err(err.clone())); + let _ig_err = tx2.send(Err(err)); + return; + } + Ok(_) => (), + }; + + let _ = tx1.send(Ok(true)); + let _ = tx2.send(Ok(true)); + } +} From d69c8ef8ddcdd92ac4e48d561c83cac176a27b1d Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 7 Apr 2024 16:39:32 +0200 Subject: [PATCH 14/76] improve ParseError error msg --- src/cli.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index c670a6c..17b82c4 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -49,11 +49,11 @@ pub struct Cli { #[derive(Debug, thiserror::Error)] pub enum ParseError { - #[error("Could not parse the second part of the time as number")] + #[error("Could not parse the seconds, input: {1}, error: {0}")] Second(ParseFloatError, String), - #[error("Could not parse the minute part of the time as number")] + #[error("Could not parse the minutes, input: {1}, error: {0}")] Minute(ParseFloatError, String), - #[error("Could not parse the minute part of the time as number")] + #[error("Could not parse the hours, input: {1}, error: {0}")] Hour(ParseFloatError, String), } From ba0438608a4406ebca0eac3e03830efa1746782c Mon Sep 17 00:00:00 2001 From: dvdsk Date: Mon, 8 Apr 2024 13:22:19 +0200 Subject: [PATCH 15/76] refactor: remove error macro --- src/cli.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 17b82c4..cb1c0fe 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -57,17 +57,15 @@ pub enum ParseError { Hour(ParseFloatError, String), } -macro_rules! err_builder { - ($name:ident, $variant:expr) => { - fn $name(e: ParseFloatError, s: &str) -> ParseError { - $variant(e, s.to_owned()) - } - }; +fn second_err(e: ParseFloatError, s: &str) -> ParseError { + ParseError::Second(e, s.to_owned()) +} +fn minute_err(e: ParseFloatError, s: &str) -> ParseError { + ParseError::Minute(e, s.to_owned()) +} +fn hour_err(e: ParseFloatError, s: &str) -> ParseError { + ParseError::Hour(e, s.to_owned()) } - -err_builder!(second_err, ParseError::Second); -err_builder!(minute_err, ParseError::Minute); -err_builder!(hour_err, ParseError::Hour); /// Parses a string in format /// hh:mm:ss, From 022e9110106e825277a32fea076ed216a5d740be Mon Sep 17 00:00:00 2001 From: dvdsk Date: Mon, 8 Apr 2024 13:24:10 +0200 Subject: [PATCH 16/76] expand doc comment --- src/cli.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cli.rs b/src/cli.rs index cb1c0fe..fecb2ae 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -87,7 +87,13 @@ pub(crate) fn parse_colon_duration(arg: &str) -> Result { Ok(seconds) } -/// Parse a string in format hh:mm:ss to a `Duration` +/// Parse a string in two different formats to a `Duration`. The formats are: +/// - 10h +/// - 15m +/// - 30s +/// - hh:mm:ss, +/// - mm:ss, +/// - ss, pub(crate) fn parse_duration(arg: &str) -> Result { let seconds = if let Some(hours) = arg.strip_suffix('h') { 60. * 60. * hours.parse::().map_err(|e| hour_err(e, hours))? From 5bef0ef82f7e4bde9574e305d142acce6925b11a Mon Sep 17 00:00:00 2001 From: dvdsk Date: Mon, 8 Apr 2024 13:57:50 +0200 Subject: [PATCH 17/76] Replaces panics with returning an error We have to return an error, println + return Ok(()) will not work. That would make initsystems like systemd return the service as Ok while it encountered an error. I have suppressed the backtrace and location of the error to make it look a bit more presentable. --- src/config.rs | 3 ++- src/main.rs | 22 ++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/config.rs b/src/config.rs index 45438f5..14a6381 100644 --- a/src/config.rs +++ b/src/config.rs @@ -11,7 +11,8 @@ use crate::watch::InputId; #[derive(Debug, Clone, Serialize, Deserialize, Hash, PartialEq, Eq)] pub struct InputFilter { pub id: InputId, - /// empty name means block everything + /// names, a single deviceid can have multiple blockable inputs with + /// different names pub names: Vec, } diff --git a/src/main.rs b/src/main.rs index 5d95381..abff19e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ use std::{ use check_inputs::InputResult; use clap::Parser; use color_eyre::eyre::Context; +use color_eyre::{eyre::eyre, Section}; mod check_inputs; mod cli; @@ -27,16 +28,21 @@ use crate::check_inputs::inactivity_watcher; use crate::notification::notify_all_users; fn main() -> color_eyre::Result<()> { - color_eyre::install().expect("Only called once"); + color_eyre::config::HookBuilder::default() + .display_location_section(false) + .install() + .expect("Only called once"); let args = cli::Cli::parse(); // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { - panic!(concat!( + return Err(eyre!(concat!( "must run ", env!("CARGO_CRATE_NAME"), - " as root user" - )); + " as root user,\nExisting" + ))) + .suppress_backtrace(true) + .suggestion("Run using sudo"); } let (online_devices, new) = watch::devices(); @@ -54,6 +60,14 @@ fn main() -> color_eyre::Result<()> { let to_block = config::read(args.config_path).wrap_err("Could not read devices to block from config")?; + if to_block.is_empty() { + return Err(eyre!( + "No config, do not know what to block. Please run the wizard. \nExiting" + )) + .suppress_backtrace(true) + .suggestion("Run the wizard") + .suggestion("Maybe you have a (wrong) custom location set?"); + } let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()) .wrap_err("Could not start watching to be locked devices for activaty")?; From ef1616c69f5633d794eda605429c895c7d4d9c56 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 14:51:12 +0200 Subject: [PATCH 18/76] implement install and remove via service-install lib --- Cargo.lock | 160 +++++++++++++++++++++++++++++++++++++++++-------- Cargo.toml | 2 +- src/install.rs | 32 +++++++--- 3 files changed, 159 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c7972a..b25f64a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -185,7 +185,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.53", + "syn", ] [[package]] @@ -240,6 +240,37 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + [[package]] name = "deranged" version = "0.3.11" @@ -435,6 +466,15 @@ dependencies = [ "memoffset", ] +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -498,6 +538,26 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "ron" version = "0.8.1" @@ -546,21 +606,25 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn", ] [[package]] name = "service-install" -version = "0.1.0" -source = "git+https://github.com/dvdsk/service-install#0f0223e7681dc59098ead5a71d9c00cfc2077e14" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b764bd6e1293caec86d6fe234c9cc7a326b5b501dc6f0596c3e21527b67e7d79" dependencies = [ + "dialoguer", "home", "itertools 0.10.5", "shell-escape", + "sudo", + "sysinfo", "thiserror", "time", "tracing", - "typed-builder", + "uzers", ] [[package]] @@ -602,9 +666,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.109" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", @@ -612,14 +676,18 @@ dependencies = [ ] [[package]] -name = "syn" -version = "2.0.53" +name = "sysinfo" +version = "0.30.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +checksum = "4b1a378e48fb3ce3a5cf04359c456c9c98ff689bcf1c1bc6e6a31f247686f275" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "windows", ] [[package]] @@ -657,7 +725,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn", ] [[package]] @@ -708,7 +776,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn", ] [[package]] @@ -742,17 +810,6 @@ dependencies = [ "tracing-core", ] -[[package]] -name = "typed-builder" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cba322cb9b7bc6ca048de49e83918223f35e7a86311267013afff257004870" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "unicode-ident" version = "1.0.12" @@ -771,12 +828,63 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "uzers" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d283dc7e8c901e79e32d077866eaf599156cbf427fffa8289aecc52c5c3f63" +dependencies = [ + "libc", + "log", +] + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/Cargo.toml b/Cargo.toml index ac326a7..49cddeb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,4 +17,4 @@ serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" -service-install = { version = "0.1", git = "https://github.com/dvdsk/service-install" } +service-install = { version = "0.3" } diff --git a/src/install.rs b/src/install.rs index f3c8f21..ee38de5 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,10 +1,11 @@ use std::path::PathBuf; use std::time::Duration; -use color_eyre::eyre::{Result, WrapErr}; -use service_install::Install; +use color_eyre::eyre::{eyre, Context, Result}; +use service_install::{install_system, tui}; use crate::cli::RunArgs; +use crate::config; fn fmt_dur(dur: Duration) -> String { let ss = dur.as_secs() % 60; @@ -21,6 +22,15 @@ fn fmt_dur(dur: Duration) -> String { } pub fn set_up(run_args: RunArgs, config_path: Option) -> Result<()> { + let to_block = config::read(config_path.clone()) + .wrap_err("Could not read devices to block from config") + .wrap_err("Could not verify the config file is not empty")?; + if to_block.is_empty() { + return Err(eyre!( + "No devices set up. The service would do nothing. Please run the wizard" + )); + } + let mut args = Vec::new(); if let Some(config_path) = config_path { args.push(format!("--config-path")); @@ -34,21 +44,27 @@ pub fn set_up(run_args: RunArgs, config_path: Option) -> Result<()> { args.push(format!("--grace_duration")); args.push(fmt_dur(run_args.grace_duration)); - Install::system() + let steps = install_system!() .current_exe()? .on_boot() .name(env!("CARGO_CRATE_NAME")) .description("Disables input during breaks") .args(args) - .install() - .wrap_err("Could not set up installation") + .prepare_install() + .wrap_err("Could not set up installation")?; + + tui::install::start(steps).wrap_err("Failed to run install wizard")?; + Ok(()) } pub fn tear_down() -> Result<()> { - Install::system() + let steps = install_system!() .name(env!("CARGO_CRATE_NAME")) - .remove() - .wrap_err("Could not remove installation") + .prepare_remove() + .wrap_err("Could not remove installation")?; + + tui::removal::start(steps).wrap_err("Failed to run removal wizard")?; + Ok(()) } #[test] From 0a58cc048f0b9f67abd9bbbba0006cd64f6f8f42 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 16:34:37 +0200 Subject: [PATCH 19/76] adds audit and release CI --- .github/workflows/audit.yml | 17 +++++ .github/workflows/release.yml | 89 ++++++++++++++++++++++++++ .github/workflows/schedualed-audit.yml | 12 ++++ CHANGELOG.md | 14 ++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 6 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/audit.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/schedualed-audit.yml create mode 100644 CHANGELOG.md diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml new file mode 100644 index 0000000..0215aae --- /dev/null +++ b/.github/workflows/audit.yml @@ -0,0 +1,17 @@ +name: Security audit +on: + pull_request: + # complemented with branch protection on main this will + # need to complete successfully before we auto deploy from main + branches: main + paths: + - '**/Cargo.toml' + - '**/Cargo.lock' +jobs: + security_audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: rustsec/audit-check@v1.4.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..2b0bc0d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,89 @@ +name: Build and Release Stable + +on: + push: + # complemented with branch protection on main this will + # run on any pull request merge + branches: main + +env: + CARGO_TERM_COLOR: always + +permissions: + contents: write + +jobs: + compile: + strategy: + matrix: + target: + - x86_64-unknown-linux-musl + - aarch64-unknown-linux-musl + - armv7-unknown-linux-musleabihf + - arm-unknown-linux-musleabihf + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + target: ${{ matrix.target }} + toolchain: stable + + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + compilers/ + key: ${{ runner.os }}-compile-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} + + - name: compile + run: ./build.sh ${{ matrix.target }} + + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.target }} + path: target/${{ matrix.target }}/release/break-enforcer-s + + release: + runs-on: ubuntu-latest + needs: + - compile + strategy: + matrix: + target: + - x86_64-unknown-linux-musl + - aarch64-unknown-linux-musl + - armv7-unknown-linux-musleabihf + - arm-unknown-linux-musleabihf + steps: + - uses: actions/checkout@v4 + - name: Download the binaries + uses: actions/download-artifact@v4 + - name: find tag + id: tag + run: | + VERSION=$(grep '^version =' main/Cargo.toml | head -n 1 | awk '{print $3}' | tr -d '"' | tr -d "\n") + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "Found version: $VERSION" + echo "::set-output name=version::$VERSION" + - name: rename bins + run: | + suffix=`echo ${{ matrix.target }} | cut -d "-" -f 1` + mv ${{ matrix.target }}/break-enforcer-s break-enforcer-s$suffix + - name: changelog as release body + run: cat CHANGELOG.md | awk '/^## /{if (++c == 2) {exit}} c == 1' | tail -n +2 > ${{ github.workspace }}-CHANGELOG.txt + - name: Release + uses: "softprops/action-gh-release@v1" + with: + body_path: ${{ github.workspace }}-CHANGELOG.txt + prerelease: false + name: Release ${{ env.VERSION }} + files: | + break-enforcer-s* + tag_name: ${{ env.VERSION }} diff --git a/.github/workflows/schedualed-audit.yml b/.github/workflows/schedualed-audit.yml new file mode 100644 index 0000000..3a1b946 --- /dev/null +++ b/.github/workflows/schedualed-audit.yml @@ -0,0 +1,12 @@ +name: Schedualled security audit +on: + schedule: + - cron: '0 0 * * *' +jobs: + audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: rustsec/audit-check@v1.4.1 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..135e457 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.2.0] - 2024-04-09 + +### Added +- Installer and Uninstaller (remove). Sets up a service to run on boot. + +## [0.1.0] +Init release diff --git a/Cargo.lock b/Cargo.lock index b25f64a..0b2e770 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,7 +127,7 @@ dependencies = [ [[package]] name = "break-enforcer-s" -version = "0.1.0" +version = "0.2.0" dependencies = [ "base64 0.22.0", "clap", diff --git a/Cargo.toml b/Cargo.toml index 49cddeb..5cdb79a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer-s" -version = "0.1.0" +version = "0.2.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 4b6498b9a80ee3810c2690afa39c2a34d0a1ad1d Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 16:39:20 +0200 Subject: [PATCH 20/76] commit to test CI --- src/install.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index ee38de5..3636c31 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; + use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; From 4c03b43845bd0b16fafb035b4b7a58d8507d4fe3 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:10:20 +0200 Subject: [PATCH 21/76] fix missing crosscompile script by inlining it in workflow --- .github/workflows/release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2b0bc0d..9ff01bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -42,7 +42,8 @@ jobs: key: ${{ runner.os }}-compile-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} - name: compile - run: ./build.sh ${{ matrix.target }} + run: rustup target add ${{ matrix.target }} + run: cargo build --target ${{ matrix.target }} --release - name: Upload uses: actions/upload-artifact@v4 From 58b8e5cc7f85576b27ae5cf49e3be9cc402f2960 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:11:29 +0200 Subject: [PATCH 22/76] commit to test CI --- src/install.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index 3636c31..ee38de5 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,4 +1,4 @@ - use std::path::PathBuf; +use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; From dceb5c69e020eda798366b0815f0ae0f23052264 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:13:40 +0200 Subject: [PATCH 23/76] fix CI workflow syntax --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9ff01bc..220a3c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -41,8 +41,10 @@ jobs: compilers/ key: ${{ runner.os }}-compile-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} - - name: compile + - name: add target run: rustup target add ${{ matrix.target }} + + - name: compile run: cargo build --target ${{ matrix.target }} --release - name: Upload From 96a7fc41835729f0d53d3cbd02ecedd5977fc423 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:14:22 +0200 Subject: [PATCH 24/76] commit to test CI --- src/install.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index ee38de5..3636c31 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; + use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; From 021ec3cdf00f70dc39466360e29be1a873ac5ebd Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:17:59 +0200 Subject: [PATCH 25/76] remove unused targets from CI matrix --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 220a3c6..f375e42 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,9 +18,6 @@ jobs: matrix: target: - x86_64-unknown-linux-musl - - aarch64-unknown-linux-musl - - armv7-unknown-linux-musleabihf - - arm-unknown-linux-musleabihf runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 7cd11089b52d5231a3e01108c5f9ad9fe85267a3 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:26:20 +0200 Subject: [PATCH 26/76] commit to test CI --- src/install.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index 3636c31..ee38de5 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,4 +1,4 @@ - use std::path::PathBuf; +use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; From 76e85fb80da7cd7a27709426ebf78ad3bc803df6 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:31:16 +0200 Subject: [PATCH 27/76] remove unused targets from CI matrix --- .github/workflows/release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f375e42..2792d1f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,9 +58,6 @@ jobs: matrix: target: - x86_64-unknown-linux-musl - - aarch64-unknown-linux-musl - - armv7-unknown-linux-musleabihf - - arm-unknown-linux-musleabihf steps: - uses: actions/checkout@v4 - name: Download the binaries From 3f9878779cb22b45b80ede4b0b6c5722e4c8c8dc Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 17:31:39 +0200 Subject: [PATCH 28/76] commit to test CI --- src/install.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index ee38de5..3636c31 100644 --- a/src/install.rs +++ b/src/install.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; + use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; From 26491445e6360ae8c9499d2c97cb0bee088dffb6 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 18:58:46 +0200 Subject: [PATCH 29/76] fix tagging not working in CI --- .github/workflows/release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2792d1f..23fcd9c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,10 +65,9 @@ jobs: - name: find tag id: tag run: | - VERSION=$(grep '^version =' main/Cargo.toml | head -n 1 | awk '{print $3}' | tr -d '"' | tr -d "\n") + VERSION=$(grep '^version =' Cargo.toml | head -n 1 | awk '{print $3}' | tr -d '"' | tr -d "\n") echo "VERSION=$VERSION" >> $GITHUB_ENV echo "Found version: $VERSION" - echo "::set-output name=version::$VERSION" - name: rename bins run: | suffix=`echo ${{ matrix.target }} | cut -d "-" -f 1` @@ -82,5 +81,5 @@ jobs: prerelease: false name: Release ${{ env.VERSION }} files: | - break-enforcer-s* + break-enforcer-s_* tag_name: ${{ env.VERSION }} From 337ec9f17ed2419c6bc24ee1ecce8caae482e4fd Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 22:36:58 +0200 Subject: [PATCH 30/76] fix notify text + use eventpath as unique device id --- src/check_inputs.rs | 9 +++++---- src/cli.rs | 2 +- src/main.rs | 2 +- src/watch.rs | 31 ++++++++++++------------------- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index f5003a3..92a4703 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -50,19 +50,20 @@ pub(crate) fn watcher( let (tx2, rx2) = channel(); thread::spawn(move || loop { - let input = just_connected.recv().unwrap(); + let new_device = just_connected.recv().unwrap(); if !to_block .iter() - .filter(|filter| filter.id == input.id) - .any(|filter| filter.names.contains(&input.name)) + .filter(|filter| filter.id == new_device.id) + .any(|filter| filter.names.contains(&new_device.name)) { continue; } + dbg!(&new_device); let tx1 = tx1.clone(); let tx2 = tx2.clone(); thread::Builder::new() - .spawn(move || monitor_input(input, tx1, tx2)) + .spawn(move || monitor_input(new_device, tx1, tx2)) .unwrap(); }); diff --git a/src/cli.rs b/src/cli.rs index fecb2ae..74442c4 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -37,7 +37,7 @@ pub enum Commands { /// example: 10:40 /// ten minutes and 40 seconds /// -#[derive(Parser)] +#[derive(Parser, Debug)] #[command(version, about, verbatim_doc_comment)] pub struct Cli { #[command(subcommand)] diff --git a/src/main.rs b/src/main.rs index abff19e..e76fc9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -92,7 +92,7 @@ fn main() -> color_eyre::Result<()> { loop { notify_all_users("Waiting for input to start work timer..."); block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - notify_all_users(&format!("Starting work timer for {break_duration:?}")); + notify_all_users(&format!("Starting work timer for {work_duration:?}")); work_start_sender.send(true).unwrap(); match break_skip_receiver.recv_timeout(break_duration - grace_duration) { Ok(_) => { diff --git a/src/watch.rs b/src/watch.rs index 57f83da..121f378 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -1,7 +1,6 @@ use core::fmt; use std::collections::HashMap; use std::io::ErrorKind; -use std::os::fd::AsRawFd; use std::path::PathBuf; use std::sync::mpsc::{Receiver, RecvTimeoutError}; use std::sync::{mpsc, Arc, Mutex}; @@ -19,13 +18,6 @@ struct Device { raw_dev: evdev::Device, } -/// need to modify Device (grap/ungrap) therefore can not use a Set -/// instead we use a Map with a characteristic of the device as -/// "Key" -// File descriptor is unique within a process so a good key -#[derive(Hash, PartialEq, Eq)] -struct DeviceKey(std::os::fd::RawFd); - fn device_name(device: &evdev::Device) -> String { device .name() @@ -41,10 +33,6 @@ impl Device { fn name(&self) -> String { device_name(&self.raw_dev) } - - fn key(&self) -> DeviceKey { - DeviceKey(self.raw_dev.as_raw_fd()) - } } #[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash)] @@ -93,7 +81,7 @@ pub struct OnlineDevices { impl OnlineDevices { lock_and_call_inner!(pub list_inputs,; Vec); - lock_and_call_inner!(insert, raw_dev: evdev::Device; bool); + lock_and_call_inner!(insert, raw_dev: evdev::Device, event_path: PathBuf; bool); lock_and_call_inner!(lock_all_matching, id: InputFilter; Result<()>); lock_and_call_inner!(unlock_all_matching, id: InputFilter; Result<()>); @@ -162,19 +150,24 @@ struct Inner { // multiple devices with the same id could have different // names due to manufacturer mistake // device serial could be duplicate due to manufacturer mistake - id_to_devices: HashMap>, + id_to_devices: HashMap>, } impl Inner { /// if it was already present ignore - fn insert(&mut self, raw_dev: evdev::Device) -> bool { + fn insert(&mut self, raw_dev: evdev::Device, event_path: PathBuf) -> bool { let id = raw_dev.input_id().into(); let device = Device { raw_dev }; if let Some(in_map) = self.id_to_devices.get_mut(&id) { - in_map.insert(device.key(), device).is_some() + let existing = in_map.insert(event_path, device); + let is_new = existing.is_none(); + if is_new { + dbg!(); + } + is_new } else { self.id_to_devices - .insert(id, HashMap::from([(device.key(), device)])); + .insert(id, HashMap::from([(event_path, device)])); true } } @@ -237,7 +230,7 @@ pub struct BlockableInput { pub names: Vec, } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct NewInput { pub id: InputId, pub name: String, @@ -286,7 +279,7 @@ fn scan_and_process_new(online: &OnlineDevices, new_dev_tx: &mpsc::Sender Date: Tue, 9 Apr 2024 22:57:22 +0200 Subject: [PATCH 31/76] clippy pedantic --- src/check_inputs.rs | 21 +++++++++++---------- src/main.rs | 12 ++++++------ src/watch.rs | 26 +++++++++++++------------- src/wizard.rs | 9 ++++----- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 92a4703..010d38e 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -45,12 +45,14 @@ pub type InputResult = Result>; pub(crate) fn watcher( just_connected: Receiver, to_block: Vec, -) -> color_eyre::Result<(Receiver, Receiver)> { +) -> (Receiver, Receiver) { let (tx1, rx1) = channel(); let (tx2, rx2) = channel(); thread::spawn(move || loop { - let new_device = just_connected.recv().unwrap(); + let new_device = just_connected + .recv() + .expect("only disconnects at program exit"); if !to_block .iter() .filter(|filter| filter.id == new_device.id) @@ -59,23 +61,22 @@ pub(crate) fn watcher( continue; } - dbg!(&new_device); let tx1 = tx1.clone(); let tx2 = tx2.clone(); thread::Builder::new() - .spawn(move || monitor_input(new_device, tx1, tx2)) - .unwrap(); + .spawn(move || monitor_input(new_device, &tx1, &tx2)) + .expect("the OS should be able to spawn a thread"); }); - Ok((rx1, rx2)) + (rx1, rx2) } fn monitor_input( input: NewInput, - tx1: Sender>>, - tx2: Sender>>, + tx1: &Sender>>, + tx2: &Sender>>, ) { - let mut file = match fs::File::open(&input.path) { + let mut file = match fs::File::open(input.path) { // means the device is disconnected Err(e) if e.kind() == io::ErrorKind::NotFound => return, Err(e) => { @@ -98,7 +99,7 @@ fn monitor_input( let _ig_err = tx2.send(Err(err)); return; } - Ok(_) => (), + Ok(()) => (), }; let _ = tx1.send(Ok(true)); diff --git a/src/main.rs b/src/main.rs index e76fc9d..60e30b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,8 +68,7 @@ fn main() -> color_eyre::Result<()> { .suggestion("Run the wizard") .suggestion("Maybe you have a (wrong) custom location set?"); } - let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()) - .wrap_err("Could not start watching to be locked devices for activaty")?; + let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); let (break_skip_sender, break_skip_receiver) = channel(); let (work_start_sender, work_start_receiver) = channel(); @@ -122,7 +121,7 @@ fn main() -> color_eyre::Result<()> { thread::sleep(work_duration); for lock in locks { - lock.unlock()? + lock.unlock()?; } } } @@ -136,9 +135,10 @@ fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Res } } + #[allow(clippy::match_same_arms)] match recv_any_input.recv() { - Err(_) => return Ok(()), // device disconnected - Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), - Ok(Ok(_)) => return Ok(()), // new event! stop blocking + Err(_) => Ok(()), // device disconnected + Ok(Err(e)) => Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => Ok(()), // new event! stop blocking } } diff --git a/src/watch.rs b/src/watch.rs index 121f378..47a2876 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -19,14 +19,14 @@ struct Device { } fn device_name(device: &evdev::Device) -> String { + let default = || { + let id = InputId::from(device.input_id()); + format!("Unknown device, id: {id}") + }; device .name() .or(device.unique_name()) - .map(String::from) - .unwrap_or_else(|| { - let id = InputId::from(device.input_id()); - format!("Unknown device, id: {}", id) - }) + .map_or_else(default, String::from) } impl Device { @@ -82,8 +82,8 @@ pub struct OnlineDevices { impl OnlineDevices { lock_and_call_inner!(pub list_inputs,; Vec); lock_and_call_inner!(insert, raw_dev: evdev::Device, event_path: PathBuf; bool); - lock_and_call_inner!(lock_all_matching, id: InputFilter; Result<()>); - lock_and_call_inner!(unlock_all_matching, id: InputFilter; Result<()>); + lock_and_call_inner!(lock_all_matching, id: &InputFilter; Result<()>); + lock_and_call_inner!(unlock_all_matching, id: &InputFilter; Result<()>); /// will also ensure that if the device is connected before /// the lockguard is dropped that it is locked @@ -142,7 +142,7 @@ impl Drop for LockGuard { eprintln!( "Should not drop LockGuard but instead destroy by calling unlock since drop can not return an error" - ) + ); } } @@ -183,7 +183,7 @@ impl Inner { .collect() } - fn unlock_all_matching(&mut self, filter: InputFilter) -> Result<()> { + fn unlock_all_matching(&mut self, filter: &InputFilter) -> Result<()> { let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; @@ -201,7 +201,7 @@ impl Inner { Ok(()) } - fn lock_all_matching(&mut self, filter: InputFilter) -> Result<()> { + fn lock_all_matching(&mut self, filter: &InputFilter) -> Result<()> { let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; @@ -211,7 +211,7 @@ impl Inner { .filter(|device| filter.names.contains(&device.name())) { match device.raw_dev.grab() { - Ok(_) => (), + Ok(()) => (), Err(e) if e.kind() == ErrorKind::ResourceBusy => (), err @ Err(_) => { return err @@ -259,11 +259,11 @@ pub fn devices() -> (OnlineDevices, Receiver) { scan_and_process_new(&online, &new_dev_tx); match order_rx.recv_timeout(Duration::from_secs(5)) { Ok(Order::Lock(filter, answer)) => { - let res = online.lock_all_matching(filter); + let res = online.lock_all_matching(&filter); answer.send(res).expect("lock fn does not panic"); } Ok(Order::UnLock(filter, answer)) => { - let res = online.unlock_all_matching(filter); + let res = online.unlock_all_matching(&filter); answer.send(res).expect("unlock fn does not panic"); } Err(RecvTimeoutError::Timeout) => continue, diff --git a/src/wizard.rs b/src/wizard.rs index 31de955..2cd53a2 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -21,7 +21,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu let mut inputs = devices.list_inputs(); for BlockableInput { names, .. } in &mut inputs { - names.sort() + names.sort(); } let mut inputs: Vec<_> = inputs .into_iter() @@ -34,8 +34,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu .map(|(id, name)| { let checked = config .get(id) - .map(|names| names.contains(name)) - .unwrap_or(false); + .is_some_and(|names| names.contains(name)); (name, checked) }) .collect(); @@ -60,7 +59,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu option.1 = false; } for idx in &selection { - options[*idx].1 = true + options[*idx].1 = true; } let locked: Vec<_> = selection @@ -79,7 +78,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu thread::sleep(Duration::from_secs(8)); println!("\n\nUnlocking, Stop typing!"); for lock in locked { - lock.unlock()? + lock.unlock()?; } } thread::sleep(Duration::from_secs(2)); From 8e8e7d8ebf220204027c1fad98914c31b4b58f15 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 23:10:51 +0200 Subject: [PATCH 32/76] fix release action using wrong file --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 23fcd9c..0f1294e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,7 +71,7 @@ jobs: - name: rename bins run: | suffix=`echo ${{ matrix.target }} | cut -d "-" -f 1` - mv ${{ matrix.target }}/break-enforcer-s break-enforcer-s$suffix + mv ${{ matrix.target }}/break-enforcer-s break-enforcer-s_$suffix - name: changelog as release body run: cat CHANGELOG.md | awk '/^## /{if (++c == 2) {exit}} c == 1' | tail -n +2 > ${{ github.workspace }}-CHANGELOG.txt - name: Release From d3c81ae0206ad7d47255ad747c3ba5ba66b2e765 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 9 Apr 2024 23:12:51 +0200 Subject: [PATCH 33/76] remove dbg --- src/watch.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/watch.rs b/src/watch.rs index 47a2876..0bc6272 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -161,9 +161,6 @@ impl Inner { if let Some(in_map) = self.id_to_devices.get_mut(&id) { let existing = in_map.insert(event_path, device); let is_new = existing.is_none(); - if is_new { - dbg!(); - } is_new } else { self.id_to_devices From b8459c47d049fa7d2627a2470869d19203d01bf2 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 10 Apr 2024 12:51:16 +0200 Subject: [PATCH 34/76] fixes two more swaps of break and work time --- src/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 60e30b6..8a27ac9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -117,8 +117,8 @@ fn main() -> color_eyre::Result<()> { ); } - notify_all_users(&format!("Starting break timer for {work_duration:?}")); - thread::sleep(work_duration); + notify_all_users(&format!("Starting break timer for {break_duration:?}")); + thread::sleep(break_duration); for lock in locks { lock.unlock()?; From 1e05cbf975f9e7ff3ece322f2f1bfcf9df29b205 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 10 Apr 2024 12:51:55 +0200 Subject: [PATCH 35/76] more clippy pedantic --- src/watch.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/watch.rs b/src/watch.rs index 0bc6272..60e9fb5 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -160,8 +160,7 @@ impl Inner { let device = Device { raw_dev }; if let Some(in_map) = self.id_to_devices.get_mut(&id) { let existing = in_map.insert(event_path, device); - let is_new = existing.is_none(); - is_new + existing.is_none() // is_new } else { self.id_to_devices .insert(id, HashMap::from([(event_path, device)])); From 4453fd99ca944c84cc462a118fad16907fa78227 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 10 Apr 2024 22:15:43 +0200 Subject: [PATCH 36/76] fixes lock now working by opening event_path only once --- Cargo.lock | 164 ++++++++++++++++++++++++++++++++---- Cargo.toml | 1 + src/check_inputs.rs | 14 +++- src/watch.rs | 197 ++++++++++++++++++++++++++++++++------------ src/wizard.rs | 6 +- 5 files changed, 311 insertions(+), 71 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2a49d00..c5ce907 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,7 +52,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -62,7 +62,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -134,6 +134,7 @@ dependencies = [ "color-eyre", "dialoguer", "evdev", + "inotify", "itertools", "ron", "serde", @@ -236,7 +237,7 @@ dependencies = [ "lazy_static", "libc", "unicode-width", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -272,7 +273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -310,6 +311,12 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -337,6 +344,28 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "itertools" version = "0.12.1" @@ -394,6 +423,17 @@ dependencies = [ "adler", ] +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.48.0", +] + [[package]] name = "nix" version = "0.23.2" @@ -486,7 +526,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -524,6 +564,16 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "strsim" version = "0.11.0" @@ -566,7 +616,7 @@ dependencies = [ "cfg-if", "fastrand", "rustix", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -599,6 +649,20 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + [[package]] name = "tracing" version = "0.1.40" @@ -664,13 +728,43 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -679,51 +773,93 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.4" diff --git a/Cargo.toml b/Cargo.toml index 08d79bc..2fa52bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ clap = { version = "4.5.2", features = ["derive"] } color-eyre = "0.6.2" dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } evdev = { version = "0.12.1" } +inotify = "0.10.2" itertools = "0.12.1" ron = "0.8.1" serde = { version = "1.0.197", features = ["derive"] } diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 010d38e..b2b72b5 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -81,6 +81,7 @@ fn monitor_input( Err(e) if e.kind() == io::ErrorKind::NotFound => return, Err(e) => { // unexpected error, report to main thread + dbg!(&e); let err = Arc::new(e); // make cloneable let _ig_err = tx1.send(Err(err.clone())); let _ig_err = tx2.send(Err(err)); @@ -91,7 +92,14 @@ fn monitor_input( loop { match wait_for_input(&mut file) { // means the device is disconnected - Err(e) if e.kind() == io::ErrorKind::NotFound => return, + Err(e) if e.kind() == io::ErrorKind::NotFound => { + // device was disconnected + break; + } + Err(e) if device_removed(&e) => { + // device was disconnected + break; + } Err(e) => { // unexpected error, report to main thread let err = Arc::new(e); // make cloneable @@ -106,3 +114,7 @@ fn monitor_input( let _ = tx2.send(Ok(true)); } } + +pub fn device_removed(e: &std::io::Error) -> bool { + e.raw_os_error() == Some(19i32) && e.to_string().contains("No such device") +} diff --git a/src/watch.rs b/src/watch.rs index 60e9fb5..4c221c2 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -1,17 +1,21 @@ use core::fmt; use std::collections::HashMap; use std::io::ErrorKind; +use std::os::unix::ffi::OsStrExt; use std::path::PathBuf; -use std::sync::mpsc::{Receiver, RecvTimeoutError}; +use std::str::FromStr; +use std::sync::mpsc::{Receiver, RecvTimeoutError, Sender}; use std::sync::{mpsc, Arc, Mutex}; -use std::thread; use std::time::Duration; +use std::{fs, thread}; use base64::{engine::general_purpose, Engine as _}; use color_eyre::eyre::Context; use color_eyre::{Result, Section}; +use inotify::{EventMask, Inotify, WatchMask}; use serde::{Deserialize, Serialize}; +use crate::check_inputs::device_removed; use crate::config::InputFilter; struct Device { @@ -75,12 +79,12 @@ macro_rules! lock_and_call_inner { #[derive(Clone)] pub struct OnlineDevices { - tx: mpsc::Sender, + tx: mpsc::Sender, inner: Arc>, } impl OnlineDevices { - lock_and_call_inner!(pub list_inputs,; Vec); + lock_and_call_inner!(pub list_inputs,; Result>); lock_and_call_inner!(insert, raw_dev: evdev::Device, event_path: PathBuf; bool); lock_and_call_inner!(lock_all_matching, id: &InputFilter; Result<()>); lock_and_call_inner!(unlock_all_matching, id: &InputFilter; Result<()>); @@ -90,7 +94,7 @@ impl OnlineDevices { pub(crate) fn lock(&self, input: InputFilter) -> Result { let (tx, rx) = std::sync::mpsc::channel(); self.tx - .send(Order::Lock(input.clone(), tx)) + .send(Event::LockRequested(input.clone(), tx)) .expect("devices should never end/panic"); let lock_res = rx.recv().expect("devices should never end/panic"); @@ -104,16 +108,19 @@ impl OnlineDevices { } } -enum Order { - Lock(InputFilter, mpsc::Sender>), - UnLock(InputFilter, mpsc::Sender>), +enum Event { + LockRequested(InputFilter, mpsc::Sender>), + UnLockRequested(InputFilter, mpsc::Sender>), + DevError(color_eyre::Result<()>), + DevRemove(PathBuf), + DevAdded(PathBuf), } /// use `unlock` to re-enable the disabled input device #[must_use] pub struct LockGuard { filter: InputFilter, - tx: mpsc::Sender, + tx: mpsc::Sender, // skip backup unlock if user did things right dropped: bool, } @@ -122,7 +129,7 @@ impl LockGuard { pub(crate) fn unlock(mut self) -> Result<()> { let (tx, rx) = std::sync::mpsc::channel(); self.tx - .send(Order::UnLock(self.filter.clone(), tx)) + .send(Event::UnLockRequested(self.filter.clone(), tx)) .expect("devices should never end/panic"); rx.recv().expect("devices should never end/panic")?; @@ -138,7 +145,9 @@ impl Drop for LockGuard { return; // nothing to do } let (tx, _) = std::sync::mpsc::channel(); - let _do_not_panic_in_drop = self.tx.send(Order::UnLock(self.filter.clone(), tx)); + let _do_not_panic_in_drop = self + .tx + .send(Event::UnLockRequested(self.filter.clone(), tx)); eprintln!( "Should not drop LockGuard but instead destroy by calling unlock since drop can not return an error" @@ -151,9 +160,21 @@ struct Inner { // names due to manufacturer mistake // device serial could be duplicate due to manufacturer mistake id_to_devices: HashMap>, + status: Result<()>, } impl Inner { + fn check_status(&mut self) -> Result<()> { + if self.status.is_err() { // little dance to get ownership of the error + let mut to_return = Ok(()); + std::mem::swap(&mut to_return, &mut self.status); + // self.error is now Ok(()) + return to_return + } else { + Ok(()) + } + } + /// if it was already present ignore fn insert(&mut self, raw_dev: evdev::Device, event_path: PathBuf) -> bool { let id = raw_dev.input_id().into(); @@ -168,18 +189,22 @@ impl Inner { } } - fn list_inputs(&mut self) -> Vec { - self.id_to_devices + fn list_inputs(&mut self) -> Result> { + self.check_status()?; + + Ok(self + .id_to_devices .iter() .map(|(id, devices)| { let mut names: Vec<_> = devices.values().map(Device::name).collect(); names.sort(); BlockableInput { id: *id, names } }) - .collect() + .collect()) } fn unlock_all_matching(&mut self, filter: &InputFilter) -> Result<()> { + self.check_status()?; let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; @@ -188,16 +213,21 @@ impl Inner { .values_mut() .filter(|device| filter.names.contains(&device.name())) { - device - .raw_dev - .ungrab() - .wrap_err("Could not ungrab (release exclusive access) to device") - .with_note(|| format!("device name: {}", device.name()))?; + match device.raw_dev.ungrab() { + Ok(()) => (), + Err(e) if device_removed(&e) => (), + err @ Err(_) => { + return err + .wrap_err("Could not ungrab (release exclusive access) to device") + .with_note(|| format!("device name: {}", device.name())); + } + } } Ok(()) } fn lock_all_matching(&mut self, filter: &InputFilter) -> Result<()> { + self.check_status()?; let Some(to_lock) = self.id_to_devices.get_mut(&filter.id) else { return Ok(()); }; @@ -209,6 +239,7 @@ impl Inner { match device.raw_dev.grab() { Ok(()) => (), Err(e) if e.kind() == ErrorKind::ResourceBusy => (), + Err(e) if device_removed(&e) => (), err @ Err(_) => { return err .wrap_err("Could not grab (acquire exclusive access) to device") @@ -240,50 +271,112 @@ pub struct NewInput { * <15-03-24, dvdsk> */ pub fn devices() -> (OnlineDevices, Receiver) { let (order_tx, order_rx) = mpsc::channel(); - let online = OnlineDevices { - tx: order_tx, + let mut online = OnlineDevices { + tx: order_tx.clone(), inner: Arc::new(Mutex::new(Inner { + status: Ok(()), id_to_devices: HashMap::new(), })), }; let (new_dev_tx, new_dev_rx) = mpsc::channel(); - scan_and_process_new(&online, &new_dev_tx); - { - let online = online.clone(); - thread::spawn(move || loop { - scan_and_process_new(&online, &new_dev_tx); - match order_rx.recv_timeout(Duration::from_secs(5)) { - Ok(Order::Lock(filter, answer)) => { - let res = online.lock_all_matching(&filter); - answer.send(res).expect("lock fn does not panic"); - } - Ok(Order::UnLock(filter, answer)) => { - let res = online.unlock_all_matching(&filter); - answer.send(res).expect("unlock fn does not panic"); - } - Err(RecvTimeoutError::Timeout) => continue, - Err(RecvTimeoutError::Disconnected) => return, + send_initial_devices(&mut online, &new_dev_tx); + thread::spawn(move || { + send_new_devices(order_tx); + }); + + let mut online2 = online.clone(); + thread::spawn(move || loop { + match order_rx.recv_timeout(Duration::from_secs(5)) { + Ok(Event::LockRequested(filter, answer)) => { + let res = online2.lock_all_matching(&filter); + answer.send(res).expect("lock fn does not panic"); } - }); - } + Ok(Event::UnLockRequested(filter, answer)) => { + let res = online2.unlock_all_matching(&filter); + answer.send(res).expect("unlock fn does not panic"); + } + Ok(Event::DevAdded(event_path)) => add_device(&mut online2, &new_dev_tx, event_path), + Ok(Event::DevRemove(event_path)) => { + remove_device(&mut online2, &new_dev_tx, event_path) + } + Ok(Event::DevError(error)) => { + // next time online devices is queried it will report this error + online2.inner.lock().unwrap().status = error; + } + + Err(RecvTimeoutError::Timeout) => continue, + Err(RecvTimeoutError::Disconnected) => return, + } + }); (online, new_dev_rx) } -fn scan_and_process_new(online: &OnlineDevices, new_dev_tx: &mpsc::Sender) { - for (event_path, device) in evdev::enumerate() { - let id = InputId::from(device.input_id()); - let name = device_name(&device); - let new = online.insert(device, event_path.clone()); - if new { - new_dev_tx - .send(NewInput { - id, - name, - path: event_path, - }) - .expect("watcher should never end and drop rx"); +const DEV_DIR: &'static str = "/dev/input"; +fn send_initial_devices(online: &mut OnlineDevices, new_dev_tx: &Sender) { + for entry in fs::read_dir(DEV_DIR).unwrap() { + let entry = entry.unwrap(); + let path = entry.path(); + let fname = path.file_name().unwrap(); + if fname.as_bytes().starts_with(b"event") { + add_device(online, new_dev_tx, path) + } + } +} + +fn add_device(online: &mut OnlineDevices, new_dev_tx: &Sender, event_path: PathBuf) { + let device = evdev::Device::open(&event_path).unwrap(); + let id = InputId::from(device.input_id()); + let name = device_name(&device); + let new = online.insert(device, event_path.clone()); + if new { + new_dev_tx + .send(NewInput { + id, + name, + path: event_path, + }) + .expect("watcher should never end and drop rx"); + } +} + +fn remove_device( + _online: &mut OnlineDevices, + _new_dev_tx: &Sender, + _event_path: PathBuf, +) { + eprintln!("device was removed (unused for now)"); +} + +fn send_new_devices(tx: Sender) { + let mut inotify = Inotify::init().unwrap(); + let mut buffer = [0; 1024]; + + inotify + .watches() + .add(DEV_DIR, WatchMask::CREATE | WatchMask::DELETE) + .unwrap(); + + let events = match inotify.read_events_blocking(&mut buffer) { + Err(err) => { + let res = Err(err).wrap_err("inotify could not read events"); + tx.send(Event::DevError(res)).unwrap(); + return; + } + Ok(events) => events, + }; + + for event in events { + let Some(file_name) = event.name else { + continue; + }; + let path = PathBuf::from_str(DEV_DIR).unwrap().join(file_name); + if event.mask.contains(EventMask::CREATE) { + tx.send(Event::DevAdded(path.clone())).unwrap(); + } + if event.mask.contains(EventMask::DELETE) { + tx.send(Event::DevRemove(path)).unwrap(); } } } diff --git a/src/wizard.rs b/src/wizard.rs index 2cd53a2..4ae3eef 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -19,7 +19,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu .map(|InputFilter { id, names }| (id, names)) .collect(); - let mut inputs = devices.list_inputs(); + let mut inputs = devices.list_inputs().wrap_err("Could not list inputs")?; for BlockableInput { names, .. } in &mut inputs { names.sort(); } @@ -32,9 +32,7 @@ pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Resu let mut options: Vec<_> = inputs .iter() .map(|(id, name)| { - let checked = config - .get(id) - .is_some_and(|names| names.contains(name)); + let checked = config.get(id).is_some_and(|names| names.contains(name)); (name, checked) }) .collect(); From 36f24bea880945da9969782a3f51f291eb4b19d5 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 10 Apr 2024 22:20:04 +0200 Subject: [PATCH 37/76] reverts incorrect breaktime/worktime swap --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 8a27ac9..c929fd6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -93,7 +93,7 @@ fn main() -> color_eyre::Result<()> { block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; notify_all_users(&format!("Starting work timer for {work_duration:?}")); work_start_sender.send(true).unwrap(); - match break_skip_receiver.recv_timeout(break_duration - grace_duration) { + match break_skip_receiver.recv_timeout(work_duration - grace_duration) { Ok(_) => { notify_all_users("No input for breaktime"); block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; From 6569dae664641dba2a42fccda9a35e170e95f1f9 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Wed, 10 Apr 2024 22:23:06 +0200 Subject: [PATCH 38/76] removed device io watcher removed + clippy pedantic --- src/watch.rs | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/watch.rs b/src/watch.rs index 4c221c2..51b2e3e 100644 --- a/src/watch.rs +++ b/src/watch.rs @@ -112,7 +112,6 @@ enum Event { LockRequested(InputFilter, mpsc::Sender>), UnLockRequested(InputFilter, mpsc::Sender>), DevError(color_eyre::Result<()>), - DevRemove(PathBuf), DevAdded(PathBuf), } @@ -165,11 +164,12 @@ struct Inner { impl Inner { fn check_status(&mut self) -> Result<()> { - if self.status.is_err() { // little dance to get ownership of the error + if self.status.is_err() { + // little dance to get ownership of the error let mut to_return = Ok(()); std::mem::swap(&mut to_return, &mut self.status); // self.error is now Ok(()) - return to_return + to_return } else { Ok(()) } @@ -282,7 +282,7 @@ pub fn devices() -> (OnlineDevices, Receiver) { let (new_dev_tx, new_dev_rx) = mpsc::channel(); send_initial_devices(&mut online, &new_dev_tx); thread::spawn(move || { - send_new_devices(order_tx); + send_new_devices(&order_tx); }); let mut online2 = online.clone(); @@ -297,9 +297,6 @@ pub fn devices() -> (OnlineDevices, Receiver) { answer.send(res).expect("unlock fn does not panic"); } Ok(Event::DevAdded(event_path)) => add_device(&mut online2, &new_dev_tx, event_path), - Ok(Event::DevRemove(event_path)) => { - remove_device(&mut online2, &new_dev_tx, event_path) - } Ok(Event::DevError(error)) => { // next time online devices is queried it will report this error online2.inner.lock().unwrap().status = error; @@ -313,14 +310,14 @@ pub fn devices() -> (OnlineDevices, Receiver) { (online, new_dev_rx) } -const DEV_DIR: &'static str = "/dev/input"; +const DEV_DIR: &str = "/dev/input"; fn send_initial_devices(online: &mut OnlineDevices, new_dev_tx: &Sender) { for entry in fs::read_dir(DEV_DIR).unwrap() { let entry = entry.unwrap(); let path = entry.path(); let fname = path.file_name().unwrap(); if fname.as_bytes().starts_with(b"event") { - add_device(online, new_dev_tx, path) + add_device(online, new_dev_tx, path); } } } @@ -341,22 +338,11 @@ fn add_device(online: &mut OnlineDevices, new_dev_tx: &Sender, event_p } } -fn remove_device( - _online: &mut OnlineDevices, - _new_dev_tx: &Sender, - _event_path: PathBuf, -) { - eprintln!("device was removed (unused for now)"); -} - -fn send_new_devices(tx: Sender) { +fn send_new_devices(tx: &Sender) { let mut inotify = Inotify::init().unwrap(); let mut buffer = [0; 1024]; - inotify - .watches() - .add(DEV_DIR, WatchMask::CREATE | WatchMask::DELETE) - .unwrap(); + inotify.watches().add(DEV_DIR, WatchMask::CREATE).unwrap(); let events = match inotify.read_events_blocking(&mut buffer) { Err(err) => { @@ -375,8 +361,5 @@ fn send_new_devices(tx: Sender) { if event.mask.contains(EventMask::CREATE) { tx.send(Event::DevAdded(path.clone())).unwrap(); } - if event.mask.contains(EventMask::DELETE) { - tx.send(Event::DevRemove(path)).unwrap(); - } } } From 6652679e8724136ae61354db7fbda5eba76840f0 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Thu, 11 Apr 2024 23:00:46 +0200 Subject: [PATCH 39/76] fix arguments used by installer --- src/install.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/install.rs b/src/install.rs index ee38de5..fa5ccfc 100644 --- a/src/install.rs +++ b/src/install.rs @@ -37,11 +37,11 @@ pub fn set_up(run_args: RunArgs, config_path: Option) -> Result<()> { args.push(config_path.display().to_string()); } args.push("run".to_string()); - args.push(format!("--work_duration")); + args.push(format!("--work-duration")); args.push(fmt_dur(run_args.work_duration)); - args.push(format!("--break_duration")); + args.push(format!("--break-duration")); args.push(fmt_dur(run_args.break_duration)); - args.push(format!("--grace_duration")); + args.push(format!("--grace-duration")); args.push(fmt_dur(run_args.grace_duration)); let steps = install_system!() From a582d9443df3f2c638e8a87e6cbcd20869d57ef8 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Thu, 11 Apr 2024 23:57:32 +0200 Subject: [PATCH 40/76] make installer overwrite any existing binary --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/install.rs | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b25f64a..e6bb328 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -611,9 +611,9 @@ dependencies = [ [[package]] name = "service-install" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b764bd6e1293caec86d6fe234c9cc7a326b5b501dc6f0596c3e21527b67e7d79" +checksum = "4464608c1ab8ff985eab5cd522a8d86209132116dadd501b2c12d1f593bbf81c" dependencies = [ "dialoguer", "home", diff --git a/Cargo.toml b/Cargo.toml index 49cddeb..c5468ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,4 +17,4 @@ serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" -service-install = { version = "0.3" } +service-install = { version = "0.4" } diff --git a/src/install.rs b/src/install.rs index fa5ccfc..1c23dd9 100644 --- a/src/install.rs +++ b/src/install.rs @@ -2,6 +2,8 @@ use std::path::PathBuf; use std::time::Duration; use color_eyre::eyre::{eyre, Context, Result}; +use service_install::install::files::MoveError; +use service_install::install::PrepareInstallError; use service_install::{install_system, tui}; use crate::cli::RunArgs; @@ -50,6 +52,7 @@ pub fn set_up(run_args: RunArgs, config_path: Option) -> Result<()> { .name(env!("CARGO_CRATE_NAME")) .description("Disables input during breaks") .args(args) + .overwrite_existing(true) .prepare_install() .wrap_err("Could not set up installation")?; From e834a999e9ea8a05b62967a1e455fe33cc46b4eb Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 12 Apr 2024 15:15:42 +0200 Subject: [PATCH 41/76] refactor run command to seperate module --- src/main.rs | 113 ++++---------------------------------------------- src/run.rs | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ src/wizard.rs | 6 ++- 3 files changed, 124 insertions(+), 106 deletions(-) create mode 100644 src/run.rs diff --git a/src/main.rs b/src/main.rs index c929fd6..e2ddc37 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,16 +3,6 @@ #![feature(slice_flatten)] #![feature(io_error_more)] -use std::{ - sync::{ - atomic::{AtomicBool, Ordering}, - mpsc::{channel, Receiver, RecvTimeoutError}, - Arc, - }, - thread, -}; - -use check_inputs::InputResult; use clap::Parser; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; @@ -21,12 +11,10 @@ mod check_inputs; mod cli; mod config; mod notification; +mod run; mod watch; mod wizard; -use crate::check_inputs::inactivity_watcher; -use crate::notification::notify_all_users; - fn main() -> color_eyre::Result<()> { color_eyre::config::HookBuilder::default() .display_location_section(false) @@ -45,100 +33,17 @@ fn main() -> color_eyre::Result<()> { .suggestion("Run using sudo"); } - let (online_devices, new) = watch::devices(); - let (work_duration, break_duration, grace_duration) = match args.command { + match args.command { cli::Commands::Run { work_duration, break_duration, grace_duration, - } => (work_duration, break_duration, grace_duration), - cli::Commands::Wizard => { - wizard::run(&online_devices, args.config_path).wrap_err("Error running wizard")?; - return Ok(()); - } - }; - - let to_block = - config::read(args.config_path).wrap_err("Could not read devices to block from config")?; - if to_block.is_empty() { - return Err(eyre!( - "No config, do not know what to block. Please run the wizard. \nExiting" - )) - .suppress_backtrace(true) - .suggestion("Run the wizard") - .suggestion("Maybe you have a (wrong) custom location set?"); - } - let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); - - let (break_skip_sender, break_skip_receiver) = channel(); - let (work_start_sender, work_start_receiver) = channel(); - let break_skip_is_sent = Arc::new(AtomicBool::new(false)); - - { - let break_skip_is_sent = break_skip_is_sent.clone(); - - thread::spawn(move || { - inactivity_watcher( - &work_start_receiver, - &break_skip_sender, - &break_skip_is_sent, - &recv_any_input2, - break_duration, - ); - }); - } - - loop { - notify_all_users("Waiting for input to start work timer..."); - block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - notify_all_users(&format!("Starting work timer for {work_duration:?}")); - work_start_sender.send(true).unwrap(); - match break_skip_receiver.recv_timeout(work_duration - grace_duration) { - Ok(_) => { - notify_all_users("No input for breaktime"); - block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - break_skip_is_sent.store(false, Ordering::Release); - continue; - } - Err(RecvTimeoutError::Timeout) => (), - Err(e) => panic!("Unexpected error: {e}"), - } - - notify_all_users(&format!("Locking in {grace_duration:?}!")); - thread::sleep(grace_duration); - - let mut locks = Vec::new(); - - for device_id in to_block.iter().cloned() { - locks.push( - online_devices - .lock(device_id) - .wrap_err("failed to lock one of the inputs")?, - ); - } - - notify_all_users(&format!("Starting break timer for {break_duration:?}")); - thread::sleep(break_duration); - - for lock in locks { - lock.unlock()?; - } - } -} - -fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Result<()> { - loop { - match recv_any_input.try_recv() { - Err(_) => break, - Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), - Ok(Ok(_)) => (), // old event, ignore - } - } - - #[allow(clippy::match_same_arms)] - match recv_any_input.recv() { - Err(_) => Ok(()), // device disconnected - Ok(Err(e)) => Err(e).wrap_err("Error with device file"), - Ok(Ok(_)) => Ok(()), // new event! stop blocking + } => run::run( + args.config_path, + work_duration, + break_duration, + grace_duration, + ), + cli::Commands::Wizard => wizard::run(args.config_path).wrap_err("Error running wizard"), } } diff --git a/src/run.rs b/src/run.rs new file mode 100644 index 0000000..4f4dbff --- /dev/null +++ b/src/run.rs @@ -0,0 +1,111 @@ +use std::{path::PathBuf, time::Duration}; + +use color_eyre::eyre::{eyre, Context}; +use color_eyre::{Result, Section}; + +use crate::check_inputs::InputResult; +use crate::{check_inputs, watch}; +use crate::{check_inputs::inactivity_watcher, config}; +use crate::notification::notify_all_users; +use std::{ + sync::{ + atomic::{AtomicBool, Ordering}, + mpsc::{channel, Receiver, RecvTimeoutError}, + Arc, + }, + thread, +}; + +pub(crate) fn run( + config_path: Option, + work_duration: Duration, + break_duration: Duration, + grace_duration: Duration, +) -> Result<()> { + + let (online_devices, new) = watch::devices(); + + let to_block = + config::read(config_path).wrap_err("Could not read devices to block from config")?; + if to_block.is_empty() { + return Err(eyre!( + "No config, do not know what to block. Please run the wizard. \nExiting" + )) + .suppress_backtrace(true) + .suggestion("Run the wizard") + .suggestion("Maybe you have a (wrong) custom location set?"); + } + let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); + + let (break_skip_sender, break_skip_receiver) = channel(); + let (work_start_sender, work_start_receiver) = channel(); + let break_skip_is_sent = Arc::new(AtomicBool::new(false)); + + { + let break_skip_is_sent = break_skip_is_sent.clone(); + + thread::spawn(move || { + inactivity_watcher( + &work_start_receiver, + &break_skip_sender, + &break_skip_is_sent, + &recv_any_input2, + break_duration, + ); + }); + } + + loop { + notify_all_users("Waiting for input to start work timer..."); + block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; + notify_all_users(&format!("Starting work timer for {work_duration:?}")); + work_start_sender.send(true).unwrap(); + match break_skip_receiver.recv_timeout(work_duration - grace_duration) { + Ok(_) => { + notify_all_users("No input for breaktime"); + block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; + break_skip_is_sent.store(false, Ordering::Release); + continue; + } + Err(RecvTimeoutError::Timeout) => (), + Err(e) => panic!("Unexpected error: {e}"), + } + + notify_all_users(&format!("Locking in {grace_duration:?}!")); + thread::sleep(grace_duration); + + let mut locks = Vec::new(); + + for device_id in to_block.iter().cloned() { + locks.push( + online_devices + .lock(device_id) + .wrap_err("failed to lock one of the inputs")?, + ); + } + + notify_all_users(&format!("Starting break timer for {break_duration:?}")); + thread::sleep(break_duration); + + for lock in locks { + lock.unlock()?; + } + } +} + +fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Result<()> { + loop { + match recv_any_input.try_recv() { + Err(_) => break, + Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => (), // old event, ignore + } + } + + #[allow(clippy::match_same_arms)] + match recv_any_input.recv() { + Err(_) => Ok(()), // device disconnected + Ok(Err(e)) => Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => Ok(()), // new event! stop blocking + } +} diff --git a/src/wizard.rs b/src/wizard.rs index 4ae3eef..c1f9fdb 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -9,10 +9,12 @@ use dialoguer::{Confirm, MultiSelect}; use itertools::Itertools; use crate::config::{self, InputFilter}; -use crate::watch::{BlockableInput, OnlineDevices}; +use crate::watch::{self, BlockableInput}; // todo deal with devices with multiple names -pub fn run(devices: &OnlineDevices, custom_config_path: Option) -> Result<()> { +pub fn run(custom_config_path: Option) -> Result<()> { + let (devices, _) = watch::devices(); + let config: HashMap<_, _> = config::read(custom_config_path.clone()) .wrap_err("Could not read custom config")? .into_iter() From 081fb523623b6645b483a5f19f0f57502902d989 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 12 Apr 2024 17:31:54 +0200 Subject: [PATCH 42/76] fixes parse error in cli --- src/cli.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ src/run.rs | 3 +-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 74442c4..429c643 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,4 +1,5 @@ use clap::{Parser, Subcommand}; +use color_eyre::{eyre, Section}; use std::num::ParseFloatError; use std::path::PathBuf; use std::time::Duration; @@ -25,6 +26,32 @@ pub enum Commands { Wizard, } +pub fn validate_args(cli: &Cli) -> color_eyre::Result<()> { + let Commands::Run { + work_duration, + break_duration, + .. + } = cli.command + else { + return Ok(()); + }; + if work_duration <= Duration::from_secs(1) { + Err(eyre::eyre!( + "Work duration must be at least 1 second, it is: {:?}", + work_duration + )) + .suppress_backtrace(true) + } else if break_duration <= Duration::from_secs(1) { + Err(eyre::eyre!( + "Break must be at least 1 second, it is: {:?}", + break_duration + )) + .suppress_backtrace(true) + } else { + Ok(()) + } +} + /// Disables specified input devices during breaks. The period between breaks, /// length of the breaks and time before getting a warning can all be specified. /// @@ -77,6 +104,8 @@ pub(crate) fn parse_colon_duration(arg: &str) -> Result { }; let mut seconds = seconds.parse().map_err(|e| second_err(e, arg))?; let Some((hours, minutes)) = rest.rsplit_once(':') else { + let minutes: f32 = rest.parse().map_err(|e| minute_err(e, arg))?; + seconds += 60.0 * minutes; return Ok(seconds); }; seconds += 60.0 * minutes.parse::().map_err(|e| minute_err(e, minutes))?; @@ -106,3 +135,14 @@ pub(crate) fn parse_duration(arg: &str) -> Result { }; Ok(std::time::Duration::from_secs_f32(seconds)) } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_colon_duration() { + assert_eq!(parse_colon_duration("10:00").unwrap(), 60. * 10.); + assert_eq!(parse_colon_duration("07:00").unwrap(), 60. * 7.); + } +} diff --git a/src/main.rs b/src/main.rs index e2ddc37..46a9a2f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ #![feature(io_error_more)] use clap::Parser; +use cli::validate_args; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; @@ -21,6 +22,7 @@ fn main() -> color_eyre::Result<()> { .install() .expect("Only called once"); let args = cli::Cli::parse(); + validate_args(&args)?; // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { diff --git a/src/run.rs b/src/run.rs index 4f4dbff..5d36eb1 100644 --- a/src/run.rs +++ b/src/run.rs @@ -4,9 +4,9 @@ use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; use crate::check_inputs::InputResult; +use crate::notification::notify_all_users; use crate::{check_inputs, watch}; use crate::{check_inputs::inactivity_watcher, config}; -use crate::notification::notify_all_users; use std::{ sync::{ atomic::{AtomicBool, Ordering}, @@ -22,7 +22,6 @@ pub(crate) fn run( break_duration: Duration, grace_duration: Duration, ) -> Result<()> { - let (online_devices, new) = watch::devices(); let to_block = From 4d5c7f462d0c43d1a3c3973f807d6973b8a5b135 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 12 Apr 2024 17:34:07 +0200 Subject: [PATCH 43/76] removes arg validation, didnt make sense --- src/cli.rs | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 429c643..4f73646 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -26,32 +26,6 @@ pub enum Commands { Wizard, } -pub fn validate_args(cli: &Cli) -> color_eyre::Result<()> { - let Commands::Run { - work_duration, - break_duration, - .. - } = cli.command - else { - return Ok(()); - }; - if work_duration <= Duration::from_secs(1) { - Err(eyre::eyre!( - "Work duration must be at least 1 second, it is: {:?}", - work_duration - )) - .suppress_backtrace(true) - } else if break_duration <= Duration::from_secs(1) { - Err(eyre::eyre!( - "Break must be at least 1 second, it is: {:?}", - break_duration - )) - .suppress_backtrace(true) - } else { - Ok(()) - } -} - /// Disables specified input devices during breaks. The period between breaks, /// length of the breaks and time before getting a warning can all be specified. /// From 1f4fc75d98604c07cdf84143a68ae22db621b866 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 12 Apr 2024 17:34:12 +0200 Subject: [PATCH 44/76] removes arg validation, didnt make sense --- src/cli.rs | 1 - src/main.rs | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 4f73646..02c4d6a 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,5 +1,4 @@ use clap::{Parser, Subcommand}; -use color_eyre::{eyre, Section}; use std::num::ParseFloatError; use std::path::PathBuf; use std::time::Duration; diff --git a/src/main.rs b/src/main.rs index 46a9a2f..e2ddc37 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,6 @@ #![feature(io_error_more)] use clap::Parser; -use cli::validate_args; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; @@ -22,7 +21,6 @@ fn main() -> color_eyre::Result<()> { .install() .expect("Only called once"); let args = cli::Cli::parse(); - validate_args(&args)?; // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { From 0a573831a21cf53562f899012cc438d5053e64cf Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 00:15:06 +0200 Subject: [PATCH 45/76] adds basic readme --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..2b00ad3 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +Break enforcer is a pomodoro like tool that blocks input after a set time of activity. + +### features +- extends work session when user is inactive for longer then a break +- set work session and break duration +- configurable inputs to watch and block +- notification when activity is detected or break is close +- single binary, zero dependencies works on any Linux system +- integrated installer to set it up to run on boot + +### Download +https://github.com/evavh/break-enforcer-s/releases/latest/0.2.0/break-enforcer-s_x86_64 + +or simply: +``` +curl -L https://github.com/evavh/break-enforcer-s/releases/download/0.2.0/break-enforcer-s_x86_64 --output break_enforcer +``` + +(as with any linux program you will still need to make it executable using `chmod ++x break_enforcer`) From cbabc4e98c116c97b1a401dbb45d288e776f7035 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 01:30:11 +0200 Subject: [PATCH 46/76] mouse stays blocked after program exits --- src/check_inputs.rs | 2 +- src/config.rs | 2 +- src/main.rs | 2 +- src/run.rs | 4 +- src/{watch.rs => watch_and_block.rs} | 128 +++++++++++++++++++++------ src/wizard.rs | 4 +- 6 files changed, 109 insertions(+), 33 deletions(-) rename src/{watch.rs => watch_and_block.rs} (74%) diff --git a/src/check_inputs.rs b/src/check_inputs.rs index b2b72b5..2947199 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -9,7 +9,7 @@ use std::{ thread, }; -use crate::{config::InputFilter, watch::NewInput}; +use crate::{config::InputFilter, watch_and_block::NewInput}; pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { let mut packet = [0u8; 24]; diff --git a/src/config.rs b/src/config.rs index 14a6381..1fc97a9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -6,7 +6,7 @@ use std::fs; use std::io::ErrorKind; use std::path::{Path, PathBuf}; -use crate::watch::InputId; +use crate::watch_and_block::InputId; #[derive(Debug, Clone, Serialize, Deserialize, Hash, PartialEq, Eq)] pub struct InputFilter { diff --git a/src/main.rs b/src/main.rs index 14ab92b..ec4dad0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ mod config; mod install; mod notification; mod run; -mod watch; +mod watch_and_block; mod wizard; fn main() -> color_eyre::Result<()> { diff --git a/src/run.rs b/src/run.rs index 83743f0..0a232b5 100644 --- a/src/run.rs +++ b/src/run.rs @@ -6,7 +6,7 @@ use color_eyre::{Result, Section}; use crate::check_inputs::InputResult; use crate::cli::RunArgs; use crate::notification::notify_all_users; -use crate::{check_inputs, watch}; +use crate::{check_inputs, watch_and_block}; use crate::{check_inputs::inactivity_watcher, config}; use std::{ sync::{ @@ -25,7 +25,7 @@ pub(crate) fn run( }: RunArgs, config_path: Option, ) -> Result<()> { - let (online_devices, new) = watch::devices(); + let (online_devices, new) = watch_and_block::devices(); let to_block = config::read(config_path).wrap_err("Could not read devices to block from config")?; diff --git a/src/watch.rs b/src/watch_and_block.rs similarity index 74% rename from src/watch.rs rename to src/watch_and_block.rs index 51b2e3e..84ae330 100644 --- a/src/watch.rs +++ b/src/watch_and_block.rs @@ -13,6 +13,7 @@ use base64::{engine::general_purpose, Engine as _}; use color_eyre::eyre::Context; use color_eyre::{Result, Section}; use inotify::{EventMask, Inotify, WatchMask}; +use itertools::Itertools; use serde::{Deserialize, Serialize}; use crate::check_inputs::device_removed; @@ -86,6 +87,7 @@ pub struct OnlineDevices { impl OnlineDevices { lock_and_call_inner!(pub list_inputs,; Result>); lock_and_call_inner!(insert, raw_dev: evdev::Device, event_path: PathBuf; bool); + lock_and_call_inner!(remove, event_path: PathBuf); lock_and_call_inner!(lock_all_matching, id: &InputFilter; Result<()>); lock_and_call_inner!(unlock_all_matching, id: &InputFilter; Result<()>); @@ -113,6 +115,7 @@ enum Event { UnLockRequested(InputFilter, mpsc::Sender>), DevError(color_eyre::Result<()>), DevAdded(PathBuf), + DevRemoved(PathBuf), } /// use `unlock` to re-enable the disabled input device @@ -189,6 +192,39 @@ impl Inner { } } + fn remove(&mut self, event_path: PathBuf) { + dbg!(self + .id_to_devices + .values() + .flat_map(|k| k.keys()) + .collect_vec()); + if let Some(empty_after_remove) = self + .id_to_devices + .iter() + .find(|(_, map)| { + map.len() == 1 && *map.keys().next().expect("len is one") == event_path + }) + .map(|(id, _)| id) + .copied() + { + let removed = self + .id_to_devices + .remove(&empty_after_remove) + .expect("just found") + .values() + .map(Device::name) + .collect_vec(); + dbg!(removed); + return; + } + + for (_, inputs) in self.id_to_devices.iter_mut() { + if let Some(device) = inputs.remove(&event_path) { + dbg!(device.name()); + } + } + } + fn list_inputs(&mut self) -> Result> { self.check_status()?; @@ -236,7 +272,7 @@ impl Inner { .values_mut() .filter(|device| filter.names.contains(&device.name())) { - match device.raw_dev.grab() { + match dbg!(device.raw_dev.grab()) { Ok(()) => (), Err(e) if e.kind() == ErrorKind::ResourceBusy => (), Err(e) if device_removed(&e) => (), @@ -264,11 +300,6 @@ pub struct NewInput { pub path: PathBuf, } -/* TODO: use ionotify instead? (watching /dev/input) - * would need async to also wait for rx_recv - * or another thread sending `Order::scan` - * look at cpu usage first though - * <15-03-24, dvdsk> */ pub fn devices() -> (OnlineDevices, Receiver) { let (order_tx, order_rx) = mpsc::channel(); let mut online = OnlineDevices { @@ -285,18 +316,34 @@ pub fn devices() -> (OnlineDevices, Receiver) { send_new_devices(&order_tx); }); + let mut locked = None; let mut online2 = online.clone(); thread::spawn(move || loop { match order_rx.recv_timeout(Duration::from_secs(5)) { Ok(Event::LockRequested(filter, answer)) => { let res = online2.lock_all_matching(&filter); + locked = Some(filter); answer.send(res).expect("lock fn does not panic"); } Ok(Event::UnLockRequested(filter, answer)) => { + locked = None; let res = online2.unlock_all_matching(&filter); answer.send(res).expect("unlock fn does not panic"); } - Ok(Event::DevAdded(event_path)) => add_device(&mut online2, &new_dev_tx, event_path), + Ok(Event::DevAdded(event_path)) => { + dbg!(&event_path); + add_device(&mut online2, &new_dev_tx, event_path); + if let Some(ref filter) = locked { + if let Err(e) = online2.lock_all_matching(filter) { + dbg!("{e:?}"); + online2.inner.lock().unwrap().status = Err(e); + } + } + } + Ok(Event::DevRemoved(event_path)) => { + dbg!(&event_path); + online2.remove(event_path); + } Ok(Event::DevError(error)) => { // next time online devices is queried it will report this error online2.inner.lock().unwrap().status = error; @@ -316,14 +363,25 @@ fn send_initial_devices(online: &mut OnlineDevices, new_dev_tx: &Sender devices. Therefore we + // do not add them. if fname.as_bytes().starts_with(b"event") { add_device(online, new_dev_tx, path); } } } -fn add_device(online: &mut OnlineDevices, new_dev_tx: &Sender, event_path: PathBuf) { - let device = evdev::Device::open(&event_path).unwrap(); +type DeviceName = String; +fn add_device( + online: &mut OnlineDevices, + new_dev_tx: &Sender, + event_path: PathBuf, +) -> Option { + let Ok(device) = evdev::Device::open(&event_path) else { + eprintln!("Could not open device at: {}", event_path.display()); + return None; + }; let id = InputId::from(device.input_id()); let name = device_name(&device); let new = online.insert(device, event_path.clone()); @@ -331,10 +389,14 @@ fn add_device(online: &mut OnlineDevices, new_dev_tx: &Sender, event_p new_dev_tx .send(NewInput { id, - name, + name: name.clone(), path: event_path, }) .expect("watcher should never end and drop rx"); + Some(name) + } else { + dbg!("device is already in map"); + None } } @@ -342,24 +404,38 @@ fn send_new_devices(tx: &Sender) { let mut inotify = Inotify::init().unwrap(); let mut buffer = [0; 1024]; - inotify.watches().add(DEV_DIR, WatchMask::CREATE).unwrap(); + inotify + .watches() + .add(DEV_DIR, WatchMask::CREATE | WatchMask::DELETE) + .unwrap(); + + loop { + let events = match inotify.read_events_blocking(&mut buffer) { + Err(err) => { + let res = Err(err).wrap_err("inotify could not read events"); + tx.send(Event::DevError(res)).unwrap(); + return; + } + Ok(events) => events, + }; - let events = match inotify.read_events_blocking(&mut buffer) { - Err(err) => { - let res = Err(err).wrap_err("inotify could not read events"); - tx.send(Event::DevError(res)).unwrap(); - return; - } - Ok(events) => events, - }; + for event in events { + let Some(file_name) = event.name else { + continue; + }; + // note, there are legacy events (mouse/js) these are + // duplicates of the event devices. Therefore we + // do not respond to them. + if !file_name.as_bytes().starts_with(b"event") { + continue; + } - for event in events { - let Some(file_name) = event.name else { - continue; - }; - let path = PathBuf::from_str(DEV_DIR).unwrap().join(file_name); - if event.mask.contains(EventMask::CREATE) { - tx.send(Event::DevAdded(path.clone())).unwrap(); + let path = PathBuf::from_str(DEV_DIR).unwrap().join(file_name); + if event.mask.contains(EventMask::CREATE) { + tx.send(Event::DevAdded(path.clone())).unwrap(); + } else if event.mask.contains(EventMask::DELETE) { + tx.send(Event::DevRemoved(path.clone())).unwrap(); + } } } } diff --git a/src/wizard.rs b/src/wizard.rs index c1f9fdb..d070c5d 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -9,11 +9,11 @@ use dialoguer::{Confirm, MultiSelect}; use itertools::Itertools; use crate::config::{self, InputFilter}; -use crate::watch::{self, BlockableInput}; +use crate::watch_and_block::{self, BlockableInput}; // todo deal with devices with multiple names pub fn run(custom_config_path: Option) -> Result<()> { - let (devices, _) = watch::devices(); + let (devices, _) = watch_and_block::devices(); let config: HashMap<_, _> = config::read(custom_config_path.clone()) .wrap_err("Could not read custom config")? From 40bdad708a2ef4c3c625e8caf61b7287736375e4 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 13:43:54 +0200 Subject: [PATCH 47/76] fixes inotify returning early, fixes not all filters scanned when dev added --- Cargo.lock | 42 ++++++++++++++++++++- Cargo.toml | 2 + src/cli.rs | 3 ++ src/main.rs | 16 ++++++++ src/watch_and_block.rs | 83 +++++++++++++++++++++++++++--------------- 5 files changed, 115 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 54ba7ca..924a199 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -141,6 +141,8 @@ dependencies = [ "service-install", "sudo", "thiserror", + "tracing", + "tracing-subscriber", ] [[package]] @@ -515,6 +517,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -536,6 +548,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "owo-colors" version = "3.5.0" @@ -688,6 +706,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + [[package]] name = "socket2" version = "0.5.6" @@ -790,9 +814,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.35" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef89ece63debf11bc32d1ed8d078ac870cbeb44da02afb02a9ff135ae7ca0582" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "num-conv", @@ -863,15 +887,29 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ + "nu-ansi-term", "sharded-slab", + "smallvec", "thread_local", "tracing-core", + "tracing-log", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 399be0d..30d981a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,3 +19,5 @@ sudo = "0.6.0" thiserror = "1.0.58" service-install = { version = "0.4" } +tracing = "0.1.40" +tracing-subscriber = "0.3.18" diff --git a/src/cli.rs b/src/cli.rs index e655a8e..8f329c2 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -52,6 +52,9 @@ pub struct Cli { /// Path to create/read/update list of devices to/from #[arg(short, long)] pub config_path: Option, + /// Print many traces and logs + #[arg(short, long)] + pub verbose: bool, } #[derive(Debug, thiserror::Error)] diff --git a/src/main.rs b/src/main.rs index ec4dad0..04d5275 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,10 +2,12 @@ #![feature(iter_intersperse)] #![feature(slice_flatten)] #![feature(io_error_more)] +#![feature(iter_collect_into)] use clap::Parser; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; +use tracing_subscriber::fmt::time::uptime; mod check_inputs; mod cli; @@ -21,8 +23,22 @@ fn main() -> color_eyre::Result<()> { .display_location_section(false) .install() .expect("Only called once"); + let cli = cli::Cli::parse(); + let trace_level = if cli.verbose { + tracing::Level::TRACE + } else { + tracing::Level::WARN + }; + + tracing_subscriber::fmt() + .with_max_level(trace_level) + .with_file(false) + .with_target(false) + .with_timer(uptime()) + .init(); + // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { return Err(eyre!(concat!( diff --git a/src/watch_and_block.rs b/src/watch_and_block.rs index 84ae330..65b5717 100644 --- a/src/watch_and_block.rs +++ b/src/watch_and_block.rs @@ -1,5 +1,5 @@ use core::fmt; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use std::io::ErrorKind; use std::os::unix::ffi::OsStrExt; use std::path::PathBuf; @@ -13,13 +13,14 @@ use base64::{engine::general_purpose, Engine as _}; use color_eyre::eyre::Context; use color_eyre::{Result, Section}; use inotify::{EventMask, Inotify, WatchMask}; -use itertools::Itertools; use serde::{Deserialize, Serialize}; +use tracing::{debug, error, warn}; use crate::check_inputs::device_removed; use crate::config::InputFilter; struct Device { + locked: bool, raw_dev: evdev::Device, } @@ -181,7 +182,10 @@ impl Inner { /// if it was already present ignore fn insert(&mut self, raw_dev: evdev::Device, event_path: PathBuf) -> bool { let id = raw_dev.input_id().into(); - let device = Device { raw_dev }; + let device = Device { + raw_dev, + locked: false, + }; if let Some(in_map) = self.id_to_devices.get_mut(&id) { let existing = in_map.insert(event_path, device); existing.is_none() // is_new @@ -193,11 +197,7 @@ impl Inner { } fn remove(&mut self, event_path: PathBuf) { - dbg!(self - .id_to_devices - .values() - .flat_map(|k| k.keys()) - .collect_vec()); + let mut removed = Vec::new(); if let Some(empty_after_remove) = self .id_to_devices .iter() @@ -207,22 +207,28 @@ impl Inner { .map(|(id, _)| id) .copied() { - let removed = self - .id_to_devices + self.id_to_devices .remove(&empty_after_remove) .expect("just found") .values() .map(Device::name) - .collect_vec(); - dbg!(removed); - return; + .collect_into(&mut removed); } for (_, inputs) in self.id_to_devices.iter_mut() { if let Some(device) = inputs.remove(&event_path) { - dbg!(device.name()); + removed.push(device.name()); } } + + if removed.is_empty() { + warn!( + "Device disconnected but it wasnt registered, event_path: {}", + event_path.display() + ); + } else { + debug!("Device(s) disconnected: {removed:?}"); + } } fn list_inputs(&mut self) -> Result> { @@ -247,11 +253,20 @@ impl Inner { for device in to_lock .values_mut() + .filter(|device| device.locked) .filter(|device| filter.names.contains(&device.name())) { match device.raw_dev.ungrab() { - Ok(()) => (), - Err(e) if device_removed(&e) => (), + Ok(()) => { + debug!("Unlocked: {}", device.name()); + device.locked = false; + } + Err(e) if device_removed(&e) => { + warn!( + "Could not unlock, device probably removed: {}", + device.name() + ) + } err @ Err(_) => { return err .wrap_err("Could not ungrab (release exclusive access) to device") @@ -270,12 +285,20 @@ impl Inner { for device in to_lock .values_mut() + .filter(|device| !device.locked) .filter(|device| filter.names.contains(&device.name())) { - match dbg!(device.raw_dev.grab()) { - Ok(()) => (), - Err(e) if e.kind() == ErrorKind::ResourceBusy => (), - Err(e) if device_removed(&e) => (), + match device.raw_dev.grab() { + Ok(()) => { + debug!("Locked: {}", device.name()); + device.locked = true; + } + Err(e) if e.kind() == ErrorKind::ResourceBusy => { + warn!("Could not lock, device busy: {}", device.name()) + } + Err(e) if device_removed(&e) => { + warn!("Could not lock, device probably removed: {}", device.name()) + } err @ Err(_) => { return err .wrap_err("Could not grab (acquire exclusive access) to device") @@ -316,32 +339,30 @@ pub fn devices() -> (OnlineDevices, Receiver) { send_new_devices(&order_tx); }); - let mut locked = None; + let mut locked = HashSet::new(); let mut online2 = online.clone(); thread::spawn(move || loop { match order_rx.recv_timeout(Duration::from_secs(5)) { Ok(Event::LockRequested(filter, answer)) => { let res = online2.lock_all_matching(&filter); - locked = Some(filter); + locked.insert(filter); answer.send(res).expect("lock fn does not panic"); } Ok(Event::UnLockRequested(filter, answer)) => { - locked = None; + locked.remove(&filter); let res = online2.unlock_all_matching(&filter); answer.send(res).expect("unlock fn does not panic"); } Ok(Event::DevAdded(event_path)) => { - dbg!(&event_path); add_device(&mut online2, &new_dev_tx, event_path); - if let Some(ref filter) = locked { + for filter in &locked { if let Err(e) = online2.lock_all_matching(filter) { - dbg!("{e:?}"); + error!("Failed to lock devices matching filter, error: {e:?}"); online2.inner.lock().unwrap().status = Err(e); } } } Ok(Event::DevRemoved(event_path)) => { - dbg!(&event_path); online2.remove(event_path); } Ok(Event::DevError(error)) => { @@ -379,7 +400,10 @@ fn add_device( event_path: PathBuf, ) -> Option { let Ok(device) = evdev::Device::open(&event_path) else { - eprintln!("Could not open device at: {}", event_path.display()); + warn!( + "Could not open device at: {}, ignoring the device", + event_path.display() + ); return None; }; let id = InputId::from(device.input_id()); @@ -393,9 +417,10 @@ fn add_device( path: event_path, }) .expect("watcher should never end and drop rx"); + debug!("added device: {}", name); Some(name) } else { - dbg!("device is already in map"); + debug!("device: {} is already tracked", name); None } } From 9cd21f0e103a881f634b7a23affe647735a30b63 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 13:46:36 +0200 Subject: [PATCH 48/76] clippy pedantic --- src/cli.rs | 1 + src/watch_and_block.rs | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 8f329c2..812441c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -3,6 +3,7 @@ use std::num::ParseFloatError; use std::path::PathBuf; use std::time::Duration; +#[allow(clippy::struct_field_names)] #[derive(Debug, Args)] pub struct RunArgs { /// Period after which input will be disabled. diff --git a/src/watch_and_block.rs b/src/watch_and_block.rs index 65b5717..2964c1a 100644 --- a/src/watch_and_block.rs +++ b/src/watch_and_block.rs @@ -2,6 +2,7 @@ use core::fmt; use std::collections::{HashMap, HashSet}; use std::io::ErrorKind; use std::os::unix::ffi::OsStrExt; +use std::path::Path; use std::path::PathBuf; use std::str::FromStr; use std::sync::mpsc::{Receiver, RecvTimeoutError, Sender}; @@ -88,7 +89,7 @@ pub struct OnlineDevices { impl OnlineDevices { lock_and_call_inner!(pub list_inputs,; Result>); lock_and_call_inner!(insert, raw_dev: evdev::Device, event_path: PathBuf; bool); - lock_and_call_inner!(remove, event_path: PathBuf); + lock_and_call_inner!(remove, event_path: &Path); lock_and_call_inner!(lock_all_matching, id: &InputFilter; Result<()>); lock_and_call_inner!(unlock_all_matching, id: &InputFilter; Result<()>); @@ -196,7 +197,7 @@ impl Inner { } } - fn remove(&mut self, event_path: PathBuf) { + fn remove(&mut self, event_path: &Path) { let mut removed = Vec::new(); if let Some(empty_after_remove) = self .id_to_devices @@ -215,8 +216,8 @@ impl Inner { .collect_into(&mut removed); } - for (_, inputs) in self.id_to_devices.iter_mut() { - if let Some(device) = inputs.remove(&event_path) { + for inputs in self.id_to_devices.values_mut() { + if let Some(device) = inputs.remove(event_path) { removed.push(device.name()); } } @@ -265,7 +266,7 @@ impl Inner { warn!( "Could not unlock, device probably removed: {}", device.name() - ) + ); } err @ Err(_) => { return err @@ -294,10 +295,10 @@ impl Inner { device.locked = true; } Err(e) if e.kind() == ErrorKind::ResourceBusy => { - warn!("Could not lock, device busy: {}", device.name()) + warn!("Could not lock, device busy: {}", device.name()); } Err(e) if device_removed(&e) => { - warn!("Could not lock, device probably removed: {}", device.name()) + warn!("Could not lock, device probably removed: {}", device.name()); } err @ Err(_) => { return err @@ -363,7 +364,7 @@ pub fn devices() -> (OnlineDevices, Receiver) { } } Ok(Event::DevRemoved(event_path)) => { - online2.remove(event_path); + online2.remove(&event_path); } Ok(Event::DevError(error)) => { // next time online devices is queried it will report this error From 3a686751d7a2e10da8d41fd2cd81914159fe6f2a Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 13:48:12 +0200 Subject: [PATCH 49/76] version increment --- CHANGELOG.md | 6 ++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- break-enforcer.service | 10 ---------- 4 files changed, 8 insertions(+), 12 deletions(-) delete mode 100644 break-enforcer.service diff --git a/CHANGELOG.md b/CHANGELOG.md index 135e457..af447f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.2.1] - 2024-04-13 + +### Fixed +- Removed and then readded devices are locked when appropriate + ## [0.2.0] - 2024-04-09 ### Added diff --git a/Cargo.lock b/Cargo.lock index 924a199..d947216 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,7 +127,7 @@ dependencies = [ [[package]] name = "break-enforcer-s" -version = "0.2.0" +version = "0.2.1" dependencies = [ "base64 0.22.0", "clap", diff --git a/Cargo.toml b/Cargo.toml index 30d981a..ce9589a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer-s" -version = "0.2.0" +version = "0.2.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/break-enforcer.service b/break-enforcer.service deleted file mode 100644 index cbea189..0000000 --- a/break-enforcer.service +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Software break enforcer prototype -After=multi-user.target - -[Service] -ExecStart=/usr/local/bin/break-enforcer-s -ExecTop=/bin/kill -s SIGKILL $MAINPID - -[Install] -WantedBy=multi-user.target From 60bbfd2184c1385e3b894933d4d42044629b3005 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 17:26:40 +0200 Subject: [PATCH 50/76] fixes crash if grace>workdur --- CHANGELOG.md | 4 ++++ Cargo.lock | 4 ++-- Cargo.toml | 4 ++-- src/run.rs | 5 +++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af447f7..98ab5b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Fixes +- No longer crashing if grace/warn for lock duration smaller then work duration ## [0.2.1] - 2024-04-13 diff --git a/Cargo.lock b/Cargo.lock index d947216..40798ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,8 +126,8 @@ dependencies = [ ] [[package]] -name = "break-enforcer-s" -version = "0.2.1" +name = "break-enforcer" +version = "0.2.2" dependencies = [ "base64 0.22.0", "clap", diff --git a/Cargo.toml b/Cargo.toml index ce9589a..61d708e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "break-enforcer-s" -version = "0.2.1" +name = "break-enforcer" +version = "0.2.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/run.rs b/src/run.rs index 0a232b5..e39941f 100644 --- a/src/run.rs +++ b/src/run.rs @@ -62,7 +62,7 @@ pub(crate) fn run( block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; notify_all_users(&format!("Starting work timer for {work_duration:?}")); work_start_sender.send(true).unwrap(); - match break_skip_receiver.recv_timeout(work_duration - grace_duration) { + match break_skip_receiver.recv_timeout(work_duration.saturating_sub(grace_duration)) { Ok(_) => { notify_all_users("No input for breaktime"); block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; @@ -73,7 +73,8 @@ pub(crate) fn run( Err(e) => panic!("Unexpected error: {e}"), } - notify_all_users(&format!("Locking in {grace_duration:?}!")); + let alarm_in = grace_duration.min(work_duration); + notify_all_users(&format!("Locking in {alarm_in:?}!")); thread::sleep(grace_duration); let mut locks = Vec::new(); From e910bb60551fdac9923d7f4e9e74173b4ed667c8 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 13 Apr 2024 17:34:48 +0200 Subject: [PATCH 51/76] disallow single number duration without unit postfix --- CHANGELOG.md | 5 +++++ src/cli.rs | 20 ++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98ab5b8..60fa1e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixes - No longer crashing if grace/warn for lock duration smaller then work duration +### Changes +- Durations consisting of a single number without postfix unit or a colon in + front are no longer allowed. These where usually the result of a user + forgetting the unit. This led to way shorter break/work times then intended + ## [0.2.1] - 2024-04-13 ### Fixed diff --git a/src/cli.rs b/src/cli.rs index 812441c..2d68ea5 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -39,10 +39,11 @@ pub enum Commands { /// Durations can be passed in two formats: /// - , for example: 32m /// unit is one of h,m and s -/// - hh:mm:ss, where hh and mm are optional -/// example: 1:30:15 +/// - hh:mm:ss, where hh and mm are optional however you +/// do need at least one `:` +/// * example: 1:30:15 /// one and a halve hour and 15 seconds -/// example: 10:40 +/// * example: 10:40 /// ten minutes and 40 seconds /// #[derive(Parser, Debug)] @@ -66,6 +67,8 @@ pub enum ParseError { Minute(ParseFloatError, String), #[error("Could not parse the hours, input: {1}, error: {0}")] Hour(ParseFloatError, String), + #[error("Durations need a suffix or one `:`")] + NoColonOrUnit(String), } fn second_err(e: ParseFloatError, s: &str) -> ParseError { @@ -81,12 +84,17 @@ fn hour_err(e: ParseFloatError, s: &str) -> ParseError { /// Parses a string in format /// hh:mm:ss, /// mm:ss, -/// ss, +/// :ss, pub(crate) fn parse_colon_duration(arg: &str) -> Result { let Some((rest, seconds)) = arg.rsplit_once(':') else { - return arg.parse().map_err(|e| second_err(e, arg)); + return Err(ParseError::NoColonOrUnit(arg.to_string())); }; + let mut seconds = seconds.parse().map_err(|e| second_err(e, arg))?; + if rest.is_empty() { + return Ok(seconds); + } + let Some((hours, minutes)) = rest.rsplit_once(':') else { let minutes: f32 = rest.parse().map_err(|e| minute_err(e, arg))?; seconds += 60.0 * minutes; @@ -106,7 +114,7 @@ pub(crate) fn parse_colon_duration(arg: &str) -> Result { /// - 30s /// - hh:mm:ss, /// - mm:ss, -/// - ss, +/// - :ss, pub(crate) fn parse_duration(arg: &str) -> Result { let seconds = if let Some(hours) = arg.strip_suffix('h') { 60. * 60. * hours.parse::().map_err(|e| hour_err(e, hours))? From bf0b3f2c5cabd3a936eafc2f248a45a3490c6fae Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 14 Apr 2024 16:51:50 +0200 Subject: [PATCH 52/76] adds integrations (write status to file) --- src/cli.rs | 16 ++- src/install.rs | 11 ++- src/integration.rs | 134 ++++++++++++++++++++++++++ src/integration/file_status.rs | 46 +++++++++ src/{ => integration}/notification.rs | 0 src/main.rs | 2 +- src/run.rs | 26 ++--- 7 files changed, 217 insertions(+), 18 deletions(-) create mode 100644 src/integration.rs create mode 100644 src/integration/file_status.rs rename src/{ => integration}/notification.rs (100%) diff --git a/src/cli.rs b/src/cli.rs index 2d68ea5..61aeefc 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -14,10 +14,20 @@ pub struct RunArgs { /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub break_duration: Duration, - /// Duration ahead of the break to show a notification + /// Optional takes a duration, if set sends a notification ahead of the break. /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] - pub grace_duration: Duration, + pub lock_warning: Option, + /// Enable the status file. It contains a string + /// describing the time till the next break or the + /// time the current break takes. The file is located + /// at `/var/run/break_enforcer` and is called `status.txt` + #[arg(short, long)] + pub status_file: bool, + /// verbose notifications. Sends notifications when: + /// the break begins, a work session begins, we are waiting for input + #[arg(short, long)] + pub notifications: bool, } #[derive(Debug, Subcommand)] @@ -39,7 +49,7 @@ pub enum Commands { /// Durations can be passed in two formats: /// - , for example: 32m /// unit is one of h,m and s -/// - hh:mm:ss, where hh and mm are optional however you +/// - hh:mm:ss, where hh and mm are optional however you /// do need at least one `:` /// * example: 1:30:15 /// one and a halve hour and 15 seconds diff --git a/src/install.rs b/src/install.rs index 7a7758f..59f69d0 100644 --- a/src/install.rs +++ b/src/install.rs @@ -7,7 +7,7 @@ use service_install::{install_system, tui}; use crate::cli::RunArgs; use crate::config; -fn fmt_dur(dur: Duration) -> String { +pub fn fmt_dur(dur: Duration) -> String { let ss = dur.as_secs() % 60; let mm = (dur.as_secs() / 60) % 60; if mm == 0 { @@ -41,8 +41,13 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { args.push(fmt_dur(run_args.work_duration)); args.push("--break-duration".to_string()); args.push(fmt_dur(run_args.break_duration)); - args.push("--grace-duration".to_string()); - args.push(fmt_dur(run_args.grace_duration)); + if let Some(warn_duration) = run_args.lock_warning { + args.push("--lock-warning".to_string()); + args.push(fmt_dur(warn_duration)); + } + if run_args.status_file { + args.push("--status-file".to_string()); + } let steps = install_system!() .current_exe()? diff --git a/src/integration.rs b/src/integration.rs new file mode 100644 index 0000000..6ad3660 --- /dev/null +++ b/src/integration.rs @@ -0,0 +1,134 @@ +use std::sync::mpsc; +use std::thread::{self, JoinHandle}; +use std::time::{Duration, Instant}; + +use color_eyre::Result; + +use crate::install::fmt_dur; + +mod file_status; +use file_status::FileStatus; +mod notification; + +#[derive(Debug, PartialEq, Eq)] +enum State { + Waiting, + Work { next_break: Instant }, + Break { next_work: Instant }, +} + +trait DurationUntil { + fn duration_until(&self) -> Duration; +} + +impl DurationUntil for Instant { + fn duration_until(&self) -> Duration { + self.saturating_duration_since(Instant::now()) + } +} + +pub struct Status { + update: mpsc::Sender, + integrator: Option>>, + lock_warning_notification: Option, +} + +fn integrate( + rx: &mpsc::Receiver, + mut file_status: Option, + state_notifications: bool, +) -> Result<()> { + let mut timeout = Duration::MAX; + let mut state = State::Waiting; + + loop { + let mut state_changed = false; + match rx.recv_timeout(timeout) { + Ok(s) => { + state = s; + state_changed = true; + } + Err(mpsc::RecvTimeoutError::Timeout) => (), + Err(mpsc::RecvTimeoutError::Disconnected) => return Ok(()), + } + + timeout = match state { + State::Waiting => Duration::MAX, + State::Work { .. } | State::Break { .. } => Duration::from_secs(1), + }; + + let msg = match state { + State::Waiting => String::from("-"), + State::Work { next_break } => { + format!("locks in: {}", fmt_dur(next_break.duration_until())) + } + State::Break { next_work } => { + format!("unlocks in: {}", fmt_dur(next_work.duration_until())) + } + }; + + if let Some(file_status) = &mut file_status { + file_status.update(&msg); + } + if state_notifications && state_changed { + notification::notify_all_users(&msg); + } + } +} + +impl Status { + pub fn new( + file_integration: bool, + notifications: bool, + lock_warning_notification: Option, + ) -> Result { + let file_status = if file_integration { + Some(FileStatus::new()?) + } else { + None + }; + + let (tx, rx) = mpsc::channel(); + let integrator = thread::spawn(move || integrate(&rx, file_status, notifications)); + Ok(Self { + update: tx, + integrator: Some(integrator), + lock_warning_notification, + }) + } + + fn send(&mut self, new_state: State) { + let res = self.update.send(new_state); + if res.is_err() { + // Get issues from the integrator thread and crash here on the main + // thread. That way the program will exit. + self.integrator + .take() + .expect("can only be called once") + .join() + .expect("The integrator thread panicked") + .expect("The integrator thread returned an error, it should not"); + } + } + + pub(crate) fn set_waiting(&mut self) { + self.send(State::Waiting); + } + + pub(crate) fn set_working(&mut self, next_break: Instant) { + self.send(State::Work { next_break }); + + if let Some(before_break) = self.lock_warning_notification { + thread::spawn(move || { + let msg = format!("locking in {}", fmt_dur(before_break)); + #[allow(clippy::pedantic)] + thread::sleep_until(next_break - before_break); + notification::notify_all_users(&msg); + }); + } + } + + pub(crate) fn set_on_break(&mut self, next_work: Instant) { + self.send(State::Break { next_work }); + } +} diff --git a/src/integration/file_status.rs b/src/integration/file_status.rs new file mode 100644 index 0000000..63a5d8c --- /dev/null +++ b/src/integration/file_status.rs @@ -0,0 +1,46 @@ +use std::fs::{self, OpenOptions}; +use std::io::{ErrorKind, Seek, Write}; +use std::iter; + +use color_eyre::eyre::Context; +use color_eyre::Result; + +pub struct FileStatus { + max_len: usize, + file: fs::File, +} + +impl FileStatus { + pub fn new() -> Result { + // use std::os::unix::fs::OpenOptionsExt; + match std::fs::create_dir("/var/run/break_enforcer") { + Ok(()) => (), + Err(e) if e.kind() == ErrorKind::AlreadyExists => (), + err @ Err(_) => err.wrap_err("Could not create directory for integration file")?, + } + // let owner_write_rest_read = 0o422; + let file = OpenOptions::new() + .create(true) + .write(true) + .truncate(true) + // .mode(owner_write_rest_read) + .open("/var/run/break_enforcer/status.txt") + .wrap_err("Could not create integration file")?; + + Ok(Self { file, max_len: 0 }) + } + + pub fn update(&mut self, msg: &str) { + self.max_len = self.max_len.max(msg.chars().count()); + + // can never shrink file as the reader might read the just truncated + // file leading to a corrupt message or flickering + let padded: String = msg + .chars() + .chain(iter::repeat(' ')) + .take(self.max_len) + .collect(); + self.file.seek(std::io::SeekFrom::Start(0)).unwrap(); + self.file.write_all(padded.as_bytes()).unwrap(); + } +} diff --git a/src/notification.rs b/src/integration/notification.rs similarity index 100% rename from src/notification.rs rename to src/integration/notification.rs diff --git a/src/main.rs b/src/main.rs index 04d5275..ccd5cb1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,7 +13,7 @@ mod check_inputs; mod cli; mod config; mod install; -mod notification; +mod integration; mod run; mod watch_and_block; mod wizard; diff --git a/src/run.rs b/src/run.rs index e39941f..c85e401 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1,11 +1,12 @@ use std::path::PathBuf; +use std::time::Instant; use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; use crate::check_inputs::InputResult; use crate::cli::RunArgs; -use crate::notification::notify_all_users; +use crate::integration::Status; use crate::{check_inputs, watch_and_block}; use crate::{check_inputs::inactivity_watcher, config}; use std::{ @@ -21,7 +22,9 @@ pub(crate) fn run( RunArgs { work_duration, break_duration, - grace_duration, + lock_warning, + status_file, + notifications, }: RunArgs, config_path: Option, ) -> Result<()> { @@ -57,14 +60,19 @@ pub(crate) fn run( }); } + let mut status = Status::new(status_file, notifications, lock_warning) + .wrap_err("Could not setup status reporting")?; + loop { - notify_all_users("Waiting for input to start work timer..."); + status.set_waiting(); + block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - notify_all_users(&format!("Starting work timer for {work_duration:?}")); work_start_sender.send(true).unwrap(); - match break_skip_receiver.recv_timeout(work_duration.saturating_sub(grace_duration)) { + status.set_working(Instant::now() + work_duration); + + match break_skip_receiver.recv_timeout(work_duration) { Ok(_) => { - notify_all_users("No input for breaktime"); + status.set_waiting(); block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; break_skip_is_sent.store(false, Ordering::Release); continue; @@ -73,10 +81,6 @@ pub(crate) fn run( Err(e) => panic!("Unexpected error: {e}"), } - let alarm_in = grace_duration.min(work_duration); - notify_all_users(&format!("Locking in {alarm_in:?}!")); - thread::sleep(grace_duration); - let mut locks = Vec::new(); for device_id in to_block.iter().cloned() { @@ -87,7 +91,7 @@ pub(crate) fn run( ); } - notify_all_users(&format!("Starting break timer for {break_duration:?}")); + status.set_on_break(Instant::now() + break_duration); thread::sleep(break_duration); for lock in locks { From 822e74f606abca3e20458f9d8f045d875f43da28 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 14 Apr 2024 16:55:37 +0200 Subject: [PATCH 53/76] bring service name in line with convension --- src/install.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/install.rs b/src/install.rs index 59f69d0..40d5cf9 100644 --- a/src/install.rs +++ b/src/install.rs @@ -49,10 +49,11 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { args.push("--status-file".to_string()); } + let name = env!("CARGO_CRATE_NAME").replace('_', "-"); let steps = install_system!() .current_exe()? .on_boot() - .name(env!("CARGO_CRATE_NAME")) + .name(name) .description("Disables input during breaks") .args(args) .overwrite_existing(true) From 0e534c5f5230d841e5ae5bd21d832aee32df5351 Mon Sep 17 00:00:00 2001 From: David Kleingeld Date: Sun, 14 Apr 2024 18:29:19 +0200 Subject: [PATCH 54/76] fix CI --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0f1294e..e281bfc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,7 +48,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }} - path: target/${{ matrix.target }}/release/break-enforcer-s + path: target/${{ matrix.target }}/release/break-enforcer release: runs-on: ubuntu-latest @@ -71,7 +71,7 @@ jobs: - name: rename bins run: | suffix=`echo ${{ matrix.target }} | cut -d "-" -f 1` - mv ${{ matrix.target }}/break-enforcer-s break-enforcer-s_$suffix + mv ${{ matrix.target }}/break-enforcer break-enforcer_$suffix - name: changelog as release body run: cat CHANGELOG.md | awk '/^## /{if (++c == 2) {exit}} c == 1' | tail -n +2 > ${{ github.workspace }}-CHANGELOG.txt - name: Release @@ -81,5 +81,5 @@ jobs: prerelease: false name: Release ${{ env.VERSION }} files: | - break-enforcer-s_* + break-enforcer_* tag_name: ${{ env.VERSION }} From 622881a1d74a68b751003d28907798aefbbcad2a Mon Sep 17 00:00:00 2001 From: dvdsk Date: Mon, 15 Apr 2024 15:02:16 +0200 Subject: [PATCH 55/76] add idle time before break accounting + fix changelog --- CHANGELOG.md | 11 +++++ Cargo.lock | 2 +- Cargo.toml | 2 +- src/check_inputs.rs | 104 +++++++++++++++++++++++++++++++++----------- src/integration.rs | 17 ++++++-- src/run.rs | 80 +++++++++++++--------------------- 6 files changed, 134 insertions(+), 82 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60fa1e7..a4e1788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changes +- Time idle before a break is subtracted from the break time + +## [0.2.2] - 2024-04-15 + +### Added +- Status file, use it to get the current status of `break_enforcer`. Useful in + a bar of a window manager or when writing a widget. + ### Fixes - No longer crashing if grace/warn for lock duration smaller then work duration @@ -14,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Durations consisting of a single number without postfix unit or a colon in front are no longer allowed. These where usually the result of a user forgetting the unit. This led to way shorter break/work times then intended +- Grace duration is now `lock_warning` and is optional (omitting it will prevent + a notification being send when the break/lock is close. ## [0.2.1] - 2024-04-13 diff --git a/Cargo.lock b/Cargo.lock index 40798ee..9386d46 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,7 +127,7 @@ dependencies = [ [[package]] name = "break-enforcer" -version = "0.2.2" +version = "0.2.3" dependencies = [ "base64 0.22.0", "clap", diff --git a/Cargo.toml b/Cargo.toml index 61d708e..9ac42fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer" -version = "0.2.2" +version = "0.2.3" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/check_inputs.rs b/src/check_inputs.rs index 2947199..dbe908a 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -2,45 +2,92 @@ use std::{ fs::{self, File}, io::{self, Read}, sync::{ - atomic::{AtomicBool, Ordering}, - mpsc::{channel, Receiver, RecvTimeoutError, Sender}, - Arc, + mpsc::{self, channel, Receiver, RecvTimeoutError, Sender, TryRecvError}, + Arc, Mutex, }, thread, + time::{Duration, Instant}, }; +use color_eyre::eyre::Context; + use crate::{config::InputFilter, watch_and_block::NewInput}; -pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { - let mut packet = [0u8; 24]; - file.read_exact(&mut packet) +pub struct InactivityTracker { + idle_since: Arc>, + reset_notify: mpsc::Receiver>, +} + +pub enum TrackResult { + ShouldReset, + ShouldBreak { user_idle: Duration }, + Error(color_eyre::Report), +} + +impl InactivityTracker { + pub fn new(input_receiver: Receiver, break_duration: Duration) -> Self { + let idle_since = Arc::new(Mutex::new(Instant::now())); + let (tx, rx) = mpsc::channel(); + { + let idle_since = idle_since.clone(); + thread::spawn(move || watch_activity(&input_receiver, break_duration, idle_since, tx)); + } + + Self { + idle_since, + reset_notify: rx, + } + } + pub fn reset_or_timeout(&mut self, work_duration: Duration) -> TrackResult { + // Empty the reset_notify. At this point in the program we just left a + // period without input (waiting or break). Therefore there has been no user + // activity until here. Any reset notification received after emptying + // the channel must have been send after the period without input and + // therefore at least a break duration must have elapsed. + loop { + match self.reset_notify.try_recv() { + Ok(Err(e)) => return TrackResult::Error(e), + Ok(Ok(())) => (), + Err(TryRecvError::Empty) => break, + Err(TryRecvError::Disconnected) => unreachable!(), + } + } + + match self.reset_notify.recv_timeout(work_duration) { + Ok(Ok(())) => TrackResult::ShouldReset, + Ok(Err(e)) => TrackResult::Error(e), + Err(RecvTimeoutError::Timeout) => TrackResult::ShouldBreak { + user_idle: self.idle_since.lock().unwrap().elapsed(), + }, + Err(RecvTimeoutError::Disconnected) => unreachable!(), + } + } + + pub fn idle_handle(&self) -> Arc> { + self.idle_since.clone() + } } -pub fn inactivity_watcher( - work_start_receiver: &Receiver, - break_skip_sender: &Sender, - break_skip_sent: &Arc, +fn watch_activity( input_receiver: &Receiver, - break_duration: std::time::Duration, + break_duration: Duration, + idle_since: Arc>, + reset_notify: mpsc::Sender>, ) { - work_start_receiver.recv().unwrap(); - loop { match input_receiver.recv_timeout(break_duration) { - Ok(Ok(_)) => (), - Ok(Err(_)) => return, - Err(RecvTimeoutError::Timeout) => { - if !break_skip_sent.load(Ordering::Acquire) { - break_skip_sender.send(true).unwrap(); - break_skip_sent.store(true, Ordering::Release); - } + Ok(Ok(())) => *idle_since.lock().unwrap() = Instant::now(), + Err(RecvTimeoutError::Timeout) => reset_notify.send(Ok(())).unwrap(), + Err(RecvTimeoutError::Disconnected) => unreachable!(), + Ok(err @ Err(_)) => { + let err = err.wrap_err("test"); + reset_notify.send(err).unwrap(); } - Err(e) => panic!("Unexpected error: {e}"), } } } -pub type InputResult = Result>; +pub type InputResult = Result<(), Arc>; pub(crate) fn watcher( just_connected: Receiver, @@ -73,8 +120,8 @@ pub(crate) fn watcher( fn monitor_input( input: NewInput, - tx1: &Sender>>, - tx2: &Sender>>, + tx1: &Sender, + tx2: &Sender, ) { let mut file = match fs::File::open(input.path) { // means the device is disconnected @@ -110,11 +157,16 @@ fn monitor_input( Ok(()) => (), }; - let _ = tx1.send(Ok(true)); - let _ = tx2.send(Ok(true)); + let _ = tx1.send(Ok(())); + let _ = tx2.send(Ok(())); } } +pub fn wait_for_input(file: &mut File) -> std::io::Result<()> { + let mut packet = [0u8; 24]; + file.read_exact(&mut packet) +} + pub fn device_removed(e: &std::io::Error) -> bool { e.raw_os_error() == Some(19i32) && e.to_string().contains("No such device") } diff --git a/src/integration.rs b/src/integration.rs index 6ad3660..a664f36 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -1,4 +1,4 @@ -use std::sync::mpsc; +use std::sync::{mpsc, Arc, Mutex}; use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant}; @@ -37,6 +37,8 @@ fn integrate( rx: &mpsc::Receiver, mut file_status: Option, state_notifications: bool, + idle: Arc>, + break_duration: Duration, ) -> Result<()> { let mut timeout = Duration::MAX; let mut state = State::Waiting; @@ -60,7 +62,11 @@ fn integrate( let msg = match state { State::Waiting => String::from("-"), State::Work { next_break } => { - format!("locks in: {}", fmt_dur(next_break.duration_until())) + let idle = idle.lock().unwrap().elapsed(); + let break_dur = break_duration.saturating_sub(idle); + let break_dur = fmt_dur(break_dur); + let next_break = fmt_dur(next_break.duration_until()); + format!("{} break in: {}", break_dur, next_break) } State::Break { next_work } => { format!("unlocks in: {}", fmt_dur(next_work.duration_until())) @@ -81,6 +87,8 @@ impl Status { file_integration: bool, notifications: bool, lock_warning_notification: Option, + idle: Arc>, + break_duration: Duration, ) -> Result { let file_status = if file_integration { Some(FileStatus::new()?) @@ -89,7 +97,8 @@ impl Status { }; let (tx, rx) = mpsc::channel(); - let integrator = thread::spawn(move || integrate(&rx, file_status, notifications)); + let integrator = + thread::spawn(move || integrate(&rx, file_status, notifications, idle, break_duration)); Ok(Self { update: tx, integrator: Some(integrator), @@ -128,7 +137,7 @@ impl Status { } } - pub(crate) fn set_on_break(&mut self, next_work: Instant) { + pub(crate) fn set_break(&mut self, next_work: Instant) { self.send(State::Break { next_work }); } } diff --git a/src/run.rs b/src/run.rs index c85e401..9dfb415 100644 --- a/src/run.rs +++ b/src/run.rs @@ -4,19 +4,12 @@ use std::time::Instant; use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; -use crate::check_inputs::InputResult; +use crate::check_inputs::{InactivityTracker, InputResult, TrackResult}; use crate::cli::RunArgs; +use crate::config; use crate::integration::Status; use crate::{check_inputs, watch_and_block}; -use crate::{check_inputs::inactivity_watcher, config}; -use std::{ - sync::{ - atomic::{AtomicBool, Ordering}, - mpsc::{channel, Receiver, RecvTimeoutError}, - Arc, - }, - thread, -}; +use std::{sync::mpsc::Receiver, thread}; pub(crate) fn run( RunArgs { @@ -42,47 +35,31 @@ pub(crate) fn run( } let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); - let (break_skip_sender, break_skip_receiver) = channel(); - let (work_start_sender, work_start_receiver) = channel(); - let break_skip_is_sent = Arc::new(AtomicBool::new(false)); + let mut inactivity_tracker = InactivityTracker::new(recv_any_input2, break_duration); - { - let break_skip_is_sent = break_skip_is_sent.clone(); - - thread::spawn(move || { - inactivity_watcher( - &work_start_receiver, - &break_skip_sender, - &break_skip_is_sent, - &recv_any_input2, - break_duration, - ); - }); - } - - let mut status = Status::new(status_file, notifications, lock_warning) - .wrap_err("Could not setup status reporting")?; + let idle = inactivity_tracker.idle_handle(); + let mut status = Status::new( + status_file, + notifications, + lock_warning, + idle, + break_duration, + ) + .wrap_err("Could not setup status reporting")?; loop { status.set_waiting(); - block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - work_start_sender.send(true).unwrap(); + wait_for_user_activity(&recv_any_input).wrap_err("Could not wait for activity")?; status.set_working(Instant::now() + work_duration); - match break_skip_receiver.recv_timeout(work_duration) { - Ok(_) => { - status.set_waiting(); - block_on_new_input(&recv_any_input).wrap_err("Could not block till new input")?; - break_skip_is_sent.store(false, Ordering::Release); - continue; - } - Err(RecvTimeoutError::Timeout) => (), - Err(e) => panic!("Unexpected error: {e}"), - } + let idle = match inactivity_tracker.reset_or_timeout(work_duration) { + TrackResult::Error(e) => Err(e).wrap_err("Could not track inactivity")?, + TrackResult::ShouldReset => continue, + TrackResult::ShouldBreak { user_idle } => user_idle, + }; let mut locks = Vec::new(); - for device_id in to_block.iter().cloned() { locks.push( online_devices @@ -91,8 +68,8 @@ pub(crate) fn run( ); } - status.set_on_break(Instant::now() + break_duration); - thread::sleep(break_duration); + status.set_break(Instant::now() + break_duration - idle); + thread::sleep(break_duration - idle); for lock in locks { lock.unlock()?; @@ -100,8 +77,9 @@ pub(crate) fn run( } } -fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Result<()> { +fn wait_for_user_activity(recv_any_input: &Receiver) -> color_eyre::Result<()> { loop { + // clear old events match recv_any_input.try_recv() { Err(_) => break, Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), @@ -109,10 +87,12 @@ fn block_on_new_input(recv_any_input: &Receiver) -> color_eyre::Res } } - #[allow(clippy::match_same_arms)] - match recv_any_input.recv() { - Err(_) => Ok(()), // device disconnected - Ok(Err(e)) => Err(e).wrap_err("Error with device file"), - Ok(Ok(_)) => Ok(()), // new event! stop blocking + loop { + #[allow(clippy::match_same_arms)] + match recv_any_input.recv() { + Err(_) => (), // device disconnected, ignore + Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), + Ok(Ok(_)) => return Ok(()), // new event! stop blocking + } } } From fc7376485c8c3136e1db68dd71e04a14da2ed254 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 21 Apr 2024 12:15:09 +0200 Subject: [PATCH 56/76] break time in file integration text --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/install.rs | 2 +- src/integration.rs | 25 +++++++++++++++++++++---- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9386d46..5a793e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,9 +669,9 @@ dependencies = [ [[package]] name = "service-install" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4464608c1ab8ff985eab5cd522a8d86209132116dadd501b2c12d1f593bbf81c" +checksum = "f047ec54d358ae080f9e06ba38aa80ec5767d2b7552e7ad385e9fb751e4571ac" dependencies = [ "dialoguer", "home", diff --git a/Cargo.toml b/Cargo.toml index 9ac42fa..1f7f47a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,6 @@ serde = { version = "1.0.197", features = ["derive"] } sudo = "0.6.0" thiserror = "1.0.58" -service-install = { version = "0.4" } +service-install = { version = "0.4.2" } tracing = "0.1.40" tracing-subscriber = "0.3.18" diff --git a/src/install.rs b/src/install.rs index 40d5cf9..db8efb9 100644 --- a/src/install.rs +++ b/src/install.rs @@ -7,7 +7,7 @@ use service_install::{install_system, tui}; use crate::cli::RunArgs; use crate::config; -pub fn fmt_dur(dur: Duration) -> String { +fn fmt_dur(dur: Duration) -> String { let ss = dur.as_secs() % 60; let mm = (dur.as_secs() / 60) % 60; if mm == 0 { diff --git a/src/integration.rs b/src/integration.rs index a664f36..ef81b22 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -4,8 +4,6 @@ use std::time::{Duration, Instant}; use color_eyre::Result; -use crate::install::fmt_dur; - mod file_status; use file_status::FileStatus; mod notification; @@ -66,10 +64,10 @@ fn integrate( let break_dur = break_duration.saturating_sub(idle); let break_dur = fmt_dur(break_dur); let next_break = fmt_dur(next_break.duration_until()); - format!("{} break in: {}", break_dur, next_break) + format!("{} break in {}", break_dur, next_break) } State::Break { next_work } => { - format!("unlocks in: {}", fmt_dur(next_work.duration_until())) + format!("unlocks in {}", fmt_dur(next_work.duration_until())) } }; @@ -141,3 +139,22 @@ impl Status { self.send(State::Break { next_work }); } } + +fn fmt_mm_hh(dur: Duration) -> String { + let mm = (dur.as_secs_f32() / 60.0).round() as u8 % 60; + let hh = (dur.as_secs_f32() / 60.0 / 60.0).round() as u8; + if hh == 0 { + format!("{mm}m") + } else { + format!("{hh}h:{mm}m") + } +} + +fn fmt_dur(dur: Duration) -> String { + let seconds = dur.as_secs(); + if seconds > 60 { + fmt_mm_hh(dur) + } else { + return format!("{seconds}s"); + } +} From e4a6295e7d7aa867994fdd120cc22c9f8f409651 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 21 Apr 2024 12:40:45 +0200 Subject: [PATCH 57/76] fixes lock warning notification --- src/integration.rs | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/integration.rs b/src/integration.rs index ef81b22..8881b57 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -28,7 +28,6 @@ impl DurationUntil for Instant { pub struct Status { update: mpsc::Sender, integrator: Option>>, - lock_warning_notification: Option, } fn integrate( @@ -37,6 +36,7 @@ fn integrate( state_notifications: bool, idle: Arc>, break_duration: Duration, + lock_warning_notification: Option, ) -> Result<()> { let mut timeout = Duration::MAX; let mut state = State::Waiting; @@ -60,11 +60,22 @@ fn integrate( let msg = match state { State::Waiting => String::from("-"), State::Work { next_break } => { + if let Some(before_break) = lock_warning_notification { + if next_break.duration_until() < before_break { + let msg = format!("locking in {}", fmt_dur(before_break)); + notification::notify_all_users(&msg); + } + } + let idle = idle.lock().unwrap().elapsed(); - let break_dur = break_duration.saturating_sub(idle); - let break_dur = fmt_dur(break_dur); - let next_break = fmt_dur(next_break.duration_until()); - format!("{} break in {}", break_dur, next_break) + if idle > Duration::from_secs(30) { + let break_dur = break_duration.saturating_sub(idle); + let break_dur = fmt_dur(break_dur); + format!("idle, reset in {}", break_dur) + } else { + let next_break = fmt_dur(next_break.duration_until()); + format!("break in {}", next_break) + } } State::Break { next_work } => { format!("unlocks in {}", fmt_dur(next_work.duration_until())) @@ -96,11 +107,10 @@ impl Status { let (tx, rx) = mpsc::channel(); let integrator = - thread::spawn(move || integrate(&rx, file_status, notifications, idle, break_duration)); + thread::spawn(move || integrate(&rx, file_status, notifications, idle, break_duration, lock_warning_notification)); Ok(Self { update: tx, integrator: Some(integrator), - lock_warning_notification, }) } @@ -124,15 +134,6 @@ impl Status { pub(crate) fn set_working(&mut self, next_break: Instant) { self.send(State::Work { next_break }); - - if let Some(before_break) = self.lock_warning_notification { - thread::spawn(move || { - let msg = format!("locking in {}", fmt_dur(before_break)); - #[allow(clippy::pedantic)] - thread::sleep_until(next_break - before_break); - notification::notify_all_users(&msg); - }); - } } pub(crate) fn set_break(&mut self, next_work: Instant) { From 95b4637c057a36b5b0b24f2498b6d3270d513d70 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 21 Apr 2024 12:50:16 +0200 Subject: [PATCH 58/76] new release --- CHANGELOG.md | 3 +++ Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4e1788..b95c823 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## [0.3.0] - 2024-04-21 + ### Changes - Time idle before a break is subtracted from the break time +- User is notified if staying idle for longer will reset the work period ## [0.2.2] - 2024-04-15 diff --git a/Cargo.toml b/Cargo.toml index 1f7f47a..af98cc9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer" -version = "0.2.3" +version = "0.3.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 83477f1a24469e9a33aeacec0f2f8e255fe99a80 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 28 May 2024 15:10:04 +0200 Subject: [PATCH 59/76] before removing dbus integration --- Cargo.lock | 907 +++++++++++++++++++++++++++++++++++---- Cargo.toml | 2 + examples/print_status.rs | 17 + src/integration.rs | 99 +++-- src/integration/dbus.rs | 50 +++ src/lib.rs | 23 + 6 files changed, 983 insertions(+), 115 deletions(-) create mode 100644 examples/print_status.rs create mode 100644 src/integration/dbus.rs create mode 100644 src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 5a793e7..dd1ec72 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,57 +19,208 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "anstream" -version = "0.6.13" +version = "0.6.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" [[package]] name = "anstyle-parse" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" dependencies = [ "anstyle", "windows-sys 0.52.0", ] +[[package]] +name = "async-broadcast" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" +dependencies = [ + "event-listener 5.3.0", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener 5.3.0", + "futures-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-signal" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix", + "signal-hook-registry", + "slab", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" @@ -94,9 +245,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.22.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" @@ -125,11 +276,34 @@ dependencies = [ "wyz", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + [[package]] name = "break-enforcer" -version = "0.2.3" +version = "0.3.0" dependencies = [ - "base64 0.22.0", + "base64 0.22.1", "clap", "color-eyre", "dialoguer", @@ -141,15 +315,17 @@ dependencies = [ "service-install", "sudo", "thiserror", + "tokio", "tracing", "tracing-subscriber", + "zbus", ] [[package]] name = "cc" -version = "1.0.92" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" [[package]] name = "cfg-if" @@ -157,6 +333,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "clap" version = "4.5.4" @@ -226,9 +408,18 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] [[package]] name = "console" @@ -249,6 +440,15 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -270,9 +470,19 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] [[package]] name = "deranged" @@ -297,11 +507,21 @@ dependencies = [ "zeroize", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "either" -version = "1.10.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "encode_unicode" @@ -309,11 +529,44 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -321,17 +574,59 @@ dependencies = [ [[package]] name = "evdev" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bed59fcc8cfd6b190814a509018388462d3b203cf6dd10db5c00087e72a83f3" +checksum = "ab6055a93a963297befb0f4f6e18f314aec9767a4bbe88b151126df2433610a7" dependencies = [ "bitvec", "cfg-if", "libc", - "nix", + "nix 0.23.2", "thiserror", ] +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.0", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -344,9 +639,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "funty" @@ -360,6 +655,53 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -369,18 +711,57 @@ dependencies = [ "thread_local", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "home" version = "0.5.9" @@ -396,6 +777,16 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + [[package]] name = "inotify" version = "0.10.2" @@ -418,6 +809,12 @@ dependencies = [ "libc", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + [[package]] name = "itertools" version = "0.10.5" @@ -444,15 +841,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.153" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "log" @@ -475,11 +872,20 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -505,7 +911,20 @@ dependencies = [ "cc", "cfg-if", "libc", - "memoffset", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.5.0", + "cfg-if", + "cfg_aliases", + "libc", + "memoffset 0.9.1", ] [[package]] @@ -548,6 +967,16 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "overload" version = "0.1.1" @@ -560,23 +989,76 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "polling" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit", +] + [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" dependencies = [ "unicode-ident", ] @@ -596,6 +1078,36 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "rayon" version = "1.10.0" @@ -630,15 +1142,15 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustix" -version = "0.38.32" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", @@ -649,18 +1161,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.197" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", @@ -685,6 +1208,17 @@ dependencies = [ "uzers", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -706,6 +1240,24 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -714,14 +1266,20 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.11.1" @@ -740,9 +1298,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.58" +version = "2.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" dependencies = [ "proc-macro2", "quote", @@ -751,9 +1309,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.30.10" +version = "0.30.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d7c217777061d5a2d652aea771fb9ba98b6dade657204b08c4b9604d11555b" +checksum = "732ffa00f53e6b2af46208fba5718d9662a421049204e156328b66791ffa15ae" dependencies = [ "cfg-if", "core-foundation-sys", @@ -784,18 +1342,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", @@ -842,9 +1400,38 @@ dependencies = [ "mio", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "toml_datetime" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + [[package]] name = "tracing" version = "0.1.40" @@ -912,6 +1499,23 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.1", + "tempfile", + "winapi", +] + [[package]] name = "unicode-ident" version = "1.0.12" @@ -920,9 +1524,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" [[package]] name = "utf8parse" @@ -946,6 +1550,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -981,7 +1591,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -990,7 +1600,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -1008,7 +1618,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.4", + "windows-targets 0.52.5", ] [[package]] @@ -1028,17 +1638,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.4", - "windows_aarch64_msvc 0.52.4", - "windows_i686_gnu 0.52.4", - "windows_i686_msvc 0.52.4", - "windows_x86_64_gnu 0.52.4", - "windows_x86_64_gnullvm 0.52.4", - "windows_x86_64_msvc 0.52.4", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] [[package]] @@ -1049,9 +1660,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -1061,9 +1672,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -1073,9 +1684,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -1085,9 +1702,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -1097,9 +1714,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -1109,9 +1726,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -1121,9 +1738,18 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.4" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] [[package]] name = "wyz" @@ -1134,8 +1760,117 @@ dependencies = [ "tap", ] +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "zbus" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989c3977a7aafa97b12b9a35d21cdcff9b0d2289762b14683f45d66b1ba6c48f" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener 5.3.0", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.28.0", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "windows-sys 0.52.0", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "4.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fe9de53245dcf426b7be226a4217dd5e339080e5d46e64a02d6e5dcbf90fca1" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + [[package]] name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" + +[[package]] +name = "zvariant" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index af98cc9..bfcb24a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,3 +21,5 @@ thiserror = "1.0.58" service-install = { version = "0.4.2" } tracing = "0.1.40" tracing-subscriber = "0.3.18" +zbus = "4.2.0" +tokio = { version = "1.37.0", features = ["rt", "time", "macros"] } diff --git a/examples/print_status.rs b/examples/print_status.rs new file mode 100644 index 0000000..b3efbab --- /dev/null +++ b/examples/print_status.rs @@ -0,0 +1,17 @@ +use std::time::Duration; + +use break_enforcer; +use tokio::time::sleep; + +#[tokio::main(flavor = "current_thread")] +async fn main() { + loop { + sleep(Duration::from_secs(1)).await; + + if break_enforcer::is_active().await { + println!("it is active"); + } else { + println!("it is not active :("); + } + } +} diff --git a/src/integration.rs b/src/integration.rs index 8881b57..f9f6869 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -6,6 +6,7 @@ use color_eyre::Result; mod file_status; use file_status::FileStatus; +pub(crate) mod dbus; mod notification; #[derive(Debug, PartialEq, Eq)] @@ -28,6 +29,7 @@ impl DurationUntil for Instant { pub struct Status { update: mpsc::Sender, integrator: Option>>, + dbus_maintain: Option>>, } fn integrate( @@ -57,42 +59,69 @@ fn integrate( State::Work { .. } | State::Break { .. } => Duration::from_secs(1), }; - let msg = match state { - State::Waiting => String::from("-"), - State::Work { next_break } => { - if let Some(before_break) = lock_warning_notification { - if next_break.duration_until() < before_break { - let msg = format!("locking in {}", fmt_dur(before_break)); - notification::notify_all_users(&msg); - } - } + let msg = format_status(&state, &idle, break_duration); + /* TODO: dbus api status update */ + if let Some(file_status) = &mut file_status { + file_status.update(&msg); + } + notify_if_needed( + &state, + /* TODO: merge these bools into a struct called "notifyable events" */ + lock_warning_notification, + state_notifications, + state_changed, + msg, + ); + } +} - let idle = idle.lock().unwrap().elapsed(); - if idle > Duration::from_secs(30) { - let break_dur = break_duration.saturating_sub(idle); - let break_dur = fmt_dur(break_dur); - format!("idle, reset in {}", break_dur) - } else { - let next_break = fmt_dur(next_break.duration_until()); - format!("break in {}", next_break) +fn notify_if_needed( + state: &State, + lock_warning_notification: Option, + state_notifications: bool, + state_changed: bool, + msg: String, +) { + match *state { + State::Work { next_break } => { + if let Some(before_break) = lock_warning_notification { + if next_break.duration_until() < before_break { + let msg = format!("locking in {}", fmt_dur(before_break)); + notification::notify_all_users(&msg); } } - State::Break { next_work } => { - format!("unlocks in {}", fmt_dur(next_work.duration_until())) - } - }; + } + _ => (), + } - if let Some(file_status) = &mut file_status { - file_status.update(&msg); + if state_notifications && state_changed { + notification::notify_all_users(&msg); + } +} + +fn format_status(state: &State, idle: &Arc>, break_duration: Duration) -> String { + let msg = match *state { + State::Waiting => String::from("-"), + State::Work { next_break } => { + let idle = idle.lock().unwrap().elapsed(); + if idle > Duration::from_secs(30) { + let break_dur = break_duration.saturating_sub(idle); + let break_dur = fmt_dur(break_dur); + format!("idle, reset in {}", break_dur) + } else { + let next_break = fmt_dur(next_break.duration_until()); + format!("break in {}", next_break) + } } - if state_notifications && state_changed { - notification::notify_all_users(&msg); + State::Break { next_work } => { + format!("unlocks in {}", fmt_dur(next_work.duration_until())) } - } + }; + msg } impl Status { - pub fn new( + pub(crate) fn new( file_integration: bool, notifications: bool, lock_warning_notification: Option, @@ -106,11 +135,23 @@ impl Status { }; let (tx, rx) = mpsc::channel(); - let integrator = - thread::spawn(move || integrate(&rx, file_status, notifications, idle, break_duration, lock_warning_notification)); + let integrator = thread::spawn(move || { + integrate( + &rx, + file_status, + notifications, + idle, + break_duration, + lock_warning_notification, + ) + }); + let dbus_thread = thread::spawn(move || { + dbus::maintain_blocking() + }); Ok(Self { update: tx, integrator: Some(integrator), + dbus_maintain: Some(dbus_thread), }) } diff --git a/src/integration/dbus.rs b/src/integration/dbus.rs new file mode 100644 index 0000000..537c918 --- /dev/null +++ b/src/integration/dbus.rs @@ -0,0 +1,50 @@ +use std::time::Duration; + +use color_eyre::Result; + +use zbus::conn::Builder; +use zbus::interface; + +pub(crate) struct Status { + msg: String, +} + +#[interface(name = "org.break_enforcer.Status1")] +impl Status { + #[zbus(property)] + async fn get_status(&self) -> String { + format!("{}", self.msg) + } +} + +pub(super) fn maintain_blocking() -> Result<()> { + let rt = tokio::runtime::Builder::new_current_thread() + .build() + .unwrap(); + rt.block_on(maintain()) +} + +async fn maintain() -> Result<()> { + let status = Status { + msg: "break in 5m".to_string(), + }; + let connection = Builder::system()? + .name("org.break_enforcer.Status")? + .serve_at("/org/break_enforcer/Status", status)? + .build() + .await?; + + for i in 0..5000 { + let iface_ref = connection + .object_server() + .interface::<_, Status>("/org/break_enforcer/Status") + .await?; + let mut iface = iface_ref.get_mut().await; + iface.msg = format!("break in {i}m"); + iface.get_status_changed(iface_ref.signal_context()).await?; + + tokio::time::sleep(Duration::from_secs(10)).await; + } + + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..9032d8c --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,23 @@ +use zbus::{proxy, Connection}; + +mod niet_pub { + use super::*; + + #[proxy( + interface = "org.break_enforcer.Status1", + default_service = "org.break_enforcer.Status", + default_path = "/org/break_enforcer/Status" + )] + trait Status { + #[zbus(property)] + fn get_status(&self) -> zbus::Result; + } +} + +pub async fn is_active() -> bool { + let connection = Connection::session().await.unwrap(); + let proxy = niet_pub::StatusProxy::new(&connection).await.unwrap(); + let status = proxy.get_status().await.unwrap(); + + status == "hoi" +} From bd867bc410c77c60fa333cc9820ed878e98a9144 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 31 May 2024 10:37:58 +0200 Subject: [PATCH 60/76] adds tcp based api to get idle time --- Cargo.lock | 712 +------------------------------------ Cargo.toml | 1 - examples/print-idle.rs | 16 + examples/print_status.rs | 17 - src/check_inputs.rs | 1 - src/cli.rs | 20 +- src/integration.rs | 35 +- src/integration/dbus.rs | 50 --- src/integration/tcp_api.rs | 131 +++++++ src/lib.rs | 129 ++++++- src/main.rs | 26 +- src/run.rs | 2 + src/tcp_api_config.rs | 9 + 13 files changed, 329 insertions(+), 820 deletions(-) create mode 100644 examples/print-idle.rs delete mode 100644 examples/print_status.rs delete mode 100644 src/integration/dbus.rs create mode 100644 src/integration/tcp_api.rs create mode 100644 src/tcp_api_config.rs diff --git a/Cargo.lock b/Cargo.lock index dd1ec72..74f1dfe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -66,156 +66,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "async-broadcast" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" -dependencies = [ - "event-listener 5.3.0", - "event-listener-strategy 0.5.2", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy 0.5.2", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-executor" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-fs" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" -dependencies = [ - "async-lock", - "blocking", - "futures-lite", -] - -[[package]] -name = "async-io" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-lock" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" -dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", - "pin-project-lite", -] - -[[package]] -name = "async-process" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a53fc6301894e04a92cb2584fedde80cb25ba8e02d9dc39d4a87d036e22f397d" -dependencies = [ - "async-channel", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.3.0", - "futures-lite", - "rustix", - "tracing", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-signal" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix", - "signal-hook-registry", - "slab", - "windows-sys 0.52.0", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "async-trait" -version = "0.1.80" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "autocfg" version = "1.3.0" @@ -276,29 +126,6 @@ dependencies = [ "wyz", ] -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "blocking" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495f7104e962b7356f0aeb34247aca1fe7d2e783b346582db7f2904cb5717e88" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "break-enforcer" version = "0.3.0" @@ -318,7 +145,6 @@ dependencies = [ "tokio", "tracing", "tracing-subscriber", - "zbus", ] [[package]] @@ -333,12 +159,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "clap" version = "4.5.4" @@ -412,15 +232,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console" version = "0.15.8" @@ -440,15 +251,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "cpufeatures" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" -dependencies = [ - "libc", -] - [[package]] name = "crossbeam-deque" version = "0.8.5" @@ -474,16 +276,6 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "deranged" version = "0.3.11" @@ -507,16 +299,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "either" version = "1.12.0" @@ -529,39 +311,6 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "endi" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" - -[[package]] -name = "enumflags2" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "equivalent" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" - [[package]] name = "errno" version = "0.3.9" @@ -581,52 +330,10 @@ dependencies = [ "bitvec", "cfg-if", "libc", - "nix 0.23.2", + "nix", "thiserror", ] -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9944b8ca13534cdfb2800775f8dd4902ff3fc75a50101466decadfdf322a24" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" -dependencies = [ - "event-listener 4.0.3", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.0", - "pin-project-lite", -] - [[package]] name = "eyre" version = "0.6.12" @@ -655,53 +362,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" -[[package]] -name = "futures-io" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" - -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - -[[package]] -name = "futures-sink" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" - -[[package]] -name = "futures-task" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" - -[[package]] -name = "futures-util" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" -dependencies = [ - "futures-core", - "futures-io", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -711,57 +371,18 @@ dependencies = [ "thread_local", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - [[package]] name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "home" version = "0.5.9" @@ -777,16 +398,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" -[[package]] -name = "indexmap" -version = "2.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" -dependencies = [ - "equivalent", - "hashbrown", -] - [[package]] name = "inotify" version = "0.10.2" @@ -872,15 +483,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "miniz_oxide" version = "0.7.3" @@ -911,20 +513,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "memoffset 0.6.5", -] - -[[package]] -name = "nix" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset 0.9.1", + "memoffset", ] [[package]] @@ -967,16 +556,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - [[package]] name = "overload" version = "0.1.1" @@ -989,71 +568,18 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" -[[package]] -name = "parking" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" - [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "piper" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "464db0c665917b13ebb5d453ccdec4add5658ee1adc7affc7677615356a8afaf" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - -[[package]] -name = "polling" -version = "3.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi", - "pin-project-lite", - "rustix", - "tracing", - "windows-sys 0.52.0", -] - [[package]] name = "powerfmt" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit", -] - [[package]] name = "proc-macro2" version = "1.0.83" @@ -1078,36 +604,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "rand_chacha", - "rand_core", -] - -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom", -] - [[package]] name = "rayon" version = "1.10.0" @@ -1179,17 +675,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_repr" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "service-install" version = "0.4.2" @@ -1208,17 +693,6 @@ dependencies = [ "uzers", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -1240,24 +714,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" -[[package]] -name = "signal-hook-registry" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" -dependencies = [ - "libc", -] - -[[package]] -name = "slab" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] - [[package]] name = "smallvec" version = "1.13.2" @@ -1274,12 +730,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "strsim" version = "0.11.1" @@ -1415,23 +865,6 @@ dependencies = [ "syn", ] -[[package]] -name = "toml_datetime" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow", -] - [[package]] name = "tracing" version = "0.1.40" @@ -1499,23 +932,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "uds_windows" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" -dependencies = [ - "memoffset 0.9.1", - "tempfile", - "winapi", -] - [[package]] name = "unicode-ident" version = "1.0.12" @@ -1550,12 +966,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1742,15 +1152,6 @@ version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "wyz" version = "0.5.1" @@ -1760,117 +1161,8 @@ dependencies = [ "tap", ] -[[package]] -name = "xdg-home" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "zbus" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989c3977a7aafa97b12b9a35d21cdcff9b0d2289762b14683f45d66b1ba6c48f" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "enumflags2", - "event-listener 5.3.0", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.28.0", - "ordered-stream", - "rand", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "windows-sys 0.52.0", - "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "4.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe9de53245dcf426b7be226a4217dd5e339080e5d46e64a02d6e5dcbf90fca1" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - [[package]] name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" - -[[package]] -name = "zvariant" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "4.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils", -] - -[[package]] -name = "zvariant_utils" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc242db087efc22bd9ade7aa7809e4ba828132edc312871584a6b4391bdf8786" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] diff --git a/Cargo.toml b/Cargo.toml index bfcb24a..c094499 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,5 +21,4 @@ thiserror = "1.0.58" service-install = { version = "0.4.2" } tracing = "0.1.40" tracing-subscriber = "0.3.18" -zbus = "4.2.0" tokio = { version = "1.37.0", features = ["rt", "time", "macros"] } diff --git a/examples/print-idle.rs b/examples/print-idle.rs new file mode 100644 index 0000000..4cc3576 --- /dev/null +++ b/examples/print-idle.rs @@ -0,0 +1,16 @@ +use std::io::Write; +use std::time::Duration; + +use break_enforcer::Api; + +fn main() { + let mut api = Api::new().unwrap(); + + loop { + let idle = api.idle_since().unwrap(); + print!("\ruser has been idle for: {:?} ", idle); + std::io::stdout().flush().unwrap(); + + std::thread::sleep(Duration::from_secs(1)); + } +} diff --git a/examples/print_status.rs b/examples/print_status.rs deleted file mode 100644 index b3efbab..0000000 --- a/examples/print_status.rs +++ /dev/null @@ -1,17 +0,0 @@ -use std::time::Duration; - -use break_enforcer; -use tokio::time::sleep; - -#[tokio::main(flavor = "current_thread")] -async fn main() { - loop { - sleep(Duration::from_secs(1)).await; - - if break_enforcer::is_active().await { - println!("it is active"); - } else { - println!("it is not active :("); - } - } -} diff --git a/src/check_inputs.rs b/src/check_inputs.rs index dbe908a..e170f17 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -128,7 +128,6 @@ fn monitor_input( Err(e) if e.kind() == io::ErrorKind::NotFound => return, Err(e) => { // unexpected error, report to main thread - dbg!(&e); let err = Arc::new(e); // make cloneable let _ig_err = tx1.send(Err(err.clone())); let _ig_err = tx2.send(Err(err)); diff --git a/src/cli.rs b/src/cli.rs index 61aeefc..782da83 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -4,7 +4,7 @@ use std::path::PathBuf; use std::time::Duration; #[allow(clippy::struct_field_names)] -#[derive(Debug, Args)] +#[derive(Debug, Args, PartialEq, Eq)] pub struct RunArgs { /// Period after which input will be disabled. /// Note: run help command to see the duration format. @@ -18,10 +18,15 @@ pub struct RunArgs { /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub lock_warning: Option, - /// Enable the status file. It contains a string - /// describing the time till the next break or the - /// time the current break takes. The file is located - /// at `/var/run/break_enforcer` and is called `status.txt` + /// Enable the tcp api. Enables the `Status` command and other apps + /// to interface using the break-enforcer library. The API only + /// accepts connections from the same system. + #[arg(short, long)] + pub tcp_api: bool, + /// Enable the status file. It contains a string describing the time till + /// the next break, the time till the current break is over or that the user + /// is idle. The file is located at `/var/run/break_enforcer` and is called + /// `status.txt` #[arg(short, long)] pub status_file: bool, /// verbose notifications. Sends notifications when: @@ -30,7 +35,7 @@ pub struct RunArgs { pub notifications: bool, } -#[derive(Debug, Subcommand)] +#[derive(Debug, Subcommand, PartialEq, Eq)] pub enum Commands { /// Periodically block devices in config (setup using wizard). Run(#[command(flatten)] RunArgs), @@ -41,6 +46,9 @@ pub enum Commands { Install(#[command(flatten)] RunArgs), /// Removed the installed service and executable. Remove, + /// Prints a status line describing the time till the next break, + /// the time till the current break is over or that the user is idle. + Status, } /// Disables specified input devices during breaks. The period between breaks, diff --git a/src/integration.rs b/src/integration.rs index f9f6869..5d2ead0 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -6,8 +6,9 @@ use color_eyre::Result; mod file_status; use file_status::FileStatus; -pub(crate) mod dbus; +use tracing::error; mod notification; +pub(crate) mod tcp_api; #[derive(Debug, PartialEq, Eq)] enum State { @@ -29,12 +30,12 @@ impl DurationUntil for Instant { pub struct Status { update: mpsc::Sender, integrator: Option>>, - dbus_maintain: Option>>, } fn integrate( rx: &mpsc::Receiver, mut file_status: Option, + mut api_status: Option, state_notifications: bool, idle: Arc>, break_duration: Duration, @@ -60,9 +61,11 @@ fn integrate( }; let msg = format_status(&state, &idle, break_duration); - /* TODO: dbus api status update */ - if let Some(file_status) = &mut file_status { - file_status.update(&msg); + if let Some(status) = &mut file_status { + status.update(&msg); + } + if let Some(status) = &mut api_status { + status.update_msg(&msg); } notify_if_needed( &state, @@ -123,6 +126,7 @@ fn format_status(state: &State, idle: &Arc>, break_duration: Dura impl Status { pub(crate) fn new( file_integration: bool, + tcp_api_integration: bool, notifications: bool, lock_warning_notification: Option, idle: Arc>, @@ -134,24 +138,37 @@ impl Status { None }; + let api_status = if tcp_api_integration { + let status = tcp_api::Status::new(idle.clone()); + { + let status = status.clone(); + thread::spawn(|| { + if let Err(e) = tcp_api::maintain(status) { + error!("failed to maintain tcp API: {e}"); + } + }); + } + Some(status) + } else { + None + }; + let (tx, rx) = mpsc::channel(); let integrator = thread::spawn(move || { integrate( &rx, file_status, + api_status, notifications, idle, break_duration, lock_warning_notification, ) }); - let dbus_thread = thread::spawn(move || { - dbus::maintain_blocking() - }); + Ok(Self { update: tx, integrator: Some(integrator), - dbus_maintain: Some(dbus_thread), }) } diff --git a/src/integration/dbus.rs b/src/integration/dbus.rs deleted file mode 100644 index 537c918..0000000 --- a/src/integration/dbus.rs +++ /dev/null @@ -1,50 +0,0 @@ -use std::time::Duration; - -use color_eyre::Result; - -use zbus::conn::Builder; -use zbus::interface; - -pub(crate) struct Status { - msg: String, -} - -#[interface(name = "org.break_enforcer.Status1")] -impl Status { - #[zbus(property)] - async fn get_status(&self) -> String { - format!("{}", self.msg) - } -} - -pub(super) fn maintain_blocking() -> Result<()> { - let rt = tokio::runtime::Builder::new_current_thread() - .build() - .unwrap(); - rt.block_on(maintain()) -} - -async fn maintain() -> Result<()> { - let status = Status { - msg: "break in 5m".to_string(), - }; - let connection = Builder::system()? - .name("org.break_enforcer.Status")? - .serve_at("/org/break_enforcer/Status", status)? - .build() - .await?; - - for i in 0..5000 { - let iface_ref = connection - .object_server() - .interface::<_, Status>("/org/break_enforcer/Status") - .await?; - let mut iface = iface_ref.get_mut().await; - iface.msg = format!("break in {i}m"); - iface.get_status_changed(iface_ref.signal_context()).await?; - - tokio::time::sleep(Duration::from_secs(10)).await; - } - - Ok(()) -} diff --git a/src/integration/tcp_api.rs b/src/integration/tcp_api.rs new file mode 100644 index 0000000..3704fc1 --- /dev/null +++ b/src/integration/tcp_api.rs @@ -0,0 +1,131 @@ +/// Simple ascii protocol over tcp, uses 0 bytes as packet framing +use std::io::{BufReader, ErrorKind, Write}; +use std::net::{SocketAddr, TcpListener}; +use std::sync::{Arc, Mutex}; +use std::thread; +use std::time::Instant; + +use color_eyre::eyre::{eyre, Context}; +use color_eyre::{Result, Section}; +use tracing::{debug, warn}; + +use crate::tcp_api_config::{PORTS, STOP_BYTE}; + +#[derive(Debug, Clone)] +pub(crate) struct Status { + msg: Arc>, + idle: Arc>, +} + +impl Status { + pub fn new(idle: Arc>) -> Self { + Self { + msg: Arc::new(Mutex::new(String::new())), + idle, + } + } + pub fn msg(&self) -> String { + self.msg + .lock() + .expect("Self::update_msg can not panic") + .clone() + } + pub fn idle_since(&self) -> String { + self.idle + .lock() + .expect("nothing can panic with lock held") + .elapsed() + .as_secs() + .to_string() + } + + pub(crate) fn update_msg(&self, new_status: &str) { + let mut msg = self.msg.lock().expect("Self::msg can not panic"); + *msg = new_status.to_string(); + } +} + +pub(crate) fn maintain(status: Status) -> Result<()> { + let mut listener = None; + + for port in PORTS { + let addr = SocketAddr::from(([127, 0, 0, 1], port)); + match TcpListener::bind(addr) { + Ok(l) => listener = Some(l), + Err(e) if e.kind() == ErrorKind::AddrInUse => { + continue; + } + Err(other) => return Err(other).wrap_err("Could not start listening"), + }; + } + + let Some(listener) = listener else { + return Err(eyre!( + "Could not find a suitable port after trying multiple options" + )); + }; + + for res in listener.incoming() { + debug!("accepted api connection"); + let conn = match res { + Ok(c) => c, + Err(e) => { + warn!("Failed incoming connection: {e}"); + continue; + } + }; + + let status = status.clone(); + thread::spawn(|| { + if let Err(error) = handle_conn(conn, status) { + warn!("ran into error handling API client: {error}"); + } + }); + } + + Ok(()) +} + +fn handle_conn(conn: std::net::TcpStream, status: Status) -> Result<()> { + use std::io::BufRead; + + let mut writer = conn.try_clone().expect("tcp stream clone failed"); + let mut reader = BufReader::new(conn); + let mut buf = vec![]; + + loop { + let n_read = reader.read_until(STOP_BYTE, &mut buf)?; + if n_read == 0 { + debug!("api client disconnected"); + return Ok(()); + } + + let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE + let packet = String::from_utf8(packet.to_vec()) + .wrap_err("packet must consist of valid utf8") + .with_note(|| format!("got bytes: {packet:?})"))?; + + match packet.as_str() { + "status_msg" => { + writer + .write_all(status.msg().as_bytes()) + .wrap_err("Could not write status msg to tcpstream")?; + writer + .write_all(&[STOP_BYTE]) + .wrap_err("Could not write status msg to tcpstream")?; + } + "idle_since" => { + writer + .write_all(status.idle_since().as_bytes()) + .wrap_err("Could not write active or not to tcpstream")?; + writer + .write_all(&[STOP_BYTE]) + .wrap_err("Could not write active or not to tcpstream")?; + } + _ => { + debug!("packet: '{packet}'"); + return Err(eyre!("got unexpected packet/api request, disconnecting")); + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 9032d8c..a3e8021 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,23 +1,114 @@ -use zbus::{proxy, Connection}; - -mod niet_pub { - use super::*; - - #[proxy( - interface = "org.break_enforcer.Status1", - default_service = "org.break_enforcer.Status", - default_path = "/org/break_enforcer/Status" - )] - trait Status { - #[zbus(property)] - fn get_status(&self) -> zbus::Result; - } +use std::io::{BufRead, BufReader, Write}; +use std::net::{SocketAddr, TcpStream}; +use std::time::Duration; + +use tracing::debug; + +mod tcp_api_config; +use tcp_api_config::STOP_BYTE; +use tcp_api_config::PORTS; + +pub struct Api { + reader: BufReader, + writer: TcpStream, +} + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Could not connect on any of the ports the api server listens on")] + CouldNotConnect, + #[error("Error writing request: {0}")] + WritingRequest(std::io::Error), + #[error("Error while reading response {0}")] + ReadingResponse(std::io::Error), + #[error("The response is not valid utf8")] + CorruptResponse(std::string::FromUtf8Error), + #[error("The api server closed the connection, did it halt?")] + ConnectionClosed, + #[error("The response should be a number, could not be parsed as one. Parse error: {error}, response: {packet}")] + IncorrectResponse { + packet: String, + error: std::num::ParseIntError, + }, } -pub async fn is_active() -> bool { - let connection = Connection::session().await.unwrap(); - let proxy = niet_pub::StatusProxy::new(&connection).await.unwrap(); - let status = proxy.get_status().await.unwrap(); +impl Api { + pub fn new() -> Result { + let mut conn = None; + + for port in PORTS { + let addr = SocketAddr::from(([127, 0, 0, 1], port)); + match TcpStream::connect(addr) { + Ok(c) => { + debug!("connected to break-enforcer service on port: {port}"); + conn = Some(c); + break; + } + Err(e) => { + debug!( + "error connecting to api on port: {port}. Error: {e}. Trying another port" + ); + } + }; + } + + let Some(conn) = conn else { + return Err(Error::CouldNotConnect); + }; + + let writer = conn.try_clone().expect("tcp stream clone failed"); + let reader = BufReader::new(conn); + + Ok(Self { reader, writer }) + } + + pub fn idle_since(&mut self) -> Result { + let mut request = b"idle_since".to_vec(); + request.push(STOP_BYTE); + self.writer + .write_all(&request) + .map_err(Error::WritingRequest)?; + + let mut buf = Vec::new(); + let n_read = self + .reader + .read_until(STOP_BYTE, &mut buf) + .map_err(Error::ReadingResponse)?; + + if n_read == 0 { + return Err(Error::ConnectionClosed); + } - status == "hoi" + let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE + let packet = String::from_utf8(packet.to_vec()).map_err(Error::CorruptResponse)?; + + let seconds_idle = packet + .as_str() + .parse::() + .map_err(|error| Error::IncorrectResponse { packet, error })?; + + return Ok(Duration::from_secs(seconds_idle)); + } + + pub fn status(&mut self) -> Result { + let mut request = b"status_msg".to_vec(); + request.push(STOP_BYTE); + self.writer + .write_all(&request) + .map_err(Error::WritingRequest)?; + + let mut buf = Vec::new(); + let n_read = self + .reader + .read_until(STOP_BYTE, &mut buf) + .map_err(Error::ReadingResponse)?; + + if n_read == 0 { + return Err(Error::ConnectionClosed); + } + + let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE + let status = String::from_utf8(packet.to_vec()).map_err(Error::CorruptResponse)?; + return Ok(status); + } } diff --git a/src/main.rs b/src/main.rs index ccd5cb1..9e87738 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,7 @@ mod cli; mod config; mod install; mod integration; +mod tcp_api_config; mod run; mod watch_and_block; mod wizard; @@ -41,21 +42,32 @@ fn main() -> color_eyre::Result<()> { // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { - return Err(eyre!(concat!( - "must run ", - env!("CARGO_CRATE_NAME"), - " as root user,\nExisting" - ))) - .suppress_backtrace(true) - .suggestion("Run using sudo"); + if cli.command != cli::Commands::Status { + return Err(eyre!(concat!( + "must run ", + env!("CARGO_CRATE_NAME"), + " as root user,\nExisting" + ))) + .suppress_backtrace(true) + .suggestion("Run using sudo"); + } } match cli.command { cli::Commands::Run(args) => run::run(args, cli.config_path), cli::Commands::Wizard => wizard::run(cli.config_path).wrap_err("Error running wizard"), + cli::Commands::Status => print_status().wrap_err("Could not print status"), cli::Commands::Install(args) => { install::set_up(&args, cli.config_path).wrap_err("Could not install") } cli::Commands::Remove => install::tear_down().wrap_err("Could not remove"), } } + +fn print_status() -> color_eyre::Result<()> { + let mut api = + break_enforcer::Api::new().wrap_err("Error interfacing with break-enforcer instance")?; + let msg = api.status().wrap_err("Error requesting status message")?; + println!("{msg}"); + Ok(()) +} diff --git a/src/run.rs b/src/run.rs index 9dfb415..8d5784b 100644 --- a/src/run.rs +++ b/src/run.rs @@ -17,6 +17,7 @@ pub(crate) fn run( break_duration, lock_warning, status_file, + tcp_api, notifications, }: RunArgs, config_path: Option, @@ -40,6 +41,7 @@ pub(crate) fn run( let idle = inactivity_tracker.idle_handle(); let mut status = Status::new( status_file, + tcp_api, notifications, lock_warning, idle, diff --git a/src/tcp_api_config.rs b/src/tcp_api_config.rs new file mode 100644 index 0000000..dea7799 --- /dev/null +++ b/src/tcp_api_config.rs @@ -0,0 +1,9 @@ +// this is shared between a lib and a bin target (main.rs). We do not want to +// share the internal details from the bin target to the lib. Thats why this is +// a separate module and not part of the integrations mod + +pub(crate) const STOP_BYTE: u8 = 0; +// first 4 are taken with care from +// https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers +// the rest are randomly picked +pub(crate) const PORTS: [u16; 7] = [49_151, 28_769, 19_788, 62_738, 34_342, 12_846, 8_797]; From 8bf6eb1843d7b5fdfbf8c2e80862ef3bbd2e15e7 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 31 May 2024 10:39:46 +0200 Subject: [PATCH 61/76] fix tcp api server skipping perfectly fine ports to bind on --- src/integration/tcp_api.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/integration/tcp_api.rs b/src/integration/tcp_api.rs index 3704fc1..c75cb50 100644 --- a/src/integration/tcp_api.rs +++ b/src/integration/tcp_api.rs @@ -51,7 +51,10 @@ pub(crate) fn maintain(status: Status) -> Result<()> { for port in PORTS { let addr = SocketAddr::from(([127, 0, 0, 1], port)); match TcpListener::bind(addr) { - Ok(l) => listener = Some(l), + Ok(l) => { + listener = Some(l); + break; + } Err(e) if e.kind() == ErrorKind::AddrInUse => { continue; } From d3cab2b80bf993d17406119d111353fb98e55685 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 31 May 2024 12:11:42 +0200 Subject: [PATCH 62/76] adds options to status command --- src/cli.rs | 26 +++++++++++++++++++++++--- src/install.rs | 3 +++ src/main.rs | 35 ++++++++++++++++++++++++++++------- 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index 782da83..1830cf1 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -19,7 +19,7 @@ pub struct RunArgs { #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub lock_warning: Option, /// Enable the tcp api. Enables the `Status` command and other apps - /// to interface using the break-enforcer library. The API only + /// to interface using the break-enforcer library. The API only /// accepts connections from the same system. #[arg(short, long)] pub tcp_api: bool, @@ -35,6 +35,17 @@ pub struct RunArgs { pub notifications: bool, } +#[allow(clippy::struct_field_names)] +#[derive(Debug, Args, PartialEq, Eq)] +pub struct StatusArgs { + /// Instead of printing the status once print it every `update` period + #[arg(short, long, value_name = "duration", value_parser = parse_duration)] + pub update_period: Option, + /// Output the status as json like this: {'msg': 'break in 5m'} + #[arg(short = 'j', long)] + pub use_json: bool, +} + #[derive(Debug, Subcommand, PartialEq, Eq)] pub enum Commands { /// Periodically block devices in config (setup using wizard). @@ -46,9 +57,18 @@ pub enum Commands { Install(#[command(flatten)] RunArgs), /// Removed the installed service and executable. Remove, - /// Prints a status line describing the time till the next break, + /// Prints a status line describing the time till the next break, /// the time till the current break is over or that the user is idle. - Status, + Status(#[command(flatten)] StatusArgs), +} + +impl Commands { + pub fn needs_sudo(&self) -> bool { + match self { + Commands::Status { .. } => false, + _ => true, + } + } } /// Disables specified input devices during breaks. The period between breaks, diff --git a/src/install.rs b/src/install.rs index db8efb9..565a7d6 100644 --- a/src/install.rs +++ b/src/install.rs @@ -48,6 +48,9 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { if run_args.status_file { args.push("--status-file".to_string()); } + if run_args.tcp_api { + args.push("--tcp-api".to_string()); + } let name = env!("CARGO_CRATE_NAME").replace('_', "-"); let steps = install_system!() diff --git a/src/main.rs b/src/main.rs index 9e87738..79d7550 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ #![feature(iter_collect_into)] use clap::Parser; +use cli::StatusArgs; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; use tracing_subscriber::fmt::time::uptime; @@ -14,8 +15,8 @@ mod cli; mod config; mod install; mod integration; -mod tcp_api_config; mod run; +mod tcp_api_config; mod watch_and_block; mod wizard; @@ -42,7 +43,7 @@ fn main() -> color_eyre::Result<()> { // check after args such that help can run without root if let sudo::RunningAs::User = sudo::check() { - if cli.command != cli::Commands::Status { + if cli.command.needs_sudo() { return Err(eyre!(concat!( "must run ", env!("CARGO_CRATE_NAME"), @@ -56,7 +57,7 @@ fn main() -> color_eyre::Result<()> { match cli.command { cli::Commands::Run(args) => run::run(args, cli.config_path), cli::Commands::Wizard => wizard::run(cli.config_path).wrap_err("Error running wizard"), - cli::Commands::Status => print_status().wrap_err("Could not print status"), + cli::Commands::Status(args) => status(args).wrap_err("Could not print status"), cli::Commands::Install(args) => { install::set_up(&args, cli.config_path).wrap_err("Could not install") } @@ -64,10 +65,30 @@ fn main() -> color_eyre::Result<()> { } } -fn print_status() -> color_eyre::Result<()> { +fn format_status(msg: String, use_json: bool) -> String { + if use_json { + format!("{{\"msg\": \"{msg}\"}}") + } else { + msg + } +} + +fn status( + StatusArgs { + update_period, + use_json, + }: StatusArgs, +) -> color_eyre::Result<()> { let mut api = break_enforcer::Api::new().wrap_err("Error interfacing with break-enforcer instance")?; - let msg = api.status().wrap_err("Error requesting status message")?; - println!("{msg}"); - Ok(()) + loop { + let msg = api.status().wrap_err("Error requesting status message")?; + let output = format_status(msg, use_json); + println!("{output}"); + if let Some(period) = update_period { + std::thread::sleep(period); + } else { + return Ok(()); + } + } } From daf720bfc9a1c94bb7ff706d2fdd57299a283dbd Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sat, 1 Jun 2024 12:09:21 +0200 Subject: [PATCH 63/76] status command now prints error and reconnects --- src/main.rs | 32 ++---------------------- src/status.rs | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 30 deletions(-) create mode 100644 src/status.rs diff --git a/src/main.rs b/src/main.rs index 79d7550..15c7591 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,7 +5,6 @@ #![feature(iter_collect_into)] use clap::Parser; -use cli::StatusArgs; use color_eyre::eyre::Context; use color_eyre::{eyre::eyre, Section}; use tracing_subscriber::fmt::time::uptime; @@ -14,6 +13,7 @@ mod check_inputs; mod cli; mod config; mod install; +mod status; mod integration; mod run; mod tcp_api_config; @@ -57,38 +57,10 @@ fn main() -> color_eyre::Result<()> { match cli.command { cli::Commands::Run(args) => run::run(args, cli.config_path), cli::Commands::Wizard => wizard::run(cli.config_path).wrap_err("Error running wizard"), - cli::Commands::Status(args) => status(args).wrap_err("Could not print status"), + cli::Commands::Status(args) => status::run(args).wrap_err("Could not print status"), cli::Commands::Install(args) => { install::set_up(&args, cli.config_path).wrap_err("Could not install") } cli::Commands::Remove => install::tear_down().wrap_err("Could not remove"), } } - -fn format_status(msg: String, use_json: bool) -> String { - if use_json { - format!("{{\"msg\": \"{msg}\"}}") - } else { - msg - } -} - -fn status( - StatusArgs { - update_period, - use_json, - }: StatusArgs, -) -> color_eyre::Result<()> { - let mut api = - break_enforcer::Api::new().wrap_err("Error interfacing with break-enforcer instance")?; - loop { - let msg = api.status().wrap_err("Error requesting status message")?; - let output = format_status(msg, use_json); - println!("{output}"); - if let Some(period) = update_period { - std::thread::sleep(period); - } else { - return Ok(()); - } - } -} diff --git a/src/status.rs b/src/status.rs new file mode 100644 index 0000000..27cfe01 --- /dev/null +++ b/src/status.rs @@ -0,0 +1,68 @@ +use crate::cli::StatusArgs; +use break_enforcer::Api; +use color_eyre::eyre::WrapErr; + +fn format_status(status: Result, use_json: bool) -> String { + match (status, use_json) { + (Ok(msg), true) => format!("{{\"msg\": \"{msg}\"}}"), + (Ok(msg), false) => msg, + (Err(err), true) => format!("{{\"msg\": \"{err}\"}}"), + (Err(err), false) => err.to_string(), + } +} + +#[derive(Default)] +enum ReconnectingApi { + #[default] + Disconnected, + Connected(Api), +} + +impl ReconnectingApi { + fn new() -> Self { + ReconnectingApi::Disconnected + } + + fn status(&mut self) -> Result { + let placeholder = ReconnectingApi::default(); + let owned_self = core::mem::replace(self, placeholder); + + let mut api = match owned_self { + ReconnectingApi::Disconnected => break_enforcer::Api::new()?, + ReconnectingApi::Connected(api) => api, + }; + + match api.status() { + Ok(status) => { + *self = ReconnectingApi::Connected(api); + Ok(status) + } + Err(e) => { + *self = ReconnectingApi::Disconnected; + Err(e) + } + } + } +} + +pub fn run( + StatusArgs { + update_period, + use_json, + }: StatusArgs, +) -> color_eyre::Result<()> { + let mut api = ReconnectingApi::new(); + let Some(period) = update_period else { + let msg = api.status().wrap_err("Error requesting status message")?; + let output = format_status(Ok(msg), use_json); + println!("{output}"); + return Ok(()); + }; + + loop { + let msg = api.status(); + let output = format_status(msg, use_json); + println!("{output}"); + std::thread::sleep(period); + } +} From 308aa2c286c8b7106f75f0600cf5b9b8c752da18 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Fri, 5 Jul 2024 11:19:23 +0200 Subject: [PATCH 64/76] Add default config path hint to help menu --- src/cli.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cli.rs b/src/cli.rs index 1830cf1..84cd014 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -90,7 +90,9 @@ pub struct Cli { #[command(subcommand)] pub command: Commands, /// Path to create/read/update list of devices to/from + /// Default: /etc/{crate name}.ron #[arg(short, long)] + #[arg(verbatim_doc_comment)] pub config_path: Option, /// Print many traces and logs #[arg(short, long)] From 5c4350ae2b57190b5c37309283678683127c348c Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 26 Jul 2024 14:39:50 +0200 Subject: [PATCH 65/76] adds sound notification via aplay --- README.md | 4 + ...ication-on-your-device-by-UNIVERSFIELD.mp3 | Bin 0 -> 112849 bytes ...ication-on-your-device-by-UNIVERSFIELD.wav | Bin 0 -> 620008 bytes assets/notification-1-by-UNIVERSFIELD.mp3 | Bin 0 -> 73560 bytes assets/notification-1-by-UNIVERSFIELD.wav | Bin 0 -> 403432 bytes src/cli.rs | 12 ++- src/integration.rs | 83 ++++++++++-------- src/integration/notification.rs | 74 +++++++++++++--- src/lib.rs | 4 +- src/run.rs | 19 ++-- 10 files changed, 131 insertions(+), 65 deletions(-) create mode 100644 assets/new-notification-on-your-device-by-UNIVERSFIELD.mp3 create mode 100644 assets/new-notification-on-your-device-by-UNIVERSFIELD.wav create mode 100644 assets/notification-1-by-UNIVERSFIELD.mp3 create mode 100644 assets/notification-1-by-UNIVERSFIELD.wav diff --git a/README.md b/README.md index 2b00ad3..d9b1631 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,7 @@ curl -L https://github.com/evavh/break-enforcer-s/releases/download/0.2.0/break- (as with any linux program you will still need to make it executable using `chmod +x break_enforcer`) + +### Notification Sound/Licenses + +The notification sounds are by [UNIVERSFIELD](https://www.patreon.com/UNIVERSFIELD) diff --git a/assets/new-notification-on-your-device-by-UNIVERSFIELD.mp3 b/assets/new-notification-on-your-device-by-UNIVERSFIELD.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9e84870aca9fabfe705c79c0578f54732ec86a5e GIT binary patch literal 112849 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

0j`r!xJu=5J0qaT(r!s@N(2AZh(Xq>k}~ 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�^7`5LC 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

!MC;YQ!KK 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

? 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

mBq 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 literal 0 HcmV?d00001 diff --git a/assets/notification-1-by-UNIVERSFIELD.mp3 b/assets/notification-1-by-UNIVERSFIELD.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..dd8b2a8e0ef135affa0ca564b3f2fefa8a99c437 GIT binary patch literal 73560 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 T$I!nJzrPsz7o7N?YvO+Zk^l7P literal 0 HcmV?d00001 diff --git a/assets/notification-1-by-UNIVERSFIELD.wav b/assets/notification-1-by-UNIVERSFIELD.wav new file mode 100644 index 0000000000000000000000000000000000000000..3fa5a3378daa9b35642f9f6140147fcb7568f83e GIT binary patch literal 403432 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%0D|=xJeJu_q>d#lxn{iM0_8lr8h8 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⩔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%0DvG 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%0A2dI$fY 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 z

MJRb)Gy-w)}d$x`~t`S=?f>F6<+(Xovb)q2GP^#b*WarT5)c9lEAjN(_#Z+$+s z$JOio<{RH?X7)Ad^?D_5({ovk{=R;E%3RlzdX7&gBjZ3zoD*((G5qvO_Io3YsT4fQ ztUvS^mrXTzU6tNJS5$XscV89KuymJLFRnM(2dDlS%OPfq0@WeBT>3kV6zj*H^{-`ut$cqygXB zOugSGT&?aeAg?@^Kh2SRtTy^MoS|Ad6L<53b~9z|O}JCDP{Q9Yn^X&riqs9vFKa0Z zy$6%(PhCA3o3ISlzfV?^OPBoJn9jx!r+(heyz~=Q{cs(KU#d-)q>cH_9_si}XZ?=N zK&pg|BKvmv=2l*GC+);G?92|h;qNN%z2PNwb8FV{9!#g3XgYv0eh^&cW? zBV}Vf!YGP@$?2OETdz`nyu?>FkaO4PX=?gfby=G}1X+A*F}*&$d*p!i-Q1NZ_PixJxTdr>XHr?wAd}Dt3WEsBkPJK>~q`&LS`#pUcf?3}^YpObL znf{&4|D+$ABRUmAvqrW4pLL_G;ayBD`89c)kd+TOGe#?LJO5*h55k z(Z_Y;DBR_pmE~7U#J}p?Tj9wR4dP*G6;J4+*oh`_Ju1WpbwicXxmO^a5NC8s{hj<2 zZ>5h~L7zX(oPcpAU<@^tXISz>GG1-JfCg-Xy8d)Bg{tLe)gHCJ+G%b!&Ih3?1BGv; zYM91f?ib+;Mx$vd#)T%79dD_N`$Rv|f9?ts)kCv&5wD6$@tJp13P0y+0T1dWQV+!r z&58c=ry;XneUl@TJ9DF{HxKCXY~rJKncJu~D`rOWh2!u>GpLlO>&TpC;>`@b?K4&L z6IAnKDM>%U%6B&b;!P31foT6wrb|>J^GtMM<{CDBIIMtUO)%@GlRX`cBAW&xvy!9p zJy}`2#oz4pxDM9i)G}EV*%!$}^LSsEQ@Z4mgQoJFeH3-;#gEUa68gcC8mDD!hAC*G zVI~|(j+n{x6IOa58R&X;e2$1vR-Au^#^rw^Vn4fW zhC^wx_t#9pIia=Bb^suSGterk<~VJ9W4^g zk6~hp@|RCW``F__>Y@|$6-R9%I28`TzyISqQ<}OclaK9PA7z<%bXt{ukUnFVoO3f= zb0wtwTa4p;h~`XuvZETcF@CA~a-CK_R?#G9t=)-dC{I1h2I{CSUz>Id2W z5)o_hSw&4VZ17X&sNSa*EU#PjdL1&wskE=fQQSbaP|T?mGkGPS>LL&1Fbg+$lGf)p zT;?`@Z5bA1A)M|@>WPW4@d@JXSp5@UP(#i(XXraVax;IqQ^xf-*5!=XTw$Hc_cyud zvG_*$>CN)g;uMoNK*z5Z?Fy(-FITDLv4<%yFP4wB6fz(C2DL#s6;8GZ&77w1y+n_1F?!2;qFXXgxtg1M z^nosnL3H$=N2N21^=_bo`=8vbAdsnA*!{{e! zZIwsV*WGBVE4qnDRv*IBKo`r4R9Y?Jz8%E)cXb24pEiWS*Vn=F1P-$r+^rJZC}~UU zmEqd-l$vC_Jbj^hc?6`n7e?@ZW&<`i-M>Cm z+5Ez9u7V&=XNyCzG4I*J^O~4nN36d`9$Lb@luKzc(_|^^X(oN#B>Ljv>hJ#0-d<+k zei-hOZ(ia0PmcL>++D{>Ke&DW&|is6|0{0ezqah%Tm>hG$s^%~I%_3|OO<9Rs6t1}hYV?|c-Ky*i@3OlUD z2A`yEe@>_6^Ek^U;`uAG$yfZHH{neG!(?`bYW9$Q4vePIB-!vq*D+5OwSXU8%F}+! z<1U7Y&iAkCPLj!9%F7-*t8ID_JM<)^{lTcMUi-(w4biosaP+UKUO&jJMx_V&!R{|W|K>VD_mj&#z0TyS+g%UK;~o)VYKe~3 z)$I4u(v-ql=aT;%!GAA?MGl~@Xa=V%pA6?Whs!s|smmv)ri0OdtW?eJN#Bc4WzR~$ zb6$&exi!p*?++W#;-OE&M_&-(UI|aDK;BGRQBJlAb6wkHe#ao_=c&H0#ygjRO;?8Z zJq{sifHP@o!*MHr*2%MFg8)C;TsK%#d2?f#<%_y-o9ZlUj+&-g0J89FZ&;sx;0JCfg3@V_NvlU>Pv)6K8NkG-7c#f{xT zDf%2s?GN``dRCz{m&I;}cAgR&vK4FjSZ4tmjUsZ*YtC}rXM8M|WQ#Y+0`-w+9-_^B zl2-i{*V{VYdg|Kv3_m`e&z$bh7Wmrtc=m0sgJ#iY@q&5P@r7I_bY{wC>=NTg@6X)j zx>1#10Izfb9n*3D(r@agY4{33aYaa$kG$80JEIk1xVDo8l{5x!TCLvwdbq@v|LtrkSgD`WV}+%x+6#1q;)B zL?Yf1`tx0)MQFzrZp^uOr0q;<4}4#~#xsB`jQ^dye`e)DB6 zOD>B}$0?@lc=$Tr!*6a6ZR0heLA)Y77S9dU#FMfD)|K(L06Z4lis7|YnhJs|FP)-n8bC|;m?`Y z_KEkk%=F8@)JFNS)3@mudlXmx4D_fePN*48QF98T#w?>Tr1B{i^OWkO4t>TG_?>z% z%4dE4qM0{MWs$GSB41S>HJ6jNRH?U6g|}9T0gbu>^# z(3~CGmU32KbVTG>55-#n*;qnbzLvV?XBg%IA6wQOE>15Eh2@>a<)62>ZjzT4buPK+ zmJZ7aSE}C!!%GtUqbvPQ&4^2(z+^g=JY) z!nUkx;aFC)P)LPPIqoP5_Et@NEJ6;0%#49Dj)B}vgyc+wx=aqUMb@p!6gr;CeupWl z?5Pl<$?)k3l;Wc)%Lme~eBwTJgV}bbva;z|?0Z7h{;I63Cl$do*Uz}x3!)e4U}~A_ zQYm~Il?-#u?fF^O{+I0MoXj`rMds1u&zL5cX_DqMYvG(sG5dj&WV8O^`8M~N#tquL`d~2vax;1__nRZPPV1-;+7q^&YnN)pQY+ z%PwrhA)QsZAZph`&??0HZDst?#FB4qFrRLU#4w$sAL$W&KdF{veybdO=w3BXIlRri zY_I}btp?+)h0AH6zvneQoNtQ%**R!W`RE}2bqqf`i4UD`rtuOJ=+@%Sf7A`PQz!AE z=yg7|CEZf1%mJNoztPKY))lurs+sv(pWAr8c(5(+{p1brdmcKg$=-wywD9jY_IuRg z+pDnXQoMU%Oy{}ueTSj(n_(`q)#bxwULV-m(Hh(Lg1r+@s}gIgLF$OjtHSwEo7+Un zM{)Nw_NtG6ZBIREM#(98=qdQszw~&gXiNW1|~x5|Q=n}swbviT|cHoYJ-DJ_v1lvXoO^NGwGY2(bZ zY5h!<^vO(_^uEmHW-6UbF34<6j?r~4i+Uxaqb7Xny|hXBl0wm;_#bS;wlGw^-bU^I zY&TU@XEn0^VHv@hMN4)|4_un*F3icRLE__-Qud0(gzHPXG)my&lO zMelKV<8@e@r&Qh@c(~zw-`Aq-8u;cmc>Hc`(I2YsLwL>qzn*8eFS4PAXFuPAOZwg4 z-a)VYqYQH!@3_vjkz#oT`&yBB!|5m*i+4aR5 zJE%7Jc%%FME8OUiXY@4XZZ-pV1-rZ&CSO91dM!5aI>>cimBNL1%@guY*p2#RX}k^| zzubJnb!h=QkiXdCnye_yXMfYO%7(A9o(kV&wG5lH`h>r-#)XUH1v0kvqTkN&e!P#C z7w>Q~Sts;ClSFT$4Q&rQn-32@S3Z89+TcAo+Lv@Y zd%|L!b|=yjQSoq}X)jOG%Qe&~(OmDvYpSGIS>`M1o2Dw8CSrGEDEjlTrbc-77oscG zNY`Z=yBet7>qj^Hyjyn^PI6RwmcX%P| z(ePr{OQC(%8=-gB`}PHQ4QsOcg#&ChzsmP6)oxQ>r%(L0D)&_t?(-BwPs+}!QmQ|o ze!44sLT@?)LbyJ;5e8dKm3^7t?_z#GdwTJ|^qzm{IbkRVlrHI-zm#p3-U%0B9Yzo}ji$*%uO z-|%_A_y`>7FABn#ra8iy=D{glra~-6VN;lbyOfy@H()_Zv%=ycTrnP|h~NJTEPJ*d zqJVo@1V>bwin4OJSC`leaPIe_@nIlk?-Us1EOC7?1;%%{qD5-?h0z8IqCHfanal{e zXCJosAv^3O4!31jEyePtxXkQ6^jhqzl1U%s#N?a!)Iw}5FO6MJ{_{*&rF&=|od0XQ z)M$**K$??x{mZY(errTs%<*_76rgoaaOFGTd5fr02k{#1pteuTl*_11^XgCe(|ub3 zQyBoWeARur!`(6|OV&LDlV;{yG7vuVF>aEYGx?Cd_anU+pTcdXsK@8nN%RAsx;q^& z*POvu&gC~}I<@iY{!ieRZ86bLJIykD>3PX{VVgTMO7;4tQ?JHeuNAp2if;>vobzPX zE8(2Dr_U#cVluYM@!rrlj-r9_Rnd3xbx{)E72THDfUEi#lT9`fADQfi z|0-@%T7l?ds;t}eB0Obk)|(KOk7yyrg!M9(MKG2rvhSf(xII*|Z)0v-$jV>xT@B%! z4QV2t2>DDAEa#3s5>c5)*VFG543nccT^;S$|GObQ41qglUhL7R6I*TQ>-Wh43a9O( zzx_rlk_+gKzfr@#=Uv}QvwZBVp1v<+tcgykJFv8u#pmg$KALRL`XyPN^`nXPOKqq7 z&J^(($+oQd$zk378F^+=*S+!gCh2Xk8Dx7hB|ey}!66;vLklGtcO|Dga2~b6`4lg? zC`9tgSc;^xbw$T?BX`r%cZAqZHSKb@IFif6#!}Ip;c@(R<7irF6CGf$CB^i{YM5aV z^^H`W=h6+8;p^&V8p@?3~Tevc_E?k&d5wf64d!xBwlMHw+-TMf? zO=nkQA3qdL4aK5KY8$(0pIJ4-maL{>Q`Y~&&a98Z-&w<;Fw?{B@xo9;wc91$tfJj% z{>Kgq%ineT{7Bul#m=A={PbK?Tc+~cpWzUC$xk}Mx>~>+p2MWq#L?b`k1mdn&WDeV zWt~Sgw*ncBDX$P1wn^JLRA^+nE9NlZ$AR!v;M4$GK@^la2sKYH7AxPHp7 zVN1)RitMsP`kj8EnbE0afZC{4G+VCuQId-;emi|Z`6W`AHDs^$_0w;yyZBCezxjVvE0Gbz_Q~ zbIkZEAoITjB3&5skVgf0wM?xr^-c-d+Z~=nYH_Nbo8gKLY2Ul+9-GQeu+AmIM)|zK2i-cPVF*Y+#bnZ`)8^~A7o0K z>UpI)=uD`Y`90j1F##bnEnJ=HA97|o-pxoqclVnEym$>--l&(Z3P{W@4j1Pgg)9KBIzsIUTICd!WvSK6=kT(D&0( zH=^B_@bsTC8DHTTM|th-#0Js)egY>N55N2p#`CRcv>CI!lV0<85Ig(`L0z#l#Ne73NMY`iHk?m z;|HR>@e|Rt$;;6TNtGI|VJtQyhh>VO^L8u2Tk zefTR>HkIW$&ujB&xES-Hs^B$s`7>dN9CJi;hpR*wgw-7ssSbOVh%cY4Xj_(nm9$%}8wSwN7dxtNOi2dI0`8Gy2JIH_`5l&dDL_tkD>+8Zw$J zDwy$3tgcRz^Gu^yoD_>YC+EeF*3I(&yG$6(WopU&^q(!vDH(1m*@mP?5=<5?i<^7RH5!(-3+hxzP6qD??mT>VbR^Z)?2|WBiZ$Tn4{Zen{UA%=c|lPMRUaPNo=n#mZzf` zn$4osFwo!G<$+9D^9-+zj+o80H}kJuiGPM)Gi$<6nb~F)kFa;4Zw|v{$*-j7PA=q2ZJo=*KL~ zbJpB2FY9~P*6>5tpZqEPq1b+FoF{rweE%%IHu@pHA-dQkqlc60qfSZDXs*fC2a|%<6lPaVglmsi&Z_IsNja%OWz5WFY zwhx-S-%g=p)T^f>I|ZBDCs!rH3r#zjT(+>fz>7Umrf57&#br88-$l(_>k)Z9jd z@hY9&kfXxT^Jg-rP1`;YeUn)l?V%NpGrjE}cwG-h?WkCeve7j;@<(}doCxRS*lHKu zS7vVZ4{I`SgqfMg!pKZ%wwNcpnmL_T&+JRfW;U58wJc4d8L3^cwrGEB{(aYUg!Ap> zY+sHVqz^{Vq*u$*PT}R2x|5%IZ4{nR**uk=#xQ)BK9lyO@~KVjlP7&r^mr2AQ4dso^(}w(KZQ71U^#4@hKOdpOsU2S)o)fcM@SSf#OM1tB!r*v} zU7TNu%L~J(c)8D4slnH(ZPtcI;tg`lALW`m;GBnGM*p~SM`>2!=&JaR=z;k0s7>57 zniY49PQ;%?)sk`1hsoEv$G+8lyDWM&T`AvO7)4=LRE^@MFPvnR-q!PAA$O|!nn8aD zMCZu(_nF7DCY*`BkoWYL1HBQ7XPyi9WLU1}wn`>L%i<(!fa~oz#4p6T;)Zd-xPDwNZXDN+ zU$=9-eLOzy9&eBP#d(s!akXS@{H~oKv+XiJkgT8~+!8-RXY&S4?0Edd53~#^jHC=T z%JVYcLD<#rsR5#BLQ*=~k~A<0qDxebWpq!!iPoh*M3;qKqR0_7{NE8JQ1n1_0PFZO zjnXQd=Ip4Q8fgx!^RT+;>Krwq$~nqM4Rhp+TIVd9< zLcJV!hlg@pV?V*gp+JuR(vagwx+n8{x*_wEdAys_FEi`XVVM=_z|5MotC-Y2vo>wQ zc58UO)7P)Cm+3TCbA7ZWoeXR46zxiDM!(|d_F_4Ig}~rk_?OZ+lYQy7bhztDdbNw8 zX{%sLeJHq}PJWRM?Q;(Q=}EhYcPOeRzZZj74{Q7udmP9XXNO_2-SII67uKY2d|uQ( zz94E6UlQH#qIwWXIdwuU^ZND`_ntwL)~0`-dKH8$5k!;Ai6glsQ-L&bekuk zET4Hxdc@x9Gtsp$&_d~@nVjh*ng5cUncd01(X!+>w)qXbb71sF@?!Lu-gfg8+2aZ!9fR$>G&a-Sk0psNPP*_ z)pppXrrGykk5jP-zovOJ7l)fOm29+X8>-0|t7rCy8kyU$ldr4J7h>RJd1+;ew|A&F zX5uh+WInRT<@K{RS}I4$=$;%lx#if&4riI~-qSA6#v$amBOJ-(4eK*U(pi}eX}`?Z z=^L3LY3)pp^o~s1^!m)J{^bT~CiAq|Qg@z8{b*?6_Z|-&)@6y(x^iEyUw5) zuJG2clCUoVja^5^$Jv{AFQG(d>ltu6CzwY{WpFZm)L;X`$gR3n|jaQ zg@_D>j7&?5;2dv&hTIG@uNaq8&(sPpVCvezfx3z51I2c`1+aD-Lf3c`ANvzLb4#dz z>AS&|FWwz;$46YJ!xi$*vT>2<$+%+Fojop&TS_CliRnXFfU`g_|;~LWRskcLIx;X%<>!s)SCNQlUd8 zUud5Rp=IW1+9>l!`gCR^AGtn#7*BMceO7nLJMYX)5T^#4eb^%{nQ50^m3clrAGUOu z&3>;wnxY^01G5tw;Eqa1A46u}NTx%&p2JLJPb2#rK4jihd?J}24>zg)F&iGwOWujU zkN+2sieHO6$8F-)@msc&^^4z#$NB2AxLbTA9uVhC#`Crd<5tNAY|){3t%(0ml0PYk z$IaFfHi0X5)-y9%*XOrT`y+6bTrlCXFz08(dur6r@N4suRpAd$%tbaSRFH=@x6x)) zTG!@|7o#g7KF^s7GdQ$`gT4ttZvpXq4j)+u)?Ufk-3-?(qOT|ub+oVZv&^P2Iy2YK zmZ7fq!xxzs!lXf6{6n+` zPG?sYEMyj6IVswnehSBXTfOum1f~*(9b%<6Jw}myDqUmp#AFJrZXv;L{zttTXs#0z z3^KZ{GqCQ+KJADuB+?t4L(QC1eSU%M)R*fHE2J7It)8x6AAB9J&r^NB8J?g9udl1| zd7X$2lh3JkzoxvI6Yi(-x!K(-oJ^oT8%>!rTo=Spb@_1h)i6E8<9t3|T{T0u_#B-* zi{PhrGq@JR;E$=u%r^7fNc#ulsvoxW~%c$9PH>BtCu{lJH- zL>=^bw1Z&1m|i7sGI_|?EBT&sG)*^Bd*!FH$xXHJpZ=p`(2QRov71fPSuX0#Nv837 z@0zAlM@K;^Ge|Ck%>9!Lr0p1L|K|i#M(224P3Q3kygiuAK;_L_T%JBfXVpHvQ~ml- zI>TpcWn;V37P7N9@hBasmb#@k(Z5s!!ck|n0pXvfBR3t#qA-^qysJ0M3UqDjvoq_v)0bfwyl+ zz56nqQ5(H-Z@D^!ACu1RT1U42e)tXsH81IkKer*-WZ#8QnU&(ykI7i|=X9HRzk&U) z#H((iL;2M^{FQd|uo~`9_IOzJ10xN8KvZ_&B{%C}Sns0+<^_EX0UZIE9)xA?6t0Wf ztLn4W5%tuCl|u#RT0y;dA8zQ*=nAUr-1?@^H8n7HwkPx)9d^ElvwMx)(Vg^kn?%jk z@*uOJRFA*FpEfwx?^(q>HPvKjTz_a|2MVtGy07jH*F&@Nq(`wi%k^S>W%`7Wf%uYAkzVK^O-OP~Z z^%b>CbEm!Bmti!vGt#2eA=h9vuhXS+9lo|idJe?CAgxX*I)sO8=y+DITnqY&Zl>4` zR6kDSfo7{87wK*Mo@Q$`&DJ`-;@_V=!P7FMB6!F9O=4)uCf|)dfpO^R)m#2u)G(}p z4{wMngpIl{mQfVXkMh7g0`0vyMzmf}$s+EHeuPN>AoE(~8D8yKUrIx}j=io<|8bT_ z{T2u0l6yQgKS4Bqa7Vx4C#Sha@gx0k%w4JBThZ$@F*Elu*FApY!u-tnuHT_+i*)1+ z)$8^;48N8du_PT`E}Yq4qSj_{WQqFy3;uJw9B7!n;gQMx?6QW=!v-b>Hb1LxUdE69 zpsR6{F7YjFZX^BPhGaY&9Ae_ZP(PzT9`qwN+RKD2+ZU4$U43a%deeLKr>Y#N1N<}G z{#Y7^QF`ybps5c*YqnI1>IHQrqvb@uA+G`jOn zy?LqLJXT*df8Wp=;`)-W*W&qlFHlNX4+Wv)xtv~Ba>nGy^{i`(xnf=Q4m~Gx zdVngnC^dgBc;;zVddTG41Ms4K`rS_YFHJ5}sb81gK<#}$ZwY5lU(waqg*^@s*(Oj7 zd<|RqhGun1dR15f-(5~Wz8c@RCar58LsReYEqA}CcRbRhx|w>AzNM(&>|Xzd**%Em zJxPoGZ!qHow|g@DiKPh8(E_;fJ9*N_@jkD?&^xLvKaDkUKOU=zckz(8=emFg!I4!z3&WL`}kE~tFPy) zu5*6C9j(aE7I*#yV4vsn0so})(%*Q@4e8=^LAofNm@ZYve=BZ$M}hsF30aG1I2X}W z%rVPgjtQ)@>sf)U3N#PiG{8WGk#Dddp8uOg!pvjS!L`&v420@cn1c5D|=q=xnAmg>Cv5AXJ_7# zt-c1;F@+zi+m<~xWF1f7NGtH0w?XFeV^4EC(UVk#`!V7>61;j+!qktPrjq@PFJGc- zNIuGE4zYg$J_SR1%XH>0wlDNK8}W~+j4s0EU7w!N=V$(kxhJpc>+7mg7?jpYC*x`t zm;t;peKGyfwFi!Uj2-7V>r>vQcMs!KOG8HML{ns?!{EaG=ny*NENvT+t?pr)f56;#sXMniyKf|my8yQLsR+AnWEh!e)0=DZ@%Owzv2%lwy5SlgY|vvN$TNx8=LvM zb8iR-ti_Ms%b%3?WEFx9<}mr}h^Kuu&D?Y++>@_--N#i#|5C2=ocJO6=W26Q=F--U zz+imJhj!;fyWupu;xc=($&ZuAbjCEL`+S`r>?VGHa@Jp(Tc`_S9{XGnP9;lhIhn7Y zWPzOhD=~ZqPcxPFX_AOIp63~T)<$ph)II2Hb^ZApzOS3CWxRK{Oh44`Ci~~$4X+ia zDvIR|^y#;C%Aa6yZN1?s+R+rY#9cmRO3NdZ<9F!mzMe8SFOPAK%;1DG+t1p!vB8ag z;v)abJpcL>a~VeSmqU4<0iN+b>GMwG>F~ZY>w;P9Bx1IAc5Tx;#q`oxsvG@=#X?OH z^=_W59FJC5wthLD>fH1vmi3L38_Pbs>lSPV33-_6=0=KC8UPooN4s@) z$UXNb|MH+0!}?0{pZBNLSYcC>M?at#7)75npAT7=ZsuDK_%}{d6XaAcTT%Pnr)D@!tHa?w2(;iNsJsgSG_&{#-29)pV=xBO3+q^njFMppW7oX-# z$2iZyV#~+;WiM*C-k#%bn8|+5t!H|z+%u0HG^aB^!8`6V4`r)&x586B%iN4{>6)}J z{HOzE*7LH@M}1r}-H~33gFleCZ!nAr`1Nev(krs4CoydIBr8p`{2ng4F)bkPygb>1 z3I1C>nFH#VKRnD%8^Y_`(}oPdZO)Q!ZWOHYPj29 zuz)Z1icDq|;)!djug?}8HnPk8*^?4j(zUFveE5+D@Mj&|JMikic1}2TtO{4^ z-7ZIQT}4c40NHEq+3yg&k288*F8@4~v<80S{?JA4)F!%~((DR8^&*Ph#4OlcVPHiCM|~q@wn=A5Yer0`jdrH4EgKvyyJ&dt0?pTRTG9$~!xY@%W!e)Ik0eA9<6#;xb05x!RaUdBwi z?0GeH)ai}Per-oL+yg&9j4%CCj=DfTxmInoQO)y<*!~N@xr>L{&QI>3w_i^`x{2pm zCZ}JdK^Q1ax54>%&`usb2`&azw1i!^#|3cq% zI$t>sLhzApfzFi9Z^$tlV+kKuZ9JrN{?m8`1!qO6aLLmmn{=luNY`R;HIb^AZ*7|PtK;?6YQbH4x2#lL@Nr|DA9 za$tXzGNBvcQG{N8~wSn&46D>@B6jB%Z27}e`EI1Qaa%E)C)Vzd^M{A3Vn_a zguKa3;Rc;tmDTO_@tqyjIzwPgb6`bV;c$l&T3NPP5bAKV{^k21Tvfe3>+^=X&0d#V zX4mQ6yxK0zQ|;ri_R9W_%TSKVpR!~l3A>DJQaq3LA(CN+XtC&hP>(>a=l~nsDX&~7 z?tB+Ml!FfU9n+)k;!~@zNdEKXWWqL@Nxd~Zc`-7QSB9nAz!0v&ZmmZ>D`?ah4zT=E7b3w ztB-n{=GZjdYG(cSs_|vXDL!+H>Ky8%bLb2H@+&##T-VZMK(bXf`aA!6hSlcwH;bo< z{PRk6QYn*utEIi&tL$l|U-70Z%u(K^PjfHy>0e5U$X&i%rdLSRET!+g0>q)3%DI8L zi?6B--<8?*JKO1>&1yfQ=eVgl{)4bYEc#Xsx==)#ufOw4*vAwdYa`_C{l%H?>ZG=6 z^cS)BwZ-;(byb%1dU^OveDA4lf7=v=m*kyKL|=*Zqs5}nD5gGCtLx$6WxipH)7k4V zQSxIp*HkG+OtHP*-D|&#|@pd(RVR&Z_*yld;3YNh-$HG0|^Oa}P z|4gRH5>t-DH2!w7`%Sdo2f5n=L)r&Z`U@9-3I}>F-W{F{K0iD{&=_|AWImLFrQW{b1cx@__(S0i4n z2_&L5WT&G)ALQMB4zXPAb-yTliRb=yQK=Cx&<(aURc-VWe|ki`x;*++jr4&te!~oc zhUS+(tWGLNzjalpNC$GeGc7^?Q6QQtj~}OFwZDI%qqA(S8fzlks4Ek$Ne}u^+J^l- z!$&?!9d)PqcBQDGi}CtJ+2qwaTndW>h4{@YM1?%E=?lymIc?LzVI6{7)4e8>nVB#D z>@NRoA^)tShQHG!nj6ecyi`ViKIHB{zBEe~dK#{z|4@(AW%{&lgYi{W12va{c4dd7 zAb$%@_1>(4Kf)p-9ef4oJ&T(Sd~dj!#oYk`u1GWZfT;2aBqMtpM?JZDeYs}~=hK?+ z?8Rpe(v$S1jC`@@{U^`(etM^fZu2slnj4}&Y1_9ux3%^RERbJLp*tEt_uf&?)J(lz zoqsJ)$8i;3n?pXehfS_G_xUS3l*hV*eMH5M;(1H)ys`6pQg%^CrDi@gH0VZmIUmg9 zGIuyjrgDadJSfxr!?U-|wt^MuP}$1}v0}8jC==9vdk!+cV~D(Si0Qv$`OL{?e9bjaZW;dfM>9YUR6CKjr%6YHpx*MeXtD^QJ1P2FHN9AGKJ^g9 zqFD5citrG%+xa4OF0|($ATWDfd@tI$$ zGl$EYx|m4uGTg34SV$i;-T97*PN$!+)eh>;W^$+Mp8ea{>Xp&Eu+LU-k{4wY_4v;x z#Hp&D^#|4L6?6!e^Nin&f3txG@<4a$>CWMaJ_FG>EOXzT%wv}$&rT3umb^q+R12O| zib^qmItXJ)Ih*u`Dt(eHg454PM!TlkJiY|lv?W5B5G={zUvA%a&(( zu9v9c*QqVHswRI@LH#Tf-ELag7O2Pu5oskY>_WK4OjzhBF=+sMe1~nm2CsiAyu*if zhV;J$J8tg`UxItqcZOBmxze=US491sUne-on{eWnRU3_U3^n3A8}XUV{6;O{OYQxJ zU3vJvYR(bqZF17$a;?kNSQp8j{}$VK$z+y@?Gst;yYlTOKE4C4ln?Io7c6Owr(X`K zPFlim^1(8ys_LhEXt~Pi-6*ZDFGqu1Ho1k?v%2ZRjnzn7e-V^N7TnB2FywTg9y!S+e_hp2g*l#zl9er;%R}UVpAEbA@@3Z*@ zi=InXevzJ~GFZi9?DG$E6E?EZMSSNJIp@de{6tQTo%}kf!FN{hc}bPf z)lRwqG%1hjv``wWrSiKEWq8j=+>>VNpl-b92#C_Rta6*@;DmqoVs&~^4B4IGep-Vn z@QPX(i+Yf4sJyt+9lp)3)Iu#}=dX(0Z&7H!%_jSXU-{7eZ1SM5{sjX)Cbl0IjrLP^ z?{czR<)q6!^$YPEWBJn|V$OT;x|Z;`r^KM_oc_j8Mh;p8zI2JZ!W&aTOq9ca;`}2 z>lIUpYVfT$sQ`0ALH|tpLO*($3DXTn)W>Xvu4lFLMST4-J~a}p{=>bW;6G2so8_NJ zXhzNt`PEA$l1iZpWp1;iy(xr)^wCd;ORd5B?Sj0V;C;@GUiNN!riJ**f~u2ZXOW40 z>9x@*2t}64F9!v6@UCsriZY^2POq1`iiDCX?-EfJ2wfAeZ`0pqSDOo*;4VDfInhVC3cM*&_}crFSis2qJL4$A0tMMG?n5b@%~*HNej<^t?2Lc9$avdD0@yw zc6<_JurAs0sjqA&d#d}h&bN}Tz?(4zSEwG(g>#;i5$;QGg!L3*GgrcrFIK&r>*@Xv zQhZDY!tP{%3cQEd{yO_>#6BN#vbXW2<_+LDr-|#+?B|@7?3I81nyi$0uIE?xB!6Q+ zBh^3wQSAzIBJE9X~1RkJXVd)ZOUe z4!q4SU!bY23BSJ^hFrvzTYUdZeBUYOT+G|dka-PIJ@in?{ts&NvW&MefBBR%tjkY6 z=?tG@qm9%>uQ)?n&ma)Lu)j^R=v6wTmx$qW@R#FR>QFd+w%>fsS8MR6xAC8s@~Oww zKUv*5lr&v28N|0{g{C{03+P!}%$Y;vo-vznRRFTj>M**rDC zgtuv7SF(&}*-qPjSdJMeg>3!c{fCI>U!>PW%h=@iY;>p3x3SILeCl=||E#+Hk>Aw$ zF1F`(l(#(#bg zp789~l;2l^&zF_kUmgADCvL-C&Q-gQf)>0le{YSad{$I^M4nzzu6Z+@<3{=9HS(jY z*kDo5cs^Ye*E+)j;_EeXrNU0Lu#?Qszvaj4Ni?zURT{r>B1;RQaCnA3fz8 zDLXdUMYCSq-;zATZ`LststPW&I@^BO->sWooi?PvZR@UN�T6zVFTqRte3ANN>Ug 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 YLzSP#PzSxsd$=}c>yBfHIeWSNH>O*-0RR91 literal 0 HcmV?d00001 diff --git a/src/cli.rs b/src/cli.rs index 84cd014..6d1645a 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -3,6 +3,8 @@ use std::num::ParseFloatError; use std::path::PathBuf; use std::time::Duration; +use crate::integration::NotificationType; + #[allow(clippy::struct_field_names)] #[derive(Debug, Args, PartialEq, Eq)] pub struct RunArgs { @@ -18,6 +20,11 @@ pub struct RunArgs { /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub lock_warning: Option, + /// Type of notification to get as lock warning. + /// - For audio you need aplay installed. + /// - For system you need notify-send installed. + #[arg(short('a'), long, value_enum)] + pub lock_warning_type: Vec, /// Enable the tcp api. Enables the `Status` command and other apps /// to interface using the break-enforcer library. The API only /// accepts connections from the same system. @@ -64,10 +71,7 @@ pub enum Commands { impl Commands { pub fn needs_sudo(&self) -> bool { - match self { - Commands::Status { .. } => false, - _ => true, - } + !matches!(self, Commands::Status { .. }) } } diff --git a/src/integration.rs b/src/integration.rs index 5d2ead0..2f7833a 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -2,6 +2,7 @@ use std::sync::{mpsc, Arc, Mutex}; use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant}; +use color_eyre::eyre::Context; use color_eyre::Result; mod file_status; @@ -32,14 +33,19 @@ pub struct Status { integrator: Option>>, } +pub(crate) struct NotifyConfig { + pub(crate) lock_warning: Option, + pub(crate) lock_warning_type: Vec, + pub(crate) state_notifications: bool, +} + fn integrate( rx: &mpsc::Receiver, mut file_status: Option, mut api_status: Option, - state_notifications: bool, idle: Arc>, break_duration: Duration, - lock_warning_notification: Option, + notify: NotifyConfig, ) -> Result<()> { let mut timeout = Duration::MAX; let mut state = State::Waiting; @@ -67,38 +73,48 @@ fn integrate( if let Some(status) = &mut api_status { status.update_msg(&msg); } - notify_if_needed( - &state, - /* TODO: merge these bools into a struct called "notifyable events" */ - lock_warning_notification, - state_notifications, - state_changed, - msg, - ); + notify_if_needed(&state, ¬ify, state_changed, msg); } } -fn notify_if_needed( - state: &State, - lock_warning_notification: Option, - state_notifications: bool, - state_changed: bool, - msg: String, -) { - match *state { - State::Work { next_break } => { - if let Some(before_break) = lock_warning_notification { - if next_break.duration_until() < before_break { - let msg = format!("locking in {}", fmt_dur(before_break)); - notification::notify_all_users(&msg); +#[derive(Debug, Clone, clap::ValueEnum, Eq, PartialEq)] +pub(crate) enum NotificationType { + System, + Audio, +} + +impl NotificationType { + fn notify(&self, msg: &str) -> color_eyre::Result<()> { + match self { + NotificationType::System => { + notification::notify(msg).wrap_err("Could not send system notification")? + } + NotificationType::Audio => { + notification::beep().wrap_err("Could not play audio notification")? + } + } + Ok(()) + } +} + +fn notify_if_needed(state: &State, notify: &NotifyConfig, state_changed: bool, msg: String) { + if let State::Work { next_break } = *state { + if let Some(before_break) = notify.lock_warning { + if next_break.duration_until() < before_break { + let msg = format!("locking in {}", fmt_dur(before_break)); + for notify_type in ¬ify.lock_warning_type { + if let Err(report) = notify_type.notify(&msg) { + error!("Failed to send lock warning: {report}") + } } } } - _ => (), } - if state_notifications && state_changed { - notification::notify_all_users(&msg); + if notify.state_notifications && state_changed { + if let Err(report) = notification::notify(&msg) { + error!("Failed to send state change notification: {report}") + } } } @@ -127,8 +143,7 @@ impl Status { pub(crate) fn new( file_integration: bool, tcp_api_integration: bool, - notifications: bool, - lock_warning_notification: Option, + notify: NotifyConfig, idle: Arc>, break_duration: Duration, ) -> Result { @@ -155,15 +170,7 @@ impl Status { let (tx, rx) = mpsc::channel(); let integrator = thread::spawn(move || { - integrate( - &rx, - file_status, - api_status, - notifications, - idle, - break_duration, - lock_warning_notification, - ) + integrate(&rx, file_status, api_status, idle, break_duration, notify) }); Ok(Self { @@ -214,6 +221,6 @@ fn fmt_dur(dur: Duration) -> String { if seconds > 60 { fmt_mm_hh(dur) } else { - return format!("{seconds}s"); + format!("{seconds}s") } } diff --git a/src/integration/notification.rs b/src/integration/notification.rs index e8ec63a..df9af95 100644 --- a/src/integration/notification.rs +++ b/src/integration/notification.rs @@ -1,20 +1,72 @@ -use std::process::Command; +use std::io::Write; +use std::process::{Command, Stdio}; -pub(crate) fn notify_all_users(text: &str) { - let users = Command::new("loginctl").output().unwrap().stdout; - let users = String::from_utf8(users).unwrap(); - let users = users +use color_eyre::eyre::{eyre, Context}; +use color_eyre::{Result, Section}; + +struct User { + id: String, + name: String, +} + +/// on the first failure this returns +fn all_users() -> Result> { + let users = Command::new("loginctl") + .output() + .wrap_err("could not run loginctl")? + .stdout; + let users = String::from_utf8(users).wrap_err("loginctl could not be parsed as utf8")?; + users .lines() .filter(|x| x.starts_with(' ')) .map(|x| x.split(' ').filter(|x| !x.is_empty())) - .map(|mut x| (x.nth(1).unwrap(), x.next().unwrap())); + .map(|mut x| { + Ok(User { + id: x + .nth(1) + .ok_or(eyre!("no user id in loginctl output"))? + .to_owned(), + name: x + .next() + .ok_or(eyre!("no user name in loginctl output"))? + .to_owned(), + }) + }) + .collect() +} - for (uid, username) in users { - notify(username, uid, text); +pub(crate) fn beep() -> Result<()> { + let sound1 = include_bytes!("../../assets/new-notification-on-your-device-by-UNIVERSFIELD.wav"); + // let sound2 = include_bytes!("../../assets/notification-1-by-UNIVERSFIELD.wav"); + + for User { id, name } in all_users().wrap_err("Could not get logged in users")? { + let command = format!("sudo -u {name} XDG_RUNTIME_DIR=/run/user/{id} aplay"); + let aplay = Command::new("sh") + .arg("-c") + .arg(command) + .stdin(Stdio::piped()) + .spawn() + .wrap_err("Could not spawn shell") + .with_note(|| format!("as user: {id}:{name}"))?; + let mut stdin = aplay.stdin.expect("is set to piped"); + stdin + .write_all(sound1) + .wrap_err("Could not pipe to aplay")?; } + + Ok(()) } -fn notify(username: &str, uid: &str, text: &str) { - let command = format!("sudo -u {username} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{uid}/bus notify-send -t 5000 \"{text}\""); - Command::new("sh").arg("-c").arg(command).output().unwrap(); +pub(crate) fn notify(text: &str) -> Result<()> { + for User { id, name } in all_users().wrap_err("Could not get logged in users")? { + let command = format!("sudo -u {name} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{id}/bus notify-send -t 5000 \"{text}\""); + Command::new("sh") + .arg("-c") + .arg(command) + .output() + .wrap_err("Could not run notify-send") + .with_note(|| format!("as user: {id}:{name}"))?; + } + + Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index a3e8021..1be6613 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -87,7 +87,7 @@ impl Api { .parse::() .map_err(|error| Error::IncorrectResponse { packet, error })?; - return Ok(Duration::from_secs(seconds_idle)); + Ok(Duration::from_secs(seconds_idle)) } pub fn status(&mut self) -> Result { @@ -109,6 +109,6 @@ impl Api { let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE let status = String::from_utf8(packet.to_vec()).map_err(Error::CorruptResponse)?; - return Ok(status); + Ok(status) } } diff --git a/src/run.rs b/src/run.rs index 8d5784b..120f764 100644 --- a/src/run.rs +++ b/src/run.rs @@ -6,9 +6,9 @@ use color_eyre::{Result, Section}; use crate::check_inputs::{InactivityTracker, InputResult, TrackResult}; use crate::cli::RunArgs; -use crate::config; use crate::integration::Status; use crate::{check_inputs, watch_and_block}; +use crate::{config, integration}; use std::{sync::mpsc::Receiver, thread}; pub(crate) fn run( @@ -16,6 +16,7 @@ pub(crate) fn run( work_duration, break_duration, lock_warning, + lock_warning_type, status_file, tcp_api, notifications, @@ -37,17 +38,15 @@ pub(crate) fn run( let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); let mut inactivity_tracker = InactivityTracker::new(recv_any_input2, break_duration); + let notify_config = integration::NotifyConfig { + lock_warning, + lock_warning_type, + state_notifications: notifications, + }; let idle = inactivity_tracker.idle_handle(); - let mut status = Status::new( - status_file, - tcp_api, - notifications, - lock_warning, - idle, - break_duration, - ) - .wrap_err("Could not setup status reporting")?; + let mut status = Status::new(status_file, tcp_api, notify_config, idle, break_duration) + .wrap_err("Could not setup status reporting")?; loop { status.set_waiting(); From d9140319f2768cb4d1c14b3f3cc4197896358a96 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Fri, 26 Jul 2024 14:58:29 +0200 Subject: [PATCH 66/76] increment version --- Cargo.toml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index c094499..4068953 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer" -version = "0.3.0" +version = "0.3.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/README.md b/README.md index d9b1631..e65ce36 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ https://github.com/evavh/break-enforcer-s/releases/latest/0.2.0/break-enforcer-s or simply: ``` -curl -L https://github.com/evavh/break-enforcer-s/releases/download/0.2.0/break-enforcer-s_x86_64 --output break_enforcer +curl -L https://github.com/evavh/break-enforcer-s/releases/latest/download/break-enforcer_x86_64 --output break_enforcer ``` (as with any linux program you will still need to make it executable using `chmod From fb370357c993ae5290fa4346bb658d0f29c17123 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 30 Jul 2024 18:56:27 +0200 Subject: [PATCH 67/76] fix installer not setting up lock warnings --- Cargo.lock | 2 +- src/install.rs | 4 ++++ src/integration.rs | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 74f1dfe..23027e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,7 +128,7 @@ dependencies = [ [[package]] name = "break-enforcer" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "clap", diff --git a/src/install.rs b/src/install.rs index 565a7d6..ef9d7ee 100644 --- a/src/install.rs +++ b/src/install.rs @@ -45,6 +45,10 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { args.push("--lock-warning".to_string()); args.push(fmt_dur(warn_duration)); } + for warn_type in &run_args.lock_warning_type { + args.push("--lock-warning-type".to_string()); + args.push(warn_type.to_string()); + } if run_args.status_file { args.push("--status-file".to_string()); } diff --git a/src/integration.rs b/src/integration.rs index 2f7833a..bad659e 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -1,3 +1,4 @@ +use std::fmt::Display; use std::sync::{mpsc, Arc, Mutex}; use std::thread::{self, JoinHandle}; use std::time::{Duration, Instant}; @@ -83,6 +84,15 @@ pub(crate) enum NotificationType { Audio, } +impl Display for NotificationType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + NotificationType::System => f.write_str("system"), + NotificationType::Audio => f.write_str("audio"), + } + } +} + impl NotificationType { fn notify(&self, msg: &str) -> color_eyre::Result<()> { match self { From 0e54afc88a417f51a1e4e6a516577dd67ba42a53 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Tue, 30 Jul 2024 18:56:50 +0200 Subject: [PATCH 68/76] increment version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 4068953..5e5f052 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "break-enforcer" -version = "0.3.1" +version = "0.3.2" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From 3cc18016c8293e5b323b6a3394e8ced6d8562b06 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 4 Aug 2024 12:48:27 +0200 Subject: [PATCH 69/76] fix audio notification firing continuesly --- Cargo.lock | 290 ++++++++++++++++++--------------------------- Cargo.toml | 28 ++--- src/integration.rs | 17 +-- src/run.rs | 1 + 4 files changed, 141 insertions(+), 195 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 23027e0..ed4dd90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "anstream" -version = "0.6.14" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ "anstyle", "anstyle-parse", @@ -34,36 +34,36 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anstyle-parse" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.3" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "3.0.3" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -107,9 +107,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ "serde", ] @@ -128,7 +128,7 @@ dependencies = [ [[package]] name = "break-enforcer" -version = "0.3.1" +version = "0.3.2" dependencies = [ "base64 0.22.1", "clap", @@ -136,7 +136,7 @@ dependencies = [ "dialoguer", "evdev", "inotify", - "itertools 0.12.1", + "itertools 0.13.0", "ron", "serde", "service-install", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.98" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" [[package]] name = "cfg-if" @@ -161,9 +161,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "4.5.4" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" dependencies = [ "clap_builder", "clap_derive", @@ -171,9 +171,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" dependencies = [ "anstream", "anstyle", @@ -183,9 +183,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" dependencies = [ "heck", "proc-macro2", @@ -195,9 +195,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "color-eyre" @@ -228,9 +228,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "console" @@ -242,7 +242,7 @@ dependencies = [ "lazy_static", "libc", "unicode-width", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -301,9 +301,9 @@ dependencies = [ [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encode_unicode" @@ -318,7 +318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -383,13 +383,19 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "home" version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -422,9 +428,9 @@ dependencies = [ [[package]] name = "is_terminal_polyfill" -version = "1.70.0" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" @@ -437,18 +443,18 @@ dependencies = [ [[package]] name = "itertools" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" @@ -464,15 +470,15 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" -version = "2.7.2" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" @@ -485,22 +491,23 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.11" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" dependencies = [ + "hermit-abi", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -582,9 +589,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -631,7 +638,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.5.0", + "bitflags 2.6.0", "serde", "serde_derive", ] @@ -648,27 +655,27 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "serde" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", @@ -727,7 +734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -748,9 +755,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.65" +version = "2.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" dependencies = [ "proc-macro2", "quote", @@ -759,9 +766,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.30.12" +version = "0.30.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732ffa00f53e6b2af46208fba5718d9662a421049204e156328b66791ffa15ae" +checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" dependencies = [ "cfg-if", "core-foundation-sys", @@ -780,30 +787,31 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys", ] [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -841,9 +849,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "tokio" -version = "1.37.0" +version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "libc", @@ -851,14 +859,14 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", @@ -940,15 +948,15 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-width" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uzers" @@ -1001,7 +1009,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ "windows-core", - "windows-targets 0.52.5", + "windows-targets", ] [[package]] @@ -1010,16 +1018,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -1028,129 +1027,72 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "wyz" @@ -1163,6 +1105,6 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index 5e5f052..cf43a76 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,19 +6,19 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -base64 = "0.22.0" -clap = { version = "4.5.2", features = ["derive"] } -color-eyre = "0.6.2" -dialoguer = { version = "0.11.0", features = ["fuzzy-select"] } -evdev = { version = "0.12.1" } -inotify = "0.10.2" -itertools = "0.12.1" +base64 = "0.22" +clap = { version = "4.5", features = ["derive"] } +color-eyre = "0.6" +dialoguer = { version = "0.11", features = ["fuzzy-select"] } +evdev = { version = "0.12" } +inotify = "0.10" +itertools = "0.13" ron = "0.8.1" -serde = { version = "1.0.197", features = ["derive"] } -sudo = "0.6.0" -thiserror = "1.0.58" +serde = { version = "1", features = ["derive"] } +sudo = "0.6" +thiserror = "1" -service-install = { version = "0.4.2" } -tracing = "0.1.40" -tracing-subscriber = "0.3.18" -tokio = { version = "1.37.0", features = ["rt", "time", "macros"] } +service-install = { version = "0.4" } +tracing = "0.1" +tracing-subscriber = "0.3" +tokio = { version = "1.37", features = ["rt", "time", "macros"] } diff --git a/src/integration.rs b/src/integration.rs index bad659e..aa63cc6 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -37,6 +37,7 @@ pub struct Status { pub(crate) struct NotifyConfig { pub(crate) lock_warning: Option, pub(crate) lock_warning_type: Vec, + pub(crate) last_lock_warning: Instant, pub(crate) state_notifications: bool, } @@ -46,7 +47,7 @@ fn integrate( mut api_status: Option, idle: Arc>, break_duration: Duration, - notify: NotifyConfig, + mut notify: NotifyConfig, ) -> Result<()> { let mut timeout = Duration::MAX; let mut state = State::Waiting; @@ -74,7 +75,7 @@ fn integrate( if let Some(status) = &mut api_status { status.update_msg(&msg); } - notify_if_needed(&state, ¬ify, state_changed, msg); + notify_if_needed(&state, &mut notify, state_changed, msg); } } @@ -107,14 +108,16 @@ impl NotificationType { } } -fn notify_if_needed(state: &State, notify: &NotifyConfig, state_changed: bool, msg: String) { +fn notify_if_needed(state: &State, notify: &mut NotifyConfig, state_changed: bool, msg: String) { if let State::Work { next_break } = *state { if let Some(before_break) = notify.lock_warning { if next_break.duration_until() < before_break { - let msg = format!("locking in {}", fmt_dur(before_break)); - for notify_type in ¬ify.lock_warning_type { - if let Err(report) = notify_type.notify(&msg) { - error!("Failed to send lock warning: {report}") + if notify.last_lock_warning.elapsed() > before_break { + let msg = format!("locking in {}", fmt_dur(before_break)); + for notify_type in ¬ify.lock_warning_type { + if let Err(report) = notify_type.notify(&msg) { + error!("Failed to send lock warning: {report}") + } } } } diff --git a/src/run.rs b/src/run.rs index 120f764..6e18fb4 100644 --- a/src/run.rs +++ b/src/run.rs @@ -41,6 +41,7 @@ pub(crate) fn run( let notify_config = integration::NotifyConfig { lock_warning, lock_warning_type, + last_lock_warning: Instant::now(), state_notifications: notifications, }; From dbf7180124143efab883996ec1ac23ea15670767 Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 4 Aug 2024 12:53:19 +0200 Subject: [PATCH 70/76] fix outdated nightly compiler + port to new stabalized api --- rust-toolchain.toml | 2 +- src/main.rs | 1 - src/watch_and_block.rs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 208a88e..bb02724 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2024-03-01" +channel = "nightly-2024-08-03" profile = "default" diff --git a/src/main.rs b/src/main.rs index 15c7591..49e88cd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,5 @@ #![feature(thread_sleep_until)] #![feature(iter_intersperse)] -#![feature(slice_flatten)] #![feature(io_error_more)] #![feature(iter_collect_into)] diff --git a/src/watch_and_block.rs b/src/watch_and_block.rs index 2964c1a..122b6b9 100644 --- a/src/watch_and_block.rs +++ b/src/watch_and_block.rs @@ -57,7 +57,7 @@ impl fmt::Display for InputId { self.version.to_be_bytes(), ]; - let base64 = general_purpose::URL_SAFE_NO_PAD.encode(data.flatten()); + let base64 = general_purpose::URL_SAFE_NO_PAD.encode(data.as_flattened()); f.write_str(base64.as_str()) } } From 0ca91cbfa1ac1c1e5ca31b52a741ca4a3cacce7a Mon Sep 17 00:00:00 2001 From: dvdsk Date: Sun, 4 Aug 2024 18:08:55 +0200 Subject: [PATCH 71/76] switch to detailed tui installer --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/install.rs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ed4dd90..3fddd84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -684,9 +684,9 @@ dependencies = [ [[package]] name = "service-install" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f047ec54d358ae080f9e06ba38aa80ec5767d2b7552e7ad385e9fb751e4571ac" +checksum = "349114fde09e061213f976added84f0de1cf2a84a68e2a48bd48fe842ff01026" dependencies = [ "dialoguer", "home", diff --git a/Cargo.toml b/Cargo.toml index cf43a76..4e1643b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ serde = { version = "1", features = ["derive"] } sudo = "0.6" thiserror = "1" -service-install = { version = "0.4" } +service-install = { version = "0.4.3" } tracing = "0.1" tracing-subscriber = "0.3" tokio = { version = "1.37", features = ["rt", "time", "macros"] } diff --git a/src/install.rs b/src/install.rs index ef9d7ee..d534b01 100644 --- a/src/install.rs +++ b/src/install.rs @@ -56,7 +56,7 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { args.push("--tcp-api".to_string()); } - let name = env!("CARGO_CRATE_NAME").replace('_', "-"); + let name = env!("CARGO_CRATE_NAME").replace("_", "-"); let steps = install_system!() .current_exe()? .on_boot() @@ -67,7 +67,7 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { .prepare_install() .wrap_err("Could not set up installation")?; - tui::install::start(steps).wrap_err("Failed to run install wizard")?; + tui::install::start(steps, true).wrap_err("Failed to run install wizard")?; Ok(()) } From a5be0f8acc43f546d36b60af41fba63182434d63 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Fri, 11 Oct 2024 11:50:25 +0200 Subject: [PATCH 72/76] Set rustfmt line length to 80 and autoformat --- rustfmt.toml | 1 + src/check_inputs.rs | 17 ++++++++++++---- src/cli.rs | 8 +++++--- src/config.rs | 21 +++++++++++-------- src/install.rs | 3 ++- src/integration.rs | 36 ++++++++++++++++++++++++--------- src/integration/file_status.rs | 4 +++- src/integration/notification.rs | 18 ++++++++++++----- src/integration/tcp_api.rs | 8 ++++++-- src/lib.rs | 12 +++++++---- src/main.rs | 17 ++++++++++------ src/run.rs | 26 +++++++++++++++--------- src/status.rs | 5 ++++- src/tcp_api_config.rs | 3 ++- src/watch_and_block.rs | 29 +++++++++++++++++--------- src/wizard.rs | 7 +++++-- 16 files changed, 148 insertions(+), 67 deletions(-) create mode 100644 rustfmt.toml diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..df99c69 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1 @@ +max_width = 80 diff --git a/src/check_inputs.rs b/src/check_inputs.rs index e170f17..7c1f226 100644 --- a/src/check_inputs.rs +++ b/src/check_inputs.rs @@ -2,7 +2,9 @@ use std::{ fs::{self, File}, io::{self, Read}, sync::{ - mpsc::{self, channel, Receiver, RecvTimeoutError, Sender, TryRecvError}, + mpsc::{ + self, channel, Receiver, RecvTimeoutError, Sender, TryRecvError, + }, Arc, Mutex, }, thread, @@ -25,12 +27,17 @@ pub enum TrackResult { } impl InactivityTracker { - pub fn new(input_receiver: Receiver, break_duration: Duration) -> Self { + pub fn new( + input_receiver: Receiver, + break_duration: Duration, + ) -> Self { let idle_since = Arc::new(Mutex::new(Instant::now())); let (tx, rx) = mpsc::channel(); { let idle_since = idle_since.clone(); - thread::spawn(move || watch_activity(&input_receiver, break_duration, idle_since, tx)); + thread::spawn(move || { + watch_activity(&input_receiver, break_duration, idle_since, tx) + }); } Self { @@ -77,7 +84,9 @@ fn watch_activity( loop { match input_receiver.recv_timeout(break_duration) { Ok(Ok(())) => *idle_since.lock().unwrap() = Instant::now(), - Err(RecvTimeoutError::Timeout) => reset_notify.send(Ok(())).unwrap(), + Err(RecvTimeoutError::Timeout) => { + reset_notify.send(Ok(())).unwrap() + } Err(RecvTimeoutError::Disconnected) => unreachable!(), Ok(err @ Err(_)) => { let err = err.wrap_err("test"); diff --git a/src/cli.rs b/src/cli.rs index 6d1645a..f8dcfd4 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -20,7 +20,7 @@ pub struct RunArgs { /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub lock_warning: Option, - /// Type of notification to get as lock warning. + /// Type of notification to get as lock warning. /// - For audio you need aplay installed. /// - For system you need notify-send installed. #[arg(short('a'), long, value_enum)] @@ -144,11 +144,13 @@ pub(crate) fn parse_colon_duration(arg: &str) -> Result { seconds += 60.0 * minutes; return Ok(seconds); }; - seconds += 60.0 * minutes.parse::().map_err(|e| minute_err(e, minutes))?; + seconds += + 60.0 * minutes.parse::().map_err(|e| minute_err(e, minutes))?; if hours.is_empty() { return Ok(seconds); }; - seconds += 60.0 * 60.0 * hours.parse::().map_err(|e| hour_err(e, hours))?; + seconds += + 60.0 * 60.0 * hours.parse::().map_err(|e| hour_err(e, hours))?; Ok(seconds) } diff --git a/src/config.rs b/src/config.rs index 1fc97a9..8eb6af9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -37,22 +37,27 @@ pub(crate) fn read(custom_path: Option) -> Result> { } }; - let s = String::from_utf8(bytes).wrap_err("Corrupt config, contained non utf8")?; + let s = String::from_utf8(bytes) + .wrap_err("Corrupt config, contained non utf8")?; ron::from_str(&s).wrap_err("Could not deserialize to list of devices") } -pub(crate) fn write(to_lock: &[InputFilter], custom_path: Option) -> Result<()> { - let data = ron::ser::to_string_pretty(&to_lock, ron::ser::PrettyConfig::default()) - .wrap_err("Could not serialize list of devices to toml")?; +pub(crate) fn write( + to_lock: &[InputFilter], + custom_path: Option, +) -> Result<()> { + let data = + ron::ser::to_string_pretty(&to_lock, ron::ser::PrettyConfig::default()) + .wrap_err("Could not serialize list of devices to toml")?; let path = custom_path.unwrap_or_else(setup_default_path); if let Some(dir) = path.parent() { if !dir.is_dir() { - return Err( - eyre!("Dir does not exist!").with_note(|| format!("dir: {}", dir.display())) - ); + return Err(eyre!("Dir does not exist!") + .with_note(|| format!("dir: {}", dir.display()))); } } - fs::write(path, data.as_bytes()).wrap_err("Could not write serialized list to file") + fs::write(path, data.as_bytes()) + .wrap_err("Could not write serialized list to file") } diff --git a/src/install.rs b/src/install.rs index d534b01..0dfd17f 100644 --- a/src/install.rs +++ b/src/install.rs @@ -67,7 +67,8 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { .prepare_install() .wrap_err("Could not set up installation")?; - tui::install::start(steps, true).wrap_err("Failed to run install wizard")?; + tui::install::start(steps, true) + .wrap_err("Failed to run install wizard")?; Ok(()) } diff --git a/src/integration.rs b/src/integration.rs index aa63cc6..4171777 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -97,18 +97,21 @@ impl Display for NotificationType { impl NotificationType { fn notify(&self, msg: &str) -> color_eyre::Result<()> { match self { - NotificationType::System => { - notification::notify(msg).wrap_err("Could not send system notification")? - } - NotificationType::Audio => { - notification::beep().wrap_err("Could not play audio notification")? - } + NotificationType::System => notification::notify(msg) + .wrap_err("Could not send system notification")?, + NotificationType::Audio => notification::beep() + .wrap_err("Could not play audio notification")?, } Ok(()) } } -fn notify_if_needed(state: &State, notify: &mut NotifyConfig, state_changed: bool, msg: String) { +fn notify_if_needed( + state: &State, + notify: &mut NotifyConfig, + state_changed: bool, + msg: String, +) { if let State::Work { next_break } = *state { if let Some(before_break) = notify.lock_warning { if next_break.duration_until() < before_break { @@ -131,7 +134,11 @@ fn notify_if_needed(state: &State, notify: &mut NotifyConfig, state_changed: boo } } -fn format_status(state: &State, idle: &Arc>, break_duration: Duration) -> String { +fn format_status( + state: &State, + idle: &Arc>, + break_duration: Duration, +) -> String { let msg = match *state { State::Waiting => String::from("-"), State::Work { next_break } => { @@ -183,7 +190,14 @@ impl Status { let (tx, rx) = mpsc::channel(); let integrator = thread::spawn(move || { - integrate(&rx, file_status, api_status, idle, break_duration, notify) + integrate( + &rx, + file_status, + api_status, + idle, + break_duration, + notify, + ) }); Ok(Self { @@ -202,7 +216,9 @@ impl Status { .expect("can only be called once") .join() .expect("The integrator thread panicked") - .expect("The integrator thread returned an error, it should not"); + .expect( + "The integrator thread returned an error, it should not", + ); } } diff --git a/src/integration/file_status.rs b/src/integration/file_status.rs index 63a5d8c..53c9f76 100644 --- a/src/integration/file_status.rs +++ b/src/integration/file_status.rs @@ -16,7 +16,9 @@ impl FileStatus { match std::fs::create_dir("/var/run/break_enforcer") { Ok(()) => (), Err(e) if e.kind() == ErrorKind::AlreadyExists => (), - err @ Err(_) => err.wrap_err("Could not create directory for integration file")?, + err @ Err(_) => { + err.wrap_err("Could not create directory for integration file")? + } } // let owner_write_rest_read = 0o422; let file = OpenOptions::new() diff --git a/src/integration/notification.rs b/src/integration/notification.rs index df9af95..e99cb22 100644 --- a/src/integration/notification.rs +++ b/src/integration/notification.rs @@ -15,7 +15,8 @@ fn all_users() -> Result> { .output() .wrap_err("could not run loginctl")? .stdout; - let users = String::from_utf8(users).wrap_err("loginctl could not be parsed as utf8")?; + let users = String::from_utf8(users) + .wrap_err("loginctl could not be parsed as utf8")?; users .lines() .filter(|x| x.starts_with(' ')) @@ -36,11 +37,16 @@ fn all_users() -> Result> { } pub(crate) fn beep() -> Result<()> { - let sound1 = include_bytes!("../../assets/new-notification-on-your-device-by-UNIVERSFIELD.wav"); + let sound1 = include_bytes!( + "../../assets/new-notification-on-your-device-by-UNIVERSFIELD.wav" + ); // let sound2 = include_bytes!("../../assets/notification-1-by-UNIVERSFIELD.wav"); - for User { id, name } in all_users().wrap_err("Could not get logged in users")? { - let command = format!("sudo -u {name} XDG_RUNTIME_DIR=/run/user/{id} aplay"); + for User { id, name } in + all_users().wrap_err("Could not get logged in users")? + { + let command = + format!("sudo -u {name} XDG_RUNTIME_DIR=/run/user/{id} aplay"); let aplay = Command::new("sh") .arg("-c") .arg(command) @@ -58,7 +64,9 @@ pub(crate) fn beep() -> Result<()> { } pub(crate) fn notify(text: &str) -> Result<()> { - for User { id, name } in all_users().wrap_err("Could not get logged in users")? { + for User { id, name } in + all_users().wrap_err("Could not get logged in users")? + { let command = format!("sudo -u {name} DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{id}/bus notify-send -t 5000 \"{text}\""); Command::new("sh") .arg("-c") diff --git a/src/integration/tcp_api.rs b/src/integration/tcp_api.rs index c75cb50..5a4f08a 100644 --- a/src/integration/tcp_api.rs +++ b/src/integration/tcp_api.rs @@ -58,7 +58,9 @@ pub(crate) fn maintain(status: Status) -> Result<()> { Err(e) if e.kind() == ErrorKind::AddrInUse => { continue; } - Err(other) => return Err(other).wrap_err("Could not start listening"), + Err(other) => { + return Err(other).wrap_err("Could not start listening") + } }; } @@ -127,7 +129,9 @@ fn handle_conn(conn: std::net::TcpStream, status: Status) -> Result<()> { } _ => { debug!("packet: '{packet}'"); - return Err(eyre!("got unexpected packet/api request, disconnecting")); + return Err(eyre!( + "got unexpected packet/api request, disconnecting" + )); } } } diff --git a/src/lib.rs b/src/lib.rs index 1be6613..7434cba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,8 +5,8 @@ use std::time::Duration; use tracing::debug; mod tcp_api_config; -use tcp_api_config::STOP_BYTE; use tcp_api_config::PORTS; +use tcp_api_config::STOP_BYTE; pub struct Api { reader: BufReader, @@ -40,7 +40,9 @@ impl Api { let addr = SocketAddr::from(([127, 0, 0, 1], port)); match TcpStream::connect(addr) { Ok(c) => { - debug!("connected to break-enforcer service on port: {port}"); + debug!( + "connected to break-enforcer service on port: {port}" + ); conn = Some(c); break; } @@ -80,7 +82,8 @@ impl Api { } let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE - let packet = String::from_utf8(packet.to_vec()).map_err(Error::CorruptResponse)?; + let packet = String::from_utf8(packet.to_vec()) + .map_err(Error::CorruptResponse)?; let seconds_idle = packet .as_str() @@ -108,7 +111,8 @@ impl Api { } let packet = &buf[..(n_read - 1)]; // leave off STOP_BYTE - let status = String::from_utf8(packet.to_vec()).map_err(Error::CorruptResponse)?; + let status = String::from_utf8(packet.to_vec()) + .map_err(Error::CorruptResponse)?; Ok(status) } } diff --git a/src/main.rs b/src/main.rs index 49e88cd..4b4d40a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,9 +12,9 @@ mod check_inputs; mod cli; mod config; mod install; -mod status; mod integration; mod run; +mod status; mod tcp_api_config; mod watch_and_block; mod wizard; @@ -55,11 +55,16 @@ fn main() -> color_eyre::Result<()> { match cli.command { cli::Commands::Run(args) => run::run(args, cli.config_path), - cli::Commands::Wizard => wizard::run(cli.config_path).wrap_err("Error running wizard"), - cli::Commands::Status(args) => status::run(args).wrap_err("Could not print status"), - cli::Commands::Install(args) => { - install::set_up(&args, cli.config_path).wrap_err("Could not install") + cli::Commands::Wizard => { + wizard::run(cli.config_path).wrap_err("Error running wizard") + } + cli::Commands::Status(args) => { + status::run(args).wrap_err("Could not print status") + } + cli::Commands::Install(args) => install::set_up(&args, cli.config_path) + .wrap_err("Could not install"), + cli::Commands::Remove => { + install::tear_down().wrap_err("Could not remove") } - cli::Commands::Remove => install::tear_down().wrap_err("Could not remove"), } } diff --git a/src/run.rs b/src/run.rs index 6e18fb4..09ff70a 100644 --- a/src/run.rs +++ b/src/run.rs @@ -25,8 +25,8 @@ pub(crate) fn run( ) -> Result<()> { let (online_devices, new) = watch_and_block::devices(); - let to_block = - config::read(config_path).wrap_err("Could not read devices to block from config")?; + let to_block = config::read(config_path) + .wrap_err("Could not read devices to block from config")?; if to_block.is_empty() { return Err(eyre!( "No config, do not know what to block. Please run the wizard. \nExiting" @@ -35,9 +35,11 @@ pub(crate) fn run( .suggestion("Run the wizard") .suggestion("Maybe you have a (wrong) custom location set?"); } - let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); + let (recv_any_input, recv_any_input2) = + check_inputs::watcher(new, to_block.clone()); - let mut inactivity_tracker = InactivityTracker::new(recv_any_input2, break_duration); + let mut inactivity_tracker = + InactivityTracker::new(recv_any_input2, break_duration); let notify_config = integration::NotifyConfig { lock_warning, lock_warning_type, @@ -46,17 +48,21 @@ pub(crate) fn run( }; let idle = inactivity_tracker.idle_handle(); - let mut status = Status::new(status_file, tcp_api, notify_config, idle, break_duration) - .wrap_err("Could not setup status reporting")?; + let mut status = + Status::new(status_file, tcp_api, notify_config, idle, break_duration) + .wrap_err("Could not setup status reporting")?; loop { status.set_waiting(); - wait_for_user_activity(&recv_any_input).wrap_err("Could not wait for activity")?; + wait_for_user_activity(&recv_any_input) + .wrap_err("Could not wait for activity")?; status.set_working(Instant::now() + work_duration); let idle = match inactivity_tracker.reset_or_timeout(work_duration) { - TrackResult::Error(e) => Err(e).wrap_err("Could not track inactivity")?, + TrackResult::Error(e) => { + Err(e).wrap_err("Could not track inactivity")? + } TrackResult::ShouldReset => continue, TrackResult::ShouldBreak { user_idle } => user_idle, }; @@ -79,7 +85,9 @@ pub(crate) fn run( } } -fn wait_for_user_activity(recv_any_input: &Receiver) -> color_eyre::Result<()> { +fn wait_for_user_activity( + recv_any_input: &Receiver, +) -> color_eyre::Result<()> { loop { // clear old events match recv_any_input.try_recv() { diff --git a/src/status.rs b/src/status.rs index 27cfe01..28a7c91 100644 --- a/src/status.rs +++ b/src/status.rs @@ -2,7 +2,10 @@ use crate::cli::StatusArgs; use break_enforcer::Api; use color_eyre::eyre::WrapErr; -fn format_status(status: Result, use_json: bool) -> String { +fn format_status( + status: Result, + use_json: bool, +) -> String { match (status, use_json) { (Ok(msg), true) => format!("{{\"msg\": \"{msg}\"}}"), (Ok(msg), false) => msg, diff --git a/src/tcp_api_config.rs b/src/tcp_api_config.rs index dea7799..82fcbe8 100644 --- a/src/tcp_api_config.rs +++ b/src/tcp_api_config.rs @@ -6,4 +6,5 @@ pub(crate) const STOP_BYTE: u8 = 0; // first 4 are taken with care from // https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers // the rest are randomly picked -pub(crate) const PORTS: [u16; 7] = [49_151, 28_769, 19_788, 62_738, 34_342, 12_846, 8_797]; +pub(crate) const PORTS: [u16; 7] = + [49_151, 28_769, 19_788, 62_738, 34_342, 12_846, 8_797]; diff --git a/src/watch_and_block.rs b/src/watch_and_block.rs index 122b6b9..664d81d 100644 --- a/src/watch_and_block.rs +++ b/src/watch_and_block.rs @@ -57,7 +57,8 @@ impl fmt::Display for InputId { self.version.to_be_bytes(), ]; - let base64 = general_purpose::URL_SAFE_NO_PAD.encode(data.as_flattened()); + let base64 = + general_purpose::URL_SAFE_NO_PAD.encode(data.as_flattened()); f.write_str(base64.as_str()) } } @@ -203,7 +204,8 @@ impl Inner { .id_to_devices .iter() .find(|(_, map)| { - map.len() == 1 && *map.keys().next().expect("len is one") == event_path + map.len() == 1 + && *map.keys().next().expect("len is one") == event_path }) .map(|(id, _)| id) .copied() @@ -239,7 +241,8 @@ impl Inner { .id_to_devices .iter() .map(|(id, devices)| { - let mut names: Vec<_> = devices.values().map(Device::name).collect(); + let mut names: Vec<_> = + devices.values().map(Device::name).collect(); names.sort(); BlockableInput { id: *id, names } }) @@ -298,13 +301,16 @@ impl Inner { warn!("Could not lock, device busy: {}", device.name()); } Err(e) if device_removed(&e) => { - warn!("Could not lock, device probably removed: {}", device.name()); - } - err @ Err(_) => { - return err - .wrap_err("Could not grab (acquire exclusive access) to device") - .with_note(|| format!("device name: {}", device.name())) + warn!( + "Could not lock, device probably removed: {}", + device.name() + ); } + err @ Err(_) => return err + .wrap_err( + "Could not grab (acquire exclusive access) to device", + ) + .with_note(|| format!("device name: {}", device.name())), } } Ok(()) @@ -380,7 +386,10 @@ pub fn devices() -> (OnlineDevices, Receiver) { } const DEV_DIR: &str = "/dev/input"; -fn send_initial_devices(online: &mut OnlineDevices, new_dev_tx: &Sender) { +fn send_initial_devices( + online: &mut OnlineDevices, + new_dev_tx: &Sender, +) { for entry in fs::read_dir(DEV_DIR).unwrap() { let entry = entry.unwrap(); let path = entry.path(); diff --git a/src/wizard.rs b/src/wizard.rs index d070c5d..6277b97 100644 --- a/src/wizard.rs +++ b/src/wizard.rs @@ -27,14 +27,17 @@ pub fn run(custom_config_path: Option) -> Result<()> { } let mut inputs: Vec<_> = inputs .into_iter() - .flat_map(|BlockableInput { names, id }| names.into_iter().map(move |n| (id, n))) + .flat_map(|BlockableInput { names, id }| { + names.into_iter().map(move |n| (id, n)) + }) .collect(); inputs.dedup_by(|a, b| *a == *b); let mut options: Vec<_> = inputs .iter() .map(|(id, name)| { - let checked = config.get(id).is_some_and(|names| names.contains(name)); + let checked = + config.get(id).is_some_and(|names| names.contains(name)); (name, checked) }) .collect(); From 0f90cfd4cfd4bb7743ba9edbb4229b25e47169f0 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Fri, 11 Oct 2024 11:50:52 +0200 Subject: [PATCH 73/76] Add optional long break after cumulative work time No idle reset yet for long break, though it does take into account idle time and resets when counting work time. --- src/cli.rs | 10 ++++++++- src/install.rs | 8 ++++++++ src/run.rs | 56 +++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/cli.rs b/src/cli.rs index f8dcfd4..72b79d4 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -12,10 +12,18 @@ pub struct RunArgs { /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub work_duration: Duration, - /// Length of the breaks, after this period input is resumed. + /// Length of the (short) breaks, after this period input is resumed. /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] pub break_duration: Duration, + /// Length of the long breaks, after this period input is resumed. + /// Note: run help command to see the duration format. + #[arg(long, value_name = "duration", value_parser = parse_duration)] + pub long_break_duration: Option, + /// Amount of total work time before next break will be a long break. + /// Note: run help command to see the duration format. + #[arg(long, value_name = "duration", value_parser = parse_duration)] + pub work_between_long_breaks: Option, /// Optional takes a duration, if set sends a notification ahead of the break. /// Note: run help command to see the duration format. #[arg(short, long, value_name = "duration", value_parser = parse_duration)] diff --git a/src/install.rs b/src/install.rs index 0dfd17f..fa90adb 100644 --- a/src/install.rs +++ b/src/install.rs @@ -41,6 +41,14 @@ pub fn set_up(run_args: &RunArgs, config_path: Option) -> Result<()> { args.push(fmt_dur(run_args.work_duration)); args.push("--break-duration".to_string()); args.push(fmt_dur(run_args.break_duration)); + if let Some(long_break_duration) = run_args.long_break_duration { + args.push("--long-break-duration".to_string()); + args.push(fmt_dur(long_break_duration)); + } + if let Some(work_between_long_breaks) = run_args.work_between_long_breaks { + args.push("--work-between-long-breaks".to_string()); + args.push(fmt_dur(work_between_long_breaks)); + } if let Some(warn_duration) = run_args.lock_warning { args.push("--lock-warning".to_string()); args.push(fmt_dur(warn_duration)); diff --git a/src/run.rs b/src/run.rs index 09ff70a..6ffda47 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1,5 +1,5 @@ use std::path::PathBuf; -use std::time::Instant; +use std::time::{Duration, Instant}; use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; @@ -15,6 +15,8 @@ pub(crate) fn run( RunArgs { work_duration, break_duration, + long_break_duration, + work_between_long_breaks, lock_warning, lock_warning_type, status_file, @@ -23,6 +25,11 @@ pub(crate) fn run( }: RunArgs, config_path: Option, ) -> Result<()> { + let short_break_duration = break_duration; + if let Some(long_break_duration) = long_break_duration { + assert!(long_break_duration > short_break_duration); + } + let (online_devices, new) = watch_and_block::devices(); let to_block = config::read(config_path) @@ -38,8 +45,9 @@ pub(crate) fn run( let (recv_any_input, recv_any_input2) = check_inputs::watcher(new, to_block.clone()); + let mut worked_since_long_break = Duration::from_secs(0); let mut inactivity_tracker = - InactivityTracker::new(recv_any_input2, break_duration); + InactivityTracker::new(recv_any_input2, short_break_duration); let notify_config = integration::NotifyConfig { lock_warning, lock_warning_type, @@ -48,23 +56,36 @@ pub(crate) fn run( }; let idle = inactivity_tracker.idle_handle(); - let mut status = - Status::new(status_file, tcp_api, notify_config, idle, break_duration) - .wrap_err("Could not setup status reporting")?; + let mut status = Status::new( + status_file, + tcp_api, + notify_config, + idle, + short_break_duration, + ) + .wrap_err("Could not setup status reporting")?; loop { status.set_waiting(); wait_for_user_activity(&recv_any_input) .wrap_err("Could not wait for activity")?; - status.set_working(Instant::now() + work_duration); + let work_start = Instant::now(); + status.set_working(work_start + work_duration); let idle = match inactivity_tracker.reset_or_timeout(work_duration) { TrackResult::Error(e) => { Err(e).wrap_err("Could not track inactivity")? } - TrackResult::ShouldReset => continue, - TrackResult::ShouldBreak { user_idle } => user_idle, + TrackResult::ShouldReset => { + worked_since_long_break += + work_start.elapsed() - short_break_duration; + continue; + } + TrackResult::ShouldBreak { user_idle } => { + worked_since_long_break += work_start.elapsed() - user_idle; + user_idle + } }; let mut locks = Vec::new(); @@ -76,8 +97,23 @@ pub(crate) fn run( ); } - status.set_break(Instant::now() + break_duration - idle); - thread::sleep(break_duration - idle); + let break_duration = match (long_break_duration, work_between_long_breaks) { + (Some(long_break_duration), Some(work_between_long_breaks)) + // There is always some idle time before the break, + // so we add some margin + if worked_since_long_break + work_duration / 10 + >= work_between_long_breaks => + { + worked_since_long_break = Duration::from_secs(0); + long_break_duration - idle + } + _ => { + short_break_duration - idle + } + }; + + status.set_break(Instant::now() + break_duration); + thread::sleep(break_duration); for lock in locks { lock.unlock()?; From 29e90e4d778c933aaacf603bf2982b06eb66e734 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Sat, 12 Oct 2024 12:10:45 +0200 Subject: [PATCH 74/76] Add long break reset to waiting for user activity Not yet updating status to reflect this --- src/run.rs | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/run.rs b/src/run.rs index 6ffda47..786baf7 100644 --- a/src/run.rs +++ b/src/run.rs @@ -1,4 +1,5 @@ use std::path::PathBuf; +use std::sync::mpsc::RecvTimeoutError; use std::time::{Duration, Instant}; use color_eyre::eyre::{eyre, Context}; @@ -68,8 +69,26 @@ pub(crate) fn run( loop { status.set_waiting(); - wait_for_user_activity(&recv_any_input) - .wrap_err("Could not wait for activity")?; + if worked_since_long_break > Duration::from_secs(0) { + if let Some(long_break_duration) = long_break_duration { + match wait_for_user_activity( + &recv_any_input, + long_break_duration - short_break_duration, + ) + .wrap_err("Could not wait for activity")? + { + IdleResult::Activity => (), + IdleResult::Timeout => { + worked_since_long_break = Duration::from_secs(0); + continue; + } + } + } + } else { + wait_for_user_activity(&recv_any_input, Duration::MAX) + .wrap_err("Could not wait for activity")?; + } + let work_start = Instant::now(); status.set_working(work_start + work_duration); @@ -79,7 +98,7 @@ pub(crate) fn run( } TrackResult::ShouldReset => { worked_since_long_break += - work_start.elapsed() - short_break_duration; + work_start.elapsed().saturating_sub(short_break_duration); continue; } TrackResult::ShouldBreak { user_idle } => { @@ -121,9 +140,15 @@ pub(crate) fn run( } } +enum IdleResult { + Activity, + Timeout, +} + fn wait_for_user_activity( recv_any_input: &Receiver, -) -> color_eyre::Result<()> { + timeout: Duration, +) -> color_eyre::Result { loop { // clear old events match recv_any_input.try_recv() { @@ -135,10 +160,11 @@ fn wait_for_user_activity( loop { #[allow(clippy::match_same_arms)] - match recv_any_input.recv() { - Err(_) => (), // device disconnected, ignore + match recv_any_input.recv_timeout(timeout) { Ok(Err(e)) => return Err(e).wrap_err("Error with device file"), - Ok(Ok(_)) => return Ok(()), // new event! stop blocking + Ok(Ok(_)) => return Ok(IdleResult::Activity), // new event! stop blocking + Err(RecvTimeoutError::Timeout) => return Ok(IdleResult::Timeout), + Err(_) => (), // device disconnected, ignore } } } From 45f004a389954a9693e48c52183340cc73d8ac76 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Sun, 13 Oct 2024 11:59:48 +0200 Subject: [PATCH 75/76] Add waiting for long break reset to status --- src/integration.rs | 22 +++++++++++++++++++++- src/run.rs | 4 ++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/integration.rs b/src/integration.rs index 4171777..8d83b0a 100644 --- a/src/integration.rs +++ b/src/integration.rs @@ -15,6 +15,7 @@ pub(crate) mod tcp_api; #[derive(Debug, PartialEq, Eq)] enum State { Waiting, + WaitingLongReset { long_break_duration: Duration }, Work { next_break: Instant }, Break { next_work: Instant }, } @@ -65,7 +66,9 @@ fn integrate( timeout = match state { State::Waiting => Duration::MAX, - State::Work { .. } | State::Break { .. } => Duration::from_secs(1), + State::WaitingLongReset { .. } + | State::Work { .. } + | State::Break { .. } => Duration::from_secs(1), }; let msg = format_status(&state, &idle, break_duration); @@ -141,6 +144,14 @@ fn format_status( ) -> String { let msg = match *state { State::Waiting => String::from("-"), + State::WaitingLongReset { + long_break_duration, + } => { + let idle = idle.lock().unwrap().elapsed(); + let break_dur = long_break_duration.saturating_sub(idle); + let break_dur = fmt_dur(break_dur); + format!("long reset in {}", break_dur) + } State::Work { next_break } => { let idle = idle.lock().unwrap().elapsed(); if idle > Duration::from_secs(30) { @@ -226,6 +237,15 @@ impl Status { self.send(State::Waiting); } + pub(crate) fn set_waiting_long_reset( + &mut self, + long_break_duration: Duration, + ) { + self.send(State::WaitingLongReset { + long_break_duration, + }); + } + pub(crate) fn set_working(&mut self, next_break: Instant) { self.send(State::Work { next_break }); } diff --git a/src/run.rs b/src/run.rs index 786baf7..e486a80 100644 --- a/src/run.rs +++ b/src/run.rs @@ -67,10 +67,9 @@ pub(crate) fn run( .wrap_err("Could not setup status reporting")?; loop { - status.set_waiting(); - if worked_since_long_break > Duration::from_secs(0) { if let Some(long_break_duration) = long_break_duration { + status.set_waiting_long_reset(long_break_duration); match wait_for_user_activity( &recv_any_input, long_break_duration - short_break_duration, @@ -85,6 +84,7 @@ pub(crate) fn run( } } } else { + status.set_waiting(); wait_for_user_activity(&recv_any_input, Duration::MAX) .wrap_err("Could not wait for activity")?; } From 288d548c833571d73fdcade056d4d47a0f3c78b4 Mon Sep 17 00:00:00 2001 From: Eva van Houten Date: Fri, 18 Oct 2024 11:12:16 +0200 Subject: [PATCH 76/76] Add tracing for long break variables --- src/run.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/run.rs b/src/run.rs index e486a80..25d6394 100644 --- a/src/run.rs +++ b/src/run.rs @@ -4,6 +4,7 @@ use std::time::{Duration, Instant}; use color_eyre::eyre::{eyre, Context}; use color_eyre::{Result, Section}; +use tracing::trace; use crate::check_inputs::{InactivityTracker, InputResult, TrackResult}; use crate::cli::RunArgs; @@ -26,6 +27,8 @@ pub(crate) fn run( }: RunArgs, config_path: Option, ) -> Result<()> { + trace!("Long break: {long_break_duration:?}"); + trace!("Work between: {work_between_long_breaks:?}"); let short_break_duration = break_duration; if let Some(long_break_duration) = long_break_duration { assert!(long_break_duration > short_break_duration); @@ -78,6 +81,7 @@ pub(crate) fn run( { IdleResult::Activity => (), IdleResult::Timeout => { + trace!("Idle > long break, resetting total work time"); worked_since_long_break = Duration::from_secs(0); continue; } @@ -116,6 +120,7 @@ pub(crate) fn run( ); } + trace!("Worked since long break: {worked_since_long_break:?}"); let break_duration = match (long_break_duration, work_between_long_breaks) { (Some(long_break_duration), Some(work_between_long_breaks)) // There is always some idle time before the break, @@ -123,10 +128,12 @@ pub(crate) fn run( if worked_since_long_break + work_duration / 10 >= work_between_long_breaks => { + trace!("Starting long break, resetting total work time"); worked_since_long_break = Duration::from_secs(0); long_break_duration - idle } _ => { + trace!("Starting short break"); short_break_duration - idle } };