Rename to Jellyfin Desktop

This commit is contained in:
Andrew Rabert committed 2025-12-14 05:26:31 -05:00
1 parent 020505abb9
commit 8281ee713d
45 files changed
+232 -223

No files matched your search

+5 -5
View File
@@ -9,15 +9,15 @@ assignees: ''
Four considerations:
- Please do not open bug reports to ask questions. Use the Discussions feature instead.
- Please make sure the issue only pertains to Jellyfin Media Player. If it also occurs in the web client, send the issue to jellyfin-web instead.
- Please make sure the issue only pertains to Jellyfin Desktop. If it also occurs in the web client, send the issue to jellyfin-web instead.
- Please make sure that your issue is not being caused by errors in custom CSS or note that you are using custom CSS.
- Notably, there have been instances of custom CSS breaking TV mode.
- You can disable custom CSS under Display in the user settings.
- Please provide logs. You can drag the log file into the issue to attach it.
- Windows: `%LOCALAPPDATA%\JellyfinMediaPlayer\logs`
- Linux: `~/.local/share/jellyfinmediaplayer/logs/`
- Linux (Flatpak): `~/.var/app/com.github.iwalton3.jellyfin-media-player/data/jellyfinmediaplayer/logs/`
- macOS: `~/Library/Logs/Jellyfin Media Player/`
- Windows: `%LOCALAPPDATA%\Jellyfin Desktop\logs`
- Linux: `~/.local/share/jellyfin-desktop/logs/`
- Linux (Flatpak): `~/.var/app/org.jellyfin.JellyfinDesktop/data/jellyfin-desktop/logs/`
- macOS: `~/Library/Logs/Jellyfin Desktop/`
**Describe the bug**
A clear and concise description of what the bug is.
+24 -24
View File
@@ -26,18 +26,18 @@ jobs:
ninja install
- name: Fix library paths and create dmg
run: |
python3 ./scripts/fix-install-names.py ./build/output/Jellyfin\ Media\ Player.app
python3 ./scripts/fix-webengine.py ./build/output/Jellyfin\ Media\ Player.app
codesign --force --deep -s - ./build/output/Jellyfin\ Media\ Player.app/
python3 ./scripts/fix-install-names.py "./build/output/Jellyfin Desktop.app"
python3 ./scripts/fix-webengine.py "./build/output/Jellyfin Desktop.app"
codesign --force --deep -s - "./build/output/Jellyfin Desktop.app/"
brew install create-dmg
attempts=0
while [[ "$attempts" -lt 10 ]]
do
attempts=$((attempts+1))
create-dmg --volname "Jellyfin Media Player" --no-internet-enable "JellyfinMediaPlayer.dmg" "./build/output/Jellyfin Media Player.app" && break || echo "dmg create failed, retrying..."
create-dmg --volname "Jellyfin Desktop" --no-internet-enable "Jellyfin Desktop.dmg" "./build/output/Jellyfin Desktop.app" && break || echo "dmg create failed, retrying..."
sleep 5
done
if ! [[ -e JellyfinMediaPlayer.dmg ]]
if ! [[ -e "Jellyfin Desktop.dmg" ]]
then
echo "Failed to create dmg after 10 attempts"
exit 1
@@ -46,7 +46,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: macos
path: ${{ github.workspace }}/JellyfinMediaPlayer.dmg
path: ${{ github.workspace }}/Jellyfin Desktop.dmg
build-macarm64:
runs-on: macos-14
@@ -67,16 +67,16 @@ jobs:
ninja install
- name: Fix library paths and create dmg
run: |
python3 ./scripts/fix-install-names.py ./build/output/Jellyfin\ Media\ Player.app
python3 ./scripts/fix-webengine.py ./build/output/Jellyfin\ Media\ Player.app
codesign --force --deep -s - ./build/output/Jellyfin\ Media\ Player.app/
python3 ./scripts/fix-install-names.py "./build/output/Jellyfin Desktop.app"
python3 ./scripts/fix-webengine.py "./build/output/Jellyfin Desktop.app"
codesign --force --deep -s - "./build/output/Jellyfin Desktop.app/"
brew install create-dmg
create-dmg --volname "Jellyfin Media Player" --no-internet-enable "JellyfinMediaPlayer.dmg" "./build/output/Jellyfin Media Player.app"
create-dmg --volname "Jellyfin Desktop" --no-internet-enable "Jellyfin Desktop.dmg" "./build/output/Jellyfin Desktop.app"
- name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: macos-arm64
path: ${{ github.workspace }}/JellyfinMediaPlayer.dmg
path: ${{ github.workspace }}/Jellyfin Desktop.dmg
build-win64-legacy:
runs-on: windows-latest
@@ -122,7 +122,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: windows-legacy64
path: ${{ github.workspace }}/build/JellyfinMediaPlayer-*.exe
path: ${{ github.workspace }}/build/JellyfinDesktop-*.exe
build-win64:
runs-on: windows-latest
@@ -168,7 +168,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: windows
path: ${{ github.workspace }}/build/JellyfinMediaPlayer-*.exe
path: ${{ github.workspace }}/build/JellyfinDesktop-*.exe
build-win32:
runs-on: windows-latest
@@ -214,7 +214,7 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: windows-legacy32
path: ${{ github.workspace }}/build/JellyfinMediaPlayer-*.exe
path: ${{ github.workspace }}/build/JellyfinDesktop-*.exe
build-ubuntu:
strategy:
@@ -260,7 +260,7 @@ jobs:
key: "${{ secrets.REPO_KEY }}"
source: deployment/dist/*
strip_components: 2
target: "/srv/incoming/client/jellyfin-media-player/ubuntu/${{ matrix.tag }}"
target: "/srv/incoming/client/jellyfin-desktop/ubuntu/${{ matrix.tag }}"
- name: Import artifactsinto reprepro
uses: appleboy/ssh-action@029f5b4aeeeb58fdfe1410a5d17f967dacf36262 # v1.0.3
with:
@@ -272,8 +272,8 @@ jobs:
script: |
set -o xtrace
COMPONENT="main"
sudo reprepro --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedeb ${{ matrix.tag }} /srv/incoming/client/jellyfin-media-player/ubuntu/${{ matrix.tag }}/*.deb || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedsc ${{ matrix.tag }} /srv/incoming/client/jellyfin-media-player/ubuntu/${{ matrix.tag }}/*.dsc || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedeb ${{ matrix.tag }} /srv/incoming/client/jellyfin-desktop/ubuntu/${{ matrix.tag }}/*.deb || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/ubuntu --component ${COMPONENT} includedsc ${{ matrix.tag }} /srv/incoming/client/jellyfin-desktop/ubuntu/${{ matrix.tag }}/*.dsc || exit 1
- name: Move artifacts into repository
uses: appleboy/ssh-action@029f5b4aeeeb58fdfe1410a5d17f967dacf36262 # v1.0.3
with:
@@ -283,9 +283,9 @@ jobs:
debug: false
script_stop: false
script: |
export BASEDIR="/srv/repository/main/client/jellyfin-media-player/ubuntu"
export BASEDIR="/srv/repository/main/client/jellyfin-desktop/ubuntu"
sudo mkdir -p ${BASEDIR}/stable/${{ github.ref_name }} || exit 1
sudo mv -t ${BASEDIR}/stable/${{ github.ref_name }} /srv/incoming/client/jellyfin-media-player/ubuntu/${{ matrix.tag }}/* || exit 1
sudo mv -t ${BASEDIR}/stable/${{ github.ref_name }} /srv/incoming/client/jellyfin-desktop/ubuntu/${{ matrix.tag }}/* || exit 1
sudo rm ${BASEDIR}/latest || true
sudo ln -sf ${BASEDIR}/stable/${{ github.ref_name }} ${BASEDIR}/latest || exit 1
@@ -333,7 +333,7 @@ jobs:
key: "${{ secrets.REPO_KEY }}"
source: deployment/dist/*
strip_components: 2
target: "/srv/incoming/client/jellyfin-media-player/debian/${{ matrix.tag }}"
target: "/srv/incoming/client/jellyfin-desktop/debian/${{ matrix.tag }}"
- name: Import artifactsinto reprepro
uses: appleboy/ssh-action@029f5b4aeeeb58fdfe1410a5d17f967dacf36262 # v1.0.3
with:
@@ -345,8 +345,8 @@ jobs:
script: |
set -o xtrace
COMPONENT="main"
sudo reprepro --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedeb ${{ matrix.tag }} /srv/incoming/client/jellyfin-media-player/debian/${{ matrix.tag }}/*.deb || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedsc ${{ matrix.tag }} /srv/incoming/client/jellyfin-media-player/debian/${{ matrix.tag }}/*.dsc || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedeb ${{ matrix.tag }} /srv/incoming/client/jellyfin-desktop/debian/${{ matrix.tag }}/*.deb || exit 1
sudo reprepro --waitforlock 30 --basedir /srv/debian --component ${COMPONENT} includedsc ${{ matrix.tag }} /srv/incoming/client/jellyfin-desktop/debian/${{ matrix.tag }}/*.dsc || exit 1
- name: Move artifacts into repository
uses: appleboy/ssh-action@029f5b4aeeeb58fdfe1410a5d17f967dacf36262 # v1.0.3
with:
@@ -356,8 +356,8 @@ jobs:
debug: false
script_stop: false
script: |
export BASEDIR="/srv/repository/main/client/jellyfin-media-player/debian"
export BASEDIR="/srv/repository/main/client/jellyfin-desktop/debian"
sudo mkdir -p ${BASEDIR}/stable/${{ github.ref_name }} || exit 1
sudo mv -t ${BASEDIR}/stable/${{ github.ref_name }} /srv/incoming/client/jellyfin-media-player/debian/${{ matrix.tag }}/* || exit 1
sudo mv -t ${BASEDIR}/stable/${{ github.ref_name }} /srv/incoming/client/jellyfin-desktop/debian/${{ matrix.tag }}/* || exit 1
sudo rm ${BASEDIR}/latest || true
sudo ln -sf ${BASEDIR}/stable/${{ github.ref_name }} ${BASEDIR}/latest || exit 1
+2 -2
View File
@@ -22,9 +22,9 @@ toolchain.cmake
.last_wc_version
debian/*.debhelper.log
debian/.debhelper/
debian/jellyfin-media-player/
debian/jellyfin-desktop/
debian/files
debian/jellyfin-media-player.substvars
debian/jellyfin-desktop.substvars
debian/debhelper-build-stamp
dist.zip
obj-x86_64-linux-gnu/
+3 -3
View File
@@ -5,12 +5,12 @@ if (EXISTS "${CMAKE_SOURCE_DIR}/toolchain.cmake")
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_SOURCE_DIR}/toolchain.cmake")
endif()
project(JellyfinMediaPlayer CXX C)
project(JellyfinDesktop CXX C)
# we want this to be able to run clang-tidy
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "" FORCE)
option(CHECK_FOR_UPDATES "Enable checking for new versions of Jellyfin Media Player" ON)
option(CHECK_FOR_UPDATES "Enable checking for new versions of Jellyfin" ON)
option(OPENELEC "Make an OpenELEC build" OFF)
option(LINUX_X11POWER "Enable non D-Bus screensaver management" OFF)
option(USE_STATIC_MPVQT "Build MpvQt from bundled submodule instead of using system library" ON)
@@ -83,4 +83,4 @@ add_subdirectory(tests)
include(CPackConfiguration)
add_custom_target(install_app_bundle COMMAND ${CMAKE_COMMAND} -P cmake_install.cmake DEPENDS JellyfinMediaPlayer)
add_custom_target(install_app_bundle COMMAND ${CMAKE_COMMAND} -P cmake_install.cmake DEPENDS JellyfinDesktop)
+6 -6
View File
@@ -1,6 +1,6 @@
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Jellyfin Media Player")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Jellyfin")
set(CPACK_PACKAGE_VENDOR "Jellyfin")
set(CPACK_PACKAGE_NAME "Jellyfin Media Player")
set(CPACK_PACKAGE_NAME "Jellyfin")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_NANO})
@@ -13,10 +13,10 @@ elseif(WIN32)
else()
set(CPACK_SYSTEM_NAME linux-${CMAKE_HOST_SYSTEM_PROCESSOR})
endif()
set(CPACK_PACKAGE_FILE_NAME "JellyfinMediaPlayer-${VERSION_STRING}-${CPACK_SYSTEM_NAME}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "JellyfinMediaPlayer-${VERSION_STRING}-src")
set(CPACK_PACKAGE_FILE_NAME "Jellyfin-${VERSION_STRING}-${CPACK_SYSTEM_NAME}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "Jellyfin-${VERSION_STRING}-src")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "JellyfinMediaPlayer")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Jellyfin")
set(CPACK_STRIP_FILES 1)
@@ -32,5 +32,5 @@ else(WIN32)
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/CPackGeneratedConfig.cmake)
include(CPack)
cpack_add_component(Core DISPLAY_NAME "Jellyfin Media Player" DESCRIPTION "Jellyfin Media Player (Core Application)" REQUIRED)
cpack_add_component(Core DISPLAY_NAME "Jellyfin" DESCRIPTION "Jellyfin (Core Application)" REQUIRED)
endif(WIN32)
+2 -2
View File
@@ -1,6 +1,6 @@
set(PROJECT_SOURCE_DIR @PROJECT_SOURCE_DIR@)
execute_process(COMMAND @QTROOT@/bin/windeployqt.exe --verbose 9 --qmldir @SOURCE_ROOT@/src/ui ${CMAKE_INSTALL_PREFIX}/JellyfinMediaPlayer.exe)
execute_process(COMMAND @QTROOT@/bin/windeployqt.exe --verbose 9 --qmldir @SOURCE_ROOT@/src/ui "${CMAKE_INSTALL_PREFIX}/Jellyfin Desktop.exe")
# on windows windeployqt doesnt install non qt libraries, let cmake do that
# include(BundleUtilities)
@@ -13,7 +13,7 @@ endforeach()
get_filename_component(CEC_DIR @CEC_LIBRARY@ DIRECTORY)
list(APPEND SEARCHDIRS ${CEC_DIR})
# fixup_bundle("${CMAKE_INSTALL_PREFIX}/JellyfinMediaPlayer.exe" "" "${SEARCHDIRS}")
# fixup_bundle("${CMAKE_INSTALL_PREFIX}/Jellyfin Desktop.exe" "" "${SEARCHDIRS}")
#install(PROGRAMS ${VCREDIST_DIR}/vcredist_msvc2017_x64.exe DESTINATION .)
file(INSTALL @MPV_LIBRARY@ DESTINATION "${CMAKE_INSTALL_PREFIX}")
+3 -3
View File
@@ -1,3 +1,3 @@
install (FILES ${CMAKE_SOURCE_DIR}/resources/meta/com.github.iwalton3.jellyfin-media-player.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
install (FILES ${CMAKE_SOURCE_DIR}/resources/meta/com.github.iwalton3.jellyfin-media-player.appdata.xml DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/metainfo)
install (FILES ${CMAKE_SOURCE_DIR}/resources/images/icon.svg DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/scalable/apps RENAME com.github.iwalton3.jellyfin-media-player.svg)
install (FILES ${CMAKE_SOURCE_DIR}/resources/meta/org.jellyfin.JellyfinDesktop.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications)
install (FILES ${CMAKE_SOURCE_DIR}/resources/meta/org.jellyfin.JellyfinDesktop.appdata.xml DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/metainfo)
install (FILES ${CMAKE_SOURCE_DIR}/resources/images/icon.svg DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/icons/hicolor/scalable/apps RENAME org.jellyfin.JellyfinDesktop.svg)
+1 -1
View File
@@ -19,7 +19,7 @@ else()
endif()
set(INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR})
set(INSTALL_RESOURCE_DIR ${CMAKE_INSTALL_DATADIR}/jellyfinmediaplayer)
set(INSTALL_RESOURCE_DIR ${CMAKE_INSTALL_DATADIR}/jellyfin-desktop)
if(NOT OPENELEC)
include(InstallLinuxDesktopFile)
+8 -5
View File
@@ -1,12 +1,15 @@
set(MAIN_TARGET JellyfinMediaPlayer)
set(MAIN_TARGET JellyfinDesktop)
# Name of the output binary, defaults are only used on Linux
set(MAIN_NAME jellyfinmediaplayer)
# Name of the output binary and data directories
set(MAIN_NAME jellyfin-desktop)
set(DATA_NAME jellyfin-desktop)
if(APPLE)
set(MAIN_NAME "Jellyfin Media Player")
set(MAIN_NAME "Jellyfin Desktop")
set(DATA_NAME "Jellyfin Desktop")
elseif(WIN32)
set(MAIN_NAME "JellyfinMediaPlayer")
set(MAIN_NAME "Jellyfin Desktop")
set(DATA_NAME "Jellyfin Desktop")
endif(APPLE)
configure_file(src/shared/Names.cpp.in src/shared/Names.cpp @ONLY)
+4 -4
View File
@@ -133,7 +133,7 @@ endfunction()
add_custom_target(wix_install
COMMAND ${CMAKE_COMMAND} -P cmake_install.cmake
COMMENT "Copying files..."
DEPENDS JellyfinMediaPlayer)
DEPENDS JellyfinDesktop)
wix_harvest_directory("${CMAKE_INSTALL_PREFIX}" files.wxs CGROUP ProgramFilesComponentGroup DEPENDS wix_install)
@@ -149,12 +149,12 @@ else()
set(INSTALLER_ARCH_STR windows-x86)
endif()
wix_create_installer(JellyfinMediaPlayer-${VERSION_STRING}-${INSTALLER_ARCH_STR}.exe
TARGET JellyfinMediaPlayerInstaller
wix_create_installer(JellyfinDesktop-${VERSION_STRING}-${INSTALLER_ARCH_STR}.exe
TARGET JellyfinDesktopInstaller
WXS_FILES "${PROJECT_SOURCE_DIR}/bundle/win/Bundle.wxs"
EXTENSIONS WixUtilExtension WixBalExtension
DEPENDS wix_PMP.msi
BASEDIR "${PROJECT_SOURCE_DIR}/bundle/win"
)
add_custom_target(windows_package DEPENDS JellyfinMediaPlayerInstaller)
add_custom_target(windows_package DEPENDS JellyfinDesktopInstaller)
+2 -2
View File
@@ -1,8 +1,8 @@
# Contributing to Jellyfin Media Player
# Contributing to Jellyfin Desktop
## Running Tests
Jellyfin Media Player uses Qt Test for unit testing.
Jellyfin Desktop uses Qt Test for unit testing.
### Building Tests
+27 -27
View File
@@ -1,29 +1,29 @@
# Jellyfin Media Player
# Jellyfin Desktop
Desktop client using jellyfin-web with embedded MPV player. Supports Windows, Mac OS,
and Linux. Media plays within the same window using the jellyfin-web interface unlike
Jellyfin Desktop. Supports audio passthrough.
![Screenshot of Jellyfin Media Player](https://raw.githubusercontent.com/iwalton3/mpv-shim-misc-docs/master/images/jmp-player-win.png)
![Screenshot of Jellyfin Desktop](https://raw.githubusercontent.com/iwalton3/mpv-shim-misc-docs/master/images/jmp-player-win.png)
Downloads:
- [Windows, Mac, and Linux Releases](https://github.com/jellyfin/jellyfin-media-player/releases)
- [Windows, Mac, and Linux Releases](https://github.com/jellyfin/jellyfin-desktop/releases)
- Note for Mac users: builds for Intel require macOS 12+ and Apple Silicon builds requires macOS 14+
- [Flathub (Linux)](https://flathub.org/apps/details/com.github.iwalton3.jellyfin-media-player)
- [Flathub (Linux)](https://flathub.org/apps/details/org.jellyfin.JellyfinDesktop)
Related Documents:
- Web client: Application uses server-provided web client.
- Web client integration documentation: [for-web-developers.md](https://github.com/jellyfin/jellyfin-media-player/blob/master/for-web-developers.md)
- API Docs in [client-api.md](https://github.com/jellyfin/jellyfin-media-player/blob/master/client-api.md)
- Web client integration documentation: [for-web-developers.md](https://github.com/jellyfin/jellyfin-desktop/blob/master/for-web-developers.md)
- API Docs in [client-api.md](https://github.com/jellyfin/jellyfin-desktop/blob/master/client-api.md)
- Tip: For help building, look at the GitHub Actions file!
## Building at a glance (Linux)
To download the latest stable release, get the latest version tag from the [latest releases page](https://github.com/jellyfin/jellyfin-media-player/releases/latest) and append the following to your pull command during the build phase for JMP "--branch $VERSIONTAG --single-branch"
To download the latest stable release, get the latest version tag from the [latest releases page](https://github.com/jellyfin/jellyfin-desktop/releases/latest) and append the following to your pull command during the build phase for JMP "--branch $VERSIONTAG --single-branch"
Example:
```bash
git clone --recursive https://github.com/jellyfin/jellyfin-media-player.git --branch v1.9.1 --single-branch
git clone --recursive https://github.com/jellyfin/jellyfin-desktop.git --branch v1.9.1 --single-branch
```
@@ -44,8 +44,8 @@ sudo ln -s /usr/local/lib/x86_64-linux-gnu/libmpv.so /usr/local/lib/x86_64-linux
sudo ln -sf /usr/local/lib/x86_64-linux-gnu/libmpv.so /usr/local/lib/libmpv.so.2
sudo ldconfig
cd ~/jmp/
git clone --recursive https://github.com/jellyfin/jellyfin-media-player.git
cd jellyfin-media-player
git clone --recursive https://github.com/jellyfin/jellyfin-desktop.git
cd jellyfin-desktop
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local/ -G Ninja ..
@@ -77,8 +77,8 @@ sudo ln -s /usr/local/lib64/libmpv.so /usr/local/lib/x86_64-linux-gnu/libmpv.so.
sudo ln -s /usr/local/lib64/libmpv.so /usr/local/lib/x86_64-linux-gnu/libmpv.so
sudo ldconfig
cd ~/jmp/
git clone --recursive https://github.com/jellyfin/jellyfin-media-player.git
cd jellyfin-media-player/
git clone --recursive https://github.com/jellyfin/jellyfin-desktop.git
cd jellyfin-desktop/
mkdir build
cd build/
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
@@ -107,8 +107,8 @@ Please install:
You need to run these commands in git bash.
```bash
git clone --recursive https://github.com/jellyfin/jellyfin-media-player
cd jellyfin-media-player
git clone --recursive https://github.com/jellyfin/jellyfin-desktop
cd jellyfin-desktop
mkdir build
cd build
```
@@ -132,8 +132,8 @@ Then run the following commands (replace <QT_DIR> with your QT installation loca
```bash
brew install mpv ninja
git clone --recursive https://github.com/jellyfin/jellyfin-media-player.git
cd jellyfin-media-player
git clone --recursive https://github.com/jellyfin/jellyfin-desktop.git
cd jellyfin-desktop
mkdir build
cd build
cmake -GNinja -DQTROOT=<QT_DIR> -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=output ..
@@ -143,24 +143,24 @@ ninja install
To create redistributable bundle, some library paths need to be fixed. At the project root directory, run:
```bash
python3 ./scripts/fix-install-names.py ./build/output/Jellyfin\ Media\ Player.app
python3 ./scripts/fix-install-names.py "./build/output/Jellyfin Desktop.app"
```
## Log File Location
- Windows: `%LOCALAPPDATA%\JellyfinMediaPlayer\logs`
- Linux: `~/.local/share/jellyfinmediaplayer/logs/`
- Linux (Flatpak): `~/.var/app/com.github.iwalton3.jellyfin-media-player/data/jellyfinmediaplayer/logs/`
- macOS: `~/Library/Logs/Jellyfin Media Player/`
- Windows: `%LOCALAPPDATA%\Jellyfin Desktop\logs`
- Linux: `~/.local/share/jellyfin-desktop/logs/`
- Linux (Flatpak): `~/.var/app/org.jellyfin.JellyfinDesktop/data/jellyfin-desktop/logs/`
- macOS: `~/Library/Logs/Jellyfin Desktop/`
## Config File Location
The main configuration file is called `jellyfinmediaplayer.conf`. You can also add a `mpv.conf` to configure MPV directly.
The main configuration file is called `jellyfin-desktop.conf`. You can also add a `mpv.conf` to configure MPV directly.
- Windows: `%LOCALAPPDATA%\JellyfinMediaPlayer\`
- Linux: `~/.local/share/jellyfinmediaplayer/`
- Linux (Flatpak): `~/.var/app/com.github.iwalton3.jellyfin-media-player/data/jellyfinmediaplayer/`
- macOS: `~/Library/Application Support/Jellyfin Media Player/`
- Windows: `%LOCALAPPDATA%\Jellyfin Desktop\`
- Linux: `~/.local/share/jellyfin-desktop/`
- Linux (Flatpak): `~/.var/app/org.jellyfin.JellyfinDesktop/data/jellyfin-desktop/`
- macOS: `~/Library/Application Support/Jellyfin Desktop/`
## Web Debugger
@@ -179,7 +179,7 @@ If you have problems:
## License
Jellyfin Media Player is licensed under GPL v2. See the ``LICENSE`` file.
Jellyfin Desktop is licensed under GPL v2. See the ``LICENSE`` file.
Licenses of dependencies are summarized under ``resources/misc/licenses.txt``.
This file can also be printed at runtime when using the ``--licenses`` option.
+6 -6
View File
@@ -38,16 +38,16 @@
Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2919355~31bf3856ad364e35~x86~~6.3.1.14"
Value="CurrentState"
/>
<bal:Condition Message="Jellyfin Media Player can only be installed on Windows 7 or newer.">
<bal:Condition Message="Jellyfin can only be installed on Windows 7 or newer.">
<![CDATA[VersionNT >= v6.1]]>
</bal:Condition>
<!-- Checking for prerequisites for windows versions where they are required -->
<!-- We need to check for when ServicePackLevel is not defined as well, with (NOT ServicePackLevel) -->
<bal:Condition Message="Jellyfin Media Player on Windows 7 or Windows Server 2008 R2 requires Service Pack 1.">
<bal:Condition Message="Jellyfin on Windows 7 or Windows Server 2008 R2 requires Service Pack 1.">
<![CDATA[NOT ((VersionNT = v6.1) AND ((NOT ServicePackLevel) OR (ServicePackLevel < 1)))]]>
</bal:Condition>
<!-- Windows 8 and 2012 have no prerequisites -->
<bal:Condition Message="Jellyfin Media Player on Windows 8.1 or Windows Server 2012 R2 requires KB2919355 installed.">
<bal:Condition Message="Jellyfin on Windows 8.1 or Windows Server 2012 R2 requires KB2919355 installed.">
<![CDATA[NOT ((VersionNT = v6.3) AND (KB2919355_x86 <> 112 AND KB2919355_amd64 <> 112))]]>
</bal:Condition>
@@ -74,15 +74,15 @@
<Variable Name="autolaunch" bal:Overridable="yes" Type="numeric" Value="0" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFiles64Folder]Jellyfin\Jellyfin Media Player" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFiles64Folder]Jellyfin\Jellyfin Desktop" />
<!-- Search for InstallFolder in registry and set it to the PreviousInstallFolder -->
<util:RegistrySearch
Id="PreviousInstallFolderSearch" Root='HKCU' Key='Software\Jellyfin\Jellyfin Media Player' Value='InstallFolder' Variable='PreviousInstallFolder' />
Id="PreviousInstallFolderSearch" Root='HKCU' Key='Software\Jellyfin\Jellyfin Desktop' Value='InstallFolder' Variable='PreviousInstallFolder' />
<!-- Checks if PreviousInstallFolder exists event if it is defined in the Registry, sets it to InstallFolder if so -->
<util:DirectorySearch
Path='[PreviousInstallFolder]' Variable='InstallFolder' After='PreviousInstallFolderSearch' Condition='PreviousInstallFolder' />
<Variable Name="LaunchTarget" Value="[InstallFolder]\JellyfinMediaPlayer.exe"/>
<Variable Name="LaunchTarget" Value="[InstallFolder]\Jellyfin Desktop.exe"/>
<Variable Name="AddDesktopShortcut" Value="1" />
<!-- Is Media Feature Pack present? (This should be enough for detecting if we are running on Windows N or not) -->
+2 -2
View File
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<Property Id="ARPCOMMENTS" Value="Jellyfin Media Player for Windows" />
<Property Id="ARPCOMMENTS" Value="Jellyfin for Windows" />
<Property Id="ARPCONTACT" Value="Jellyfin" />
<Property Id="ARPPRODUCTICON" Value="JellyfinMediaPlayerIcon" />
<Property Id="ARPPRODUCTICON" Value="JellyfinDesktopIcon" />
<Property Id="ARPURLINFOABOUT" Value="$(var.JellyfinWebsiteUrl)" />
<Property Id="ARPURLUPDATEINFO" Value="$(var.JellyfinWebsiteUrl)" />
<Property Id="ARPHELPLINK" Value="$(var.JellyfinWebsiteUrl)" />
+5 -5
View File
@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define ProductName=Jellyfin Media Player ?>
<?define ProductDesc=Jellyfin Media Player for Windows ?>
<?define ProductName=Jellyfin ?>
<?define ProductDesc=Jellyfin for Windows ?>
<?define ProductUUID=abea6faf-13ea-465f-b2bd-a24b5524e98b ?>
<?define JellyfinWebsiteUrl=https://jellyfin.org ?>
<?define LanguageCode=1033 ?>
<?define LaunchCondition_PerUser=Jellyfin Media Player does not allow per-user installations. Setup will now exit ?>
<?define OldWindowsError=Jellyfin Media Player requires at least Windows 7 ?>
<?define NewerVersionError=A newer version of Jellyfin Media Server is already installed ?>
<?define LaunchCondition_PerUser=Jellyfin does not allow per-user installations. Setup will now exit ?>
<?define OldWindowsError=Jellyfin requires at least Windows 7 ?>
<?define NewerVersionError=A newer version of Jellyfin is already installed ?>
</Include>
+15 -15
View File
@@ -10,7 +10,7 @@
<!-- https://michielsioen.be/2017-12-02-wix-bootstrapper-customization/ -->
<?define FirstProductVersion=0.0.0 ?>
<?define JellyfinMediaPlayerRegistryKey=Software\Jellyfin\Jellyfin Media Player?>
<?define JellyfinDesktopRegistryKey=Software\Jellyfin\Jellyfin Desktop?>
<!-- To keep things simple, the installer considers each new release
a major upgrade, in which everything is uninstalled, then reinstalled
@@ -34,7 +34,7 @@
</Condition>
<!-- Icon used in the control panel -->
<Icon Id="JellyfinMediaPlayerIcon" SourceFile="jellyfin.ico" />
<Icon Id="JellyfinDesktopIcon" SourceFile="jellyfin.ico" />
<!-- Useful control panel fields -->
<?include ControlPanel.wxi ?>
@@ -55,7 +55,7 @@
</Upgrade>
<!-- Running program termination -->
<util:CloseApplication Id="JellyfinMediaPlayer" CloseMessage="yes" Target="JellyfinMediaPlayer.exe" ElevatedCloseMessage="yes" RebootPrompt="yes" />
<util:CloseApplication Id="JellyfinDesktop" CloseMessage="yes" Target="Jellyfin Desktop.exe" ElevatedCloseMessage="yes" RebootPrompt="yes" />
<!-- Custom action to Install MediaFoundation on Windows Server -->
<Property Id="WINDOWSTYPE" Value="Client"/>
@@ -63,7 +63,7 @@
<CustomAction Id="EnableMediaFoundation" BinaryKey="WixCA" DllEntry="WixQuietExec64" Execute="immediate" Return="ignore" Impersonate="no"/>
<Property Id="AUTOLAUNCH" Value="0"/>
<Property Id="WixShellExecTarget" Value="[INSTALLLOCATION]JellyfinMediaPlayer.exe" />
<Property Id="WixShellExecTarget" Value="[INSTALLLOCATION]Jellyfin Desktop.exe" />
<CustomAction Id="LaunchPMP" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" Return="ignore"/>
<InstallExecuteSequence>
@@ -87,20 +87,20 @@
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="JellyfinStartMenuFolder" Name="Jellyfin Media Player"/>
<Directory Id="JellyfinStartMenuFolder" Name="Jellyfin"/>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop">
<Component Id="ApplicationShortcutDesktop" Guid="{b2a1316d-917f-433f-bd87-02ec717c2648}">
<Condition>ADDDESKTOPSHORTCUT=1</Condition>
<Shortcut Id="ApplicationDesktopShortcut"
Name="Jellyfin Media Player"
Name="Jellyfin"
Description="Desktop client for Jellyfin"
Target="[INSTALLLOCATION]JellyfinMediaPlayer.exe"
Target="[INSTALLLOCATION]Jellyfin Desktop.exe"
WorkingDirectory="INSTALLLOCATION"/>
<RemoveFolder Id="DesktopFolder" On="uninstall"/>
<RegistryValue
Root="HKCU"
Key="Software\Jellyfin\Jellyfin Media Player"
Key="Software\Jellyfin\Jellyfin Desktop"
Name="installed"
Type="integer"
Value="1"
@@ -111,15 +111,15 @@
<!-- Start Menu shortcut -->
<DirectoryRef Id="JellyfinStartMenuFolder">
<Component Id="JellyfinMediaPlayerShortcuts" Guid="*">
<Component Id="JellyfinDesktopShortcuts" Guid="*">
<Shortcut Id="JellyfinMediaPlayerExeShortcut"
Name="Jellyfin Media Player"
Description="Jellyfin Media Player for Windows"
Target="[INSTALLLOCATION]JellyfinMediaPlayer.exe"
<Shortcut Id="JellyfinDesktopExeShortcut"
Name="Jellyfin"
Description="Jellyfin for Windows"
Target="[INSTALLLOCATION]Jellyfin Desktop.exe"
WorkingDirectory="INSTALLLOCATION" />
<RegistryKey Root="HKCU" Key="Software\Jellyfin\Jellyfin Media Player">
<RegistryKey Root="HKCU" Key="Software\Jellyfin\Jellyfin Desktop">
<RegistryValue Name="InstallFolder" Type="string" Value="[INSTALLLOCATION]" Action="write" KeyPath="no" />
</RegistryKey>
@@ -131,7 +131,7 @@
<!-- Product Feature -->
<Feature Id="ProductFeature" Title="Jellyfin" Level="1">
<ComponentGroupRef Id="ProgramFilesComponentGroup" />
<ComponentRef Id="JellyfinMediaPlayerShortcuts" />
<ComponentRef Id="JellyfinDesktopShortcuts" />
<ComponentRef Id="ApplicationShortcutDesktop" />
</Feature>
+1
View File
@@ -0,0 +1 @@
start "" "Jellyfin Desktop.exe" "--disable-gpu"
@@ -1 +0,0 @@
start "" "JellyfinMediaPlayer.exe" "--disable-gpu"
+4 -4
View File
@@ -1,4 +1,4 @@
Source: jellyfin-media-player
Source: jellyfin-desktop
Section: video
Priority: optional
Maintainer: Izzie Walton <izzie@iwalton.com>, Joshua Boniface <joshua@boniface.me>
@@ -40,10 +40,10 @@ Build-Depends: debhelper (>= 10),
qt6-base-private-dev
Standards-Version: 3.9.4
Homepage: https://jellyfin.org/
Vcs-Git: https://github.org/jellyfin/jellyfin-media-player.git
Vcs-Browser: https://github.org/jellyfin/jellyfin-media-player
Vcs-Git: https://github.org/jellyfin/jellyfin-desktop.git
Vcs-Browser: https://github.org/jellyfin/jellyfin-desktop
Package: jellyfin-media-player
Package: jellyfin-desktop
Architecture: any
Depends: ${shlibs:Depends},
qml6-module-qtwebengine,
+1 -1
View File
@@ -1,6 +1,6 @@
Format: http://dep.debian.net/deps/dep5
Upstream-Name: jellyfin
Source: https://github.com/jellyfin/jellyfin-media-player
Source: https://github.com/jellyfin/jellyfin-desktop
Files: *
Copyright: 2018 Izzie Walton
+1 -1
View File
@@ -16,7 +16,7 @@ sed -i "1 s/-1)/+${DEBVER})/" debian/changelog
# install deps
echo y | mk-build-deps -i
rm jellyfin-media-player-build-deps_*
rm jellyfin-desktop-build-deps_*
# build deb
dpkg-buildpackage -us -uc --pre-clean --post-clean
+24 -24
View File
@@ -1,4 +1,4 @@
# Jellyfin Media Player Implementation
# Jellyfin Desktop Implementation
## Detection
@@ -6,7 +6,7 @@ You can detect JMP by looking for the object `window.jmpInfo`, which is defined
## Device Profile
You can query a device profile for Jellyfin Media Player with:
You can query a device profile for Jellyfin Desktop with:
```js
window.NativeShell.AppHost.getDeviceProfile()
@@ -32,7 +32,7 @@ The following functions are available after less than a second:
## Media Playback
See [mpvVideoPlayer.js](https://github.com/jellyfin/jellyfin-media-player/blob/master/native/mpvVideoPlayer.js) for a complete example of how to connect and control the player.
See [mpvVideoPlayer.js](https://github.com/jellyfin/jellyfin-desktop/blob/master/native/mpvVideoPlayer.js) for a complete example of how to connect and control the player.
Notable API methods:
@@ -82,7 +82,7 @@ Note: The callback does NOT mean the video actually finished loading. You need t
{
type: 'video', // use 'music' to disable video rendering
headers: {
'User-Agent': 'JellyfinMediaPlayer'
'User-Agent': 'JellyfinDesktop'
},
metadata: {
// Only used for system UI integration, eg. taskbar/windows media.
@@ -119,7 +119,7 @@ You can recieve input from remote controls and gamepads via the input component.
"TV" mode which can be set in the config. It disables keyboard into the webapp and redirects it through
this as well.
See [jmpInputPlugin.js](https://github.com/jellyfin/jellyfin-media-player/blob/master/native/jmpInputPlugin.js) for an example which picks up events and translates them to ones that `jellyfin-web` understands.
See [inputPlugin.js](https://github.com/jellyfin/jellyfin-desktop/blob/master/native/inputPlugin.js) for an example which picks up events and translates them to ones that `jellyfin-web` understands.
```js
api.input.hostInput.connect((actions) => {
@@ -132,14 +132,14 @@ api.system.hello("jmpInputPlugin"); // signals to start sending user input
```
The inputs which are actually processed by `jellyfin-web` are fairly limited, but there are many more possible events.
See the [inputmaps](https://github.com/jellyfin/jellyfin-media-player/tree/master/resources/inputmaps) folder for event names for various input devices.
See the [inputmaps](https://github.com/jellyfin/jellyfin-desktop/tree/master/resources/inputmaps) folder for event names for various input devices.
## Settings
The application retains some user settings that control advanced functions, such as audio passthrough.
There is already [a modal](https://github.com/jellyfin/jellyfin-media-player/blob/7d5943becc1ca672d599887cac9107836c38d337/native/nativeshell.js#L189-L308) you can invoke display of which allows basic configuration changes.
There is already [a modal](https://github.com/jellyfin/jellyfin-desktop/blob/7d5943becc1ca672d599887cac9107836c38d337/native/nativeshell.js#L189-L308) you can invoke display of which allows basic configuration changes.
The configuration options are defined here: [settings_description.json](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json)
The configuration options are defined here: [settings_description.json](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json)
Current Settings:
@@ -194,23 +194,23 @@ Current Settings:
- Subtitle Section (`subtitles`):
- `ass_scale_border_and_shadow`: Controls whether or not ASS subtitles scale their border and shadow with the video resolution. Default `true`
- `ass_style_override: string enum`: Controls whether user style override should be applied to ASS subtitles. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L412-L419)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L412-L419)
- `placement: string enum`: Controls where subtitles are displayed on the screen. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L424-L432)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L424-L432)
- `color: string enum`: Controls colors of subtitles. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json#L437-L446)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json#L437-L446)
- `border_color: string enum`: Controls font border colors of subtitles. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json#L451-L460)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json#L451-L460)
- `border_size: int`: Controls subtitle border size. Default is `-1`.
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L465-L473)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L465-L473)
- `background_color: string enum`: Controls backgroud colors of subtitles. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json#L478-L487)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json#L478-L487)
- `background_transparency: string enum`: Controls backgroud transparency (in hex) of subtitles. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json#L492-L499)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json#L492-L499)
- `size: int`: Controls subtitle size. Default is `-1`.
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L504-L511)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/7d5943becc1ca672d599887cac9107836c38d337/resources/settings/settings_description.json#L504-L511)
- `font: string enum`: Specify font to use for subtitles that do not themselves specify a particular font. Default: ``
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-media-player/blob/master/resources/settings/settings_description.json#L515-L525)
- Provided options: [see enum](https://github.com/jellyfin/jellyfin-desktop/blob/master/resources/settings/settings_description.json#L515-L525)
The global `window.jmpInfo` object contains settings for the application in the form of `window.jmpInfo.settings.[section][key] = value`.
Settings descriptions are stored in the form `window.jmpInfo.settingsDescriptions.[section] = [{ key, options }]`
@@ -295,12 +295,12 @@ api.system.updateInfoEmitted.disconnect(myEventListener);
The client API corresponds to the methods in the application with `Q_INVOKABLE`.
- `api.display` - [DisplayComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/display/DisplayComponent.h) [DisplayComponent.cpp](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/display/DisplayComponent.cpp)
- `api.input` - [InputComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/input/InputComponent.h) [InputComponent.cpp](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/input/InputComponent.cpp)
- `api.player` - [PlayerComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/player/PlayerComponent.h) [PlayerComponent.cpp](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/player/PlayerComponent.cpp)
- `api.power` - [PowerComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/power/PowerComponent.h) [PowerComponent.cpp](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/power/PowerComponent.cpp)
- `api.settings` - [SettingsComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/settings/SettingsComponent.h)
- `api.system` - [SystemComponent.h](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/system/SystemComponent.h) [SystemComponent.cpp](https://github.com/jellyfin/jellyfin-media-player/blob/master/src/system/SystemComponent.cpp)
- `api.display` - [DisplayComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/display/DisplayComponent.h) [DisplayComponent.cpp](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/display/DisplayComponent.cpp)
- `api.input` - [InputComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/input/InputComponent.h) [InputComponent.cpp](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/input/InputComponent.cpp)
- `api.player` - [PlayerComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/player/PlayerComponent.h) [PlayerComponent.cpp](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/player/PlayerComponent.cpp)
- `api.power` - [PowerComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/power/PowerComponent.h) [PowerComponent.cpp](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/power/PowerComponent.cpp)
- `api.settings` - [SettingsComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/settings/SettingsComponent.h)
- `api.system` - [SystemComponent.h](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/system/SystemComponent.h) [SystemComponent.cpp](https://github.com/jellyfin/jellyfin-desktop/blob/master/src/system/SystemComponent.cpp)
- `api.taskbar` - (this is empty)
For a (slightly outdated) list of functions, you can look here: https://github.com/jellyfin/jellyfin-media-player/blob/master/client-api.md
For a (slightly outdated) list of functions, you can look here: https://github.com/jellyfin/jellyfin-desktop/blob/master/client-api.md
+1 -1
View File
@@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8">
<title>Jellyfin Media Player</title>
<title>Jellyfin</title>
<link rel="stylesheet" href="find-webclient.css">
</head>
<body>
@@ -13,11 +13,11 @@ const remap = {
"enter": "select",
}
class jmpInputPlugin {
class inputPlugin {
constructor({ inputManager, playbackManager }) {
this.name = 'JMP Input Plugin';
this.name = 'Input Plugin';
this.type = 'input';
this.id = 'jmpInputPlugin';
this.id = 'inputPlugin';
this.durationCheckInterval = null;
this.positionUpdateInterval = null;
@@ -356,9 +356,9 @@ class jmpInputPlugin {
window.Events.off(window.playbackManager, 'playbackstop');
}
console.log('SystemMedia: jmpInputPlugin destroyed and cleaned up');
console.log('SystemMedia: inputPlugin destroyed and cleaned up');
}
}
window._jmpInputPlugin = jmpInputPlugin;
window._inputPlugin = inputPlugin;
})();
+1 -1
View File
@@ -83,7 +83,7 @@ class mpvAudioPlayer {
window.api.player.load(val,
{ startMilliseconds: ms, autoplay: true },
{type: 'music', headers: {'User-Agent': 'JellyfinMediaPlayer'}, metadata: options.item, media: {}},
{type: 'music', headers: {'User-Agent': 'JellyfinDesktop'}, metadata: options.item, media: {}},
'#1',
'',
resolve);
+1 -1
View File
@@ -305,7 +305,7 @@
console.log('[MPV] Audio track index:', this._audioTrackIndexToSetOnPlaying);
console.log('[MPV] Subtitle track index:', this._subtitleTrackIndexToSetOnPlaying);
const streamdata = {type: 'video', headers: {'User-Agent': 'JellyfinMediaPlayer'}, metadata: options.item, media: {}};
const streamdata = {type: 'video', headers: {'User-Agent': 'JellyfinDesktop'}, metadata: options.item, media: {}};
const fps = this.tryGetFramerate(options);
if (fps) {
streamdata.frameRate = fps;
+6 -6
View File
@@ -18,8 +18,8 @@ const features = [
const getPlugins = () => {
const basePlugins = [
'jmpInputPlugin',
'jmpUpdatePlugin'
'inputPlugin',
'updatePlugin'
];
const mpvEnabled = jmpInfo.settings?.main?.enableMPV !== false;
@@ -167,7 +167,7 @@ function getDeviceProfile() {
}
return {
'Name': 'Jellyfin Media Player',
'Name': 'Jellyfin',
'MaxStaticBitrate': 1000000000,
'MusicStreamingTranscodingBitrate': 1280000,
'TimelineOffsetSeconds': 5,
@@ -323,7 +323,7 @@ window.NativeShell.AppHost = {
getDeviceProfile,
getSyncProfile: getDeviceProfile,
appName() {
return "Jellyfin Media Player";
return "Jellyfin";
},
appVersion() {
return navigator.userAgent.split(" ")[1];
@@ -393,7 +393,7 @@ async function showSettingsModal() {
const title = document.createElement("h3");
title.className = "formDialogHeaderTitle";
title.textContent = "Jellyfin Media Player Settings";
title.textContent = "Client Settings";
modalHeader.appendChild(title);
const modalContents = document.createElement("div");
@@ -535,7 +535,7 @@ async function showSettingsModal() {
const legendSubHeader = document.createElement("h4");
legendSubHeader.textContent = (
"The server you first connected to is your saved server. " +
"It provides the web client for Jellyfin Media Player in the absence of a bundled one. " +
"It provides the web client for Jellyfin in the absence of a bundled one. " +
"You can use this option to change it to another one. This does NOT log you off."
);
legend.appendChild(legendSubHeader);
@@ -1,9 +1,9 @@
(function() {
class jmpUpdatePlugin {
class updatePlugin {
constructor({ confirm }) {
this.name = 'JMP Update Plugin';
this.name = 'Update Plugin';
this.type = 'input';
this.id = 'jmpUpdatePlugin';
this.id = 'updatePlugin';
(async () => {
const api = await window.apiPromise;
@@ -12,7 +12,7 @@ class jmpUpdatePlugin {
if (url == "SSL_UNAVAILABLE") {
// Windows (and possibly macOS) don't ship with SSL in QT......
// So we get to do a full request to GitHub here :(
const checkUrl = "https://github.com/jellyfin/jellyfin-media-player/releases/latest";
const checkUrl = "https://github.com/jellyfin/jellyfin-desktop/releases/latest";
url = (await fetch(checkUrl)).url;
}
@@ -30,7 +30,7 @@ class jmpUpdatePlugin {
await confirm({
title: "Update Available",
text: `Jellyfin Media Player version ${version} is available.`,
text: `Jellyfin version ${version} is available.`,
cancelText: "Ignore",
confirmText: "Download"
});
@@ -47,5 +47,5 @@ class jmpUpdatePlugin {
}
}
window._jmpUpdatePlugin = jmpUpdatePlugin;
window._updatePlugin = updatePlugin;
})();
@@ -1,21 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>com.github.iwalton3.jellyfin-media-player</id>
<name>Jellyfin Media Player</name>
<id>org.jellyfin.JellyfinDesktop</id>
<name>Jellyfin</name>
<summary>Desktop client for Jellyfin media server</summary>
<developer id="com.github.iwalton3">
<name>Izzie Walton</name>
</developer>
<project_license>GPL-2.0</project_license>
<metadata_license>CC0-1.0</metadata_license>
<url type="homepage">https://github.com/iwalton3/jellyfin-media-player</url>
<url type="help">https://github.com/iwalton3/jellyfin-media-player/blob/master/README.md</url>
<url type="bugtracker">https://github.com/iwalton3/jellyfin-media-player/issues</url>
<url type="homepage">https://github.com/jellyfin/jellyfin-desktop</url>
<url type="help">https://github.com/jellyfin/jellyfin-desktop/blob/master/README.md</url>
<url type="bugtracker">https://github.com/jellyfin/jellyfin-desktop/issues</url>
<provides>
<binary>jellyfinmediaplayer</binary>
<binary>jellyfin-desktop</binary>
</provides>
<launchable type="desktop-id">com.github.iwalton3.jellyfin-media-player.desktop</launchable>
<launchable type="desktop-id">org.jellyfin.JellyfinDesktop.desktop</launchable>
<screenshots>
<screenshot type="default">
@@ -1,28 +1,28 @@
[Desktop Entry]
Version=1.0
Name=Jellyfin Media Player
Name=Jellyfin
Comment=Desktop client for Jellyfin
Exec=jellyfinmediaplayer
Icon=com.github.iwalton3.jellyfin-media-player
Exec=jellyfin-desktop
Icon=org.jellyfin.JellyfinDesktop
Terminal=false
Type=Application
StartupWMClass=com.github.iwalton3.jellyfin-media-player
StartupWMClass=org.jellyfin.JellyfinDesktop
Categories=AudioVideo;Video;Player;TV;
Actions=DesktopF;DesktopW;TVF;TVW
[Desktop Action DesktopF]
Name=Desktop [Fullscreen]
Exec=jellyfinmediaplayer --fullscreen --desktop
Exec=jellyfin-desktop --fullscreen --desktop
[Desktop Action DesktopW]
Name=Desktop [Windowed]
Exec=jellyfinmediaplayer --windowed --desktop
Exec=jellyfin-desktop --windowed --desktop
[Desktop Action TVF]
Name=TV [Fullscreen]
Exec=jellyfinmediaplayer --fullscreen --tv
Exec=jellyfin-desktop --fullscreen --tv
[Desktop Action TVW]
Name=TV [Windowed]
Exec=jellyfinmediaplayer --windowed --tv
Exec=jellyfin-desktop --windowed --tv
+4 -4
View File
@@ -53,7 +53,7 @@
{
"value": "alwaysOnTop",
"display_name": "Always on Top",
"help": "Keeps Jellyfin Media Player on top of other windows.",
"help": "Keeps Jellyfin on top of other windows.",
"default": false
},
{
@@ -166,7 +166,7 @@
{
"value": "enableMPV",
"display_name": "Enable MPV Player",
"help": "Enables MPV player for video and audio playback. When disabled, Jellyfin Media Player will fall back to the browser's built-in HTML5 player. This setting requires an application restart to take effect.\n\nNote: Disabling MPV will lose advanced features like audio passthrough, hardware decoding options, and codec-specific settings.",
"help": "Enables MPV player for video and audio playback. When disabled, Jellyfin will fall back to the browser's built-in HTML5 player. This setting requires an application restart to take effect.\n\nNote: Disabling MPV will lose advanced features like audio passthrough, hardware decoding options, and codec-specific settings.",
"default": true
},
{
@@ -661,7 +661,7 @@
"values": [
{
"value": "systemname",
"default": "JellyfinMediaPlayer",
"default": "JellyfinDesktop",
"hidden": true,
"platforms": [ "oe" ]
},
@@ -689,7 +689,7 @@
{
"value": "other_conf",
"display_name": "Manual MPV Configuration",
"help": "Configuration must be supplied in the same format as mpv.conf, with each configuration on a new line. i.e. \"sub-border-size=5\". Removing all set values of a configuration, from both here and the settings above, will only restore it to default once Jellyfin Media Player has restarted.",
"help": "Configuration must be supplied in the same format as mpv.conf, with each configuration on a new line. i.e. \"sub-border-size=5\". Removing all set values of a configuration, from both here and the settings above, will only restore it to default once Jellyfin has restarted.",
"input_type": "textarea",
"default": ""
}
+2 -2
View File
@@ -80,9 +80,9 @@ list(APPEND RESOURCE_FILES qrc_resources.cpp)
set(MACOSX_BUNDLE_ICON_FILE jellyfin.icns)
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION_STRING})
set(MACOSX_BUNDLE_BUNDLE_NAME "Jellyfin Media Player")
set(MACOSX_BUNDLE_BUNDLE_NAME "Jellyfin")
set(MACOSX_BUNDLE_BUNDLE_VERSION ${VERSION_STRING})
set(MACOSX_BUNDLE_GUI_IDENTIFIER tv.jellyfin.player)
set(MACOSX_BUNDLE_GUI_IDENTIFIER org.jellyfin.JellyfinDesktop)
if(APPLE)
if(HAVE_UPDATER)
+5 -5
View File
@@ -100,7 +100,7 @@ int main(int argc, char *argv[])
try
{
QCommandLineParser parser;
parser.setApplicationDescription("Jellyfin Media Player");
parser.setApplicationDescription("Jellyfin Desktop");
parser.addHelpOption();
parser.addVersionOption();
parser.addOptions({{{"l", "licenses"}, "Show license information"},
@@ -225,8 +225,8 @@ int main(int argc, char *argv[])
{
// Use Paths::dataDir() equivalent inline to avoid double nesting
QDir d(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
d.mkpath(d.absolutePath() + "/" + Names::MainName());
d.cd(Names::MainName());
d.mkpath(d.absolutePath() + "/" + Names::DataName());
d.cd(Names::DataName());
webEngineDataDir = d.absolutePath() + "/QtWebEngine";
}
@@ -256,9 +256,9 @@ int main(int argc, char *argv[])
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
// Set window icon on Linux using system icon theme
app.setWindowIcon(QIcon::fromTheme("com.github.iwalton3.jellyfin-media-player", QIcon(":/images/icon.png")));
app.setWindowIcon(QIcon::fromTheme("org.jellyfin.JellyfinDesktop", QIcon(":/images/icon.png")));
// Set app id for Wayland compositor window icon
app.setDesktopFileName("com.github.iwalton3.jellyfin-media-player");
app.setDesktopFileName("org.jellyfin.JellyfinDesktop");
#endif
#if defined(Q_OS_MAC) && defined(NDEBUG)
+2 -2
View File
@@ -22,7 +22,7 @@
#include <QUrlQuery>
#include <QMimeDatabase>
#define MPRIS_SERVICE_NAME "org.mpris.MediaPlayer2.jellyfinmediaplayer"
#define MPRIS_SERVICE_NAME "org.mpris.MediaPlayer2.jellyfin-desktop"
#define MPRIS_OBJECT_PATH "/org/mpris/MediaPlayer2"
MprisComponent::MprisComponent(QObject* parent)
@@ -1017,7 +1017,7 @@ QString MprisComponent::handleAlbumArt(const QString& artUrl)
QNetworkRequest request;
request.setUrl(QUrl(artUrl));
request.setRawHeader("User-Agent", "JellyfinMediaPlayer/1.0");
request.setRawHeader("User-Agent", "JellyfinDesktop/1.0");
m_pendingArtReply = m_albumArtManager->get(request);
connect(m_pendingArtReply, &QNetworkReply::finished, this, &MprisComponent::onAlbumArtDownloaded);
+2 -2
View File
@@ -37,8 +37,8 @@ public:
bool fullscreen() const;
void setFullscreen(bool value);
bool hasTrackList() const { return false; }
QString identity() const { return "Jellyfin Media Player"; }
QString desktopEntry() const { return "jellyfinmediaplayer"; }
QString identity() const { return "Jellyfin"; }
QString desktopEntry() const { return "org.jellyfin.JellyfinDesktop"; }
QStringList supportedUriSchemes() const { return QStringList(); }
QStringList supportedMimeTypes() const { return QStringList(); }
+1 -1
View File
@@ -109,7 +109,7 @@ void PowerComponentDBus::doDisableScreensaver()
DBUS_SCREENSAVER_INTERFACE, QDBusConnection::sessionBus());
if (iface.isValid())
{
QDBusReply<unsigned int> reply = iface.call("Inhibit", "jellyfinmediaplayer", "playing");
QDBusReply<unsigned int> reply = iface.call("Inhibit", "jellyfin-desktop", "playing");
if (reply.isValid())
{
+1 -1
View File
@@ -5,7 +5,7 @@ void PowerComponentMac::doDisableScreensaver()
{
if (m_assertion == 0)
{
CFStringRef why = CFSTR("tv.jellyfin.player");
CFStringRef why = CFSTR("org.jellyfin.JellyfinDesktop");
IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep,
kIOPMAssertionLevelOn,
why,
+6 -6
View File
@@ -217,14 +217,14 @@ static void writeJson(const QString& filename, const QJsonObject& data, bool pre
/////////////////////////////////////////////////////////////////////////////////////////
QVariant SettingsComponent::readPreinitValue(const QString& sectionID, const QString& key)
{
QJsonObject json = loadJson(Paths::dataDir("jellyfinmediaplayer.conf"));
QJsonObject json = loadJson(Paths::dataDir("jellyfin-desktop.conf"));
return json["sections"].toObject()[sectionID].toObject()[key].toVariant();
}
/////////////////////////////////////////////////////////////////////////////////////////
void SettingsComponent::load()
{
loadConf(Paths::dataDir("jellyfinmediaplayer.conf"), false);
loadConf(Paths::dataDir("jellyfin-desktop.conf"), false);
loadConf(Paths::dataDir("storage.json"), true);
}
@@ -327,7 +327,7 @@ void SettingsComponent::saveSettings()
QJsonObject json;
json.insert("sections", QJsonValue::fromVariant(sections));
json.insert("version", m_settingsVersion);
writeJson(Paths::dataDir("jellyfinmediaplayer.conf"), json);
writeJson(Paths::dataDir("jellyfin-desktop.conf"), json);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -723,8 +723,8 @@ bool SettingsComponent::componentInitialize()
/////////////////////////////////////////////////////////////////////////////////////////
bool SettingsComponent::resetAndSaveOldConfiguration()
{
QFile settingsFile(Paths::dataDir("jellyfinmediaplayer.conf"));
return settingsFile.rename(Paths::dataDir("jellyfinmediaplayer.conf.old"));
QFile settingsFile(Paths::dataDir("jellyfin-desktop.conf"));
return settingsFile.rename(Paths::dataDir("jellyfin-desktop.conf.old"));
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -768,7 +768,7 @@ QString SettingsComponent::getClientName()
QString name;
name = SettingsComponent::Get().value(SETTINGS_SECTION_SYSTEM, "systemname").toString();
if (name.compare("JellyfinMediaPlayer") == 0) {
if (name.compare("JellyfinDesktop") == 0) {
name = Utils::ComputerName();
}
+5
View File
@@ -9,6 +9,11 @@ QString Names::MainName()
return QString("@MAIN_NAME@");
}
QString Names::DataName()
{
return QString("@DATA_NAME@");
}
QString Names::HelperName()
{
return QString("@HELPER_NAME@");
+1
View File
@@ -10,6 +10,7 @@
namespace Names
{
QString MainName();
QString DataName();
QString HelperName();
};
+8 -8
View File
@@ -26,13 +26,13 @@ void Paths::setConfigDir(const QString& path)
static QDir writableLocation(QStandardPaths::StandardLocation loc)
{
QDir d(QStandardPaths::writableLocation(loc));
if (!d.mkpath(d.absolutePath() + "/" + Names::MainName()))
if (!d.mkpath(d.absolutePath() + "/" + Names::DataName()))
{
qWarning() << "Failed to create directory:" << d.absolutePath();
return QDir();
}
d.cd(Names::MainName());
d.cd(Names::DataName());
return d;
}
@@ -41,8 +41,8 @@ static QDir writableLocation(QStandardPaths::StandardLocation loc)
// Try a couple of different strategies to find the file we are looking for.
// 1) By looking next to the application binary
// 2) By looking in binary/../Resources
// 3) By looking in PREFIX/share/jellyfinmediaplayer
// 4) By looking in PREFIX/jellyfinmediaplayer
// 3) By looking in PREFIX/share/jellyfin-desktop
// 4) By looking in PREFIX/jellyfin-desktop
//
QString Paths::resourceDir(const QString& file)
{
@@ -52,8 +52,8 @@ QString Paths::resourceDir(const QString& file)
QStringList possibleResourceDirs = {
appResourceDir,
appResourceDir + "../Resources/",
prefixDir + "/share/jellyfinmediaplayer/",
prefixDir + "/jellyfinmediaplayer/"
prefixDir + "/share/jellyfin-desktop/",
prefixDir + "/jellyfin-desktop/"
};
for (const auto& fileStr : possibleResourceDirs)
@@ -103,8 +103,8 @@ QString Paths::logDir(const QString& file)
{
#ifdef Q_OS_MAC
QDir ldir = QDir(QStandardPaths::locate(QStandardPaths::HomeLocation, "", QStandardPaths::LocateDirectory));
ldir.mkpath(ldir.absolutePath() + "/Library/Logs/" + Names::MainName());
ldir.cd("Library/Logs/" + Names::MainName());
ldir.mkpath(ldir.absolutePath() + "/Library/Logs/" + Names::DataName());
ldir.cd("Library/Logs/" + Names::DataName());
return ldir.filePath(file);
#else
QDir ldir;
+7 -7
View File
@@ -424,7 +424,7 @@ void SystemComponent::cancelServerConnectivity()
QString SystemComponent::getUserAgent()
{
QString osVersion = QSysInfo::productVersion();
QString userAgent = QString("JellyfinMediaPlayer %1 (%2-%3 %4)").arg(Version::GetVersionString()).arg(getPlatformTypeString()).arg(getPlatformArchString()).arg(osVersion);
QString userAgent = QString("JellyfinDesktop %1 (%2-%3 %4)").arg(Version::GetVersionString()).arg(getPlatformTypeString()).arg(getPlatformArchString()).arg(osVersion);
return userAgent;
}
@@ -434,7 +434,7 @@ QString SystemComponent::debugInformation()
QString debugInfo;
QTextStream stream(&debugInfo);
stream << "Jellyfin Media Player\n";
stream << "Jellyfin\n";
stream << " Version: " << Version::GetVersionString() << " built: " << Version::GetBuildDate() << "\n";
stream << " Web Client Version: " << Version::GetWebVersion() << "\n";
stream << " Web Client URL: " << SettingsComponent::Get().value(SETTINGS_SECTION_PATH, "startupurl").toString() << "\n";
@@ -445,8 +445,8 @@ QString SystemComponent::debugInformation()
stream << "\n";
stream << "Files\n";
stream << " Log file: " << Paths::logDir(Names::MainName() + ".log") << "\n";
stream << " Config file: " << Paths::dataDir(Names::MainName() + ".conf") << "\n";
stream << " Log file: " << Paths::logDir(Names::DataName() + ".log") << "\n";
stream << " Config file: " << Paths::dataDir(Names::DataName() + ".conf") << "\n";
stream << "\n";
stream << "Network Addresses\n";
@@ -581,8 +581,8 @@ QString SystemComponent::getNativeShellScript()
":/qtwebchannel/qwebchannel.js",
":/web-client/extension/mpvVideoPlayer.js",
":/web-client/extension/mpvAudioPlayer.js",
":/web-client/extension/jmpInputPlugin.js",
":/web-client/extension/jmpUpdatePlugin.js",
":/web-client/extension/inputPlugin.js",
":/web-client/extension/updatePlugin.js",
":/web-client/extension/connectivityHelper.js",
":/web-client/extension/nativeshell.js"
};
@@ -663,7 +663,7 @@ void SystemComponent::checkForUpdates()
if (SettingsComponent::Get().value(SETTINGS_SECTION_MAIN, "checkForUpdates").toBool()) {
#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC)
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QString checkUrl = "https://github.com/jellyfin/jellyfin-media-player/releases/latest";
QString checkUrl = "https://github.com/jellyfin/jellyfin-desktop/releases/latest";
QUrl qCheckUrl = QUrl(checkUrl);
qDebug() << QString("Checking URL for updates: %1").arg(checkUrl);
QNetworkRequest req(qCheckUrl);
+1 -1
View File
@@ -15,7 +15,7 @@ ErrorMessage::ErrorMessage(const QString& errorMessage, bool allowResetConfig)
: QMessageBox(nullptr)
{
setIcon(Critical);
setText("Jellyfin Media Player encountered a fatal error and must exit");
setText("Jellyfin encountered a fatal error and must exit");
setDetailedText(errorMessage);
setInformativeText("Press help below to be redirected to our friendly support forums." \
"Press reset to reset configuration to the default and try again." \
+2 -2
View File
@@ -8,7 +8,7 @@ import QtQuick.Controls 6.0
Window
{
id: mainWindow
title: "Jellyfin Media Player"
title: "Jellyfin"
objectName: "mainWindow"
width: 1280
height: 720
@@ -234,7 +234,7 @@ Window
}
profile.persistentCookiesPolicy: WebEngineProfile.AllowPersistentCookies
profile.offTheRecord: false
profile.storageName: "JellyfinMediaPlayerStorage"
profile.storageName: "JellyfinDesktopStorage"
Component.onCompleted:
{
+4 -4
View File
@@ -92,7 +92,7 @@ void Log::Init()
// Create unique log file for this instance
QString logDir = Paths::logDir("");
QTemporaryFile tempFile(logDir + "/jellyfinmediaplayer-XXXXXX.log");
QTemporaryFile tempFile(logDir + "/jellyfin-desktop-XXXXXX.log");
tempFile.setAutoRemove(false);
if (!tempFile.open())
{
@@ -104,11 +104,11 @@ void Log::Init()
logFile = new QFile(tempLogPath);
logFile->open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate);
qInfo() << "Starting Jellyfin Media Player version:" << qPrintable(Version::GetVersionString()) << "build date:" << qPrintable(Version::GetBuildDate());
qInfo() << "Starting Jellyfin version:" << qPrintable(Version::GetVersionString()) << "build date:" << qPrintable(Version::GetBuildDate());
qInfo() << qPrintable(QString(" Running on: %1 [%2] arch %3").arg(QSysInfo::prettyProductName()).arg(QSysInfo::kernelVersion()).arg(QSysInfo::currentCpuArchitecture()));
qInfo() << " Qt Version:" << QT_VERSION_STR << qPrintable(QString("[%1]").arg(QSysInfo::buildAbi()));
qDebug() << "Logging to " << qPrintable(Paths::logDir(Names::MainName() + ".log"));
qDebug() << "Logging to " << qPrintable(Paths::logDir(Names::DataName() + ".log"));
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -123,7 +123,7 @@ void Log::RotateLog()
logFile->close();
}
QString baseName = Names::MainName() + ".log";
QString baseName = Names::DataName() + ".log";
QString mainLog = Paths::logDir(baseName);
// Rotate existing logs: .log.2 -> .log.3, .log.1 -> .log.2, .log -> .log.1