Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] "Play in 4K" visible in Issues despite content not being 4K #681

Closed
1 task done
OdinVex opened this issue Mar 10, 2024 · 40 comments · Fixed by #686
Closed
1 task done

[Bug] "Play in 4K" visible in Issues despite content not being 4K #681

OdinVex opened this issue Mar 10, 2024 · 40 comments · Fixed by #686
Labels
bug Something isn't working confirmed released

Comments

@OdinVex
Copy link

OdinVex commented Mar 10, 2024

Description

I've got an episode with an issue unrelated to video dimensions but the "Play in 4K on Jellyfin" button is still visible/usable when viewed from the Issues section of that episode. The regular content viewed does not have 4K content and only shows "Play on Jellyfin". Dimensions in this case are 1280x960.

Version

1.7.0

Steps to Reproduce

  1. Create an issue for non-4K content (in this case 1280x960).
  2. Viewed on right, "Play in 4K on Jellyfin".

Screenshots

No response

Logs

N/A

Platform

desktop

Device

Custom

Operating System

Manjaro Linux x64

Browser

LibreWolf (Firefox-fork)

Additional Context

I do not have any 4K Radarr/Sonarr either. I don't differentiate.

Code of Conduct

  • I agree to follow Jellyseerr's Code of Conduct
@Fallenbagel
Copy link
Owner

I cannot replicate this. Check your services > sonarr/radarr do you have default 4k server checked?

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

No, I don't have any 4K server/services. It only affects Issues for Series. I managed to replicate it with a different Series as well. It does NOT show "Play in 4K" at the Series page, only in the Issues page for a Series. If it were a "4K" issue I'd expect it to show that button on both.

Edit: I can create a phony Issue for any Series and they have the same problem. Only on the Issues page is there an erroneous "Play in 4K on Jellyfin" button.

Edit: And to doubly-clarify, "4K Server" is unchecked and there is only one instance of Radarr and Sonarr, neither are 4K.

@Fallenbagel
Copy link
Owner

Can you check develop tag. I still can't replicate this.

Screenshot_20240310_102617_Chrome Dev.jpg

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Edit: Both latest and develop are affected.

Edit: A short note, Movies are not affected by this issue, only Series, even old series that are 4:3 640x480 NTSCs (1960s...).

Edit: I'm not sure if it matters or helps, but both "Play" buttons have the same URI.

*Screenshot is on a 4K monitor (desktop client, non-mobile), no connection to content of course.*

image

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Some setup background: Jellyfin only, using non-local accounts (require signing in with Jellyfin login), and the only funny thing in the logs is on startup:

2024-03-10T05:50:00.111Z [error][Jellyfin API]: Something went wrong while getting library content from the Jellyfin server: connect ECONNREFUSED JELLYFIN_INSTANCE_URI
2024-03-10T05:50:00.123Z [error][Jellyfin Sync]: Sync interrupted {"errorMessage":"Invalid auth token"}

Never saw any API key input during installation of Jellyseerr (I don't use Plex). Maybe this could be related? Full-scan doesn't seem to be working anymore, either:

2024-03-10T05:59:56.882Z [info][Jellyfin Sync]: Jellyfin Sync Starting {"sessionId":"93bd26f8-90c8-4a0c-be59-945203becf67"}
2024-03-10T05:59:56.925Z [info][Jellyfin Sync]: Full Scan Complete

Edit: Forced Jellyseerr to start using the external interface, able to reconnect and rescan. Still shows that "Play in 4K on Jellyfin" issue, but scan hasn't completed. (Yes, docker is set to Host, as is Jellyfin, so localhost was valid over a month ago.)

@Fallenbagel
Copy link
Owner

Your connection with jellyfin is messed up. That might be why.

As you can see from my screenshot it's a series. And it's develop tag. I think this is more of a configuration issue and I would suggest you hop onto discord so we can follow through.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

I don't Discord, I'll just wander through trying to figure out how it determines whether something is 4K or not.

@Fallenbagel
Copy link
Owner

I don't Discord, I'll just wander through trying to figure out how it determines whether something is 4K or not.

First you need to fix your jellyfin connection. I would suggest checking if the container can reach. Or try a complete fresh test container.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

First you need to fix your jellyfin connection. I would suggest checking if the container can reach. Or try a complete fresh test container.

I did, "Edit: Forced Jellyseerr to start using the external interface, able to reconnect and rescan. Still shows that "Play in 4K on Jellyfin" issue, but scan hasn't completed. (Yes, docker is set to Host, as is Jellyfin, so localhost was valid over a month ago.)"

Edit: Started clean, same issue, any series. 4K is NOT enabled on either Radarr or Sonarr in Jellyseerr or otherwise.

@Fallenbagel
Copy link
Owner

I can't recreate it still. I have checked on new instances, new instances, new machines, non of it has 4k in it. This might be an issue from your jellyfin api too. Try a new instance with new jellyfin instance i guess.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

That is unreasonable, given the size of the database and the time it takes to scan (Jellyfin's threading and DB backend is utterly in need of a complete rewrite). How does Jellyseerr come to think of anything as 4K? I'd rather debug it from that end.

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

That is unreasonable, given the size of the database and the time it takes to scan (Jellyfin's threading and DB backend is utterly in need of a complete rewrite). How does Jellyseerr come to think of anything as 4K? I'd rather debug it from that end.

I'm talking about a test jellyfin instance with just 1 show...

It looks at the video dimensions.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

I'm talking about a test jellyfin instance with just 1 show...

Ah, right.

It looks at the video dimensions.

Any way I can see that process/information? It's 640x480, old NTSC stuff. Edit: Besides, why would it be correct on the Series page but not the Issues page? This just sounds like an Issues page bug.

@Fallenbagel
Copy link
Owner

Any way I can see that process/information? It's 640x480, old NTSC stuff. Edit: Besides, why would it be correct on the Series page but not the Issues page? This just sounds like an Issues page bug.

It does sound like a bug yes. But if I can't recreate/face the same bug, I can't fix it 🤷‍♂️😔

Desktop view (previously i sent mobile view. Both are series):

Screenshot_20240311_005444_Firefox Beta.jpg

@Fallenbagel
Copy link
Owner

Any way I can see that process/information? It's 640x480, old NTSC stuff. Edit: Besides, why would it be correct on the Series page but not the Issues page? This just sounds like an Issues page bug.

It does sound like a bug yes. But if I can't recreate/face the same bug, I can't fix it 🤷‍♂️😔
If you figure it out, feel free to open a pr.

Desktop view (previously i sent mobile view. Both are series):

Screenshot_20240311_005444_Firefox Beta.jpg

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

That looks mobile in Desktop View, not an actual desktop browser (or one with a small resolution and css media-specific sizes kicking in).

Edit: Great, more Sqlite usage. *sigh* Anyway, status4k is set to 1 (true) on all shows in the sqlite db, regardless of actual content. Whatever means it has of detecting content is broken and it is assuming all is (edit: Yes, even on new Jellyseerr and multiple new Jellyfin instances, I used one show per instance just to test that too). ffprobe: Stream #0:0: Video: h264 (High), yuv420p(progressive), 640x480 [SAR 1:1 DAR 4:3], 23.98 fps, 23.98 tbr, 1k tbn (default)

@Fallenbagel
Copy link
Owner

That looks mobile in Desktop View, not an actual desktop browser (or one with a small resolution and css media-specific sizes kicking in).

Oh yes sorry I attached the wrong screenshot lol hold on

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Under both media and season status4k is set to 1 even though no content is 4K. Curious, could the Add4kStatusFields migration have caused something? Is 4K status altered by full scans?

Edit: "status4k" integer NOT NULL DEFAULT (1) You've assigned it true by default (./server/migration/1610370640747-Add4kStatusFields.ts)?

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

Admin, sonarr unconfigured:

image-25.png

Admin, sonarr configured:
jellyseerr_issue.png

Admin, different browser, different instance, sonarr 4k configured but no 4k media:
image-24.png

Admin, different browser, different instances, different locale:
image-43.png

User view, no 4k:
IMG_20240311_011453_054.jpg

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Admin, different browser, different instance, sonarr 4k configured but no 4k media

If no 4K media then why does it say 4K? Also, see the comment earlier I made on migrations. Curious why it defaults to 4k for migrations and why it doesn't correct it on full scan. Since migration is ran even on new installs that seems like a curious thing if the server's not scanning when it should. (It populates on new instances, that connection thing was a fluke...)

@Fallenbagel
Copy link
Owner

Under both media and season status4k is set to 1 even though no content is 4K. Curious, could the Add4kStatusFields migration have caused something? Is 4K status altered by full scans?

Edit: "status4k" integer NOT NULL DEFAULT (1) You've assigned it true by default (./server/migration/1610370640747-Add4kStatusFields.ts)?

Could you link to the line and file? I'll have a look when I reach home

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

https://github.com/Fallenbagel/jellyseerr/blob/develop/server/migration/1610370640747-Add4kStatusFields.ts#L8
https://github.com/Fallenbagel/jellyseerr/blob/develop/server/migration/1610370640747-Add4kStatusFields.ts#L21

The migration assumes content is 4K because there was never a status before to differentiate. This is ran on every single new instance. I have no idea when Jellyseerr determines a content is 4K or not (when, such as full scan? old content that is scanned again?)

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

Admin, different browser, different instance, sonarr 4k configured but no 4k media

If no 4K media then why does it say 4K? Also, see the comment earlier I made on migrations. Curious why it defaults to 4k for migrations and why it doesn't correct it on full scan. Since migration is ran even on new installs that seems like a curious thing if the server's not scanning when it should. (It populates on new instances, that connection thing was a fluke...)

I meant. No 4k media in jellyfin. It's available in sonarr thats why

@Fallenbagel
Copy link
Owner

Under both media and season status4k is set to 1 even though no content is 4K. Curious, could the Add4kStatusFields migration have caused something? Is 4K status altered by full scans?

Edit: "status4k" integer NOT NULL DEFAULT (1) You've assigned it true by default (./server/migration/1610370640747-Add4kStatusFields.ts)?

About this, it came from overseerr:
https://github.com/sct/overseerr/blob/develop/server%2Fmigration%2F1610370640747-Add4kStatusFields.ts#L8

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

I meant. No 4k media in jellyfin. It's available in sonarr thats why

What does that have to do with the actual media available? It's supposed to be looking at Jellyfin, isn't it? Besides, my Sonarr doesn't have 4K at all.

About this, it came from overseerr:

No idea why they made an assumption like that...

Edit: So now I've just got to figure out when it detects 4K and how, then find out why it's not overwriting 4K status (or is and is setting it to true, incorrectly).

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

https://github.com/Fallenbagel/jellyseerr/blob/develop/server/migration/1610370640747-Add4kStatusFields.ts#L8
https://github.com/Fallenbagel/jellyseerr/blob/develop/server/migration/1610370640747-Add4kStatusFields.ts#L21

The migration assumes content is 4K because there was never a status before to differentiate. This is ran on every single new instance. I have no idea when Jellyseerr determines a content is 4K or not (when, such as full scan? old content that is scanned again?)

Jellyseerr determines if its 4k or not during the scan. The logic for it is there on the scanner job file:
https://github.com/Fallenbagel/jellyseerr/blob/develop/server%2Flib%2Fscanners%2Fjellyfin%2Findex.ts#L261-L357

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

I meant. No 4k media in jellyfin. It's available in sonarr thats why

What does that have to do with the actual media available? It's supposed to be looking at Jellyfin, isn't it? Besides, my Sonarr doesn't have 4K at all.

No. You can have availability from both sonarr and jellyfin. Seperately. That's what the enable scan option does.

So you can have a library added for 4k but not synced with jellyseerr but it's available on your 4k sonarr. Then it can appear

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

I was just looking at the Sonarr one, the 4K logic is convoluted for sure. Line 85->139. For the Jellyfin scanner, wouldn't season logic for 4K start at 237 rather than 261?

@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 10, 2024

I was just looking at the Sonarr one, the 4K logic is convoluted for sure. Line 85->139. For the Jellyfin scanner, wouldn't season logic for 4K start at 237 rather than 261?

Oh yes that's where. Sorry I'm on mobile rn(gh app is a bit weird to select line). But yeah you get the gist. It's very convoluted on how we have to process jellyfin 4k media too. Despite jellyfin api having a is4K param in their get items api, that param isn't used anywhere (left out legacy code from emby) so we have to look at the resolutions to determine.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Oh yes that's where. Sorry I'm on mobile rn(gh app is a bit weird to select line).

All good, I know the quirks of mobile as well. :)

But yeah you get the gist. It's very convoluted on how we have to process jellyfin 4k media too. Despite jellyfin api having a is4K param in their get items api, that param isn't used anywhere (left out legacy code from emby) so we have to look at the resolutions to determine.

The width of all those episodes is 640... Every single item. I even started doing just a single file and it still thinks it is 4K.

Edit: Removed mention of Sonarr, its logic appears to be fine. The convoluted logic in the Jellyfin scanner will take some time, I'm unfamiliar with this language.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

          const current4kSeasonAvailable = (
            media?.seasons.filter(
              (season) => season.status4k === MediaStatus.AVAILABLE
            ) ?? []
          ).length;

If that migration runs (which sets status4k true)...then this would be true, and it's constanting current4kSeasonAvailable...that's assuming status4k here reflects what was in the database?

existingSeason.status4k =
                  (this.enable4kShow && total4k >= season.episode_count) ||
                  existingSeason.status4k === MediaStatus.AVAILABLE

I think this is all stemming from migrations, but I could be wrong.

Edit: Removed unrelated 'status' which is apparently about availability rather than 4K-status.

Edit: This is all in the Jellyfin Scanner. I'm not familiar with Jellyseerr enough to draw a conclusion, plus I'm more of an Asm/C/C++ kind of person.

@Fallenbagel
Copy link
Owner

I'll have a look too in the weekends. Try to recreate your issue. If you wanna give it a go, from the top of my head I would do:

  1. Check the api first see if the item that returns has 4k set.
  2. Since it only seems to be messing up on issues page, maybe console log the item see what's up.

I'll also add a label to this issue so if there's someone else who can replicate this exact issue, they could look into it c:

@Fallenbagel Fallenbagel added bug Something isn't working awaiting triage labels Mar 10, 2024
@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Since it only seems to be messing up on issues page, maybe console log the item see what's up.

It only shows on the Issues page for Seasons (not Movies)....and yet the sqlite database shows "status4k=1" (for movies and seasons). I sometimes manually import content but it's never 4K. ¯\(ツ)

Edit: I stopped the Jellyseerr instance and manually set status4k to 0 in media and seasons, started it back up (verified db was correctly adjusted and such, it's fine). Still shows 4K for Season Issues.

Edit: The only strings I can find for 'Play in 4K' are:

./src/components/IssueDetails/index.tsx:  play4konplex: 'Play in 4K on {mediaServerName}',
./src/i18n/locale/en.json:  "components.IssueDetails.play4konplex": "Play in 4K on {mediaServerName}",

Is the naming of Plex in the code that persistent? o.o I don't use Plex at all but apparently it's used for anything 4K. I took a peek at IssueDetail/index.tsx to see the logic behind displaying the button and it'll display if mediaUrl4k is set to anything non-null. The only locations that var is set is in ./server/entity/Media.ts, once if Plex or once if Jellyfin, specifically if jellyfinMediaId4k is set to non-null. Following that back around...to migrations which sets it to an empty string (empty but is not null, so maybe it triggers?) and also the Jellyfin Scanner/Availability Sync based on conditions. Haven't gone any further at the moment.

@Fallenbagel
Copy link
Owner

Since it only seems to be messing up on issues page, maybe console log the item see what's up.

It only shows on the Issues page for Seasons (not Movies)....and yet the sqlite database shows "status4k=1" (for movies and seasons). I sometimes manually import content but it's never 4K. ¯\(ツ)

Edit: I stopped the Jellyseerr instance and manually set status4k to 0 in media and seasons, started it back up (verified db was correctly adjusted and such, it's fine). Still shows 4K for Season Issues.

Hmm. Well ill try to see if i can debug even though I can't recreate it 🤔

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

Sanity check of settings.json

{
"clientId": "REMOVED",
"vapidPrivate": "REMOVED",
"vapidPublic": "REMOVED",
"main": {
"apiKey": "REMOVED==",
"applicationTitle": "Jellyseerr",
"applicationUrl": "REMOVED",
"csrfProtection": false,
"cacheImages": true,
"defaultPermissions": 4194336,
"defaultQuotas": {
"movie": {
"quotaLimit": 0,
"quotaDays": 7
},
"tv": {
"quotaLimit": 0,
"quotaDays": 7
}
},
"hideAvailable": false,
"localLogin": false,
"newPlexLogin": true,
"region": "US",
"originalLanguage": "",
"trustProxy": false,
"mediaServerType": 2,
"partialRequestsEnabled": true,
"locale": "en"
},
"plex": {
"name": "",
"ip": "",
"port": 32400,
"useSsl": false,
"libraries": []
},
"jellyfin": {
"name": "",
"hostname": "REMOVED",
"externalHostname": "REMOVED",
"jellyfinForgotPasswordUrl": "",
"libraries": [
{
"id": "REMOVED",
"name": "Movies",
"enabled": true,
"type": "movie"
},
{
"id": "REMOVED",
"name": "Shows",
"enabled": true,
"type": "show"
}
],
"serverId": "REMOVED"
},
"tautulli": {},
"radarr": [
{
"name": "Radarr",
"hostname": "REMOVED",
"port": 7878,
"apiKey": "REMOVED",
"useSsl": false,
"baseUrl": "/Radarr",
"activeProfileId": 1,
"activeProfileName": "Any",
"activeDirectory": "/REMOVED",
"is4k": false,
"minimumAvailability": "released",
"tags": [],
"isDefault": true,
"externalUrl": "REMOVED/Radarr",
"syncEnabled": true,
"preventSearch": false,
"tagRequests": false,
"id": 0
}
],
"sonarr": [
{
"name": "Sonarr",
"hostname": "REMOVED",
"port": 8989,
"apiKey": "REMOVED",
"useSsl": false,
"baseUrl": "/Sonarr",
"activeProfileId": 1,
"activeLanguageProfileId": 1,
"activeProfileName": "Any",
"activeDirectory": "/REMOVED",
"activeAnimeProfileId": 1,
"activeAnimeLanguageProfileId": 1,
"activeAnimeProfileName": "Any",
"activeAnimeDirectory": "/REMOVED",
"tags": [],
"animeTags": [],
"is4k": false,
"isDefault": true,
"enableSeasonFolders": true,
"externalUrl": "REMOVED/Sonarr",
"syncEnabled": true,
"preventSearch": false,
"tagRequests": false,
"id": 0
}
],
"public": {
"initialized": true
},
"notifications": {
"agents": {
"email": {
"enabled": false,
"options": {
"userEmailRequired": false,
"emailFrom": "",
"smtpHost": "",
"smtpPort": 587,
"secure": false,
"ignoreTls": false,
"requireTls": false,
"allowSelfSigned": false,
"senderName": "Jellyseerr"
}
},
"discord": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": "",
"enableMentions": true
}
},
"lunasea": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": ""
}
},
"slack": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": ""
}
},
"telegram": {
"enabled": false,
"types": 0,
"options": {
"botAPI": "",
"chatId": "",
"sendSilently": false
}
},
"pushbullet": {
"enabled": false,
"types": 0,
"options": {
"accessToken": ""
}
},
"pushover": {
"enabled": false,
"types": 0,
"options": {
"accessToken": "",
"userToken": "",
"sound": ""
}
},
"webhook": {
"enabled": false,
"types": 0,
"options": {
"webhookUrl": "",
"jsonPayload": "REMOVED"
}
},
"webpush": {
"enabled": false,
"options": {}
},
"gotify": {
"enabled": true,
"types": 4062,
"options": {
"url": "REMOVED",
"token": "REMOVED"
}
}
}
},
"jobs": {
"plex-recently-added-scan": {
"schedule": "0 */5 * * * *"
},
"plex-full-scan": {
"schedule": "0 0 3 * * *"
},
"plex-watchlist-sync": {
"schedule": "0 */10 * * * *"
},
"radarr-scan": {
"schedule": "0 0 4 * * *"
},
"sonarr-scan": {
"schedule": "0 30 4 * * *"
},
"availability-sync": {
"schedule": "0 0 5 * * *"
},
"download-sync": {
"schedule": "0 * * * * *"
},
"download-sync-reset": {
"schedule": "0 0 1 * * *"
},
"jellyfin-recently-added-scan": {
"schedule": "0 */5 * * * *"
},
"jellyfin-full-scan": {
"schedule": "0 0 3 * * *"
},
"image-cache-cleanup": {
"schedule": "0 0 5 * * *"
},
"jellyfin-recently-added-sync": {
"schedule": "0 */5 * * * *"
},
"jellyfin-full-sync": {
"schedule": "0 0 3 * * *"
}
}
}

I can see 4K is disabled there, too.

@OdinVex
Copy link
Author

OdinVex commented Mar 10, 2024

I've traced the issue down to jellyfinMediaId4k being set for entries, so it's just been an absolute majority of Seasons, not all. Sometimes jellyfinMediaId4k matches jellyfinMediaId, sometimes it doesn't. But since none of my content is 4K it's baffling as to why jellyfinMediaId4k is getting set to begin with.

Edit: Removed brain-fart-quality analysis of code, not used to this language's style.

Edit: After NULL-ing jellyfinMediaId4k the Series are fine and show up correctly in Issues. I wonder why in other places they showed up as non-4K but in Issues they showed up as 4K.

Edit: I deleted the database and did a full rescan, filed the issue I was having...and it's back to saying 4K (all content...Seasons show as 4K in Issues, Movies don't). I'm just going to patch it out for now.

Fallenbagel added a commit that referenced this issue Mar 13, 2024
…llyfinMediaId4k

Previously `jellyfinMediaId4k` was being assigned even if 4k server was not setup or even if 4k
content were not present. This fixes it by conditionally assigning the jellyfinMediaId and
JellyfinMediaId4k

fix #681
@Fallenbagel
Copy link
Owner

@OdinVex found the issue and fixed it c:

@OdinVex
Copy link
Author

OdinVex commented Mar 13, 2024

Is there a summary regarding why it would easily happen to me but not for you? Unfamiliar with the project's internals.

Fallenbagel added a commit that referenced this issue Mar 13, 2024
…llyfinMediaId4k (#686)

Previously `jellyfinMediaId4k` was being assigned even if 4k server was not setup or even if 4k
content were not present. This fixes it by conditionally assigning the jellyfinMediaId and
JellyfinMediaId4k

fix #681
@Fallenbagel
Copy link
Owner

Fallenbagel commented Mar 13, 2024

Is there a summary regarding why it would easily happen to me but not for you? Unfamiliar with the project's internals.

I was able to recreate it on a completely new instance. The issue was that the Id was being set irregardless of whether or not 4k content was present instead of checking and setting conditionally. Movies were already setting it conditionally, but shows weren't.

Fallenbagel added a commit that referenced this issue Apr 15, 2024
* fix(i18n): fixed jellyfin jobs

* feat: translations update from Hosted Weblate (#3258)

* feat(lang): translated using Weblate (Korean)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 11.2% (139 of 1233 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 11.3% (139 of 1226 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 7.8% (96 of 1226 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 7.4% (91 of 1226 strings)

feat(lang): translated using Weblate (Korean)

Currently translated at 1.7% (21 of 1226 strings)

feat(lang): added translation using Weblate (Korean)

Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: 김상구 (Studio) <spair0039@gmail.com>
Co-authored-by: 최효근 <gyrms7532@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ko/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Greek)

Currently translated at 100.0% (1233 of 1233 strings)

Co-authored-by: BeardedWatermelon <periklis.karantonis@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/el/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Serbian)

Currently translated at 49.7% (608 of 1222 strings)

Co-authored-by: Dzonkins <nikoladjordjevic.ns@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1228 of 1228 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (Spanish)

Currently translated at 100.0% (1222 of 1222 strings)

Co-authored-by: Angel <adelpozoman@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/es/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Romanian)

Currently translated at 33.0% (408 of 1234 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 29.7% (367 of 1234 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 27.9% (345 of 1234 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 27.8% (344 of 1233 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 27.6% (339 of 1226 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 27.4% (337 of 1226 strings)

feat(lang): translated using Weblate (Romanian)

Currently translated at 22.8% (279 of 1223 strings)

Co-authored-by: Bunduc Dragos <bunduc.dragos@gmail.com>
Co-authored-by: DragoPrime <emperordrago@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ro/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Russian)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Russian)

Currently translated at 87.4% (1069 of 1223 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kirill Zhukov <siper13@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ru/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (Danish)

Currently translated at 100.0% (1222 of 1222 strings)

Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Emil Nymann <ens@hiper.dk>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/da/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Hungarian)

Currently translated at 86.3% (1055 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ZsiGiT <zsigit@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hu/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Dutch)

Currently translated at 99.4% (1226 of 1233 strings)

feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Dutch)

Currently translated at 100.0% (1222 of 1222 strings)

Co-authored-by: Bas <bashankamp+weblate@gmail.com>
Co-authored-by: COTMO <moermantom1@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/nl/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 99.6% (1229 of 1233 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1228 of 1228 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 99.2% (1213 of 1222 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 99.1% (1212 of 1222 strings)

feat(lang): translated using Weblate (Portuguese (Brazil))

Currently translated at 99.1% (1212 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mateus <mateusbernardo@protonmail.com>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Co-authored-by: Tijuco <sendtomy@protonmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_BR/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Czech)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Czech)

Currently translated at 99.7% (1223 of 1226 strings)

feat(lang): translated using Weblate (Czech)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Czech)

Currently translated at 96.4% (1179 of 1222 strings)

feat(lang): translated using Weblate (Czech)

Currently translated at 89.1% (1090 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Marek <marek@pavelka.xyz>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/cs/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Arabic)

Currently translated at 100.0% (1233 of 1233 strings)

Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ar/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Portuguese (Portugal))

Currently translated at 100.0% (1222 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: ssantos <ssantos@web.de>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/pt_PT/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (German)

Currently translated at 99.9% (1233 of 1234 strings)

feat(lang): translated using Weblate (German)

Currently translated at 99.5% (1228 of 1234 strings)

feat(lang): translated using Weblate (German)

Currently translated at 99.5% (1227 of 1233 strings)

feat(lang): translated using Weblate (German)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (German)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (German)

Currently translated at 95.9% (1172 of 1222 strings)

feat(lang): translated using Weblate (German)

Currently translated at 95.9% (1172 of 1222 strings)

feat(lang): translated using Weblate (German)

Currently translated at 94.7% (1158 of 1222 strings)

Co-authored-by: Ben <ben.david.wallner@gmail.com>
Co-authored-by: Furkan Çakar <cakar.55.furkan@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Juli <snowjuli@protonmail.com>
Co-authored-by: Leo Schultheiss <leoschultheiss@yahoo.de>
Co-authored-by: inkarnation <94744834+inkarnation@users.noreply.github.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/de/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 99.6% (1229 of 1233 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1228 of 1228 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 90.0% (1104 of 1226 strings)

feat(lang): translated using Weblate (Swedish)

Currently translated at 90.0% (1101 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: Topfield99 <timmiesonne@live.se>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/sv/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Lithuanian)

Currently translated at 58.7% (725 of 1233 strings)

feat(lang): translated using Weblate (Lithuanian)

Currently translated at 58.6% (719 of 1226 strings)

feat(lang): translated using Weblate (Lithuanian)

Currently translated at 51.0% (624 of 1222 strings)

feat(lang): translated using Weblate (Lithuanian)

Currently translated at 43.9% (537 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: PovilasID <povilas.sidaravicius@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/lt/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 99.5% (1217 of 1223 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 99.4% (1216 of 1223 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 98.6% (1207 of 1223 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 97.2% (1189 of 1223 strings)

feat(lang): translated using Weblate (Catalan)

Currently translated at 94.3% (1154 of 1223 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Maite Guix <maite.guix@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/ca/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Croatian)

Currently translated at 89.9% (1103 of 1226 strings)

Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/hr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Italian)

Currently translated at 92.2% (1138 of 1233 strings)

feat(lang): translated using Weblate (Italian)

Currently translated at 88.5% (1092 of 1233 strings)

feat(lang): translated using Weblate (Italian)

Currently translated at 85.8% (1058 of 1233 strings)

feat(lang): translated using Weblate (Italian)

Currently translated at 86.0% (1052 of 1223 strings)

feat(lang): translated using Weblate (Italian)

Currently translated at 83.2% (1017 of 1222 strings)

Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Gian Marco Cinalli <gm.cinalli@gmail.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mirco Cau <mircocau@gmail.com>
Co-authored-by: eggermn <egger.mn@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/it/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1226 of 1226 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1225 of 1226 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1225 of 1226 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 99.8% (1224 of 1226 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 99.9% (1223 of 1224 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 98.0% (1198 of 1222 strings)

feat(lang): translated using Weblate (Chinese (Simplified))

Currently translated at 96.7% (1182 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Jassy lin <linjiaxinme@gmail.com>
Co-authored-by: anpplex <anpplex@gmail.com>
Co-authored-by: kx <yoboy.rox@gmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hans/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1234 of 1234 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1233 of 1233 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.9% (1225 of 1226 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1224 of 1224 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1223 of 1223 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1222 of 1222 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.5% (1216 of 1222 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.5% (1216 of 1222 strings)

feat(lang): translated using Weblate (French)

Currently translated at 99.5% (1216 of 1222 strings)

feat(lang): translated using Weblate (French)

Currently translated at 100.0% (1222 of 1222 strings)

Co-authored-by: Hordo <hordocast@mailo.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Mathieu <math_du_88@yahoo.fr>
Co-authored-by: Maxent <rouaultmaxent@gmail.com>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
Co-authored-by: Sulli <susu.leduc@gmail.com>
Co-authored-by: Symness <simon@frayssines.fr>
Co-authored-by: Valentin <droidente@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/fr/
Translation: Overseerr/Overseerr Frontend

* feat(lang): translated using Weblate (Chinese (Traditional))

Currently translated at 99.7% (1219 of 1222 strings)

feat(lang): translated using Weblate (Chinese (Traditional))

Currently translated at 89.6% (1095 of 1222 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 주서현 <adan.89lion@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/overseerr/overseerr-frontend/zh_Hant/
Translation: Overseerr/Overseerr Frontend

---------

Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: 김상구 (Studio) <spair0039@gmail.com>
Co-authored-by: 최효근 <gyrms7532@gmail.com>
Co-authored-by: BeardedWatermelon <periklis.karantonis@gmail.com>
Co-authored-by: Dzonkins <nikoladjordjevic.ns@gmail.com>
Co-authored-by: Angel <adelpozoman@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Bunduc Dragos <bunduc.dragos@gmail.com>
Co-authored-by: DragoPrime <emperordrago@gmail.com>
Co-authored-by: Kirill Zhukov <siper13@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Emil Nymann <ens@hiper.dk>
Co-authored-by: ZsiGiT <zsigit@gmail.com>
Co-authored-by: Bas <bashankamp+weblate@gmail.com>
Co-authored-by: COTMO <moermantom1@gmail.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: Mateus <mateusbernardo@protonmail.com>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Co-authored-by: Tijuco <sendtomy@protonmail.com>
Co-authored-by: Marek <marek@pavelka.xyz>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: Ben <ben.david.wallner@gmail.com>
Co-authored-by: Furkan Çakar <cakar.55.furkan@gmail.com>
Co-authored-by: Juli <snowjuli@protonmail.com>
Co-authored-by: Leo Schultheiss <leoschultheiss@yahoo.de>
Co-authored-by: inkarnation <94744834+inkarnation@users.noreply.github.com>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: Topfield99 <timmiesonne@live.se>
Co-authored-by: PovilasID <povilas.sidaravicius@gmail.com>
Co-authored-by: Maite Guix <maite.guix@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Gian Marco Cinalli <gm.cinalli@gmail.com>
Co-authored-by: Mirco Cau <mircocau@gmail.com>
Co-authored-by: eggermn <egger.mn@gmail.com>
Co-authored-by: Jassy lin <linjiaxinme@gmail.com>
Co-authored-by: anpplex <anpplex@gmail.com>
Co-authored-by: kx <yoboy.rox@gmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Hordo <hordocast@mailo.com>
Co-authored-by: Mathieu <math_du_88@yahoo.fr>
Co-authored-by: Maxent <rouaultmaxent@gmail.com>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
Co-authored-by: Sulli <susu.leduc@gmail.com>
Co-authored-by: Symness <simon@frayssines.fr>
Co-authored-by: Valentin <droidente@gmail.com>
Co-authored-by: 주서현 <adan.89lion@gmail.com>

* feat: add Peacock to Network Slider (#3545)

* feat: add tooltips to tautulli avatars (#3601)

* named service inside docker-compose.yml

* Fix permissions on ManageSliderOver

Previously, would cause a 403 error when a non-admin user opened a movie/series page

* feat: add ko language (#3619)

* style: fix prettier errors

* Update de.json

Added a german translation for 
  "components.Discover.RecentlyAddedSlider.recentlyAdded": "Recently Added",

* feat: select default seriesType for anime (#3627)

* feat: select default seriesType for anime

Added flexibility to set default anime series type in service settings. Now you can choose
'standard' for anime if you prefer it, making it easier to use features like searching for season
packs on Sonarr.

fix #3626

* feat: extracted translations

* feat: standard series type selector (#3628)

* feat: added a standard series type selector

* fix: moved series type property to correct interface

* feat(notif): add Pushover sound options (#2403)

Co-authored-by: Danshil Kokil Mungur <me@danshilm.com>

* chore: specify files/directories to exclude from git archives (#2184)

Co-authored-by: Danshil Kokil Mungur <me@danshilm.com>

* feat: update SameSite policy of session cookie to Lax (#3650)

* update session cookie samesite policy to lax

* set cookie samesite policy based on csrf protection setting

* fix: resolved issue with region selector and all regions value (#3652)

* docs: add RemiRigal as a contributor for code (#3653) [skip ci]

* docs: update README.md

* docs: update .all-contributorsrc

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>

* fix: request watchlist items sequentially to prevent bypassing quota (#3667)

* build: update node to 20.9 (#3668)

* build: do not link python for arm (#3670)

* docs: adds jellyseerr commit links

Adds jellyseerr commit links to Fallenbagel. TODO: add other contributors of jellyseerr into the
list

* update emoji for jellyseerr contributor

* Too many jellyfishes

* build: update docker ubuntu images to 22.04 (#3671)

* build: use node 18 (#3675)

* build: add global node-gyp for arm (#3676)

* build: correct node version in snapcraft (#3678)

* chore(translations): fixed watchlist translation so its generic for all media servers

* revert(jellyfinapi): reverts #450 as it broke library sync support for local accounts using LDAP

Reverted #450 which addressed the issue where the automatic grouping enabled libraries were not
functioning correctly. The previous fix inadvertently caused a bug for Jellyfin LDAP users,
preventing library syncing with a 401 error. Reverting this change temporarily until support for
automatic library grouping can be re-implemented

fix #489

* fix(langcode): fixes the ukranian language code

This changes the ukranian language code from ua to uk to fit to ISO 639-1 format that the tmdb api
uses.

fix #504

* fix(jellyfinlogin): use externalHostname if set for forgetpassword link

Implemented dynamic URL generation for the 'Forgot Password' feature. If jellyfin external hostname
is set, the URL is generated based on it; otherwise, jellyfin hostname is used as the base URL. The
URL includes additional parameters to handle emby support.

fix #199, fix #424, re #212

* ci(build): changes the base of the snap build to fix compatibility issues with GLIBC version

Changes base to core20 in an attempt to fix the error `node: /lib/x86_64-linux-gnu/libc.so.6:
version `GLIBC_2.28' not found (required by node)` during snap builds

* build(snap): changes node-js plugin to npm plugin for Core20

In an attempt to fix version compatibility of `GLIBC_2.28` base was upgraded from core18 to core20.
Node-js plugin was deprecated for core20 and instead npm plugin has to be used. As npm plugin cannot
specify the package manager to use, yarn is now installed globally during the override-build phase.

* build(snap): fix path for the build-environment

* build(snap): use nil package and try to setup node in override-build step

* build(snap): add yarn install before yarn build

* build(snap): add frozen-lockfile and increase network timeout for yarn install

* build(snap): remove `rm .gitbook.yaml` line to fix snap builds

* fix(watchlist): discover local watchlist item display and profile local watchlist slider visibility

Previously when you expand the `Your Watchlist` slider from the discover page to see all your
watchlist items, you only see the first 20 items. This commit fixes that so you can see all your
local watchlist items when you expand that slider. In addition, this commit also fixes the visiblity
of profile watchlist slider for local watchlists

* refactor: cleans up local watchlist logic and fixes translation extractions

* fix: fix the translations for watchlist permissions and userSettings page

* docs: [skip ci] change contributor settings to add both upstream and downstream contributors

This commit changes the contributorrc for allcontributors bot so we can add both overseerr and
jellyseerr contributors to the list

* docs: update README to accomodate both upstream and downstream contributor list seperately

* docs: [skip ci] add in current project allcontributors only

As allcontributors bot does not support having two lists of allcontributors seperately,
unfortunately had to remove upstream contributors from the .all-contributorsrc. However, they will
be added manually by @Fallenbagel to the README.md

* docs: [skip ci] removed contributor block so all-contributors can handle it

* docs: update README.md

* docs: update .all-contributorsrc

* docs: update README.md

* docs: update .all-contributorsrc

* chore: [skip ci] added skipCi to all-contributorsrc temporarily

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Add more detailed installation instructions

* Update README.md

* ci(build): implement github repository container images

fix #370

* ci(build): hard-coded repository owner name for lowercase naming

* build: revert the hardcoded tag

* ci: github repository container lowercase tag

* update .github folder templates

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Adding Jellyfin Setting for Custom "Forgot Password" URL

Adding Jellyfin Setting for Custom "Forgot Password" URL.  Useful in cases where you are using a custom authentication provider such as the LDAP plugin, Authelia, lldap, or any other external auth scheme with its own password reset page.

* Making the new setting optional

* Fixing code formatting, prettier

* fix(watchlist): added missing prop for watchlist item removal button in watchlist page

This fix resolves a Watchlist page bug where the isAddedToWatchlist prop was missing.
Without this prop, the removal button for watchlist items was absent. In this fix, the
isAddedToWatchlist prop is re-added and set to true, allowing users to remove items from
their local watchlist directly on the Watchlist page.

* fix: ensure watchlist updates are immediately reflected

This fix addresses an issue on the Watchlist page where changes to the watchlist were not
immediately reflected. Previously, after removing an item from the watchlist, the update
required a full page reload or revalidating upon focusing the window or tab. With this fix,
the watchlist now correctly mutates and updates in real-time, providing a seamless user
experience.

* fix: correct width issue in datepicker of filterSliderOver

This commit addresses a rendering issue with the date picker component.
The problem was traced back to a misconfiguration in the tailwindcss settings, resulting in an
incorrect width for the popup.

fix #415

* refactor: jellyfin scan jobs moved from server/jobs to server/libs/scanners

* fix: disable seasonfolder option in sonarr for jellyfin/Emby users

This disables seasonfolder option in sonarr for jellyfin/emby users as physical seasonFolders are
necessary as virtualFolders are ignored since #126

fix #575

* refactor: clean out commented code

* docs: reverted two unrelated files to its develop branch state

* fix: fix german translation for "components.Discover.FilterSlideover.tmdbuservotecount"

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* Link related projects in README.md

* Add more badges and weblate status

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* update weblate link

* move weblate details to contributing.md

* add translation percentage badge

* update discord badge

* docs: fix weblate link

* feat: added Letterboxd links for the external link blocks for movies

* ci(preview): added arm support for preview tags

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

* fix(jellyfin.ts): process virtual seasons if they have non virtual episodes (#639)

All seasons are processed now, but those without any episodes are filtered out again as unavailable.
This fixes in issue where jellyfin reports all seasons as virtual

* feat(job): media availability support for jellyfin/emby (#522)

* feat(job): media availability support for jellyfin/emby

This refactors the media availability job to support jellyfin/emby for media removal automatically.
Needs further testing on 4k items (as I have not yet tested with 4k), however, non-4k items work as
intended.

fix #406, fix #193, fix #516, fix #362, fix #84

* fix(availabilitysync): use the correct 4k jellyfinMediaId

* fix: season mapping for plex

Fixes a bug introduced with this PR where media availability sync job removed the seasons from all
series even when those seasons existed

* refactor: jellyfin authentication and add gravatar for missing avatars of jellyfin users (#664)

* refactor: jellyfin authentication

This refactor standardizes the authentication approach in Jellyfin to mirror the method employed in
Plex authentication for consistency

* feat: use gravatar for jellyfin users' with missing jellyfin avatars

* Fixed a typo (#654)

Just a simple typo fix.

* docs: add trackmastersteve as a contributor for doc (#665)

* docs: update README.md [skip ci]

* docs: update .all-contributorsrc [skip ci]

---------

Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>

* fix: typos on readme (#655)

* Fix typo

* Apply suggestions

* Apply suggestions

---------

Co-authored-by: Fallenbagel <98979876+Fallenbagel@users.noreply.github.com>

* fix(embyauth): remove the accidentally added mediaServerType change code from another PR (#684)

Accidentally added the mediaServerType change code from another feature branch/PR during the auth
logic refactor that broke emby logins.

* fix(jellyfinscanner): conditionally assign the jellyfinMediaId and jellyfinMediaId4k (#686)

Previously `jellyfinMediaId4k` was being assigned even if 4k server was not setup or even if 4k
content were not present. This fixes it by conditionally assigning the jellyfinMediaId and
JellyfinMediaId4k

fix #681

* feat: check if first jellyfin user is admin (#635)

* feat: merge check if first jellyfin user is admin

re #610

* refactor(i18n): extract admin error message into en locale

---------

Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>

* refactor(i18n): change the user-facing identity of the application in i18n (#703)

* fix: nullable type for jellyfinMediaId(4k) (#702)

The jellyfinMediaId(4k) properties were inferred as string | undefined, causing them to be set to
undefined when assigning null. This prevented the media from being saved correctly to the SQLite
database, as it doesn't accept undefined values. This resolves the availabilitySync job issue where
the "play on" button wasn't being removed for all media server types.

fix #668

* fix(jellyfinapi): refactors jellyfin library sync to support automatic grouping and collections (#700)

* fix(jellyfinapi): refactors jellyfin library sync to support automatic grouping and collections

Previously, #450 added support for automatic library grouping. However, some users reported that
they were getting a 401 when using custom authentication such as LDAP. Therefore, that PR was
reverted (#524). This PR adds back the support for automatic library grouping for jellyfin
authentication users using the endpoint `/Library/MediaFolders` and fallsback to User views endpoint
if they're unable to sync the libraries (some, not all LDAP users had issues. Some reported that it
worked despite having custom authentication). Once it falls back to user views endpoint for syncing,
now it will detect if automatic grouping is enabled giving a warning that its not supported when
using some custom authentication methods. This PR also fixed collection syncing by expanding the
boxsets when syncing.

fix #256, fix #489, re #450, #524, fix #515, fix #474, fix #473

* refactor(i18n): adds the suffix "jellyfin" to jellyfin library sync message keys

* refactor(i18n): extract translation keys

* refactor: remove console logs

* refactor: remove more console logs

* refactor: apply review suggestions

* chore: fix prettier failing on .github file

* feat: jellyseerr makeover (#715)

---------

Co-authored-by: Daniel Fendrich <daniel.fendrich@3-s.at>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Developer J <jshsakura@gmail.com>
Co-authored-by: sct <sctsnipe@gmail.com>
Co-authored-by: 김상구 (Studio) <spair0039@gmail.com>
Co-authored-by: 최효근 <gyrms7532@gmail.com>
Co-authored-by: BeardedWatermelon <periklis.karantonis@gmail.com>
Co-authored-by: Dzonkins <nikoladjordjevic.ns@gmail.com>
Co-authored-by: Angel <adelpozoman@gmail.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: Bunduc Dragos <bunduc.dragos@gmail.com>
Co-authored-by: DragoPrime <emperordrago@gmail.com>
Co-authored-by: Kirill Zhukov <siper13@gmail.com>
Co-authored-by: Anders Ecklon <aecklon@gmail.com>
Co-authored-by: Emil Nymann <ens@hiper.dk>
Co-authored-by: ZsiGiT <zsigit@gmail.com>
Co-authored-by: Bas <bashankamp+weblate@gmail.com>
Co-authored-by: COTMO <moermantom1@gmail.com>
Co-authored-by: Kobe <kobaubarr@gmail.com>
Co-authored-by: Mateus <mateusbernardo@protonmail.com>
Co-authored-by: Rafael Vieira <rafaelvieiras@pm.me>
Co-authored-by: Tijuco <sendtomy@protonmail.com>
Co-authored-by: Marek <marek@pavelka.xyz>
Co-authored-by: Smexhy <roman.bartik@icloud.com>
Co-authored-by: Fhd-pro <juve.11@msn.com>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: Ben <ben.david.wallner@gmail.com>
Co-authored-by: Furkan Çakar <cakar.55.furkan@gmail.com>
Co-authored-by: Juli <snowjuli@protonmail.com>
Co-authored-by: Leo Schultheiss <leoschultheiss@yahoo.de>
Co-authored-by: inkarnation <94744834+inkarnation@users.noreply.github.com>
Co-authored-by: Luna Jernberg <droidbittin@gmail.com>
Co-authored-by: Shjosan <shjosan@kakmix.co>
Co-authored-by: Topfield99 <timmiesonne@live.se>
Co-authored-by: PovilasID <povilas.sidaravicius@gmail.com>
Co-authored-by: Maite Guix <maite.guix@gmail.com>
Co-authored-by: dtalens <databio@gmail.com>
Co-authored-by: Bruno Ševčenko <bs3vcenk@gmail.com>
Co-authored-by: Francesco <francy.ammirati@hotmail.com>
Co-authored-by: Gian Marco Cinalli <gm.cinalli@gmail.com>
Co-authored-by: Mirco Cau <mircocau@gmail.com>
Co-authored-by: eggermn <egger.mn@gmail.com>
Co-authored-by: Jassy lin <linjiaxinme@gmail.com>
Co-authored-by: anpplex <anpplex@gmail.com>
Co-authored-by: kx <yoboy.rox@gmail.com>
Co-authored-by: lkw123 <lkw20010211@gmail.com>
Co-authored-by: Hordo <hordocast@mailo.com>
Co-authored-by: Mathieu <math_du_88@yahoo.fr>
Co-authored-by: Maxent <rouaultmaxent@gmail.com>
Co-authored-by: Rémi Guerrero <remidu34070@hotmail.fr>
Co-authored-by: Sulli <susu.leduc@gmail.com>
Co-authored-by: Symness <simon@frayssines.fr>
Co-authored-by: Valentin <droidente@gmail.com>
Co-authored-by: 주서현 <adan.89lion@gmail.com>
Co-authored-by: Jean Beauchamp <jean@vwdubb.com>
Co-authored-by: Ryan Cohen <ryan@sct.dev>
Co-authored-by: Eduardo <sirmartin@gmail.com>
Co-authored-by: Rick Luiken <rick-luiken@live.nl>
Co-authored-by: Br33ce <124933490+Br33ce@users.noreply.github.com>
Co-authored-by: Brandon Cohen <brandon@z3hn.dev>
Co-authored-by: TheCatLady <52870424+TheCatLady@users.noreply.github.com>
Co-authored-by: Danshil Kokil Mungur <me@danshilm.com>
Co-authored-by: RemiRigal <rigal.remi@gmail.com>
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Athfan Khaleel <athphane@gmail.com>
Co-authored-by: Derek Paschal <dtpaschal@gmail.com>
Co-authored-by: mdll23 <m.dallinger@mailbox.org>
Co-authored-by: Janek <github@melonion.me>
Co-authored-by: Danish Humair <me@danishhumair.com>
Co-authored-by: Aleksa Siriški <31509435+aleksasiriski@users.noreply.github.com>
Co-authored-by: InvalidArgumentException <150857901+InvalidArgumentException@users.noreply.github.com>
Co-authored-by: Stephen Harris <trackmastersteve@users.noreply.github.com>
Co-authored-by: Gauvino <68083474+Gauvino@users.noreply.github.com>
@Fallenbagel
Copy link
Owner

🎉 This issue has been resolved in version 1.8.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working confirmed released
Projects
None yet
2 participants