Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f309287
add missing german translations for webhooks and activity monitoring
chrisvgt Dec 22, 2025
55ef3e2
refine german translations for library card and various UI elements
chrisvgt Dec 22, 2025
fbad5ea
refine german translations for API keys and statistics display
chrisvgt Dec 22, 2025
3cd7df9
Merge pull request #478 from CyferShepard/main
CyferShepard Dec 22, 2025
55f546e
Bump version to 1.1.8 and update column filters to use LOWER() for ca…
CyferShepard Dec 22, 2025
365d2d6
Update PlayMethod filter to use LOWER() for case-insensitive matching
CyferShepard Dec 22, 2025
259aaaf
Merge pull request #477 from chrisvgt/fix/missing_german_translations
CyferShepard Dec 23, 2025
75cc737
Upgrade to pg18, add healthchecks to containers
hollanbm Dec 20, 2025
bdbc1d8
Fixed session cards for Live TV and Enhance ETA calculation for Live TV
CyferShepard Dec 23, 2025
8232081
Refactor localization: Update en-UK translation code to en-GB
CyferShepard Dec 23, 2025
9f14324
Added Spanish translation
Anghios Dec 27, 2025
d2f4481
Fixes translations in activity monitor settings
tppadn Dec 27, 2025
b1cfa5d
Merge pull request #484 from tppadn/activity-monitor-translation
CyferShepard Dec 27, 2025
d9b2739
Merge pull request #481 from Anghios/main
CyferShepard Dec 27, 2025
33f2528
Merge pull request #474 from hollanbm/docs/update-docker-compose
CyferShepard Jan 1, 2026
a2eae26
Added flag to toggle websocket connection to jellyfin via variable JF…
CyferShepard Jan 2, 2026
686680e
Add error logging for config fetching failures
CyferShepard Jan 4, 2026
10156ca
Possible fix for #403. Needs testing to ensure no breaking changes
CyferShepard Jan 4, 2026
26b332e
Attempted fix for #488, reorderedlogic to use server url only, added …
CyferShepard Jan 11, 2026
76fe771
Honor base URL when making websocket connection from browser
cellscape Jan 12, 2026
ae4d7dc
Merge pull request #493 from cellscape/unstable
CyferShepard Jan 12, 2026
be6a87a
Added Polish translation
TheMatrixan Jan 12, 2026
39a6eae
Merge branch 'unstable' into main
TheMatrixan Jan 12, 2026
956f699
Merge pull request #494 from TheMatrixan/main
CyferShepard Jan 13, 2026
b8995ea
Update FR translation.json
EVOTk Jan 13, 2026
3ddcc4e
Merge pull request #497 from EVOTk/patch-1
CyferShepard Jan 14, 2026
98e4a44
Add User-Agent to Jellyfin API calls
idanoo Jan 20, 2026
3194bb7
Add User-Agent to websocket client too
idanoo Jan 20, 2026
a45d1d3
Added playcount threshold for watch activity. #448
CyferShepard Jan 28, 2026
8737207
Merge remote-tracking branch 'gh/unstable'
idanoo Feb 3, 2026
6734bb1
Merge pull request #502 from idanoo/main
CyferShepard Feb 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 24 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,29 @@

## Environmental Variables

| Env | Default | Example | Description |
|-------------------------------------|----------|---------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| POSTGRES_USER `REQUIRED` | `null` | `postgres` | Username that will be used in postgres database |
| POSTGRES_PASSWORD `REQUIRED` | `null` | `postgres` | Password that will be used in postgres database |
| POSTGRES_IP `REQUIRED` | `null` | `jellystat-db` or `192.168.0.5` | Hostname/IP of postgres instance |
| POSTGRES_PORT `REQUIRED` | `null` | `5432` | Port Postgres is running on |
| POSTGRES_SSL_ENABLED | `null` | `true` | Enable SSL connections to Postgres
| POSTGRES_SSL_REJECT_UNAUTHORIZED | `null` | `false` | Verify Postgres SSL certificates when POSTGRES_SSL_ENABLED=true
| JS_LISTEN_IP | `0.0.0.0`| `0.0.0.0` or `::` | Enable listening on specific IP or `::` for IPv6 |
| JWT_SECRET `REQUIRED` | `null` | `my-secret-jwt-key` | JWT Key to be used to encrypt JWT tokens for authentication |
| TZ `REQUIRED` | `null` | `Etc/UTC` | Server timezone (Can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) |
| JS_BASE_URL | `/` | `/` | Base url |
| JS_USER | `null` | `User` | Master Override User in case username or password used during setup is forgotten (Both `JS_USER` and `JS_PASSWORD` required to work) |
| JS_PASSWORD | `null` | `Password` | Master Override Password in case username or password used during setup is forgotten (Both `JS_USER` and `JS_PASSWORD` required to work) |
| POSTGRES_DB | `jfstat` | `jfstat` | Name of postgres database |
| REJECT_SELF_SIGNED_CERTIFICATES | `true` | `false` | Allow or deny self signed SSL certificates |
| JS_GEOLITE_ACCOUNT_ID | `null` | `123456` | maxmind.com user id to be used for Geolocating IP Addresses (Can be found at https://www.maxmind.com/en/accounts/current/edit) |
| JS_GEOLITE_LICENSE_KEY | `null` | `ASDWdaSdawe2sd186` | License key you need to generate on maxmind to use their services |
| MINIMUM_SECONDS_TO_INCLUDE_PLAYBACK | `1` | `10` | The minimum time (in seconds) to include a playback record, which can be used to exclude short playbacks |
| IS_EMBY_API | `false` | `true` | Set to true if using Emby instead of Jellyfin |
| Env | Default | Example | Description |
| ----------------------------------- | --------- | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| POSTGRES_USER `REQUIRED` | `null` | `postgres` | Username that will be used in postgres database |
| POSTGRES_PASSWORD `REQUIRED` | `null` | `postgres` | Password that will be used in postgres database |
| POSTGRES_IP `REQUIRED` | `null` | `jellystat-db` or `192.168.0.5` | Hostname/IP of postgres instance |
| POSTGRES_PORT `REQUIRED` | `null` | `5432` | Port Postgres is running on |
| POSTGRES_SSL_ENABLED | `null` | `true` | Enable SSL connections to Postgres |
| POSTGRES_SSL_REJECT_UNAUTHORIZED | `null` | `false` | Verify Postgres SSL certificates when POSTGRES_SSL_ENABLED=true |
| JS_LISTEN_IP | `0.0.0.0` | `0.0.0.0` or `::` | Enable listening on specific IP or `::` for IPv6 |
| JWT_SECRET `REQUIRED` | `null` | `my-secret-jwt-key` | JWT Key to be used to encrypt JWT tokens for authentication |
| TZ `REQUIRED` | `null` | `Etc/UTC` | Server timezone (Can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) |
| JS_BASE_URL | `/` | `/` | Base url |
| JS_USER | `null` | `User` | Master Override User in case username or password used during setup is forgotten (Both `JS_USER` and `JS_PASSWORD` required to work) |
| JS_PASSWORD | `null` | `Password` | Master Override Password in case username or password used during setup is forgotten (Both `JS_USER` and `JS_PASSWORD` required to work) |
| POSTGRES_DB | `jfstat` | `jfstat` | Name of postgres database |
| REJECT_SELF_SIGNED_CERTIFICATES | `true` | `false` | Allow or deny self signed SSL certificates |
| JS_GEOLITE_ACCOUNT_ID | `null` | `123456` | maxmind.com user id to be used for Geolocating IP Addresses (Can be found at https://www.maxmind.com/en/accounts/current/edit) |
| JS_GEOLITE_LICENSE_KEY | `null` | `ASDWdaSdawe2sd186` | License key you need to generate on maxmind to use their services |
| MINIMUM_SECONDS_TO_INCLUDE_PLAYBACK | `1` | `10` | The minimum time (in seconds) to include a playback record, which can be used to exclude short playbacks |
| IS_EMBY_API | `false` | `true` | Set to true if using Emby instead of Jellyfin |
| JF_USE_WEBSOCKETS | `true` | `false` | Enables using Jellyfins websocket connection for session data (No effect on Emby) |
| JS_USE_EXTERNAL_HOST | `false` | `true` | Prioritises using External host value for some internal communications and processes |
| NEW_WATCH_EVENT_THRESHOLD_HOURS | 1 | 1-12 | This value sets the max time between watch sessions to determine if a watch is a new session or should be added onto the last session thats happened within this threshold. EG last watch within the last 1 hour. After 1 hour, a new session for the same item will be considered a new watch event. |

## Getting Started with Development

Expand Down Expand Up @@ -91,4 +94,4 @@ Will set the environment variable `MYVAR` based on the contents of the `/run/sec

## API Documentation

To-do
Swagger Documentation can be found at `/swagger` endpoint
1 change: 1 addition & 0 deletions backend/classes/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class Config {
IS_JELLYFIN: (process.env.IS_EMBY_API || "false").toLowerCase() === "false",
};
} catch (error) {
console.log("Error fetching config:", error);
return { error: "Config Details Not Found" };
}
}
Expand Down
22 changes: 11 additions & 11 deletions backend/classes/emby-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,17 +218,17 @@ class EmbyAPI {
try {
let url = `${this.config.JF_HOST}/Items?ParentId=${id}`;

let userid;
if (!userid || userid == null) {
await new configClass().getPreferedAdmin().then(async (adminid) => {
if (!adminid || adminid == null) {
userid = (await this.getAdmins())[0].Id;
} else {
userid = adminid;
}
});
}
url += `&userId=${userid}`;
// let userid;
// if (!userid || userid == null) {
// await new configClass().getPreferedAdmin().then(async (adminid) => {
// if (!adminid || adminid == null) {
// userid = (await this.getAdmins())[0].Id;
// } else {
// userid = adminid;
// }
// });
// }
// url += `&userId=${userid}`;

if (itemid && itemid != null) {
url += `&Ids=${itemid}`;
Expand Down
Loading