From eba80afb2b24c9f0e2156ac918cf6930fb388677 Mon Sep 17 00:00:00 2001 From: Static Date: Thu, 10 Sep 2026 11:27:33 -0400 Subject: [PATCH 1/2] 214 ships as 2.1.4 and its notes cover the salvage and the scan ghosts Co-Authored-By: Claude Fable 5.1 --- app/build.gradle.kts | 4 ++-- store-listing.md | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f0cfeee7..439d902c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,8 +21,8 @@ android { applicationId = "com.ninelivesaudio.app" minSdk = 30 targetSdk = 36 - versionCode = 213 - versionName = "2.1.3" + versionCode = 214 + versionName = "2.1.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/store-listing.md b/store-listing.md index 039bcc1b..7018bbd1 100644 --- a/store-listing.md +++ b/store-listing.md @@ -78,12 +78,14 @@ Android 11+ (API 30). ## What's New (Release Notes) -v2.1.3 +v2.1.4 Nine Lives is now free. Point it at a folder of audiobooks, or your Audiobookshelf server, and start listening. One optional one-time unlock opens every speed, unlimited offline books, and full sleep timer control. Paid-app owners: you're grandfathered, you already have it all. Also new: silence skipping. Fixed: the reported import bug. Nested folders and multi-disc sets now scan correctly, sync failures are shown instead of hidden, and reconnecting after a network drop just works. +Also fixed: moving or deleting a book folder no longer leaves a ghost copy on your shelf. Downloaded books keep their track details through a library refresh, your sign-in stays bound to the server you typed, and switching between local files and your server no longer confuses where you left off. + v2.0.0 Local playback is here. You can now load audiobooks straight from your device and listen with no Audiobookshelf server required. From e44c1bb95f24246319e9a12e515f61ea918b3136 Mon Sep 17 00:00:00 2001 From: Static Date: Thu, 10 Sep 2026 12:48:26 -0400 Subject: [PATCH 2/2] The 2.1.4 notes fit Play's limit and the in-app changelog names 2.1.4 The What's New section is 498 characters, under the 500 Play allows per language. 2.1.3 never reached users, so the in-app changelog's current entry becomes 2.1.4 and carries the three new fixes instead of adding a second entry nobody upgraded past. Co-Authored-By: Claude Fable 5.1 --- .../com/ninelivesaudio/app/ui/changelog/ChangelogData.kt | 5 ++++- .../ninelivesaudio/app/ui/changelog/ChangelogDataTest.kt | 2 +- store-listing.md | 6 ++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/ninelivesaudio/app/ui/changelog/ChangelogData.kt b/app/src/main/java/com/ninelivesaudio/app/ui/changelog/ChangelogData.kt index 8380d3d7..ae1500d3 100644 --- a/app/src/main/java/com/ninelivesaudio/app/ui/changelog/ChangelogData.kt +++ b/app/src/main/java/com/ninelivesaudio/app/ui/changelog/ChangelogData.kt @@ -16,7 +16,7 @@ object ChangelogData { val releases = listOf( ChangelogRelease( - version = "2.1.3", + version = "2.1.4", dateLabel = "Current", sections = listOf( ChangelogSection( @@ -57,6 +57,9 @@ object ChangelogData { "The app gives a clear reason when a download cannot start.", "Switching back to Audiobookshelf reconnects automatically.", "Downloaded Only turns off after you reconnect.", + "A moved or deleted book folder no longer leaves a ghost on your shelf.", + "Downloaded books keep their track details through a library refresh.", + "Switching between local files and your server keeps your place.", ), ), ), diff --git a/app/src/test/java/com/ninelivesaudio/app/ui/changelog/ChangelogDataTest.kt b/app/src/test/java/com/ninelivesaudio/app/ui/changelog/ChangelogDataTest.kt index 920ab890..f22293d0 100644 --- a/app/src/test/java/com/ninelivesaudio/app/ui/changelog/ChangelogDataTest.kt +++ b/app/src/test/java/com/ninelivesaudio/app/ui/changelog/ChangelogDataTest.kt @@ -54,7 +54,7 @@ class ChangelogDataTest { @Test fun `releases are newest first and omit the unshipped version`() { assertEquals( - listOf("2.1.3", "2.0.1", "2.0.0", "1.0.1", "1.0", "0.95", "0.9", "0.6"), + listOf("2.1.4", "2.0.1", "2.0.0", "1.0.1", "1.0", "0.95", "0.9", "0.6"), ChangelogData.releases.map { it.version }, ) } diff --git a/store-listing.md b/store-listing.md index 7018bbd1..fc696d2d 100644 --- a/store-listing.md +++ b/store-listing.md @@ -80,11 +80,9 @@ Android 11+ (API 30). v2.1.4 -Nine Lives is now free. Point it at a folder of audiobooks, or your Audiobookshelf server, and start listening. One optional one-time unlock opens every speed, unlimited offline books, and full sleep timer control. Paid-app owners: you're grandfathered, you already have it all. Also new: silence skipping. +Nine Lives is now free. Point it at a folder of audiobooks or your Audiobookshelf server and start listening. One optional unlock opens every speed, unlimited offline books, and the full sleep timer. Paid-app owners are grandfathered. New: silence skipping. -Fixed: the reported import bug. Nested folders and multi-disc sets now scan correctly, sync failures are shown instead of hidden, and reconnecting after a network drop just works. - -Also fixed: moving or deleting a book folder no longer leaves a ghost copy on your shelf. Downloaded books keep their track details through a library refresh, your sign-in stays bound to the server you typed, and switching between local files and your server no longer confuses where you left off. +Fixed: nested folders and multi-disc sets scan correctly, moved or deleted folders leave no ghosts, downloads keep their track details, reconnecting after a network drop works, and switching between local files and server keeps your place. v2.0.0