diff --git a/Cargo.lock b/Cargo.lock index 5f2a2ed..f1a0a2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -225,9 +225,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "block" @@ -266,7 +266,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae50b5510d86cf96ac2370e66d8dc960882f3df179d6a5a1e52bd94a1416c0f7" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.1", "cairo-sys-rs", "glib", "libc", @@ -343,12 +343,37 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + [[package]] name = "displaydoc" version = "0.2.5" @@ -375,6 +400,21 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + [[package]] name = "endi" version = "1.1.0" @@ -779,7 +819,7 @@ version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707b819af8059ee5395a2de9f2317d87a53dbad8846a2f089f0bb44703f37686" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.1", "futures-channel", "futures-core", "futures-executor", @@ -819,9 +859,9 @@ dependencies = [ [[package]] name = "glycin" -version = "2.1.1" +version = "3.0.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37cb9e103cb6b8925bf5e8a1cf8a1166797d8aaefaabd03e68cf6ad7443a1baa" +checksum = "50c311a183eadcf8775c816f8802b032f211dfa627f6bfeb59e8ecc5879e219a" dependencies = [ "async-fs", "async-io", @@ -851,22 +891,29 @@ dependencies = [ [[package]] name = "glycin-utils" -version = "3.0.1" +version = "4.0.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0816d1db00696479cda3cd6c914fb07115982b019dac96555d203c0d5b6d37a" +checksum = "783271f52742ac92a8f4557f954ed9a7377f6f216bbfc12253fc510abfc9a2b1" dependencies = [ + "async-lock", + "bitflags 2.9.1", + "blocking", "env_logger", + "futures-util", "gufo-common", + "half", "libc", "libseccomp", "log", "memmap2", "nix", "paste", + "rayon", "rmp-serde", "serde", "thiserror", "zbus", + "zerocopy 0.8.21", ] [[package]] @@ -989,9 +1036,9 @@ dependencies = [ [[package]] name = "gufo" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a9601cdbed208693a6ab7a084cb1e2e78bffdfcd96210ec97f5f5eb19ae5fe8" +checksum = "7a501190eb09012d91565b52ee9bb927d9ed9a34649e90b77ae0deaf2fcdd3f8" dependencies = [ "chrono", "gufo-common", @@ -1007,9 +1054,9 @@ dependencies = [ [[package]] name = "gufo-common" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccb2b4c040e67e6d6ad954f04693a11864df82bce6c6c468524b6a78bb75581f" +checksum = "8cb5af73614babb20f5f4500717610d59a9e8231def2f56dfb92662104d10ce3" dependencies = [ "chrono", "paste", @@ -1019,9 +1066,9 @@ dependencies = [ [[package]] name = "gufo-exif" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca82b09b4055d19955579ac4d3fc9ead97392d616624863bd55af500d3232ff0" +checksum = "005e335f23848568d44652823834de7b65a861241e6f6e40e44a7d5f03908a98" dependencies = [ "chrono", "gufo-common", @@ -1031,9 +1078,9 @@ dependencies = [ [[package]] name = "gufo-jpeg" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "047379e4825d1a8581f0bf0daa841d71eff1503229bcdef004ad1d18e17b39f0" +checksum = "20c9d27fcd8cd5bc32c47784a9fcb808fb9c2203b96333a06a57792a5b709ebd" dependencies = [ "gufo-common", "thiserror", @@ -1042,10 +1089,12 @@ dependencies = [ [[package]] name = "gufo-png" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07a166e53b637b2ccc4eb4ab61b9daaccc806e150af227f596a099448f10752" +checksum = "03759e1097203f420e098433f9759e0ace4a3eefef86dad2da9b0bb7fe91e653" dependencies = [ + "crc32fast", + "encoding_rs", "gufo-common", "hex", "miniz_oxide", @@ -1054,9 +1103,9 @@ dependencies = [ [[package]] name = "gufo-tiff" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e69f1a75908282b76dddc5e643de72b1598a6cf837b97786461514550be4ed" +checksum = "e56111e257bdfde9a1faec1d373bcd629c02ecf6a136d45f87eabddf31d42675" dependencies = [ "gufo-common", "thiserror", @@ -1064,9 +1113,9 @@ dependencies = [ [[package]] name = "gufo-webp" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "846f879d7abcab5b6bb32adae0f8006bbaab3eec9d2a17859d5090925389cf5f" +checksum = "8c20825644cc8f8a1cd594e818ab585925ad32bd0dad79b55504112f56b8248e" dependencies = [ "gufo-common", "thiserror", @@ -1074,9 +1123,9 @@ dependencies = [ [[package]] name = "gufo-xmp" -version = "0.2.0" +version = "0.3.0-alpha" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c6dd9093b5167ca6808e07d163d215d5a1747999579df320e1259d9cec7e6b" +checksum = "e0225bd9d5bf73ab3785b7a455554a49f4e78c7653253da60b79841af34be644" dependencies = [ "chrono", "gufo-common", @@ -1124,6 +1173,16 @@ dependencies = [ "system-deps", ] +[[package]] +name = "half" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -1560,7 +1619,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.1", "cfg-if", "cfg_aliases", "libc", @@ -1800,6 +1859,26 @@ dependencies = [ "zerocopy 0.8.21", ] +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "regex" version = "1.11.1" @@ -1881,7 +1960,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.1", "errno", "libc", "linux-raw-sys", @@ -2427,7 +2506,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.1", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1027099..6fbae7b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,13 +27,13 @@ chrono = { version = "0.4.38", default-features = false, features = ["std"] } gettext-rs = { version = "0.7.0", features = ["gettext-system"] } gettext-sys = { version = "0.22.5", features = ["gettext-system"] } gio = { version = "0.20.0", features = ["v2_74"] } -glycin = { version = "2.1.1", features = ["gdk4"] } +glycin = { version = "3.0.0-alpha", features = ["gdk4"] } gtk = { package = "gtk4", version = "0.9.5", features = [ "v4_14", "xml_validation", ] } -gufo = { version = "0.2.0", features = ["chrono", "all-image-formats"] } -gufo-common = { version = "0.2.0", features = ["serde"] } +gufo = { version = "0.3.0-alpha", features = ["chrono", "all-image-formats"] } +gufo-common = { version = "0.3.0-alpha", features = ["serde"] } gvdb-macros = "0.1.6" indexmap = "2.0.0" libc = "0.2.158" diff --git a/build-aux/flatpak/org.gnome.Loupe.Devel.json b/build-aux/flatpak/org.gnome.Loupe.Devel.json index 64e2914..7b97075 100644 --- a/build-aux/flatpak/org.gnome.Loupe.Devel.json +++ b/build-aux/flatpak/org.gnome.Loupe.Devel.json @@ -102,21 +102,6 @@ } ] }, - { - "name": "glycin", - "buildsystem": "meson", - "config-opts": [ - "-Dloaders=glycin-image-rs,glycin-heif,glycin-jxl,glycin-svg,glycin-raw", - "-Dlibglycin=false" - ], - "sources": [ - { - "type": "archive", - "url": "https://download.gnome.org/sources/glycin/1.2/glycin-1.2.1.tar.xz", - "sha256": "ccc578e9a3e83d0dc1535737d1fda09baa95c7167f5e5ecb15f786654094eed5" - } - ] - }, { "name": "loupe", "buildsystem": "meson", diff --git a/src/about.rs b/src/about.rs index af7dd5e..8e4cd80 100644 --- a/src/about.rs +++ b/src/about.rs @@ -3,6 +3,7 @@ // Copyright (c) 2023 Christopher Davis // Copyright (c) 2024 Andre Klapper // Copyright (c) 2024 Dexter Reed +// Copyright (c) 2025 sid // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by diff --git a/src/decoder/formats/glycin_proxy.rs b/src/decoder/formats/glycin_proxy.rs index 78bc477..be6fa88 100644 --- a/src/decoder/formats/glycin_proxy.rs +++ b/src/decoder/formats/glycin_proxy.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2023-2024 Sophie Herold +// Copyright (c) 2023-2025 Sophie Herold // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -59,7 +59,7 @@ impl Glycin { log::trace!("Image info received"); let mut metadata: Metadata = Metadata::default(); - metadata.set_image_info(image.info().details.clone()); + metadata.set_image_info(image.info().clone()); metadata.set_mime_type(image.mime_type().to_string()); updater.send(DecoderUpdate::Metadata(Box::new(metadata))); diff --git a/src/decoder/formats/svg.rs b/src/decoder/formats/svg.rs index 0a10c6e..1442804 100644 --- a/src/decoder/formats/svg.rs +++ b/src/decoder/formats/svg.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2023-2024 Sophie Herold +// Copyright (c) 2023-2025 Sophie Herold // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -77,7 +77,7 @@ impl Svg { let image = loader.load().await?; let mut metadata: Metadata = Metadata::default(); - metadata.set_image_info(image.info().details.clone()); + metadata.set_image_info(image.info().clone()); metadata.set_mime_type(image.mime_type().to_string()); updater.send(DecoderUpdate::Metadata(Box::new(metadata))); diff --git a/src/metadata.rs b/src/metadata.rs index e438402..1d68a3a 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -25,7 +25,7 @@ use std::str::FromStr; use chrono::prelude::*; pub use file::FileInfo; use glib::TimeZone; -use glycin::{Frame, FrameDetails, ImageInfoDetails, MemoryFormat}; +use glycin::{Frame, FrameDetails, ImageInfo, MemoryFormat}; use gufo::common::datetime::DateTime; use gufo::common::orientation::Orientation; @@ -38,7 +38,7 @@ pub struct Metadata { mime_type: Option, metadata: gufo::Metadata, file_info: Option, - image_info: Option, + image_info: Option, frame_info: Option, memory_format: Option, } @@ -60,7 +60,7 @@ impl Metadata { } } - pub fn set_image_info(&mut self, image_info: ImageInfoDetails) { + pub fn set_image_info(&mut self, image_info: ImageInfo) { if let Some(exif_raw) = image_info.exif.as_ref().and_then(|x| x.get_full().ok()) { self.set_exif_bytes(exif_raw); }