diff --git a/.gitignore b/.gitignore index aef6662727..ac62bd07a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,78 +1,309 @@ + +# Created by https://www.gitignore.io/api/node,rider,macos,linux,windows,visualstudio,visualstudiocode +# Edit at https://www.gitignore.io/?templates=node,rider,macos,linux,windows,visualstudio,visualstudiocode + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences .directory -################# -## Eclipse -################# +# Linux trash folder which might appear on any partition or disk +.Trash-* -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -project.fragment.lock.json -project.lock.json -local.properties -.classpath -.settings/ -.loadpath +# .nfs files are created when an open file is removed but is still being accessed +.nfs* -# External tool builders -.externalToolBuilders/ +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride -# Locally stored "Eclipse launch configurations" -*.launch +# Icon must end with two \r +Icon -# CDT-specific -.cproject +# Thumbnails +._* -# PDT-specific -.buildpath +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent -################# -## Media Browser -################# -ProgramData*/ -CorePlugins*/ -ProgramData-Server*/ -ProgramData-UI*/ +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk -################# -## Visual Studio -################# +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +### Rider ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/modules.xml +# .idea/*.iml +# .idea/modules + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. - -.vs/ +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files +*.rsuser *.suo *.user +*.userosscache *.sln.docstates -# Build results +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs +# Build results [Dd]ebug/ +[Dd]ebugPublic/ [Rr]elease/ -build/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ [Bb]in/ [Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio *_i.c *_p.c +*_h.h *.ilk *.meta *.obj +*.iobj *.pch *.pdb +*.ipdb *.pgc *.pgd *.rsp @@ -82,35 +313,39 @@ build/ *.tlh *.tmp *.tmp_proj -*.log +*_wpftmp.csproj *.vspscc *.vssscc .builds *.pidb -*.log +*.svclog *.scc -*.scc -*.psess -*.vsp -*.vspx -*.orig -*.rej -*.sdf -*.opensdf -*.ipch + +# Chutzpah Test files +_Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb +*.opendb *.opensdf *.sdf *.cachefile +*.VC.db +*.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ # Guidance Automation Toolkit *.gpState @@ -118,6 +353,10 @@ ipch/ # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode # TeamCity is a build add-in _TeamCity* @@ -125,9 +364,25 @@ _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + # NCrunch -*.ncrunch* +_NCrunch_* .*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ # Installshield output folder [Ee]xpress/ @@ -146,121 +401,175 @@ DocProject/Help/html publish/ # Publish Web Output -*.Publish.xml +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted *.pubxml +*.publishproj -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -# packages/ -dlls/ -dllssigned/ +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ -# Windows Azure Build Output -csx +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ *.build.csdef -# Windows Store app package directory +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ # Others -sql/ -*.Cache ClientBin/ -[Ss]tyle[Cc]op.* ~$* -*~ *.dbmdl -*.[Pp]ublish.xml +*.dbproj.schemaview +*.jfm +*.pfx *.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ +# ASP.NET Core default setup: bower directory is configured as wwwroot/lib/ and bower restore is true +**/wwwroot/lib/ # RIA/Silverlight projects Generated_Code/ -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak # SQL Server files -App_Data/*.mdf -App_Data/*.ldf +*.mdf +*.ldf +*.ndf -############# -## Windows detritus -############# +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- Backup*.rdl -# Windows image file caches -Thumbs.db -ehthumbs.db +# Microsoft Fakes +FakesAssemblies/ -# Folder config file -Desktop.ini +# GhostDoc plugin setting file +*.GhostDoc.xml -# Recycle Bin used on file shares -$RECYCLE.BIN/ +# Node.js Tools for Visual Studio +.ntvs_analysis.dat -# Mac crap -.DS_Store +# Visual Studio 6 build log +*.plg -############# -## Python -############# +# Visual Studio 6 workspace options file +*.opt -*.py[co] +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw -# Packages -*.egg -*.egg-info -build/ -eggs/ -parts/ -var/ -sdist/ -develop-eggs/ -.installed.cfg +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions -# Installer logs -pip-log.txt +# Paket dependency manager +.paket/paket.exe +paket-files/ -# Unit test / coverage reports -.coverage -.tox +# FAKE - F# Make +.fake/ -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg - -########## -# Rider -########## +# JetBrains Rider .idea/ +*.sln.iml -########## -# Visual Studio Code -########## -.vscode/ +# CodeRush personal settings +.cr/personal -######################### -# Build artifacts -######################### +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc -# Artifacts for debian-x64 -deployment/debian-package-x64/pkg-src/.debhelper/ -deployment/debian-package-x64/pkg-src/*.debhelper -deployment/debian-package-x64/pkg-src/debhelper-build-stamp -deployment/debian-package-x64/pkg-src/files -deployment/debian-package-x64/pkg-src/jellyfin.substvars -deployment/debian-package-x64/pkg-src/jellyfin/ -# Don't ignore the debian/bin folder -!deployment/debian-package-x64/pkg-src/bin/ +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config -deployment/**/dist/ -deployment/**/pkg-dist/ -deployment/**/pkg-dist-tmp/ -deployment/collect-dist/ +# Tabs Studio +*.tss -jellyfin_version.ini +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# End of https://www.gitignore.io/api/node,rider,macos,linux,windows,visualstudio,visualstudiocode diff --git a/src/components/remotecontrol.js b/src/components/remotecontrol.js index 5433af6a3b..58e69961e7 100644 --- a/src/components/remotecontrol.js +++ b/src/components/remotecontrol.js @@ -71,7 +71,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL return null; } - if (options = options || {}, options.type = options.type || "Primary", "Primary" === options.type && item.SeriesPrimaryImageTag) { + options = options || {}; + options.type = options.type || "Primary"; + if ("Primary" === options.type && item.SeriesPrimaryImageTag) { options.tag = item.SeriesPrimaryImageTag; return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); } @@ -125,7 +127,9 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL maxHeight: 300 }) : null; - if (console.log("updateNowPlayingInfo"), setImageUrl(context, url), item) { + console.log("updateNowPlayingInfo"); + setImageUrl(context, url); + if (item) { backdrop.setBackdrops([item]); var apiClient = connectionManager.getApiClient(item.ServerId); apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) { diff --git a/src/scripts/videoosd.js b/src/scripts/videoosd.js index d4f5d59906..c9befe03c5 100644 --- a/src/scripts/videoosd.js +++ b/src/scripts/videoosd.js @@ -6,7 +6,9 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med return null; } - if (options = options || {}, options.type = options.type || "Primary", "Primary" === options.type && item.SeriesPrimaryImageTag) { + options = options || {}; + options.type = options.type || "Primary"; + if ("Primary" === options.type && item.SeriesPrimaryImageTag) { options.tag = item.SeriesPrimaryImageTag; return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); } @@ -268,7 +270,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med function updateNowPlayingInfo(player, state) { var item = state.NowPlayingItem; - if (currentItem = item, !item) { + currentItem = item; + if (!item) { setPoster(null); updateRecordingButton(null); Emby.Page.setTitle(""); @@ -279,7 +282,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med view.querySelector(".btnSubtitles").classList.add("hide"); view.querySelector(".btnAudio").classList.add("hide"); view.querySelector(".osdTitle").innerHTML = ""; - return void (view.querySelector(".osdMediaInfo").innerHTML = ""); + view.querySelector(".osdMediaInfo").innerHTML = ""; + return; } enableProgressByTimeOfDay = shouldEnableProgressByTimeOfDay(item); @@ -363,10 +367,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med function toggleOsd() { if ("osd" === currentVisibleMenu) { hideOsd(); - } else { - if (!currentVisibleMenu) { + } else if (!currentVisibleMenu) { showOsd(); - } } } @@ -410,7 +412,6 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med currentVisibleMenu = "osd"; clearHideAnimationEventListeners(elem); elem.classList.remove("hide"); - elem.offsetWidth; elem.classList.remove("videoOsdBottom-hidden"); if (!layoutManager.mobile) { @@ -425,7 +426,6 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med if ("osd" === currentVisibleMenu) { var elem = osdBottomElement; clearHideAnimationEventListeners(elem); - elem.offsetWidth; elem.classList.add("videoOsdBottom-hidden"); dom.addEventListener(elem, transitionEndEventName, onHideAnimationComplete, { once: true @@ -441,10 +441,11 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med var obj = lastPointerMoveData; if (!obj) { - return void (lastPointerMoveData = { + lastPointerMoveData = { x: eventX, y: eventY - }); + }; + return; } if (Math.abs(eventX - obj.x) < 10 && Math.abs(eventY - obj.y) < 10) { @@ -599,21 +600,24 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med } function bindToPlayer(player) { - if (player !== currentPlayer && (releaseCurrentPlayer(), currentPlayer = player, player)) { - var state = playbackManager.getPlayerState(player); - onStateChanged.call(player, { - type: "init" - }, state); - events.on(player, "playbackstart", onPlaybackStart); - events.on(player, "playbackstop", onPlaybackStopped); - events.on(player, "volumechange", onVolumeChanged); - events.on(player, "pause", onPlayPauseStateChanged); - events.on(player, "unpause", onPlayPauseStateChanged); - events.on(player, "timeupdate", onTimeUpdate); - events.on(player, "fullscreenchange", updateFullscreenIcon); - events.on(player, "mediastreamschange", onMediaStreamsChanged); - resetUpNextDialog(); + if (player !== currentPlayer) { + releaseCurrentPlayer(); + currentPlayer = player; + if (!player) return; } + var state = playbackManager.getPlayerState(player); + onStateChanged.call(player, { + type: "init" + }, state); + events.on(player, "playbackstart", onPlaybackStart); + events.on(player, "playbackstop", onPlaybackStopped); + events.on(player, "volumechange", onVolumeChanged); + events.on(player, "pause", onPlayPauseStateChanged); + events.on(player, "unpause", onPlayPauseStateChanged); + events.on(player, "timeupdate", onTimeUpdate); + events.on(player, "fullscreenchange", updateFullscreenIcon); + events.on(player, "mediastreamschange", onMediaStreamsChanged); + resetUpNextDialog(); } function releaseCurrentPlayer() { @@ -873,7 +877,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med function updateTimeText(elem, ticks, divider) { if (null == ticks) { - return void (elem.innerHTML = ""); + elem.innerHTML = ""; + return; } var html = datetime.getDisplayRunningTime(ticks); @@ -1091,7 +1096,7 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med html += datetime.getDisplayRunningTime(positionTicks); html += ""; html += ""; - return html += ""; + return html + ""; } return null; @@ -1281,7 +1286,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med }); nowPlayingPositionSlider.getBubbleHtml = function (value) { - if (showOsd(), enableProgressByTimeOfDay) { + showOsd(); + if (enableProgressByTimeOfDay) { if (programStartDateMs && programEndDateMs) { var ms = programEndDateMs - programStartDateMs; ms /= 100;