]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Clearer periods in videos list
authorChocobozzz <me@florianbigard.com>
Wed, 18 Nov 2020 11:12:14 +0000 (12:12 +0100)
committerChocobozzz <me@florianbigard.com>
Wed, 18 Nov 2020 11:12:14 +0000 (12:12 +0100)
client/src/app/shared/shared-main/angular/from-now.pipe.ts
client/src/app/shared/shared-video-miniature/abstract-video-list.ts

index 5d85590bb11194a94c590948213c52f48dca06d4..5e78328077528b068e835ffabc7c970b7dc2b454 100644 (file)
@@ -8,27 +8,27 @@ export class FromNowPipe implements PipeTransform {
     const argDate = new Date(arg)
     const seconds = Math.floor((Date.now() - argDate.getTime()) / 1000)
 
-    let interval = Math.floor(seconds / 31536000)
+    let interval = Math.round(seconds / 31536000)
     if (interval > 1) return $localize`${interval} years ago`
     if (interval === 1) return $localize`${interval} year ago`
 
-    interval = Math.floor(seconds / 2592000)
+    interval = Math.round(seconds / 2592000)
     if (interval > 1) return $localize`${interval} months ago`
     if (interval === 1) return $localize`${interval} month ago`
 
-    interval = Math.floor(seconds / 604800)
+    interval = Math.round(seconds / 604800)
     if (interval > 1) return $localize`${interval} weeks ago`
     if (interval === 1) return $localize`${interval} week ago`
 
-    interval = Math.floor(seconds / 86400)
+    interval = Math.round(seconds / 86400)
     if (interval > 1) return $localize`${interval} days ago`
     if (interval === 1) return $localize`${interval} day ago`
 
-    interval = Math.floor(seconds / 3600)
+    interval = Math.round(seconds / 3600)
     if (interval > 1) return $localize`${interval} hours ago`
     if (interval === 1) return $localize`${interval} hour ago`
 
-    interval = Math.floor(seconds / 60)
+    interval = Math.round(seconds / 60)
     if (interval >= 1) return $localize`${interval} min ago`
 
     return $localize`just now`
index 1b5b8a64b00e00600d41d24fb506e6987756a3a5..da05e15fbd0295f87299f20d03d5e5dd2fa52859 100644 (file)
@@ -14,7 +14,7 @@ import {
 } from '@app/core'
 import { DisableForReuseHook } from '@app/core/routing/disable-for-reuse-hook'
 import { GlobalIconName } from '@app/shared/shared-icons'
-import { isLastMonth, isLastWeek, isToday, isYesterday } from '@shared/core-utils/miscs/date'
+import { isLastMonth, isLastWeek, isThisMonth, isToday, isYesterday } from '@shared/core-utils/miscs/date'
 import { ServerConfig, VideoSortField } from '@shared/models'
 import { NSFWPolicyType } from '@shared/models/videos/nsfw-policy.type'
 import { Syndication, Video } from '../shared-main'
@@ -24,9 +24,10 @@ enum GroupDate {
   UNKNOWN = 0,
   TODAY = 1,
   YESTERDAY = 2,
-  LAST_WEEK = 3,
-  LAST_MONTH = 4,
-  OLDER = 5
+  THIS_WEEK = 3,
+  THIS_MONTH = 4,
+  LAST_MONTH = 5,
+  OLDER = 6
 }
 
 @Directive()
@@ -111,7 +112,8 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor
       [GroupDate.UNKNOWN]: null,
       [GroupDate.TODAY]: $localize`Today`,
       [GroupDate.YESTERDAY]: $localize`Yesterday`,
-      [GroupDate.LAST_WEEK]: $localize`Last week`,
+      [GroupDate.THIS_WEEK]: $localize`This week`,
+      [GroupDate.THIS_MONTH]: $localize`This month`,
       [GroupDate.LAST_MONTH]: $localize`Last month`,
       [GroupDate.OLDER]: $localize`Older`
     }
@@ -214,46 +216,48 @@ export abstract class AbstractVideoList implements OnInit, OnDestroy, DisableFor
   buildGroupedDateLabels () {
     let currentGroupedDate: GroupDate = GroupDate.UNKNOWN
 
-    for (const video of this.videos) {
-      const publishedDate = video.publishedAt
-
-      if (currentGroupedDate <= GroupDate.TODAY && isToday(publishedDate)) {
-        if (currentGroupedDate === GroupDate.TODAY) continue
-
-        currentGroupedDate = GroupDate.TODAY
-        this.groupedDates[ video.id ] = currentGroupedDate
-        continue
-      }
-
-      if (currentGroupedDate <= GroupDate.YESTERDAY && isYesterday(publishedDate)) {
-        if (currentGroupedDate === GroupDate.YESTERDAY) continue
-
-        currentGroupedDate = GroupDate.YESTERDAY
-        this.groupedDates[ video.id ] = currentGroupedDate
-        continue
+    const periods = [
+      {
+        value: GroupDate.TODAY,
+        validator: (d: Date) => isToday(d)
+      },
+      {
+        value: GroupDate.YESTERDAY,
+        validator: (d: Date) => isYesterday(d)
+      },
+      {
+        value: GroupDate.THIS_WEEK,
+        validator: (d: Date) => isLastWeek(d)
+      },
+      {
+        value: GroupDate.THIS_MONTH,
+        validator: (d: Date) => isThisMonth(d)
+      },
+      {
+        value: GroupDate.LAST_MONTH,
+        validator: (d: Date) => isLastMonth(d)
+      },
+      {
+        value: GroupDate.OLDER,
+        validator: () => true
       }
+    ]
 
-      if (currentGroupedDate <= GroupDate.LAST_WEEK && isLastWeek(publishedDate)) {
-        if (currentGroupedDate === GroupDate.LAST_WEEK) continue
-
-        currentGroupedDate = GroupDate.LAST_WEEK
-        this.groupedDates[ video.id ] = currentGroupedDate
-        continue
-      }
+    for (const video of this.videos) {
+      const publishedDate = video.publishedAt
 
-      if (currentGroupedDate <= GroupDate.LAST_MONTH && isLastMonth(publishedDate)) {
-        if (currentGroupedDate === GroupDate.LAST_MONTH) continue
+      for (let i = 0; i < periods.length; i++) {
+        const period = periods[i]
 
-        currentGroupedDate = GroupDate.LAST_MONTH
-        this.groupedDates[ video.id ] = currentGroupedDate
-        continue
-      }
+        if (currentGroupedDate <= period.value && period.validator(publishedDate)) {
 
-      if (currentGroupedDate <= GroupDate.OLDER) {
-        if (currentGroupedDate === GroupDate.OLDER) continue
+          if (currentGroupedDate !== period.value) {
+            currentGroupedDate = period.value
+            this.groupedDates[ video.id ] = currentGroupedDate
+          }
 
-        currentGroupedDate = GroupDate.OLDER
-        this.groupedDates[ video.id ] = currentGroupedDate
+          break
+        }
       }
     }
   }