Merge remote-tracking branch 'origin/master'

This commit is contained in:
LagradOst 2023-08-17 01:00:51 +02:00
commit cbaca158fa
3 changed files with 54 additions and 37 deletions

View file

@ -243,11 +243,9 @@ dependencies {
// used for subtitle decoding https://github.com/albfernandez/juniversalchardet
implementation("com.github.albfernandez:juniversalchardet:2.4.0")
// slow af yt
//implementation("com.github.HaarigerHarald:android-youtubeExtractor:master-SNAPSHOT")
// newpipe yt taken from https://github.com/TeamNewPipe/NewPipe/blob/dev/app/build.gradle#L204
implementation("com.github.TeamNewPipe:NewPipeExtractor:8495ad619e")
// this should be updated frequently to avoid trailer fu*kery
implementation("com.github.TeamNewPipe:NewPipeExtractor:1f08d28")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.6")
// Library/extensions searching with Levenshtein distance

View file

@ -60,8 +60,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
private var lastScoreTime = -1L
companion object {
private const val clientId = BuildConfig.SIMKL_CLIENT_ID
private const val clientSecret = BuildConfig.SIMKL_CLIENT_SECRET
private const val clientId: String = BuildConfig.SIMKL_CLIENT_ID
private const val clientSecret: String = BuildConfig.SIMKL_CLIENT_SECRET
private var lastLoginState = ""
const val SIMKL_TOKEN_KEY: String = "simkl_token"
@ -498,6 +498,9 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
val episodes: Array<EpisodeMetadata>?,
override var isFavorite: Boolean? = null,
override var maxEpisodes: Int? = null,
/** Save seen episodes separately to know the change from old to new.
* Required to remove seen episodes if count decreases */
val oldEpisodes: Int,
) : SyncAPI.AbstractSyncStatus()
override suspend fun getStatus(id: String): SyncAPI.AbstractSyncStatus? {
@ -521,7 +524,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
score = foundItem.user_rating,
watchedEpisodes = foundItem.watched_episodes_count,
maxEpisodes = foundItem.total_episodes_count,
episodes = episodes
episodes = episodes,
oldEpisodes = foundItem.watched_episodes_count ?: 0,
)
} else {
return if (searchResult != null) {
@ -530,7 +534,8 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
score = 0,
watchedEpisodes = 0,
maxEpisodes = if (searchResult.type == "movie") 0 else null,
episodes = episodes
episodes = episodes,
oldEpisodes = 0,
)
} else {
null
@ -604,17 +609,18 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
SimklListStatusType.ReWatching.value
).contains(status.status)
) {
val cutEpisodes = simklStatus.episodes.take(watchedEpisodes)
val (seasons, episodes) = if (cutEpisodes.any { it.season != null }) {
EpisodeMetadata.convertToSeasons(cutEpisodes) to null
suspend fun postEpisodes(
url: String,
rawEpisodes: List<EpisodeMetadata>
): Boolean {
val (seasons, episodes) = if (rawEpisodes.any { it.season != null }) {
EpisodeMetadata.convertToSeasons(rawEpisodes) to null
} else {
null to EpisodeMetadata.convertToEpisodes(cutEpisodes)
null to EpisodeMetadata.convertToEpisodes(rawEpisodes)
}
debugPrint { "Synced history for ${status.watchedEpisodes} given size of ${simklStatus.episodes.size}: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" }
val episodeResponse = app.post(
"$mainUrl/sync/history",
debugPrint { "Synced history using $url: seasons=${seasons?.toList()}, episodes=${episodes?.toList()}" }
return app.post(
url,
json = StatusRequest(
shows = listOf(
HistoryMediaObject(
@ -628,8 +634,21 @@ class SimklApi(index: Int) : AccountManager(index), SyncAPI {
movies = emptyList()
),
interceptor = interceptor
)
episodeResponse.isSuccessful
).isSuccessful
}
// If episodes decrease: remove all episodes beyond watched episodes.
val removeResponse = if (simklStatus.oldEpisodes > watchedEpisodes) {
val removeEpisodes = simklStatus.episodes
.drop(watchedEpisodes)
postEpisodes("$mainUrl/sync/history/remove", removeEpisodes)
} else {
true
}
val cutEpisodes = simklStatus.episodes.take(watchedEpisodes)
val addResponse = postEpisodes("$mainUrl/sync/history/", cutEpisodes)
removeResponse && addResponse
} else true
val newStatus =

View file

@ -1707,7 +1707,7 @@ class ResultViewModel2 : ViewModel() {
else -> {
if (response.type.isLiveStream())
R.string.play_livestream_button
else if (response.type.isMovieType()) // this wont break compatibility as you only need to override isMovieType
else if (response.isMovie()) // this wont break compatibility as you only need to override isMovieType
R.string.play_movie_button
else null
}