From 04f8307fd944635f4aae010c9721007111595fb0 Mon Sep 17 00:00:00 2001
From: Gauthier <gotson@users.noreply.github.com>
Date: Tue, 17 Jan 2023 19:24:20 +0800
Subject: [PATCH] move date formatters to KomgaHelper (#14989)

apply UTC timezone to formatters
return time as 0 if parsing fails
---
 src/all/komga/CHANGELOG.md                       |  8 ++++++++
 src/all/komga/build.gradle                       |  2 +-
 .../tachiyomi/extension/all/komga/Komga.kt       | 16 +++++++---------
 .../tachiyomi/extension/all/komga/KomgaHelper.kt | 14 ++++++++++++++
 4 files changed, 30 insertions(+), 10 deletions(-)
 create mode 100644 src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/KomgaHelper.kt

diff --git a/src/all/komga/CHANGELOG.md b/src/all/komga/CHANGELOG.md
index a6a84a65a..420d6aae6 100644
--- a/src/all/komga/CHANGELOG.md
+++ b/src/all/komga/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 1.3.44
+
+Minimum Komga version required: `0.151.0`
+
+### Fix
+
+* Better date/time parsing
+
 ## 1.3.43
 
 Minimum Komga version required: `0.151.0`
diff --git a/src/all/komga/build.gradle b/src/all/komga/build.gradle
index 75f7e2ff5..f7c3cc8c3 100644
--- a/src/all/komga/build.gradle
+++ b/src/all/komga/build.gradle
@@ -6,7 +6,7 @@ ext {
     extName = 'Komga'
     pkgNameSuffix = 'all.komga'
     extClass = '.KomgaFactory'
-    extVersionCode = 43
+    extVersionCode = 44
 }
 
 dependencies {
diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
index 74047675c..954bc6988 100644
--- a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
+++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/Komga.kt
@@ -46,8 +46,6 @@ import uy.kohesive.injekt.Injekt
 import uy.kohesive.injekt.api.get
 import uy.kohesive.injekt.injectLazy
 import java.security.MessageDigest
-import java.text.SimpleDateFormat
-import java.util.Date
 import java.util.Locale
 
 open class Komga(suffix: String = "") : ConfigurableSource, UnmeteredSource, HttpSource() {
@@ -302,26 +300,26 @@ open class Komga(suffix: String = "") : ConfigurableSource, UnmeteredSource, Htt
 
     private fun parseDate(date: String?): Long =
         if (date == null)
-            Date().time
+            0
         else {
             try {
-                SimpleDateFormat("yyyy-MM-dd", Locale.US).parse(date).time
+                KomgaHelper.formatterDate.parse(date)?.time ?: 0
             } catch (ex: Exception) {
-                Date().time
+                0
             }
         }
 
     private fun parseDateTime(date: String?): Long =
         if (date == null)
-            Date().time
+            0
         else {
             try {
-                SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US).parse(date).time
+                KomgaHelper.formatterDateTime.parse(date)?.time ?: 0
             } catch (ex: Exception) {
                 try {
-                    SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S", Locale.US).parse(date).time
+                    KomgaHelper.formatterDateTimeMilli.parse(date)?.time ?: 0
                 } catch (ex: Exception) {
-                    Date().time
+                    0
                 }
             }
         }
diff --git a/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/KomgaHelper.kt b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/KomgaHelper.kt
new file mode 100644
index 000000000..0f91a5826
--- /dev/null
+++ b/src/all/komga/src/eu/kanade/tachiyomi/extension/all/komga/KomgaHelper.kt
@@ -0,0 +1,14 @@
+package eu.kanade.tachiyomi.extension.all.komga
+
+import java.text.SimpleDateFormat
+import java.util.Locale
+import java.util.TimeZone
+
+object KomgaHelper {
+    val formatterDate = SimpleDateFormat("yyyy-MM-dd", Locale.US)
+        .apply { timeZone = TimeZone.getTimeZone("UTC") }
+    val formatterDateTime = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.US)
+        .apply { timeZone = TimeZone.getTimeZone("UTC") }
+    val formatterDateTimeMilli = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S", Locale.US)
+        .apply { timeZone = TimeZone.getTimeZone("UTC") }
+}