Mangadex tweaks, fix global update crashing sometimes

This commit is contained in:
Jobobby04 2020-09-13 18:45:57 -04:00
parent dcca19e6b8
commit 7a834ea9f4
3 changed files with 22 additions and 15 deletions

View File

@ -6,6 +6,7 @@ import android.content.Intent
import android.os.Build
import android.os.IBinder
import android.os.PowerManager
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper
@ -448,13 +449,17 @@ class LibraryUpdateService(
}
// SY -->
if (source.getMainSource() is MangaDex) {
if (source.getMainSource() is MangaDex && trackManager.mdList.isLogged) {
try {
val tracks = db.getTracks(manga).executeAsBlocking()
if (tracks.isEmpty() || tracks.all { it.sync_id != TrackManager.MDLIST }) {
var track = trackManager.mdList.createInitialTracker(manga)
track = runBlocking { trackManager.mdList.refresh(track).awaitSingle() }
db.insertTrack(track).executeAsBlocking()
}
} catch (e: Exception) {
XLog.e(e)
}
}
// SY <--

View File

@ -131,6 +131,4 @@ class MdList(private val context: Context, id: Int) : TrackService(id) {
override fun search(query: String): Observable<List<TrackSearch>> = throw Exception("not used")
override fun login(username: String, password: String): Completable = throw Exception("not used")
override val isLogged = mdex?.isLogged() ?: false
}

View File

@ -56,6 +56,7 @@ import okhttp3.Response
import rx.Observable
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
class MangaDex(delegate: HttpSource, val context: Context) :
DelegatedHttpSource(delegate),
@ -79,9 +80,12 @@ class MangaDex(delegate: HttpSource, val context: Context) :
override val matchingHosts: List<String> = listOf("mangadex.org", "www.mangadex.org")
val preferences: PreferencesHelper by injectLazy()
val trackManager: TrackManager by injectLazy()
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> =
urlImportFetchSearchManga(context, query) {
ImportIdToMdId(query) {
importIdToMdId(query) {
super.fetchSearchManga(page, query, filters)
}
}
@ -97,11 +101,11 @@ class MangaDex(delegate: HttpSource, val context: Context) :
}
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
return MangaHandler(client, headers, listOf(mdLang), Injekt.get<PreferencesHelper>().mangaDexForceLatestCovers().get()).fetchMangaDetailsObservable(manga)
return MangaHandler(client, headers, listOf(mdLang), preferences.mangaDexForceLatestCovers().get()).fetchMangaDetailsObservable(manga)
}
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
return MangaHandler(client, headers, listOf(mdLang), Injekt.get<PreferencesHelper>().mangaDexForceLatestCovers().get()).fetchChapterListObservable(manga)
return MangaHandler(client, headers, listOf(mdLang), preferences.mangaDexForceLatestCovers().get()).fetchChapterListObservable(manga)
}
@ExperimentalSerializationApi
@ -135,7 +139,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
}
override fun parseIntoMetadata(metadata: MangaDexSearchMetadata, input: Response) {
ApiMangaParser(listOf(mdLang)).parseIntoMetadata(metadata, input, Injekt.get<PreferencesHelper>().mangaDexForceLatestCovers().get())
ApiMangaParser(listOf(mdLang)).parseIntoMetadata(metadata, input, preferences.mangaDexForceLatestCovers().get())
}
override fun fetchFollows(): Observable<MangasPage> {
@ -150,7 +154,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
override fun isLogged(): Boolean {
val httpUrl = MdUtil.baseUrl.toHttpUrlOrNull()!!
return network.cookieManager.get(httpUrl).any { it.name == REMEMBER_ME }
return trackManager.mdList.isLogged && network.cookieManager.get(httpUrl).any { it.name == REMEMBER_ME }
}
override suspend fun login(
@ -196,7 +200,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
val resultStr = result.body!!.string()
if (resultStr.contains("success", true)) {
network.cookieManager.remove(httpUrl)
Injekt.get<TrackManager>().mdList.logout()
trackManager.mdList.logout()
return@withContext true
}
@ -237,7 +241,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
return MangaHandler(client, headers, listOf(mdLang)).fetchRandomMangaId()
}
private fun ImportIdToMdId(query: String, fail: () -> Observable<MangasPage>): Observable<MangasPage> =
private fun importIdToMdId(query: String, fail: () -> Observable<MangasPage>): Observable<MangasPage> =
when {
query.toIntOrNull() != null -> {
Observable.fromCallable {