metadata: Centralize many loose ends

This commit is contained in:
Sophie Herold 2024-01-01 22:41:56 +01:00
parent b6d578cc0a
commit fe43bc3a4c
21 changed files with 179 additions and 195 deletions

View file

@ -1,4 +1,4 @@
// Copyright (c) 2023 Sophie Herold
// Copyright (c) 2023-2024 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
@ -24,7 +24,7 @@ use gtk::prelude::*;
use super::*;
use crate::decoder::tiling::{self, SharedFrameBuffer};
use crate::deps::*;
use crate::metadata::{ImageFormat, Metadata};
use crate::metadata::Metadata;
pub const FRAME_BUFFER: usize = 3;
@ -57,23 +57,20 @@ impl Glycin {
let image = image_request.request().await?;
if let Some(exif_raw) = image.info().details.exif.clone() {
let mut metadata = Metadata::default();
metadata.set_exif_bytes(exif_raw);
metadata.set_transformations_applied(image.info().details.transformations_applied);
updater.send(DecoderUpdate::Metadata(metadata));
}
let mut metadata: Metadata = Metadata::default();
metadata.set_image_info(image.info().details.clone());
metadata.set_mime_type(image.mime_type());
updater.send(DecoderUpdate::Metadata(Box::new(metadata)));
let dimensions = (image.info().width, image.info().height);
tiles.set_original_dimensions(dimensions);
updater.send(DecoderUpdate::Format(ImageFormat::new(
image.mime_type(),
image.format_name(),
)));
let frame = image.next_frame().await?;
let mut metadata: Metadata = Metadata::default();
metadata.set_frame_info(frame.details);
updater.send(DecoderUpdate::Metadata(Box::new(metadata)));
if let Some(delay) = frame.delay {
updater.send(DecoderUpdate::Animated);

View file

@ -22,10 +22,3 @@ pub use glycin_proxy::Glycin;
pub use svg::{Svg, RSVG_MAX_SIZE};
use super::{DecoderUpdate, UpdateSender};
#[derive(Clone, Debug, Default)]
pub enum ImageDimensionDetails {
Svg(String, Option<(f64, f64)>),
#[default]
None,
}

View file

@ -1,4 +1,4 @@
// Copyright (c) 2023 Sophie Herold
// Copyright (c) 2023-2024 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
@ -27,7 +27,7 @@ use super::*;
use crate::decoder::tiling::SharedFrameBuffer;
use crate::decoder::TileRequest;
use crate::deps::*;
use crate::metadata::ImageFormat;
use crate::metadata::Metadata;
/// Current librsvg limit on maximum dimensions. See
/// <https://gitlab.gnome.org/GNOME/librsvg/-/issues/938>
@ -78,21 +78,12 @@ impl Svg {
let image = image_request.request().await?;
let dimensions = if let Some(string) = image.info().details.dimensions_text.as_ref() {
ImageDimensionDetails::Svg(string.to_string(), image.info().details.dimensions_inch)
} else {
ImageDimensionDetails::None
};
let mut metadata: Metadata = Metadata::default();
metadata.set_image_info(image.info().details.clone());
metadata.set_mime_type(image.mime_type());
updater.send(DecoderUpdate::Metadata(Box::new(metadata)));
tiles.set_original_dimensions_full(
(image.info().width, image.info().height),
dimensions,
);
updater.send(DecoderUpdate::Format(ImageFormat::new(
image.mime_type(),
image.format_name(),
)));
tiles.set_original_dimensions((image.info().width, image.info().height));
loop {
let tile_request = {