Commit Graph
58 Commits
Author SHA1 Message Date
Charlie Strauss cabddc6090 Inject nativeshell script at the profile level to fix first-load race
On startup the WebEngineView first shows the bundled qrc find-webclient
page and then navigates to the server web client. That cross-origin
navigation moves the view to a new renderer process, and a user script
registered on the view is not reliably delivered to it, so the first
load of the web client comes up without window.NativeShell. jellyfin-web
then falls back to its HTML video player: playback works, but the native
mpv player, MPRIS, and client settings are silently unavailable until
the page is reloaded.

Registering the script on the profile instead makes injection apply to
every load, including the first one. Verified on Linux (Qt 6.11.2,
Wayland): before the change window.jmpInfo was undefined on every cold
start until a reload; after it is present on the first load.
2026-08-31 01:09:43 -06:00
Eric Gregory 2bc0c4fe8c Close to system tray option on Windows (#1159)
Displays a system tray icon when enabled. Closing the window (clicking the X or Alt+F4) hides the window.

The window can be restored by clicking the icon, or via its context menu. The application can be quit via the context menu or Ctrl+Q.

Default: Disabled

Closes #470
2026-02-24 21:07:47 -05:00
Andrew Rabert 0650372701 Use disk HTTP cache instead of memory cache 2025-12-26 18:30:54 -05:00
iZack 52d5067676 Working 2.0.0 build for Windows
It is really late so I'm calling it here. I wanted to put this out for relevant people to get eyes on, in order to aid in getting the Windows build of v2.0.0 out. Apologies in advance for not following any contrib guidelines or there being messes.  I'm leaving in the build scripts I used for now. The build scripts still contain a few hardcoded visual studio related values for now.  At the moment when I run the app on a different machine to the dev VM I'm using the qt web view doesn't seem to be rendering.

summary of where this is at:
the whole thing builds
works on my Windows 11 virtual machine

short summary of what I did:

A couple of qt6 updates specific to windows were addressed.

Some build system issues were addressed

did some minor refactoring to sieve out binary build dependencies from generated build files since its a lot easier when you can just delete the build folder to run a clean build
2025-12-19 01:43:38 -08:00
Andrew Rabert 726b067df3 Change launcher/titlebar name to "Jellyfin Desktop"
For clarity
2025-12-17 22:46:09 -05:00
Andrew Rabert f1896bcce7 Fix option to ignore certificate errors / add --ignore-certificate-errors flag 2025-12-14 14:39:08 -05:00
Andrew Rabert 8281ee713d Rename to Jellyfin Desktop 2025-12-14 05:26:31 -05:00
Andrew Rabert df79a7fb30 Add option to disable zoom (keys/wheel/pinch) 2025-11-30 15:18:19 -05:00
Andrew Rabert fd315620f9 Fix black window on un-minimize and resume from suspend
The JMP window would sometimes be blank/black after un-minimizing and
resuming from suspend. Moving the cursor briefly in the window would
then resolve the issue.

Tested on Arch Linux/Plasma 6/Wayland/AMD 6900XT

Probably works for others
2025-11-28 21:51:27 -05:00
Andrew Rabert c7e9cf7486 Change to Qt 6
Co-authored by: Izzie Walton <ian@iwalton.com>
Co-authored by: Satadru Pramanik <satadru@gmail.com>
Co-authored by: sevenrats <sevenrats@tutanota.com>
Co-authored by: xB <65196493+xBiei@users.noreply.github.com>
Co-authored by: zjeffer <4633209+zjeffer@users.noreply.github.com>
2025-11-22 18:16:00 -05:00
Andrew Rabert 9621af1b2b Refactor web security bypasses
- Remove --disable-web-security flag as it's no longer needed
    - There are no CORS nor CPS issues
    - mpv integration works
    - the service worker works
- Bundle JMP web bridge resources in application binary (file:// ->  qrc://)
    - This keeps installs cleaner and removes the risk of the native
      files going missing or using the incorrect paths.
    - Using file:// also had some issues with CSP
    - The JS assets are combined into a single JS script which is
      injected as a user script. This bypasses CSP issues.
- Replace connectivity check and web HTML retrieval JavaScript methods
  with C++ methods. This works around CORS issues on the server
  selection page.
2025-10-28 19:49:11 -04:00
Andrew Rabert 8f0b1e4e0e Fix JavaScript logging 2025-10-27 19:55:49 -04:00
Izzie Walton 8d0580b095 Use in-memory only http cache 2025-03-18 00:05:27 -04:00
Izzie Walton 1976274513 Always use external web client. 2024-06-06 17:20:52 -04:00
Ian Walton 613773fd1e Only use CSP workaround when actually needed. 2023-03-10 03:08:58 -05:00
Ian Walton 344aba88f1 Add option to disable SSL validation. (Not encouraged!!!) #48 2021-04-19 21:26:36 -04:00
Ian Walton 8847224fba Add NativeShell support. 2021-04-10 22:16:31 -04:00
Ian Walton abfd933e5b Fix F11 for fullscreen. 2021-04-06 12:33:12 -04:00
Ian Walton 0f98ad5a1b More installer and packaging fixes. 2021-04-04 15:54:50 -04:00
Ian Walton 678368bdfe Initial jf commit. 2021-04-04 02:48:27 -04:00
Rodger Combs d7dde160fe Split fullscreen and modeswitch controls 2018-09-11 22:02:47 +01:00
Matt Seeley e503e30377 Use a black background.
Resizing the KonvergoWindow shows the #111 HTML body above a #000 application window. Go black.

# Conflicts:
#	src/ui/KonvergoWindow.cpp
2018-02-07 20:34:33 +01:00
Matt Seeley 8455e01551 Remove some more unnecessary host scaling
* No transforming going on any more.
* Scale 1 should be default.
* No more viewport scaling in use.

# Conflicts:
#	src/main.cpp
2018-02-07 20:34:33 +01:00
Vincent Lang cfb4da0c17 Remove all host scaling 2018-02-07 20:34:33 +01:00
Matt Seeley fd5128ca20 Avoid enforcing a width width / height on the TV UI 2018-02-07 20:32:59 +01:00
Vincent Lang a655e7735e KonvergoWindow: fix QML change notifications
The old code probably didn't miss any change notifications, but it sent
too many of them. QML won't figure out property changes on its own, and
might recompute property bindings on every change notification. I
suspect this caused "binding loops" and crashes. (I wasn't able to
reproduce them. There is no doubt binding loops happen, and they are
most likely responsible for crashes we are seeing.)

Make change notifications fine-grained for every relevant property. Most
of these are for the web scaling nightmare, and thus are size-dependent.
Some also depend on the web mode (TV vs. desktop), but the commit moves
this dependency into the .qml, which makes this much easier.

The webUrl property remains a bit "dangerous", because the initialScale
parameter takes a snapshot value. Re-reading the webUrl property might
return a different value at runtime, but we do _not_ want to have a
proper change notification, as that would make the WebEngine element
reload the URL. We don't want to reload web-client only because it's
resized. I'm hoping to get rid of the initialScale URL parameter
completely. Currently it's definitely needed.
2017-04-05 09:47:46 +02:00
Vincent Lang 9b0a5300a7 Make more space on the debug overlay
We frequently have the problem that the debug overlay is cut off on the
bottom. QML doesn't appear to provide anything to auto-fit the text on
the debug overlay (well, maybe it shouldn't anyway). So try other means
of making more space.

Cut off long fields on the right panel (playback status). This
specifically cuts off the transcode URL at 400 characters. 400
characters should be enough to know some of the more basic info, like
source host/API and endpoint. You'll have to get the playback log to get
the full URL.

Scale the font size by the window height, not width. It was scaled by
width for the sake of long strings like log path and playback URL, but
using height seems generally better. Also use Math.round, as the
pixelSize is an integer (and will round down by default).

We could probably use pointSize, but it might be rounded too, and I'm
scared of what that might mean if hidpi is active on various platforms.
2017-03-14 17:25:29 +01:00
Vincent Lang 1c6b3bf743 webview.qml: swap F11 and Shift+F11 in desktop mode for consistency
It appears this was a mistake. Now the shortcuts are consistent with
input.json, and with the shortcuts for MacOS.

Shift+F11 will always toggle fullscreen and not switch the mode (both in
TV and desktop mode). F11 will always toggle fullscreen and web mode,
like the UI button does.
2017-03-14 16:23:30 +01:00
Vincent Lang 3d2fe19a78 webview.qml: move fullscreen shortcuts to common location
Just a cosmetic change. I find it less confusing to have all fullscreen
toggling key bindings together.
2017-03-14 16:21:20 +01:00
Tobias Hieta b8b55dbf0b Tweaks to layout setting
This tweaks the layout setting into only have two values: auto and tv.
This effectively means that you can now lock the layout into be TV only.
2016-12-13 08:56:29 +01:00
Tobias Hieta a42bd77273 Changes to how we switch modes.
We now have layout option that can be auto, tv or desktop. This locks
the mode to that. Auto behaves as 1.2.0 did.
2016-12-07 16:02:04 +01:00
Tobias Hieta 68367bf6d1 Abort playback when switching modes 2016-11-29 21:24:25 +01:00
Tobias Hieta f4c36a215a Rework hotkeys for desktop mode
Fixes plexinc/plex-media-player-private#523
2016-11-29 15:19:49 +01:00
Tobias Hieta 5d6804aab1 Improve shorcuts - Related to plexinc/plex-media-player-private#523 2016-11-28 18:45:00 +01:00
Tobias Hieta 8c5ab9f7ca WIP switch to fullscreen when switching mode 2016-11-28 18:45:00 +01:00
Tobias Hieta ac5849f6f5 Harmonize keymaps a bit 2016-11-28 18:45:00 +01:00
Tobias Hieta 7a9f4992fa Remove escape key to exit fullscreen. Add F11 as fullscreen button.
Related to plexinc/plex-media-player-private#514
2016-11-28 18:45:00 +01:00
Tobias Hieta 667a6129ea Added actions and handle new window/full screen.
Fixes plexinc/plex-media-player-private#507
Fixes plexinc/plex-media-player-private#505
Fixes plexinc/plex-web-client#5729
2016-11-28 18:45:00 +01:00
Tobias Hieta c9b01472c0 Add switch between desktop and tv mode 2016-11-28 18:45:00 +01:00
Tobias Hieta 13b78940be Log when we cant open the web-client 2016-06-30 12:01:23 +02:00
Tobias Hieta c2df48f19e Load web-client from resources directory instead of the Qt resource system
Now that the web-client is bundled with the binaries in the resources
directory we want to load it from there directly as well.

Since many configuration point the startup URL to
qrc://konvergo/index.html we need to migrate them to a new value.
Instead of putting the full file:// url in this setting I made a
special value called "bundled" instead that will always point to the
latest version of the bundled web-client. This makes any future
migrations unnecessary.

This is implemented in a new function in SettingsComponent as opposed
to just reading the values raw.
2016-06-30 11:09:06 +02:00
Vincent Lang 91efcb8fca UI: enable text wrapping for right half of debug overlay 2016-05-02 13:05:02 +02:00
Tobias Hieta ef30c9e4bd Center web-view in host window.
This is a temporary measure to fix #267 while we wait for Web to be
able to scale and fill the whole host window.
2016-03-30 12:52:22 +02:00
Tobias Hieta 85715bb322 Massive changes to how we handle screen and geometry restoration
This fixes a lot of issues with geometry restoration and also makes sure
we restore the correct screen we last had the windows opened on.
2016-03-14 15:15:29 +01:00
Tobias Hieta fdd3188ad1 Let the host calculate the scale for the web-client
This introduces two new pieces of information to the web-client. First
the web client is loaded with initialScale=XX on the query string.
Secondly there is now a system component signal that can be used to see
when the scale should be updated: channel.system.onScaleChanged(XX)

We need to make sure that the maxHeight is calculate by splitting it by
devicePixelRatio since size() in Qt is the *real* size and not the size
/ dpr, so when calculating the different scales, make sure to use dpr
to split max height and get a scaled value.

Also trigger the scale update when switching into fullscreen and back
to windowed mode.
2016-03-11 08:27:53 +01:00
Jocelyn Turcotte 99dcad6af3 Don't use a property binding on WebEngineView.url
QQuickWebEngineView::setUrl has a particular behavior vs other QML
properties that it doesn't check if the value is the same before
applying a new binding result. This means that if any of the binding
dependency changes ("Screen" in this case), the page will reload.

Since we always ever only want to set the URL once, set the url
property imperatively in Component.onCompleted. This however means
that the maxHeight query parameter will be wrong if the window
is later switched to a screen that would provide a different height.

This should help for #163 and possibly #155.
2016-01-05 15:31:04 +01:00
Tobias Hieta 519eefab85 Get mini scales working and center the webview.
Related to #10
2015-11-06 10:30:40 +01:00
Tobias Hieta a83f2daa26 And finally fix the logic for retina screens again.
This time we needed to make sure that all places referring to
webMaxHeight got divided by DPR

Related to #10
2015-11-06 10:07:45 +01:00
Tobias Hieta 8d889b69ab Fix logic for non retina screens.
Related to #10
2015-11-06 10:00:50 +01:00
Tobias Hieta 5f3073394d Reverted Qt patch and then we need to clamp maxHeight to 1440 pixels.
We take devicePixelRatio into consideration here so that screens with
DPR==1 don't get upscaled from 720 pixels (which doesn't look good).

Related to #10
2015-11-06 09:47:33 +01:00