forked from github/szkolny
[APIv2] Fix receivers and other weird things
This commit is contained in:
parent
c8c933fb20
commit
648699547e
@ -36,6 +36,7 @@ class ApiService : Service() {
|
|||||||
private val errorList = mutableListOf<ApiError>()
|
private val errorList = mutableListOf<ApiError>()
|
||||||
private var queueHasErrorReportTask = false
|
private var queueHasErrorReportTask = false
|
||||||
|
|
||||||
|
private var serviceClosed = false
|
||||||
private var taskCancelled = false
|
private var taskCancelled = false
|
||||||
private var taskRunning = false
|
private var taskRunning = false
|
||||||
private var taskRunningId = -1
|
private var taskRunningId = -1
|
||||||
@ -110,7 +111,8 @@ class ApiService : Service() {
|
|||||||
private fun sync() {
|
private fun sync() {
|
||||||
if (taskRunning)
|
if (taskRunning)
|
||||||
return
|
return
|
||||||
if (taskQueue.size <= 0) {
|
if (taskQueue.size <= 0 || serviceClosed) {
|
||||||
|
serviceClosed = false
|
||||||
allCompleted()
|
allCompleted()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -124,6 +126,7 @@ class ApiService : Service() {
|
|||||||
notification
|
notification
|
||||||
.setCurrentTask(taskRunningId, null)
|
.setCurrentTask(taskRunningId, null)
|
||||||
.setProgressRes(R.string.edziennik_notification_api_error_report_title)
|
.setProgressRes(R.string.edziennik_notification_api_error_report_title)
|
||||||
|
.post()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +158,7 @@ class ApiService : Service() {
|
|||||||
|
|
||||||
when (task) {
|
when (task) {
|
||||||
is SyncProfileRequest -> edziennikInterface?.sync(task.featureIds ?: Features.getAllIds())
|
is SyncProfileRequest -> edziennikInterface?.sync(task.featureIds ?: Features.getAllIds())
|
||||||
is SyncViewRequest -> edziennikInterface?.sync(Features.getIdsByView(task.targetId))
|
is SyncViewRequest -> edziennikInterface?.sync(Features.getIdsByView(task.targetId), task.targetId)
|
||||||
is MessageGetRequest -> edziennikInterface?.getMessage(task.messageId)
|
is MessageGetRequest -> edziennikInterface?.getMessage(task.messageId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -213,6 +216,13 @@ class ApiService : Service() {
|
|||||||
taskCancelled = true
|
taskCancelled = true
|
||||||
edziennikInterface?.cancel()
|
edziennikInterface?.cancel()
|
||||||
}
|
}
|
||||||
|
@Subscribe(threadMode = ThreadMode.ASYNC)
|
||||||
|
fun onServiceCloseRequest(serviceCloseRequest: ServiceCloseRequest) {
|
||||||
|
serviceClosed = true
|
||||||
|
taskCancelled = true
|
||||||
|
edziennikInterface?.cancel()
|
||||||
|
stopSelf()
|
||||||
|
}
|
||||||
|
|
||||||
/* _____ _ _ _
|
/* _____ _ _ _
|
||||||
/ ____| (_) (_) | |
|
/ ____| (_) (_) | |
|
||||||
|
@ -6,7 +6,7 @@ package pl.szczodrzynski.edziennik.api.v2.events.requests
|
|||||||
|
|
||||||
import pl.szczodrzynski.edziennik.api.v2.models.ApiTask
|
import pl.szczodrzynski.edziennik.api.v2.models.ApiTask
|
||||||
|
|
||||||
data class SyncProfileRequest(override val profileId: Int, val featureIds: List<Int>?) : ApiTask(profileId) {
|
data class SyncProfileRequest(override val profileId: Int, val featureIds: List<Int>? = null) : ApiTask(profileId) {
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
return "SyncProfileRequest(profileId=$profileId, featureIds=$featureIds)"
|
return "SyncProfileRequest(profileId=$profileId, featureIds=$featureIds)"
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
package pl.szczodrzynski.edziennik.api.v2.interfaces
|
package pl.szczodrzynski.edziennik.api.v2.interfaces
|
||||||
|
|
||||||
interface EdziennikInterface {
|
interface EdziennikInterface {
|
||||||
fun sync(featureIds: List<Int>)
|
fun sync(featureIds: List<Int>, viewId: Int? = null)
|
||||||
fun getMessage(messageId: Int)
|
fun getMessage(messageId: Int)
|
||||||
fun cancel()
|
fun cancel()
|
||||||
}
|
}
|
@ -49,7 +49,7 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
|||||||
|_| |_| |_|\___| /_/ \_\_|\__, |\___/|_| |_|\__|_| |_|_| |_| |_|
|
|_| |_| |_|\___| /_/ \_\_|\__, |\___/|_| |_|\__|_| |_|_| |_| |_|
|
||||||
__/ |
|
__/ |
|
||||||
|__*/
|
|__*/
|
||||||
override fun sync(featureIds: List<Int>) {
|
override fun sync(featureIds: List<Int>, viewId: Int?) {
|
||||||
val possibleLoginMethods = data.loginMethods.toMutableList()
|
val possibleLoginMethods = data.loginMethods.toMutableList()
|
||||||
|
|
||||||
for (loginMethod in librusLoginMethods) {
|
for (loginMethod in librusLoginMethods) {
|
||||||
@ -75,7 +75,6 @@ class Librus(val app: App, val profile: Profile?, val loginStore: LoginStore, va
|
|||||||
}
|
}
|
||||||
|
|
||||||
val timestamp = System.currentTimeMillis()
|
val timestamp = System.currentTimeMillis()
|
||||||
val viewId = 0
|
|
||||||
|
|
||||||
endpointList = endpointList
|
endpointList = endpointList
|
||||||
// sort the endpoint list by feature ID and priority
|
// sort the endpoint list by feature ID and priority
|
||||||
|
@ -206,4 +206,9 @@ class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app
|
|||||||
get() = profile?.getStudentData("isPremium", false) ?: false
|
get() = profile?.getStudentData("isPremium", false) ?: false
|
||||||
set(value) { profile?.putStudentData("isPremium", value) }
|
set(value) { profile?.putStudentData("isPremium", value) }
|
||||||
|
|
||||||
|
private var mSchoolName: String? = null
|
||||||
|
var schoolName: String?
|
||||||
|
get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName }
|
||||||
|
set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
|
||||||
|
class LibrusApiEvents(override val data: DataLibrus,
|
||||||
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusApiEvents"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
apiGet(LibrusApiMe.TAG, "") { json ->
|
||||||
|
|
||||||
|
// on error
|
||||||
|
data.error(TAG, ERROR_LIBRUS_API_, response, json)
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_LIBRUS_API_, 2 * DAY)
|
||||||
|
onSuccess()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
|
import android.util.Pair
|
||||||
|
import com.google.gson.JsonNull
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
import pl.szczodrzynski.edziennik.getInt
|
||||||
|
import pl.szczodrzynski.edziennik.getJsonObject
|
||||||
|
import pl.szczodrzynski.edziennik.getString
|
||||||
|
import pl.szczodrzynski.edziennik.utils.models.Time
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class LibrusApiSchools(override val data: DataLibrus,
|
||||||
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusApiSchools"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
apiGet(LibrusApiMe.TAG, "") { json ->
|
||||||
|
val school = json?.getJsonObject("School")
|
||||||
|
val schoolId = school?.getInt("Id")
|
||||||
|
val schoolNameLong = school?.getString("Name")
|
||||||
|
|
||||||
|
var schoolNameShort = ""
|
||||||
|
schoolNameLong?.split(" ")?.forEach {
|
||||||
|
if (it.isBlank())
|
||||||
|
return@forEach
|
||||||
|
schoolNameShort += it[0].toLowerCase()
|
||||||
|
}
|
||||||
|
val schoolTown = school?.getString("Town")?.toLowerCase(Locale.getDefault())
|
||||||
|
data.schoolName = schoolId.toString() + schoolNameShort + "_" + schoolTown
|
||||||
|
|
||||||
|
/*lessonRanges.clear()
|
||||||
|
for ((index, lessonRangeEl) in school.get("LessonsRange").getAsJsonArray().withIndex()) {
|
||||||
|
val lr = lessonRangeEl.getAsJsonObject()
|
||||||
|
val from = lr.get("From")
|
||||||
|
val to = lr.get("To")
|
||||||
|
if (from != null && to != null && from !is JsonNull && to !is JsonNull) {
|
||||||
|
lessonRanges.put(index, Pair<Time, Time>(Time.fromH_m(from!!.getAsString()), Time.fromH_m(to!!.getAsString())))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
profile.putStudentData("lessonRanges", app.gson.toJson(lessonRanges))
|
||||||
|
// on error
|
||||||
|
data.error(TAG, ERROR_LIBRUS_API_, response, json)
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_LIBRUS_API_, 2 * DAY)
|
||||||
|
onSuccess()*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.api.v2.librus.data.api
|
||||||
|
|
||||||
|
import pl.szczodrzynski.edziennik.DAY
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.librus.data.LibrusApi
|
||||||
|
|
||||||
|
class LibrusApiTemplate(override val data: DataLibrus,
|
||||||
|
val onSuccess: () -> Unit) : LibrusApi(data) {
|
||||||
|
companion object {
|
||||||
|
const val TAG = "LibrusApi"
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
/*apiGet(LibrusApiMe.TAG, "") { json ->
|
||||||
|
|
||||||
|
// on error
|
||||||
|
data.error(TAG, ERROR_LIBRUS_API_, response, json)
|
||||||
|
|
||||||
|
data.setSyncNext(ENDPOINT_LIBRUS_API_, 2 * DAY)
|
||||||
|
onSuccess()
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2019-10-4.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.db.modules.lessons
|
||||||
|
|
||||||
|
import androidx.room.ColumnInfo
|
||||||
|
import androidx.room.Entity
|
||||||
|
import pl.szczodrzynski.edziennik.utils.models.Time
|
||||||
|
|
||||||
|
@Entity(tableName = "lessonRanges",
|
||||||
|
primaryKeys = ["profileId", "lessonRangeNumber"])
|
||||||
|
class LessonRange (
|
||||||
|
|
||||||
|
val profileId: Int,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "lessonRangeNumber")
|
||||||
|
val lessonNumber: Int,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "lessonRangeStart")
|
||||||
|
val startTime: Time,
|
||||||
|
|
||||||
|
@ColumnInfo(name = "lessonRangeEnd")
|
||||||
|
val endTime: Time
|
||||||
|
)
|
@ -9,6 +9,7 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import pl.szczodrzynski.edziennik.api.v2.events.requests.ServiceCloseRequest
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.ServiceCloseRequest
|
||||||
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.SyncProfileRequest
|
||||||
import pl.szczodrzynski.edziennik.api.v2.events.requests.SyncRequest
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.SyncRequest
|
||||||
import pl.szczodrzynski.edziennik.api.v2.events.requests.TaskCancelRequest
|
import pl.szczodrzynski.edziennik.api.v2.events.requests.TaskCancelRequest
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ class SzkolnyReceiver : BroadcastReceiver() {
|
|||||||
"ServiceCloseRequest" -> EventBus.getDefault().post(ServiceCloseRequest())
|
"ServiceCloseRequest" -> EventBus.getDefault().post(ServiceCloseRequest())
|
||||||
"TaskCancelRequest" -> EventBus.getDefault().post(TaskCancelRequest(intent.extras?.getInt("taskId", -1) ?: return))
|
"TaskCancelRequest" -> EventBus.getDefault().post(TaskCancelRequest(intent.extras?.getInt("taskId", -1) ?: return))
|
||||||
"SyncRequest" -> EventBus.getDefault().post(SyncRequest())
|
"SyncRequest" -> EventBus.getDefault().post(SyncRequest())
|
||||||
|
"SyncProfileRequest" -> EventBus.getDefault().post(SyncProfileRequest(intent.extras?.getInt("profileId", -1) ?: return))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user