Commit Graph
37 Commits
Author SHA1 Message Date
Cursor Agentandrmcrackan 88243825eb seed script: drop the search index so filters find the seeded books
The script writes rows straight to SQLite, which leaves Libation's Lucene
index untouched, so every filter on a seeded book came back empty and the
empty-grid states could not be tested: nothing was findable, so every filter
produced 'No books match' whether or not that was the right answer.

Deleting the SearchEngine folder is enough. A missing index is a state
Libation already handles - performSafeQuery catches the FileNotFoundException,
re-indexes from the database and retries - and that rebuild filters IsDeleted,
so trashed books stay out of the index exactly as in a normal session.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-19 17:19:36 +00:00
Cursor Agentandrmcrackan 2aa6d8c078 Record why demo accounts are identified by id, not a flag
A marker property would be tidier, but AudibleUtilities.Account serializes a
fixed set of members and has no [JsonExtensionData], so Newtonsoft ignores an
extra property on the way in and never writes it back. Confirmed by adding
IsDemo, renaming the account in the app and letting it save: the property was
gone, and anything that dirties an account does the same, a token refresh during
a scan included. --clean would then strand demo accounts with no way to find
them. Adding a demo flag to the shipping Account class to serve a dev script is
not a trade worth making.

The id is the better anchor anyway: immutable, always persisted, and example.com
is reserved by RFC 2606 so no real Audible login can collide with it. Verified
that --clean still matches an account after the app renamed it.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-18 19:32:24 +00:00
Cursor Agentandrmcrackan bc297330ad Add a script that seeds fake Audible accounts
Quite a lot of Libation only appears once an account exists, and it is not one
switch but two: nothing, one account, or several. The one/many split changes the
Import and Remove menus, and the new empty-library panel offers 'Add Account' or
'Scan Library' depending on it. None of that was reachable in a test environment
without signing in to Audible, which is how I ended up writing this by hand to
check the empty-library states.

seed-demo-accounts.cs writes structurally valid but meaningless identities, so
Libation counts and lists the accounts and enables everything gated on having
one. Any actual scan is refused by Audible, which the script and the docs both
say plainly.

It appends rather than overwrites, and --clean removes only what it added -
the accounts matching demo*@example.com - because this is the file holding real
Audible tokens. The first account is demo@example.com, the same one
seed-demo-library.cs assigns its books to, so seeding both describes one library
instead of two unrelated ones.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-18 19:23:18 +00:00
Cursor Agentandrmcrackan bf9b85331b Seed books in the trash for manual testing
seed-demo-library.cs covered every grid state except the one that made #1925
hard to answer: a book that is in the database but in the trash, and therefore
absent from the grid, the search index and every status count at once.

Seed three - a purchased title, a Plus title, and an episode whose series is
still in the library so the trash bin's nesting is exercised too - and report
them under their own heading, since unlike every other seeded row they are
supposed to be missing from the grid.

Document what they are for in docs/development/testing.md: the status bar count,
the menu count, the empty-search hint, and the nested episode.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-18 18:51:58 +00:00
Cursor Agentandrmcrackan 4187712c8d Add HasSubtitle and TitleHasColon search fields
<title short> stops at the first colon, so it shortens Audible titles that
contain one just as readily as it drops Audible's subtitle, and distinct books
then collapse onto the same name. A colon cannot be searched for: the analyzer
discards punctuation and Lucene reads a colon in a query as a field separator.
Two bool index fields find the affected books instead.

Document how the two title tags differ, since <audible title> already drops
Audible's subtitle without ever cutting a title, and how to audit for names
that actually collide in a spreadsheet export.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-16 23:43:53 +00:00
Cursor Agentandrmcrackan 3129221531 docs(limit): document the daily download limit and add a history seeding script
Adds a feature page covering the rolling window, what counts, the MB/GB
estimate and the Docker/CLI keys, plus a one-line pointer from getting started
where a new user with a large Plus library clicks Begin Book Backups.

Scripts/seed-download-history.cs seeds fake completed downloads so the limit
can be exercised without downloading, including dating rows just under 24 hours
old to turn the multi-day pause-and-resume behavior into a one minute test.

Also shortens the queue status text: the process queue column clips rather than
wrapping, so the resume time was being cut off.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-14 18:03:23 +00:00
Cursor Agentandrmcrackan 12d499a901 Seed books absent from the last scan for unavailable-row testing
Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-13 19:06:44 +00:00
Cursor Agentandrmcrackan 739f1a273a Document how to test changes in the developer docs
Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-13 18:34:41 +00:00
Cursor Agentandrmcrackan 71e2cbb271 Add a script that seeds a demo library for manual icon testing
Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-13 17:39:15 +00:00
Robert McRackan 353a5b8800 Mark macOS app bundle as APPL so Gatekeeper and Homebrew cask audits accept it. Thanks, @m-j-r ! 2026-07-17 14:46:38 -04:00
rmcrackan 81175e5427 The edit targets two problems in the macOS bundle script.
Reliability: `hdiutil create` can fail on GitHub’s macOS runners with `Resource busy` even when the app build is fine. The retry wrapper gives it several attempts, waits between tries, and cleans up partial DMGs so transient runner issues are less likely to break the release.

Correctness: The script used to keep going after `hdiutil` failed and still exit successfully, which left `./bundle/` empty and made artifact upload fail with a misleading error. `set -euo pipefail` and explicit failure exits make a DMG creation failure stop the job immediately instead of pretending the bundle step succeeded.
2026-06-08 14:42:05 -04:00
rmcrackan 51fbe73ea1 make vitepress happy 2026-06-08 14:23:00 -04:00
rmcrackan b7ce96e91d Finish windows installers, phase 1 2026-06-08 14:03:59 -04:00
rmcrackan d03955a2ca Add Windows installers to release build 2026-06-08 10:43:32 -04:00
MBucari e4daa5b8e8 Fix macos bundle build failure 2026-05-04 21:20:42 -06:00
rmcrackan b5ecff7e27 attempt to fix Bundle_MacOS 2026-03-17 23:03:43 -04:00
Michael Bucari-Tovo d1ce9d5a83 Update Mac Workflow
- Add new repo variables
  - `SIGN_MAC_APP_ON_VALIDATE` will force sign/notarize on the validate workflow (normally only done for releases)
  - `WAIT_FOR_NOTARIZE` Causes the build-mac workflow to wait for apple to notarize the bundle so that it can be stapled. This is usually fast (1-2 mis), but can be very long and may cause workflow runners to time out.
2025-11-14 11:19:21 -07:00
Mbucari 9f6d08fc1f Update Workflows
- Simplify workflows build commands
- Don't build ReadyToRun on validate
- Move get-version into it's own job in build.yml
- Split  macOS into it's own reusable workflow
  - Add app bundle code signing
  - Add notarization
2025-11-13 22:59:26 -07:00
Michael Bucari-Tovo fa238a0915 Use xplat webview control for Audible login
- Use Avalonia-based webview control for Audible login with Chardonnay
- Remove webview interfaces from IInteropFunctions
- Remove Microsoft.Web.WebView2 package from WindowsConfigApp
- Add Microsoft.Web.WebView2 to LibationWinForms
- Remove all other login forms except the external login dialog (fallback in case webview doesn't work). The AudibleApi login with username/password doesn't work anymore. Need to use external browser login method.
2025-11-03 11:29:57 -07:00
MBucari 1777dc5a7e Update AAXClean.Codecs and dependencies 2025-04-25 19:52:51 -06:00
Mbucari 0a749d2d88 Update Bundle_MacOS.sh 2024-10-25 10:51:56 -06:00
Michael Bucari-Tovo 04ad033ba0 Remove appsettings.json from program files dir 2023-08-31 09:36:38 -06:00
Mbucari 824f65baae Fix rpm upgrade 2023-05-19 16:37:00 -06:00
Mbucari d6fe3013ab RPM build 2023-05-19 09:30:11 -06:00
Mbucari b9c2a1cce3 Add folder icon support to MacOS 2023-02-28 15:57:27 -07:00
MBucari 429aa603f5 Update workflows 2023-02-27 21:41:59 -07:00
Michael Bucari-Tovo 21d18aa565 Final edits 2023-02-19 10:59:42 -07:00
Michael Bucari-Tovo c96875ba5d Add '-chardonnay' to build assets name 2023-02-19 10:23:49 -07:00
Michael Bucari-Tovo a00849fb6f Refactor InteropFactory 2023-02-18 13:57:00 -07:00
Michael Bucari-Tovo 59d556733e Edit Mac Build Script 2023-02-17 23:46:28 -07:00
Michael Bucari-Tovo 25f7c29380 New linux build workflows 2023-02-17 18:04:34 -07:00
Michael Bucari-Tovo 9a450b0d63 add 'macOS' to mac bundle name 2023-02-15 06:31:09 -07:00
Mbucari dc7c03661d Add auto update to linux and macos 2023-02-14 23:06:14 -07:00
Michael Bucari-Tovo d496564f0d Edit Mac and Linux bundle build workflows 2023-02-12 21:50:33 -07:00
Michael Bucari-Tovo 3bca495521 Add MacOS app bundle workflow 2023-02-11 23:38:17 -07:00
Mbucari 2baf5243ea Fix #463 2023-01-25 14:23:02 -07:00
Aaron Reisman 6cfd2dea96 Move deb building out of the build pipeline 2023-01-22 13:01:12 -06:00