mirror of
https://github.com/BreizhHardware/Jellystat.git
synced 2026-03-18 21:30:35 +01:00
fix for #249
also fixed activity materialized view not refreshing for imported data
This commit is contained in:
@@ -215,5 +215,8 @@ module.exports = {
|
||||
insertBulk: insertBulk,
|
||||
updateSingleFieldBulk: updateSingleFieldBulk,
|
||||
querySingle: querySingle,
|
||||
refreshMaterializedView: refreshMaterializedView,
|
||||
materializedViews: materializedViews,
|
||||
|
||||
// initDB: initDB,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
exports.up = async function (knex) {
|
||||
try {
|
||||
await knex.schema.raw(`
|
||||
CREATE OR REPLACE PROCEDURE public.ji_insert_playback_plugin_data_to_activity_table(
|
||||
)
|
||||
LANGUAGE 'plpgsql'
|
||||
AS $BODY$
|
||||
BEGIN
|
||||
insert into jf_playback_activity
|
||||
SELECT
|
||||
rowid,
|
||||
false "IsPaused",
|
||||
pb."UserId",
|
||||
u."Name",
|
||||
pb."ClientName",
|
||||
pb."DeviceName",
|
||||
null "DeviceId",
|
||||
null "ApplicationVersion",
|
||||
"ItemId" "NowPlayingItemId",
|
||||
"ItemName" "NowPlayingItemName",
|
||||
CASE WHEN e."EpisodeId"=pb."ItemId" THEN e."SeasonId" ELSE null END "SeasonId",
|
||||
CASE WHEN i."Id"=e."SeriesId" THEN i."Name" ELSE null END "SeriesName",
|
||||
CASE WHEN e."EpisodeId"=pb."ItemId" THEN e."EpisodeId" ELSE null END "EpisodeId",
|
||||
"PlayDuration" "PlaybackDuration",
|
||||
pb."DateCreated" "ActivityDateInserted",
|
||||
"PlaybackMethod" "PlayMethod",
|
||||
null "MediaStreams",
|
||||
null "TranscodingInfo",
|
||||
null "PlayState",
|
||||
null "OriginalContainer",
|
||||
null "RemoteEndPoint",
|
||||
null "ServerId",
|
||||
true "imported"
|
||||
FROM public.jf_playback_reporting_plugin_data pb
|
||||
LEFT JOIN public.jf_users u
|
||||
on u."Id"=pb."UserId"
|
||||
|
||||
LEFT JOIN public.jf_library_episodes e
|
||||
on e."EpisodeId"=pb."ItemId"
|
||||
|
||||
LEFT JOIN public.jf_library_items i
|
||||
on i."Id"=pb."ItemId"
|
||||
or i."Id"=e."SeriesId"
|
||||
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT "Id" "rowid"
|
||||
FROM jf_playback_activity
|
||||
WHERE imported=true
|
||||
)
|
||||
AND
|
||||
(i."Type" is not null OR (i."Type"='Series' and e."SeasonId" is not null and e."Id" is not null ));
|
||||
END;
|
||||
|
||||
|
||||
$BODY$;
|
||||
ALTER PROCEDURE public.ji_insert_playback_plugin_data_to_activity_table()
|
||||
OWNER TO "${process.env.POSTGRES_ROLE}";
|
||||
`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
|
||||
exports.down = async function (knex) {
|
||||
try {
|
||||
await knex.schema.raw(`
|
||||
CREATE OR REPLACE PROCEDURE public.ji_insert_playback_plugin_data_to_activity_table(
|
||||
)
|
||||
LANGUAGE 'plpgsql'
|
||||
AS $BODY$
|
||||
BEGIN
|
||||
insert into jf_playback_activity
|
||||
SELECT
|
||||
rowid,
|
||||
false "IsPaused",
|
||||
pb."UserId",
|
||||
u."Name",
|
||||
pb."ClientName",
|
||||
pb."DeviceName",
|
||||
null "DeviceId",
|
||||
null "ApplicationVersion",
|
||||
"ItemId" "NowPlayingItemId",
|
||||
"ItemName" "NowPlayingItemName",
|
||||
CASE WHEN e."EpisodeId"=pb."ItemId" THEN e."SeasonId" ELSE null END "SeasonId",
|
||||
CASE WHEN i."Id"=e."SeriesId" THEN i."Name" ELSE null END "SeriesName",
|
||||
CASE WHEN e."EpisodeId"=pb."ItemId" THEN e."Id" ELSE null END "EpisodeId",
|
||||
"PlayDuration" "PlaybackDuration",
|
||||
pb."DateCreated" "ActivityDateInserted",
|
||||
"PlaybackMethod" "PlayMethod",
|
||||
null "MediaStreams",
|
||||
null "TranscodingInfo",
|
||||
null "PlayState",
|
||||
null "OriginalContainer",
|
||||
null "RemoteEndPoint",
|
||||
null "ServerId",
|
||||
true "imported"
|
||||
FROM public.jf_playback_reporting_plugin_data pb
|
||||
LEFT JOIN public.jf_users u
|
||||
on u."Id"=pb."UserId"
|
||||
|
||||
LEFT JOIN public.jf_library_episodes e
|
||||
on e."EpisodeId"=pb."ItemId"
|
||||
|
||||
LEFT JOIN public.jf_library_items i
|
||||
on i."Id"=pb."ItemId"
|
||||
or i."Id"=e."SeriesId"
|
||||
|
||||
WHERE NOT EXISTS
|
||||
(
|
||||
SELECT "Id" "rowid"
|
||||
FROM jf_playback_activity
|
||||
WHERE imported=true
|
||||
)
|
||||
AND
|
||||
(i."Type" is not null OR (i."Type"='Series' and e."SeasonId" is not null and e."Id" is not null ));
|
||||
END;
|
||||
|
||||
|
||||
$BODY$;
|
||||
ALTER PROCEDURE public.ji_insert_playback_plugin_data_to_activity_table()
|
||||
OWNER TO "${process.env.POSTGRES_ROLE}";
|
||||
`);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
};
|
||||
@@ -543,6 +543,10 @@ async function syncPlaybackPluginData() {
|
||||
PlaybacksyncTask.loggedData.push({ color: "dodgerblue", Message: "Any imported data has been processed." });
|
||||
|
||||
PlaybacksyncTask.loggedData.push({ color: "lawngreen", Message: `Playback Reporting Plugin Sync Complete` });
|
||||
|
||||
for (const view of db.materializedViews) {
|
||||
await db.refreshMaterializedView(view);
|
||||
}
|
||||
await logging.updateLog(PlaybacksyncTask.uuid, PlaybacksyncTask.loggedData, taskstate.SUCCESS);
|
||||
} catch (error) {
|
||||
PlaybacksyncTask.loggedData.push({ color: "red", Message: `Error: ${error}` });
|
||||
|
||||
Reference in New Issue
Block a user