Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package impression for openSUSE:Factory checked in at 2026-01-06 17:43:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/impression (Old) and /work/SRC/openSUSE:Factory/.impression.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "impression" Tue Jan 6 17:43:07 2026 rev:9 rq:1325355 version:3.5.6 Changes: -------- --- /work/SRC/openSUSE:Factory/impression/impression.changes 2025-12-10 15:32:32.127324841 +0100 +++ /work/SRC/openSUSE:Factory/.impression.new.1928/impression.changes 2026-01-06 17:44:00.912223518 +0100 @@ -1,0 +2,7 @@ +Tue Dec 30 16:14:11 UTC 2025 - Richard Rahl <[email protected]> + +- Update to version 3.5.6: + + Fix a bug where writing an image after downloading it would + write nothing + +------------------------------------------------------------------- Old: ---- impression-3.5.5.obscpio New: ---- impression-3.5.6.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ impression.spec ++++++ --- /var/tmp/diff_new_pack.ROqlF9/_old 2026-01-06 17:44:02.752297702 +0100 +++ /var/tmp/diff_new_pack.ROqlF9/_new 2026-01-06 17:44:02.756297867 +0100 @@ -18,7 +18,7 @@ %define appname io.gitlab.adhami3310.Impression Name: impression -Version: 3.5.5 +Version: 3.5.6 Release: 0 Summary: A straight-forward and modern application to create bootable drives License: GPL-3.0-only ++++++ _service ++++++ --- /var/tmp/diff_new_pack.ROqlF9/_old 2026-01-06 17:44:02.836301159 +0100 +++ /var/tmp/diff_new_pack.ROqlF9/_new 2026-01-06 17:44:02.844301488 +0100 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.com/adhami3310/impression.git</param> - <param name="revision">refs/tags/v3.5.5</param> + <param name="revision">refs/tags/v3.5.6</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">disable</param> ++++++ impression-3.5.5.obscpio -> impression-3.5.6.obscpio ++++++ ++++ 1611 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/Cargo.lock new/impression-3.5.6/Cargo.lock --- old/impression-3.5.5/Cargo.lock 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/Cargo.lock 2025-12-30 03:47:13.000000000 +0100 @@ -21,12 +21,6 @@ ] [[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] name = "ashpd" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -101,9 +95,9 @@ [[package]] name = "async-lock" -version = "3.4.1" +version = "3.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" dependencies = [ "event-listener", "event-listener-strategy", @@ -219,9 +213,9 @@ [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytes" @@ -231,9 +225,9 @@ [[package]] name = "cairo-rs" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe4354df4da648870e363387679081f8f9fc538ec8b55901e3740c6a0ef81b1" +checksum = "b01fe135c0bd16afe262b6dea349bd5ea30e6de50708cec639aae7c5c14cc7e4" dependencies = [ "bitflags", "cairo-sys-rs", @@ -243,9 +237,9 @@ [[package]] name = "cairo-sys-rs" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d6c3300c7103eb8e4de07591003511aa25664438f8c6fc317a3a9902c103f8" +checksum = "06c28280c6b12055b5e39e4554271ae4e6630b27c0da9148c4cf6485fc6d245c" dependencies = [ "glib-sys", "libc", @@ -254,9 +248,9 @@ [[package]] name = "cc" -version = "1.2.47" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "shlex", @@ -264,9 +258,9 @@ [[package]] name = "cfg-expr" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acd0bdbbf4b2612d09f52ba61da432140cb10930354079d0d53fafc12968726" +checksum = "21be0e1ce6cdb2ee7fff840f922fb04ead349e5cfb1e750b769132d44ce04720" dependencies = [ "smallvec", "target-lexicon", @@ -466,9 +460,9 @@ [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "fnv" @@ -604,9 +598,9 @@ [[package]] name = "gdk-pixbuf" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a3c64459f569154f37616fc28923bfac490d4aaa134aaf5eca58a2c0c13050f" +checksum = "debb0d39e3cdd84626edfd54d6e4a6ba2da9a0ef2e796e691c4e9f8646fda00c" dependencies = [ "gdk-pixbuf-sys", "gio", @@ -616,9 +610,9 @@ [[package]] name = "gdk-pixbuf-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3854ef7a6a8b8f3b4013a01d5f9cb0d1794ec4e810c6cb4e2cc6d980f1baf724" +checksum = "bd95ad50b9a3d2551e25dd4f6892aff0b772fe5372d84514e9d0583af60a0ce7" dependencies = [ "gio-sys", "glib-sys", @@ -629,9 +623,9 @@ [[package]] name = "gdk4" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e292649dc26e3440c508a00f42ab39156008320dd6e962d63eaf626ba4d7f0" +checksum = "756564212bbe4a4ce05d88ffbd2582581ac6003832d0d32822d0825cca84bfbf" dependencies = [ "cairo-rs", "gdk-pixbuf", @@ -644,9 +638,9 @@ [[package]] name = "gdk4-sys" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f3174fa4f1e0bf2a7e04469b65db8f4d1db89a6f5cdc57727b14e97ce438cf" +checksum = "a6d4e5b3ccf591826a4adcc83f5f57b4e59d1925cb4bf620b0d645f79498b034" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -704,9 +698,9 @@ [[package]] name = "gio" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daeff3dd716d1ba91850b976b76a1c2d28f99ef6c1602cd8fdaa8fab8017fd9c" +checksum = "c5ff48bf600c68b476e61dc6b7c762f2f4eb91deef66583ba8bb815c30b5811a" dependencies = [ "futures-channel", "futures-core", @@ -721,9 +715,9 @@ [[package]] name = "gio-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171ed2f6dd927abbe108cfd9eebff2052c335013f5879d55bab0dc1dee19b706" +checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" dependencies = [ "glib-sys", "gobject-sys", @@ -734,9 +728,9 @@ [[package]] name = "glib" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9dbecb1c33e483a98be4acfea2ab369e1c28f517c6eadb674537409c25c4b2" +checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" dependencies = [ "bitflags", "futures-channel", @@ -755,9 +749,9 @@ [[package]] name = "glib-macros" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "880e524e0085f3546cfb38532b2c202c0d64741d9977a6e4aa24704bfc9f19fb" +checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" dependencies = [ "heck", "proc-macro-crate", @@ -768,9 +762,9 @@ [[package]] name = "glib-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09d3d0fddf7239521674e57b0465dfbd844632fec54f059f7f56112e3f927e1" +checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" dependencies = [ "libc", "system-deps", @@ -778,9 +772,9 @@ [[package]] name = "gobject-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "538e41d8776173ec107e7b0f2aceced60abc368d7e1d81c1f0e2ecd35f59080d" +checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" dependencies = [ "glib-sys", "libc", @@ -789,9 +783,9 @@ [[package]] name = "graphene-rs" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7749aaf5d3b955bf3bfce39e3423705878a666b561384134da0e7786a45ddc3" +checksum = "2730030ac9db663fd8bfe1e7093742c1cafb92db9c315c9417c29032341fe2f9" dependencies = [ "glib", "graphene-sys", @@ -800,9 +794,9 @@ [[package]] name = "graphene-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250abaee850a90a276509890a78029c356173f9573412bded5f155b0e41fa568" +checksum = "915e32091ea9ad241e4b044af62b7351c2d68aeb24f489a0d7f37a0fc484fd93" dependencies = [ "glib-sys", "libc", @@ -812,9 +806,9 @@ [[package]] name = "gsk4" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6687e9f92ca89c000c376400cfaf7914d099413d72fdf4f84a25775a0b1fb2d" +checksum = "e755de9d8c5896c5beaa028b89e1969d067f1b9bf1511384ede971f5983aa153" dependencies = [ "cairo-rs", "gdk4", @@ -827,9 +821,9 @@ [[package]] name = "gsk4-sys" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e76bcf64d9c4846f19651f45b400cc0c9c4c17b651849da520f3d77c6988c52" +checksum = "7ce91472391146f482065f1041876d8f869057b195b95399414caa163d72f4f7" dependencies = [ "cairo-sys-rs", "gdk4-sys", @@ -843,9 +837,9 @@ [[package]] name = "gtk4" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ea71795b91a0725b0e926e72e3d209d920ce60166e3a8f9f4dd46f287fee87" +checksum = "acb21d53cfc6f7bfaf43549731c43b67ca47d87348d81c8cfc4dcdd44828e1a4" dependencies = [ "cairo-rs", "field-offset", @@ -864,9 +858,9 @@ [[package]] name = "gtk4-macros" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "821160b4f17e7e4ed748818c23682d0a46bed04c287dbaac54dd4869d2c5e06a" +checksum = "3ccfb5a14a3d941244815d5f8101fa12d4577b59cc47245778d8d907b0003e42" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -876,9 +870,9 @@ [[package]] name = "gtk4-sys" -version = "0.10.1" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d274cbaf7d9aa55b7aff78cb21b43299d64e514e1300671469b66f691cc5a011" +checksum = "842577fe5a1ee15d166cd3afe804ce0cab6173bc789ca32e21308834f20088dd" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1031,9 +1025,9 @@ [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -1127,9 +1121,9 @@ [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1141,9 +1135,9 @@ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -1183,9 +1177,8 @@ [[package]] name = "impression" -version = "3.5.5" +version = "3.5.6" dependencies = [ - "anyhow", "ashpd", "chrono", "derivative", @@ -1201,6 +1194,7 @@ "reqwest", "roxmltree", "serde_json", + "terrors", "thiserror", "tokio", "tracing-subscriber", @@ -1225,9 +1219,9 @@ [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -1244,15 +1238,15 @@ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -1297,9 +1291,9 @@ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "linux-raw-sys" @@ -1328,9 +1322,9 @@ [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "malloc_buf" @@ -1364,9 +1358,9 @@ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -1512,9 +1506,9 @@ [[package]] name = "pango" -version = "0.21.3" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37b7a678e18c2e9f2485f7e39b7b2dac99590d5ddef08a7f56eae38a145402e" +checksum = "52d1d85e2078077a065bb7fc072783d5bcd4e51b379f22d67107d0a16937eb69" dependencies = [ "gio", "glib", @@ -1524,9 +1518,9 @@ [[package]] name = "pango-sys" -version = "0.21.2" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f5daf21da43fba9f2a0092da0eebeb77637c23552bccaf58f791c518009c94" +checksum = "b4f06627d36ed5ff303d2df65211fc2e52ba5b17bf18dd80ff3d9628d6e06cfd" dependencies = [ "glib-sys", "gobject-sys", @@ -1618,9 +1612,9 @@ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -1720,9 +1714,9 @@ [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", @@ -1795,9 +1789,9 @@ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ "bitflags", "errno", @@ -1821,9 +1815,9 @@ [[package]] name = "rustls-pki-types" -version = "1.13.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "zeroize", ] @@ -1847,9 +1841,9 @@ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "schannel" @@ -1921,15 +1915,15 @@ [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -1945,9 +1939,9 @@ [[package]] name = "serde_spanned" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24345aa0fe688594e73770a5f6d1b216508b4f93484c0026d521acd30134392" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" dependencies = [ "serde_core", ] @@ -1981,10 +1975,11 @@ [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -2118,9 +2113,9 @@ [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", @@ -2130,6 +2125,12 @@ ] [[package]] +name = "terrors" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "987fd8c678ca950df2a18b2c6e9da6ca511d449278fab3565efe0d49c0c07a5d" + +[[package]] name = "thiserror" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2219,9 +2220,9 @@ [[package]] name = "toml" -version = "0.9.8" +version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" +checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ "indexmap", "serde_core", @@ -2234,18 +2235,18 @@ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -2255,18 +2256,18 @@ [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "toml_writer" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" [[package]] name = "tower" @@ -2285,9 +2286,9 @@ [[package]] name = "tower-http" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ "bitflags", "bytes", @@ -2315,9 +2316,9 @@ [[package]] name = "tracing" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2337,9 +2338,9 @@ [[package]] name = "tracing-core" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -2432,12 +2433,12 @@ [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "js-sys", - "serde", + "serde_core", "wasm-bindgen", ] @@ -2485,9 +2486,9 @@ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -2498,9 +2499,9 @@ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -2511,9 +2512,9 @@ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2521,9 +2522,9 @@ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", @@ -2534,9 +2535,9 @@ [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] @@ -2556,9 +2557,9 @@ [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -2920,18 +2921,18 @@ [[package]] name = "zerocopy" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.30" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", @@ -2999,6 +3000,12 @@ ] [[package]] +name = "zmij" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9747e91771f56fd7893e1164abd78febd14a670ceec257caad15e051de35f06" + +[[package]] name = "zvariant" version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/Cargo.toml new/impression-3.5.6/Cargo.toml --- old/impression-3.5.5/Cargo.toml 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/Cargo.toml 2025-12-30 03:47:13.000000000 +0100 @@ -1,6 +1,6 @@ [package] name = "impression" -version = "3.5.5" +version = "3.5.6" edition = "2024" rust-version = "1.88" @@ -25,7 +25,6 @@ reqwest = { version = "0.12", features = ["stream", "json"] } roxmltree = "0.21" chrono = "0.4" -anyhow = "1.0" thiserror = "2.0" derivative = "2.2" tokio = { version = "1.48", features = ["process", "rt-multi-thread"] } @@ -33,3 +32,4 @@ rayon = "1.11" futures = "0.3" tracing-subscriber = "0.3" +terrors = "0.3" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/data/io.gitlab.adhami3310.Impression.metainfo.xml.in.in new/impression-3.5.6/data/io.gitlab.adhami3310.Impression.metainfo.xml.in.in --- old/impression-3.5.5/data/io.gitlab.adhami3310.Impression.metainfo.xml.in.in 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/data/io.gitlab.adhami3310.Impression.metainfo.xml.in.in 2025-12-30 03:47:13.000000000 +0100 @@ -75,6 +75,13 @@ <content_rating type="oars-1.1" /> <releases> + <release version="3.5.6" date="2025-12-29"> + <description translate="no"> + <ul> + <li>Fix a bug where writing an image after downloading it would write nothing.</li> + </ul> + </description> + </release> <release version="3.5.5" date="2025-12-01"> <description translate="no"> <ul> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/data/resources/blueprints/window.blp new/impression-3.5.6/data/resources/blueprints/window.blp --- old/impression-3.5.5/data/resources/blueprints/window.blp 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/data/resources/blueprints/window.blp 2025-12-30 03:47:13.000000000 +0100 @@ -330,23 +330,49 @@ icon-name: "error-symbolic"; title: _("Writing Unsuccessful"); - child: Box { - orientation: vertical; - spacing: 12; - - Button try_again_button { - valign: center; - halign: center; - label: _("Retry"); - use-underline: true; - clicked => $try_again_clicked() swapped; - - styles [ - "suggested-action", - "pill", - ] + Adw.Clamp { + maximum-size: 600; + tightening-threshold: 400; + + Box { + orientation: vertical; + spacing: 12; + + ScrolledWindow { + min-content-height: 100; + max-content-height: 200; + + Label error_message_label { + wrap: true; + wrap-mode: word_char; + xalign: 0; + yalign: 0; + + styles [ + "monospace", + "error-message", + ] + } + + styles [ + "card", + ] + } + + Button try_again_button { + valign: center; + halign: center; + label: _("Retry"); + use-underline: true; + clicked => $try_again_clicked() swapped; + + styles [ + "suggested-action", + "pill", + ] + } } - }; + } }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/data/resources/style.css new/impression-3.5.6/data/resources/style.css --- old/impression-3.5.5/data/resources/style.css 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/data/resources/style.css 2025-12-30 03:47:13.000000000 +0100 @@ -1,18 +1,21 @@ .loading-frame { - min-height: 200px; + min-height: 200px; } .architecture button:not(:hover) { - background: transparent; + background: transparent; } .app_icon { - -gtk-icon-size: 128px; - margin-bottom: 24px; + -gtk-icon-size: 128px; + margin-bottom: 24px; } .drag-overlay-status-page { - background-color: alpha(@accent_bg_color, 0.5); - color: @accent_fg_color; - } - \ No newline at end of file + background-color: alpha(@accent_bg_color, 0.5); + color: @accent_fg_color; +} + +.error-message { + margin: 12px; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/meson.build new/impression-3.5.6/meson.build --- old/impression-3.5.5/meson.build 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/meson.build 2025-12-30 03:47:13.000000000 +0100 @@ -1,6 +1,6 @@ project('impression', 'rust', - version: '3.5.5', + version: '3.5.6', meson_version: '>= 0.59.0', license: 'GPLv3', ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/src/flash.rs new/impression-3.5.6/src/flash.rs --- old/impression-3.5.5/src/flash.rs 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/src/flash.rs 2025-12-30 03:47:13.000000000 +0100 @@ -1,10 +1,10 @@ -use gettextrs::gettext; use log::{error, info}; use std::collections::HashMap; use std::process::Stdio; use std::sync::Arc; use std::sync::atomic::AtomicBool; use std::time::Duration; +use terrors::OneOf; use tokio::time::Instant; use tokio::{fs::File, io::AsyncWriteExt}; @@ -48,12 +48,16 @@ } #[derive(thiserror::Error, Debug)] -#[error("Error while getting total size")] -struct TotalSize; +#[error("Process was stopped by the user")] +struct ProcessStoppedByUser; #[derive(thiserror::Error, Debug)] -#[error("Error during xz extraction: {details:?}")] -struct XzExtractionError { +#[error("Total size could not be determined")] +struct TotalSizeCouldNotBeDetermined; + +#[derive(thiserror::Error, Debug)] +#[error("XZ extraction failed: {details:?}")] +struct XzExtractionFailed { details: Option<String>, } @@ -82,19 +86,33 @@ &self, downloading_path: std::path::PathBuf, url: &str, - ) -> anyhow::Result<File> { - let mut file = File::create(downloading_path.clone()).await?; + ) -> Result< + File, + OneOf<( + ProcessStoppedByUser, + TotalSizeCouldNotBeDetermined, + std::io::Error, + reqwest::Error, + )>, + > { + let mut file = File::create(downloading_path.clone()) + .await + .map_err(OneOf::new)?; - let res = reqwest::get(url).await?; + let res = reqwest::get(url).await.map_err(OneOf::new)?; - let total_size = res.content_length().ok_or(TotalSize)?; + let total_size = res + .content_length() + .ok_or_else(|| OneOf::new(TotalSizeCouldNotBeDetermined))?; let mut downloaded: u64 = 0; let mut stream = res.bytes_stream(); let mut last_sent = Instant::now(); while let Some(Ok(chunk)) = futures::StreamExt::next(&mut stream).await { - tokio::io::AsyncWriteExt::write_all(&mut file, &chunk).await?; + tokio::io::AsyncWriteExt::write_all(&mut file, &chunk) + .await + .map_err(OneOf::new)?; downloaded = std::cmp::min(downloaded + (chunk.len() as u64), total_size); if last_sent.elapsed() >= Duration::from_millis(250) { @@ -105,17 +123,23 @@ last_sent = Instant::now(); } + + self.stopped_running().map_err(OneOf::broaden)?; } - Ok(file) + file.flush().await.map_err(OneOf::new)?; + + file.sync_all().await.map_err(OneOf::new)?; + + File::open(downloading_path).await.map_err(OneOf::new) } async fn extract_xz_image( &self, input_path: &std::path::Path, output_path: &std::path::Path, - ) -> anyhow::Result<File> { - let output_file = File::create(&output_path).await?; + ) -> Result<File, OneOf<(XzExtractionFailed, std::io::Error)>> { + let output_file = File::create(&output_path).await.map_err(OneOf::new)?; self.set_status(FlashStatus::Active(FlashPhase::Copy, Progress::Pulse)); @@ -125,13 +149,14 @@ .arg("-T0") .stdout(Stdio::from(output_file.into_std().await)) .stderr(Stdio::piped()) - .spawn()?; + .spawn() + .map_err(OneOf::new)?; let stderr = extract_process.stderr.take(); - match extract_process.wait().await? { - x if x.success() => Ok(File::open(&output_path).await?), - _ => Err(XzExtractionError { + match extract_process.wait().await.map_err(OneOf::new)? { + x if x.success() => Ok(File::open(&output_path).await.map_err(OneOf::new)?), + _ => Err(OneOf::new(XzExtractionFailed { details: match stderr { Some(mut stderr) => { let mut err_output = String::new(); @@ -142,30 +167,51 @@ } None => None, }, - } - .into()), + })), } } pub async fn perform(self) { - if let Err(e) = self.perform_job().await { - error!("Flash operation failed: {e}"); - self.set_status(FlashStatus::Done(Some(e.to_string()))); + match self.perform_job().await { + Ok(()) => { + self.set_status(FlashStatus::Done(None)); + } + Err(e) => { + if let Err(e) = e.narrow::<ProcessStoppedByUser, _>() { + error!("Flashing process failed: {e}"); + self.set_status(FlashStatus::Done(Some(e.to_string()))); + } + } } } - fn stopped_running(&self) -> bool { - !self.is_running.load(std::sync::atomic::Ordering::SeqCst) + fn stopped_running(&self) -> Result<(), OneOf<(ProcessStoppedByUser,)>> { + if self.is_running.load(std::sync::atomic::Ordering::SeqCst) { + Ok(()) + } else { + Err(OneOf::new(ProcessStoppedByUser)) + } } - async fn get_source_file_from_image(&self) -> anyhow::Result<File> { + async fn get_source_file_from_image( + &self, + ) -> Result< + File, + OneOf<( + ProcessStoppedByUser, + std::io::Error, + reqwest::Error, + XzExtractionFailed, + TotalSizeCouldNotBeDetermined, + )>, + > { match &self.source { DiskImage::Local { path, compression } => match compression { - Compression::Raw => Ok(File::open(path).await?), + Compression::Raw => Ok(File::open(path).await.map_err(OneOf::new)?), Compression::Xz => { let temp_dir = glib::user_cache_dir(); - std::fs::create_dir_all(&temp_dir)?; + std::fs::create_dir_all(&temp_dir).map_err(OneOf::new)?; let result_path = temp_dir.join( path.file_name() @@ -175,17 +221,23 @@ self.set_status(FlashStatus::Active(FlashPhase::Copy, Progress::Pulse)); - self.extract_xz_image(path, &result_path).await + Ok(self + .extract_xz_image(path, &result_path) + .await + .map_err(OneOf::broaden)?) } }, DiskImage::Online { url, name } => { let temp_dir = glib::user_cache_dir(); - std::fs::create_dir_all(&temp_dir)?; + std::fs::create_dir_all(&temp_dir).map_err(OneOf::new)?; let temporary_download_path = temp_dir.join(name.to_owned() + ".iso"); - self.download_file(temporary_download_path, url).await + Ok(self + .download_file(temporary_download_path, url) + .await + .map_err(OneOf::broaden)?) } } } @@ -199,41 +251,60 @@ .iter() .filter_map(|partition| client.object(partition.inner().path().clone()).ok()) { - udisks_unmount(&partition).await.ok(); + if let Err(e) = udisks_unmount(&partition).await { + error!( + "Failed to unmount partition {:?}, this will be ignored: {e}", + partition.object_path() + ); + } } Ok(()) } - async fn perform_job(&self) -> anyhow::Result<()> { - if self.stopped_running() { - info!("Flash operation was cancelled before starting"); - return Ok(()); - } - - let client = udisks::Client::new().await?; - - let destination_block = self.destination.block().await?; + async fn perform_job( + &self, + ) -> Result< + (), + OneOf<( + ProcessStoppedByUser, + std::io::Error, + reqwest::Error, + udisks::Error, + XzExtractionFailed, + TotalSizeCouldNotBeDetermined, + )>, + > { + self.stopped_running().map_err(OneOf::broaden)?; + + info!( + "Flashing {:?} to {:?}", + self.source, + self.destination.object_path() + ); - let destination_drive = client.drive_for_block(&destination_block).await?; + let client = udisks::Client::new().await.map_err(OneOf::new)?; - let _ = self.unmount_partitions(&client).await; + let destination_block = self.destination.block().await.map_err(OneOf::new)?; - if self.stopped_running() { - info!("Flash operation was cancelled after unmounting partitions, but before flashing"); - return Ok(()); + let destination_drive = client + .drive_for_block(&destination_block) + .await + .map_err(OneOf::new)?; + if let Err(e) = self.unmount_partitions(&client).await { + error!("Error unmounting partitions, will be ignored: {e}"); } - let destination_file = udisks_open(&destination_block).await?; + self.stopped_running().map_err(OneOf::broaden)?; - let source_image = self.get_source_file_from_image().await?; + let destination_file = udisks_open(&destination_block).await.map_err(OneOf::new)?; - if self.stopped_running() { - info!( - "Flash operation was cancelled after preparing source image, but before flashing" - ); - return Ok(()); - } + let source_image = self + .get_source_file_from_image() + .await + .map_err(OneOf::broaden)?; + + self.stopped_running().map_err(OneOf::broaden)?; //TODO: we should probably spawn a UDIsks.Job for this operation, //but udisks-rs does not support this yet @@ -243,11 +314,16 @@ |status| self.set_status(status), self.is_running.clone(), ) - .await; + .await + .map_err(OneOf::broaden)?; - let _ = destination_block.rescan(HashMap::new()).await; + if let Err(e) = destination_block.rescan(HashMap::new()).await { + error!("Error rescanning block device, will be ignored: {e}"); + } - let _ = destination_drive.eject(HashMap::new()).await; + if let Err(e) = destination_drive.eject(HashMap::new()).await { + error!("Error ejecting drive, will be ignored: {e}"); + } Ok(()) } @@ -257,8 +333,8 @@ mut target_file: File, set_status: F, is_running: Arc<AtomicBool>, - ) { - let mut last_sent = Instant::now(); + ) -> Result<(), OneOf<(std::io::Error, ProcessStoppedByUser)>> { + let mut last_set = Instant::now(); let mut total = 0_u64; let size = match image.metadata().await { @@ -269,47 +345,50 @@ } }; + info!("Writing file {image:?} ({size} bytes)"); + let mut source = tokio::io::BufReader::with_capacity(1024 * 1024, image); let mut target = tokio::io::BufWriter::with_capacity(1024 * 1024, &mut target_file); let mut buf = vec![0; 256 * 1024].into_boxed_slice(); - let stopped = || !is_running.load(std::sync::atomic::Ordering::SeqCst); + loop { + let x = tokio::io::AsyncReadExt::read(&mut source, &mut buf) + .await + .map_err(OneOf::new)?; - while let Ok(x) = tokio::io::AsyncReadExt::read(&mut source, &mut buf).await { - if stopped() { - return; - } if x == 0 { break; } + total += x as u64; - if tokio::io::AsyncWriteExt::write_all(&mut target, &buf[..x]) + + tokio::io::AsyncWriteExt::write_all(&mut target, &buf[..x]) .await - .is_err() - { - set_status(FlashStatus::Done(Some(gettext("Writing to disk failed")))); - return; - } + .map_err(OneOf::new)?; - if stopped() { - return; + if !is_running.load(std::sync::atomic::Ordering::SeqCst) { + return Err(OneOf::new(ProcessStoppedByUser)); } - if last_sent.elapsed() >= Duration::from_millis(250) { + if last_set.elapsed() >= Duration::from_millis(250) { set_status(FlashStatus::Active( FlashPhase::Copy, Progress::from((total, size)), )); - last_sent = Instant::now(); + last_set = Instant::now(); } } - target.flush().await.ok(); + if let Err(e) = target.flush().await { + error!("Error flushing data to target, will be ignored: {e}"); + } - let _ = target_file.sync_all().await; + if let Err(e) = target_file.sync_all().await { + error!("Error syncing data to target, will be ignored: {e}"); + } - set_status(FlashStatus::Done(None)); + Ok(()) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/impression-3.5.5/src/window.rs new/impression-3.5.6/src/window.rs --- old/impression-3.5.5/src/window.rs 2025-12-02 08:55:17.000000000 +0100 +++ new/impression-3.5.6/src/window.rs 2025-12-30 03:47:13.000000000 +0100 @@ -99,6 +99,8 @@ pub drag_overlay: TemplateChild<DragOverlay>, #[template_child] pub help_overlay: TemplateChild<adw::ShortcutsDialog>, + #[template_child] + pub error_message_label: TemplateChild<gtk::Label>, pub selected_device_object_path_for_writing: RefCell<Option<String>>, pub selected_image_file_for_reading: RefCell<Option<DiskImage>>, @@ -390,23 +392,9 @@ } }; match state { - FlashStatus::Active(p, x) => { - let flashing_page = &this.imp().flashing_page; - flashing_page.set_description(Some(&match p { - FlashPhase::Download => { - gettext("Writing will begin once the download is completed") - } - FlashPhase::Copy => gettext("This could take a while"), - })); - flashing_page.set_title(&match p { - FlashPhase::Download => gettext("Downloading Image"), - FlashPhase::Copy => gettext("Writing"), - }); - flashing_page.set_icon_name(Some(match p { - FlashPhase::Download => "folder-download-symbolic", - FlashPhase::Copy => "flash-symbolic", - })); - match x { + FlashStatus::Active(phase, progress) => { + this.update_flashing_page(&phase); + match progress { Progress::Fraction(x) => { this.imp().progress_bar.set_fraction(x); } @@ -416,8 +404,12 @@ } glib::MainContext::default().iteration(true); } - FlashStatus::Done(Some(_)) => { + FlashStatus::Done(Some(error_message)) => { this.imp().stack.set_visible_child_name("failure"); + this.imp().error_message_label.set_label(&error_message); + this.imp() + .error_message_label + .set_visible(!error_message.is_empty()); this.set_is_running(false); this.send_notification(gettext("Failed to write image")); glib::MainContext::default().iteration(true); @@ -439,6 +431,24 @@ runtime().spawn(flash_job.perform()); } + fn update_flashing_page(&self, phase: &FlashPhase) { + let flashing_page = &self.imp().flashing_page; + match phase { + FlashPhase::Download => { + flashing_page.set_description(Some(&gettext( + "Writing will begin once the download is completed", + ))); + flashing_page.set_title(&gettext("Downloading Image")); + flashing_page.set_icon_name(Some("folder-download-symbolic")); + } + FlashPhase::Copy => { + flashing_page.set_description(Some(&gettext("This could take a while"))); + flashing_page.set_title(&gettext("Writing")); + flashing_page.set_icon_name(Some("flash-symbolic")); + } + } + } + fn send_notification(&self, message: String) { if !self.is_active() { runtime().spawn(async move { ++++++ impression.obsinfo ++++++ --- /var/tmp/diff_new_pack.ROqlF9/_old 2026-01-06 17:44:03.140313670 +0100 +++ /var/tmp/diff_new_pack.ROqlF9/_new 2026-01-06 17:44:03.140313670 +0100 @@ -1,5 +1,5 @@ name: impression -version: 3.5.5 -mtime: 1764662117 -commit: a005c20934796108b6b70dd90367f68b57c8a766 +version: 3.5.6 +mtime: 1767062833 +commit: 3c1a0d5d1bbff753d770cd3e299cab95777f104c ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/impression/vendor.tar.zst /work/SRC/openSUSE:Factory/.impression.new.1928/vendor.tar.zst differ: char 7, line 1
