@@ -165,6 +165,9 @@ class RoboScoutAPI {
165
165
var regionsMap: MutableMap <String , Int > = mutableMapOf<String , Int >()
166
166
var importedWS: Boolean = false
167
167
var importedVDA: Boolean = false
168
+ var seasonIdMap: List <MutableList <Season >> = listOf ()
169
+ var selectedSeasonId: Int = BuildConfig .DEFAULT_V5_SEASON_ID
170
+ var gradeLevel: String = " High School"
168
171
169
172
companion object {
170
173
@@ -337,13 +340,70 @@ class RoboScoutAPI {
337
340
}
338
341
}
339
342
340
- suspend fun updateWorldSkillsCache (season : Int? = null) {
343
+ suspend fun generateSeasonIdMap () {
344
+ this .seasonIdMap = listOf (mutableListOf (), mutableListOf ())
345
+ val data = roboteventsRequest(" /seasons/" )
346
+
347
+ for (seasonData in data) {
348
+ val season = jsonWorker.decodeFromJsonElement<Season >(seasonData)
349
+ val gradeLevelIndex = if (season.program.id == 1 ) 0 else if (season.program.id == 4 ) 1 else - 1
350
+ if (gradeLevelIndex != - 1 ) {
351
+ this .seasonIdMap[gradeLevelIndex].add(season)
352
+ }
353
+ }
354
+
355
+ println (" Season ID map generated" )
356
+ /* for (gradeLevel in this.seasonIdMap) {
357
+ for (season in gradeLevel) {
358
+ println("ID: ${season.id}, Name: ${season.name}")
359
+ }
360
+ }*/
361
+ }
362
+
363
+ fun selectedProgramId (): Int {
364
+ return if (this .gradeLevel == " College" ) 4 else 1
365
+ }
366
+
367
+ fun selectedSeasonId (): Int {
368
+ return this .selectedSeasonId
369
+ }
370
+
371
+ fun activeSeasonId (): Int {
372
+ return if (this .seasonIdMap.isNotEmpty()) {
373
+ if (this .gradeLevel != " College" ) {
374
+ try {
375
+ this .seasonIdMap[0 ].first().id
376
+ }
377
+ catch (e: NoSuchElementException ) {
378
+ BuildConfig .DEFAULT_V5_SEASON_ID
379
+ }
380
+ }
381
+ else {
382
+ try {
383
+ this .seasonIdMap[1 ].first().id
384
+ }
385
+ catch (e: NoSuchElementException ) {
386
+ BuildConfig .DEFAULT_VU_SEASON_ID
387
+ }
388
+ }
389
+ }
390
+ else {
391
+ if (this .gradeLevel != " College" ) {
392
+ BuildConfig .DEFAULT_V5_SEASON_ID
393
+ }
394
+ else {
395
+ BuildConfig .DEFAULT_VU_SEASON_ID
396
+ }
397
+ }
398
+ }
399
+
400
+ suspend fun updateWorldSkillsCache (season : Int? = null) {
341
401
342
402
this .importedWS = false
343
403
this .wsCache.clear()
344
404
345
405
try {
346
- val response = client.get(" https://www.robotevents.com/api/seasons/${season ? : 181 } /skills" ) {
406
+ val response = client.get(" https://www.robotevents.com/api/seasons/${season ? : API .selectedSeasonId() } /skills" ) {
347
407
url {
348
408
parameters.append(" grade_level" , " High School" )
349
409
}
@@ -415,10 +475,28 @@ class RoboScoutAPI {
415
475
416
476
}
417
477
478
+ @Serializable
479
+ class Program {
480
+ var id: Int = 0
481
+ var name: String = " "
482
+ }
483
+
418
484
@Serializable
419
485
class Season {
420
486
var id: Int = 0
421
487
var name: String = " "
488
+ @kotlinx.serialization.Transient var shortName: String = name.replace(" VRC " , " " ).replace(" V5RC " , " " ).replace(" VEXU " , " " ).replace(" VURC " , " " )
489
+ var program: Program = Program ()
490
+ var start: String = " "
491
+ var end: String = " "
492
+ @kotlinx.serialization.Transient var startDate: Date ? = RoboScoutAPI .roboteventsDate(start, true )
493
+ @kotlinx.serialization.Transient var endDate: Date ? = RoboScoutAPI .roboteventsDate(end, true )
494
+ }
495
+
496
+ @Serializable
497
+ class ShortSeason {
498
+ var id: Int = 0
499
+ var name: String = " "
422
500
}
423
501
424
502
enum class AllianceColor {
@@ -602,7 +680,7 @@ class Event {
602
680
@kotlinx.serialization.Transient var startDate: Date ? = null
603
681
var end: String = " "
604
682
@kotlinx.serialization.Transient var endDate: Date ? = null
605
- var season: Season = Season ()
683
+ var season: ShortSeason = ShortSeason ()
606
684
var location: Location = Location ()
607
685
@kotlinx.serialization.Transient var matches: MutableMap <Division , MutableList <Match >> = mutableMapOf<Division , MutableList <Match >>()
608
686
var teams: MutableList <Team > = mutableListOf<Team >()
@@ -970,7 +1048,7 @@ class Team : MutableState<Team> {
970
1048
}
971
1049
972
1050
suspend fun fetchEvents (season : Int? = null) {
973
- val data = RoboScoutAPI .roboteventsRequest(" /events" , mapOf (" team" to id, " season" to (season ? : 181 )))
1051
+ val data = RoboScoutAPI .roboteventsRequest(" /events" , mapOf (" team" to id, " season" to (season ? : API .selectedSeasonId() )))
974
1052
events.clear()
975
1053
for (event in data) {
976
1054
val fetchedEvent: Event = jsonWorker.decodeFromJsonElement(event)
@@ -979,7 +1057,7 @@ class Team : MutableState<Team> {
979
1057
}
980
1058
981
1059
suspend fun fetchAwards (season : Int? = null) {
982
- val data = RoboScoutAPI .roboteventsRequest(" /teams/${this .id} /awards" , mapOf (" season" to (season ? : 181 )))
1060
+ val data = RoboScoutAPI .roboteventsRequest(" /teams/${this .id} /awards" , mapOf (" season" to (season ? : API .selectedSeasonId() )))
983
1061
awards.clear()
984
1062
for (award in data) {
985
1063
val fetchedAward: Award = jsonWorker.decodeFromJsonElement(award)
@@ -989,7 +1067,7 @@ class Team : MutableState<Team> {
989
1067
}
990
1068
991
1069
suspend fun averageQualifiersRanking (season : Int? = null): Double {
992
- val data = RoboScoutAPI .roboteventsRequest(" /teams/${this .id} /rankings/" , mapOf (" season" to (season ? : 181 )))
1070
+ val data = RoboScoutAPI .roboteventsRequest(" /teams/${this .id} /rankings/" , mapOf (" season" to (season ? : API .selectedSeasonId() )))
993
1071
var total = 0
994
1072
for (comp in data) {
995
1073
total + = comp[" rank" ]!! .jsonPrimitive.int
0 commit comments