From 898066407d85a2844c87fa6fc0e8179977cabb9c Mon Sep 17 00:00:00 2001
From: Samantaz Fox <coding@samantaz.fr>
Date: Mon, 29 May 2023 12:41:53 +0200
Subject: [PATCH] Utils: Update 'decode_date' to take into account short "x
 ago" forms

---
 src/invidious/helpers/utils.cr | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/invidious/helpers/utils.cr b/src/invidious/helpers/utils.cr
index bcf7c963..48bf769f 100644
--- a/src/invidious/helpers/utils.cr
+++ b/src/invidious/helpers/utils.cr
@@ -111,24 +111,27 @@ def decode_date(string : String)
   else nil # Continue
   end
 
-  # String matches format "20 hours ago", "4 months ago"...
-  date = string.split(" ")[-3, 3]
-  delta = date[0].to_i
+  # String matches format "20 hours ago", "4 months ago", "20s ago", "15min ago"...
+  match = string.match(/(?<count>\d+) ?(?<span>[smhdwy]\w*) ago/)
 
-  case date[1]
-  when .includes? "second"
+  raise "Could not parse #{string}" if match.nil?
+
+  delta = match["count"].to_i
+
+  case match["span"]
+  when .starts_with? "s" # second(s)
     delta = delta.seconds
-  when .includes? "minute"
+  when .starts_with? "mi" # minute(s)
     delta = delta.minutes
-  when .includes? "hour"
+  when .starts_with? "h" # hour(s)
     delta = delta.hours
-  when .includes? "day"
+  when .starts_with? "d" # day(s)
     delta = delta.days
-  when .includes? "week"
+  when .starts_with? "w" # week(s)
     delta = delta.weeks
-  when .includes? "month"
+  when .starts_with? "mo" # month(s)
     delta = delta.months
-  when .includes? "year"
+  when .starts_with? "y" # year(s)
     delta = delta.years
   else
     raise "Could not parse #{string}"