Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
ea84f16
Remove dead code
luisangelsm Oct 14, 2026
7f686e1
Run CI on every pull request
luisangelsm Oct 18, 2026
268288b
Embed the Windows manifest as a source file so that Ninja builds link
luisangelsm Oct 19, 2026
67cd8e9
Extract shared descriptive comic metadata to a helper struct
luisangelsm Oct 15, 2026
e769ea5
Add typed ids and table projections for comic files, reading lists an…
luisangelsm Oct 15, 2026
1c43f5f
Make ComicInfo a value type and add ComicInfoObject for QML
luisangelsm Oct 15, 2026
cd40b45
Build ComicDB from ComicFile and ComicInfo
luisangelsm Oct 15, 2026
f8b81ad
Update Folder and remove LibraryItem
luisangelsm Oct 15, 2026
2293631
Load full comics and make ComicItem typed
luisangelsm Oct 16, 2026
ad18578
Type the folder model
luisangelsm Oct 16, 2026
ca5bd28
Type the list model
luisangelsm Oct 16, 2026
d39d58c
Use LF line endings in tests/CMakeLists.txt
luisangelsm Oct 18, 2026
20e8898
Copy the bundled 7z library next to built executables
luisangelsm Oct 18, 2026
26fd353
Add functions to create placeholder, reading list entry and label ent…
luisangelsm Oct 16, 2026
1771994
Add reading list and label entry functions and the replacement decision
luisangelsm Oct 16, 2026
042d9df
Add trigger that records the last known file of deleted comics
luisangelsm Oct 16, 2026
88ef1e1
Migrate reading lists and labels to the entry tables and switch to them
luisangelsm Oct 16, 2026
a439794
Keep list and label entries when a comic file is replaced
luisangelsm Oct 16, 2026
1175471
Add identity roles to the comic model
luisangelsm Oct 16, 2026
14b3ec2
Add ComicRowId and use it for selection, drag and view restore
luisangelsm Oct 16, 2026
b4f6e5c
Load deleted comics in lists and labels
luisangelsm Oct 16, 2026
76344c3
Add support for showing deleted comics that are missing from lists
luisangelsm Oct 17, 2026
2da4eb5
Fix the hang after dragging comics from the grid onto a list
luisangelsm Oct 17, 2026
a54e067
Add placeholders to the data layer
luisangelsm Oct 17, 2026
d040670
Edit the metadata of deleted comics and save only the changed fields
luisangelsm Oct 17, 2026
a09214c
Handle repeats, changes, and partial edits in the properties dialog
luisangelsm Oct 17, 2026
6e4cec6
Add support for custom covers on deleted comics
luisangelsm Oct 17, 2026
48e8a4c
Apply only the returned Comic Vine fields and support deleted comics
luisangelsm Oct 17, 2026
b11bcca
Add regression tests for folders, search, Favorites, Reading, and Recent
luisangelsm Oct 18, 2026
e10b362
Add tests to check that the v2 list routes leave out deleted comics
luisangelsm Oct 18, 2026
9c67263
Keep list data and covers safe in the maintenance workflows
luisangelsm Oct 18, 2026
1e578cf
Update translations for deleted comics
luisangelsm Oct 18, 2026
e435173
Bump 10.5.0
luisangelsm Oct 18, 2026
149d1ad
Fix removing comics from Favorites and Reading
luisangelsm Oct 18, 2026
e0711b3
Fix reader navigation with repeated comics in reading lists
luisangelsm Oct 18, 2026
5c3bd8e
Add a CBL reading list parser for the XML and JSON formats
luisangelsm Oct 18, 2026
8d55d99
Match CBL books to library comics
luisangelsm Oct 18, 2026
f605df4
Show placeholder entries in reading lists and labels
luisangelsm Oct 18, 2026
1240b6a
Add support for editing the metadata and cover of placeholder entries
luisangelsm Oct 18, 2026
383c41a
Import CBL reading lists, with placeholders for unmatched comics
luisangelsm Oct 18, 2026
7ae5134
Decode character references in CBL text, let placeholders win over co…
luisangelsm Oct 19, 2026
d51cdd5
Move the CBL code into its own folder and library
luisangelsm Oct 19, 2026
46d7e0e
Add the CBL import dialog: entries with match details, a page to find…
luisangelsm Oct 19, 2026
d71d662
Draw the missing entry icon on a pixel grid so all its dashes look th…
luisangelsm Oct 19, 2026
170026f
Show "Series #Number", then the file name, when a comic or missing en…
luisangelsm Oct 19, 2026
492a675
Match missing entries and deleted comics to library comics, one at a …
luisangelsm Oct 20, 2026
43ecf0c
Run the CBL import model test without a display
luisangelsm Oct 20, 2026
75bafb3
Sort search results by series, volume, and number
luisangelsm Oct 20, 2026
e34e404
Add a table for saved searches (smart lists)
luisangelsm Oct 20, 2026
8e42584
Show the comics of a smart list
luisangelsm Oct 20, 2026
76d861e
Show smart lists in the sidebar
luisangelsm Oct 20, 2026
234b8d8
Create, edit, and delete smart lists, and save the current search as one
luisangelsm Oct 20, 2026
71be44e
Show sublists with the list icon
luisangelsm Oct 21, 2026
17e0e08
Add the database layer for folders of reading lists and smart lists
luisangelsm Oct 21, 2026
34820cf
Show folders of lists in the sidebar and create, rename, and delete them
luisangelsm Oct 21, 2026
b073455
Show the folders and lists of a selected folder as cards in the grid
luisangelsm Oct 21, 2026
3bd0918
Move folders and lists between folders and sort them by name
luisangelsm Oct 21, 2026
955ec17
Add support for exporting lists as cbl files (xml or json)
luisangelsm Oct 21, 2026
53b4f93
Export reading lists as web pages
luisangelsm Oct 21, 2026
918eae5
Run the CBL writer test without a GUI application
luisangelsm Oct 21, 2026
deab363
Add support for storing placeholders in folders
luisangelsm Oct 22, 2026
749f9a7
Show placeholders in folders
luisangelsm Oct 22, 2026
c157003
Add UI support for matching missing comics to comics in a folder
luisangelsm Oct 22, 2026
97d6819
Add support for creating missing comics in folders from Comic Vine
luisangelsm Oct 22, 2026
4bdaab8
Add support for matching new files to the missing comics of their fol…
luisangelsm Oct 22, 2026
bb2bd1b
Add support for tracking missing issues in folders by hand
luisangelsm Oct 23, 2026
fc0320f
Use a single transaction when removing placeholders from a folder
luisangelsm Oct 23, 2026
a06af59
Use a single transaction when deleting a folder
luisangelsm Oct 23, 2026
fcc8314
Read the missing comics and learn the file name pattern once per fold…
luisangelsm Oct 23, 2026
83eb8bf
Find the missing comics of all the Comic Vine issues of a folder at once
luisangelsm Oct 23, 2026
737c481
Search only the comics of the folder when matching a missing comic of…
luisangelsm Oct 23, 2026
004cdf7
Count the tracked issues without building them while the user types
luisangelsm Oct 23, 2026
39a5590
Insert the tracked issues with statements prepared once
luisangelsm Oct 23, 2026
d32a577
Remove each run of consecutive rows at once in the comic model
luisangelsm Oct 23, 2026
c053be0
Delete the missing comics that no folder or list has with one statement
luisangelsm Oct 23, 2026
9001b7a
Report the Comic Vine requests that failed
luisangelsm Oct 23, 2026
2ef39ef
Update the source row of grid items after rows are inserted, removed …
luisangelsm Oct 23, 2026
16ceb91
Send one model update for each run of changed rows
luisangelsm Oct 23, 2026
906b236
Check the cover file of a missing comic once instead of each time a v…
luisangelsm Oct 23, 2026
d3e42f2
Stop copying all the rows for each dragged row in a reorder
luisangelsm Oct 23, 2026
22ff086
Compute the search sort keys once for each row
luisangelsm Oct 23, 2026
83dd2d6
Encode the covers of the web page export once each in the background,…
luisangelsm Oct 23, 2026
5480ece
Find the cover of each list card with the entry index instead of read…
luisangelsm Oct 23, 2026
e049405
Update the state column of the table once after a batch of row changes
luisangelsm Oct 23, 2026
a0ab09d
Sort each folder of the sidebar lists sections once after loading ins…
luisangelsm Oct 23, 2026
2f6d8cf
Abort db operations if their transaction fails to begin
luisangelsm Oct 24, 2026
7b58dac
Set the name conflict color once and check each comic action once
luisangelsm Oct 24, 2026
df6d88f
Remove the references to API.md from the item update comments
luisangelsm Oct 24, 2026
2e75d7b
Add a test that pins the answers of the v2 routes
luisangelsm Oct 24, 2026
22c2bb4
Move the HTTP listener of the server tests to a shared test helper
luisangelsm Oct 24, 2026
b7e5015
Add the v3 API with its version route
luisangelsm Oct 24, 2026
41bc0f3
Move the comic item queries and orders from ComicModel to db_helper s…
luisangelsm Oct 24, 2026
2faeed9
Add the v3 folder content with placeholders in the order of the desktop
luisangelsm Oct 24, 2026
b48095a
Move the loading of label and reading list entries from ComicModel to…
luisangelsm Oct 24, 2026
9dc74b1
Add the v3 content of reading lists and labels with deleted comics an…
luisangelsm Oct 25, 2026
8b5a39f
Move the load and the order of the reading lists section to db_helper…
luisangelsm Oct 25, 2026
88530a9
Add the v3 reading lists and smart lists sections with their folders
luisangelsm Oct 25, 2026
db40f46
Move the loading of smart list comics from ComicModel to ComicItems
luisangelsm Oct 25, 2026
e6f5f8b
Add the v3 smart list content in the search order of the desktop
luisangelsm Oct 25, 2026
9e7c2c3
Add the v3 cover route and stop the cover routes from serving files o…
luisangelsm Oct 25, 2026
e5316b5
Move the load and the order of the labels to db_helper so the server …
luisangelsm Oct 25, 2026
b7776fb
Add the v3 tags route in the order of the desktop sidebar
luisangelsm Oct 25, 2026
d414f8e
Move the loading of recent comics from ComicModel to ComicItems
luisangelsm Oct 25, 2026
3359cf1
Add the v3 recent route with the days of the client
luisangelsm Oct 25, 2026
9e3e878
Show the v3 folder content in the web UI with missing comics in grays…
luisangelsm Oct 25, 2026
b703104
Add v3 routes for one reading list, smart list, or list folder
luisangelsm Oct 25, 2026
3e5fc5c
Add the reading lists to the web UI with a hamburger menu on the libr…
luisangelsm Oct 25, 2026
e4eb8c2
Add the smart lists to the web UI with the pages of the reading lists
luisangelsm Oct 25, 2026
3869ea1
Add the tags to the web UI with the label art in the colors of the de…
luisangelsm Oct 25, 2026
b949ae1
Add Favorites and Recent to the web UI with the days of Recent as a b…
luisangelsm Oct 25, 2026
7a94b00
Show the label art in the color of the tag when a tag is empty in the…
luisangelsm Oct 25, 2026
20d197b
Add the v3 folder info route with the comics and placeholders of the …
luisangelsm Oct 26, 2026
558b561
Consolidate stacked schema changes into the 10.5.0 migration
luisangelsm Oct 27, 2026
9a83bc8
Polish missing-comic covers and the metadata editor
luisangelsm Oct 27, 2026
79665c4
Refresh translation catalogs for the completed feature stack
luisangelsm Oct 27, 2026
0dbc28e
Update CHANGELOG
luisangelsm Oct 27, 2026
a863dee
Fix comic captions for each display context
luisangelsm Oct 27, 2026
ba8f8e5
Merge pull request #632 from YACReader/feature/10.5-polish
luisangelsm Oct 28, 2026
4b9e361
Add Qt6Concurrent.dll to the windows installer
luisangelsm Oct 28, 2026
97be23b
Classify maintenance lock failures and remove stale locks only on req…
luisangelsm Oct 29, 2026
2bc8d26
Run library creation and updates under the maintenance lock in the wo…
luisangelsm Oct 29, 2026
4c6844c
Protect XML rescans with the maintenance lock, a backup, and a transa…
luisangelsm Oct 29, 2026
bc49fbd
Add desktop recovery of stale maintenance locks and a library databas…
luisangelsm Oct 29, 2026
2de0dae
Add stale maintenance lock recovery to the server command line
luisangelsm Oct 29, 2026
ed1e2d6
Add v3 routes and web UI support for library maintenance lock problems
luisangelsm Oct 29, 2026
616f3e5
Add tests for maintenance lock recovery
luisangelsm Oct 29, 2026
16681b4
Refresh translation catalogs for maintenance lock recovery
luisangelsm Oct 29, 2026
c535d0d
Update CHANGELOG
luisangelsm Oct 29, 2026
91d671b
Merge pull request #637 from YACReader/fix/maintenance-lock-recovery
luisangelsm Oct 29, 2026
ec69f69
Fix and update translations
luisangelsm Oct 29, 2026
51dac85
Open comics at the first page when the saved page is before it
wonjoonSeol Oct 24, 2026
12cd834
Keep library progress before page 1 out of the bookmarks
wonjoonSeol Oct 24, 2026
9aad0c5
Merge pull request #629 from wonjoonSeol/fix/start-page-before-first-…
luisangelsm Oct 31, 2026
77e1737
Add Bicubic scaling option (Catmull-Rom, fixed-point two-pass, threaded)
Oct 21, 2026
c582bc1
Resample Bicubic in linear light (gamma-correct)
dichongwu Oct 21, 2026
b0533bf
Remove leftover Lanczos3 case from the scalePixmap switch
dichongwu Oct 31, 2026
1e55a33
Filter premultiplied alpha in the Bicubic path
dichongwu Oct 31, 2026
9ce83f5
Filter premultiplied alpha in the Lanczos path too
dichongwu Oct 31, 2026
41dd73b
Update CHANGELOG
luisangelsm Oct 31, 2026
73464d5
Merge pull request #620 from dichongwu/add-bicubic-scaling
luisangelsm Oct 31, 2026
aa39402
Improve library opening speed in network shares
luisangelsm Oct 31, 2026
1f2f7dc
Improve the webui home and add a connect device dialog.
luisangelsm Nov 1, 2026
05d45bd
Add mouse wheel page navigation to the webui reader
luisangelsm Nov 1, 2026
da65381
Improve the toolbars on macos
luisangelsm Nov 2, 2026
108fc11
Build macOS with Qt 6.12 and add a legacy macOS job with Qt 6.9.3
luisangelsm Nov 2, 2026
4c49bb2
Build the Qt 6.12 macOS job on macos-26 to link against the macOS 26 SDK
luisangelsm Nov 2, 2026
f3dca09
Improve some of the toolbars spacing and aligment in YACReaderLibrary
luisangelsm Nov 3, 2026
cd226ca
Update translations
luisangelsm Nov 3, 2026
d57f832
Stop creating ordering indexes on the wrong table and drop them in th…
luisangelsm Nov 3, 2026
552c196
Add tracking of missing issues in reading lists
luisangelsm Nov 4, 2026
de94d4c
Update Chinese translations in yacreader_zh_CN.ts
kofzhanganguo Nov 5, 2026
f1d069b
Refine translations in yacreaderlibrary_zh_CN.ts
kofzhanganguo Nov 5, 2026
d86489b
Replace the main toolbar with a header model and a two-part library h…
luisangelsm Nov 5, 2026
b4c2311
Add a Windows window frame that puts the library header in the captio…
luisangelsm Nov 5, 2026
2bf46eb
Add a macOS window frame with native toolbar items bound to the heade…
luisangelsm Nov 5, 2026
0ab2df0
Fix the template image property for Objective-C++ in the macOS window…
luisangelsm Nov 5, 2026
6704a92
Let the macOS header drag the window natively
luisangelsm Nov 5, 2026
6e92a0a
Split the macOS toolbar items into sidebar and navigation glass groups
luisangelsm Nov 5, 2026
9900dc7
Inset the folder name from the navigation glass in the macOS window f…
luisangelsm Nov 5, 2026
b329267
Align the macOS toolbar items past the minimum width of the lead spacer
luisangelsm Nov 5, 2026
9f45309
Align the macOS toolbar items before the window first draws
luisangelsm Nov 5, 2026
235ef37
Hide the whole sidebar column in full screen mode
luisangelsm Nov 5, 2026
c0b0857
Pack the macOS sidebar toolbar items at the leading edge while the tr…
luisangelsm Nov 5, 2026
614523e
Realign the macOS toolbar items when AppKit moves them in full screen
luisangelsm Nov 5, 2026
f10a3f7
Keep following the macOS sidebar end spacer when AppKit moves it to a…
luisangelsm Nov 5, 2026
5e75d2b
Fix the library header test on macOS, where the header has no app ide…
luisangelsm Nov 5, 2026
03ee63e
Skip the app identity test on macOS, where the header has none
luisangelsm Nov 5, 2026
001caf5
Merge pull request #642 from YACReader/feature/library-unified-header
luisangelsm Nov 5, 2026
581be5d
Merge pull request #640 from kofzhanganguo/patch-8
luisangelsm Nov 6, 2026
4d14f98
Merge pull request #641 from kofzhanganguo/patch-9
luisangelsm Nov 6, 2026
ca31755
Fixed dragging file across reader unlinking progress
Luke-239 Nov 4, 2026
254fa99
Merge pull request #639 from Luke-239/reader-unlink-fix
luisangelsm Nov 6, 2026
65b12b3
Keep the previous and next comic actions after a file fails to open
wonjoonSeol Oct 24, 2026
7e80455
Rename doubleMangaPageSwitch to refreshPrevNextActions
wonjoonSeol Oct 24, 2026
be3ba43
Keep the previous and next comic actions off when a recent file is mi…
wonjoonSeol Oct 24, 2026
fde1102
Merge pull request #630 from wonjoonSeol/fix/prev-next-after-unreadab…
luisangelsm Nov 6, 2026
118213b
Improve the reader themes so the flow background doesn't match the de…
luisangelsm Nov 6, 2026
151b5f8
Bump the library header height a bit
luisangelsm Nov 7, 2026
c39695c
Remove the setting for using the native title bar
luisangelsm Nov 7, 2026
00179fb
Keep the saved window geometry from putting the apps in full screen
luisangelsm Nov 7, 2026
5daf5cd
Update what's new intro for 10.5.0
luisangelsm Nov 7, 2026
22ecf29
Fix translations in yacreaderlibrary_zh_CN.ts
kofzhanganguo Nov 7, 2026
6177d48
Send covers as they are on disk and revalidate them with an ETag
luisangelsm Nov 8, 2026
67ec9f3
Make the web UI back arrow return to the page the item was opened from
luisangelsm Nov 8, 2026
7b01fa6
Make web UI wait for a reading progress save on its way
luisangelsm Nov 8, 2026
2160c2a
Save web UI reading progress when the tab goes away
luisangelsm Nov 8, 2026
e23e029
Show the real reason on the web UI error pages
luisangelsm Nov 8, 2026
ec651dc
Add a favicon to the web UI pages
luisangelsm Nov 8, 2026
3476d5e
Add PageUp, PageDown, Home and End to the web UI reader
luisangelsm Nov 8, 2026
829a802
Remove the saved parameter from the web UI settings URL
luisangelsm Nov 8, 2026
fe7d38e
Keep bold, italic and underline in web UI synopses
luisangelsm Nov 8, 2026
89691e8
Remove the duplicate list of file types from the web UI
luisangelsm Nov 8, 2026
13e2556
Update CHANGELOG
luisangelsm Nov 8, 2026
ddf669a
Open read comics on the first page in the web UI reader
luisangelsm Nov 9, 2026
6713389
Open the next and previous comic from the web UI reader
luisangelsm Nov 9, 2026
936dfec
Update CHANGELOG
luisangelsm Nov 9, 2026
7352370
Merge branch 'develop' into patch-10
luisangelsm Nov 9, 2026
fef6494
Merge pull request #643 from kofzhanganguo/patch-10
luisangelsm Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
59 changes: 55 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ on:
- master
- develop
pull_request:
branches:
- master
- develop

env:
IS_ORIGINAL_REPO: ${{ github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop') }}
Expand Down Expand Up @@ -143,6 +140,57 @@ jobs:
# macOS Qt6 Universal build
macos-qt6-universal:
name: macOS (Qt6 Universal)
runs-on: macos-26
needs: [initialization, code-format-validation]
steps:
- uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '18'

- name: Install dependencies
run: |
pip3 install --break-system-packages aqtinstall
python3 -m aqt install-qt mac desktop 6.12.0 -m qt5compat qtmultimedia qtimageformats qtshadertools qtspeech
echo "${{ github.workspace }}/6.12.0/macos/bin" >> $GITHUB_PATH
npm install -g appdmg

- name: Import Code Signing Certificate
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
uses: apple-actions/import-codesign-certs@v2
with:
p12-file-base64: ${{ secrets.MACOS_CERTIFICATE_P12_BASE64 }}
p12-password: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}

- name: Build
env:
MACOSX_DEPLOYMENT_TARGET: "14.4"
run: |
VERSION="$(tr -d '\r\n' < VERSION)"
SKIP_CODESIGN="${{ env.IS_FORK }}"
SKIP_CODESIGN=$(echo "$SKIP_CODESIGN" | tr '[:upper:]' '[:lower:]')
./compileOSX.sh $VERSION ${{ needs.initialization.outputs.build_number }} $SKIP_CODESIGN Qt6 universal

- name: Run tests
run: ctest --test-dir build --output-on-failure

- name: Notarize
if: github.repository == 'YACReader/yacreader' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop')
run: |
xcrun notarytool submit *.dmg --apple-id "${{ secrets.MACOS_APPLE_ID }}" --team-id "${{ secrets.MACOS_TEAM_ID }}" --password "${{ secrets.MACOS_APP_PASSWORD }}" --wait
xcrun stapler staple *.dmg

- name: Upload DMG
uses: actions/upload-artifact@v6
with:
name: macos-qt6-universal-${{ needs.initialization.outputs.build_number }}-dmg
path: "*.dmg"

# macOS Qt6 Universal legacy build (macOS 12+, older Qt)
macos-qt6-universal-legacy:
name: macOS (Qt6 Universal Legacy)
runs-on: macos-15
needs: [initialization, code-format-validation]
steps:
Expand Down Expand Up @@ -170,6 +218,7 @@ jobs:
- name: Build
env:
MACOSX_DEPLOYMENT_TARGET: "12"
DMG_NAME_SUFFIX: "-legacy"
run: |
VERSION="$(tr -d '\r\n' < VERSION)"
SKIP_CODESIGN="${{ env.IS_FORK }}"
Expand All @@ -188,7 +237,7 @@ jobs:
- name: Upload DMG
uses: actions/upload-artifact@v6
with:
name: macos-qt6-universal-${{ needs.initialization.outputs.build_number }}-dmg
name: macos-qt6-universal-legacy-${{ needs.initialization.outputs.build_number }}-dmg
path: "*.dmg"

# Windows x64 Qt6 build
Expand Down Expand Up @@ -555,6 +604,7 @@ jobs:
- linux-qt6
- linux-qt6-7zip
- macos-qt6-universal
- macos-qt6-universal-legacy
- windows-x64-qt6
- windows-arm64-qt6
- docker-amd64
Expand Down Expand Up @@ -623,6 +673,7 @@ jobs:
- linux-qt6
- linux-qt6-7zip
- macos-qt6-universal
- macos-qt6-universal-legacy
- windows-x64-qt6
- windows-arm64-qt6
- docker-amd64
Expand Down
55 changes: 55 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,61 @@

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

## 10.5.0

### YACReader

* Add Bicubic as a scaling method in Settings, offering sharper images than Bilinear and faster scaling than Lanczos.
* Fix opening comics at page -1 after removing them from the "Reading" list.
* Improve toolbar on macOS.

### YACReaderLibrary

* Reading lists and labels keep comics whose files are removed from the library. Their covers show in gray, with their metadata and last known file name. You can still edit their metadata, get data from Comic Vine, set a custom cover, reorder them, and remove them from the list. When the same file comes back, at any path, the comic is available again.
* Reading lists and labels keep a comic when its file is replaced, for example by a tool that writes ComicInfo.xml into the archive.
* Import reading lists in CBL XML or JSON format. Preview and adjust matches to comics in your library, and keep missing books in the reading order so you can find them later.
* Match missing books to library comics individually or across an entire reading list.
* Export reading lists as CBL XML, JSON, or a web page.
* Create smart lists that show the current results of a saved search.
* Organize reading lists and smart lists in folders.
* Track missing issues in regular folders, using Comic Vine or entering the issue numbers yourself. Edit their metadata and covers, and automatically match newly added files to the missing issues.
* Include the same comic more than once in a reading list, with each appearance keeping its place in the reading order.
* Sort search results by series, volume, and issue number.
* The metadata editor saves only the fields that you change, also when you edit several comics. Comic Vine changes only the fields that it returns.
* Report failed Comic Vine lookups and incomplete results.
* Fix removing comics belonging to child reading lists from a parent list view.
* Fix newly added comics sometimes appearing in the middle of a reading list instead of at the end.
* Fix library lock handling and add a way to clear these locks from the GUI and webui.
* Improve library opening speed over network shares.
* Unify the title and tool bars for a more integrated look (Windows/macOS).

### Server

* Add server API v3 so compatible mobile clients can browse missing comics, reading lists, and smart lists, including their folders, with content ordered as on the desktop. Existing clients remain supported.
* Fix a security issue that could let cover requests access image files outside the library's covers folder.
* Fix memory leak updating libraries.
* Improve covers API performance.

### WebUI

* Browse reading lists, smart lists, their folders, Favorites, tags, and Recent from the library menu.
* View missing comics in reading lists and folders, including their available metadata and covers.
* Choose how many days count as recent in this browser's settings.
* Improve the home page and add a connect device dialog. iOS and Android clients can use now the QR scaner with the webui.
* Add mouse wheel page navigation to the reader.
* Add PageUp, PageDown, Home and End keys to the reader.
* The back button now returns to where you were, keeping the scroll position.
* Save the reading progress when the tab goes to the background.
* Show better error messages.
* Add a favicon.
* Open read comics on the first page.
* Go to the next or previous comic from the reader. Comics opened from a list follow the order of that list, all others follow their folder.

### All GUI apps

* Fix the apps sometimes getting stuck in fullscreen mode after a restart. YACReaderLibrary no longer starts in fullscreen mode, and YACReader still does when you close it in fullscreen mode, but you can always leave it.


## 10.4.0

### YACReader
Expand Down
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

# Compiler options (MSVC flags)
include(cmake/CompilerOptions.cmake)
include(cmake/SevenZipRuntime.cmake)

# --- Build options ---

Expand Down Expand Up @@ -127,6 +128,7 @@ if(BUILD_SERVER_STANDALONE)
)
else()
find_package(Qt6 6.9 REQUIRED COMPONENTS
Concurrent
Core
Core5Compat
Gui
Expand Down Expand Up @@ -169,6 +171,7 @@ if(NOT BUILD_SERVER_STANDALONE)
endif()

add_subdirectory(YACReaderLibrary/server)
add_subdirectory(YACReaderLibrary/cbl)

if(NOT BUILD_SERVER_STANDALONE)
add_subdirectory(YACReaderLibrary/comic_vine)
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
10.4.0
10.5.0
25 changes: 17 additions & 8 deletions YACReader/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -229,18 +229,22 @@ qt_add_resources(YACReader "yacreader_common_theme_images"
)

# Translations
set(yacreader_translation_source_targets
YACReader
comic_backend
common_gui
custom_widgets_reader
shortcuts_reader
)
qt_add_translations(YACReader
SOURCE_TARGETS
YACReader
comic_backend
common_gui
custom_widgets_reader
shortcuts_reader
SOURCE_TARGETS ${yacreader_translation_source_targets}
LUPDATE_OPTIONS -no-obsolete
TS_FILES
yacreader_es.ts
yacreader_fr.ts
yacreader_ru.ts
yacreader_pt.ts
yacreader_pt_PT.ts
yacreader_nl.ts
yacreader_tr.ts
yacreader_de.ts
Expand All @@ -249,9 +253,14 @@ qt_add_translations(YACReader
yacreader_zh_HK.ts
yacreader_it.ts
yacreader_ko.ts
yacreader_source.ts
yacreader_en.ts
)
qt_add_lupdate(
SOURCE_TARGETS ${yacreader_translation_source_targets}
OPTIONS -no-obsolete
TS_FILES yacreader_source.ts
LUPDATE_TARGET YACReader_source_lupdate
)

target_link_libraries(YACReader PRIVATE
Qt6::Core
Expand All @@ -277,7 +286,7 @@ target_link_libraries(YACReader PRIVATE
if(WIN32)
target_sources(YACReader PRIVATE icon.rc)
if(MSVC)
target_link_options(YACReader PRIVATE "/MANIFESTINPUT:${PROJECT_SOURCE_DIR}/cmake/windows/yacreader.manifest")
target_sources(YACReader PRIVATE ${PROJECT_SOURCE_DIR}/cmake/windows/yacreader.manifest)
endif()
target_link_libraries(YACReader PRIVATE oleaut32 ole32 shell32 user32)
endif()
Expand Down
2 changes: 1 addition & 1 deletion YACReader/bookmarks_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ BookmarksDialog::BookmarksDialog(QWidget *parent)
// bookmarks
auto bookmarksL = new QGridLayout();

pages.push_back(new QLabel(tr("Lastest Page")));
pages.push_back(new QLabel(tr("Latest Page")));
for (int i = 0; i < 3; i++)
pages.push_back(new QLabel("-"));

Expand Down
6 changes: 3 additions & 3 deletions YACReader/goto_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ GoToDialog::GoToDialog(QWidget *parent)

void GoToDialog::setupUI()
{
textLabel = new QLabel(tr("Page : "));
textLabel = new QLabel(tr("Page: "));
pageNumber = new QLineEdit;
v = new QIntValidator(this);
v->setBottom(1);
Expand All @@ -37,7 +37,7 @@ void GoToDialog::setupUI()
bottomLayout->addWidget(cancel);

auto mainLayout = new QVBoxLayout;
mainLayout->addWidget(numPagesLabel = new QLabel(tr("Total pages : ")));
mainLayout->addWidget(numPagesLabel = new QLabel(tr("Total pages: ")));
mainLayout->addLayout(topLayout);
mainLayout->addStretch();
mainLayout->addLayout(bottomLayout);
Expand Down Expand Up @@ -67,7 +67,7 @@ void GoToDialog::goTo()

void GoToDialog::setNumPages(unsigned int numPages)
{
numPagesLabel->setText(tr("Total pages : ") + QString::number(numPages));
numPagesLabel->setText(tr("Total pages: ") + QString::number(numPages));
v->setTop(numPages);
}

Expand Down
2 changes: 1 addition & 1 deletion YACReader/goto_flow_toolbar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ GoToFlowToolBar::GoToFlowToolBar(QWidget *parent)
connect(slider, &QSlider::valueChanged, this, &GoToFlowToolBar::setCenter);
connect(slider, &QSlider::valueChanged, this, &GoToFlowToolBar::setPage);

pageHint = new QLabel("<b>" + tr("Page : ") + "</b>", this);
pageHint = new QLabel("<b>" + tr("Page: ") + "</b>", this);
v = new QIntValidator();
v->setBottom(1);
edit = new QLineEdit();
Expand Down
5 changes: 4 additions & 1 deletion YACReader/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ int main(int argc, char *argv[])
QCommandLineOption comicId("comicId", "", "comicId");
QCommandLineOption libraryId("libraryId", "", "libraryId");
QCommandLineOption readingListId("readingListId", "", "readingListId");
QCommandLineOption readingListEntryId("readingListEntryId", "", "readingListEntryId");
readingListEntryId.setFlags(QCommandLineOption::HiddenFromHelp);
// hide comicId and libraryId from help
comicId.setFlags(QCommandLineOption::HiddenFromHelp);
libraryId.setFlags(QCommandLineOption::HiddenFromHelp);
Expand All @@ -146,6 +148,7 @@ int main(int argc, char *argv[])
parser.addOption(comicId);
parser.addOption(libraryId);
parser.addOption(readingListId);
parser.addOption(readingListEntryId);
parser.process(app);

QString destLog = YACReader::getSettingsPath() + "/yacreader.log";
Expand Down Expand Up @@ -186,7 +189,7 @@ int main(int argc, char *argv[])
OpenComicSource source;

if (parser.isSet(readingListId)) {
source = OpenComicSource { OpenComicSource::ReadingList, parser.value(readingListId).toULongLong() };
source = OpenComicSource { OpenComicSource::ReadingList, parser.value(readingListId).toULongLong(), parser.value(readingListEntryId).toULongLong() };
} else {
source = OpenComicSource { OpenComicSource::Folder, 33 }; // Folder is not needed to get the comic information, the comid id points to a unique comic
}
Expand Down
Loading
Loading