diff --git a/app/src/main/java/com/qhy040404/libraryonetap/constant/Constants.kt b/app/src/main/java/com/qhy040404/libraryonetap/constant/Constants.kt index 2c65d64e..c15cb86a 100644 --- a/app/src/main/java/com/qhy040404/libraryonetap/constant/Constants.kt +++ b/app/src/main/java/com/qhy040404/libraryonetap/constant/Constants.kt @@ -66,4 +66,6 @@ object Constants { const val CHANGELOG_INACTIVE = "changelog_html_inactive" const val CHANGELOG_ACTIVE = "changelog_html_active" + + const val LATEST_GRADE_ID = "latest_grade_id" } diff --git a/app/src/main/java/com/qhy040404/libraryonetap/data/tools/Grade.kt b/app/src/main/java/com/qhy040404/libraryonetap/data/tools/Grade.kt index 302811de..8b868afb 100644 --- a/app/src/main/java/com/qhy040404/libraryonetap/data/tools/Grade.kt +++ b/app/src/main/java/com/qhy040404/libraryonetap/data/tools/Grade.kt @@ -1,6 +1,7 @@ package com.qhy040404.libraryonetap.data.tools data class Grade( + val id: Int, val name: String, val code: String, val credit: Double, diff --git a/app/src/main/java/com/qhy040404/libraryonetap/ui/tools/GradesActivity.kt b/app/src/main/java/com/qhy040404/libraryonetap/ui/tools/GradesActivity.kt index 82fbd36d..eca237c8 100644 --- a/app/src/main/java/com/qhy040404/libraryonetap/ui/tools/GradesActivity.kt +++ b/app/src/main/java/com/qhy040404/libraryonetap/ui/tools/GradesActivity.kt @@ -15,6 +15,7 @@ import com.absinthe.libraries.utils.extensions.getColorByAttr import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.qhy040404.libraryonetap.LibraryOneTapApp import com.qhy040404.libraryonetap.R +import com.qhy040404.libraryonetap.constant.Constants import com.qhy040404.libraryonetap.constant.GlobalValues import com.qhy040404.libraryonetap.constant.URLManager import com.qhy040404.libraryonetap.data.tools.Grade @@ -30,6 +31,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import me.saket.cascade.CascadePopupMenu import org.json.JSONObject +import java.io.File class GradesActivity : BaseEduActivity(), MenuProvider { private val semesters = mutableListOf() @@ -97,6 +99,7 @@ class GradesActivity : BaseEduActivity(), MenuProvider { val gradesJsonObject = JSONObject(gradesData) val semesterArray = gradesJsonObject.optJSONArray("semesters")!! val grades = gradesJsonObject.optJSONObject("semesterId2studentGrades")!! + val gradesIds = mutableListOf() for (i in 0 until semesterArray.length()) { val semesterId = semesterArray.optJSONObject(i).optInt("id") semesters.add( @@ -108,8 +111,10 @@ class GradesActivity : BaseEduActivity(), MenuProvider { buildList { for (j in 0 until count) { val currentCourse = currentSemester.optJSONObject(j)!! + gradesIds.add(currentCourse.optInt("id")) add( Grade( + currentCourse.optInt("id"), currentCourse.optJSONObject("course")!! .optString("nameZh"), currentCourse.optJSONObject("course")!! @@ -128,6 +133,31 @@ class GradesActivity : BaseEduActivity(), MenuProvider { ) ) } + File(dataDir, Constants.LATEST_GRADE_ID).apply { + if (exists().not()) { + createNewFile() + writeText(gradesIds.max().toString()) + } else { + val latestId = readText().toInt() + val newGrades = buildList { + semesters.forEach { semester -> + addAll(semester.courses.filter { it.id > latestId }) + } + } + if (newGrades.isNotEmpty()) { + semesters.add( + Semester( + Int.MAX_VALUE, + "新成绩", + newGrades + ) + ) + delete() + createNewFile() + writeText(newGrades.maxOf { it.id }.toString()) + } + } + } semesters.sortByDescending { it.id } syncRecycleView() } @@ -147,11 +177,13 @@ class GradesActivity : BaseEduActivity(), MenuProvider { Card( String.format( R.string.gr_stat.getString(), - semesters.first().courses.sumOf { it.credit }, + semesters.first { it.id != Int.MAX_VALUE }.courses.sumOf { it.credit }, GradesUtils.calculateWeightedAverage( buildList { semesters.forEach { - addAll(it.courses) + if (it.id != Int.MAX_VALUE) { + addAll(it.courses) + } } } ), @@ -159,7 +191,9 @@ class GradesActivity : BaseEduActivity(), MenuProvider { this@GradesActivity, buildList { semesters.forEach { - addAll(it.courses) + if (it.id != Int.MAX_VALUE) { + addAll(it.courses) + } } } )