Skip to content

Commit

Permalink
Implement preferences, start on ui work, start on itch api
Browse files Browse the repository at this point in the history
  • Loading branch information
abueide committed Apr 6, 2022
1 parent fcf1741 commit 6e07fb4
Show file tree
Hide file tree
Showing 42 changed files with 20,629 additions and 126 deletions.
5 changes: 2 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@
.gradle
build/
*.log
.abysltcg/


.abysl/
data/
5 changes: 2 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ dependencies {
implementation("io.ktor:ktor-client-cio:1.6.8")
implementation("io.ktor:ktor-client-serialization:1.6.8")
implementation("io.ktor:ktor-client-logging:1.6.8")
implementation("ch.qos.logback:logback-classic:1.2.11")
// implementation("ch.qos.logback:logback-classic:1.2.11")
implementation("org.xerial:sqlite-jdbc:3.36.0.3")
implementation("io.insert-koin:koin-core:$koinVersion")
implementation("org.jetbrains.exposed:exposed-core:$exposedVersion")
Expand All @@ -57,5 +57,4 @@ compose.desktop {
packageVersion = "1.0.0"
}
}
}

}
Binary file removed ipfs/cat_test.zip
Binary file not shown.
Binary file removed ipfs/get_test.zip
Binary file not shown.
14 changes: 11 additions & 3 deletions src/main/kotlin/com/abysl/assetmanager/Main.kt
Original file line number Diff line number Diff line change
@@ -1,27 +1,34 @@
package com.abysl.assetmanager

import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import androidx.compose.ui.window.rememberWindowState
import com.abysl.assetmanager.components.main.MainComponent
import com.abysl.assetmanager.ui.components.main.MainComponent
import com.abysl.assetmanager.services.DBService
import com.abysl.assetmanager.services.NavigationService
import com.abysl.assetmanager.services.ImageService
import org.koin.core.context.startKoin
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module
import java.awt.Dimension


fun main() {
val db = DBService()
val mainModule = module {
singleOf(::DBService)
single { db }
single { ImageService(cacheLocation = Prefs.IMAGE_CACHE) }
singleOf(::NavigationService)

}
startKoin {
printLogger()
// printLogger()
modules(mainModule)
}

val mainComponent = MainComponent()
println(Prefs.itchApiKey)

application {
val state = rememberWindowState()
Expand All @@ -30,6 +37,7 @@ fun main() {
onCloseRequest = ::exitApplication,
state = state,
) {
this.window.size = Dimension(1440, 900)
mainComponent.view()
}
}
Expand Down
13 changes: 10 additions & 3 deletions src/main/kotlin/com/abysl/assetmanager/Prefs.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package com.abysl.assetmanager

import com.abysl.assetmanager.db.tables.PreferencesTable
import kotlinx.coroutines.selects.select
import okio.Path.Companion.toPath
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.transactions.transaction

object Prefs {

val HOME_FOLDER = ".abysltcg".toPath().toFile().also { it.mkdir() }
val IMAGE_FOLDER = (HOME_FOLDER.path + "/images").toPath().toFile().also { it.mkdir() }
val DB_FILE = (Prefs.HOME_FOLDER.path + "/db.sqlite").toPath().toFile().also { it.createNewFile() }
val HOME_FOLDER = ".abysl/assetmanager".toPath().toFile().also { it.mkdir() }
val DB_FILE = HOME_FOLDER.resolve("assetmanager.sqlite").also { it.createNewFile() }
val IMAGE_PATH = HOME_FOLDER.resolve("images").also { it.mkdirs() }
val IMAGE_CACHE = IMAGE_PATH.resolve("cache").also { it.mkdirs() }

val itchApiKey by lazy { PreferencesTable["itchApiKey"] }
}

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/kotlin/com/abysl/assetmanager/db/Migration.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.abysl.assetmanager.db

abstract class Migration(val version :Int) {
abstract class Migration() {

abstract fun up()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.abysl.assetmanager.services
package com.abysl.assetmanager.db

import com.abysl.assetmanager.db.Migration
import com.abysl.assetmanager.db.migrations.AssetCreator
import com.abysl.assetmanager.db.migrations.AssetStoreSchema
import com.abysl.assetmanager.db.migrations.InitialSchema
import com.abysl.assetmanager.db.migrations.PreferencesMigration
import com.abysl.assetmanager.db.tables.VersionTable
import org.jetbrains.exposed.sql.exists
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.transactions.transaction

Expand All @@ -18,27 +21,40 @@ class MigrationService {
fun runMigrations(desiredVersion: Int) {
val currentVersion =
if (transaction { !VersionTable.exists() }) -1
else VersionTable.fromRow(transaction { VersionTable.selectAll().first() })
else VersionTable.fromRow(transaction { VersionTable.selectAll().last() })

val versionDifference = desiredVersion - currentVersion

if (versionDifference == 0)
return

if (versionDifference > 0) {
migrations[currentVersion + 1]?.up()
val newVersion = currentVersion + 1
migrations[newVersion]?.up()
setVersion(newVersion)
} else {
val newVersion = currentVersion - 1;
migrations[currentVersion]?.down()
setVersion(newVersion)
}

runMigrations(desiredVersion)
}

private fun setVersion(version: Int){
transaction {
VersionTable.insert { it[current_version] = version }
}
}

fun migrateToLatest() {
runMigrations(migrations.keys.last())
}

private fun registerMigrations() {
migrations[0] = InitialSchema()
migrations[1] = AssetStoreSchema()
migrations[2] = AssetCreator()
migrations[3] = PreferencesMigration()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.abysl.assetmanager.db.migrations

import com.abysl.assetmanager.db.Migration
import com.abysl.assetmanager.db.tables.AssetTable
import com.abysl.assetmanager.model.Asset
import com.abysl.humble.Humble
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.update

class AssetCreator : Migration() {
override fun up() {
val assets = Humble().getProducts().map {
Asset(
name = it.name,
creator = it.creator,
iconUrl = it.iconUrl,
sourceUrl = it.url,
downloads = it.downloads
)
}
transaction {
SchemaUtils.createMissingTablesAndColumns(AssetTable)
assets.forEach {asset ->
AssetTable.update({AssetTable.name eq asset.name }) {
it[creator] = asset.creator
}
}
}
}


override fun down() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.abysl.assetmanager.db.migrations

import com.abysl.assetmanager.db.Migration
import com.abysl.assetmanager.db.tables.AssetTable
import com.abysl.assetmanager.db.tables.AssetTable.downloads
import com.abysl.assetmanager.db.tables.AssetTable.iconUrl
import com.abysl.assetmanager.db.tables.AssetTable.name
import com.abysl.assetmanager.db.tables.AssetTable.sourceUrl
import com.abysl.assetmanager.db.tables.ImageTable
import com.abysl.assetmanager.model.Asset
import com.abysl.humble.Humble
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.batchInsert
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.transactions.transaction

class AssetStoreSchema: Migration() {
override fun up() {
transaction {
SchemaUtils.create (AssetTable)
SchemaUtils.create (ImageTable)

transaction {
val assets = Humble().getProducts().map {
Asset(
name = it.name,
creator = it.creator,
iconUrl = it.iconUrl,
sourceUrl = it.url,
downloads = it.downloads
) }
AssetTable.batchInsert(assets) { asset ->
this[name] = asset.name
this[iconUrl] = asset.iconUrl
this[sourceUrl] = asset.sourceUrl
this[downloads] = Json.encodeToString(asset.downloads)
}
}
}
}

override fun down() {
transaction {
SchemaUtils.drop (AssetTable)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package com.abysl.assetmanager.db.migrations

import com.abysl.assetmanager.db.Migration
import com.abysl.assetmanager.db.tables.CardTable
import com.abysl.assetmanager.db.tables.VersionTable
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.insert
import org.jetbrains.exposed.sql.transactions.transaction

class InitialSchema() : Migration(version = 0) {
class InitialSchema() : Migration() {
override fun up() {
transaction {
SchemaUtils.create (CardTable)
SchemaUtils.create (VersionTable)

VersionTable.insert {
it[current_version] = version
it[current_version] = 0
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.abysl.assetmanager.db.migrations

import com.abysl.assetmanager.db.Migration
import com.abysl.assetmanager.db.tables.PreferencesTable
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction

class PreferencesMigration: Migration() {
override fun up() {
transaction {
SchemaUtils.create(PreferencesTable)
}
}

override fun down() {
transaction {
SchemaUtils.drop(PreferencesTable)
}
}
}
24 changes: 24 additions & 0 deletions src/main/kotlin/com/abysl/assetmanager/db/tables/AssetTable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.abysl.assetmanager.db.tables

import com.abysl.assetmanager.model.Asset
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.ResultRow

object AssetTable: IntIdTable() {
val name = varchar("name", 256);
val creator = varchar("creator", 256).default("Unknown")
val iconUrl = varchar("iconUrl", 256)
val sourceUrl = varchar("sourceUrl", 256);
val downloads = varchar("downloads", 4096)

fun fromRow(row: ResultRow): Asset =
Asset(
name = row[name],
creator = row[creator],
iconUrl = row[iconUrl],
sourceUrl = row[sourceUrl],
downloads = Json.decodeFromString(row[downloads])
)
}
18 changes: 0 additions & 18 deletions src/main/kotlin/com/abysl/assetmanager/db/tables/CardTable.kt

This file was deleted.

15 changes: 15 additions & 0 deletions src/main/kotlin/com/abysl/assetmanager/db/tables/ImageTable.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.abysl.assetmanager.db.tables

import com.abysl.assetmanager.model.CachedImage
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.ResultRow

object ImageTable: IntIdTable() {
val url = varchar("name", 256);

fun fromRow(row: ResultRow): CachedImage =
CachedImage(
url = row[url],
id = row[id].value,
)
}
Loading

0 comments on commit 6e07fb4

Please sign in to comment.