2020-12-23 17:52:05 +03:30
|
|
|
package ir.armor.tachidesk
|
|
|
|
|
|
2020-12-24 01:09:54 +03:30
|
|
|
import com.googlecode.dex2jar.tools.Dex2jarCmd
|
2020-12-24 01:22:01 +03:30
|
|
|
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
|
|
|
|
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
|
|
|
|
import eu.kanade.tachiyomi.source.model.MangasPage
|
|
|
|
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
2020-12-24 02:08:03 +03:30
|
|
|
import io.javalin.Javalin
|
|
|
|
|
import io.javalin.http.Context
|
2020-12-24 19:37:27 +03:30
|
|
|
import ir.armor.tachidesk.database.DBMangaer
|
|
|
|
|
import ir.armor.tachidesk.database.makeDataBaseTables
|
|
|
|
|
import ir.armor.tachidesk.database.model.ExtensionsTable
|
|
|
|
|
import ir.armor.tachidesk.database.model.SourcesTable
|
2020-12-24 01:22:01 +03:30
|
|
|
import kotlinx.coroutines.runBlocking
|
2020-12-24 19:37:27 +03:30
|
|
|
import net.harawata.appdirs.AppDirsFactory
|
2020-12-24 01:22:01 +03:30
|
|
|
import okhttp3.Request
|
|
|
|
|
import okio.buffer
|
|
|
|
|
import okio.sink
|
2020-12-24 19:37:27 +03:30
|
|
|
import org.jetbrains.exposed.sql.Database
|
2020-12-24 01:22:01 +03:30
|
|
|
import java.io.File
|
|
|
|
|
import java.net.URL
|
|
|
|
|
import java.net.URLClassLoader
|
2020-12-24 19:37:27 +03:30
|
|
|
import org.jetbrains.exposed.sql.SchemaUtils
|
|
|
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
2020-12-24 02:08:03 +03:30
|
|
|
|
2020-12-24 01:09:54 +03:30
|
|
|
|
2020-12-23 19:52:16 +03:30
|
|
|
class Main {
|
2020-12-23 17:52:05 +03:30
|
|
|
companion object {
|
2020-12-24 01:22:01 +03:30
|
|
|
@JvmStatic
|
|
|
|
|
fun downloadAPK(url: String, apkPath: String){
|
|
|
|
|
val request = Request.Builder().url(url).build()
|
|
|
|
|
val response = NetworkHelper().client.newCall(request).execute();
|
|
|
|
|
|
|
|
|
|
val downloadedFile = File(apkPath)
|
|
|
|
|
val sink = downloadedFile.sink().buffer()
|
|
|
|
|
sink.writeAll(response.body!!.source())
|
|
|
|
|
sink.close()
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-23 17:52:05 +03:30
|
|
|
@JvmStatic
|
2020-12-24 02:08:03 +03:30
|
|
|
fun testExtensionExecution(){
|
2020-12-24 19:37:27 +03:30
|
|
|
val contentRoot = Config.dataRoot + "/extensions"
|
2020-12-24 01:22:01 +03:30
|
|
|
File(contentRoot).mkdirs()
|
|
|
|
|
var sourcePkg = ""
|
|
|
|
|
|
|
|
|
|
// get list of extensions
|
|
|
|
|
var apkToDownload: String = ""
|
|
|
|
|
runBlocking {
|
|
|
|
|
val api = ExtensionGithubApi()
|
|
|
|
|
val source = api.findExtensions().first {
|
|
|
|
|
api.getApkUrl(it).endsWith("killsixbilliondemons-v1.2.3.apk")
|
|
|
|
|
}
|
|
|
|
|
apkToDownload = api.getApkUrl(source)
|
|
|
|
|
sourcePkg = source.pkgName
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
val apkFileName = apkToDownload.split("/").last()
|
|
|
|
|
val apkFilePath = "$contentRoot/$apkFileName"
|
|
|
|
|
val zipDirPath = apkFilePath.substringBefore(".apk")
|
|
|
|
|
val jarFilePath = "$zipDirPath.jar"
|
|
|
|
|
val dexFilePath = "$zipDirPath.dex"
|
2020-12-24 00:27:19 +03:30
|
|
|
|
2020-12-24 01:22:01 +03:30
|
|
|
// download apk file
|
|
|
|
|
downloadAPK(apkToDownload, apkFilePath)
|
2020-12-24 01:09:54 +03:30
|
|
|
|
|
|
|
|
|
2020-12-24 01:22:01 +03:30
|
|
|
val className = APKExtractor.extract_dex_and_read_className(apkFilePath, dexFilePath)
|
|
|
|
|
// dex -> jar
|
|
|
|
|
Dex2jarCmd.main(dexFilePath, "-o", jarFilePath, "--force")
|
2020-12-24 01:09:54 +03:30
|
|
|
|
2020-12-24 19:37:27 +03:30
|
|
|
val child = URLClassLoader(arrayOf<URL>(URL("file:$jarFilePath")), this::class.java.classLoader)
|
2020-12-24 01:22:01 +03:30
|
|
|
val classToLoad = Class.forName(className, true, child)
|
|
|
|
|
val instance = classToLoad.newInstance() as HttpSource
|
|
|
|
|
val result = instance.fetchPopularManga(1)
|
|
|
|
|
val mangasPage = result.toBlocking().first() as MangasPage
|
|
|
|
|
mangasPage.mangas.forEach {
|
|
|
|
|
println(it.title)
|
|
|
|
|
}
|
2020-12-24 02:08:03 +03:30
|
|
|
// exitProcess(0)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@JvmStatic
|
|
|
|
|
fun main(args: Array<String>) {
|
2020-12-24 19:37:27 +03:30
|
|
|
// make sure data everything we need exists
|
|
|
|
|
File(Config.dataRoot).mkdirs()
|
|
|
|
|
makeDataBaseTables()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// val app = Javalin.create().start(4567)
|
|
|
|
|
//
|
|
|
|
|
// app.before() { ctx ->
|
|
|
|
|
// ctx.header("Access-Control-Allow-Origin", "*")
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// app.get("/api/v1/extensions") { ctx ->
|
|
|
|
|
// runBlocking {
|
|
|
|
|
// val api = ExtensionGithubApi()
|
|
|
|
|
// val sources = api.findExtensions()
|
|
|
|
|
// ctx.json(sources)
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// app.get("/api/v1/extensions/install/:extensionURL") { ctx ->
|
|
|
|
|
// ctx.pathParam("extensionURL")
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ExtensionTable.new {
|
|
|
|
|
// name = "khar"
|
|
|
|
|
// pkgName = "eu.khar"
|
|
|
|
|
// }
|
2020-12-23 17:52:05 +03:30
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|