package Ġcom . j mu . assistant . view model Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . material 3 . Experimental Material 3 Api Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . datastore . core . DataStore Ċ import Ġandroidx . datastore . preferences . core . Preferences Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . j mu . assistant . MainActivity Ċ import Ġcom . j mu . assistant . MainActivity . Companion . COOKIE _ KEY Ċ import Ġcom . j mu . assistant . MainActivity . Companion . student ID Ċ import Ġcom . j mu . assistant . entity . Content Nav Ċ import Ġcom . j mu . assistant . utils . Http Tool Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġorg . js oup . J soup Ċ import Ġretrofit 2 . await Response Ċ Ċ @ Experimental Foundation Api Ċ @ Experimental Animation Api Ċ @ Experimental Material 3 Api Ċ class ĠMain ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġvar Ġart ical Link Ġby Ġmutable State Of ("") ĊĠĠĠ Ġvar Ġstart Route Ġby Ġmutable State Of ( Content Nav . Menu . route ) ĊĊĠĠĠ Ġsuspend Ġfun Ġjudge Start Route ( data Store : ĠData Store < Preferences >) Ġ{ ĊĠĠĠĠĠĠĠ ĠMainActivity . cookie Ġ= Ġdata Store . data . first ()[ COOKIE _ KEY ] Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġif Ġ( MainActivity . cookie . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Route Ġ= ĠContent Nav . Login . route ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġget Student Id () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Student Id () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠHttp Tool . api . get Student Id (). await Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġredirect Ġ= Ġresponse . headers ()[" Location "] Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( redirect . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj soup Ġ= ĠJ soup . parse ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent ID Ġ= Ġj soup . select (". footer . btn . btn - info ")[ 0 ]. attr (" value "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Student Id ", Ġstudent ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( redirect . contains (" login ? refer ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Route Ġ= ĠContent Nav . Login . route ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Route Ġ= ĠContent Nav . Menu . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent ID Ġ= Ġredirect . substring After ("/ info /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Student ID ", Ġstudent ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Route Ġ= ĠContent Nav . Login . route ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( e . toString (), Ġe . message . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }