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" /> <uses-permission android:name="android.permission.INTERNET" />
<application <application
android:name=".ui.UNNApp" android:name=".UNNApp"
android:allowBackup="true" android:allowBackup="true"
android:label="@string/app_name" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" 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.forms.submitForm
import io.ktor.client.request.get import io.ktor.client.request.get
@ -8,7 +8,6 @@ import io.ktor.client.statement.bodyAsText
import io.ktor.http.parameters import io.ktor.http.parameters
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import ru.sweetbread.unn.R
import ru.sweetbread.unn.ui.layout.LoginData import ru.sweetbread.unn.ui.layout.LoginData
import ru.sweetbread.unn.ui.layout.client import ru.sweetbread.unn.ui.layout.client
import java.time.LocalDate import java.time.LocalDate
@ -39,49 +38,64 @@ enum class LecturerRank(val id: Int) {
AProfessor(R.string.aprofessor) AProfessor(R.string.aprofessor)
} }
class ScheduleUnit(val oid: Int, class ScheduleUnit(
val auditorium: Auditorium, val oid: Int,
val date: LocalDate, val auditorium: Auditorium,
val discipline: Discipline, val date: LocalDate,
val kindOfWork: KindOfWork, val discipline: Discipline,
val lecturers: ArrayList<Lecturer>, val kindOfWork: KindOfWork,
val stream: String, val lecturers: ArrayList<Lecturer>,
val begin: LocalTime, val stream: String,
val end: LocalTime) val begin: LocalTime,
val end: LocalTime
)
class Auditorium( val name: String, class Auditorium(
val oid: Int, val name: String,
val floor: Int, val oid: Int,
val building: Building) val floor: Int,
class Building( val name: String, val building: Building
val gid: Int, )
val oid: Int)
class Discipline( val name: String, class Building(
val oid: Int, val name: String,
val type: Int) val gid: Int,
val oid: Int
)
class KindOfWork( val name: String, class Discipline(
val oid: Int, val name: String,
val uid: String, val oid: Int,
val complexity: Int) val type: Int
)
class Lecturer( val name: String, class KindOfWork(
val rank: LecturerRank, val name: String,
val email: String, val oid: Int,
val unnId: Int, val uid: String,
val uid: String) val complexity: Int
)
class User (val unnId: Int?, class Lecturer(
val bitrixId: Int, val name: String,
val userId: Int, val rank: LecturerRank,
val type: Type, val email: String,
val email: String, val unnId: Int,
val nameRu: String, val uid: String
val nameEn: String, )
val isMale: Boolean,
val birthday: LocalDate, class User(
val avatar: ImageSet) val unnId: Int?,
val bitrixId: Int,
val userId: Int,
val type: Type,
val email: String,
val nameRu: String,
val nameEn: String,
val isMale: Boolean,
val birthday: LocalDate,
val avatar: ImageSet
)
class Post( class Post(
val id: Int, val id: Int,
@ -89,18 +103,25 @@ class Post(
val enableComments: Boolean, val enableComments: Boolean,
val numComments: Int, val numComments: Int,
val date: LocalDateTime, val date: LocalDateTime,
val content: String) val content: String
)
class ImageSet(val original: String, class ImageSet(
val thumbnail: String, val original: String,
val small: String) val thumbnail: String,
val small: String
)
/** /**
* Authorize user by [login] and [password] * Authorize user by [login] and [password]
* *
* Also defines local vars [PHPSESSID] and [ME] * 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 (!forced) {
if (::PHPSESSID.isInitialized and ::ME.isInitialized) if (::PHPSESSID.isInitialized and ::ME.isInitialized)
return true return true
@ -115,7 +136,8 @@ suspend fun auth(login: String = LoginData.login, password: String = LoginData.p
} }
) )
if (r.status.value == 302) { 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) getMyself(login)
getCSRF() getCSRF()
return true return true
@ -133,7 +155,7 @@ private suspend fun getMyself(login: String) {
val user = JSONObject( val user = JSONObject(
client.get("$vuzapiURL/user") { client.get("$vuzapiURL/user") {
header("Cookie", "PHPSESSID=${PHPSESSID}") header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText() }.bodyAsText()
) )
@ -141,7 +163,7 @@ private suspend fun getMyself(login: String) {
unnId = studentinfo.getString("id").toInt(), unnId = studentinfo.getString("id").toInt(),
bitrixId = user.getInt("bitrix_id"), bitrixId = user.getInt("bitrix_id"),
userId = user.getInt("id"), userId = user.getInt("id"),
type = when(studentinfo.getString("type")) { type = when (studentinfo.getString("type")) {
"lecturer" -> Type.Lecturer // ig,,, "lecturer" -> Type.Lecturer // ig,,,
else -> Type.Student else -> Type.Student
}, },
@ -229,8 +251,14 @@ suspend fun getSchedule(
), ),
lecturers = lecturers, lecturers = lecturers,
stream = unit.getString("stream"), stream = unit.getString("stream"),
begin = LocalTime.parse(unit.getString("beginLesson"), DateTimeFormatter.ofPattern("HH:mm")), begin = LocalTime.parse(
end = LocalTime.parse(unit.getString("endLesson"), DateTimeFormatter.ofPattern("HH:mm")) 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() { suspend fun getCSRF() {
val r = client.get("$restURL/log.blogpost.get") { val r = client.get("$restURL/log.blogpost.get") {
header("Cookie", "PHPSESSID=${PHPSESSID}") header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("sessid", "") parameter("sessid", "")
} }
CSRF = JSONObject(r.bodyAsText()).getString("sessid") CSRF = JSONObject(r.bodyAsText()).getString("sessid")
@ -247,7 +275,7 @@ suspend fun getCSRF() {
suspend fun getBlogposts(): ArrayList<Post> { suspend fun getBlogposts(): ArrayList<Post> {
val r = client.get("$restURL/log.blogpost.get") { val r = client.get("$restURL/log.blogpost.get") {
header("Cookie", "PHPSESSID=${PHPSESSID}") header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("sessid", CSRF) parameter("sessid", CSRF)
} }
val json = JSONObject(r.bodyAsText()) val json = JSONObject(r.bodyAsText())
@ -275,7 +303,7 @@ suspend fun getBlogposts(): ArrayList<Post> {
suspend fun getUserByBitrixId(id: Int): User { suspend fun getUserByBitrixId(id: Int): User {
val userId = JSONObject(client.get("$vuzapiURL/user/bx/$id") { val userId = JSONObject(client.get("$vuzapiURL/user/bx/$id") {
header("Cookie", "PHPSESSID=${PHPSESSID}") header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText()).getInt("id") }.bodyAsText()).getInt("id")
return getUser(userId) return getUser(userId)
} }
@ -283,7 +311,7 @@ suspend fun getUserByBitrixId(id: Int): User {
suspend fun getUser(id: Int): User { suspend fun getUser(id: Int): User {
val json = JSONObject( val json = JSONObject(
client.get("$vuzapiURL/user/$id") { client.get("$vuzapiURL/user/$id") {
header("Cookie", "PHPSESSID=${PHPSESSID}") header("Cookie", "PHPSESSID=$PHPSESSID")
}.bodyAsText() }.bodyAsText()
) )

View File

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

View File

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

View File

@ -41,15 +41,15 @@ import com.kizitonwose.calendar.compose.WeekCalendar
import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState import com.kizitonwose.calendar.compose.weekcalendar.rememberWeekCalendarState
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch 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.R
import ru.sweetbread.unn.ui.Auditorium import ru.sweetbread.unn.ScheduleUnit
import ru.sweetbread.unn.ui.Building import ru.sweetbread.unn.getSchedule
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.ui.theme.UNNTheme import ru.sweetbread.unn.ui.theme.UNNTheme
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.LocalDate import java.time.LocalDate

View File

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