From 7e0f69d95dd854510095384967b56156739bc564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 15 Oct 2021 22:37:46 +0200 Subject: [PATCH] [Gradle] Migrate JCenter dependencies to JitPack. (#97) * [Gradle] Replace JCenter-based dependencies with JitPack. * [API] Fix Jsoup usage after dependency update. --- app/build.gradle | 39 ++++++++++--------- .../data/web/EdudziennikWebAnnouncements.kt | 2 +- .../data/web/EdudziennikWebGrades.kt | 4 +- .../data/web/EdudziennikWebHomework.kt | 2 +- .../data/web/EdudziennikWebNotes.kt | 2 +- .../data/web/EdudziennikWebTimetable.kt | 2 +- .../data/messages/LibrusMessagesGetMessage.kt | 2 +- .../data/synergia/LibrusSynergiaGetMessage.kt | 4 +- .../synergia/LibrusSynergiaGetMessages.kt | 14 +++---- .../data/web/MobidziennikWebGetMessage.kt | 33 ++++++++-------- .../data/web/MobidziennikWebMessagesAll.kt | 30 +++++++------- .../data/web/MobidziennikWebMessagesInbox.kt | 12 +++--- .../data/web/MobidziennikWebMessagesSent.kt | 14 +++---- build.gradle | 11 ++---- gradle/wrapper/gradle-wrapper.properties | 2 +- 15 files changed, 86 insertions(+), 87 deletions(-) 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("" + text.trim() + "
") 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