No description
Find a file
wfx 823dfe9fa2 Implement comprehensive metadata extraction for raster images with
EXIF support and display in the right panel.

New features:
- Extract basic metadata (filename, format, resolution, file size, color type)
- Parse EXIF data (camera, date, exposure, aperture, ISO, focal length, GPS)
- Display metadata in collapsible right panel (toggle with 'i' key)
- Auto-refresh metadata on document navigation

Changes by file:

Cargo.toml, Cargo.lock:
- Add kamadak-exif dependency for EXIF parsing

i18n/en/noctua.ftl:
- Add translation strings for all metadata labels

src/app/document/meta.rs:
- New module for metadata types (BasicMeta, ExifMeta, DocumentMeta)
- Extraction logic with EXIF parsing via kamadak-exif
- Helper methods for formatted display (resolution, file size, camera, GPS)

src/app/document/mod.rs:
- Re-export meta module

src/app/document/{raster,vector,portable}.rs:
- Add extract_metadata() method stubs (full impl for raster)

src/app/document/file.rs:
- Reset metadata on document change

src/app/message.rs:
- Add ToggleRightPanel and RefreshMetadata messages

src/app/model.rs:
- Add metadata: Option<DocumentMeta> field
- Add show_right_panel: bool field

src/app/update.rs:
- Handle panel toggle and metadata refresh
- Auto-refresh metadata on navigation when panel visible

src/app/view/panels.rs:
- Implement right_panel() with metadata display
- Conditional sections for basic info and EXIF data

src/app/view/canvas.rs:
- Integrate right panel into layout"
2026-01-10 11:46:07 +01:00
i18n/en Implement comprehensive metadata extraction for raster images with 2026-01-10 11:46:07 +01:00
resources Rename icon to org.codeberg.wfx.Noctua.svg (matches app ID) 2026-01-08 20:51:56 +01:00
src Implement comprehensive metadata extraction for raster images with 2026-01-10 11:46:07 +01:00
.gitignore chore: initial commit 2026-01-07 20:22:49 +01:00
Cargo.lock Implement comprehensive metadata extraction for raster images with 2026-01-10 11:46:07 +01:00
Cargo.toml Implement comprehensive metadata extraction for raster images with 2026-01-10 11:46:07 +01:00
i18n.toml chore: initial commit 2026-01-07 20:22:49 +01:00
justfile Fix: correct metainfo path, icon destination, add post-install 2026-01-08 20:49:54 +01:00
LICENSE chore: initial commit 2026-01-07 20:22:49 +01:00
README.md chore: initial commit 2026-01-07 20:22:49 +01:00
rustfmt.toml chore: initial commit 2026-01-07 20:22:49 +01:00

Noctua

An image viewer application for the COSMIC™ desktop

Keyboard Shortcuts

Navigation

Key Action Status
Previous document working
Next document working

Transformations

Key Action Status
H Flip horizontal working
V Flip vertical working
R Rotate clockwise (90°) working
Shift + R Rotate counter-clockwise (90°) working

Zoom

Key Action Status
+ / = Zoom in partial
- Zoom out partial
1 Reset zoom (100% / actual) working
F Fit image to window working

Note: Zoom is recognized but visual feedback is limited without scrollable viewport.

Pan

Key Action Status
Ctrl + ← Pan left not yet implemented
Ctrl + → Pan right not yet implemented
Ctrl + ↑ Pan up not yet implemented
Ctrl + ↓ Pan down not yet implemented
0 Reset pan (center) not yet implemented

Note: Panning requires a scrollable viewport or custom canvas widget.

Modes

Key Action Status
C Toggle crop mode not yet implemented
S Toggle scale mode not yet implemented

Installation

A justfile is included by default for the casey/just command runner.

  • just builds the application with the default just build-release recipe
  • just run builds and runs the application
  • just install installs the project into the system
  • just vendor creates a vendored tarball
  • just build-vendored compiles with vendored dependencies from that tarball
  • just check runs clippy on the project to check for linter warnings
  • just check-json can be used by IDEs that support LSP

Translators

Fluent is used for localization of the software. Fluent's translation files are found in the i18n directory. New translations may copy the English (en) localization of the project, rename en to the desired ISO 639-1 language code, and then translations can be provided for each message identifier. If no translation is necessary, the message may be omitted.

Packaging

If packaging for a Linux distribution, vendor dependencies locally with the vendor rule, and build with the vendored sources using the build-vendored rule. When installing files, use the rootdir and prefix variables to change installation paths.

just vendor
just build-vendored
just rootdir=debian/noctua prefix=/usr install

It is recommended to build a source tarball with the vendored dependencies, which can typically be done by running just vendor on the host system before it enters the build environment.

Developers

Developers should install rustup and configure their editor to use rust-analyzer. To improve compilation times, disable LTO in the release profile, install the mold linker, and configure sccache for use with Rust. The mold linker will only improve link times if LTO is disabled.