diff --git a/app/build.gradle b/app/build.gradle
index 83f8cbbb..6b0569e7 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -126,7 +126,7 @@ dependencies {
// Android Jetpack
implementation "androidx.appcompat:appcompat:1.3.1"
implementation "androidx.cardview:cardview:1.0.0"
- implementation "androidx.constraintlayout:constraintlayout:2.1.0"
+ implementation "androidx.constraintlayout:constraintlayout:2.1.1"
implementation "androidx.core:core-ktx:1.6.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
@@ -137,12 +137,12 @@ dependencies {
// Google design libs
implementation "com.google.android.material:material:1.4.0"
- implementation "com.google.android:flexbox:2.0.1"
+ implementation "com.google.android.flexbox:flexbox:3.0.0"
// Play Services/Firebase
implementation "com.google.android.gms:play-services-wearable:17.1.0"
- implementation "com.google.firebase:firebase-core:19.0.1"
- implementation "com.google.firebase:firebase-crashlytics:18.2.1"
+ implementation "com.google.firebase:firebase-core:19.0.2"
+ implementation "com.google.firebase:firebase-crashlytics:18.2.3"
implementation("com.google.firebase:firebase-messaging") { version { strictly "20.1.3" } }
// OkHttp, Retrofit, Gson, Jsoup
@@ -150,14 +150,14 @@ dependencies {
implementation "com.squareup.retrofit2:retrofit:2.9.0"
implementation "com.squareup.retrofit2:converter-gson:2.9.0"
implementation "com.squareup.retrofit2:converter-scalars:2.9.0"
- implementation 'com.google.code.gson:gson:2.8.6'
- implementation "org.jsoup:jsoup:1.13.1"
+ implementation 'com.google.code.gson:gson:2.8.8'
+ implementation 'org.jsoup:jsoup:1.14.3'
implementation "pl.droidsonroids:jspoon:1.3.2"
implementation "pl.droidsonroids.retrofit2:converter-jspoon:1.3.2"
// Szkolny.eu libraries/forks
implementation "eu.szkolny:android-snowfall:1ca9ea2da3"
- implementation "eu.szkolny:agendacalendarview:ac0f3dcf42"
+ implementation "eu.szkolny:agendacalendarview:1.0.4"
implementation "eu.szkolny:cafebar:5bf0c618de"
implementation "eu.szkolny.fslogin:lib:2.0.0"
implementation "eu.szkolny:material-about-library:1d5ebaf47c"
@@ -179,26 +179,27 @@ dependencies {
// Other dependencies
implementation "cat.ereza:customactivityoncrash:2.3.0"
- implementation "com.applandeo:material-calendar-view:1.5.0"
+ implementation "com.android.volley:volley:1.2.1"
implementation "com.daimajia.swipelayout:library:1.2.0@aar"
- implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2"
- implementation "com.github.bassaer:chatmessageview:2.0.1"
- implementation "com.github.CanHub:Android-Image-Cropper:2.2.2"
- implementation "com.github.ChuckerTeam.Chucker:library:3.0.1"
- implementation "com.github.wulkanowy.uonet-request-signer:hebe-jvm:a99ca50a31"
- implementation("com.heinrichreimersoftware:material-intro") { version { strictly "1.5.8" } }
- implementation "com.hypertrack:hyperlog:0.0.10"
+ implementation "com.github.Applandeo:Material-Calendar-View:15de569cbc" // https://github.com/Applandeo/Material-Calendar-View
+ implementation "com.github.CanHub:Android-Image-Cropper:2.2.2" // https://github.com/CanHub/Android-Image-Cropper
+ implementation "com.github.ChuckerTeam.Chucker:library:3.0.1" // https://github.com/ChuckerTeam/chucker
+ implementation "com.github.antonKozyriatskyi:CircularProgressIndicator:1.2.2" // https://github.com/antonKozyriatskyi/CircularProgressIndicator
+ implementation "com.github.bassaer:chatmessageview:2.0.1" // https://github.com/bassaer/ChatMessageView
+ implementation "com.github.hypertrack:hyperlog-android:0.0.10" // https://github.com/hypertrack/hyperlog-android
+ implementation "com.github.smuyyh:JsonViewer:V1.0.6" // https://github.com/smuyyh/JsonViewer
+ implementation "com.github.underwindfall.PowerPermission:powerpermission-coroutines:1.4.0" // https://github.com/underwindfall/PowerPermission
+ implementation "com.github.underwindfall.PowerPermission:powerpermission:1.4.0" // https://github.com/underwindfall/PowerPermission
+ implementation "com.github.wulkanowy.uonet-request-signer:hebe-jvm:a99ca50a31" // https://github.com/wulkanowy/uonet-request-signer
implementation "com.jaredrummler:colorpicker:1.1.0"
- implementation "com.qifan.powerpermission:powerpermission-coroutines:1.3.0"
- implementation "com.qifan.powerpermission:powerpermission:1.3.0"
- implementation "com.yuyh.json:jsonviewer:1.0.6"
implementation "io.coil-kt:coil:1.1.1"
implementation "me.dm7.barcodescanner:zxing:1.9.8"
implementation "me.grantland:autofittextview:0.2.1"
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
implementation "org.greenrobot:eventbus:3.2.0"
+ implementation("com.heinrichreimersoftware:material-intro") { version { strictly "1.5.8" } }
implementation("pl.droidsonroids.gif:android-gif-drawable") { version { strictly "1.2.15" } }
// Debug-only dependencies
- debugImplementation "com.amitshekhar.android:debug-db:1.0.5"
+ debugImplementation "com.github.amitshekhariitbhu.Android-Debug-Database:debug-db:v1.0.6"
}
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt
index 32ca353c..a39d7afa 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebAnnouncements.kt
@@ -40,7 +40,7 @@ class EdudziennikWebAnnouncements(override val data: DataEdudziennik,
val teacherName = announcementElement.child(1).text()
val teacher = data.getTeacherByFirstLast(teacherName)
- val dateString = announcementElement.getElementsByClass("datetime").first().text()
+ val dateString = announcementElement.getElementsByClass("datetime").first()?.text()
val startDate = Date.fromY_m_d(dateString)
val addedDate = Date.fromIsoHm(dateString)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt
index 6a247290..8758d76d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebGrades.kt
@@ -67,13 +67,13 @@ class EdudziennikWebGrades(override val data: DataEdudziennik,
val gradeValues = if (grades.isNotEmpty()) {
subjects.select(".avg-$subjectId .grade-tip > p").first()
- .text().split('+').map {
+ ?.text()?.split('+')?.map {
val split = it.split('*')
val value = split[1].trim().toFloatOrNull()
val weight = value?.let { split[0].trim().toFloatOrNull() } ?: 0f
Pair(value ?: 0f, weight)
- }
+ } ?: emptyList()
} else emptyList()
grades.forEachIndexed { index, gradeElement ->
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt
index b843abe9..db037967 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebHomework.kt
@@ -32,7 +32,7 @@ class EdudziennikWebHomework(override val data: DataEdudziennik,
if (doc.getElementsByClass("message").text().trim() != "Brak prac domowych") {
doc.getElementsByTag("tr").forEach { homeworkElement ->
- val dateElement = homeworkElement.getElementsByClass("date").first().child(0)
+ val dateElement = homeworkElement.getElementsByClass("date").first()?.child(0) ?: return@forEach
val idStr = EDUDZIENNIK_HOMEWORK_ID.find(dateElement.attr("href"))?.get(1) ?: return@forEach
val id = idStr.crc32()
val date = Date.fromY_m_d(dateElement.text())
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt
index 35a78168..8865fb8a 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebNotes.kt
@@ -29,7 +29,7 @@ class EdudziennikWebNotes(override val data: DataEdudziennik,
val doc = Jsoup.parseBodyFragment("
")
doc.getElementsByTag("tr").forEach { noteElement ->
- val dateElement = noteElement.getElementsByClass("date").first().child(0)
+ val dateElement = noteElement.getElementsByClass("date").first()?.child(0) ?: return@forEach
val addedDate = Date.fromY_m_d(dateElement.text()).inMillis
val id = EDUDZIENNIK_NOTE_ID.find(dateElement.attr("href"))?.get(0)?.crc32()
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt
index 33feb75e..17bc6017 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/edudziennik/data/web/EdudziennikWebTimetable.kt
@@ -57,7 +57,7 @@ class EdudziennikWebTimetable(override val data: DataEdudziennik,
val table = doc.select("#Schedule tbody").first()
- if (!table.text().contains("Brak planu lekcji.")) {
+ if (table?.text()?.contains("Brak planu lekcji.") == false) {
table.children().forEach { row ->
val rowElements = row.children()
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
index 49ee0d52..fce75981 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/messages/LibrusMessagesGetMessage.kt
@@ -35,7 +35,7 @@ class LibrusMessagesGetMessage(override val data: DataLibrus,
"messageId" to messageObject.id,
"archive" to 0
)) { doc ->
- val message = doc.select("response GetMessage data").first()
+ val message = doc.select("response GetMessage data").first() ?: return@messagesGet
val body = Base64.decode(message.select("Message").text(), Base64.DEFAULT)
.toString(Charset.defaultCharset())
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
index 4cb1e246..3bf890f1 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessage.kt
@@ -87,7 +87,7 @@ class LibrusSynergiaGetMessage(override val data: DataLibrus,
})
}
- val readDateText = readElement.select(".left").text()
+ val readDateText = readElement?.select(".left")?.text()
val readDate = when (readDateText.isNotNullNorEmpty()) {
true -> Date.fromIso(readDateText)
else -> 0
@@ -108,7 +108,7 @@ class LibrusSynergiaGetMessage(override val data: DataLibrus,
Message.TYPE_SENT -> {
- readElement.select("tr").forEachIndexed { i, receiver ->
+ readElement?.select("tr")?.forEachIndexed { i, receiver ->
if (i == 0) return@forEachIndexed // Skip the header
val receiverFullName = receiver.child(0).text()
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
index ffc8133a..b67dcdb4 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/librus/data/synergia/LibrusSynergiaGetMessages.kt
@@ -36,19 +36,19 @@ class LibrusSynergiaGetMessages(override val data: DataLibrus,
fun getRecipientId(name: String): Long = data.teacherList.singleOrNull {
it.fullNameLastFirst == name
- }?.id ?: {
+ }?.id ?: run {
val teacherObject = Teacher(
- profileId,
- -1 * Utils.crc16(name.swapFirstLastName().toByteArray()).toLong(),
- name.splitName()?.second!!,
- name.splitName()?.first!!
+ profileId,
+ -1 * Utils.crc16(name.swapFirstLastName().toByteArray()).toLong(),
+ name.splitName()?.second!!,
+ name.splitName()?.first!!
)
data.teacherList.put(teacherObject.id, teacherObject)
teacherObject.id
- }.invoke()
+ }
doc.select(".decorated.stretch tbody > tr").forEach { messageElement ->
- val url = messageElement.select("a").first().attr("href")
+ val url = messageElement.select("a").first()?.attr("href") ?: return@forEach
val id = Regexes.LIBRUS_MESSAGE_ID.find(url)?.get(1)?.toLong() ?: return@forEach
val subject = messageElement.child(3).text()
val sentDate = Date.fromIso(messageElement.child(4).text())
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt
index b23182ba..ee26f390 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebGetMessage.kt
@@ -40,13 +40,14 @@ class MobidziennikWebGetMessage(override val data: DataMobidziennik,
val doc = Jsoup.parse(text)
- val content = doc.select("#content").first()
+ val content = doc.select("#content").first() ?: return@webGet
val body = content.select(".wiadomosc_tresc").first()
+ val bodyHtml = body?.html() ?: ""
if (message.isReceived) {
var readDate = System.currentTimeMillis()
- Regexes.MOBIDZIENNIK_MESSAGE_READ_DATE.find(body.html())?.let {
+ Regexes.MOBIDZIENNIK_MESSAGE_READ_DATE.find(bodyHtml)?.let {
val date = Date(
it[3].toIntOrNull() ?: 2019,
monthFromName(it[2]),
@@ -71,35 +72,35 @@ class MobidziennikWebGetMessage(override val data: DataMobidziennik,
} else {
message.senderId = null
- content.select("table.spis tr:has(td)")?.forEach { recipientEl ->
- val senderEl = recipientEl.select("td:eq(1)")?.first() ?: return@forEach
+ content.select("table.spis tr:has(td)").forEach { recipientEl ->
+ val senderEl = recipientEl.select("td:eq(1)").first() ?: return@forEach
val senderName = senderEl.text().fixName()
val teacher = data.teacherList.singleOrNull { it.fullNameLastFirst == senderName }
val receiverId = teacher?.id ?: -1
var readDate = 0L
- val isReadEl = recipientEl.select("td:eq(4)")?.first() ?: return@forEach
+ val isReadEl = recipientEl.select("td:eq(4)").first() ?: return@forEach
if (isReadEl.html().contains("tak")) {
- val readDateEl = recipientEl.select("td:eq(5) small")?.first() ?: return@forEach
+ val readDateEl = recipientEl.select("td:eq(5) small").first() ?: return@forEach
Regexes.MOBIDZIENNIK_MESSAGE_SENT_READ_DATE.find(readDateEl.ownText())?.let {
val date = Date(
- it[3].toIntOrNull() ?: 2019,
- monthFromName(it[2]),
- it[1].toIntOrNull() ?: 1
+ it[3].toIntOrNull() ?: 2019,
+ monthFromName(it[2]),
+ it[1].toIntOrNull() ?: 1
)
val time = Time.fromH_m_s(
- it[4] // TODO blank string safety
+ it[4] // TODO blank string safety
)
readDate = date.combineWith(time)
}
}
val recipient = MessageRecipientFull(
- profileId = profileId,
- id = receiverId,
- messageId = message.id,
- readDate = readDate
+ profileId = profileId,
+ id = receiverId,
+ messageId = message.id,
+ readDate = readDate
)
recipient.fullName = teacher?.fullName ?: "?"
@@ -109,11 +110,11 @@ class MobidziennikWebGetMessage(override val data: DataMobidziennik,
}
// this line removes the sender and read date details
- body.select("div").remove()
+ body?.select("div")?.remove()
// this needs to be at the end
message.apply {
- this.body = body.html()
+ this.body = body?.html()
clearAttachments()
Regexes.MOBIDZIENNIK_WEB_ATTACHMENT.findAll(text).forEach { match ->
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt
index 5581dcc5..803ee48d 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesAll.kt
@@ -34,25 +34,25 @@ class MobidziennikWebMessagesAll(override val data: DataMobidziennik,
val doc = Jsoup.parse(text)
- val listElement = doc.getElementsByClass("spis")?.first()
+ val listElement = doc.getElementsByClass("spis").first()
if (listElement == null) {
data.setSyncNext(ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_ALL, 7*DAY)
onSuccess(ENDPOINT_MOBIDZIENNIK_WEB_MESSAGES_ALL)
return@webGet
}
val list = listElement.getElementsByClass("podswietl")
- list?.forEach { item ->
+ list.forEach { item ->
val id = item.attr("rel").replace("[^\\d]".toRegex(), "").toLongOrNull() ?: return@forEach
val subjectEl = item.select("td:eq(0) div").first()
- val subject = subjectEl.text()
+ val subject = subjectEl?.text() ?: ""
val addedDateEl = item.select("td:eq(1)").first()
- val addedDate = Date.fromIsoHm(addedDateEl.text())
+ val addedDate = Date.fromIsoHm(addedDateEl?.text())
val typeEl = item.select("td:eq(2) img").first()
var type = TYPE_RECEIVED
- if (typeEl.outerHtml().contains("mail_send.png"))
+ if (typeEl?.outerHtml()?.contains("mail_send.png") == true)
type = TYPE_SENT
val senderEl = item.select("td:eq(3) div").first()
@@ -60,13 +60,13 @@ class MobidziennikWebMessagesAll(override val data: DataMobidziennik,
if (type == TYPE_RECEIVED) {
// search sender teacher
- val senderName = senderEl.text().fixName()
+ val senderName = senderEl?.text().fixName()
senderId = data.teacherList.singleOrNull { it.fullNameLastFirst == senderName }?.id
data.messageRecipientList.add(MessageRecipient(profileId, -1, id))
} else {
// TYPE_SENT, so multiple recipients possible
- val recipientNames = senderEl.text().split(", ")
- for (recipientName in recipientNames) {
+ val recipientNames = senderEl?.text()?.split(", ")
+ recipientNames?.forEach { recipientName ->
val name = recipientName.fixName()
val recipientId = data.teacherList.singleOrNull { it.fullNameLastFirst == name }?.id ?: -1
data.messageRecipientIgnoreList.add(MessageRecipient(profileId, recipientId, id))
@@ -74,13 +74,13 @@ class MobidziennikWebMessagesAll(override val data: DataMobidziennik,
}
val message = Message(
- profileId = profileId,
- id = id,
- type = type,
- subject = subject,
- body = null,
- senderId = senderId,
- addedDate = addedDate
+ profileId = profileId,
+ id = id,
+ type = type,
+ subject = subject,
+ body = null,
+ senderId = senderId,
+ addedDate = addedDate
)
data.messageList.add(message)
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt
index be762228..5e5e5b19 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesInbox.kt
@@ -36,26 +36,26 @@ class MobidziennikWebMessagesInbox(override val data: DataMobidziennik,
val doc = Jsoup.parse(text)
- val list = doc.getElementsByClass("spis")?.first()?.getElementsByClass("podswietl")
+ val list = doc.getElementsByClass("spis").first()?.getElementsByClass("podswietl")
list?.forEach { item ->
val id = item.attr("rel").toLongOrNull() ?: return@forEach
val subjectEl = item.select("td:eq(0)").first()
var hasAttachments = false
- if (subjectEl.getElementsByTag("a").size != 0) {
+ if (subjectEl?.getElementsByTag("a")?.size ?: 0 > 0) {
hasAttachments = true
}
- val subject = subjectEl.ownText()
+ val subject = subjectEl?.ownText() ?: ""
val addedDateEl = item.select("td:eq(1) small").first()
- val addedDate = Date.fromIsoHm(addedDateEl.text())
+ val addedDate = Date.fromIsoHm(addedDateEl?.text())
val senderEl = item.select("td:eq(2)").first()
- val senderName = senderEl.ownText().fixName()
+ val senderName = senderEl?.ownText().fixName()
val senderId = data.teacherList.singleOrNull { it.fullNameLastFirst == senderName }?.id
data.messageRecipientIgnoreList.add(MessageRecipient(profileId, -1, id))
- val isRead = item.select("td:eq(3) span").first().hasClass("wiadomosc_przeczytana")
+ val isRead = item.select("td:eq(3) span").first()?.hasClass("wiadomosc_przeczytana") == true
val message = Message(
profileId = profileId,
diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesSent.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesSent.kt
index 543df329..80e54e59 100644
--- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesSent.kt
+++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/mobidziennik/data/web/MobidziennikWebMessagesSent.kt
@@ -40,37 +40,37 @@ class MobidziennikWebMessagesSent(override val data: DataMobidziennik,
val doc = Jsoup.parse(text)
- val list = doc.getElementsByClass("spis")?.first()?.getElementsByClass("podswietl")
+ val list = doc.getElementsByClass("spis").first()?.getElementsByClass("podswietl")
list?.forEach { item ->
val id = item.attr("rel").toLongOrNull() ?: return@forEach
val subjectEl = item.select("td:eq(0)").first()
var hasAttachments = false
- if (subjectEl.getElementsByTag("a").size != 0) {
+ if (subjectEl?.getElementsByTag("a")?.size ?: 0 > 0) {
hasAttachments = true
}
- val subject = subjectEl.ownText()
+ val subject = subjectEl?.ownText() ?: ""
- val readByString = item.select("td:eq(2)").first().text()
+ val readByString = item.select("td:eq(2)").first()?.text() ?: ""
val (readBy, sentTo) = Regexes.MOBIDZIENNIK_MESSAGE_SENT_READ_BY.find(readByString).let {
(it?.get(1)?.toIntOrNull() ?: 0) to (it?.get(2)?.toIntOrNull() ?: 0)
}
val recipientEl = item.select("td:eq(1) a span").first()
- val recipientNames = recipientEl.ownText().split(", ")
+ val recipientNames = recipientEl?.ownText()?.split(", ")
val readState = when (readBy) {
0 -> 0
sentTo -> 1
else -> -1
}.toLong()
- for (recipientName in recipientNames) {
+ recipientNames?.forEach { recipientName ->
val name = recipientName.fixName()
val recipientId = data.teacherList.singleOrNull { it.fullNameLastFirst == name }?.id ?: -1
data.messageRecipientIgnoreList.add(MessageRecipient(profileId, recipientId, -1, readState, id))
}
val addedDateEl = item.select("td:eq(3) small").first()
- val addedDate = Date.fromIsoHm(addedDateEl.text())
+ val addedDate = Date.fromIsoHm(addedDateEl?.text())
val message = Message(
profileId = profileId,
diff --git a/build.gradle b/build.gradle
index a8665c89..6b931333 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,7 +2,7 @@
buildscript {
ext {
- kotlin_version = '1.5.20'
+ kotlin_version = '1.5.30'
release = [
versionName: "4.10",
@@ -18,10 +18,10 @@ buildscript {
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.0.2'
+ classpath 'com.android.tools.build:gradle:7.0.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
@@ -37,11 +37,8 @@ allprojects {
}
repositories {
google()
- jcenter()
+ mavenCentral()
maven { url 'https://jitpack.io' }
- maven { url "https://kotlin.bintray.com/kotlinx/" }
- maven { url "https://dl.bintray.com/wulkanowy/wulkanowy" }
- maven { url "https://dl.bintray.com/undervoid/PowerPermission" }
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 80cea62c..4c24d72f 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Wed Feb 17 14:04:38 CET 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME