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,7 +38,8 @@ enum class LecturerRank(val id: Int) {
AProfessor(R.string.aprofessor) AProfessor(R.string.aprofessor)
} }
class ScheduleUnit(val oid: Int, class ScheduleUnit(
val oid: Int,
val auditorium: Auditorium, val auditorium: Auditorium,
val date: LocalDate, val date: LocalDate,
val discipline: Discipline, val discipline: Discipline,
@ -47,32 +47,45 @@ class ScheduleUnit(val oid: Int,
val lecturers: ArrayList<Lecturer>, val lecturers: ArrayList<Lecturer>,
val stream: String, val stream: String,
val begin: LocalTime, val begin: LocalTime,
val end: LocalTime) val end: LocalTime
)
class Auditorium( val name: String, class Auditorium(
val name: String,
val oid: Int, val oid: Int,
val floor: Int, val floor: Int,
val building: Building) val building: Building
class Building( val name: String, )
class Building(
val name: String,
val gid: Int, val gid: Int,
val oid: Int) val oid: Int
)
class Discipline( val name: String, class Discipline(
val name: String,
val oid: Int, val oid: Int,
val type: Int) val type: Int
)
class KindOfWork( val name: String, class KindOfWork(
val name: String,
val oid: Int, val oid: Int,
val uid: String, val uid: String,
val complexity: Int) val complexity: Int
)
class Lecturer( val name: String, class Lecturer(
val name: String,
val rank: LecturerRank, val rank: LecturerRank,
val email: String, val email: String,
val unnId: Int, val unnId: Int,
val uid: String) val uid: String
)
class User (val unnId: Int?, class User(
val unnId: Int?,
val bitrixId: Int, val bitrixId: Int,
val userId: Int, val userId: Int,
val type: Type, val type: Type,
@ -81,7 +94,8 @@ class User (val unnId: Int?,
val nameEn: String, val nameEn: String,
val isMale: Boolean, val isMale: Boolean,
val birthday: LocalDate, val birthday: LocalDate,
val avatar: ImageSet) 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 original: String,
val thumbnail: String, val thumbnail: String,
val small: 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