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.Build
import android.os.IBinder import android.os.IBinder
import android.os.PowerManager import android.os.PowerManager
import com.elvishew.xlog.XLog
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.cache.CoverCache
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
@ -448,13 +449,17 @@ class LibraryUpdateService(
} }
// SY --> // SY -->
if (source.getMainSource() is MangaDex) { if (source.getMainSource() is MangaDex && trackManager.mdList.isLogged) {
try {
val tracks = db.getTracks(manga).executeAsBlocking() val tracks = db.getTracks(manga).executeAsBlocking()
if (tracks.isEmpty() || tracks.all { it.sync_id != TrackManager.MDLIST }) { if (tracks.isEmpty() || tracks.all { it.sync_id != TrackManager.MDLIST }) {
var track = trackManager.mdList.createInitialTracker(manga) var track = trackManager.mdList.createInitialTracker(manga)
track = runBlocking { trackManager.mdList.refresh(track).awaitSingle() } track = runBlocking { trackManager.mdList.refresh(track).awaitSingle() }
db.insertTrack(track).executeAsBlocking() db.insertTrack(track).executeAsBlocking()
} }
} catch (e: Exception) {
XLog.e(e)
}
} }
// SY <-- // 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 search(query: String): Observable<List<TrackSearch>> = throw Exception("not used")
override fun login(username: String, password: String): Completable = 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 rx.Observable
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
class MangaDex(delegate: HttpSource, val context: Context) : class MangaDex(delegate: HttpSource, val context: Context) :
DelegatedHttpSource(delegate), DelegatedHttpSource(delegate),
@ -79,9 +80,12 @@ class MangaDex(delegate: HttpSource, val context: Context) :
override val matchingHosts: List<String> = listOf("mangadex.org", "www.mangadex.org") 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> = override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> =
urlImportFetchSearchManga(context, query) { urlImportFetchSearchManga(context, query) {
ImportIdToMdId(query) { importIdToMdId(query) {
super.fetchSearchManga(page, query, filters) super.fetchSearchManga(page, query, filters)
} }
} }
@ -97,11 +101,11 @@ class MangaDex(delegate: HttpSource, val context: Context) :
} }
override fun fetchMangaDetails(manga: SManga): Observable<SManga> { 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>> { 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 @ExperimentalSerializationApi
@ -135,7 +139,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
} }
override fun parseIntoMetadata(metadata: MangaDexSearchMetadata, input: Response) { 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> { override fun fetchFollows(): Observable<MangasPage> {
@ -150,7 +154,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
override fun isLogged(): Boolean { override fun isLogged(): Boolean {
val httpUrl = MdUtil.baseUrl.toHttpUrlOrNull()!! 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( override suspend fun login(
@ -196,7 +200,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
val resultStr = result.body!!.string() val resultStr = result.body!!.string()
if (resultStr.contains("success", true)) { if (resultStr.contains("success", true)) {
network.cookieManager.remove(httpUrl) network.cookieManager.remove(httpUrl)
Injekt.get<TrackManager>().mdList.logout() trackManager.mdList.logout()
return@withContext true return@withContext true
} }
@ -237,7 +241,7 @@ class MangaDex(delegate: HttpSource, val context: Context) :
return MangaHandler(client, headers, listOf(mdLang)).fetchRandomMangaId() 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 { when {
query.toIntOrNull() != null -> { query.toIntOrNull() != null -> {
Observable.fromCallable { Observable.fromCallable {