From 063770749e988aafe05e0a59ad9dcb3353b1bade Mon Sep 17 00:00:00 2001 From: burnintuna Date: Fri, 21 Aug 2026 21:47:59 +0900 Subject: [PATCH 1/2] Release v0.2.14 --- Cargo.lock | 2 +- Cargo.toml | 2 +- data/io.github.comicviewer.Comicviewer.metainfo.xml | 1 + docs/INSTALL.ko.md | 2 +- docs/RELEASING.ko.md | 8 ++++---- src/viewer.rs | 6 ++++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2d20caf..ef41b2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -182,7 +182,7 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "comicviewer" -version = "0.2.13" +version = "0.2.14" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index ec6a456..9a0e272 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "comicviewer" -version = "0.2.13" +version = "0.2.14" edition = "2024" description = "A comic archive viewer for local and remote locations" license = "GPL-3.0-or-later" diff --git a/data/io.github.comicviewer.Comicviewer.metainfo.xml b/data/io.github.comicviewer.Comicviewer.metainfo.xml index 2764138..d7e57fd 100644 --- a/data/io.github.comicviewer.Comicviewer.metainfo.xml +++ b/data/io.github.comicviewer.Comicviewer.metainfo.xml @@ -26,6 +26,7 @@ + diff --git a/docs/INSTALL.ko.md b/docs/INSTALL.ko.md index b444ff3..c0bb076 100644 --- a/docs/INSTALL.ko.md +++ b/docs/INSTALL.ko.md @@ -96,7 +96,7 @@ Comicviewer는 XDG 표준 경로를 사용합니다. - `L`: 우측 파일 목록 표시 또는 숨기기 - 파일 목록 상단 검색: 현재 재생 목록을 임시로 필터링하며, 입력을 지우면 전체 목록 복원 - About 창의 `업데이트`: Cafe24에서 최신 번들을 내려받아 검증 후 사용자 영역에 설치 -- 이미지에서 `+`와 `-`: 현재 화면의 이미지를 임시로 10%씩 확대 또는 축소 +- 이미지에서 `+`/`=`와 `-`: 현재 화면의 이미지를 임시로 10%씩 확대 또는 축소 - 이미지에서 `Ctrl` + 마우스 휠: 현재 화면의 이미지를 임시로 10%씩 확대 또는 축소 - 2페이지의 `좌→우`/`우→좌` 방향은 마지막 선택을 저장해 다음 뷰어에서 복원 - 전체 화면에서 마우스 클릭: 숨겨진 컨트롤을 5초 동안 표시 diff --git a/docs/RELEASING.ko.md b/docs/RELEASING.ko.md index b2ef6c2..a05bf1f 100644 --- a/docs/RELEASING.ko.md +++ b/docs/RELEASING.ko.md @@ -55,7 +55,7 @@ AppImage 빌드가 끝나면 다음 스크립트로 체크섬과 통합 `tar.gz` 스크립트는 `Cargo.toml`에서 버전을 읽고 다음 파일을 생성합니다. -- `dist/Comicviewer-0.2.13-x86_64.AppImage.sha256` +- `dist/Comicviewer-0.2.14-x86_64.AppImage.sha256` - `dist/Comicviewer-latest-x86_64.tar.gz` - `dist/Comicviewer-latest-x86_64.tar.gz.sha256` @@ -78,10 +78,10 @@ sha256sum -c Comicviewer-latest-x86_64.tar.gz.sha256 ```sh git add Cargo.toml Cargo.lock data packaging README.md docs -git commit -m "Release v0.2.13" -git tag -a v0.2.13 -m "Comicviewer v0.2.13" +git commit -m "Release v0.2.14" +git tag -a v0.2.14 -m "Comicviewer v0.2.14" git push origin main -git push origin v0.2.13 +git push origin v0.2.14 ``` 이미 원격에 공개한 태그는 이동하거나 덮어쓰지 않습니다. 수정이 필요하면 새 diff --git a/src/viewer.rs b/src/viewer.rs index bf1c005..8832a74 100644 --- a/src/viewer.rs +++ b/src/viewer.rs @@ -1003,7 +1003,7 @@ impl ViewerController { controller.open_sibling(true); glib::Propagation::Stop } - gdk::Key::plus | gdk::Key::KP_Add => { + gdk::Key::plus | gdk::Key::equal | gdk::Key::KP_Add => { controller.adjust_image_zoom(true); glib::Propagation::Stop } @@ -2636,7 +2636,9 @@ impl MediaViewerController { controller.open_sibling(true); glib::Propagation::Stop } - gdk::Key::plus | gdk::Key::KP_Add if controller.kind == EntryKind::Image => { + gdk::Key::plus | gdk::Key::equal | gdk::Key::KP_Add + if controller.kind == EntryKind::Image => + { controller.adjust_image_zoom(true); glib::Propagation::Stop } From 9aac91ccb1a069be907a619743df0b17822e6913 Mon Sep 17 00:00:00 2001 From: burnintuna Date: Fri, 21 Aug 2026 22:06:04 +0900 Subject: [PATCH 2/2] Release v0.2.15 --- Cargo.lock | 2 +- Cargo.toml | 2 +- ...ithub.comicviewer.Comicviewer.metainfo.xml | 1 + docs/RELEASING.ko.md | 8 ++-- src/viewer.rs | 43 +++++++++++++++++-- 5 files changed, 47 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ef41b2c..d2bdc54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -182,7 +182,7 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "comicviewer" -version = "0.2.14" +version = "0.2.15" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 9a0e272..5af3812 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "comicviewer" -version = "0.2.14" +version = "0.2.15" edition = "2024" description = "A comic archive viewer for local and remote locations" license = "GPL-3.0-or-later" diff --git a/data/io.github.comicviewer.Comicviewer.metainfo.xml b/data/io.github.comicviewer.Comicviewer.metainfo.xml index d7e57fd..9fa6f2b 100644 --- a/data/io.github.comicviewer.Comicviewer.metainfo.xml +++ b/data/io.github.comicviewer.Comicviewer.metainfo.xml @@ -26,6 +26,7 @@ + diff --git a/docs/RELEASING.ko.md b/docs/RELEASING.ko.md index a05bf1f..d2551ee 100644 --- a/docs/RELEASING.ko.md +++ b/docs/RELEASING.ko.md @@ -55,7 +55,7 @@ AppImage 빌드가 끝나면 다음 스크립트로 체크섬과 통합 `tar.gz` 스크립트는 `Cargo.toml`에서 버전을 읽고 다음 파일을 생성합니다. -- `dist/Comicviewer-0.2.14-x86_64.AppImage.sha256` +- `dist/Comicviewer-0.2.15-x86_64.AppImage.sha256` - `dist/Comicviewer-latest-x86_64.tar.gz` - `dist/Comicviewer-latest-x86_64.tar.gz.sha256` @@ -78,10 +78,10 @@ sha256sum -c Comicviewer-latest-x86_64.tar.gz.sha256 ```sh git add Cargo.toml Cargo.lock data packaging README.md docs -git commit -m "Release v0.2.14" -git tag -a v0.2.14 -m "Comicviewer v0.2.14" +git commit -m "Release v0.2.15" +git tag -a v0.2.15 -m "Comicviewer v0.2.15" git push origin main -git push origin v0.2.14 +git push origin v0.2.15 ``` 이미 원격에 공개한 태그는 이동하거나 덮어쓰지 않습니다. 수정이 필요하면 새 diff --git a/src/viewer.rs b/src/viewer.rs index 8832a74..3587a91 100644 --- a/src/viewer.rs +++ b/src/viewer.rs @@ -286,7 +286,11 @@ impl ViewerWindow { } = controls; let direction_control = two_page_direction_control .expect("archive viewer requires a two-page direction control"); - let title = source.display_name.clone(); + let title_files = sibling_navigator + .as_ref() + .map(SiblingNavigator::files) + .unwrap_or_default(); + let title = viewer_file_title(&source.display_name, &source.source_uri, &title_files); let file_list_query = reuse_window .as_ref() .map(viewer_file_search_query) @@ -2260,7 +2264,11 @@ impl MediaViewerWindow { view_mode_control, two_page_direction_control: _, } = controls; - let title = source.display_name.clone(); + let title_files = sibling_navigator + .as_ref() + .map(SiblingNavigator::files) + .unwrap_or_default(); + let title = viewer_file_title(&source.display_name, &source.source_uri, &title_files); let file_list_query = reuse_window .as_ref() .map(viewer_file_search_query) @@ -2341,7 +2349,7 @@ impl MediaViewerWindow { }); stack.add_named(&video, Some("video")); let status_label = gtk::Label::builder() - .label(&title) + .label(&source.display_name) .xalign(0.0) .margin_top(6) .margin_bottom(6) @@ -3425,6 +3433,13 @@ fn viewer_title_label(title: &str) -> gtk::Label { .build() } +fn viewer_file_title(display_name: &str, current_uri: &str, files: &[SiblingFile]) -> String { + seek_position(files, current_uri).map_or_else( + || display_name.to_owned(), + |index| format!("{display_name} ({}/{})", index + 1, files.len()), + ) +} + struct ViewerFileList { panel: gtk::Box, search: gtk::SearchEntry, @@ -4292,6 +4307,28 @@ mod tests { assert_eq!(seek_sibling_files(files, EntryKind::Image, true).len(), 3); } + #[test] + fn viewer_title_includes_current_file_index() { + let files = ["first.zip", "second.jpg", "third.mp4"].map(|name| SiblingFile { + uri: format!("file:///{name}"), + name: name.into(), + kind: EntryKind::Image, + }); + + assert_eq!( + viewer_file_title("second.jpg", "file:///second.jpg", &files), + "second.jpg (2/3)" + ); + assert_eq!( + viewer_file_title("missing.jpg", "file:///missing.jpg", &files), + "missing.jpg" + ); + assert_eq!( + viewer_file_title("only.jpg", "file:///only.jpg", &[]), + "only.jpg" + ); + } + #[test] fn playlist_search_filters_and_empty_query_restores_files() { let files = ["Alpha.zip", "beta.jpg", "Bravo.mp4"].map(|name| SiblingFile {