fixed network timeout and started working on final marks

This commit is contained in:
odweta
2025-01-15 11:32:16 +01:00
parent 1d885ade70
commit 4cb07126e2
6 changed files with 54 additions and 30 deletions
+2 -1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">
@@ -199,8 +199,10 @@ enum class ScreenElement {
class Global { class Global {
lateinit var timetableJSON: JSONObject lateinit var timetableJSON: JSONObject
lateinit var marksJSON: JSONObject lateinit var marksJSON: JSONObject
lateinit var finalMarksJSON: JSONObject
lateinit var marks: MutableMap<String, MutableList<Mark>> lateinit var marks: MutableMap<String, MutableList<Mark>>
lateinit var newMarks: MutableMap<String, MutableList<Mark>> lateinit var newMarks: MutableMap<String, MutableList<Mark>>
lateinit var finalMarks: Map<String, Int>
lateinit var settings: SettingsData lateinit var settings: SettingsData
lateinit var fileDir: File lateinit var fileDir: File
@@ -244,6 +246,7 @@ class Global {
val marks: String = "marks.json" val marks: String = "marks.json"
val settings: String = "settings.txt" val settings: String = "settings.txt"
val lectureNotes: String = "lecture_notes.csv" val lectureNotes: String = "lecture_notes.csv"
val finalMarks: String = "final_marks.txt"
} }
val filePaths = FilePaths() val filePaths = FilePaths()
@@ -253,6 +256,7 @@ class Global {
val userData = "$apiBase/v1/user" val userData = "$apiBase/v1/user"
val timetable = "$apiBase/v1/timeTable" val timetable = "$apiBase/v1/timeTable"
var marks: String = "$apiBase/v1/students/<student id>/marks/list" var marks: String = "$apiBase/v1/students/<student id>/marks/list"
var finalMarks: String ="$apiBase/v1/students/<student id>/marks/final"
} }
val apiEndPoints = APIEndPoints() val apiEndPoints = APIEndPoints()
@@ -34,15 +34,18 @@ fun remoteLoad(ctx: Context) {
// fetch remote data // fetch remote data
global.timetableJSON = networkRequestFactory.perform(NetworkRequestType.Timetable) global.timetableJSON = networkRequestFactory.perform(NetworkRequestType.Timetable)
global.marksJSON = networkRequestFactory.perform(NetworkRequestType.Marks) global.marksJSON = networkRequestFactory.perform(NetworkRequestType.Marks)
global.finalMarksJSON = networkRequestFactory.perform(NetworkRequestType.FinalMarks)
// save to local for later local load // save to local for later local load
Util.saveStringToFile(global.filePaths.timetable, global.timetableJSON.toString()) Util.saveStringToFile(global.filePaths.timetable, global.timetableJSON.toString())
Util.saveStringToFile(global.filePaths.marks, global.marksJSON.toString()) Util.saveStringToFile(global.filePaths.marks, global.marksJSON.toString())
Util.saveStringToFile(global.filePaths.finalMarks, global.finalMarksJSON.toString())
launchContinue( launchContinue(
ctx, ctx,
global.timetableJSON, global.timetableJSON,
global.marksJSON global.marksJSON,
global.finalMarksJSON
) )
} }
} else { } else {
@@ -50,7 +53,8 @@ fun remoteLoad(ctx: Context) {
launchContinue( launchContinue(
ctx, ctx,
networkRequestFactory.perform(NetworkRequestType.Timetable), networkRequestFactory.perform(NetworkRequestType.Timetable),
networkRequestFactory.perform(NetworkRequestType.Marks) networkRequestFactory.perform(NetworkRequestType.Marks),
networkRequestFactory.perform(NetworkRequestType.FinalMarks)
) )
} }
} }
@@ -61,27 +65,30 @@ fun localLoad(ctx: Context) {
global.studentId = Parsing.getStudentId() global.studentId = Parsing.getStudentId()
global.studentClass = Parsing.getStudentClass() global.studentClass = Parsing.getStudentClass()
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list" global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
global.apiEndPoints.finalMarks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/final"
val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable)) val localTimetable = JSONObject(Util.fileToString(global.filePaths.timetable))
val localMarks = JSONObject(Util.fileToString(global.filePaths.marks)) val localMarks = JSONObject(Util.fileToString(global.filePaths.marks))
val localFinalMarks = JSONObject(Util.fileToString(global.filePaths.finalMarks))
launchContinue( launchContinue(
ctx, ctx,
localTimetable, localTimetable,
localMarks localMarks,
localFinalMarks
) )
} }
fun launchContinue( fun launchContinue(
ctx: Context, ctx: Context,
timetable: JSONObject, timetable: JSONObject,
marks: JSONObject marks: JSONObject,
finalMarks: JSONObject
) { ) {
// parse timetable and marks // parse timetable and marks
val parsedTimetable = Parsing.parseTimetable(timetable) global.timetable = Parsing.parseTimetable(timetable)
global.timetable = parsedTimetable global.marks = Parsing.parseMarks(marks)
val parsedMarks = Parsing.parseMarks(marks)
global.marks = parsedMarks
global.newMarks = Parsing.parseNewMarks(marks) global.newMarks = Parsing.parseNewMarks(marks)
global.finalMarks = Parsing.parseFinalMarks(finalMarks)
// // load the settings // // load the settings
// global.settings = Util.fileToString(global.filePaths.settings).toSettingsData() // global.settings = Util.fileToString(global.filePaths.settings).toSettingsData()
@@ -121,7 +121,7 @@ fun NewMarksScreen() {
modifier = Modifier.verticalScroll(ss) modifier = Modifier.verticalScroll(ss)
) { ) {
for ((k, v) in global.newMarks) { for ((k, v) in global.newMarks) {
if (v.size > 0) { if (v.isNotEmpty()) {
Column( Column(
modifier = Modifier modifier = Modifier
.padding(horizontal = 10.dp) .padding(horizontal = 10.dp)
@@ -242,14 +242,13 @@ fun FinalMarksScreen() {
Column( Column(
modifier = Modifier.verticalScroll(ss) modifier = Modifier.verticalScroll(ss)
) { ) {
Text("test", color = Color.White) Text(Util.fileToString(global.filePaths.finalMarks), color = Color.White)
Text("test", color = Color.White) for ((subject, mark) in global.finalMarks) {
Text("test", color = Color.White) Row {
Text("test", color = Color.White) Text(subject, color = Color.White)
Text("test", color = Color.White) Text(mark.toString(), color = Color.White, modifier = Modifier.padding(10.dp))
Text("test", color = Color.White) }
Text("test", color = Color.White) }
Text("test", color = Color.White)
} }
} }
} }
@@ -32,6 +32,7 @@ fun setupAPI() {
global.studentId = Parsing.getStudentId() global.studentId = Parsing.getStudentId()
global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list" global.apiEndPoints.marks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/list"
global.apiEndPoints.finalMarks = "${global.apiEndPoints.apiBase}/v1/students/${global.studentId}/marks/final"
global.isAPISetUp = true global.isAPISetUp = true
} }
@@ -40,6 +41,7 @@ enum class NetworkRequestType {
Token, Token,
Timetable, Timetable,
Marks, Marks,
FinalMarks,
UserData UserData
} }
@@ -71,6 +73,7 @@ object NetworkRequestFactory: NetworkRequestInterface {
} }
NetworkRequestType.Timetable -> return getAPI(global.apiEndPoints.timetable) NetworkRequestType.Timetable -> return getAPI(global.apiEndPoints.timetable)
NetworkRequestType.Marks -> return getAPI(global.apiEndPoints.marks) NetworkRequestType.Marks -> return getAPI(global.apiEndPoints.marks)
NetworkRequestType.FinalMarks -> return getAPI(global.apiEndPoints.finalMarks)
NetworkRequestType.UserData -> return getAPI(global.apiEndPoints.userData) NetworkRequestType.UserData -> return getAPI(global.apiEndPoints.userData)
} }
} }
@@ -82,7 +85,13 @@ object NetworkRequestFactory: NetworkRequestInterface {
.get() .get()
.build() .build()
return client.newCall(request).execute() return try {
client.newCall(request).execute()
} catch (e: Exception) {
Response.Builder()
.code(500)
.build()
}
} }
private fun post(url: String, headers: Headers, body: FormBody): Response { private fun post(url: String, headers: Headers, body: FormBody): Response {
@@ -92,7 +101,13 @@ object NetworkRequestFactory: NetworkRequestInterface {
.post(body) .post(body)
.build() .build()
return client.newCall(request).execute() return try {
client.newCall(request).execute()
} catch (e: Exception) {
Response.Builder()
.code(500)
.build()
}
} }
private fun getAPI(url: String): JSONObject { private fun getAPI(url: String): JSONObject {
@@ -386,16 +386,6 @@ class Parsing {
for (i in 0..<marksJSONArray.length()) { for (i in 0..<marksJSONArray.length()) {
marksList.add(marksJSONArray.getJSONObject(i)) marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
marksList.add(marksJSONArray.getJSONObject(i))
} }
for (subj in subjectMap.values) { for (subj in subjectMap.values) {
@@ -416,6 +406,14 @@ class Parsing {
return marks return marks
} }
fun parseFinalMarks(json: JSONObject): Map<String, Int> {
return mapOf(
"AJ" to 1,
"B" to 5,
"Pr" to 1
)
}
fun getStudentClass(): String { fun getStudentClass(): String {
return if (!userIsParent()) { return if (!userIsParent()) {
global.userData global.userData