From 6d0b53f0349c4c5d43e992e09bdfd666f7bdb907 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= <crazyserver@gmail.com>
Date: Fri, 22 Apr 2022 10:04:01 +0200
Subject: [PATCH] MOBILE-3881 timeline: Fix minimim time to get events from

---
 .../block/timeline/components/events/events.ts   |  6 +++---
 src/addons/block/timeline/services/timeline.ts   | 16 +++++++++++++---
 src/core/singletons/time.ts                      |  2 +-
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/addons/block/timeline/components/events/events.ts b/src/addons/block/timeline/components/events/events.ts
index 4e0155873..fe986201f 100644
--- a/src/addons/block/timeline/components/events/events.ts
+++ b/src/addons/block/timeline/components/events/events.ts
@@ -18,10 +18,10 @@ import { CoreDomUtils } from '@services/utils/dom';
 import { CoreTextUtils } from '@services/utils/text';
 import { CoreTimeUtils } from '@services/utils/time';
 import { CoreCourse } from '@features/course/services/course';
-import moment from 'moment';
 import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper';
 import { AddonCalendarEvent } from '@addons/calendar/services/calendar';
 import { CoreEnrolledCourseDataWithOptions } from '@features/courses/services/courses-helper';
+import { AddonBlockTimeline } from '../../services/timeline';
 
 /**
  * Directive to render a list of events in course overview.
@@ -94,8 +94,8 @@ export class AddonBlockTimelineEventsComponent implements OnChanges {
      * @return Filtered events.
      */
     protected async filterEventsByTime(start: number, end?: number): Promise<AddonBlockTimelineEvent[]> {
-        start = moment().add(start, 'days').startOf('day').unix();
-        end = end !== undefined ? moment().add(end, 'days').startOf('day').unix() : end;
+        start = AddonBlockTimeline.getDayStart(start);
+        end = end !== undefined ? AddonBlockTimeline.getDayStart(end) : end;
 
         return await Promise.all(this.events.filter((event) => {
             if (end) {
diff --git a/src/addons/block/timeline/services/timeline.ts b/src/addons/block/timeline/services/timeline.ts
index 831c5c5c5..c37f36591 100644
--- a/src/addons/block/timeline/services/timeline.ts
+++ b/src/addons/block/timeline/services/timeline.ts
@@ -55,7 +55,7 @@ export class AddonBlockTimelineProvider {
     ): Promise<{ events: AddonCalendarEvent[]; canLoadMore?: number }> {
         const site = await CoreSites.getSite(siteId);
 
-        const time = moment().subtract(14, 'days').unix(); // Check two weeks ago.
+        const time = this.getDayStart(-14); // Check two weeks ago.
 
         const data: AddonCalendarGetActionEventsByCourseWSParams = {
             timesortfrom: time,
@@ -109,7 +109,7 @@ export class AddonBlockTimelineProvider {
     ): Promise<{[courseId: string]: { events: AddonCalendarEvent[]; canLoadMore?: number } }> {
         const site = await CoreSites.getSite(siteId);
 
-        const time = moment().subtract(14, 'days').unix(); // Check two weeks ago.
+        const time = this.getDayStart(-14); // Check two weeks ago.
 
         const data: AddonCalendarGetActionEventsByCoursesWSParams = {
             timesortfrom: time,
@@ -164,7 +164,7 @@ export class AddonBlockTimelineProvider {
     ): Promise<{ events: AddonCalendarEvent[]; canLoadMore?: number }> {
         const site = await CoreSites.getSite(siteId);
 
-        const timesortfrom = moment().subtract(14, 'days').unix(); // Check two weeks ago.
+        const timesortfrom = this.getDayStart(-14); // Check two weeks ago.
         const limitnum = AddonBlockTimelineProvider.EVENTS_LIMIT;
 
         const data: AddonCalendarGetActionEventsByTimesortWSParams = {
@@ -275,6 +275,16 @@ export class AddonBlockTimelineProvider {
         };
     }
 
+    /**
+     * Returns the timestamp at the start of the day with an optional offset.
+     *
+     * @param daysOffset Offset days to add or substract.
+     * @return timestamp.
+     */
+    getDayStart(daysOffset = 0): number {
+        return moment().startOf('day').add(daysOffset, 'days').unix();
+    }
+
 }
 
 export const AddonBlockTimeline = makeSingleton(AddonBlockTimelineProvider);
diff --git a/src/core/singletons/time.ts b/src/core/singletons/time.ts
index 6b222937b..5c95ed837 100644
--- a/src/core/singletons/time.ts
+++ b/src/core/singletons/time.ts
@@ -81,7 +81,7 @@ export class CoreTime {
     /**
      * Converts a number of seconds into a short human readable format: minutes and seconds, in fromat: 3' 27''.
      *
-     * @param seconds Seconds
+     * @param duration Duration in seconds.
      * @return Short human readable text.
      */
     static formatTimeShort(duration: number): string {