From 6bc19af041a8c12ce928f0eb562ee011d3bb4a77 Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Fri, 17 Sep 2021 01:29:42 +0430 Subject: [PATCH] add ability to delete downloaded chapters --- CHANGELOG.md | 6 +++-- buildSrc/src/main/kotlin/Constants.kt | 2 +- .../suwayomi/tachidesk/manga/MangaAPI.kt | 1 + .../manga/controller/MangaController.kt | 10 +++++++ .../suwayomi/tachidesk/manga/impl/Chapter.kt | 26 ++++++++++++++++--- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4eae1ea..6f7f8105 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# Server: v0.5.0-r911 + WebUI: r789 +# Server: v0.5.0-r918 + WebUI: r791 ## TL;DR @@ -6,6 +6,7 @@ ### Public API #### Non-breaking changes - (r915) add BasicAuth support +- (r918) add ability to delete downloaded chapters #### Breaking changes - N/A @@ -21,7 +22,8 @@ ## Tachidesk-WebUI #### Visible changes -- N/A +- (r790) nice looking progress percentage +- (r791) show a Delete button for downloaded chapters #### Bug fixes - N/A diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt index 18a7b68c..37b30a43 100644 --- a/buildSrc/src/main/kotlin/Constants.kt +++ b/buildSrc/src/main/kotlin/Constants.kt @@ -14,7 +14,7 @@ const val MainClass = "suwayomi.tachidesk.MainKt" // should be bumped with each stable release val tachideskVersion = System.getenv("ProductVersion") ?: "v0.5.0" -val webUIRevisionTag = System.getenv("WebUIRevision") ?: "r789" +val webUIRevisionTag = System.getenv("WebUIRevision") ?: "r791" // counts commits on the master branch val tachideskRevision = runCatching { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/MangaAPI.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/MangaAPI.kt index 922ceb23..820ae833 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/MangaAPI.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/MangaAPI.kt @@ -65,6 +65,7 @@ object MangaAPI { get("{mangaId}/chapters", MangaController::chapterList) get("{mangaId}/chapter/{chapterIndex}", MangaController::chapterRetrieve) patch("{mangaId}/chapter/{chapterIndex}", MangaController::chapterModify) + delete("{mangaId}/chapter/{chapterIndex}", MangaController::chapterDelete) patch("{mangaId}/chapter/{chapterIndex}/meta", MangaController::chapterMeta) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt index 007db1ba..cc9852ac 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/MangaController.kt @@ -124,6 +124,16 @@ object MangaController { ctx.status(200) } + /** delete a downloaded chapter */ + fun chapterDelete(ctx: Context) { + val chapterIndex = ctx.pathParam("chapterIndex").toInt() + val mangaId = ctx.pathParam("mangaId").toInt() + + Chapter.deleteChapter(mangaId, chapterIndex) + + ctx.status(200) + } + /** used to modify a chapter's meta parameters */ fun chapterMeta(ctx: Context) { val chapterIndex = ctx.pathParam("chapterIndex").toInt() diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt index 51dd95fe..e52ad1ab 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/Chapter.kt @@ -18,6 +18,7 @@ import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.update import suwayomi.tachidesk.manga.impl.Manga.getManga +import suwayomi.tachidesk.manga.impl.Page.getChapterDir import suwayomi.tachidesk.manga.impl.Page.getPageName import suwayomi.tachidesk.manga.impl.util.GetHttpSource.getHttpSource import suwayomi.tachidesk.manga.impl.util.lang.awaitSingle @@ -28,6 +29,7 @@ import suwayomi.tachidesk.manga.model.table.ChapterTable import suwayomi.tachidesk.manga.model.table.MangaTable import suwayomi.tachidesk.manga.model.table.PageTable import suwayomi.tachidesk.manga.model.table.toDataClass +import java.io.File import java.time.Instant object Chapter { @@ -267,16 +269,16 @@ object Chapter { fun modifyChapterMeta(mangaId: Int, chapterIndex: Int, key: String, value: String) { transaction { - val chapter = + val chapterId = ChapterTable.select { (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) } - .first()[ChapterTable.id] + .first()[ChapterTable.id].value val meta = - transaction { ChapterMetaTable.select { (ChapterMetaTable.ref eq chapter) and (ChapterMetaTable.key eq key) } }.firstOrNull() + transaction { ChapterMetaTable.select { (ChapterMetaTable.ref eq chapterId) and (ChapterMetaTable.key eq key) } }.firstOrNull() if (meta == null) { ChapterMetaTable.insert { it[ChapterMetaTable.key] = key it[ChapterMetaTable.value] = value - it[ChapterMetaTable.ref] = chapter + it[ChapterMetaTable.ref] = chapterId } } else { ChapterMetaTable.update { @@ -285,4 +287,20 @@ object Chapter { } } } + + fun deleteChapter(mangaId: Int, chapterIndex: Int) { + transaction { + val chapterId = + ChapterTable.select { (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) } + .first()[ChapterTable.id].value + + val chapterDir = getChapterDir(mangaId, chapterId) + + File(chapterDir).deleteRecursively() + + ChapterTable.update({ (ChapterTable.manga eq mangaId) and (ChapterTable.chapterIndex eq chapterIndex) }) { + it[isDownloaded] = false + } + } + } }