write exclusions to json in tmpfs

This commit is contained in:
Ward from fusion-voyager-3 2024-07-10 03:35:12 +03:00
parent 2d2ea055cf
commit b7681f9af1
5 changed files with 290 additions and 156 deletions

View File

@ -9,6 +9,9 @@
<component name="ChangeListManager">
<list default="true" id="df2ca9e1-e07d-43f4-bc68-0a6113fc1fa2" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Cargo.lock" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.lock" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Cargo.toml" beforeDir="false" afterPath="$PROJECT_DIR$/Cargo.toml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/apt_update_page/mod.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/apt_update_page/mod.rs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/apt_update_page/process.rs" beforeDir="false" afterPath="$PROJECT_DIR$/src/apt_update_page/process.rs" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -30,20 +33,21 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;Cargo.Run apt_update.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.rust.reset.selective.auto.import&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;master&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/ward/RustroverProjects/pika-idk-manager&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;org.rust.cargo.project.model.PROJECT_DISCOVERY&quot;: &quot;true&quot;,
&quot;org.rust.first.attach.projects&quot;: &quot;true&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"Cargo.Run apt_update.executor": "Run",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.rust.reset.selective.auto.import": "true",
"git-widget-placeholder": "master",
"last_opened_file_path": "/home/ward/RustroverProjects/pika-idk-manager",
"node.js.detected.package.eslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"org.rust.cargo.project.model.PROJECT_DISCOVERY": "true",
"org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon": "",
"org.rust.first.attach.projects": "true"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$" />
@ -112,7 +116,7 @@
<workItem from="1720423242486" duration="3396000" />
<workItem from="1720476457389" duration="7123000" />
<workItem from="1720502207843" duration="3142000" />
<workItem from="1720556059466" duration="5702000" />
<workItem from="1720556059466" duration="12649000" />
</task>
<servers />
</component>

210
Cargo.lock generated
View File

@ -26,12 +26,6 @@ dependencies = [
"memchr",
]
[[package]]
name = "anyhow"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
[[package]]
name = "arc-swap"
version = "1.7.1"
@ -58,7 +52,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -139,23 +133,22 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
[[package]]
name = "cairo-rs"
version = "0.18.5"
version = "0.19.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2"
checksum = "b2ac2a4d0e69036cf0062976f6efcba1aaee3e448594e6514bb2ddf87acce562"
dependencies = [
"bitflags 2.5.0",
"cairo-sys-rs",
"glib",
"libc",
"once_cell",
"thiserror",
]
[[package]]
name = "cairo-sys-rs"
version = "0.18.2"
version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
checksum = "fd3bb3119664efbd78b5e6c93957447944f16bdbced84c17a9f41c7829b81e64"
dependencies = [
"glib-sys",
"libc",
@ -278,7 +271,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
"syn 2.0.68",
"syn",
]
[[package]]
@ -295,7 +288,7 @@ checksum = "4b2c1c1776b986979be68bb2285da855f8d8a35851a769fca8740df7c3d07877"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -429,7 +422,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -464,22 +457,21 @@ dependencies = [
[[package]]
name = "gdk-pixbuf"
version = "0.18.5"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec"
checksum = "624eaba126021103c7339b2e179ae4ee8cdab842daab419040710f38ed9f8699"
dependencies = [
"gdk-pixbuf-sys",
"gio",
"glib",
"libc",
"once_cell",
]
[[package]]
name = "gdk-pixbuf-sys"
version = "0.18.0"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
checksum = "4efa05a4f83c8cc50eb4d883787b919b85e5f1d8dd10b5a1df53bf5689782379"
dependencies = [
"gio-sys",
"glib-sys",
@ -490,9 +482,9 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.7.3"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6"
checksum = "db265c9dd42d6a371e09e52deab3a84808427198b86ac792d75fd35c07990a07"
dependencies = [
"cairo-rs",
"gdk-pixbuf",
@ -505,9 +497,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
version = "0.7.2"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
checksum = "c9418fb4e8a67074919fe7604429c45aa74eb9df82e7ca529767c6d4e9dc66dd"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -537,9 +529,9 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
[[package]]
name = "gio"
version = "0.18.4"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73"
checksum = "4c49f117d373ffcc98a35d114db5478bc223341cff53e39a5d6feced9e2ddffe"
dependencies = [
"futures-channel",
"futures-core",
@ -548,7 +540,6 @@ dependencies = [
"gio-sys",
"glib",
"libc",
"once_cell",
"pin-project-lite",
"smallvec 1.13.2",
"thiserror",
@ -556,22 +547,22 @@ dependencies = [
[[package]]
name = "gio-sys"
version = "0.18.1"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
checksum = "2cd743ba4714d671ad6b6234e8ab2a13b42304d0e13ab7eba1dcdd78a7d6d4ef"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps",
"winapi 0.3.9",
"windows-sys 0.52.0",
]
[[package]]
name = "glib"
version = "0.18.5"
version = "0.19.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5"
checksum = "39650279f135469465018daae0ba53357942a5212137515777d5fdca74984a44"
dependencies = [
"bitflags 2.5.0",
"futures-channel",
@ -585,30 +576,28 @@ dependencies = [
"gobject-sys",
"libc",
"memchr",
"once_cell",
"smallvec 1.13.2",
"thiserror",
]
[[package]]
name = "glib-macros"
version = "0.18.5"
version = "0.19.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc"
checksum = "4429b0277a14ae9751350ad9b658b1be0abb5b54faa5bcdf6e74a3372582fad7"
dependencies = [
"heck 0.4.1",
"proc-macro-crate 2.0.0",
"proc-macro-error",
"heck",
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
name = "glib-sys"
version = "0.18.1"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
checksum = "5c2dc18d3a82b0006d470b13304fbbb3e0a9bd4884cf985a60a7ed733ac2c4a5"
dependencies = [
"libc",
"system-deps",
@ -646,9 +635,9 @@ dependencies = [
[[package]]
name = "gobject-sys"
version = "0.18.0"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
checksum = "2e697e252d6e0416fd1d9e169bda51c0f1c926026c39ca21fbe8b1bb5c3b8b9e"
dependencies = [
"glib-sys",
"libc",
@ -657,9 +646,9 @@ dependencies = [
[[package]]
name = "graphene-rs"
version = "0.18.1"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401"
checksum = "f5fb86031d24d9ec0a2a15978fc7a65d545a2549642cf1eb7c3dda358da42bcf"
dependencies = [
"glib",
"graphene-sys",
@ -668,9 +657,9 @@ dependencies = [
[[package]]
name = "graphene-sys"
version = "0.18.1"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59"
checksum = "2f530e0944bccba4b55065e9c69f4975ad691609191ebac16e13ab8e1f27af05"
dependencies = [
"glib-sys",
"libc",
@ -680,9 +669,9 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.7.3"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e"
checksum = "7563884bf6939f4468e5d94654945bdd9afcaf8c3ba4c5dd17b5342b747221be"
dependencies = [
"cairo-rs",
"gdk4",
@ -695,9 +684,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.7.3"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55"
checksum = "23024bf2636c38bbd1f822f58acc9d1c25b28da896ff0f291a1a232d4272b3dc"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@ -711,9 +700,9 @@ dependencies = [
[[package]]
name = "gtk4"
version = "0.7.3"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842"
checksum = "b04e11319b08af11358ab543105a9e49b0c491faca35e2b8e7e36bfba8b671ab"
dependencies = [
"cairo-rs",
"field-offset",
@ -732,23 +721,21 @@ dependencies = [
[[package]]
name = "gtk4-macros"
version = "0.7.2"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
checksum = "ec655a7ef88d8ce9592899deb8b2d0fa50bab1e6dd69182deb764e643c522408"
dependencies = [
"anyhow",
"proc-macro-crate 1.3.1",
"proc-macro-error",
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 1.0.109",
"syn",
]
[[package]]
name = "gtk4-sys"
version = "0.7.3"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8"
checksum = "8c8aa86b7f85ea71d66ea88c1d4bae1cfacf51ca4856274565133838d77e57b5"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -775,12 +762,6 @@ version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "heck"
version = "0.5.0"
@ -871,9 +852,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "libadwaita"
version = "0.5.3"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fe7e70c06507ed10a16cda707f358fbe60fe0dc237498f78c686ade92fd979c"
checksum = "91b4990248b9e1ec5e72094a2ccaea70ec3809f88f6fd52192f2af306b87c5d9"
dependencies = [
"gdk-pixbuf",
"gdk4",
@ -887,9 +868,9 @@ dependencies = [
[[package]]
name = "libadwaita-sys"
version = "0.5.3"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a"
checksum = "23a748e4e92be1265cd9e93d569c0b5dfc7814107985aa6743d670ab281ea1a8"
dependencies = [
"gdk4-sys",
"gio-sys",
@ -1083,22 +1064,21 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "pango"
version = "0.18.3"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
checksum = "3f0d328648058085cfd6897c9ae4272884098a926f3a833cd50c8c73e6eccecd"
dependencies = [
"gio",
"glib",
"libc",
"once_cell",
"pango-sys",
]
[[package]]
name = "pango-sys"
version = "0.18.0"
version = "0.19.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
checksum = "ff03da4fa086c0b244d4a4587d3e20622a3ecdb21daea9edf66597224c634ba0"
dependencies = [
"glib-sys",
"gobject-sys",
@ -1215,45 +1195,11 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
version = "1.3.1"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
dependencies = [
"once_cell",
"toml_edit 0.19.15",
]
[[package]]
name = "proc-macro-crate"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
dependencies = [
"toml_edit 0.20.2",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.109",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
"toml_edit 0.21.1",
]
[[package]]
@ -1357,7 +1303,7 @@ dependencies = [
"serde",
"serde_json",
"serde_yaml",
"syn 2.0.68",
"syn",
]
[[package]]
@ -1482,7 +1428,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -1566,17 +1512,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.68"
@ -1595,7 +1530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
dependencies = [
"cfg-expr",
"heck 0.5.0",
"heck",
"pkg-config",
"toml 0.8.2",
"version-compare",
@ -1643,7 +1578,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -1705,7 +1640,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
"syn",
]
[[package]]
@ -1814,6 +1749,17 @@ dependencies = [
"winnow",
]
[[package]]
name = "toml_edit"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [
"indexmap 2.2.6",
"toml_datetime",
"winnow",
]
[[package]]
name = "triomphe"
version = "0.1.13"
@ -1843,12 +1789,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "walkdir"
version = "2.5.0"

View File

@ -13,8 +13,8 @@ name = "apt_update"
path = "src/apt_update/main.rs"
[dependencies]
adw = { version = "0.5.3", package = "libadwaita", features = ["v1_4"] }
gtk = { version = "0.7.3", package = "gtk4", features = ["v4_12"] }
adw = { version = "0.6.0", package = "libadwaita", features = ["v1_4"] }
gtk = { version = "0.8.2", package = "gtk4", features = ["v4_12"] }
async-channel = "2.1.1"
rust-i18n = "3.0.1"
rust-apt = { git = "https://gitlab.com/volian/rust-apt" }

View File

@ -203,8 +203,8 @@ pub fn apt_update_page(
.build();
update_button.add_css_class("destructive-action");
update_button.connect_clicked(clone!(@strong excluded_updates_vec => move |_| {
process::apt_process_update(&excluded_updates_vec.borrow());
update_button.connect_clicked(clone!(@weak window, @strong excluded_updates_vec => move |_| {
process::apt_process_update(&excluded_updates_vec.borrow(), window);
}));
bottom_bar.append(&select_button);

View File

@ -1,7 +1,13 @@
use rust_apt::new_cache;
use rust_apt::cache::Upgrade;
use adw::prelude::*;
use gtk::glib::*;
use gtk::*;
use pretty_bytes::converter::convert;
use serde_json::{Value};
use std::{fs::*};
use std::path::Path;
#[derive(Debug)]
struct AptChangesInfo {
package_count: u64,
total_download_size: u64,
@ -22,8 +28,49 @@ impl AptChangesInfo {
}
}
pub fn apt_process_update(excluded_updates_vec: &Vec<String>) {
pub fn apt_process_update(excluded_updates_vec: &Vec<String>, window: adw::ApplicationWindow) {
let excluded_updates_alert_dialog = adw::MessageDialog::builder()
.transient_for(&window)
.heading(t!("excluded_updates_alert_dialog_heading"))
.body(t!("excluded_updates_alert_dialog_body"))
.build();
excluded_updates_alert_dialog.add_response(
"excluded_updates_alert_dialog_cancel",
&t!("excluded_updates_alert_dialog_cancel_label").to_string(),
);
excluded_updates_alert_dialog.add_response(
"excluded_updates_alert_continue",
&t!("excluded_updates_alert_continue_label").to_string(),
);
excluded_updates_alert_dialog.set_response_appearance(
"excluded_updates_alert_continue",
adw::ResponseAppearance::Destructive,
);
excluded_updates_alert_dialog.set_default_response(Some("excluded_updates_alert_continue"));
let excluded_updates_alert_dialog_action = gio::SimpleAction::new("excluded_updates_alert_dialog_action", None);
excluded_updates_alert_dialog_action.connect_activate(clone!(@weak window, @strong excluded_updates_vec => move |_, _| {
apt_confirm_window(&excluded_updates_vec, window)
}));
if excluded_updates_vec.is_empty() {
excluded_updates_alert_dialog_action.activate(None);
} else {
excluded_updates_alert_dialog
.choose(None::<&gio::Cancellable>, move |choice| {
if choice == "excluded_updates_alert_continue" {
excluded_updates_alert_dialog_action.activate(None);
}
});
}
}
fn apt_confirm_window(excluded_updates_vec: &Vec<String>, window: adw::ApplicationWindow) {
// Emulate Apt Full Upgrade to get transaction info
let mut apt_changes_struct = AptChangesInfo {
package_count: 0,
@ -43,5 +90,148 @@ pub fn apt_process_update(excluded_updates_vec: &Vec<String>) {
}
}
dbg!(apt_changes_struct);
let apt_confirm_dialog_child_box = gtk::Box::builder()
.orientation(Orientation::Vertical)
.build();
let apt_update_dialog_badges_size_group = gtk::SizeGroup::new(SizeGroupMode::Both);
let apt_update_dialog_badges_size_group0 = gtk::SizeGroup::new(SizeGroupMode::Both);
let apt_update_dialog_badges_size_group1 = gtk::SizeGroup::new(SizeGroupMode::Both);
apt_confirm_dialog_child_box.append(
&create_color_badge(
&t!("package_count_badge_label"),
&apt_changes_struct.package_count.to_string(),
"background-accent-bg",
&apt_update_dialog_badges_size_group,
&apt_update_dialog_badges_size_group0,
&apt_update_dialog_badges_size_group1
)
);
apt_confirm_dialog_child_box.append(
&create_color_badge(
&t!("total_download_size_badge_label"),
&convert(apt_changes_struct.total_download_size as f64),
"background-accent-bg",
&apt_update_dialog_badges_size_group,
&apt_update_dialog_badges_size_group0,
&apt_update_dialog_badges_size_group1
)
);
apt_confirm_dialog_child_box.append(
&create_color_badge(
&t!("total_installed_size_badge_label"),
&convert(apt_changes_struct.total_installed_size as f64),
"background-accent-bg",
&apt_update_dialog_badges_size_group,
&apt_update_dialog_badges_size_group0,
&apt_update_dialog_badges_size_group1
)
);
let apt_confirm_dialog = adw::MessageDialog::builder()
.transient_for(&window)
.heading(t!("apt_confirm_dialog_heading"))
.body(t!("apt_confirm_dialog_body"))
.extra_child(&apt_confirm_dialog_child_box)
.build();
apt_confirm_dialog.add_response(
"apt_confirm_dialog_cancel",
&t!("apt_confirm_dialog_cancel_label").to_string(),
);
apt_confirm_dialog.add_response(
"apt_confirm_dialog_confirm",
&t!("apt_confirm_dialog_confirm_label").to_string(),
);
apt_confirm_dialog.set_response_appearance(
"apt_confirm_dialog_confirm",
adw::ResponseAppearance::Destructive,
);
apt_confirm_dialog.set_default_response(Some("apt_confirm_dialog_confirm"));
if !excluded_updates_vec.is_empty() {
let excluded_updates_values: Vec<Value> = excluded_updates_vec.into_iter()
.map(|i| serde_json::from_str(format!("{{\"package\":\"{}\"}}", i).as_str()))
.collect::<Result<Vec<Value>,_>>()
.unwrap();
let excluded_updates_values_json = Value::Array(excluded_updates_values);
let json_file_path = "/tmp/pika-apt-exclusions.json";
if Path::new(json_file_path).exists() {
std::fs::remove_file(json_file_path).expect("Failed to remove old json file");
}
std::fs::write(json_file_path, serde_json::to_string_pretty(&excluded_updates_values_json).unwrap()).expect("Failed to write to json file");
}
apt_confirm_dialog.present();
}
fn create_color_badge(
label0_text: &str,
label1_text: &str,
css_style: &str,
group_size: &gtk::SizeGroup,
group_size0: &gtk::SizeGroup,
group_size1: &gtk::SizeGroup,
) -> gtk::ListBox {
let badge_box = gtk::Box::builder().build();
let label0 = gtk::Label::builder()
.label(label0_text)
.margin_start(5)
.margin_end(5)
.margin_bottom(1)
.margin_top(1)
.valign(Align::Center)
.halign(Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size0.add_widget(&label0);
let label_seprator = gtk::Separator::builder().build();
let label1 = gtk::Label::builder()
.label(label1_text)
.margin_start(3)
.margin_end(0)
.margin_bottom(1)
.margin_top(1)
.valign(Align::Center)
.halign(Align::Center)
.hexpand(true)
.vexpand(true)
.build();
group_size1.add_widget(&label1);
label1.add_css_class(css_style);
badge_box.append(&label0);
badge_box.append(&label_seprator);
badge_box.append(&label1);
let boxedlist = gtk::ListBox::builder()
.selection_mode(SelectionMode::None)
.halign(Align::Center)
.margin_start(10)
.margin_end(10)
.margin_bottom(10)
.margin_top(10)
.build();
boxedlist.add_css_class("boxed-list");
boxedlist.append(&badge_box);
group_size.add_widget(&boxedlist);
boxedlist
}