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

Reply via email to