Merge pull request #105 from CyferShepard/main

bring in new changes to unstable
This commit is contained in:
Thegan Govender
2023-10-14 16:04:16 +02:00
committed by GitHub
8 changed files with 98 additions and 60 deletions

View File

@@ -1,24 +0,0 @@
name: Docker CI Unstable
on:
push:
branches: [unstable]
pull_request:
branches: [unstable]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Login to Docker Hub
uses: docker/login-action@v2.1.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: cyfershepard/jellystat:unstable

View File

@@ -1,9 +1,9 @@
name: Docker CI
on:
push:
branches: [main]
pull_request:
branches: [main]
tags:
- "v*.*.*"
branches: [ unstable ]
jobs:
build:
@@ -14,9 +14,22 @@ jobs:
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: ${{ github.repository }}
# generate Docker tags based on the following events/attributes
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Login to Docker Hub
- name: Log in to the Container registry
uses: docker/login-action@v2.1.0
with:
username: ${{ secrets.DOCKER_USERNAME }}
@@ -26,5 +39,5 @@ jobs:
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
platforms: linux/amd64,linux/arm64,linux/arm/v7
tags: cyfershepard/jellystat:latest

2
.gitignore vendored
View File

@@ -1,5 +1,4 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
@@ -9,6 +8,7 @@
/coverage
/backend/backup-data
.vscode
.idea
# production
/build

View File

@@ -745,7 +745,7 @@ router.post("/getLibraryItems", async (req, res) => {
const { libraryid } = req.body;
console.log(`ENDPOINT CALLED: /getLibraryItems: ` + libraryid);
const { rows } = await db.query(
`SELECT * FROM jf_library_items where "ParentId"='${libraryid}'`
`SELECT * FROM jf_library_items where "ParentId"=$1`, [libraryid]
);
res.send(rows);
} catch (error) {
@@ -758,7 +758,7 @@ router.post("/getSeasons", async (req, res) => {
const { Id } = req.body;
const { rows } = await db.query(
`SELECT * FROM jf_library_seasons where "SeriesId"='${Id}'`
`SELECT * FROM jf_library_seasons where "SeriesId"=$1`, [Id]
);
console.log({ Id: Id });
res.send(rows);
@@ -773,7 +773,7 @@ router.post("/getEpisodes", async (req, res) => {
try {
const { Id } = req.body;
const { rows } = await db.query(
`SELECT * FROM jf_library_episodes where "SeasonId"='${Id}'`
`SELECT * FROM jf_library_episodes where "SeasonId"=$1`, [Id]
);
console.log({ Id: Id });
res.send(rows);
@@ -787,17 +787,17 @@ router.post("/getEpisodes", async (req, res) => {
router.post("/getItemDetails", async (req, res) => {
try {
const { Id } = req.body;
let query = `SELECT im."Name" "FileName",im.*,i.* FROM jf_library_items i left join jf_item_info im on i."Id" = im."Id" where i."Id"='${Id}'`;
let query = `SELECT im."Name" "FileName",im.*,i.* FROM jf_library_items i left join jf_item_info im on i."Id" = im."Id" where i."Id"=$1`;
const { rows: items } = await db.query(query);
const { rows: items } = await db.query(query, [Id]);
if (items.length === 0) {
query = `SELECT im."Name" "FileName",im.*,s.* FROM jf_library_seasons s left join jf_item_info im on s."Id" = im."Id" where s."Id"='${Id}'`;
const { rows: seasons } = await db.query(query);
query = `SELECT im."Name" "FileName",im.*,s.* FROM jf_library_seasons s left join jf_item_info im on s."Id" = im."Id" where s."Id"=$1`;
const { rows: seasons } = await db.query(query, [Id]);
if (seasons.length === 0) {
query = `SELECT im."Name" "FileName",im.*,e.* FROM jf_library_episodes e join jf_item_info im on e."EpisodeId" = im."Id" where e."EpisodeId"='${Id}'`;
const { rows: episodes } = await db.query(query);
query = `SELECT im."Name" "FileName",im.*,e.* FROM jf_library_episodes e join jf_item_info im on e."EpisodeId" = im."Id" where e."EpisodeId"=$1`;
const { rows: episodes } = await db.query(query, [Id]);
if (episodes.length !== 0) {
res.send(episodes);
@@ -857,7 +857,7 @@ router.post("/getLibraryHistory", async (req, res) => {
try {
const { libraryid } = req.body;
const { rows } = await db.query(
`select a.* from jf_playback_activity a join jf_library_items i on i."Id"=a."NowPlayingItemId" where i."ParentId"='${libraryid}' order by "ActivityDateInserted" desc`
`select a.* from jf_playback_activity a join jf_library_items i on i."Id"=a."NowPlayingItemId" where i."ParentId"=$1 order by "ActivityDateInserted" desc`, [libraryid]
);
const groupedResults = {};
rows.forEach((row) => {
@@ -888,7 +888,7 @@ router.post("/getItemHistory", async (req, res) => {
`select jf_playback_activity.*
from jf_playback_activity jf_playback_activity
where
("EpisodeId"='${itemid}' OR "SeasonId"='${itemid}' OR "NowPlayingItemId"='${itemid}');`
("EpisodeId"=$1 OR "SeasonId"=$1 OR "NowPlayingItemId"=$1);`, [idemid]
);
const groupedResults = rows.map((item) => ({
@@ -911,7 +911,7 @@ router.post("/getUserHistory", async (req, res) => {
const { rows } = await db.query(
`select jf_playback_activity.*
from jf_playback_activity jf_playback_activity
where "UserId"='${userid}';`
where "UserId"=$1;`, [userid]
);
const groupedResults = {};

View File

@@ -35,7 +35,7 @@ router.post("/getMostViewedByType", async (req, res) => {
const { rows } = await db.query(
`select * from fs_most_played_items(${_days-1},'${type}') limit 5`
`select * from fs_most_played_items($1,'${type}') limit 5`, [_days-1]
);
res.send(rows);
} catch (error) {
@@ -62,7 +62,7 @@ router.post("/getMostPopularByType", async (req, res) => {
}
const { rows } = await db.query(
`select * from fs_most_popular_items(${_days-1},'${type}') limit 5`
`select * from fs_most_popular_items($1,$2) limit 5`, [_days-1, type]
);
res.send(rows);
} catch (error) {
@@ -81,7 +81,7 @@ router.post("/getMostViewedLibraries", async (req, res) => {
_days = 30;
}
const { rows } = await db.query(
`select * from fs_most_viewed_libraries(${_days-1})`
`select * from fs_most_viewed_libraries($1)`, [_days-1]
);
res.send(rows);
} catch (error) {
@@ -98,7 +98,7 @@ router.post("/getMostUsedClient", async (req, res) => {
_days = 30;
}
const { rows } = await db.query(
`select * from fs_most_used_clients(${_days-1}) limit 5`
`select * from fs_most_used_clients($1) limit 5`, [_days-1]
);
res.send(rows);
} catch (error) {
@@ -115,9 +115,9 @@ router.post("/getMostActiveUsers", async (req, res) => {
_days = 30;
}
const { rows } = await db.query(
`select * from fs_most_active_user(${_days-1}) limit 5`
`select * from fs_most_active_user($1) limit 5`, [_days-1]
);
res.send(rows);
res.send(rows);
} catch (error) {
res.status(503);
res.send(error);
@@ -149,7 +149,7 @@ router.post("/getUserLastPlayed", async (req, res) => {
try {
const { userid } = req.body;
const { rows } = await db.query(
`select * from fs_last_user_activity('${userid}') limit 15`
`select * from fs_last_user_activity($1) limit 15`, [userId]
);
res.send(rows);
} catch (error) {
@@ -168,7 +168,7 @@ router.post("/getGlobalUserStats", async (req, res) => {
_hours = 24;
}
const { rows } = await db.query(
`select * from fs_user_stats(${_hours},'${userid}')`
`select * from fs_user_stats($1,$2)`, [_hours, userid]
);
res.send(rows[0]);
} catch (error) {
@@ -190,8 +190,8 @@ router.post("/getGlobalItemStats", async (req, res) => {
sum("PlaybackDuration") total_playback_duration
from jf_playback_activity jf_playback_activity
where
("EpisodeId"='${itemid}' OR "SeasonId"='${itemid}' OR "NowPlayingItemId"='${itemid}')
AND jf_playback_activity."ActivityDateInserted" BETWEEN CURRENT_DATE - INTERVAL '1 hour' * ${_hours} AND NOW();`
("EpisodeId"=$1 OR "SeasonId"=$1 OR "NowPlayingItemId"=$1)
AND jf_playback_activity."ActivityDateInserted" BETWEEN CURRENT_DATE - INTERVAL '1 hour' * $2 AND NOW();`, [itemid, _hours]
);
res.send(rows[0]);
} catch (error) {
@@ -209,7 +209,7 @@ router.post("/getGlobalLibraryStats", async (req, res) => {
_hours = 24;
}
const { rows } = await db.query(
`select * from fs_library_stats(${_hours},'${libraryid}')`
`select * from fs_library_stats($1,$2)`, [_hours, libraryid]
);
res.send(rows[0]);
} catch (error) {
@@ -247,7 +247,7 @@ router.post("/getLibraryItemsWithStats", async (req, res) => {
const {libraryid} = req.body;
console.log(`ENDPOINT CALLED: /getLibraryItems: `+libraryid);
const { rows } = await db.query(
`SELECT * FROM jf_library_items_with_playcount_playtime where "ParentId"='${libraryid}'`
`SELECT * FROM jf_library_items_with_playcount_playtime where "ParentId"=$1`, [libraryid]
);
res.send(rows);
@@ -265,7 +265,7 @@ router.post("/getLibraryLastPlayed", async (req, res) => {
try {
const { libraryid } = req.body;
const { rows } = await db.query(
`select * from fs_last_library_activity('${libraryid}') limit 15`
`select * from fs_last_library_activity($1) limit 15`, [libraryid]
);
res.send(rows);
} catch (error) {
@@ -284,7 +284,7 @@ router.post("/getViewsOverTime", async (req, res) => {
_days = 30;
}
const { rows:stats } = await db.query(
`select * from fs_watch_stats_over_time('${_days}')`
`select * from fs_watch_stats_over_time($1)`, [_days]
);
const { rows:libraries } = await db.query(
@@ -329,7 +329,7 @@ router.post("/getViewsByDays", async (req, res) => {
_days = 30;
}
const { rows:stats } = await db.query(
`select * from fs_watch_stats_popular_days_of_week('${_days}')`
`select * from fs_watch_stats_popular_days_of_week($1)`, [_days]
);
const { rows:libraries } = await db.query(
@@ -370,7 +370,7 @@ router.post("/getViewsByHour", async (req, res) => {
_days = 30;
}
const { rows:stats } = await db.query(
`select * from fs_watch_stats_popular_hour_of_day('${_days}')`
`select * from fs_watch_stats_popular_hour_of_day($1)`, [_days]
);
const { rows:libraries } = await db.query(

2
package-lock.json generated
View File

@@ -6,7 +6,7 @@
"packages": {
"": {
"name": "jfstat",
"version": "1.0.5",
"version": "1.0.8",
"dependencies": {
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.6",

49
release.sh Executable file
View File

@@ -0,0 +1,49 @@
#!/bin/bash
PREVIOUS_VERSION=$(git describe --abbrev=0 --tags)
echo "Choose the version component to increment:"
echo "1. Major"
echo "2. Minor"
echo "3. Patch"
read -p "Enter your choice: " choice
case $choice in
1)
# Increment the major version
MAJOR=$(echo "$PREVIOUS_VERSION" | cut -d. -f1)
MAJOR=$((MAJOR + 1))
NEW_VERSION="$MAJOR.0.0"
;;
2)
# Increment the minor version
MAJOR=$(echo "$PREVIOUS_VERSION" | cut -d. -f1)
MINOR=$(echo "$PREVIOUS_VERSION" | cut -d. -f2)
MINOR=$((MINOR + 1))
NEW_VERSION="$MAJOR.$MINOR.0"
;;
3)
# Increment the patch version
MAJOR=$(echo "$PREVIOUS_VERSION" | cut -d. -f1)
MINOR=$(echo "$PREVIOUS_VERSION" | cut -d. -f2)
PATCH=$(echo "$PREVIOUS_VERSION" | cut -d. -f3)
PATCH=$((PATCH + 1))
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
;;
*)
echo "Invalid choice. Exiting."
exit 1
;;
esac
# Tag message
TAG_MESSAGE="Release version $NEW_VERSION"
# Create a new tag
git tag -a "$NEW_VERSION" -m "$TAG_MESSAGE"
# Push the tag to the remote repository
git push origin "$NEW_VERSION"
echo "Tag $NEW_VERSION has been created and pushed to the remote repository."

View File

@@ -281,7 +281,7 @@ function Users() {
return 0;
}
if (orderBy === 'TotalPlays') {
if (orderBy === 'TotalPlays' || orderBy === 'TotalWatchTime') {
let order_a = parseInt(a[orderBy]);
let order_b = parseInt(b[orderBy]);