Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3b024e0
Bring the source tarball back
luisangelsm May 1, 2026
014216d
Update CMakeList to make 7zip the default on Linux
luisangelsm May 2, 2026
5b8bb7f
Improve save current page. It includes the comic file name in the def…
luisangelsm May 6, 2026
714159c
Use the right source image in the magnifying glass
luisangelsm May 6, 2026
ef42d90
Bump VERSION
luisangelsm May 6, 2026
a47daf5
Improve code format scripts performance
luisangelsm May 6, 2026
d4d5e5b
Improve last page detection in continuous scroll mode
luisangelsm May 6, 2026
5a17b76
Fix compression backend detection in the system information provider
luisangelsm May 6, 2026
f67d1ec
Improve What's new dialog
luisangelsm May 6, 2026
7b59ba0
Remove QtWidgets dependency from ContinuousViewModel
luisangelsm May 7, 2026
32ec54e
Simplify and fix release notes publication version matching
luisangelsm May 7, 2026
1f37a7f
Fix debug changes pushed by mistake
luisangelsm May 7, 2026
e746766
Add a extract page feature
luisangelsm May 7, 2026
d30fee1
Fix translation files and translation generation
luisangelsm May 7, 2026
1630f9e
Add Korean translation for YACReader
MerciHanrim May 4, 2026
6e43a63
Add Korean translation for YACReaderLibrary
MerciHanrim May 4, 2026
cfb90c4
Add Korean translation for YACReaderLibraryServer
MerciHanrim May 4, 2026
f2caaf8
Rebase Korean translation + cmake integration
luisangelsm May 8, 2026
9458ca8
Translate new strings for YACReader 10.1
MerciHanrim May 8, 2026
5ab0293
Translate new strings for YACReader 10.1
MerciHanrim May 8, 2026
e843b72
Merge pull request #535 from MerciHanrim/add-korean-translation
luisangelsm May 8, 2026
5d2b194
Don't crash if there are no IP address
luisangelsm May 9, 2026
4d68c1e
Fail at launch if the server can't start
luisangelsm May 9, 2026
f87f345
Use non zero return values on errors
luisangelsm May 9, 2026
02d0801
Merge pull request #539 from YACReader/538-server-crash-at-startup-wh…
luisangelsm May 9, 2026
e25b9ac
Update CHANGELOG
luisangelsm May 9, 2026
cb3564e
Rember save/export page paths between runs
luisangelsm May 11, 2026
643a656
Make Docker builds work in PRs from forks
luisangelsm May 11, 2026
596115f
feat(docker): Add multi-stage build with Ubuntu Resolute and kimagefo…
nickv2002 May 11, 2026
1363642
fix(docker): Revert COPY root.tar.gz path to match upstream build con…
nickv2002 May 11, 2026
a1e1d56
feat(docker): Apply resolute + kimageformats to Dockerfile.aarch64
nickv2002 May 11, 2026
a616dd3
refactor(docker): Split 7zip build into its own stage for aarch64
nickv2002 May 11, 2026
ce5bba0
Merge pull request #505 from nickv2002/feat/docker-kimageformats-v2
luisangelsm May 13, 2026
9ebdd06
Fix low quality images being generated on save page
luisangelsm May 20, 2026
2713dbe
refactor(docker): Consolidate Dockerfile.aarch64 into Dockerfile
nickv2002 May 11, 2026
7f4190b
Merge pull request #540 from nickv2002/feat/docker-merge-dockerfiles
luisangelsm May 20, 2026
d00a37b
fix: remove world writable permissions from install folder and binary
timbretimber May 19, 2026
328ea1a
Merge pull request #544 from timbretimber/installer-perms2
luisangelsm May 20, 2026
049f250
Better system theme detection
luisangelsm May 30, 2026
ad09584
Make QML based views have safer setup
luisangelsm Jun 9, 2026
bd88245
Fix firewall rule for YACReaderLibrary
luisangelsm Jun 10, 2026
541a01e
Fix windows arm bundling
luisangelsm Jun 12, 2026
fe23965
Redirect `/` to `/webui`
luisangelsm Jun 18, 2026
9c1081c
New webui + web based settings for the server
luisangelsm Jun 20, 2026
4655a6a
Add a button to open the changelog
luisangelsm Jun 20, 2026
d2dc532
Add a new web content browser to `/webui`.
luisangelsm Jun 20, 2026
bdc668c
Add new http api for update libraries + webui update libraries implem…
luisangelsm Jun 21, 2026
01a9f0c
Include universal_number in http api search results
luisangelsm Jun 24, 2026
5664bb1
Fix issue number reading from SQL in getReadingListFullContent
luisangelsm Jun 24, 2026
017a61e
Fix comics sorting when handling the current list of comics from YACR…
luisangelsm Jun 24, 2026
a2a67c7
Don't use hardcoded positional indexes to access query results + incl…
luisangelsm Jun 24, 2026
9026de0
Update CHANGELOG
luisangelsm Jun 24, 2026
91f5cd1
Add support for long paths on Windows
luisangelsm Jun 27, 2026
9391f99
Update QtWebApp to the latest version 1.9.1
luisangelsm Jun 28, 2026
6ce9807
Unify pdf targe page size render
luisangelsm Jun 28, 2026
f4ae995
Update CHANGELOG
luisangelsm Jun 28, 2026
9d669eb
New content provider for the continuous scroll widget to improve perf…
luisangelsm Jun 28, 2026
5bf4ed7
Make sure we don't clear already loaded pages when we switch to the c…
luisangelsm Jun 29, 2026
4a20469
Keep any active signals block when switching between fit modes to pre…
luisangelsm Jun 29, 2026
20034c6
Sync render with the continuous scroll mode state
luisangelsm Jun 29, 2026
44d14a0
Update CHANGELOG
luisangelsm Jun 29, 2026
22975c6
Fix leaked db connection
luisangelsm Jun 30, 2026
2b88a0c
Delay showing the what's new dialog after the window is shown when st…
luisangelsm Jul 1, 2026
e1d6e53
Make sure models are actually loaded before trying to use them
luisangelsm Jul 1, 2026
65ee651
Update CHANGELOG and what's new for 10.1 release
luisangelsm Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/actions/extract-release-notes/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ runs:
shell: bash
run: |
VERSION="${{ inputs.version }}"
MAJOR="${VERSION%%.*}"
# Try exact version match first, fall back to major version match
NOTES=$(awk "/^## ${VERSION}( |$)/{found=1; next} /^## /{if(found) exit} found{print}" CHANGELOG.md)
if [ -z "$NOTES" ]; then
NOTES=$(awk "/^## ${MAJOR}( |$)/{found=1; next} /^## /{if(found) exit} found{print}" CHANGELOG.md)
CHANGELOG_VERSION=$(printf "%s\n" "$VERSION" | sed -nE 's/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/p')
if [ -z "$CHANGELOG_VERSION" ]; then
echo "Unable to derive x.y.z changelog version from '$VERSION'" >&2
exit 1
fi
CHANGELOG_VERSION_PATTERN=$(printf "%s\n" "$CHANGELOG_VERSION" | sed 's/[.[\*^$()+?{}|\\]/\\&/g')
NOTES=$(awk "/^## ${CHANGELOG_VERSION_PATTERN}( |$)/{found=1; next} /^## /{if(found) exit} found{print}" CHANGELOG.md)
{
echo "notes<<EOF"
echo "$NOTES"
Expand Down
66 changes: 64 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,27 @@ jobs:
git diff ${{ github.sha }}
if [ "$(git diff ${{ github.sha }})" != "" ]; then exit 1; fi

# Source tarball
source-tarball:
name: Source Tarball
runs-on: ubuntu-24.04
needs: [initialization, code-format-validation]
steps:
- uses: actions/checkout@v6

- name: Create tarball
run: |
VERSION="$(tr -d '\r\n' < VERSION)"
./mktarball.sh "$VERSION"
mkdir tarball
cp yacreader-*-src.tar.xz* tarball/

- name: Upload tarball
uses: actions/upload-artifact@v6
with:
name: src-${{ needs.initialization.outputs.build_number }}-tarball
path: tarball/*

# Linux Qt6 build
linux-qt6:
name: Linux (Qt6)
Expand Down Expand Up @@ -388,9 +409,42 @@ jobs:
shell: cmd
working-directory: ci/win
run: |
rem The ARM64 cross package's own tools cannot run on the x64 runner, so use
rem the host x64 windeployqt but point it at the ARM64 Qt via qtpaths,
rem otherwise it deploys x64 Qt DLLs and the app dies with 0xc000007b on ARM.
if not exist C:\Qt\6.9.3\msvc2022_arm64\bin\qtpaths.bat (
echo qtpaths.bat not found in the ARM64 Qt package & exit /b 1
)
set PATH=C:\Qt\6.9.3\msvc2022_64\bin;%PATH%
set WINDEPLOYQT_EXTRA_ARGS=--qtpaths C:\Qt\6.9.3\msvc2022_arm64\bin\qtpaths.bat
.\create_installer.cmd arm64 7z ${{ needs.initialization.outputs.build_number }}

- name: Verify deployed binaries are ARM64
shell: pwsh
working-directory: ci/win
run: |
$bad = @()
Get-ChildItem -Path installer_contents -Recurse -Include *.dll, *.exe |
Where-Object { $_.Name -notlike 'vc_redist*' } |
ForEach-Object {
$fs = [System.IO.File]::OpenRead($_.FullName)
try {
$br = New-Object System.IO.BinaryReader($fs)
$null = $fs.Seek(0x3C, 'Begin')
$peOffset = $br.ReadInt32()
$null = $fs.Seek($peOffset + 4, 'Begin')
$machine = $br.ReadUInt16()
} finally { $fs.Close() }
if ($machine -ne 0xAA64) {
$bad += ('{0} (machine: 0x{1:X4})' -f $_.FullName, $machine)
}
}
if ($bad.Count -gt 0) {
$bad | ForEach-Object { Write-Host "Not ARM64: $_" }
throw "$($bad.Count) non-ARM64 binaries found in installer contents"
}
Write-Host "All deployed DLLs/EXEs are ARM64"

- name: Verify installer was created
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
shell: pwsh
Expand Down Expand Up @@ -456,7 +510,10 @@ jobs:
- name: Build amd64 Image
working-directory: docker
run: |
docker build --no-cache --platform linux/amd64 -f Dockerfile --build-arg YACR_VERSION=${{ github.head_ref || github.ref_name }} -t yacreader/yacreaderlibraryserver:develop-amd64 .
docker build --no-cache --platform linux/amd64 -f Dockerfile \
--build-arg YACR_REPOSITORY=${{ github.event.pull_request.head.repo.clone_url || format('https://github.com/{0}.git', github.repository) }} \
--build-arg YACR_VERSION=${{ github.event.pull_request.head.sha || github.sha }} \
-t yacreader/yacreaderlibraryserver:develop-amd64 .
docker save yacreader/yacreaderlibraryserver:develop-amd64 -o amd64.tar

- name: Upload Docker Image
Expand All @@ -476,7 +533,10 @@ jobs:
- name: Build arm64 Image (native)
working-directory: docker
run: |
docker build --no-cache -f Dockerfile.aarch64 --build-arg YACR_VERSION=${{ github.head_ref || github.ref_name }} -t yacreader/yacreaderlibraryserver:develop-arm64 .
docker build --no-cache --platform linux/arm64 -f Dockerfile \
--build-arg YACR_REPOSITORY=${{ github.event.pull_request.head.repo.clone_url || format('https://github.com/{0}.git', github.repository) }} \
--build-arg YACR_VERSION=${{ github.event.pull_request.head.sha || github.sha }} \
-t yacreader/yacreaderlibraryserver:develop-arm64 .
docker save yacreader/yacreaderlibraryserver:develop-arm64 -o arm64.tar

- name: Upload Docker Image
Expand All @@ -492,6 +552,7 @@ jobs:
runs-on: ubuntu-24.04
needs:
- initialization
- source-tarball
- linux-qt6
- linux-qt6-7zip
- macos-qt6-universal
Expand Down Expand Up @@ -559,6 +620,7 @@ jobs:
runs-on: ubuntu-24.04
needs:
- initialization
- source-tarball
- linux-qt6
- linux-qt6-7zip
- macos-qt6-universal
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ cmake --build build --parallel
```

Build options:
- `DECOMPRESSION_BACKEND`: `unarr` | `7zip` | `libarchive` (default: 7zip on Windows/macOS, unarr on Linux)
- `DECOMPRESSION_BACKEND`: `unarr` | `7zip` | `libarchive` (default: 7zip on Windows/macOS/Linux)
- `PDF_BACKEND`: `pdfium` | `poppler` | `pdfkit` | `no_pdf` (default: pdfium on Windows, pdfkit on macOS, poppler on Linux)
- `BUILD_SERVER_STANDALONE=ON`: builds only `YACReaderLibraryServer` (headless), requires only Qt 6.4+
- `BUILD_TESTS=ON` (default): enables the test suite
Expand Down
35 changes: 34 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,40 @@

Version counting is based on semantic versioning (Major.Feature.Patch)

## 10
## 10.1.0

### YACReader
* Improve save current page. It includes the comic file name in the default image name and the page number.
* Add an extract page action. It extracts the original visible pages when image based variants are used. The file name and page number are used as the output.
* Save the destination path for save/export page between runs.
* Fix low resolution images generated on `save current page`.
* Fix magnifying glass not using the source material.
* Improve last page detection in continuous scroll mode.
* Improve What's new dialog to show the full changelog.
* Improve continuous scroll mode with better performance and less flickering when resizing/loading.
* Fix reading position being reset to the cover when changing between fit modes.

### YACReaderLibrary
* Fix comics order when opening a comic from YACReaderLibrary.

### YACReaderLibraryServer
* Don't crash at startup if the server can't bind to any address.
* Redirect `/` to `/webui`.
* New `/webui` design.
* Settings regarding metadata and auto-libraries updates can be controlled from `/webui/settings`.
* Add a new web content browser to `/webui`.
* Add update libraries functionality to `/webui`.
* Fix `number` in various HTTP APIs.

### All GUI Apps
* Better system theme detection.
* New button in the help dialog for showing the changelog.

### All apps
* Add support for long paths on Windows. This is experimental and only includes library creation and opening files (including the server), other functionality may or may not work with long paths, but the critical aspect of this is the folder structure of the library so overall it is a big win. NOTE: You need to enable long paths support on Windows itself for this to work, `HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem` -> `LongPathsEnabled` -> `1`.
* Better PDF rendering that accounts for tall images used in web comics.

## 10.0.0

### YACReader
* Add support for continuous scroll mode.
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ set(BUILD_NUMBER "" CACHE STRING "CI build number")
set(YACREADER_DECOMPRESSION_BACKENDS unarr 7zip libarchive)
set(YACREADER_PDF_BACKENDS pdfium poppler pdfkit no_pdf)

# --- Platform defaults (mirrors config.pri) ---
# --- Platform defaults ---
if(UNIX AND NOT APPLE)
set(_default_decompression_backend "unarr")
set(_default_decompression_backend "7zip")
set(_default_pdf_backend "poppler")
elseif(APPLE)
set(_default_decompression_backend "7zip")
Expand Down
10 changes: 5 additions & 5 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ required qml modules (Quick, QuickControls2) are missing.

### Decompression

YACReader currently supports two decompression backends, 7zip and (lib)unarr. YACReader
defaults to 7zip for Windows and Mac OS and unarr for Linux and other OS, but you can
YACReader currently supports three decompression backends: 7zip, (lib)unarr, and libarchive. YACReader
defaults to 7zip for Windows, macOS, Linux, and other OSes, but you can
override this using the `DECOMPRESSION_BACKEND` option:

```
Expand All @@ -52,9 +52,9 @@ cmake -B build -DDECOMPRESSION_BACKEND=libarchive

#### 7zip

[7zip](https://www.7-zip.org/) is the default decompression backend for Windows and Mac OS builds.
[7zip](https://www.7-zip.org/) is the default decompression backend.

It is recommended for these systems, as it currently has better support for 7z
It is recommended for most builds, as it currently has better support for 7z
files and supports the RAR5 format.

The 7zip source code is automatically downloaded during configuration via CMake's
Expand All @@ -65,7 +65,7 @@ recommended for installations where the license is an issue.

#### unarr

[(lib)unarr](https://github.com/selmf/unarr) is the default backend for Linux builds.
[(lib)unarr](https://github.com/selmf/unarr) is a lightweight decompression backend.

As of version 1.0.1, it supports less formats than 7zip, notably missing RAR5 support and only having
limited support for 7z on git versions. However, this is rarely an issue in practice as the vast majority
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
10.0.0
10.1.0
20 changes: 20 additions & 0 deletions YACReader/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ qt_add_executable(YACReader WIN32
main_window_viewer.cpp
continuous_page_widget.h
continuous_page_widget.cpp
continuous_page_provider.h
continuous_page_provider.cpp
continuous_view_model.h
continuous_view_model.cpp
mouse_handler.h
Expand Down Expand Up @@ -107,6 +109,7 @@ set(yacreader_image_files
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/rotateL.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/rotateR.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/save.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/extract.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/shortcuts.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/showBookmarks.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/toHeight.svg
Expand Down Expand Up @@ -135,6 +138,7 @@ set(yacreader_image_files
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/rotateL_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/rotateR_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/save_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/extract_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/shortcuts_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/showBookmarks_18x18.svg
${PROJECT_SOURCE_DIR}/images/viewer_toolbar/toHeight_18x18.svg
Expand Down Expand Up @@ -201,6 +205,12 @@ qt_add_resources(YACReader "yacreader_files_es"
FILES
${yacreader_file_files_es}
)
qt_add_resources(YACReader "yacreader_changelog"
PREFIX "/files"
BASE "${PROJECT_SOURCE_DIR}"
FILES
${PROJECT_SOURCE_DIR}/CHANGELOG.md
)
qt_add_resources(YACReader "yacreader_themes"
PREFIX "/themes"
BASE "${CMAKE_CURRENT_SOURCE_DIR}/themes"
Expand All @@ -216,6 +226,12 @@ qt_add_resources(YACReader "yacreader_common_theme_images"

# Translations
qt_add_translations(YACReader
SOURCE_TARGETS
YACReader
comic_backend
common_gui
custom_widgets_reader
shortcuts_reader
TS_FILES
yacreader_es.ts
yacreader_fr.ts
Expand All @@ -228,6 +244,7 @@ qt_add_translations(YACReader
yacreader_zh_TW.ts
yacreader_zh_HK.ts
yacreader_it.ts
yacreader_ko.ts
yacreader_source.ts
yacreader_en.ts
)
Expand Down Expand Up @@ -255,6 +272,9 @@ target_link_libraries(YACReader PRIVATE
# Platform-specific
if(WIN32)
target_sources(YACReader PRIVATE icon.rc)
if(MSVC)
target_link_options(YACReader PRIVATE "/MANIFESTINPUT:${PROJECT_SOURCE_DIR}/cmake/windows/yacreader.manifest")
endif()
target_link_libraries(YACReader PRIVATE oleaut32 ole32 shell32 user32)
endif()

Expand Down
Loading
Loading