Skip to content

Commit

Permalink
feat: extract Reglab related functionalities to separate class
Browse files Browse the repository at this point in the history
This commit includes the extraction of Reglab related functionalities from the MainViewModel into a separate Reglab class. This separation of concerns improves readability and maintainability. Changes were also made to the ReglabView to use the new Reglab class for fetching schedule data.
  • Loading branch information
IRedDragonICY committed Mar 17, 2024
1 parent fd484be commit 7684439
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 26 deletions.
28 changes: 28 additions & 0 deletions app/src/main/java/com/uad/portal/API/reglab.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.uad.portal.API

import com.google.gson.Gson
import com.uad.portal.PracticumInfo
import com.uad.portal.SessionManager
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jsoup.Jsoup

class Reglab(private val sessionManager: SessionManager) {

suspend fun fetchScheduleData(): PracticumInfo = withContext(Dispatchers.IO) {
val session = sessionManager.loadReglabSession()
val username = session?.credentials?.username

if (session != null && username != null) {
val url = "https://reglab.tif.uad.ac.id/ajax/pemilihan-jadwal-praktikum/$username"
val response = Jsoup.connect(url)
.cookie("remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d", session.session!!)
.ignoreContentType(true)
.execute()
val json = response.body()
val gson = Gson()
return@withContext gson.fromJson(json, PracticumInfo::class.java)
}
throw Exception("Failed to load session")
}
}
28 changes: 3 additions & 25 deletions app/src/main/java/com/uad/portal/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import com.google.gson.Gson
import com.uad.portal.API.Auth
import com.uad.portal.API.Credentials
import com.uad.portal.API.LoginResult
import com.uad.portal.API.ReglabCredentials
import com.uad.portal.API.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
Expand All @@ -25,10 +21,10 @@ import org.jsoup.nodes.Element
import java.util.concurrent.TimeUnit



class MainViewModel : ViewModel() {
private lateinit var sessionManager: SessionManager
private val auth = Auth()
lateinit var reglab: Reglab

val isLoggedInState = mutableStateOf(false)
val userInfoState = mutableStateOf<UserInfo?>(null)
Expand All @@ -50,14 +46,14 @@ class MainViewModel : ViewModel() {

fun initSessionManager(context: Context) {
sessionManager = SessionManager(context)
reglab = Reglab(sessionManager)
val session = sessionManager.loadPortalSession()
session?.let {
isLoggedInState.value = true
userInfoState.value = it.userInfo
autoLogin()
}
}

fun initAttendanceWorker(context: Context) {
val attendanceWorkRequest = PeriodicWorkRequestBuilder<AttendanceWorker>(3, TimeUnit.MINUTES).build()
WorkManager.getInstance(context).enqueue(attendanceWorkRequest)
Expand Down Expand Up @@ -117,24 +113,6 @@ class MainViewModel : ViewModel() {
return response.statusCode() == 200
}

suspend fun fetchScheduleData(): PracticumInfo = withContext(Dispatchers.IO) {
val session = sessionManager.loadReglabSession()
val username = session?.credentials?.username

if (session != null && username != null) {
val url = "https://reglab.tif.uad.ac.id/ajax/pemilihan-jadwal-praktikum/$username"
val response = Jsoup.connect(url)
.cookie("remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d", session.session!!)
.ignoreContentType(true)
.execute()
val json = response.body()
val gson = Gson()
return@withContext gson.fromJson(json, PracticumInfo::class.java)
}
throw Exception("Failed to load session")
}


private fun connectJsoup(
url: String,
cookie: String,
Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/com/uad/portal/views/ReglabView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@ import com.uad.portal.Screen

@Composable
fun ReglabView(mainViewModel: MainViewModel) {
val reglab = mainViewModel.reglab
val scheduleData = remember { mutableStateOf<PracticumInfo?>(null) }

LaunchedEffect(Unit) {
try {
scheduleData.value = mainViewModel.fetchScheduleData()
scheduleData.value = reglab.fetchScheduleData()
println(scheduleData.value)
} catch (e: Exception) {
println("Failed to fetch schedule data: ${e.message}")
Expand Down

0 comments on commit 7684439

Please sign in to comment.