Skip to content

Commit

Permalink
Create LaundryViewModel.kt and try out some preliminary network requests
Browse files Browse the repository at this point in the history
  • Loading branch information
meiron03 committed Mar 19, 2024
1 parent 3383341 commit c9426a0
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import android.view.*
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.pennapps.labs.pennmobile.adapters.LaundryRoomAdapter
Expand All @@ -18,6 +19,7 @@ import com.pennapps.labs.pennmobile.classes.LaundryUsage
import com.pennapps.labs.pennmobile.components.collapsingtoolbar.ToolbarBehavior
import com.pennapps.labs.pennmobile.databinding.FragmentLaundryBinding
import com.pennapps.labs.pennmobile.utils.Utils
import com.pennapps.labs.pennmobile.viewmodels.LaundryViewModel
import kotlinx.android.synthetic.main.loading_panel.*
import kotlinx.android.synthetic.main.loading_panel.view.*
import kotlinx.android.synthetic.main.no_results.*
Expand Down Expand Up @@ -48,6 +50,7 @@ class LaundryFragment : Fragment() {
private var _binding : FragmentLaundryBinding? = null
private val binding get() = _binding!!

private val laundryViewModel : LaundryViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand Down Expand Up @@ -84,6 +87,8 @@ class LaundryFragment : Fragment() {
binding.favoriteLaundryList.adapter = mAdapter
}

laundryViewModel.getFavorites(mStudentLife, "Bearer 2bNbpzI2ffxxBVMK7Ha6bWVTmpOlMj")

return view
}

Expand All @@ -105,7 +110,6 @@ class LaundryFragment : Fragment() {
}
}
mActivity.setTitle(R.string.laundry)
mActivity.setSelectedTab(MainActivity.LAUNDRY)
loadingPanel?.visibility = View.VISIBLE
updateRooms()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.http.*
import io.reactivex.Observable
import retrofit2.Response

interface StudentLife {
@FormUrlEncoded
Expand Down Expand Up @@ -63,9 +64,15 @@ interface StudentLife {
@GET("laundry/halls/ids")
fun laundryRooms(): Observable<List<LaundryRoomSimple>>

@GET("laundry/halls/ids")
suspend fun laundryRooms2(): Response<List<LaundryRoomSimple>>

@GET("laundry/hall/{id}")
fun room(@Path("id") id: Int): Observable<LaundryRoom>

@GET("laundry/hall/{id}")
suspend fun room2(@Path("id") id: Int): Response<LaundryRoom>

@GET("gsr/locations")
fun location(): Observable<List<GSRLocation>>

Expand Down Expand Up @@ -94,6 +101,9 @@ interface StudentLife {
@GET("laundry/usage/{id}")
fun usage(@Path("id") id: Int): Observable<LaundryUsage>

@GET("laundry/usage/{id}")
suspend fun usage2(@Path("id") id: Int): Response<LaundryUsage>

@GET("events/fling")
fun getFlingEvents(): Observable<List<FlingEvent>>

Expand Down Expand Up @@ -125,6 +135,9 @@ interface StudentLife {
@GET("laundry/preferences")
fun getLaundryPref(@Header("Authorization") bearerToken: String): Observable<LaundryPreferences>

@GET("laundry/preferences")
suspend fun getLaundryPref2(@Header("Authorization") bearerToken: String): Response<LaundryPreferences>

@POST("laundry/preferences/")
fun sendLaundryPref(
@Header("Authorization") bearerToken: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ class HomepageViewModel : HomepageDataModel, ViewModel() {
private val cellMutex = Mutex()

data class ItemUpdateEvents(val positions : List<Int> = emptyList())


private val _updateState = MutableStateFlow(ItemUpdateEvents())
val updateState: StateFlow<ItemUpdateEvents> = _updateState.asStateFlow()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.pennapps.labs.pennmobile.classes

class LaundryRoomFavorites {
val favoriteRooms = ArrayList<LaundryRoom>()
val roomsData : ArrayList<LaundryUsage> = ArrayList()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.pennapps.labs.pennmobile.viewmodels

import StudentLife
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.pennapps.labs.pennmobile.classes.LaundryRoomFavorites
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class LaundryViewModel : ViewModel() {
private var loadedRooms = false

// tied together
private val _favoriteRooms = MutableLiveData<LaundryRoomFavorites>()
private val _hasPreferences = MutableLiveData(false)
val hasPreferences: LiveData<Boolean>
get() = _hasPreferences

val favoriteRooms : LiveData<LaundryRoomFavorites>
get() = _favoriteRooms

fun test(studentLife: StudentLife) {
CoroutineScope(Dispatchers.IO).launch {
val idList : MutableList<Int> = mutableListOf()
val response = studentLife.laundryRooms2()
if (response.isSuccessful) {
val rooms = response.body()!!
for (room in rooms) {
idList.add(room.id!!)
}
Log.i("Laundry Test", "${rooms.size}")
} else {
Log.i("Laundry Test", "bruh")
}
}
}
fun getFavorites(studentLife: StudentLife, bearerToken : String) {
CoroutineScope(Dispatchers.IO).launch {
val favoriteIdList : MutableList<Int> = mutableListOf()
val response = studentLife.getLaundryPref2(bearerToken)
if (response.isSuccessful) {
val prefs = response.body()!!.rooms
for (room in prefs!!) {
favoriteIdList.add(room)
}
} else {
Log.i("Laundry Test", "fuck")
}

_favoriteRooms.value?.favoriteRooms?.clear()
_favoriteRooms.value?.roomsData?.clear()

for (roomId in favoriteIdList) {
var addRoomSuccess = false
var addUsageSuccess = false
val addRoom = launch {
val roomResponse = studentLife.room2(roomId)
addRoomSuccess = if (roomResponse.isSuccessful) {
_favoriteRooms.value?.favoriteRooms?.add(roomResponse.body()!!)
true
} else {
Log.i("Laundry Test", "fuck2")
false
}
}
val addUsage = launch {
val usageResponse = studentLife.usage2(roomId)
addUsageSuccess = if (usageResponse.isSuccessful) {
_favoriteRooms.value?.roomsData?.add(usageResponse.body()!!)
true
} else {
Log.i("Laundry Test", "fuck3")
false
}
}

addRoom.join()
addUsage.join()

Log.i("Laundry Test", "pls $addRoomSuccess $addUsageSuccess")

if (addUsageSuccess && !addRoomSuccess) {
_favoriteRooms.value?.roomsData?.removeLast()
}
if (!addUsageSuccess && addRoomSuccess) {
_favoriteRooms.value?.favoriteRooms?.removeLast()
}
}
}
}

}

0 comments on commit c9426a0

Please sign in to comment.