|
@@ -46,14 +46,14 @@ import eu.kanade.presentation.track.TrackChapterSelector
|
|
|
import eu.kanade.presentation.track.TrackDateSelector
|
|
|
import eu.kanade.presentation.track.TrackInfoDialogHome
|
|
|
import eu.kanade.presentation.track.TrackScoreSelector
|
|
|
-import eu.kanade.presentation.track.TrackServiceSearch
|
|
|
import eu.kanade.presentation.track.TrackStatusSelector
|
|
|
+import eu.kanade.presentation.track.TrackerSearch
|
|
|
import eu.kanade.presentation.util.Screen
|
|
|
import eu.kanade.tachiyomi.R
|
|
|
-import eu.kanade.tachiyomi.data.track.DeletableTrackService
|
|
|
-import eu.kanade.tachiyomi.data.track.EnhancedTrackService
|
|
|
-import eu.kanade.tachiyomi.data.track.TrackManager
|
|
|
-import eu.kanade.tachiyomi.data.track.TrackService
|
|
|
+import eu.kanade.tachiyomi.data.track.DeletableTracker
|
|
|
+import eu.kanade.tachiyomi.data.track.EnhancedTracker
|
|
|
+import eu.kanade.tachiyomi.data.track.Tracker
|
|
|
+import eu.kanade.tachiyomi.data.track.TrackerManager
|
|
|
import eu.kanade.tachiyomi.data.track.model.TrackSearch
|
|
|
import eu.kanade.tachiyomi.util.lang.convertEpochMillisZone
|
|
|
import eu.kanade.tachiyomi.util.system.openInBrowser
|
|
@@ -105,7 +105,7 @@ data class TrackInfoDialogHomeScreen(
|
|
|
navigator.push(
|
|
|
TrackStatusSelectorScreen(
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
),
|
|
|
)
|
|
|
},
|
|
@@ -113,7 +113,7 @@ data class TrackInfoDialogHomeScreen(
|
|
|
navigator.push(
|
|
|
TrackChapterSelectorScreen(
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
),
|
|
|
)
|
|
|
},
|
|
@@ -121,7 +121,7 @@ data class TrackInfoDialogHomeScreen(
|
|
|
navigator.push(
|
|
|
TrackScoreSelectorScreen(
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
),
|
|
|
)
|
|
|
},
|
|
@@ -129,7 +129,7 @@ data class TrackInfoDialogHomeScreen(
|
|
|
navigator.push(
|
|
|
TrackDateSelectorScreen(
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
start = true,
|
|
|
),
|
|
|
)
|
|
@@ -138,21 +138,21 @@ data class TrackInfoDialogHomeScreen(
|
|
|
navigator.push(
|
|
|
TrackDateSelectorScreen(
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
start = false,
|
|
|
),
|
|
|
)
|
|
|
},
|
|
|
onNewSearch = {
|
|
|
- if (it.service is EnhancedTrackService) {
|
|
|
+ if (it.tracker is EnhancedTracker) {
|
|
|
sm.registerEnhancedTracking(it)
|
|
|
} else {
|
|
|
navigator.push(
|
|
|
- TrackServiceSearchScreen(
|
|
|
+ TrackerSearchScreen(
|
|
|
mangaId = mangaId,
|
|
|
initialQuery = it.track?.title ?: mangaTitle,
|
|
|
currentUrl = it.track?.remoteUrl,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
),
|
|
|
)
|
|
|
}
|
|
@@ -160,10 +160,10 @@ data class TrackInfoDialogHomeScreen(
|
|
|
onOpenInBrowser = { openTrackerInBrowser(context, it) },
|
|
|
onRemoved = {
|
|
|
navigator.push(
|
|
|
- TrackServiceRemoveScreen(
|
|
|
+ TrackerRemoveScreen(
|
|
|
mangaId = mangaId,
|
|
|
track = it.track!!,
|
|
|
- serviceId = it.service.id,
|
|
|
+ serviceId = it.tracker.id,
|
|
|
),
|
|
|
)
|
|
|
},
|
|
@@ -201,12 +201,12 @@ data class TrackInfoDialogHomeScreen(
|
|
|
}
|
|
|
|
|
|
fun registerEnhancedTracking(item: TrackItem) {
|
|
|
- item.service as EnhancedTrackService
|
|
|
+ item.tracker as EnhancedTracker
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
val manga = Injekt.get<GetManga>().await(mangaId) ?: return@launchNonCancellable
|
|
|
try {
|
|
|
- val matchResult = item.service.match(manga) ?: throw Exception()
|
|
|
- item.service.register(matchResult, mangaId)
|
|
|
+ val matchResult = item.tracker.match(manga) ?: throw Exception()
|
|
|
+ item.tracker.register(matchResult, mangaId)
|
|
|
} catch (e: Exception) {
|
|
|
withUIContext { Injekt.get<Application>().toast(R.string.error_no_match) }
|
|
|
}
|
|
@@ -236,13 +236,13 @@ data class TrackInfoDialogHomeScreen(
|
|
|
}
|
|
|
|
|
|
private fun List<Track>.mapToTrackItem(): List<TrackItem> {
|
|
|
- val loggedServices = Injekt.get<TrackManager>().services.filter { it.isLoggedIn }
|
|
|
+ val loggedInTrackers = Injekt.get<TrackerManager>().trackers.filter { it.isLoggedIn }
|
|
|
val source = Injekt.get<SourceManager>().getOrStub(sourceId)
|
|
|
- return loggedServices
|
|
|
+ return loggedInTrackers
|
|
|
// Map to TrackItem
|
|
|
.map { service -> TrackItem(find { it.syncId == service.id }, service) }
|
|
|
// Show only if the service supports this manga's source
|
|
|
- .filter { (it.service as? EnhancedTrackService)?.accept(source) ?: true }
|
|
|
+ .filter { (it.tracker as? EnhancedTracker)?.accept(source) ?: true }
|
|
|
}
|
|
|
|
|
|
@Immutable
|
|
@@ -263,7 +263,7 @@ private data class TrackStatusSelectorScreen(
|
|
|
val sm = rememberScreenModel {
|
|
|
Model(
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
)
|
|
|
}
|
|
|
val state by sm.state.collectAsState()
|
|
@@ -281,11 +281,11 @@ private data class TrackStatusSelectorScreen(
|
|
|
|
|
|
private class Model(
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
) : StateScreenModel<Model.State>(State(track.status.toInt())) {
|
|
|
|
|
|
fun getSelections(): Map<Int, Int?> {
|
|
|
- return service.getStatusList().associateWith { service.getStatus(it) }
|
|
|
+ return tracker.getStatusList().associateWith { tracker.getStatus(it) }
|
|
|
}
|
|
|
|
|
|
fun setSelection(selection: Int) {
|
|
@@ -294,7 +294,7 @@ private data class TrackStatusSelectorScreen(
|
|
|
|
|
|
fun setStatus() {
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
- service.setRemoteStatus(track.toDbTrack(), state.value.selection)
|
|
|
+ tracker.setRemoteStatus(track.toDbTrack(), state.value.selection)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -316,7 +316,7 @@ private data class TrackChapterSelectorScreen(
|
|
|
val sm = rememberScreenModel {
|
|
|
Model(
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
)
|
|
|
}
|
|
|
val state by sm.state.collectAsState()
|
|
@@ -335,7 +335,7 @@ private data class TrackChapterSelectorScreen(
|
|
|
|
|
|
private class Model(
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
) : StateScreenModel<Model.State>(State(track.lastChapterRead.toInt())) {
|
|
|
|
|
|
fun getRange(): Iterable<Int> {
|
|
@@ -353,7 +353,7 @@ private data class TrackChapterSelectorScreen(
|
|
|
|
|
|
fun setChapter() {
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
- service.setRemoteLastChapterRead(track.toDbTrack(), state.value.selection)
|
|
|
+ tracker.setRemoteLastChapterRead(track.toDbTrack(), state.value.selection)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -375,7 +375,7 @@ private data class TrackScoreSelectorScreen(
|
|
|
val sm = rememberScreenModel {
|
|
|
Model(
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
)
|
|
|
}
|
|
|
val state by sm.state.collectAsState()
|
|
@@ -394,11 +394,11 @@ private data class TrackScoreSelectorScreen(
|
|
|
|
|
|
private class Model(
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
- ) : StateScreenModel<Model.State>(State(service.displayScore(track.toDbTrack()))) {
|
|
|
+ private val tracker: Tracker,
|
|
|
+ ) : StateScreenModel<Model.State>(State(tracker.displayScore(track.toDbTrack()))) {
|
|
|
|
|
|
fun getSelections(): List<String> {
|
|
|
- return service.getScoreList()
|
|
|
+ return tracker.getScoreList()
|
|
|
}
|
|
|
|
|
|
fun setSelection(selection: String) {
|
|
@@ -407,7 +407,7 @@ private data class TrackScoreSelectorScreen(
|
|
|
|
|
|
fun setScore() {
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
- service.setRemoteScore(track.toDbTrack(), state.value.selection)
|
|
|
+ tracker.setRemoteScore(track.toDbTrack(), state.value.selection)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -486,7 +486,7 @@ private data class TrackDateSelectorScreen(
|
|
|
val sm = rememberScreenModel {
|
|
|
Model(
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
start = start,
|
|
|
)
|
|
|
}
|
|
@@ -515,7 +515,7 @@ private data class TrackDateSelectorScreen(
|
|
|
|
|
|
private class Model(
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
private val start: Boolean,
|
|
|
) : ScreenModel {
|
|
|
|
|
@@ -534,15 +534,15 @@ private data class TrackDateSelectorScreen(
|
|
|
val localMillis = millis.convertEpochMillisZone(ZoneOffset.UTC, ZoneOffset.systemDefault())
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
if (start) {
|
|
|
- service.setRemoteStartDate(track.toDbTrack(), localMillis)
|
|
|
+ tracker.setRemoteStartDate(track.toDbTrack(), localMillis)
|
|
|
} else {
|
|
|
- service.setRemoteFinishDate(track.toDbTrack(), localMillis)
|
|
|
+ tracker.setRemoteFinishDate(track.toDbTrack(), localMillis)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fun confirmRemoveDate(navigator: Navigator) {
|
|
|
- navigator.push(TrackDateRemoverScreen(track, service.id, start))
|
|
|
+ navigator.push(TrackDateRemoverScreen(track, tracker.id, start))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -559,7 +559,7 @@ private data class TrackDateRemoverScreen(
|
|
|
val sm = rememberScreenModel {
|
|
|
Model(
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
start = start,
|
|
|
)
|
|
|
}
|
|
@@ -614,25 +614,25 @@ private data class TrackDateRemoverScreen(
|
|
|
|
|
|
private class Model(
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
private val start: Boolean,
|
|
|
) : ScreenModel {
|
|
|
|
|
|
- fun getServiceName() = service.name
|
|
|
+ fun getServiceName() = tracker.name
|
|
|
|
|
|
fun removeDate() {
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
if (start) {
|
|
|
- service.setRemoteStartDate(track.toDbTrack(), 0)
|
|
|
+ tracker.setRemoteStartDate(track.toDbTrack(), 0)
|
|
|
} else {
|
|
|
- service.setRemoteFinishDate(track.toDbTrack(), 0)
|
|
|
+ tracker.setRemoteFinishDate(track.toDbTrack(), 0)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-data class TrackServiceSearchScreen(
|
|
|
+data class TrackerSearchScreen(
|
|
|
private val mangaId: Long,
|
|
|
private val initialQuery: String,
|
|
|
private val currentUrl: String?,
|
|
@@ -647,14 +647,14 @@ data class TrackServiceSearchScreen(
|
|
|
mangaId = mangaId,
|
|
|
currentUrl = currentUrl,
|
|
|
initialQuery = initialQuery,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
)
|
|
|
}
|
|
|
|
|
|
val state by sm.state.collectAsState()
|
|
|
|
|
|
var textFieldValue by remember { mutableStateOf(TextFieldValue(initialQuery)) }
|
|
|
- TrackServiceSearch(
|
|
|
+ TrackerSearch(
|
|
|
query = textFieldValue,
|
|
|
onQueryChange = { textFieldValue = it },
|
|
|
onDispatchQuery = { sm.trackingSearch(textFieldValue.text) },
|
|
@@ -673,7 +673,7 @@ data class TrackServiceSearchScreen(
|
|
|
private val mangaId: Long,
|
|
|
private val currentUrl: String? = null,
|
|
|
initialQuery: String,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
) : StateScreenModel<Model.State>(State()) {
|
|
|
|
|
|
init {
|
|
@@ -690,7 +690,7 @@ data class TrackServiceSearchScreen(
|
|
|
|
|
|
val result = withIOContext {
|
|
|
try {
|
|
|
- val results = service.search(query)
|
|
|
+ val results = tracker.search(query)
|
|
|
Result.success(results)
|
|
|
} catch (e: Throwable) {
|
|
|
Result.failure(e)
|
|
@@ -706,7 +706,7 @@ data class TrackServiceSearchScreen(
|
|
|
}
|
|
|
|
|
|
fun registerTracking(item: TrackSearch) {
|
|
|
- coroutineScope.launchNonCancellable { service.register(item, mangaId) }
|
|
|
+ coroutineScope.launchNonCancellable { tracker.register(item, mangaId) }
|
|
|
}
|
|
|
|
|
|
fun updateSelection(selected: TrackSearch) {
|
|
@@ -721,7 +721,7 @@ data class TrackServiceSearchScreen(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-private data class TrackServiceRemoveScreen(
|
|
|
+private data class TrackerRemoveScreen(
|
|
|
private val mangaId: Long,
|
|
|
private val track: Track,
|
|
|
private val serviceId: Long,
|
|
@@ -734,10 +734,10 @@ private data class TrackServiceRemoveScreen(
|
|
|
Model(
|
|
|
mangaId = mangaId,
|
|
|
track = track,
|
|
|
- service = Injekt.get<TrackManager>().getService(serviceId)!!,
|
|
|
+ tracker = Injekt.get<TrackerManager>().get(serviceId)!!,
|
|
|
)
|
|
|
}
|
|
|
- val serviceName = sm.getServiceName()
|
|
|
+ val serviceName = sm.getName()
|
|
|
var removeRemoteTrack by remember { mutableStateOf(false) }
|
|
|
AlertDialogContent(
|
|
|
modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),
|
|
@@ -758,7 +758,7 @@ private data class TrackServiceRemoveScreen(
|
|
|
Text(
|
|
|
text = stringResource(R.string.track_delete_text, serviceName),
|
|
|
)
|
|
|
- if (sm.isServiceDeletable()) {
|
|
|
+ if (sm.isDeletable()) {
|
|
|
Row(verticalAlignment = Alignment.CenterVertically) {
|
|
|
Checkbox(checked = removeRemoteTrack, onCheckedChange = { removeRemoteTrack = it })
|
|
|
Text(text = stringResource(R.string.track_delete_remote_text, serviceName))
|
|
@@ -798,17 +798,17 @@ private data class TrackServiceRemoveScreen(
|
|
|
private class Model(
|
|
|
private val mangaId: Long,
|
|
|
private val track: Track,
|
|
|
- private val service: TrackService,
|
|
|
+ private val tracker: Tracker,
|
|
|
private val deleteTrack: DeleteTrack = Injekt.get(),
|
|
|
) : ScreenModel {
|
|
|
|
|
|
- fun getServiceName() = service.name
|
|
|
+ fun getName() = tracker.name
|
|
|
|
|
|
- fun isServiceDeletable() = service is DeletableTrackService
|
|
|
+ fun isDeletable() = tracker is DeletableTracker
|
|
|
|
|
|
fun deleteMangaFromService() {
|
|
|
coroutineScope.launchNonCancellable {
|
|
|
- (service as DeletableTrackService).delete(track.toDbTrack())
|
|
|
+ (tracker as DeletableTracker).delete(track.toDbTrack())
|
|
|
}
|
|
|
}
|
|
|
|