feat: ios support

This commit is contained in:
Cilly Leang 2026-03-05 00:00:18 +11:00
parent d3edabce36
commit b187b63195
Signed by: cilly
GPG key ID: 6500251E087653C9
8 changed files with 73 additions and 4 deletions

View file

@ -1,7 +1,9 @@
package moe.lava.banksia.room
import androidx.room.AutoMigration
import androidx.room.ConstructedBy
import androidx.room.RoomDatabase
import androidx.room.RoomDatabaseConstructor
import androidx.room.TypeConverters
import androidx.sqlite.driver.bundled.BundledSQLiteDriver
import kotlinx.coroutines.Dispatchers
@ -37,6 +39,7 @@ import androidx.room.Database as DatabaseAnnotation
]
)
@TypeConverters(RouteTypeConverter::class)
@ConstructedBy(DatabaseConstructor::class)
abstract class Database : RoomDatabase() {
abstract val versionMetadataDao: VersionMetadataDao
abstract val routeDao: RouteDao
@ -54,3 +57,8 @@ abstract class Database : RoomDatabase() {
.build()
}
}
@Suppress("KotlinNoActualForExpect")
expect object DatabaseConstructor : RoomDatabaseConstructor<Database> {
override fun initialize(): Database
}

View file

@ -1,14 +1,30 @@
package moe.lava.banksia.di
import androidx.room.Room
import androidx.room.RoomDatabase
import kotlinx.cinterop.ExperimentalForeignApi
import moe.lava.banksia.room.Database
import org.koin.core.parameter.ParametersHolder
import org.koin.core.scope.Scope
import org.koin.dsl.module
import platform.Foundation.NSDocumentDirectory
import platform.Foundation.NSFileManager
import platform.Foundation.NSUserDomainMask
class IosDatabaseBuilder() : PlatformDatabaseBuilder {
@OptIn(ExperimentalForeignApi::class)
override fun getBuilder(): RoomDatabase.Builder<Database> {
TODO("Not yet implemented")
val path = NSFileManager.defaultManager.URLForDirectory(
directory = NSDocumentDirectory,
inDomain = NSUserDomainMask,
appropriateForURL = null,
create = false,
error = null,
)
val dbPath = path!!.path + "/room.db"
return Room.databaseBuilder<Database>(
name = dbPath
)
}
}

View file

@ -1,9 +1,12 @@
package moe.lava.banksia.util
import platform.Foundation.NSLog
// TODO: use better logging functions maybe(?)
actual fun log(tag: String, msg: String) {
TODO("Not yet implemented")
NSLog("$tag: $msg")
}
actual fun error(tag: String, msg: String, throwable: Throwable?) {
TODO("Not yet implemented")
NSLog("$tag: $msg: ${throwable?.stackTraceToString()}")
}