commit what we got

This commit is contained in:
Aria Moradi 2020-12-24 19:37:27 +03:30
parent 59c69a4f7f
commit d57827b6d3
7 changed files with 138 additions and 14 deletions

View File

@ -15,6 +15,7 @@ compileKotlin.kotlinOptions {
repositories { repositories {
mavenCentral() mavenCentral()
jcenter()
} }
dependencies { dependencies {
@ -69,6 +70,16 @@ dependencies {
implementation("org.slf4j:slf4j-api:1.8.0-beta4") implementation("org.slf4j:slf4j-api:1.8.0-beta4")
implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3") implementation("com.fasterxml.jackson.core:jackson-databind:2.10.3")
// to get application content root
implementation("net.harawata:appdirs:1.2.0")
// Exposed ORM
val exposed_version = "0.28.1"
implementation ("org.jetbrains.exposed:exposed-core:$exposed_version")
implementation ("org.jetbrains.exposed:exposed-dao:$exposed_version")
implementation ("org.jetbrains.exposed:exposed-jdbc:$exposed_version")
implementation ("org.xerial:sqlite-jdbc:3.30.1")
testImplementation("org.jetbrains.kotlin:kotlin-test") testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit") testImplementation("org.jetbrains.kotlin:kotlin-test-junit")

View File

@ -0,0 +1,7 @@
package ir.armor.tachidesk
import net.harawata.appdirs.AppDirsFactory
object Config {
val dataRoot = AppDirsFactory.getInstance().getUserDataDir("Tachidesk",null, null)
}

View File

@ -7,19 +7,25 @@ import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.source.online.HttpSource
import io.javalin.Javalin import io.javalin.Javalin
import io.javalin.http.Context import io.javalin.http.Context
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
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import net.harawata.appdirs.AppDirsFactory
import okhttp3.Request import okhttp3.Request
import okio.buffer import okio.buffer
import okio.sink import okio.sink
import org.jetbrains.exposed.sql.Database
import java.io.File import java.io.File
import java.net.URL import java.net.URL
import java.net.URLClassLoader import java.net.URLClassLoader
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
class Main { class Main {
companion object { companion object {
const val contentRoot = "/tmp/tachidesk"
@JvmStatic @JvmStatic
fun downloadAPK(url: String, apkPath: String){ fun downloadAPK(url: String, apkPath: String){
val request = Request.Builder().url(url).build() val request = Request.Builder().url(url).build()
@ -33,6 +39,7 @@ class Main {
@JvmStatic @JvmStatic
fun testExtensionExecution(){ fun testExtensionExecution(){
val contentRoot = Config.dataRoot + "/extensions"
File(contentRoot).mkdirs() File(contentRoot).mkdirs()
var sourcePkg = "" var sourcePkg = ""
@ -61,7 +68,7 @@ class Main {
// dex -> jar // dex -> jar
Dex2jarCmd.main(dexFilePath, "-o", jarFilePath, "--force") Dex2jarCmd.main(dexFilePath, "-o", jarFilePath, "--force")
val child = URLClassLoader(arrayOf<URL>(URL("file:$jarFilePath")), this.javaClass.classLoader) val child = URLClassLoader(arrayOf<URL>(URL("file:$jarFilePath")), this::class.java.classLoader)
val classToLoad = Class.forName(className, true, child) val classToLoad = Class.forName(className, true, child)
val instance = classToLoad.newInstance() as HttpSource val instance = classToLoad.newInstance() as HttpSource
val result = instance.fetchPopularManga(1) val result = instance.fetchPopularManga(1)
@ -75,19 +82,34 @@ class Main {
@JvmStatic @JvmStatic
fun main(args: Array<String>) { fun main(args: Array<String>) {
val app = Javalin.create().start(4567) // make sure data everything we need exists
File(Config.dataRoot).mkdirs()
makeDataBaseTables()
app.before() { ctx ->
ctx.header("Access-Control-Allow-Origin", "*")
}
app.get("/api/v1/extensions") { ctx -> // val app = Javalin.create().start(4567)
runBlocking { //
val api = ExtensionGithubApi() // app.before() { ctx ->
val sources = api.findExtensions() // ctx.header("Access-Control-Allow-Origin", "*")
ctx.json(sources) // }
} //
} // 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"
// }
} }
} }
} }

View File

@ -0,0 +1,24 @@
package ir.armor.tachidesk.database
import ir.armor.tachidesk.Config
import ir.armor.tachidesk.database.model.ExtensionsTable
import ir.armor.tachidesk.database.model.SourcesTable
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
object DBMangaer {
val db by lazy {
Database.connect("jdbc:sqlite:${Config.dataRoot}/database.db", "org.sqlite.JDBC")
}
}
fun makeDataBaseTables() {
// mention db object to connect
DBMangaer.db
transaction {
SchemaUtils.create(ExtensionsTable)
SchemaUtils.create(SourcesTable)
}
}

View File

@ -0,0 +1,30 @@
package ir.armor.tachidesk.database.model
import eu.kanade.tachiyomi.source.Source
import org.jetbrains.exposed.dao.IntEntity
import org.jetbrains.exposed.dao.IntEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.Column
import org.jetbrains.exposed.sql.Table
object ExtensionsTable : IntIdTable() {
val name = varchar("name", 128)
val pkgName = varchar("pkg_name", 128)
val versionName = varchar("version_name", 16)
val versionCode = integer("version_code")
val lang = varchar("lang", 5)
val isNsfw = bool("is_nsfw")
}
//class Extension(id: EntityID<Int>) : IntEntity(id) {
// companion object : IntEntityClass<Extension>(ExtensionsTable)
//
// val name by ExtensionsTable.name
// val pkgName by ExtensionsTable.pkgName
// val versionName by ExtensionsTable.versionName
// val versionCode by ExtensionsTable.versionCode
// val lang by ExtensionsTable.lang
// val isNsfw by ExtensionsTable.isNsfw
//}

View File

@ -0,0 +1,26 @@
package ir.armor.tachidesk.database.model
import org.jetbrains.exposed.dao.Entity
import org.jetbrains.exposed.dao.IntEntity
import org.jetbrains.exposed.dao.IntEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.sql.Column
import org.jetbrains.exposed.sql.Table
object SourcesTable : Table() {
val id: Column<Long> = long("id")
val name: Column<String> = varchar("name", 128)
val extension = reference("extension", ExtensionsTable)
override val primaryKey = PrimaryKey(id)
}
//class Source : Entity() {
// companion object : Entity<Source>(SourcesTable)
//
// val name by ExtensionsTable.name
// val pkgName by ExtensionsTable.pkgName
// val versionName by ExtensionsTable.versionName
// val versionCode by ExtensionsTable.versionCode
// val lang by ExtensionsTable.lang
// val isNsfw by ExtensionsTable.isNsfw
//}

View File

@ -0,0 +1,4 @@
package ir.armor.tachidesk.extension
class Extension {
}