Remove API.kt and UNNApp.kt from .ui

This commit is contained in:
sweetbread 2024-03-26 19:51:29 +03:00
parent a417d74154
commit da7498bf02
6 changed files with 100 additions and 73 deletions

View File

@ -5,7 +5,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".ui.UNNApp"
android:name=".UNNApp"
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"

View File

@ -1,4 +1,4 @@
package ru.sweetbread.unn.ui
package ru.sweetbread.unn
import io.ktor.client.request.forms.submitForm
import io.ktor.client.request.get
@ -8,7 +8,6 @@ import io.ktor.client.statement.bodyAsText
import io.ktor.http.parameters
import org.json.JSONArray
import org.json.JSONObject
import ru.sweetbread.unn.R
import ru.sweetbread.unn.ui.layout.LoginData
import ru.sweetbread.unn.ui.layout.client
import java.time.LocalDate
@ -39,7 +38,8 @@ enum class LecturerRank(val id: Int) {
AProfessor(R.string.aprofessor)
}
class ScheduleUnit(val oid: Int,
class ScheduleUnit(
val oid: Int,
val auditorium: Auditorium,
val date: LocalDate,
val discipline: Discipline,
@ -47,32 +47,45 @@ class ScheduleUnit(val oid: Int,
val lecturers: ArrayList<Lecturer>,
val stream: String,
val begin: LocalTime,
val end: LocalTime)
val end: LocalTime
)
class Auditorium( val name: String,
class Auditorium(
val name: String,
val oid: Int,
val floor: Int,
val building: Building)
class Building( val name: String,
val building: Building
)
class Building(
val name: String,
val gid: Int,
val oid: Int)
val oid: Int
)
class Discipline( val name: String,
class Discipline(
val name: String,
val oid: Int,
val type: Int)
val type: Int
)
class KindOfWork( val name: String,
class KindOfWork(
val name: String,
val oid: Int,
val uid: String,
val complexity: Int)
val complexity: Int
)
class Lecturer( val name: String,
class Lecturer(
val name: String,
val rank: LecturerRank,
val email: String,
val unnId: Int,
val uid: String)
val uid: String
)
class User (val unnId: Int?,
class User(
val unnId: Int?,
val bitrixId: Int,
val userId: Int,
val type: Type,
@ -81,7 +94,8 @@ class User (val unnId: Int?,
val nameEn: String,
val isMale: Boolean,
val birthday: LocalDate,
val avatar: ImageSet)
val avatar: ImageSet
)
class Post(
val id: Int,
@ -89,18 +103,25 @@ class Post(
val enableComments: Boolean,
val numComments: Int,
val date: LocalDateTime,
val content: String)
val content: String
)
class ImageSet(val original: String,
class ImageSet(
val original: String,
val thumbnail: String,
val small: String)
val small: String
)
/**
* Authorize user by [login] and [password]
*
* Also defines local vars [PHPSESSID] and [ME]
*/
suspend fun auth(login: String = LoginData.login, password: String = LoginData.password, forced: Boolean = false): Boolean {
suspend fun auth(
login: String = LoginData.login,
password: String = LoginData.password,
forced: Boolean = false
): Boolean {
if (!forced) {
if (::PHPSESSID.isInitialized and ::ME.isInitialized)
return true
@ -115,7 +136,8 @@ suspend fun auth(login: String = LoginData.login, password: String = LoginData.p
}
)
if (r.status.value == 302) {
PHPSESSID = """PHPSESSID=([\w\d]+)""".toRegex().find(r.headers["Set-Cookie"]!!)!!.groupValues[1]
PHPSESSID =
"""PHPSESSID=([\w\d]+)""".toRegex().find(r.headers["Set-Cookie"]!!)!!.groupValues[1]
getMyself(login)
getCSRF()
return true
@ -133,7 +155,7 @@ private suspend fun getMyself(login: String) {
val user = JSONObject(
client.get("$vuzapiURL/user") {
header("Cookie", "PHPSESSID=${PHPSESSID}")
header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText()
)
@ -229,8 +251,14 @@ suspend fun getSchedule(
),
lecturers = lecturers,
stream = unit.getString("stream"),
begin = LocalTime.parse(unit.getString("beginLesson"), DateTimeFormatter.ofPattern("HH:mm")),
end = LocalTime.parse(unit.getString("endLesson"), DateTimeFormatter.ofPattern("HH:mm"))
begin = LocalTime.parse(
unit.getString("beginLesson"),
DateTimeFormatter.ofPattern("HH:mm")
),
end = LocalTime.parse(
unit.getString("endLesson"),
DateTimeFormatter.ofPattern("HH:mm")
)
)
)
}
@ -239,7 +267,7 @@ suspend fun getSchedule(
suspend fun getCSRF() {
val r = client.get("$restURL/log.blogpost.get") {
header("Cookie", "PHPSESSID=${PHPSESSID}")
header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("sessid", "")
}
CSRF = JSONObject(r.bodyAsText()).getString("sessid")
@ -247,7 +275,7 @@ suspend fun getCSRF() {
suspend fun getBlogposts(): ArrayList<Post> {
val r = client.get("$restURL/log.blogpost.get") {
header("Cookie", "PHPSESSID=${PHPSESSID}")
header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("sessid", CSRF)
}
val json = JSONObject(r.bodyAsText())
@ -275,7 +303,7 @@ suspend fun getBlogposts(): ArrayList<Post> {
suspend fun getUserByBitrixId(id: Int): User {
val userId = JSONObject(client.get("$vuzapiURL/user/bx/$id") {
header("Cookie", "PHPSESSID=${PHPSESSID}")
header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText()).getInt("id")
return getUser(userId)
}
@ -283,7 +311,7 @@ suspend fun getUserByBitrixId(id: Int): User {
suspend fun getUser(id: Int): User {
val json = JSONObject(
client.get("$vuzapiURL/user/$id") {
header("Cookie", "PHPSESSID=${PHPSESSID}")
header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText()
)

View File

@ -1,4 +1,4 @@
package ru.sweetbread.unn.ui
package ru.sweetbread.unn
import android.app.Application
import android.content.Context
@ -6,7 +6,6 @@ import org.acra.config.httpSender
import org.acra.data.StringFormat
import org.acra.ktx.initAcra
import org.acra.sender.HttpSender
import ru.sweetbread.unn.BuildConfig
class UNNApp : Application() {
override fun attachBaseContext(base: Context) {

View File

@ -47,14 +47,14 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import org.kefirsf.bb.BBProcessorFactory
import org.kefirsf.bb.TextProcessor
import ru.sweetbread.unn.ImageSet
import ru.sweetbread.unn.Post
import ru.sweetbread.unn.R
import ru.sweetbread.unn.ui.ImageSet
import ru.sweetbread.unn.ui.Post
import ru.sweetbread.unn.ui.Type
import ru.sweetbread.unn.ui.User
import ru.sweetbread.unn.ui.getBlogposts
import ru.sweetbread.unn.ui.getUserByBitrixId
import ru.sweetbread.unn.ui.portalURL
import ru.sweetbread.unn.Type
import ru.sweetbread.unn.User
import ru.sweetbread.unn.getBlogposts
import ru.sweetbread.unn.getUserByBitrixId
import ru.sweetbread.unn.portalURL
import ru.sweetbread.unn.ui.theme.UNNTheme
import java.time.LocalDate
import java.time.LocalDateTime

View File

@ -41,15 +41,15 @@ import com.kizitonwose.calendar.compose.WeekCalendar
import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import ru.sweetbread.unn.Auditorium
import ru.sweetbread.unn.Building
import ru.sweetbread.unn.Discipline
import ru.sweetbread.unn.KindOfWork
import ru.sweetbread.unn.Lecturer
import ru.sweetbread.unn.LecturerRank
import ru.sweetbread.unn.R
import ru.sweetbread.unn.ui.Auditorium
import ru.sweetbread.unn.ui.Building
import ru.sweetbread.unn.ui.Discipline
import ru.sweetbread.unn.ui.KindOfWork
import ru.sweetbread.unn.ui.Lecturer
import ru.sweetbread.unn.ui.LecturerRank
import ru.sweetbread.unn.ui.ScheduleUnit
import ru.sweetbread.unn.ui.getSchedule
import ru.sweetbread.unn.ScheduleUnit
import ru.sweetbread.unn.getSchedule
import ru.sweetbread.unn.ui.theme.UNNTheme
import java.time.DayOfWeek
import java.time.LocalDate

View File

@ -38,7 +38,7 @@ import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import ru.sweetbread.unn.R
import ru.sweetbread.unn.ui.auth
import ru.sweetbread.unn.auth
import ru.sweetbread.unn.ui.theme.UNNTheme
import splitties.activities.start
import splitties.preferences.Preferences