[Gradle] Migrate JCenter dependencies to JitPack. (#97)

* [Gradle] Replace JCenter-based dependencies with JitPack.

* [API] Fix Jsoup usage after dependency update.
This commit is contained in:
Kuba Szczodrzyński 2021-10-15 22:37:46 +02:00 committed by GitHub
parent fa318d4509
commit 7e0f69d95d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 86 additions and 87 deletions

View File

@ -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"
}

View File

@ -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)

View File

@ -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 ->

View File

@ -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())

View File

@ -29,7 +29,7 @@ class EdudziennikWebNotes(override val data: DataEdudziennik,
val doc = Jsoup.parseBodyFragment("<table>" + text.trim() + "</table>")
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()

View File

@ -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()

View File

@ -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())

View File

@ -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()

View File

@ -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())

View File

@ -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 ->

View File

@ -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)

View File

@ -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,

View File

@ -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,

View File

@ -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" }
}
}

View File

@ -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