From 0ebba0d10cffe5e59e5d1973c59b2be7b76523c8 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 15 Jul 2024 14:32:46 +0200 Subject: [PATCH] fix: bugs in time parsing logic causing false (milli) second count --- app/build.gradle.kts | 2 +- .../com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt | 3 ++- app/src/main/java/com/github/libretube/util/TextUtils.kt | 5 ++++- app/src/test/java/com/github/libretube/TextParserTest.kt | 4 +++- gradle/libs.versions.toml | 2 -- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5cd3e1eaf..eca981a35 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -145,5 +145,5 @@ dependencies { implementation(libs.androidx.paging) /* Testing */ - testImplementation(libs.testng) + testImplementation(libs.junit) } diff --git a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt index bfebc5239..135b138a4 100644 --- a/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt +++ b/app/src/main/java/com/github/libretube/ui/dialogs/SubmitSegmentDialog.kt @@ -79,7 +79,7 @@ class SubmitSegmentDialog : DialogFragment() { requireDialog().hide() - val startTime = binding.startTime.text.toString().parseDurationString() + var startTime = binding.startTime.text.toString().parseDurationString() var endTime = binding.endTime.text.toString().parseDurationString() if (endTime == null || startTime == null || startTime > endTime) { @@ -87,6 +87,7 @@ class SubmitSegmentDialog : DialogFragment() { return } + startTime = maxOf(startTime, 0f) if (duration != null) { // the end time can't be greater than the video duration endTime = minOf(endTime, duration!!.toFloat()) diff --git a/app/src/main/java/com/github/libretube/util/TextUtils.kt b/app/src/main/java/com/github/libretube/util/TextUtils.kt index 8ba8d0b2a..0ee90747e 100644 --- a/app/src/main/java/com/github/libretube/util/TextUtils.kt +++ b/app/src/main/java/com/github/libretube/util/TextUtils.kt @@ -63,6 +63,7 @@ object TextUtils { var milliseconds = 0 var inMillis = false + var millisLength = 0 for (char in timeString) { if (inMillis) { @@ -70,6 +71,7 @@ object TextUtils { milliseconds *= 10 milliseconds += char.digitToInt() + millisLength++ } else if (char.isDigit()) { secondsScoped *= 10 secondsScoped += char.digitToInt() @@ -82,8 +84,9 @@ object TextUtils { inMillis = true } } + secondsTotal += secondsScoped - val millisDecimal = milliseconds.toFloat() / pow(10, milliseconds.toString().length) + val millisDecimal = milliseconds.toFloat() / pow(10, millisLength) return secondsTotal.toFloat() + millisDecimal } diff --git a/app/src/test/java/com/github/libretube/TextParserTest.kt b/app/src/test/java/com/github/libretube/TextParserTest.kt index 8a7a0300f..f3011ca08 100644 --- a/app/src/test/java/com/github/libretube/TextParserTest.kt +++ b/app/src/test/java/com/github/libretube/TextParserTest.kt @@ -2,8 +2,8 @@ package com.github.libretube import com.github.libretube.util.TextUtils.parseDurationString import com.github.libretube.util.TextUtils.toTimeInSeconds -import org.junit.Test import org.junit.Assert.assertEquals +import org.junit.Test class TextParserTest { @Test @@ -12,5 +12,7 @@ class TextParserTest { assertEquals(1520L, "1520".toTimeInSeconds()) assertEquals(15L * 60 + 20, "15:20.25".toTimeInSeconds()) assertEquals(15f * 60 + 20 + 0.25f, "15:20.25".parseDurationString()) + assertEquals(20f, "00:20".parseDurationString()) + assertEquals(60.02503f, "1:00.02503".parseDurationString()) } } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5a438a399..bbf6cfaac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,6 @@ profileinstaller = "1.3.1" paging = "3.3.0" collection = "1.4.1" swiperefreshlayout = "1.1.0" -testng = "7.10.2" [libraries] androidx-activity = { group = "androidx.activity", name = "activity-ktx", version.ref = "activity" } @@ -84,7 +83,6 @@ androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profi androidx-paging = { group = "androidx.paging", name = "paging-runtime-ktx", version.ref = "paging" } androidx-collection = { group = "androidx.collection", name = "collection", version.ref = "collection" } androidx-swiperefreshlayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swiperefreshlayout" } -testng = { group = "org.testng", name = "testng", version.ref = "testng" } [plugins] androidTest = { id = "com.android.test", version.ref = "gradle" }