mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-02 10:24:35 -05:00
69 lines
2.5 KiB
Kotlin
69 lines
2.5 KiB
Kotlin
package suwayomi.tachidesk.impl
|
|
|
|
/*
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
import org.jetbrains.exposed.sql.and
|
|
import org.jetbrains.exposed.sql.deleteWhere
|
|
import org.jetbrains.exposed.sql.insert
|
|
import org.jetbrains.exposed.sql.select
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
|
import org.jetbrains.exposed.sql.update
|
|
import suwayomi.tachidesk.impl.Manga.getManga
|
|
import suwayomi.tachidesk.model.table.CategoryMangaTable
|
|
import suwayomi.tachidesk.model.table.CategoryTable
|
|
import suwayomi.tachidesk.model.table.MangaTable
|
|
import suwayomi.tachidesk.model.table.toDataClass
|
|
import suwayomi.tachidesk.model.dataclass.MangaDataClass
|
|
|
|
object Library {
|
|
// TODO: `Category.isLanding` is to handle the default categories a new library manga gets,
|
|
// ..implement that shit at some time...
|
|
// ..also Consider to rename it to `isDefault`
|
|
suspend fun addMangaToLibrary(mangaId: Int) {
|
|
val manga = getManga(mangaId)
|
|
if (!manga.inLibrary) {
|
|
transaction {
|
|
val defaultCategories = CategoryTable.select { CategoryTable.isDefault eq true }.toList()
|
|
|
|
MangaTable.update({ MangaTable.id eq manga.id }) {
|
|
it[MangaTable.inLibrary] = true
|
|
it[MangaTable.defaultCategory] = defaultCategories.isEmpty()
|
|
}
|
|
|
|
defaultCategories.forEach { category ->
|
|
CategoryMangaTable.insert {
|
|
it[CategoryMangaTable.category] = category[CategoryTable.id].value
|
|
it[CategoryMangaTable.manga] = mangaId
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
suspend fun removeMangaFromLibrary(mangaId: Int) {
|
|
val manga = getManga(mangaId)
|
|
if (manga.inLibrary) {
|
|
transaction {
|
|
MangaTable.update({ MangaTable.id eq manga.id }) {
|
|
it[inLibrary] = false
|
|
it[defaultCategory] = true
|
|
}
|
|
CategoryMangaTable.deleteWhere { CategoryMangaTable.manga eq mangaId }
|
|
}
|
|
}
|
|
}
|
|
|
|
fun getLibraryMangas(): List<MangaDataClass> {
|
|
return transaction {
|
|
MangaTable.select { (MangaTable.inLibrary eq true) and (MangaTable.defaultCategory eq true) }.map {
|
|
MangaTable.toDataClass(it)
|
|
}
|
|
}
|
|
}
|
|
}
|