@ -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.DeletableTrack S ervice
import eu.kanade.tachiyomi.data.track.EnhancedTrack S ervice
import eu.kanade.tachiyomi.data.track.Track Manag er
import eu.kanade.tachiyomi.data.track.Track Service
import eu.kanade.tachiyomi.data.track.DeletableTrack er
import eu.kanade.tachiyomi.data.track.EnhancedTrack er
import eu.kanade.tachiyomi.data.track.Track er
import eu.kanade.tachiyomi.data.track.Track erManager
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 (
Track S ervice SearchScreen(
Track erSearchScreen(
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 (
Track S ervice RemoveScreen(
Track erRemoveScreen(
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 logged Service s = Injekt . get < Track Manager> ( ) . service s. filter { it . isLoggedIn }
val logged InTracker s = Injekt . get < Track er Manager> ( ) . tracker s. filter { it . isLoggedIn }
val source = Injekt . get < SourceManager > ( ) . getOrStub ( sourceId )
return logged Service s
return logged InTracker s
// 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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . 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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . 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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . 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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . 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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . 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 Track S ervice SearchScreen(
data class Track erSearchScreen(
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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . get ( serviceId ) !! ,
)
}
val state by sm . state . collectAsState ( )
var textFieldValue by remember { mutableStateOf ( TextFieldValue ( initialQuery ) ) }
Track S ervice Search(
Track erSearch(
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 Track S ervice RemoveScreen(
private data class Track erRemoveScreen(
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 < Track Manager> ( ) . getService ( serviceId ) !! ,
tracker = Injekt . get < Track er Manager> ( ) . get ( serviceId ) !! ,
)
}
val serviceName = sm . get Service Name( )
val serviceName = sm . get Name( )
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 . is Service Deletable( ) ) {
if ( sm . is Deletable( ) ) {
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 get ServiceName( ) = service . name
fun get Name( ) = tracker . name
fun is ServiceDeletable( ) = service is DeletableTrackService
fun is Deletable( ) = tracker is DeletableTracker
fun deleteMangaFromService ( ) {
coroutineScope . launchNonCancellable {
( service as DeletableTrackService ) . delete ( track . toDbTrack ( ) )
( tracker as DeletableTracker ) . delete ( track . toDbTrack ( ) )
}
}