mirror of
https://github.com/BreizhHardware/Jellystat.git
synced 2026-01-18 16:27:20 +01:00
@@ -3,7 +3,7 @@ const fs = require("fs");
|
||||
const path = require("path");
|
||||
const configClass = require("./config");
|
||||
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const Logging = require("./logging");
|
||||
|
||||
const taskstate = require("../logging/taskstate");
|
||||
@@ -50,7 +50,7 @@ async function backup(refLog) {
|
||||
// Get data from each table and append it to the backup file
|
||||
|
||||
try {
|
||||
let now = moment();
|
||||
let now = dayjs();
|
||||
const backuppath = "./" + backupfolder;
|
||||
|
||||
if (!fs.existsSync(backuppath)) {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
const db = require("../db");
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const taskstate = require("../logging/taskstate");
|
||||
|
||||
const { jf_logging_columns, jf_logging_mapping } = require("../models/jf_logging");
|
||||
|
||||
async function insertLog(uuid, triggertype, taskType) {
|
||||
try {
|
||||
let startTime = moment();
|
||||
let startTime = dayjs();
|
||||
const log = {
|
||||
Id: uuid,
|
||||
Name: taskType,
|
||||
@@ -32,8 +32,8 @@ async function updateLog(uuid, data, taskstate) {
|
||||
if (task.length === 0) {
|
||||
console.log("Unable to find task to update");
|
||||
} else {
|
||||
let endtime = moment();
|
||||
let startTime = moment(task[0].TimeRun);
|
||||
let endtime = dayjs();
|
||||
let startTime = dayjs(task[0].TimeRun);
|
||||
let duration = endtime.diff(startTime, "seconds");
|
||||
const log = {
|
||||
Id: uuid,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const { randomUUID } = require("crypto");
|
||||
|
||||
const jf_activity_watchdog_columns = [
|
||||
@@ -45,7 +45,7 @@ const jf_activity_watchdog_mapping = (item) => ({
|
||||
PlaybackDuration: item.PlaybackDuration !== undefined ? item.PlaybackDuration : 0,
|
||||
PlayMethod: item.PlayState.PlayMethod,
|
||||
ActivityDateInserted:
|
||||
item.ActivityDateInserted !== undefined ? item.ActivityDateInserted : moment().format("YYYY-MM-DD HH:mm:ss.SSSZ"),
|
||||
item.ActivityDateInserted !== undefined ? item.ActivityDateInserted : dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ"),
|
||||
MediaStreams: item.NowPlayingItem.MediaStreams ? item.NowPlayingItem.MediaStreams : null,
|
||||
TranscodingInfo: item.TranscodingInfo ? item.TranscodingInfo : null,
|
||||
PlayState: item.PlayState ? item.PlayState : null,
|
||||
|
||||
@@ -11,7 +11,7 @@ const configClass = require("../classes/config");
|
||||
const { checkForUpdates } = require("../version-control");
|
||||
const API = require("../classes/api-loader");
|
||||
const { sendUpdate } = require("../ws");
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const { tables } = require("../global/backup_tables");
|
||||
const TaskScheduler = require("../classes/task-scheduler-singleton");
|
||||
const TaskManager = require("../classes/task-manager-singleton.js");
|
||||
@@ -329,11 +329,11 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
|
||||
let lastSynctedItemDate;
|
||||
if (items.length > 0 && items[0].DateCreated !== undefined && items[0].DateCreated !== null) {
|
||||
lastSynctedItemDate = moment(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
lastSynctedItemDate = dayjs(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
}
|
||||
|
||||
if (episodes.length > 0 && episodes[0].DateCreated !== undefined && episodes[0].DateCreated !== null) {
|
||||
const newLastSynctedItemDate = moment(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
const newLastSynctedItemDate = dayjs(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
|
||||
if (lastSynctedItemDate === undefined || newLastSynctedItemDate.isAfter(lastSynctedItemDate)) {
|
||||
lastSynctedItemDate = newLastSynctedItemDate;
|
||||
@@ -342,7 +342,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
|
||||
if (lastSynctedItemDate !== undefined) {
|
||||
recentlyAddedFromJellystatMapped = recentlyAddedFromJellystatMapped.filter((item) =>
|
||||
moment(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
|
||||
dayjs(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -354,7 +354,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
const recentlyAdded = [...recentlyAddedFromJellystatMapped, ...filteredDbRows];
|
||||
// Sort recentlyAdded by DateCreated in descending order
|
||||
recentlyAdded.sort(
|
||||
(a, b) => moment(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - moment(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
|
||||
(a, b) => dayjs(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - dayjs(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
|
||||
);
|
||||
|
||||
res.send(recentlyAdded);
|
||||
@@ -383,11 +383,11 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
);
|
||||
let lastSynctedItemDate;
|
||||
if (items.length > 0 && items[0].DateCreated !== undefined && items[0].DateCreated !== null) {
|
||||
lastSynctedItemDate = moment(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
lastSynctedItemDate = dayjs(items[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
}
|
||||
|
||||
if (episodes.length > 0 && episodes[0].DateCreated !== undefined && episodes[0].DateCreated !== null) {
|
||||
const newLastSynctedItemDate = moment(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
const newLastSynctedItemDate = dayjs(episodes[0].DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
|
||||
if (lastSynctedItemDate === undefined || newLastSynctedItemDate.isAfter(lastSynctedItemDate)) {
|
||||
lastSynctedItemDate = newLastSynctedItemDate;
|
||||
@@ -396,7 +396,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
|
||||
if (lastSynctedItemDate !== undefined) {
|
||||
recentlyAddedFromJellystatMapped = recentlyAddedFromJellystatMapped.filter((item) =>
|
||||
moment(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
|
||||
dayjs(item.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ").isAfter(lastSynctedItemDate)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -414,7 +414,7 @@ router.get("/getRecentlyAdded", async (req, res) => {
|
||||
|
||||
// Sort recentlyAdded by DateCreated in descending order
|
||||
recentlyAdded.sort(
|
||||
(a, b) => moment(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - moment(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
|
||||
(a, b) => dayjs(b.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ") - dayjs(a.DateCreated, "YYYY-MM-DD HH:mm:ss.SSSZ")
|
||||
);
|
||||
|
||||
res.send(recentlyAdded);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
const express = require("express");
|
||||
const db = require("../db");
|
||||
const dbHelper = require("../classes/db-helper");
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
@@ -11,8 +11,8 @@ function countOverlapsPerHour(records) {
|
||||
const hourCounts = {};
|
||||
|
||||
records.forEach((record) => {
|
||||
const start = moment(record.StartTime).subtract(1, "hour");
|
||||
const end = moment(record.EndTime).add(1, "hour");
|
||||
const start = dayjs(record.StartTime).subtract(1, "hour");
|
||||
const end = dayjs(record.EndTime).add(1, "hour");
|
||||
|
||||
// Iterate through each hour from start to end
|
||||
for (let hour = start.clone().startOf("hour"); hour.isBefore(end); hour.add(1, "hour")) {
|
||||
@@ -289,12 +289,12 @@ router.post("/getLibraryItemsWithStats", async (req, res) => {
|
||||
|
||||
router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
|
||||
try {
|
||||
let { libraryid, startDate, endDate = moment(), hours = 24 } = req.body;
|
||||
let { libraryid, startDate, endDate = dayjs(), hours = 24 } = req.body;
|
||||
|
||||
// Validate startDate and endDate using moment
|
||||
// Validate startDate and endDate using dayjs
|
||||
if (
|
||||
startDate !== undefined &&
|
||||
(!moment(startDate, moment.ISO_8601, true).isValid() || !moment(endDate, moment.ISO_8601, true).isValid())
|
||||
(!dayjs(startDate, dayjs.ISO_8601, true).isValid() || !dayjs(endDate, dayjs.ISO_8601, true).isValid())
|
||||
) {
|
||||
return res.status(400).send({ error: "Invalid date format" });
|
||||
}
|
||||
@@ -308,7 +308,7 @@ router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
|
||||
}
|
||||
|
||||
if (startDate === undefined) {
|
||||
startDate = moment(endDate).subtract(hours, "hour").format("YYYY-MM-DD HH:mm:ss");
|
||||
startDate = dayjs(endDate).subtract(hours, "hour").format("YYYY-MM-DD HH:mm:ss");
|
||||
}
|
||||
|
||||
const { rows } = await db.query(
|
||||
@@ -336,8 +336,8 @@ router.post("/getLibraryItemsPlayMethodStats", async (req, res) => {
|
||||
NowPlayingItemName: item.NowPlayingItemName,
|
||||
EpisodeId: item.EpisodeId || null,
|
||||
SeasonId: item.SeasonId || null,
|
||||
StartTime: moment(item.ActivityDateInserted).subtract(item.PlaybackDuration, "seconds").format("YYYY-MM-DD HH:mm:ss"),
|
||||
EndTime: moment(item.ActivityDateInserted).format("YYYY-MM-DD HH:mm:ss"),
|
||||
StartTime: dayjs(item.ActivityDateInserted).subtract(item.PlaybackDuration, "seconds").format("YYYY-MM-DD HH:mm:ss"),
|
||||
EndTime: dayjs(item.ActivityDateInserted).format("YYYY-MM-DD HH:mm:ss"),
|
||||
PlaybackDuration: item.PlaybackDuration,
|
||||
PlayMethod: item.PlayMethod,
|
||||
TranscodedVideo: item.TranscodingInfo?.IsVideoDirect || false,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const express = require("express");
|
||||
const db = require("../db");
|
||||
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const { randomUUID } = require("crypto");
|
||||
|
||||
const { sendUpdate } = require("../ws");
|
||||
@@ -530,13 +530,13 @@ async function syncPlaybackPluginData() {
|
||||
let query = `SELECT rowid, * FROM PlaybackActivity`;
|
||||
|
||||
if (OldestPlaybackActivity && NewestPlaybackActivity) {
|
||||
const formattedDateTimeOld = moment(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
const formattedDateTimeNew = moment(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
const formattedDateTimeOld = dayjs(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
const formattedDateTimeNew = dayjs(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
query = query + ` WHERE (DateCreated < '${formattedDateTimeOld}' or DateCreated > '${formattedDateTimeNew}')`;
|
||||
}
|
||||
|
||||
if (OldestPlaybackActivity && !NewestPlaybackActivity) {
|
||||
const formattedDateTimeOld = moment(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
const formattedDateTimeOld = dayjs(OldestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
query = query + ` WHERE DateCreated < '${formattedDateTimeOld}'`;
|
||||
if (MaxPlaybackReportingPluginID) {
|
||||
query = query + ` AND rowid > ${MaxPlaybackReportingPluginID}`;
|
||||
@@ -544,7 +544,7 @@ async function syncPlaybackPluginData() {
|
||||
}
|
||||
|
||||
if (!OldestPlaybackActivity && NewestPlaybackActivity) {
|
||||
const formattedDateTimeNew = moment(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
const formattedDateTimeNew = dayjs(NewestPlaybackActivity).format("YYYY-MM-DD HH:mm:ss");
|
||||
query = query + ` WHERE DateCreated > '${formattedDateTimeNew}'`;
|
||||
if (MaxPlaybackReportingPluginID) {
|
||||
query = query + ` AND rowid > ${MaxPlaybackReportingPluginID}`;
|
||||
@@ -871,7 +871,7 @@ async function partialSync(triggertype) {
|
||||
let updateItemInfoCount = 0;
|
||||
let updateEpisodeInfoCount = 0;
|
||||
|
||||
let lastSyncDate = moment().subtract(24, "hours");
|
||||
let lastSyncDate = dayjs().subtract(24, "hours");
|
||||
|
||||
const last_execution = await db
|
||||
.query(
|
||||
@@ -882,7 +882,7 @@ async function partialSync(triggertype) {
|
||||
)
|
||||
.then((res) => res.rows);
|
||||
if (last_execution.length !== 0) {
|
||||
lastSyncDate = moment(last_execution[0].DateCreated);
|
||||
lastSyncDate = dayjs(last_execution[0].DateCreated);
|
||||
}
|
||||
|
||||
//for each item in library run get item using that id as the ParentId (This gets the children of the parent id)
|
||||
@@ -909,7 +909,7 @@ async function partialSync(triggertype) {
|
||||
},
|
||||
});
|
||||
|
||||
libraryItems = libraryItems.filter((item) => moment(item.DateCreated).isAfter(lastSyncDate));
|
||||
libraryItems = libraryItems.filter((item) => dayjs(item.DateCreated).isAfter(lastSyncDate));
|
||||
|
||||
while (libraryItems.length != 0) {
|
||||
if (libraryItems.length === 0 && startIndex === 0) {
|
||||
@@ -974,7 +974,7 @@ async function partialSync(triggertype) {
|
||||
},
|
||||
});
|
||||
|
||||
libraryItems = libraryItems.filter((item) => moment(item.DateCreated).isAfter(lastSyncDate));
|
||||
libraryItems = libraryItems.filter((item) => dayjs(item.DateCreated).isAfter(lastSyncDate));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const db = require("../db");
|
||||
|
||||
const moment = require("moment");
|
||||
const dayjs = require("dayjs");
|
||||
const { columnsPlayback } = require("../models/jf_playback_activity");
|
||||
const { jf_activity_watchdog_columns, jf_activity_watchdog_mapping } = require("../models/jf_activity_watchdog");
|
||||
const configClass = require("../classes/config");
|
||||
@@ -31,8 +31,8 @@ async function getSessionsInWatchDog(SessionData, WatchdogData) {
|
||||
|
||||
//if the playstate was paused, calculate the difference in seconds and add to the playback duration
|
||||
if (sessionData.PlayState.IsPaused == true) {
|
||||
let startTime = moment(wdData.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
let lastPausedDate = moment(sessionData.LastPausedDate);
|
||||
let startTime = dayjs(wdData.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
let lastPausedDate = dayjs(sessionData.LastPausedDate);
|
||||
|
||||
let diffInSeconds = lastPausedDate.diff(startTime, "seconds");
|
||||
|
||||
@@ -40,7 +40,7 @@ async function getSessionsInWatchDog(SessionData, WatchdogData) {
|
||||
|
||||
wdData.ActivityDateInserted = `${lastPausedDate.format("YYYY-MM-DD HH:mm:ss.SSSZ")}`;
|
||||
} else {
|
||||
wdData.ActivityDateInserted = moment().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
wdData.ActivityDateInserted = dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -97,8 +97,8 @@ function getWatchDogNotInSessions(SessionData, WatchdogData) {
|
||||
|
||||
removedData.map((obj) => {
|
||||
obj.Id = obj.ActivityId;
|
||||
let startTime = moment(obj.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
let endTime = moment();
|
||||
let startTime = dayjs(obj.ActivityDateInserted, "YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
let endTime = dayjs();
|
||||
|
||||
let diffInSeconds = endTime.diff(startTime, "seconds");
|
||||
|
||||
@@ -212,7 +212,7 @@ async function ActivityMonitor(interval) {
|
||||
if (existingrow) {
|
||||
playbackData.Id = existingrow.Id;
|
||||
playbackData.PlaybackDuration = Number(existingrow.PlaybackDuration) + Number(playbackData.PlaybackDuration);
|
||||
playbackData.ActivityDateInserted = moment().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
playbackData.ActivityDateInserted = dayjs().format("YYYY-MM-DD HH:mm:ss.SSSZ");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
11
package-lock.json
generated
11
package-lock.json
generated
@@ -6,7 +6,7 @@
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "jfstat",
|
||||
"version": "1.1.4",
|
||||
"version": "1.1.7",
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@emotion/styled": "^11.14.0",
|
||||
@@ -29,6 +29,7 @@
|
||||
"config": "^3.3.9",
|
||||
"cors": "^2.8.5",
|
||||
"crypto-js": "^4.1.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"dns-cache": "^2.0.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"dottie": "^2.0.6",
|
||||
@@ -44,7 +45,6 @@
|
||||
"knex": "^2.4.2",
|
||||
"material-react-table": "^3.1.0",
|
||||
"memoizee": "^0.4.17",
|
||||
"moment": "^2.29.4",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport-jwt": "^4.0.1",
|
||||
@@ -8798,9 +8798,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/dayjs": {
|
||||
"version": "1.11.10",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
|
||||
"integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
|
||||
"version": "1.11.13",
|
||||
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
|
||||
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "2.6.9",
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
"config": "^3.3.9",
|
||||
"cors": "^2.8.5",
|
||||
"crypto-js": "^4.1.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"dns-cache": "^2.0.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"dottie": "^2.0.6",
|
||||
@@ -51,7 +52,6 @@
|
||||
"knex": "^2.4.2",
|
||||
"material-react-table": "^3.1.0",
|
||||
"memoizee": "^0.4.17",
|
||||
"moment": "^2.29.4",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport-jwt": "^4.0.1",
|
||||
|
||||
@@ -13,7 +13,7 @@ import baseUrl from "../../../lib/baseurl";
|
||||
import "../../css/timeline/activity-timeline.css";
|
||||
|
||||
import { useMediaQuery, useTheme } from "@mui/material";
|
||||
import moment from "moment";
|
||||
import dayjs from "dayjs";
|
||||
import TvLineIcon from "remixicon-react/TvLineIcon.js";
|
||||
import FilmLineIcon from "remixicon-react/FilmLineIcon.js";
|
||||
import { MEDIA_TYPES } from "./helpers";
|
||||
@@ -29,8 +29,8 @@ const dateFormatOptions = {
|
||||
};
|
||||
|
||||
function formatEntryDates(FirstActivityDate, LastActivityDate, MediaType) {
|
||||
const startDate = moment(FirstActivityDate);
|
||||
const endDate = moment(LastActivityDate);
|
||||
const startDate = dayjs(FirstActivityDate);
|
||||
const endDate = dayjs(LastActivityDate);
|
||||
|
||||
if (startDate.isSame(endDate, "day") || MediaType === MEDIA_TYPES.Movies) {
|
||||
return Intl.DateTimeFormat(localization, dateFormatOptions).format(
|
||||
|
||||
Reference in New Issue
Block a user