Skip to content

Commit 1ba1c2d

Browse files
authored
Merge pull request #410 from Zlendy/dayjs
refactor: Replace `moment` with `dayjs`
2 parents 7f03e7d + 26173e5 commit 1ba1c2d

10 files changed

Lines changed: 60 additions & 53 deletions

File tree

backend/classes/backup.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const fs = require("fs");
33
const path = require("path");
44
const configClass = require("./config");
55

6-
const moment = require("moment");
6+
const dayjs = require("dayjs");
77
const Logging = require("./logging");
88

99
const taskstate = require("../logging/taskstate");
@@ -50,7 +50,7 @@ async function backup(refLog) {
5050
// Get data from each table and append it to the backup file
5151

5252
try {
53-
let now = moment();
53+
let now = dayjs();
5454
const backuppath = "./" + backupfolder;
5555

5656
if (!fs.existsSync(backuppath)) {
@@ -78,8 +78,8 @@ async function backup(refLog) {
7878
return;
7979
}
8080

81-
// const backupPath = `../backup-data/backup_${now.format('yyyy-MM-DD HH-mm-ss')}.json`;
82-
const directoryPath = path.join(__dirname, "..", backupfolder, `backup_${now.format("yyyy-MM-DD HH-mm-ss")}.json`);
81+
// const backupPath = `../backup-data/backup_${now.format('YYYY-MM-DD HH-mm-ss')}.json`;
82+
const directoryPath = path.join(__dirname, "..", backupfolder, `backup_${now.format("YYYY-MM-DD HH-mm-ss")}.json`);
8383
refLog.logData.push({ color: "yellow", Message: "Begin Backup " + directoryPath });
8484
const stream = fs.createWriteStream(directoryPath, { flags: "a" });
8585
stream.on("error", async (error) => {

backend/classes/logging.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
const db = require("../db");
2-
const moment = require("moment");
2+
const dayjs = require("dayjs");
33
const taskstate = require("../logging/taskstate");
44

55
const { jf_logging_columns, jf_logging_mapping } = require("../models/jf_logging");
66

77
async function insertLog(uuid, triggertype, taskType) {
88
try {
9-
let startTime = moment();
9+
let startTime = dayjs();
1010
const log = {
1111
Id: uuid,
1212
Name: taskType,
@@ -32,8 +32,8 @@ async function updateLog(uuid, data, taskstate) {
3232
if (task.length === 0) {
3333
console.log("Unable to find task to update");
3434
} else {
35-
let endtime = moment();
36-
let startTime = moment(task[0].TimeRun);
35+
let endtime = dayjs();
36+
let startTime = dayjs(task[0].TimeRun);
3737
let duration = endtime.diff(startTime, "seconds");
3838
const log = {
3939
Id: uuid,

backend/models/jf_activity_watchdog.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const moment = require("moment");
1+
const dayjs = require("dayjs");
22
const { randomUUID } = require("crypto");
33

44
const jf_activity_watchdog_columns = [
@@ -45,7 +45,7 @@ const jf_activity_watchdog_mapping = (item) => ({
4545
PlaybackDuration: item.PlaybackDuration !== undefined ? item.PlaybackDuration : 0,
4646
PlayMethod: item.PlayState.PlayMethod,
4747
ActivityDateInserted:
48-
item.ActivityDateInserted !== undefined ? item.ActivityDateInserted : moment().format("YYYY-MM-DD HH:mm:ss.SSSZ"),
48+
item.ActivityDateInserted !== undefined ? item.ActivityDateInserted : dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ"),
4949
MediaStreams: item.NowPlayingItem.MediaStreams ? item.NowPlayingItem.MediaStreams : null,
5050
TranscodingInfo: item.TranscodingInfo ? item.TranscodingInfo : null,
5151
PlayState: item.PlayState ? item.PlayState : null,

backend/routes/api.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ const configClass = require("../classes/config");
1111
const { checkForUpdates } = require("../version-control");
1212
const API = require("../classes/api-loader");
1313
const { sendUpdate } = require("../ws");
14-
const moment = require("moment");
1514
const { tables } = require("../global/backup_tables");
1615
const TaskScheduler = require("../classes/task-scheduler-singleton");
1716
const TaskManager = require("../classes/task-manager-singleton.js");
1817

18+
const dayjs = require("dayjs");
19+
const customParseFormat = require("dayjs/plugin/customParseFormat");
20+
dayjs.extend(customParseFormat);
21+
1922
const router = express.Router();
2023

2124
//consts
@@ -329,11 +332,11 @@ router.get("/getRecentlyAdded", async (req, res) => {
329332

330333
let lastSynctedItemDate;
331334
if (items.length > 0 && items[0].DateCreated !== undefined && items[0].DateCreated !== null) {
332-
lastSynctedItemDate = moment(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
335+
lastSynctedItemDate = dayjs(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
333336
}
334337

335338
if (episodes.length > 0 && episodes[0].DateCreated !== undefined && episodes[0].DateCreated !== null) {
336-
const newLastSynctedItemDate = moment(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
339+
const newLastSynctedItemDate = dayjs(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
337340

338341
if (lastSynctedItemDate === undefined || newLastSynctedItemDate.isAfter(lastSynctedItemDate)) {
339342
lastSynctedItemDate = newLastSynctedItemDate;
@@ -342,7 +345,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
342345

343346
if (lastSynctedItemDate !== undefined) {
344347
recentlyAddedFromJellystatMapped = recentlyAddedFromJellystatMapped.filter((item) =>
345-
moment(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
348+
dayjs(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
346349
);
347350
}
348351

@@ -354,7 +357,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
354357
const recentlyAdded = [...recentlyAddedFromJellystatMapped, ...filteredDbRows];
355358
// Sort recentlyAdded by DateCreated in descending order
356359
recentlyAdded.sort(
357-
(a, b) => moment(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - moment(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
360+
(a, b) => dayjs(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - dayjs(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
358361
);
359362

360363
res.send(recentlyAdded);
@@ -383,11 +386,11 @@ router.get("/getRecentlyAdded", async (req, res) => {
383386
);
384387
let lastSynctedItemDate;
385388
if (items.length > 0 && items[0].DateCreated !== undefined && items[0].DateCreated !== null) {
386-
lastSynctedItemDate = moment(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
389+
lastSynctedItemDate = dayjs(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
387390
}
388391

389392
if (episodes.length > 0 && episodes[0].DateCreated !== undefined && episodes[0].DateCreated !== null) {
390-
const newLastSynctedItemDate = moment(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
393+
const newLastSynctedItemDate = dayjs(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
391394

392395
if (lastSynctedItemDate === undefined || newLastSynctedItemDate.isAfter(lastSynctedItemDate)) {
393396
lastSynctedItemDate = newLastSynctedItemDate;
@@ -396,7 +399,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
396399

397400
if (lastSynctedItemDate !== undefined) {
398401
recentlyAddedFromJellystatMapped = recentlyAddedFromJellystatMapped.filter((item) =>
399-
moment(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
402+
dayjs(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
400403
);
401404
}
402405

@@ -414,7 +417,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
414417

415418
// Sort recentlyAdded by DateCreated in descending order
416419
recentlyAdded.sort(
417-
(a, b) => moment(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - moment(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
420+
(a, b) => dayjs(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - dayjs(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
418421
);
419422

420423
res.send(recentlyAdded);

backend/routes/stats.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
const express = require("express");
33
const db = require("../db");
44
const dbHelper = require("../classes/db-helper");
5-
const moment = require("moment");
5+
6+
const dayjs = require("dayjs");
7+
const customParseFormat = require("dayjs/plugin/customParseFormat");
8+
dayjs.extend(customParseFormat);
69

710
const router = express.Router();
811

@@ -11,8 +14,8 @@ function countOverlapsPerHour(records) {
1114
const hourCounts = {};
1215

1316
records.forEach((record) => {
14-
const start = moment(record.StartTime).subtract(1, "hour");
15-
const end = moment(record.EndTime).add(1, "hour");
17+
const start = dayjs(record.StartTime).subtract(1, "hour");
18+
const end = dayjs(record.EndTime).add(1, "hour");
1619

1720
// Iterate through each hour from start to end
1821
for (let hour = start.clone().startOf("hour"); hour.isBefore(end); hour.add(1, "hour")) {
@@ -289,12 +292,12 @@ router.post("/getLibraryItemsWithStats", async (req, res) => {
289292

290293
router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
291294
try {
292-
let { libraryid, startDate, endDate = moment(), hours = 24 } = req.body;
295+
let { libraryid, startDate, endDate = dayjs(), hours = 24 } = req.body;
293296

294-
// Validate startDate and endDate using moment
297+
// Validate startDate and endDate using dayjs
295298
if (
296299
startDate !== undefined &&
297-
(!moment(startDate, moment.ISO_8601, true).isValid() || !moment(endDate, moment.ISO_8601, true).isValid())
300+
(!dayjs(startDate, "YYYY-MM-DDTHH:mm:ss.SSSZ", true).isValid() || !dayjs(endDate, "YYYY-MM-DDTHH:mm:ss.SSSZ", true).isValid())
298301
) {
299302
return res.status(400).send({ error: "Invalid date format" });
300303
}
@@ -308,7 +311,7 @@ router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
308311
}
309312

310313
if (startDate === undefined) {
311-
startDate = moment(endDate).subtract(hours, "hour").format("YYYY-MM-DD HH:mm:ss");
314+
startDate = dayjs(endDate).subtract(hours, "hour").format("YYYY-MM-DD HH:mm:ss");
312315
}
313316

314317
const { rows } = await db.query(
@@ -336,8 +339,8 @@ router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
336339
NowPlayingItemName: item.NowPlayingItemName,
337340
EpisodeId: item.EpisodeId || null,
338341
SeasonId: item.SeasonId || null,
339-
StartTime: moment(item.ActivityDateInserted).subtract(item.PlaybackDuration, "seconds").format("YYYY-MM-DD HH:mm:ss"),
340-
EndTime: moment(item.ActivityDateInserted).format("YYYY-MM-DD HH:mm:ss"),
342+
StartTime: dayjs(item.ActivityDateInserted).subtract(item.PlaybackDuration, "seconds").format("YYYY-MM-DD HH:mm:ss"),
343+
EndTime: dayjs(item.ActivityDateInserted).format("YYYY-MM-DD HH:mm:ss"),
341344
PlaybackDuration: item.PlaybackDuration,
342345
PlayMethod: item.PlayMethod,
343346
TranscodedVideo: item.TranscodingInfo?.IsVideoDirect || false,

backend/routes/sync.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const express = require("express");
22
const db = require("../db");
33

4-
const moment = require("moment");
4+
const dayjs = require("dayjs");
55
const { randomUUID } = require("crypto");
66

77
const { sendUpdate } = require("../ws");
@@ -558,21 +558,21 @@ async function syncPlaybackPluginData() {
558558
let query = `SELECT rowid, * FROM PlaybackActivity`;
559559

560560
if (OldestPlaybackActivity && NewestPlaybackActivity) {
561-
const formattedDateTimeOld = moment(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
562-
const formattedDateTimeNew = moment(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
561+
const formattedDateTimeOld = dayjs(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
562+
const formattedDateTimeNew = dayjs(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
563563
query = query + ` WHERE (DateCreated < '${formattedDateTimeOld}' or DateCreated > '${formattedDateTimeNew}')`;
564564
}
565565

566566
if (OldestPlaybackActivity && !NewestPlaybackActivity) {
567-
const formattedDateTimeOld = moment(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
567+
const formattedDateTimeOld = dayjs(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
568568
query = query + ` WHERE DateCreated < '${formattedDateTimeOld}'`;
569569
if (MaxPlaybackReportingPluginID) {
570570
query = query + ` AND rowid > ${MaxPlaybackReportingPluginID}`;
571571
}
572572
}
573573

574574
if (!OldestPlaybackActivity && NewestPlaybackActivity) {
575-
const formattedDateTimeNew = moment(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
575+
const formattedDateTimeNew = dayjs(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
576576
query = query + ` WHERE DateCreated > '${formattedDateTimeNew}'`;
577577
if (MaxPlaybackReportingPluginID) {
578578
query = query + ` AND rowid > ${MaxPlaybackReportingPluginID}`;
@@ -899,7 +899,7 @@ async function partialSync(triggertype) {
899899
let updateItemInfoCount = 0;
900900
let updateEpisodeInfoCount = 0;
901901

902-
let lastSyncDate = moment().subtract(24, "hours");
902+
let lastSyncDate = dayjs().subtract(24, "hours");
903903

904904
const last_execution = await db
905905
.query(
@@ -910,7 +910,7 @@ async function partialSync(triggertype) {
910910
)
911911
.then((res) => res.rows);
912912
if (last_execution.length !== 0) {
913-
lastSyncDate = moment(last_execution[0].DateCreated);
913+
lastSyncDate = dayjs(last_execution[0].DateCreated);
914914
}
915915

916916
//for each item in library run get item using that id as the ParentId (This gets the children of the parent id)
@@ -937,7 +937,7 @@ async function partialSync(triggertype) {
937937
},
938938
});
939939

940-
libraryItems = libraryItems.filter((item) => moment(item.DateCreated).isAfter(lastSyncDate));
940+
libraryItems = libraryItems.filter((item) => dayjs(item.DateCreated).isAfter(lastSyncDate));
941941

942942
while (libraryItems.length != 0) {
943943
if (libraryItems.length === 0 && startIndex === 0) {
@@ -1002,7 +1002,7 @@ async function partialSync(triggertype) {
10021002
},
10031003
});
10041004

1005-
libraryItems = libraryItems.filter((item) => moment(item.DateCreated).isAfter(lastSyncDate));
1005+
libraryItems = libraryItems.filter((item) => dayjs(item.DateCreated).isAfter(lastSyncDate));
10061006
}
10071007
}
10081008

backend/tasks/ActivityMonitor.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const db = require("../db");
22

3-
const moment = require("moment");
3+
const dayjs = require("dayjs");
44
const { columnsPlayback } = require("../models/jf_playback_activity");
55
const { jf_activity_watchdog_columns, jf_activity_watchdog_mapping } = require("../models/jf_activity_watchdog");
66
const configClass = require("../classes/config");
@@ -31,16 +31,16 @@ async function getSessionsInWatchDog(SessionData, WatchdogData) {
3131

3232
//if the playstate was paused, calculate the difference in seconds and add to the playback duration
3333
if (sessionData.PlayState.IsPaused == true) {
34-
let startTime = moment(wdData.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
35-
let lastPausedDate = moment(sessionData.LastPausedDate);
34+
let startTime = dayjs(wdData.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
35+
let lastPausedDate = dayjs(sessionData.LastPausedDate);
3636

3737
let diffInSeconds = lastPausedDate.diff(startTime, "seconds");
3838

3939
wdData.PlaybackDuration = parseInt(wdData.PlaybackDuration) + diffInSeconds;
4040

4141
wdData.ActivityDateInserted = `${lastPausedDate.format("YYYY-MM-DD HH:mm:ss.SSSZ")}`;
4242
} else {
43-
wdData.ActivityDateInserted = moment().format("YYYY-MM-DD HH:mm:ss.SSSZ");
43+
wdData.ActivityDateInserted = dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
4444
}
4545
return true;
4646
}
@@ -97,8 +97,8 @@ function getWatchDogNotInSessions(SessionData, WatchdogData) {
9797

9898
removedData.map((obj) => {
9999
obj.Id = obj.ActivityId;
100-
let startTime = moment(obj.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
101-
let endTime = moment();
100+
let startTime = dayjs(obj.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
101+
let endTime = dayjs();
102102

103103
let diffInSeconds = endTime.diff(startTime, "seconds");
104104

@@ -212,7 +212,7 @@ async function ActivityMonitor(interval) {
212212
if (existingrow) {
213213
playbackData.Id = existingrow.Id;
214214
playbackData.PlaybackDuration = Number(existingrow.PlaybackDuration) + Number(playbackData.PlaybackDuration);
215-
playbackData.ActivityDateInserted = moment().format("YYYY-MM-DD HH:mm:ss.SSSZ");
215+
playbackData.ActivityDateInserted = dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
216216
return true;
217217
}
218218
return false;

package-lock.json

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"config": "^3.3.9",
3737
"cors": "^2.8.5",
3838
"crypto-js": "^4.1.1",
39+
"dayjs": "^1.11.13",
3940
"dns-cache": "^2.0.0",
4041
"dotenv": "^16.3.1",
4142
"dottie": "^2.0.6",
@@ -51,7 +52,6 @@
5152
"knex": "^2.4.2",
5253
"material-react-table": "^3.1.0",
5354
"memoizee": "^0.4.17",
54-
"moment": "^2.29.4",
5555
"multer": "^1.4.5-lts.1",
5656
"passport": "^0.6.0",
5757
"passport-jwt": "^4.0.1",

0 commit comments

Comments
 (0)