mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 11:24:35 -05:00
Fix Tracker Status and Scores (#843)
This commit is contained in:
@@ -17,6 +17,7 @@ import org.jetbrains.exposed.sql.transactions.transaction
|
|||||||
import suwayomi.tachidesk.graphql.types.TrackRecordNodeList
|
import suwayomi.tachidesk.graphql.types.TrackRecordNodeList
|
||||||
import suwayomi.tachidesk.graphql.types.TrackRecordNodeList.Companion.toNodeList
|
import suwayomi.tachidesk.graphql.types.TrackRecordNodeList.Companion.toNodeList
|
||||||
import suwayomi.tachidesk.graphql.types.TrackRecordType
|
import suwayomi.tachidesk.graphql.types.TrackRecordType
|
||||||
|
import suwayomi.tachidesk.graphql.types.TrackStatusType
|
||||||
import suwayomi.tachidesk.graphql.types.TrackerType
|
import suwayomi.tachidesk.graphql.types.TrackerType
|
||||||
import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager
|
import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager
|
||||||
import suwayomi.tachidesk.manga.impl.track.tracker.model.toTrack
|
import suwayomi.tachidesk.manga.impl.track.tracker.model.toTrack
|
||||||
@@ -36,6 +37,36 @@ class TrackerDataLoader : KotlinDataLoader<Int, TrackerType> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TrackerStatusesDataLoader : KotlinDataLoader<Int, List<TrackStatusType>> {
|
||||||
|
override val dataLoaderName = "TrackerStatusesDataLoader"
|
||||||
|
|
||||||
|
override fun getDataLoader(): DataLoader<Int, List<TrackStatusType>> =
|
||||||
|
DataLoaderFactory.newDataLoader { ids ->
|
||||||
|
future {
|
||||||
|
ids.map { id ->
|
||||||
|
TrackerManager.getTracker(id)?.let { tracker ->
|
||||||
|
tracker.getStatusList().map {
|
||||||
|
TrackStatusType(it, tracker.getStatus(it)!!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TrackerScoresDataLoader : KotlinDataLoader<Int, List<String>> {
|
||||||
|
override val dataLoaderName = "TrackerStatusesDataLoader"
|
||||||
|
|
||||||
|
override fun getDataLoader(): DataLoader<Int, List<String>> =
|
||||||
|
DataLoaderFactory.newDataLoader { ids ->
|
||||||
|
future {
|
||||||
|
ids.map { id ->
|
||||||
|
TrackerManager.getTracker(id)?.getScoreList()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class TrackRecordsForMangaIdDataLoader : KotlinDataLoader<Int, TrackRecordNodeList> {
|
class TrackRecordsForMangaIdDataLoader : KotlinDataLoader<Int, TrackRecordNodeList> {
|
||||||
override val dataLoaderName = "TrackRecordsForMangaIdDataLoader"
|
override val dataLoaderName = "TrackRecordsForMangaIdDataLoader"
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ import suwayomi.tachidesk.graphql.dataLoaders.TrackRecordDataLoader
|
|||||||
import suwayomi.tachidesk.graphql.dataLoaders.TrackRecordsForMangaIdDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.TrackRecordsForMangaIdDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.TrackRecordsForTrackerIdDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.TrackRecordsForTrackerIdDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.TrackerDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.TrackerDataLoader
|
||||||
|
import suwayomi.tachidesk.graphql.dataLoaders.TrackerScoresDataLoader
|
||||||
|
import suwayomi.tachidesk.graphql.dataLoaders.TrackerStatusesDataLoader
|
||||||
import suwayomi.tachidesk.graphql.dataLoaders.UnreadChapterCountForMangaDataLoader
|
import suwayomi.tachidesk.graphql.dataLoaders.UnreadChapterCountForMangaDataLoader
|
||||||
|
|
||||||
class TachideskDataLoaderRegistryFactory {
|
class TachideskDataLoaderRegistryFactory {
|
||||||
@@ -65,6 +67,8 @@ class TachideskDataLoaderRegistryFactory {
|
|||||||
ExtensionDataLoader(),
|
ExtensionDataLoader(),
|
||||||
ExtensionForSourceDataLoader(),
|
ExtensionForSourceDataLoader(),
|
||||||
TrackerDataLoader(),
|
TrackerDataLoader(),
|
||||||
|
TrackerStatusesDataLoader(),
|
||||||
|
TrackerScoresDataLoader(),
|
||||||
TrackRecordsForMangaIdDataLoader(),
|
TrackRecordsForMangaIdDataLoader(),
|
||||||
DisplayScoreForTrackRecordDataLoader(),
|
DisplayScoreForTrackRecordDataLoader(),
|
||||||
TrackRecordsForTrackerIdDataLoader(),
|
TrackRecordsForTrackerIdDataLoader(),
|
||||||
|
|||||||
@@ -38,11 +38,24 @@ class TrackerType(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun statuses(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<List<TrackStatusType>> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, List<TrackStatusType>>("TrackerStatusesDataLoader", id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun scores(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<List<String>> {
|
||||||
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, List<String>>("TrackerScoresDataLoader", id)
|
||||||
|
}
|
||||||
|
|
||||||
fun trackRecords(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<TrackRecordNodeList> {
|
fun trackRecords(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<TrackRecordNodeList> {
|
||||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackRecordNodeList>("TrackRecordsForTrackerIdDataLoader", id)
|
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackRecordNodeList>("TrackRecordsForTrackerIdDataLoader", id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TrackStatusType(
|
||||||
|
val value: Int,
|
||||||
|
val name: String,
|
||||||
|
)
|
||||||
|
|
||||||
class TrackRecordType(
|
class TrackRecordType(
|
||||||
val id: Int,
|
val id: Int,
|
||||||
val mangaId: Int,
|
val mangaId: Int,
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ object Track {
|
|||||||
name = it.name,
|
name = it.name,
|
||||||
icon = proxyThumbnailUrl(it.id),
|
icon = proxyThumbnailUrl(it.id),
|
||||||
statusList = it.getStatusList(),
|
statusList = it.getStatusList(),
|
||||||
statusTextMap = it.getStatusList().associateWith { k -> it.getStatus(k) ?: "" },
|
statusTextMap = it.getStatusList().associateWith { k -> it.getStatus(k).orEmpty() },
|
||||||
scoreList = it.getScoreList(),
|
scoreList = it.getScoreList(),
|
||||||
record = record,
|
record = record,
|
||||||
)
|
)
|
||||||
@@ -223,7 +223,8 @@ object Track {
|
|||||||
}
|
}
|
||||||
if (input.scoreString != null) {
|
if (input.scoreString != null) {
|
||||||
val score = tracker.indexToScore(tracker.getScoreList().indexOf(input.scoreString))
|
val score = tracker.indexToScore(tracker.getScoreList().indexOf(input.scoreString))
|
||||||
recordDb[TrackRecordTable.score] = score.toDouble()
|
// conversion issues between Float <-> Double so convert to string before double
|
||||||
|
recordDb[TrackRecordTable.score] = score.toString().toDouble()
|
||||||
}
|
}
|
||||||
if (input.startDate != null) {
|
if (input.startDate != null) {
|
||||||
recordDb[TrackRecordTable.startDate] = input.startDate
|
recordDb[TrackRecordTable.startDate] = input.startDate
|
||||||
|
|||||||
@@ -50,12 +50,12 @@ class Anilist(id: Int) : Tracker(id, "AniList"), DeletableTrackService {
|
|||||||
@StringRes
|
@StringRes
|
||||||
override fun getStatus(status: Int): String? =
|
override fun getStatus(status: Int): String? =
|
||||||
when (status) {
|
when (status) {
|
||||||
READING -> "reading"
|
READING -> "Reading"
|
||||||
PLAN_TO_READ -> "plan_to_read"
|
PLAN_TO_READ -> "Plan to read"
|
||||||
COMPLETED -> "completed"
|
COMPLETED -> "Completed"
|
||||||
ON_HOLD -> "on_hold"
|
ON_HOLD -> "On hold"
|
||||||
DROPPED -> "dropped"
|
DROPPED -> "Dropped"
|
||||||
REREADING -> "repeating"
|
REREADING -> "Rereading"
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,12 +46,12 @@ class MyAnimeList(id: Int) : Tracker(id, "MyAnimeList"), DeletableTrackService {
|
|||||||
@StringRes
|
@StringRes
|
||||||
override fun getStatus(status: Int): String? =
|
override fun getStatus(status: Int): String? =
|
||||||
when (status) {
|
when (status) {
|
||||||
READING -> "reading"
|
READING -> "Reading"
|
||||||
PLAN_TO_READ -> "plan_to_read"
|
PLAN_TO_READ -> "Plan to read"
|
||||||
COMPLETED -> "completed"
|
COMPLETED -> "Completed"
|
||||||
ON_HOLD -> "on_hold"
|
ON_HOLD -> "On hold"
|
||||||
DROPPED -> "dropped"
|
DROPPED -> "Dropped"
|
||||||
REREADING -> "repeating"
|
REREADING -> "Rereading"
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user