Skip to content

Commit dc7288d

Browse files
committed
update
1 parent 2ee7bdd commit dc7288d

File tree

9 files changed

+69
-9
lines changed

9 files changed

+69
-9
lines changed

app/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ plugins {
77
alias(libs.plugins.kotlin.android)
88
alias(libs.plugins.kotlin.serialization)
99
alias(libs.plugins.kotlin.parcelize)
10+
11+
alias(libs.plugins.androidx.room)
12+
}
13+
14+
room {
15+
schemaDirectory("$projectDir/schemas")
1016
}
1117

1218
android {

app/src/main/java/com/wzq/jd/compose/app/App.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class App: Application() {
1919
val context: Context get() = _context!!
2020
val db by lazy {
2121
Room.databaseBuilder(context, AppDatabase::class.java, "database-j")
22+
.fallbackToDestructiveMigration()
2223
.build()
2324
}
2425
}

app/src/main/java/com/wzq/jd/compose/app/data/local/AppDatabase.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package com.wzq.jd.compose.app.data.local
33
import androidx.room.Database
44
import androidx.room.RoomDatabase
55
import com.wzq.jd.compose.app.data.model.ArticleItem
6+
import com.wzq.jd.compose.app.data.model.Categories
67

78
/**
89
* create by wzq on 2023/12/20
910
*
1011
*/
11-
@Database(entities = [ArticleItem::class], version = 1)
12+
@Database(entities = [ArticleItem::class, Categories::class], version = 2)
1213
abstract class AppDatabase : RoomDatabase() {
1314
abstract fun articleDao(): ArticleDao
15+
abstract fun categoriesDao(): CategoriesDao
1416
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.wzq.jd.compose.app.data.local
2+
3+
import androidx.room.Dao
4+
import androidx.room.Insert
5+
import androidx.room.OnConflictStrategy
6+
import androidx.room.Query
7+
import com.wzq.jd.compose.app.data.model.Categories
8+
9+
/**
10+
* create by wzq on 2023/12/21
11+
*
12+
*/
13+
@Dao
14+
interface CategoriesDao {
15+
16+
@Insert(onConflict = OnConflictStrategy.REPLACE)
17+
suspend fun insert(data: List<Categories>)
18+
19+
@Query("Select * from categories")
20+
suspend fun getCategoriesAll(): List<Categories>
21+
}
Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
package com.wzq.jd.compose.app.data.model
22

33
import android.os.Parcelable
4+
import androidx.room.Entity
5+
import androidx.room.Ignore
6+
import androidx.room.PrimaryKey
47
import kotlinx.parcelize.Parcelize
58
import kotlinx.serialization.Serializable
69

10+
@Entity(tableName = "categories")
711
@Parcelize
812
@Serializable
913
data class Categories(
10-
val articleList: List<ArticleItem>,
1114
val author: String,
12-
val children: List<Categories>,
1315
val courseId: Int,
1416
val cover: String,
1517
val desc: String,
16-
val id: Int,
18+
@PrimaryKey val id: Int,
1719
val lisense: String,
1820
val lisenseLink: String,
1921
val name: String,
@@ -22,4 +24,8 @@ data class Categories(
2224
val type: Int,
2325
val userControlSetTop: Boolean,
2426
val visible: Int
25-
) : Parcelable
27+
) : Parcelable {
28+
29+
@Ignore
30+
var children: List<Categories> = emptyList()
31+
}

app/src/main/java/com/wzq/jd/compose/app/data/remote/CustomHttpClient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class CustomHttpClient {
2727
followRedirects(true)
2828
}
2929
addInterceptor(HttpLoggingInterceptor().apply {
30-
level = HttpLoggingInterceptor.Level.HEADERS
30+
level = HttpLoggingInterceptor.Level.BODY
3131
})
3232

3333
}

app/src/main/java/com/wzq/jd/compose/app/page/home/HomeViewModel.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class HomeViewModel : ViewModel() {
2323

2424
val categories = mutableStateListOf<Categories>()
2525

26-
private val articleDao = App.db.articleDao()
26+
private val categoriesDao = App.db.categoriesDao()
2727

2828
init {
2929
getArticleList()
@@ -49,9 +49,29 @@ class HomeViewModel : ViewModel() {
4949

5050
private fun getCategories() {
5151
viewModelScope.launch {
52-
DataRepos.remoteRepo.getKnowledgeCategories().onSuccess {
52+
val local = categoriesDao.getCategoriesAll()
53+
if (local.isNotEmpty()) {
54+
val listData = mutableListOf<Categories>()
55+
val group = local.groupBy { it.parentChapterId }
56+
group[0]?.forEach { item ->
57+
item.children = group[item.id] ?: emptyList()
58+
listData.add(item)
59+
}
5360
categories.clear()
54-
categories.addAll(it.data)
61+
categories.addAll(listData)
62+
} else {
63+
DataRepos.remoteRepo.getKnowledgeCategories().onSuccess {
64+
categories.clear()
65+
categories.addAll(it.data)
66+
it.data.let { list ->
67+
val s = mutableListOf<Categories>()
68+
list.forEach {
69+
s.add(it)
70+
s.addAll(it.children)
71+
}
72+
categoriesDao.insert(s)
73+
}
74+
}
5575
}
5676
}
5777
}

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ plugins {
88
alias(libs.plugins.kotlin.android) apply false
99
alias(libs.plugins.kotlin.serialization) apply false
1010
alias(libs.plugins.kotlin.parcelize) apply false
11+
12+
alias(libs.plugins.androidx.room) apply false
1113
}
1214
true
1315

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,6 @@ kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref =
6060
google-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
6161
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
6262

63+
androidx-room = { id = "androidx.room", version.ref = "room" }
64+
6365
[bundles]

0 commit comments

Comments
 (0)