fix: apply API changes

This commit is contained in:
Sweetbread 2025-04-22 18:07:35 +03:00
parent c63ca8c1da
commit 282c93b5d4
Signed by: Sweetbread
GPG Key ID: 17A5CB9A7DD85319
15 changed files with 356 additions and 116 deletions

View File

@ -108,8 +108,6 @@ dependencies {
implementation(libs.compose) implementation(libs.compose)
implementation(libs.kefirbb)
implementation(libs.acra.http) implementation(libs.acra.http)
implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.runtime)

View File

@ -0,0 +1,37 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "ru.sweetbread.unn",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "ru.sweetbread.unn-v1(1.0)-release.apk"
}
],
"elementType": "File",
"baselineProfiles": [
{
"minApi": 28,
"maxApi": 30,
"baselineProfiles": [
"baselineProfiles/1/ru.sweetbread.unn-v1(1.0)-release.dm"
]
},
{
"minApi": 31,
"maxApi": 2147483647,
"baselineProfiles": [
"baselineProfiles/0/ru.sweetbread.unn-v1(1.0)-release.dm"
]
}
],
"minSdkVersionForDexing": 26
}

Binary file not shown.

View File

@ -19,11 +19,14 @@ import ru.sweetbread.unn.db.loadSchedule
import ru.sweetbread.unn.db.loadUserByBitrixId import ru.sweetbread.unn.db.loadUserByBitrixId
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.Instant
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalDateTime import java.time.LocalDateTime
import java.time.LocalTime import java.time.LocalTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
private lateinit var PHPSESSID: String private lateinit var PHPSESSID: String
private lateinit var CSRF: String private lateinit var CSRF: String
lateinit var ME: User lateinit var ME: User
@ -31,8 +34,10 @@ lateinit var ME: User
const val portalURL = "https://portal.unn.ru" const val portalURL = "https://portal.unn.ru"
const val ruzapiURL = "$portalURL/ruzapi" const val ruzapiURL = "$portalURL/ruzapi"
const val vuzapiURL = "$portalURL/bitrix/vuz/api" const val vuzapiURL = "$portalURL/bitrix/vuz/api"
const val prtl2URL = "$portalURL/portal2/api"
const val restURL = "$portalURL/rest" const val restURL = "$portalURL/rest"
enum class Type(val s: String) { enum class Type(val s: String) {
Student("student"), Student("student"),
Group("group"), Group("group"),
@ -109,7 +114,6 @@ class User(
class Post( class Post(
val id: Int, val id: Int,
val blogId: Int,
val authorId: Int, val authorId: Int,
val enableComments: Boolean, val enableComments: Boolean,
val numComments: Int, val numComments: Int,
@ -123,6 +127,7 @@ class AvatarSet(
val small: String val small: String
) )
/** /**
* Authorize user by [login] and [password] * Authorize user by [login] and [password]
* *
@ -149,10 +154,8 @@ suspend fun auth(
if (r.status.value == 302) { if (r.status.value == 302) {
PHPSESSID = PHPSESSID =
"""PHPSESSID=([\w\d]+)""".toRegex().find(r.headers["Set-Cookie"]!!)!!.groupValues[1] """PHPSESSID=([\w\d]+)""".toRegex().find(r.headers["Set-Cookie"]!!)!!.groupValues[1]
GlobalScope.launch(Dispatchers.IO) {
getMyself(login) getMyself(login)
getCSRF() getCSRF()
}
return true return true
} }
return false return false
@ -162,9 +165,10 @@ suspend fun auth(
* Save info about current [User] in memory * Save info about current [User] in memory
*/ */
private suspend fun getMyself(login: String) { private suspend fun getMyself(login: String) {
GlobalScope.launch(Dispatchers.IO) { // WARNING: trailing / is important, 'cuz API devs are eating shit
val studentinfo = JSONObject(client.get("$ruzapiURL/studentinfo") { val studentinfo = JSONObject(client.get("$ruzapiURL/studentinfo/") {
parameter("uns", login.substring(1)) header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("uns", login.drop(1))
}.bodyAsText()) }.bodyAsText())
val user = JSONObject( val user = JSONObject(
@ -173,6 +177,8 @@ private suspend fun getMyself(login: String) {
}.bodyAsText() }.bodyAsText()
) )
Log.d("studentInfo", studentinfo.toString(2))
ME = User( ME = User(
unnId = studentinfo.getString("id").toInt(), unnId = studentinfo.getString("id").toInt(),
bitrixId = user.getInt("bitrix_id"), bitrixId = user.getInt("bitrix_id"),
@ -185,10 +191,10 @@ private suspend fun getMyself(login: String) {
nameRu = user.getString("fullname"), nameRu = user.getString("fullname"),
nameEn = user.getString("fullname_en"), nameEn = user.getString("fullname_en"),
isMale = user.getString("sex") == "M", isMale = user.getString("sex") == "M",
birthday = LocalDate.parse( birthday = Instant
user.getString("birthdate"), .parse(user.getString("birthdate"))
DateTimeFormatter.ofPattern("yyyy-MM-dd") .atZone(ZoneId.of("Europe/Moscow"))
), .toLocalDate(),
avatar = user.getJSONObject("photo").let { avatar = user.getJSONObject("photo").let {
AvatarSet( AvatarSet(
it.getString("orig"), it.getString("orig"),
@ -198,7 +204,6 @@ private suspend fun getMyself(login: String) {
} }
) )
} }
}
suspend fun getScheduleDay( suspend fun getScheduleDay(
type: Type = ME.type, type: Type = ME.type,
@ -223,7 +228,7 @@ suspend fun getSchedule(
start: LocalDate, start: LocalDate,
finish: LocalDate finish: LocalDate
): ArrayList<ScheduleUnit> { ): ArrayList<ScheduleUnit> {
val unnDatePattern = DateTimeFormatter.ofPattern("yyyy.MM.dd") val unnDatePattern = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val r = client.get("$ruzapiURL/schedule/${type.s}/$id") { val r = client.get("$ruzapiURL/schedule/${type.s}/$id") {
parameter("start", start.format(unnDatePattern)) parameter("start", start.format(unnDatePattern))
@ -310,28 +315,26 @@ 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("$prtl2URL/news.php") {
header("Cookie", "PHPSESSID=$PHPSESSID") header("Cookie", "PHPSESSID=$PHPSESSID")
parameter("sessid", CSRF) header("x-bitrix-sessid-token", CSRF)
} }
val json = JSONObject(r.bodyAsText()) val result = JSONArray(r.bodyAsText())
val result = json.getJSONArray("result")
val out = arrayListOf<Post>() val out = arrayListOf<Post>()
for (i in 0 until result.length()) { for (i in 0 until result.length()) {
val el = result.getJSONObject(i) val el = result.getJSONObject(i)
out.add( out.add(
Post( Post(
id = el.getString("ID").toInt(), id = el.getString("id").toInt(),
blogId = el.getString("BLOG_ID").toInt(), authorId = el.getJSONObject("author").getInt("id").toInt(),
authorId = el.getString("AUTHOR_ID").toInt(), enableComments = true, // FIXME: Delete the field or get correct value
enableComments = el.getString("ENABLE_COMMENTS") == "Y", numComments = el.getString("commentsnum").toInt(),
numComments = el.getString("NUM_COMMENTS").toInt(),
date = LocalDateTime.parse( date = LocalDateTime.parse(
el.getString("DATE_PUBLISH"), el.getString("time"),
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'+03:00'") DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
), ),
content = el.getString("DETAIL_TEXT") content = el.getString("fulltext")
) )
) )
} }
@ -375,10 +378,10 @@ suspend fun getUser(id: Int): User {
nameRu = json.getString("fullname"), nameRu = json.getString("fullname"),
nameEn = json.getString("fullname_en"), nameEn = json.getString("fullname_en"),
isMale = json.getString("sex") == "M", isMale = json.getString("sex") == "M",
birthday = LocalDate.parse( birthday = Instant
json.getString("birthdate"), .parse(json.getString("birthdate"))
DateTimeFormatter.ofPattern("yyyy-MM-dd") .atZone(ZoneId.of("Europe/Moscow"))
), .toLocalDate(),
avatar = json.getJSONObject("photo").let { avatar = json.getJSONObject("photo").let {
AvatarSet( AvatarSet(
it.getString("orig"), it.getString("orig"),

View File

@ -11,15 +11,15 @@ class UNNApp : Application() {
override fun attachBaseContext(base: Context) { override fun attachBaseContext(base: Context) {
super.attachBaseContext(base) super.attachBaseContext(base)
initAcra { // initAcra {
buildConfigClass = BuildConfig::class.java // buildConfigClass = BuildConfig::class.java
reportFormat = StringFormat.JSON // reportFormat = StringFormat.JSON
httpSender { // httpSender {
uri = BuildConfig.ACRA_URL // uri = BuildConfig.ACRA_URL
basicAuthLogin = BuildConfig.ACRA_LOGIN // basicAuthLogin = BuildConfig.ACRA_LOGIN
basicAuthPassword = BuildConfig.ACRA_PASS // basicAuthPassword = BuildConfig.ACRA_PASS
httpMethod = HttpSender.Method.POST // httpMethod = HttpSender.Method.POST
} // }
} // }
} }
} }

View File

@ -1,3 +1,8 @@
/*
* Created by sweetbread
* Copyright (c) 2025. All rights reserved.
*/
package ru.sweetbread.unn.ui.composes package ru.sweetbread.unn.ui.composes
import android.text.util.Linkify import android.text.util.Linkify
@ -46,8 +51,6 @@ import com.google.android.material.textview.MaterialTextView
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import org.kefirsf.bb.BBProcessorFactory
import org.kefirsf.bb.TextProcessor
import ru.sweetbread.unn.AvatarSet import ru.sweetbread.unn.AvatarSet
import ru.sweetbread.unn.Post import ru.sweetbread.unn.Post
import ru.sweetbread.unn.R import ru.sweetbread.unn.R
@ -169,12 +172,11 @@ fun UserItem(modifier: Modifier = Modifier, user: User, info: String? = null) {
@NonRestartableComposable @NonRestartableComposable
fun PostItem(modifier: Modifier = Modifier, post: Post, extended: Boolean = false) { fun PostItem(modifier: Modifier = Modifier, post: Post, extended: Boolean = false) {
var user: User? by remember { mutableStateOf(null) } var user: User? by remember { mutableStateOf(null) }
val processor = remember { BBProcessorFactory.getInstance().create() }
var html: String by remember { mutableStateOf("") } var html: String by remember { mutableStateOf("") }
LaunchedEffect(post) { LaunchedEffect(post) {
html = toHtml(processor, post) html = post.content
user = getUserByBitrixId(post.authorId) user = getUserByBitrixId(post.authorId)
} }
@ -218,45 +220,6 @@ fun PostItem(modifier: Modifier = Modifier, post: Post, extended: Boolean = fals
} }
} }
private fun toHtml(
processor: TextProcessor,
post: Post
): String {
Log.d("toHTML | original", post.content)
val result =
post.content.replace("""\[URL=(.+?)](.+?)\[/URL]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<a href=\"${it.groups[1]?.value}\">${it.groups[2]?.value}</a>"
}.replace("""\[FONT=(.+?)](.*?)\[/FONT]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<span style=\"font-family: ${it.groups[1]?.value}\">${it.groups[2]?.value}</span>"
}.replace("""\[SIZE=(.+?)](.*?)\[/SIZE]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<span style=\"font-size: ${it.groups[1]?.value}\">${it.groups[2]?.value}</span>"
}.replace(
"""\[CENTER]\[JUSTIFY]\[CENTER](.*?)\[/CENTER]\[/JUSTIFY]\[/CENTER]""".toRegex(
RegexOption.DOT_MATCHES_ALL
)
) {
"<span style=\"text-align: center;\">${it.groups[1]?.value}</span><br>"
}.replace("""\[CENTER](.*?)\[/CENTER]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<span style=\"text-align: center;\">${it.groups[1]?.value}</span><br>"
}.replace("""\[JUSTIFY](.*?)\[/JUSTIFY]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<span style=\"text-align: justify;\">${it.groups[1]?.value}</span><br>"
}.replace("""\[B](.*?)\[/B]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<b>${it.groups[1]?.value}</b>"
}.replace("""\[U](.*?)\[/U]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<u>${it.groups[1]?.value}</u>"
}.replace("""\[P](.*?)\[/P]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<p>${it.groups[1]?.value}</p>"
/*}.replace("""\[DISK FILE ID=n(\d+)]""".toRegex(RegexOption.DOT_MATCHES_ALL)) {
"<img src=\"$portalURL/bitrix/tools/disk/uf.php?attachedId=${it.groups[1]?.value}&action=download&ncc=1\" />"*/
}.replace("""\[IMG .+].+?\[/IMG]""".toRegex(RegexOption.DOT_MATCHES_ALL), "")
/*.replace("\n", "\n<br>")*/
Log.d("toHTML | result", result)
return result
}
@Preview @Preview
@Composable @Composable
@ -278,7 +241,6 @@ fun UserItemPreview() {
fun PostItemPreview() { fun PostItemPreview() {
val post = Post( val post = Post(
id = 154923, id = 154923,
blogId = 121212,
authorId = 165945, authorId = 165945,
enableComments = true, enableComments = true,
numComments = 0, numComments = 0,

View File

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!--
TODO: Use <include> and <exclude> to control what is backed up.
The domain can be file, database, sharedpref, external or root.
Examples:
<include domain="file" path="file_to_include"/>
<exclude domain="file" path="file_to_exclude"/>
<include domain="file" path="include_folder"/>
<exclude domain="file" path="include_folder/file_to_exclude"/>
<exclude domain="file" path="exclude_folder"/>
<include domain="file" path="exclude_folder/file_to_include"/>
<include domain="sharedpref" path="include_shared_pref1.xml"/>
<include domain="database" path="db_name/file_to_include"/>
<exclude domain="database" path="db_name/include_folder/file_to_exclude"/>
<include domain="external" path="file_to_include"/>
<exclude domain="external" path="file_to_exclude"/>
<include domain="root" path="file_to_include"/>
<exclude domain="root" path="file_to_exclude"/>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>

View File

@ -1,6 +1,6 @@
[versions] [versions]
acraHttp = "5.11.3" acraHttp = "5.11.3"
agp = "8.5.2" agp = "8.7.0"
calendar = "2.5.4" calendar = "2.5.4"
coilCompose = "2.7.0" coilCompose = "2.7.0"
compose = "1.6.4" # Updating this will cause an error! compose = "1.6.4" # Updating this will cause an error!
@ -23,8 +23,8 @@ activity = "1.9.2"
navigationCompose = "2.7.7" # Updating this will cause an error! navigationCompose = "2.7.7" # Updating this will cause an error!
roomRuntime = "2.6.1" roomRuntime = "2.6.1"
secretsGradlePlugin = "2.0.1" secretsGradlePlugin = "2.0.1"
splittiesFunPackAndroidBaseWithViewsDsl = "3.0.0" splitties = "3.0.0"
kefirbb = "1.5" materialIconsCoreAndroid = "1.7.8"
[libraries] [libraries]
acra-http = { module = "ch.acra:acra-http", version.ref = "acraHttp" } acra-http = { module = "ch.acra:acra-http", version.ref = "acraHttp" }
@ -62,8 +62,9 @@ androidx-lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecy
androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" } androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" }
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
secrets-gradle-plugin = { module = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin", version.ref = "secretsGradlePlugin" } secrets-gradle-plugin = { module = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin", version.ref = "secretsGradlePlugin" }
splitties-funpack-android-base-with-views-dsl = { module = "com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl", version.ref = "splittiesFunPackAndroidBaseWithViewsDsl" } splitties-base = { module = "com.louiscad.splitties:splitties-fun-pack-android-base-with-views-dsl", version.ref = "splitties" }
kefirbb = { group = "org.kefirsf", name = "kefirbb", version.ref = "kefirbb" } splitties-room = { module = "com.louiscad.splitties:splitties-arch-room", version.ref = "splitties" }
androidx-material-icons-core-android = { group = "androidx.compose.material", name = "material-icons-core-android", version.ref = "materialIconsCoreAndroid" }
[plugins] [plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" } androidApplication = { id = "com.android.application", version.ref = "agp" }

View File

@ -1,6 +1,6 @@
#Sat Mar 16 18:30:45 MSK 2024 #Sat Mar 16 18:30:45 MSK 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

3
secrets.properties Normal file
View File

@ -0,0 +1,3 @@
ACRA_URL=https://bugs.coders-squad.com/report
ACRA_LOGIN=pMJkqPlNLX4kQ3kK
ACRA_PASS=HYY72oV4ybmpCggC