From eb1bcac1757e2f4d81f941bd410cb999e09a2905 Mon Sep 17 00:00:00 2001 From: vianh Date: Fri, 2 Sep 2022 18:36:00 +0700 Subject: [PATCH] [NetTruyen] Synchronize tags with mutex, use WordSet as suggestion --- .../kotatsu/parsers/site/NetTruyenParser.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt index afe0671e..d05b9bf9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt @@ -2,6 +2,8 @@ package org.koitharu.kotatsu.parsers.site import androidx.collection.ArrayMap import androidx.collection.ArraySet +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import org.koitharu.kotatsu.parsers.* import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.NotFoundException @@ -20,6 +22,7 @@ class NetTruyenParser(override val context: MangaLoaderContext) : override val sortOrders: Set get() = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.NEWEST, SortOrder.RATING) + private val mutex = Mutex() private val dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US) private var tagCache: ArrayMap? = null @@ -66,10 +69,10 @@ class NetTruyenParser(override val context: MangaLoaderContext) : return 0L } - val timeWords = listOf("giây", "phút", "giờ", "ngày") + val timeWords = arrayOf("giây", "phút", "giờ", "ngày") val calendar = Calendar.getInstance() val timeArr = timeText.split(' ') - if (timeText.containsAny(timeWords)) { + if (WordSet(*timeWords).anyWordIn(timeText)) { val timeSuffix = timeArr.getOrNull(1) val timeDiff = timeArr.getOrNull(0)?.toIntOrNull() ?: return 0L when (timeSuffix) { @@ -108,8 +111,8 @@ class NetTruyenParser(override val context: MangaLoaderContext) : append("https://") append(getDomain()) if (isSearching) { - append("/tim-truyen?keyword=) - append(query.urlEncoded()) + append("/tim-truyen?keyword=") + append(query!!.urlEncoded()) append("&page=") append(page) } else { @@ -194,8 +197,8 @@ class NetTruyenParser(override val context: MangaLoaderContext) : return tagSet } - private suspend fun getOrCreateTagMap(): ArrayMap { - tagCache?.let { return it } + private suspend fun getOrCreateTagMap(): ArrayMap = mutex.withLock { + tagCache?.let { return@withLock it } val doc = context.httpGet("/tim-truyen-nang-cao".toAbsoluteUrl(getDomain())).parseHtml() val tagItems = doc.select("div.genre-item") val result = ArrayMap(tagItems.size) @@ -205,7 +208,7 @@ class NetTruyenParser(override val context: MangaLoaderContext) : result[title] = MangaTag(title = title, key = key, source = source) } tagCache = result - return result + result } private fun getSortOrderKey(sortOrder: SortOrder) = when (sortOrder) { @@ -215,7 +218,4 @@ class NetTruyenParser(override val context: MangaLoaderContext) : SortOrder.RATING -> 20 else -> throw IllegalArgumentException("Sort order ${sortOrder.name} not supported") } - - private fun String.containsAny(items: List) = items.any { this.contains(it, ignoreCase = true) } - }