Skip to content

Commit e4c33a8

Browse files
committed
fix db file path on desktop
1 parent a4f7190 commit e4c33a8

File tree

6 files changed

+69
-4
lines changed

6 files changed

+69
-4
lines changed

desktop-compose-app/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ plugins {
55
alias(libs.plugins.compose)
66
}
77
group = "com.softartdev"
8-
version = "1.0"
98

109
kotlin {
1110
jvm {
@@ -45,7 +44,7 @@ compose {
4544
nativeDistributions {
4645
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
4746
packageName = "Note Delight"
48-
packageVersion = "1.1.3"
47+
packageVersion = "1.1.4"
4948
description = "Note app with encryption"
5049
copyright = "© 2023 SoftArtDev"
5150
macOS.iconFile.set(project.file("src/jvmMain/resources/app_icon.icns"))

gradle/libs.versions.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ targetSdk = "34"
44
minSdk = "21"
55

66
kotlin = "1.9.21"
7-
agp = "8.1.4"
7+
agp = "8.2.0"
88
gms = "4.3.15"
99
crashlytics = "2.9.8"
1010
compose = "1.5.11"
@@ -41,6 +41,7 @@ mockito = "5.2.0"
4141
turbine = "1.0.0"
4242
espresso = "3.5.1"
4343
desugar = "2.0.4"
44+
appdirs = "1.2.2"
4445

4546
[libraries]
4647
coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
@@ -124,6 +125,8 @@ mockito-inline = { module = "org.mockito:mockito-inline", version.ref = "mockito
124125

125126
turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" }
126127

128+
appdirs = { module = "net.harawata:appdirs", version.ref = "appdirs" }
129+
127130
espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
128131
espresso-contrib = { module = "androidx.test.espresso:espresso-contrib", version.ref = "espresso" }
129132
espresso-idling-resource = { module = "androidx.test.espresso:espresso-idling-resource", version.ref = "espresso" }

shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ kotlin {
113113
}
114114
jvmMain.dependencies {
115115
implementation(libs.sqlDelight.jvm)
116+
implementation(libs.appdirs)
116117
}
117118
jvmTest.dependencies {
118119
implementation(kotlin("test"))
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.softartdev.notedelight.shared.db
2+
3+
import com.softartdev.notedelight.MR
4+
import dev.icerock.moko.resources.desc.desc
5+
import net.harawata.appdirs.AppDirs
6+
import net.harawata.appdirs.AppDirsFactory
7+
import java.io.File
8+
9+
class FilePathResolver(
10+
private val appDirs: AppDirs = AppDirsFactory.getInstance(),
11+
private val appName: String = MR.strings.app_name.desc().localized(),
12+
private val testMode: Boolean = false
13+
) : () -> String {
14+
15+
override fun invoke(): String {
16+
val dirPath: String = appDirs.getUserDataDir(appName, null, null)
17+
val dir = File(dirPath)
18+
if (!dir.exists() && !testMode) {
19+
dir.mkdirs()
20+
}
21+
val file = File(dir, SafeRepo.DB_NAME)
22+
return file.absolutePath
23+
}
24+
}

shared/src/jvmMain/kotlin/com/softartdev/notedelight/shared/db/JdbcDatabaseHolder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import java.util.Properties
77

88
class JdbcDatabaseHolder(props: Properties = Properties()) : DatabaseHolder() {
99
override val driver = JdbcSqliteDriver(
10-
url = JdbcSqliteDriver.IN_MEMORY + SafeRepo.DB_NAME, // jdbc:sqlite:notes.db
10+
url = JdbcSqliteDriver.IN_MEMORY + FilePathResolver().invoke(),// jdbc:sqlite:/.../notes.db
1111
properties = props
1212
)
1313
override val noteDb: NoteDb = createQueryWrapper(driver)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.softartdev.notedelight.shared.db
2+
3+
import com.softartdev.notedelight.MR
4+
import dev.icerock.moko.resources.desc.desc
5+
import net.harawata.appdirs.impl.MacOSXAppDirs
6+
import net.harawata.appdirs.impl.UnixAppDirs
7+
import net.harawata.appdirs.impl.WindowsAppDirs
8+
import net.harawata.appdirs.impl.WindowsFolderResolver
9+
import kotlin.test.Test
10+
import kotlin.test.assertEquals
11+
12+
class FilePathResolverTest : WindowsFolderResolver {
13+
private val home = System.getProperty("user.home")
14+
private val appName = MR.strings.app_name.desc().localized()
15+
16+
@Test
17+
fun macOSXAppDirs() = assertEquals(
18+
expected = "$home/Library/Application Support/$appName/${SafeRepo.DB_NAME}",
19+
actual = FilePathResolver(MacOSXAppDirs(), testMode = true).invoke()
20+
)
21+
22+
@Test
23+
fun windowsAppDirs() = assertEquals(
24+
expected = "$home/AppData/Local/$appName/${SafeRepo.DB_NAME}",
25+
actual = FilePathResolver(WindowsAppDirs(this), testMode = true).invoke()
26+
)
27+
28+
@Test
29+
fun unixAppDirs() = assertEquals(
30+
expected = "$home/.local/share/$appName/${SafeRepo.DB_NAME}",
31+
actual = FilePathResolver(UnixAppDirs(), testMode = true).invoke()
32+
)
33+
34+
override fun resolveFolder(folderId: WindowsAppDirs.FolderId?): String = when (folderId) {
35+
WindowsAppDirs.FolderId.LOCAL_APPDATA -> "$home/AppData/Local"
36+
else -> error("Unsupported folder ID: $folderId")
37+
}
38+
}

0 commit comments

Comments
 (0)