mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2024-11-24 19:04:38 -06:00
[APIv2] Add sparse array extensions - simplify getting data from database.
This commit is contained in:
parent
7a06593821
commit
f0bf6b8b81
@ -6,7 +6,10 @@ import android.content.Context
|
|||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.LongSparseArray
|
||||||
|
import android.util.SparseArray
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
|
import androidx.core.util.forEach
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
@ -136,3 +139,41 @@ const val DAY = 24L*HOUR
|
|||||||
const val WEEK = 7L*DAY
|
const val WEEK = 7L*DAY
|
||||||
const val MONTH = 30L*DAY
|
const val MONTH = 30L*DAY
|
||||||
const val YEAR = 365L*DAY
|
const val YEAR = 365L*DAY
|
||||||
|
|
||||||
|
fun <T> LongSparseArray<T>.values(): List<T> {
|
||||||
|
val result = mutableListOf<T>()
|
||||||
|
forEach { _, value ->
|
||||||
|
result += value
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> SparseArray<T>.values(): List<T> {
|
||||||
|
val result = mutableListOf<T>()
|
||||||
|
forEach { _, value ->
|
||||||
|
result += value
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> List<T>.toSparseArray(destination: SparseArray<T>, key: (T) -> Int) {
|
||||||
|
forEach {
|
||||||
|
destination.put(key(it), it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fun <T> List<T>.toSparseArray(destination: LongSparseArray<T>, key: (T) -> Long) {
|
||||||
|
forEach {
|
||||||
|
destination.put(key(it), it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> List<T>.toSparseArray(key: (T) -> Int): SparseArray<T> {
|
||||||
|
val result = SparseArray<T>()
|
||||||
|
toSparseArray(result, key)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
fun <T> List<T>.toSparseArray(key: (T) -> Long): LongSparseArray<T> {
|
||||||
|
val result = LongSparseArray<T>()
|
||||||
|
toSparseArray(result, key)
|
||||||
|
return result
|
||||||
|
}
|
@ -41,7 +41,8 @@ class LibrusApiSchools(override val data: DataLibrus,
|
|||||||
val range = rangeEl.asJsonObject
|
val range = rangeEl.asJsonObject
|
||||||
val from = range.getString("From") ?: return@forEachIndexed
|
val from = range.getString("From") ?: return@forEachIndexed
|
||||||
val to = range.getString("To") ?: return@forEachIndexed
|
val to = range.getString("To") ?: return@forEachIndexed
|
||||||
data.lessonRanges.add(
|
data.lessonRanges.put(
|
||||||
|
index,
|
||||||
LessonRange(
|
LessonRange(
|
||||||
profileId,
|
profileId,
|
||||||
index,
|
index,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package pl.szczodrzynski.edziennik.api.v2.models
|
package pl.szczodrzynski.edziennik.api.v2.models
|
||||||
|
|
||||||
import android.util.LongSparseArray
|
import android.util.LongSparseArray
|
||||||
|
import android.util.SparseArray
|
||||||
import androidx.core.util.forEach
|
import androidx.core.util.forEach
|
||||||
import androidx.core.util.isNotEmpty
|
import androidx.core.util.isNotEmpty
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
@ -27,7 +28,9 @@ import pl.szczodrzynski.edziennik.data.db.modules.profiles.Profile
|
|||||||
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
import pl.szczodrzynski.edziennik.data.db.modules.subjects.Subject
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
import pl.szczodrzynski.edziennik.data.db.modules.teachers.Teacher
|
||||||
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
import pl.szczodrzynski.edziennik.data.db.modules.teams.Team
|
||||||
|
import pl.szczodrzynski.edziennik.toSparseArray
|
||||||
import pl.szczodrzynski.edziennik.utils.models.Date
|
import pl.szczodrzynski.edziennik.utils.models.Date
|
||||||
|
import pl.szczodrzynski.edziennik.values
|
||||||
import java.io.InterruptedIOException
|
import java.io.InterruptedIOException
|
||||||
import java.net.SocketTimeoutException
|
import java.net.SocketTimeoutException
|
||||||
import java.net.UnknownHostException
|
import java.net.UnknownHostException
|
||||||
@ -37,6 +40,9 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
|
|||||||
|
|
||||||
var fakeLogin = false
|
var fakeLogin = false
|
||||||
|
|
||||||
|
val profileId
|
||||||
|
get() = profile?.id ?: -1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A callback passed to all [Feature]s and [LoginMethod]s
|
* A callback passed to all [Feature]s and [LoginMethod]s
|
||||||
*/
|
*/
|
||||||
@ -90,8 +96,8 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
|
|||||||
|
|
||||||
val teacherList = LongSparseArray<Teacher>()
|
val teacherList = LongSparseArray<Teacher>()
|
||||||
val subjectList = LongSparseArray<Subject>()
|
val subjectList = LongSparseArray<Subject>()
|
||||||
var teamList = mutableListOf<Team>()
|
var teamList = LongSparseArray<Team>()
|
||||||
var lessonRanges = mutableListOf<LessonRange>()
|
var lessonRanges = SparseArray<LessonRange>()
|
||||||
|
|
||||||
var lessonsToRemove: DataRemoveModel? = null
|
var lessonsToRemove: DataRemoveModel? = null
|
||||||
val lessonList = mutableListOf<Lesson>()
|
val lessonList = mutableListOf<Lesson>()
|
||||||
@ -128,18 +134,11 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
|
|||||||
clear()
|
clear()
|
||||||
|
|
||||||
if (profile != null) {
|
if (profile != null) {
|
||||||
db.endpointTimerDao().getAllNow(profile.id).forEach { endpointTimer ->
|
endpointTimers = db.endpointTimerDao().getAllNow(profile.id).toMutableList()
|
||||||
endpointTimers.add(endpointTimer)
|
db.teacherDao().getAllNow(profileId).toSparseArray(teacherList) { it.id }
|
||||||
}
|
db.subjectDao().getAllNow(profileId).toSparseArray(subjectList) { it.id }
|
||||||
|
db.teamDao().getAllNow(profileId).toSparseArray(teamList) { it.id }
|
||||||
lessonRanges = db.lessonRangeDao().getAllNow(profile.id).toMutableList()
|
db.lessonRangeDao().getAllNow(profileId).toSparseArray(lessonRanges) { it.lessonNumber }
|
||||||
db.teacherDao().getAllNow(profile.id).forEach { teacher ->
|
|
||||||
teacherList.put(teacher.id, teacher)
|
|
||||||
}
|
|
||||||
db.subjectDao().getAllNow(profile.id).forEach { subject ->
|
|
||||||
subjectList.put(subject.id, subject)
|
|
||||||
}
|
|
||||||
teamList = db.teamDao().getAllNow(profile.id).toMutableList()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*val teacher = teachers.byNameFirstLast("Jan Kowalski") ?: Teacher(1, 1, "", "").let {
|
/*val teacher = teachers.byNameFirstLast("Jan Kowalski") ?: Teacher(1, 1, "", "").let {
|
||||||
@ -152,11 +151,11 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
|
|||||||
loginMethods.clear()
|
loginMethods.clear()
|
||||||
|
|
||||||
endpointTimers.clear()
|
endpointTimers.clear()
|
||||||
|
|
||||||
teacherList.clear()
|
teacherList.clear()
|
||||||
subjectList.clear()
|
subjectList.clear()
|
||||||
teamList.clear()
|
teamList.clear()
|
||||||
lessonRanges.clear()
|
lessonRanges.clear()
|
||||||
|
|
||||||
lessonList.clear()
|
lessonList.clear()
|
||||||
lessonChangeList.clear()
|
lessonChangeList.clear()
|
||||||
gradeCategoryList.clear()
|
gradeCategoryList.clear()
|
||||||
@ -180,25 +179,15 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
|
|||||||
db.loginStoreDao().add(loginStore)
|
db.loginStoreDao().add(loginStore)
|
||||||
|
|
||||||
db.endpointTimerDao().addAll(endpointTimers)
|
db.endpointTimerDao().addAll(endpointTimers)
|
||||||
|
db.teacherDao().clear(profileId)
|
||||||
|
db.teacherDao().addAll(teacherList.values())
|
||||||
|
db.subjectDao().clear(profileId)
|
||||||
|
db.subjectDao().addAll(subjectList.values())
|
||||||
|
db.teamDao().clear(profileId)
|
||||||
|
db.teamDao().addAll(teamList.values())
|
||||||
|
db.lessonRangeDao().clear(profileId)
|
||||||
|
db.lessonRangeDao().addAll(lessonRanges.values())
|
||||||
|
|
||||||
db.lessonRangeDao().addAll(lessonRanges)
|
|
||||||
|
|
||||||
if (teacherList.isNotEmpty()) {
|
|
||||||
val tempList: ArrayList<Teacher> = ArrayList()
|
|
||||||
teacherList.forEach { _, teacher ->
|
|
||||||
tempList.add(teacher)
|
|
||||||
}
|
|
||||||
db.teacherDao().addAll(tempList)
|
|
||||||
}
|
|
||||||
if (subjectList.isNotEmpty()) {
|
|
||||||
val tempList: ArrayList<Subject> = ArrayList()
|
|
||||||
subjectList.forEach { _, subject ->
|
|
||||||
tempList.add(subject)
|
|
||||||
}
|
|
||||||
db.subjectDao().addAll(tempList)
|
|
||||||
}
|
|
||||||
if (teamList.isNotEmpty())
|
|
||||||
db.teamDao().addAll(teamList)
|
|
||||||
if (lessonList.isNotEmpty()) {
|
if (lessonList.isNotEmpty()) {
|
||||||
db.lessonDao().clear(profile.id)
|
db.lessonDao().clear(profile.id)
|
||||||
db.lessonDao().addAll(lessonList)
|
db.lessonDao().addAll(lessonList)
|
||||||
|
Loading…
Reference in New Issue
Block a user