Skip to content

Commit

Permalink
refactor: rename variables & functions, update to 1.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
patrick-choe committed Oct 2, 2020
1 parent 9bff4e2 commit 0f51d65
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 66 deletions.
12 changes: 1 addition & 11 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,4 @@ cache:

install:
- ./gradlew test
- ./gradlew publishToMavenLocal

after_success:
- wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh
- chmod +x send.sh
- ./send.sh success $WEBHOOK_URL

after_failure:
- wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh
- chmod +x send.sh
- ./send.sh failure $WEBHOOK_URL
- ./gradlew publishToMavenLocal
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ allprojects {

```groovy
dependencies {
implementation 'io.teamif:comcigan-lib:1.2.0'
implementation 'io.teamif:comcigan-lib:1.2.1'
}
```

Expand All @@ -34,7 +34,7 @@ allprojects {

```kotlin
dependencies {
implementation("io.teamif:comcigan-lib:1.2.0")
implementation("io.teamif:comcigan-lib:1.2.1")
}
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ plugins {
}

group = "io.teamif"
version = "1.2.0"
version = "1.2.1"

repositories {
maven("https://repo.maven.apache.org/maven2/")
Expand Down
6 changes: 4 additions & 2 deletions src/main/kotlin/io/teamif/patrick/comcigan/ComciganAPI.kt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ object ComciganAPI {
internal val SEARCH_URL: String

init {
SCRIPT = SCRIPT_REGEX.search(("$ROOT_URL/st").open())
SCRIPT = SCRIPT_REGEX.search(("$ROOT_URL/st").openURL())
ROUTE = ROUTE_REGEX.search(SCRIPT)
PREFIX = PREFIX_REGEX.search(SCRIPT)
ORIGINAL_ID = ORIGINAL_ID_REGEX.search(SCRIPT)
Expand All @@ -75,7 +75,8 @@ object ComciganAPI {
SEARCH_URL = "$BASE_URL${ROUTE.substring(8)}"
}

internal fun String.open(charset: Charset = Charset.forName(CHARSET)): String =
@JvmStatic
internal fun String.openURL(charset: Charset = Charset.forName(CHARSET)): String =
URL(this).readText(charset)

/**
Expand All @@ -102,6 +103,7 @@ object ComciganAPI {
* @throws IllegalArgumentException when more than one results found
* @see [ComciganSchool]
*/
@JvmStatic
@Throws(NoSuchElementException::class, IllegalArgumentException::class)
fun newSchool(name: String): ComciganSchool = ComciganSchool(name)
}
96 changes: 46 additions & 50 deletions src/main/kotlin/io/teamif/patrick/comcigan/ComciganSchool.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@

package io.teamif.patrick.comcigan

import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import com.google.gson.stream.JsonReader
import io.teamif.patrick.comcigan.ComciganAPI.open
import io.teamif.patrick.comcigan.ComciganAPI.openURL
import java.io.StringReader
import java.net.URLEncoder
import java.util.Base64
Expand All @@ -47,16 +47,16 @@ class ComciganSchool internal constructor(name: String) {

init {
val json = "${ComciganAPI.SEARCH_URL}${URLEncoder.encode(name, ComciganAPI.CHARSET)}"
.json.asJsonObject.getAsJsonArray("학교검색")
.jsonFromURL.getAsJsonArray("학교검색")

when (json.count()) {
0 -> throw NoSuchElementException("No schools have been searched by the name passed.")
1 -> json.first().asJsonArray
else -> throw IllegalArgumentException("More than one school is searched by the name passed.")
}.run {
schoolName = get(2).asString
schoolCode = get(3).asString
schoolUrls = listOf(0.schoolUrl, 1.schoolUrl)
}.let { array ->
schoolName = array[2].asString
schoolCode = array[3].asString
schoolUrls = listOf(schoolWeekURL(0), schoolWeekURL(1))

refresh()
}
Expand All @@ -66,61 +66,57 @@ class ComciganSchool internal constructor(name: String) {
* Refreshes the data by parsing the Comcigan Website
*/
fun refresh() {
val weekArray = ArrayList<SchoolWeekData>()

schoolUrls.map { url ->
url.json.asJsonObject.run {
schoolData = SchoolRawData(schoolUrls.map { url ->
url.jsonFromURL.asJsonObject.run {
val shortSubjects = getAsJsonArray(ComciganAPI.SUBJECT_ID).mapNotNull { it.asString }
val longSubjects = getAsJsonArray("${ComciganAPI.SUBJECT_ID}").mapNotNull { it.asString }
val teachers = getAsJsonArray(ComciganAPI.TEACHER_ID).mapNotNull { it.asString }

val grades = getAsJsonArray(ComciganAPI.DAILY_ID).mapNotNull { it.asJsonArray }.drop(1).filter { it.count() > 0 }

weekArray.add(
SchoolWeekData(grades.map { grade ->
val classrooms = grade.mapNotNull { it.asJsonArray }.drop(1)

SchoolGradeData(classrooms.map { classroom ->
val days = classroom.mapNotNull { it.asJsonArray }.drop(1)

SchoolClassroomData(days.map { day ->
val codes = day.mapNotNull { it.asString }.drop(1).dropLastWhile { it == "0" }

SchoolDayData(codes.map { code ->
when (code) {
"0" -> SchoolPeriodData.NULL
else -> {
val subject = code.takeLast(2).toInt()
val teacher = code.dropLast(2).toInt()

SchoolPeriodData(
shortSubjects[subject],
longSubjects[subject],
teachers[teacher]
)
}
}
})
})
SchoolWeekData(grades.map { grade ->
val classrooms = grade.mapNotNull { it.asJsonArray }.drop(1)

SchoolGradeData(classrooms.map { classroom ->
val days = classroom.mapNotNull { it.asJsonArray }.drop(1)

SchoolClassroomData(days.map { day ->
val codes = day.mapNotNull { it.asString }.drop(1).dropLastWhile { it == "0" }

SchoolDayData(codes.map { code ->
when (code) {
"0" -> SchoolPeriodData.NULL
else -> {
val subject = code.takeLast(2).toInt()
val teacher = code.dropLast(2).toInt()

SchoolPeriodData(
shortSubjects[subject],
longSubjects[subject],
teachers[teacher]
)
}
}
})
})
)
})
})
}
}

schoolData = SchoolRawData(weekArray)
})
}

private val Int.schoolUrl: String
get() {
val byteArray = "${ComciganAPI.PREFIX}${schoolCode}_0_$this".toByteArray()
private fun schoolWeekURL(index: Int): String {
val byteArray = "${ComciganAPI.PREFIX}${schoolCode}_0_$index".toByteArray()

return "${ComciganAPI.BASE_URL}?${Base64.getUrlEncoder().encode(byteArray).decodeToString()}"
.run { replace("=", "") }
return "${ComciganAPI.BASE_URL}?${Base64.getUrlEncoder().encodeToString(byteArray)}".dropLastWhile {
it == '='
}
}

private val String.json: JsonElement
get() = requireNotNull(JsonParser.parseReader(JsonReader(StringReader(open(Charsets.UTF_8))).apply {
isLenient = true
}))
private val String.jsonFromURL: JsonObject
get() = requireNotNull(
JsonParser.parseReader(JsonReader(StringReader(openURL(Charsets.UTF_8))).apply {
isLenient = true
})
) as JsonObject
}

0 comments on commit 0f51d65

Please sign in to comment.