Add JavaScriptEngine abstraction to extensions-lib (#8155)

This allows us to swap out the implementation in the future and on different platforms
without major changes to the extensions themselves.

(cherry picked from commit 7be68639107caecea879dc05edb92d81a4689a5a)

# Conflicts:
#	core/build.gradle.kts
This commit is contained in:
arkon 2022-10-08 09:45:06 -04:00 committed by Jobobby04
parent 48b9135056
commit 896bc3253e
4 changed files with 32 additions and 10 deletions

View File

@ -209,9 +209,6 @@ dependencies {
// Data serialization (JSON, protobuf)
implementation(kotlinx.bundles.serialization)
// JavaScript engine
implementation(libs.bundles.js.engine)
// HTML parser
implementation(libs.jsoup)

View File

@ -39,6 +39,7 @@ import eu.kanade.tachiyomi.data.saver.ImageSaver
import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.job.DelayedTrackingStore
import eu.kanade.tachiyomi.extension.ExtensionManager
import eu.kanade.tachiyomi.network.JavaScriptEngine
import eu.kanade.tachiyomi.network.NetworkHelper
import eu.kanade.tachiyomi.network.NetworkPreferences
import eu.kanade.tachiyomi.source.SourceManager
@ -87,7 +88,6 @@ class AppModule(val app: Application) : InjektModule {
},
)
}
addSingletonFactory {
Database(
driver = get(),
@ -108,7 +108,6 @@ class AppModule(val app: Application) : InjektModule {
// SY <--
)
}
addSingletonFactory<DatabaseHandler> { AndroidDatabaseHandler(get(), get()) }
addSingletonFactory {
@ -117,7 +116,6 @@ class AppModule(val app: Application) : InjektModule {
explicitNulls = false
}
}
addSingletonFactory {
XML {
unknownChildHandler = UnknownChildHandler { _, _, _, _, _ -> emptyList() }
@ -126,19 +124,17 @@ class AppModule(val app: Application) : InjektModule {
}
addSingletonFactory { ChapterCache(app) }
addSingletonFactory { CoverCache(app) }
addSingletonFactory { NetworkHelper(app) }
addSingletonFactory { ExtensionManager(app) }
addSingletonFactory { JavaScriptEngine(app) }
addSingletonFactory { SourceManager(app, get(), get()) }
addSingletonFactory { ExtensionManager(app) }
addSingletonFactory { DownloadManager(app) }
addSingletonFactory { TrackManager(app) }
addSingletonFactory { DelayedTrackingStore(app) }
addSingletonFactory { ImageSaver(app) }

View File

@ -44,6 +44,9 @@ dependencies {
implementation(androidx.corektx)
// JavaScript engine
implementation(libs.bundles.js.engine)
// SY -->
implementation(sylibs.xlog)
// SY <--

View File

@ -0,0 +1,26 @@
package eu.kanade.tachiyomi.network
import android.content.Context
import app.cash.quickjs.QuickJs
import eu.kanade.tachiyomi.util.lang.withIOContext
/**
* Util for evaluating JavaScript in sources.
*/
class JavaScriptEngine(context: Context) {
/**
* Evaluate arbitrary JavaScript code and get the result as a primtive type
* (e.g., String, Int).
*
* @since extensions-lib 1.4
* @param script JavaScript to execute.
* @return Result of JavaScript code as a primitive type.
*/
@Suppress("UNUSED")
suspend fun <T> evaluate(script: String): T = withIOContext {
QuickJs.create().use {
it.evaluate(script) as T
}
}
}