mirror of
https://github.com/BreizhHardware/Jellystat.git
synced 2026-01-18 16:27:20 +01:00
Merge pull request #105 from CyferShepard/main
bring in new changes to unstable
This commit is contained in:
24
.github/workflows/docker-image-test-branch.yml
vendored
24
.github/workflows/docker-image-test-branch.yml
vendored
@@ -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
|
||||
23
.github/workflows/docker-image.yml
vendored
23
.github/workflows/docker-image.yml
vendored
@@ -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
2
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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 = {};
|
||||
|
||||
@@ -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
2
package-lock.json
generated
@@ -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
49
release.sh
Executable 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."
|
||||
@@ -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]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user