perf: further optimize missing regex pre-compilations

pull/1365/head
Rayzien 3 days ago
parent d40ac6f229
commit 05fc3cdef3

@ -13,9 +13,13 @@ internal class StreamProcessExtractor(
private val stream: InputStream,
private val callback: ((Float, Long, String) -> Unit)?
) : Thread() {
private val p = Pattern.compile("\\[download\\]\\s+(\\d+\\.\\d)% .* ETA (\\d+):(\\d+)")
private val pAria2c = Pattern.compile("\\[#\\w{6}.*\\((\\d*\\.*\\d+)%\\).*?((\\d+)m)*((\\d+)s)*]")
private val pFFmpeg = Pattern.compile("size=.*")
companion object {
private val PATTERN_DEFAULT = Pattern.compile("\\[download\\]\\s+(\\d+\\.\\d)% .* ETA (\\d+):(\\d+)")
private val PATTERN_ARIA2C = Pattern.compile("\\[#\\w{6}.*\\((\\d*\\.*\\d+)%\\).*?((\\d+)m)*((\\d+)s)*]")
private val PATTERN_FFMPEG = Pattern.compile("size=.*")
}
private var progress = PERCENT
private var eta = ETA
@ -61,17 +65,17 @@ internal class StreamProcessExtractor(
}
private fun getProgress(line: String): Float {
val matcher = p.matcher(line)
val matcher = PATTERN_DEFAULT.matcher(line)
if (matcher.find()) {
return matcher.group(GROUP_PERCENT)!!.toFloat().also { progress = it }
}
val mAria2c = pAria2c.matcher(line)
val mAria2c = PATTERN_ARIA2C.matcher(line)
if (mAria2c.find()) {
return mAria2c.group(1)!!.toFloat().also { progress = it }
}
val mFFmpeg = pFFmpeg.matcher(line)
val mFFmpeg = PATTERN_FFMPEG.matcher(line)
if (mFFmpeg.find()) {
return 99f.also { progress = it }
}
@ -80,12 +84,12 @@ internal class StreamProcessExtractor(
}
private fun getEta(line: String): Long {
val matcher = p.matcher(line)
val matcher = PATTERN_DEFAULT.matcher(line)
if (matcher.find()) return convertToSeconds(
matcher.group(GROUP_MINUTES),
matcher.group(GROUP_SECONDS)
).also { eta = it.toLong() }.toLong() else {
val mAria2c = pAria2c.matcher(line)
val mAria2c = PATTERN_ARIA2C.matcher(line)
if (mAria2c.find()) return convertToSeconds(
mAria2c.group(3),
mAria2c.group(5)
@ -107,4 +111,4 @@ internal class StreamProcessExtractor(
private const val GROUP_MINUTES = 2
private const val GROUP_SECONDS = 3
}
}
}

@ -363,7 +363,6 @@ object Extensions {
fun String.appendLineToLog(line: String = ""): String {
val lines = this.lines().toMutableList()
val finishingProgressLinesRegex = Pattern.compile("\\[download]\\h+(100%|[a-zA-Z])")
if (line.isNotBlank()) {
var newline = ""
@ -380,13 +379,13 @@ object Extensions {
return lines.distinct().filterNot {
((it.contains("[download") || it.contains(") CN:")) && !finishingProgressLinesRegex.matcher(it).find())
((it.contains("[download") || it.contains(") CN:")) && !FINISHING_PROGRESS_LINES_REGEX.matcher(it).find())
|| it.contains("does not pass filter (id")
}.joinToString("\n") + newline
}
return lines.filterNot {
((it.contains("[download") || it.contains(") CN:")) && !finishingProgressLinesRegex.matcher(it).find())
((it.contains("[download") || it.contains(") CN:")) && !FINISHING_PROGRESS_LINES_REGEX.matcher(it).find())
|| it.contains("does not pass filter (id")
}.joinToString("\n")
}

Loading…
Cancel
Save