From 568ba62cf723962606cb7629bf12e69782954578 Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Sun, 29 Mar 2020 14:25:43 -0400 Subject: [PATCH 001/107] Add callback to MPV Shim. --- src/libraries/apiclient/apiclientcore.js | 19 +++ yarn.lock | 156 ++++------------------- 2 files changed, 46 insertions(+), 129 deletions(-) diff --git a/src/libraries/apiclient/apiclientcore.js b/src/libraries/apiclient/apiclientcore.js index 557a4e1033a..56e5fbdb1c2 100644 --- a/src/libraries/apiclient/apiclientcore.js +++ b/src/libraries/apiclient/apiclientcore.js @@ -155,6 +155,25 @@ define(["events", "appStorage"], function(events, appStorage) { function onWebSocketOpen() { var instance = this; console.debug("web socket connection opened"), events.trigger(instance, "websocketopen") + + // MPV Shim Auth + // There is almost certainly a better way to do this. + require(["connectionManager", "playbackManager"], function(connectionManager, playbackManager) { + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_callback", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.onloadend = function (result) { + var res = JSON.parse(result.target.response); + playbackManager.getTargets().then(function (targets) { + for (var i = 0; i < targets.length; i++) { + if (targets[i].appName == res.appName && + targets[i].deviceName == res.deviceName) + playbackManager.trySetActivePlayer(targets[i].playerName, targets[i]); + } + }); + }; + xhr.send(JSON.stringify(connectionManager.getLastUsedServer())); + }); } function onWebSocketError() { diff --git a/yarn.lock b/yarn.lock index 8dee6725652..05e85c5fb6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3072,7 +3072,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@3.X, debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@3.X, debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3183,11 +3183,6 @@ deep-equal@^1.0.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3302,11 +3297,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -4551,13 +4541,6 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -5532,7 +5515,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5556,13 +5539,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5744,7 +5720,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -7257,21 +7233,6 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7406,15 +7367,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117" - integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -7499,22 +7451,6 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.50: version "1.1.52" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" @@ -7552,14 +7488,6 @@ node-sass@^4.13.1, node-sass@^4.8.3: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7613,13 +7541,6 @@ now-and-later@^2.0.0: dependencies: once "^1.3.2" -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - npm-conf@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -7628,20 +7549,6 @@ npm-conf@^1.1.0: config-chain "^1.1.11" pify "^3.0.0" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7649,7 +7556,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -7916,7 +7823,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4: +osenv@0: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -9304,6 +9211,15 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^6.11.1: + version "6.11.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.11.1.tgz#ab021f275d463ce1b61e88f0ce6988b3e8fe7c2c" + integrity sha512-1ZvJOUl8ifkkBxu2ByVM/8GijMIPx+cef7u3yroO3Ogm4DOdZcF5dcrWTIlSHe3Pg/mtlt6/eFjObDfJureZZA== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -9369,16 +9285,6 @@ raw-body@^2.3.2: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-file-stdin@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61" @@ -9853,7 +9759,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9952,7 +9858,7 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sax@^1.2.4, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -10485,6 +10391,11 @@ specificity@^0.4.1: resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -10640,6 +10551,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -10801,11 +10717,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strip-outer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" @@ -11115,19 +11026,6 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" @@ -12275,7 +12173,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From e3a726b9d7bdbf91210e64484e8a9e8c35c3fc3a Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Sun, 29 Mar 2020 15:06:18 -0400 Subject: [PATCH 002/107] Disable subtitle octopus. (Decreases build size.) --- package.json | 1 - src/bundle.js | 6 ------ webpack.common.js | 8 +------- yarn.lock | 4 ---- 4 files changed, 1 insertion(+), 18 deletions(-) diff --git a/package.json b/package.json index 2df8c1a637f..097cf0c750c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,6 @@ "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.4.1", "jstree": "^3.3.7", - "libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus", "material-design-icons-iconfont": "^5.0.1", "native-promise-only": "^0.8.0-a", "page": "^1.11.5", diff --git a/src/bundle.js b/src/bundle.js index ba5f74b1636..40e4853e66c 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -84,12 +84,6 @@ _define("webcomponents", function() { return webcomponents; }); -// libass-wasm -var libass_wasm = require("libass-wasm"); -_define("JavascriptSubtitlesOctopus", function() { - return libass_wasm; -}); - // material-icons var material_icons = require("material-design-icons-iconfont/dist/material-design-icons.css"); _define("material-icons", function() { diff --git a/webpack.common.js b/webpack.common.js index c87ccdbc0d9..3859e78db89 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -5,13 +5,7 @@ const CopyPlugin = require("copy-webpack-plugin"); const Assets = [ "alameda/alameda.js", - "native-promise-only/npo.js", - "libass-wasm/dist/js/subtitles-octopus-worker.js", - "libass-wasm/dist/js/subtitles-octopus-worker.data", - "libass-wasm/dist/js/subtitles-octopus-worker.wasm", - "libass-wasm/dist/js/subtitles-octopus-worker-legacy.js", - "libass-wasm/dist/js/subtitles-octopus-worker-legacy.data", - "libass-wasm/dist/js/subtitles-octopus-worker-legacy.js.mem" + "native-promise-only/npo.js" ]; module.exports = { diff --git a/yarn.lock b/yarn.lock index 5641ad41a5f..0b382759e94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6576,10 +6576,6 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -"libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus": - version "4.0.0" - resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#1d12af0b04fb2337570b57d706dd97db2f904b9d" - liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" From 21223ae9e4678d0d2d4154aecca2f00db73e4415 Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Mon, 30 Mar 2020 11:31:34 -0400 Subject: [PATCH 003/107] "Fix" for home page not displaying. --- src/components/maintabsmanager.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/components/maintabsmanager.js b/src/components/maintabsmanager.js index 2571470015e..1d331939f33 100644 --- a/src/components/maintabsmanager.js +++ b/src/components/maintabsmanager.js @@ -249,7 +249,19 @@ define(['dom', 'browser', 'events', 'emby-tabs', 'emby-button'], function (dom, } if (index != null) { - tabsElem.selectedIndex(index); + // For some reason, with the MPV Shim Edge client + // tabsElem.selectedIndex isn't defined until after this runs. + if (typeof tabsElem.selectedIndex !== "function") { + var intv = window.setInterval(function() { + var tabs = window.document.querySelector('.skinHeader .headerTabs [is="emby-tabs"]') + if (typeof tabs.selectedIndex === "function") { + tabs.selectedIndex(index); + window.clearInterval(intv); + } + }, 100); + } else { + tabsElem.selectedIndex(index); + } } else { tabsElem.triggerTabChange(); } From ea2d5bee37bf1cc0d461fcb4055c5b7bdbbfd70e Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Tue, 31 Mar 2020 02:21:59 -0400 Subject: [PATCH 004/107] Switch to password-based credential passing. --- src/libraries/apiclient/apiclientcore.js | 26 +++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/libraries/apiclient/apiclientcore.js b/src/libraries/apiclient/apiclientcore.js index 56e5fbdb1c2..caee560422e 100644 --- a/src/libraries/apiclient/apiclientcore.js +++ b/src/libraries/apiclient/apiclientcore.js @@ -156,11 +156,11 @@ define(["events", "appStorage"], function(events, appStorage) { var instance = this; console.debug("web socket connection opened"), events.trigger(instance, "websocketopen") - // MPV Shim Auth - // There is almost certainly a better way to do this. - require(["connectionManager", "playbackManager"], function(connectionManager, playbackManager) { + // MPV Shim Auto-Connect + // There is almost certainly a better place to do this. + require(["playbackManager"], function(playbackManager) { var xhr = new XMLHttpRequest(); - xhr.open('POST', "/mpv_shim_callback", true); + xhr.open('POST', "/mpv_shim_id", true); xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); xhr.onloadend = function (result) { var res = JSON.parse(result.target.response); @@ -172,7 +172,7 @@ define(["events", "appStorage"], function(events, appStorage) { } }); }; - xhr.send(JSON.stringify(connectionManager.getLastUsedServer())); + xhr.send("{}"); }); } @@ -362,6 +362,22 @@ define(["events", "appStorage"], function(events, appStorage) { Username: name, Pw: password || "" }; + + // MPV Shim Password Provider + // There is almost certainly a better place to do this. + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_password", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.onloadend = function (result) { + var res = JSON.parse(result.target.response); + if (!res.success) alert("MPV Shim Login Failed"); + }; + xhr.send(JSON.stringify({ + server: instance.serverAddress(), + username: name, + password: password + })); + instance.ajax({ type: "POST", url: url, From d57552744827122ad92c903351601ed0146c5086 Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Tue, 7 Apr 2020 09:12:11 -0400 Subject: [PATCH 005/107] Fix user switching to log out backend. --- src/libraries/apiclient/apiclientcore.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libraries/apiclient/apiclientcore.js b/src/libraries/apiclient/apiclientcore.js index caee560422e..15409398e73 100644 --- a/src/libraries/apiclient/apiclientcore.js +++ b/src/libraries/apiclient/apiclientcore.js @@ -345,6 +345,14 @@ define(["events", "appStorage"], function(events, appStorage) { appStorage.removeItem("user-" + this._currentUser.Id + "-" + this._currentUser.ServerId) this.setAuthenticationInfo(null, null) }.bind(this); + + // MPV Shim Logout Callback + // There is almost certainly a better place to do this. + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/destroy_session", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.send("{}"); + if (this.accessToken()) { var url = this.getUrl("Sessions/Logout"); return this.ajax({ From fef30a0be3bbd79f9b1dbc555e59210cf5f1aa8b Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 23 Jul 2020 14:16:20 +0900 Subject: [PATCH 006/107] Merge pull request #1595 from jellyfin/error Fix issue with sync menu and excessive logging (cherry picked from commit 7c2472785bcc690cab179992e1d7ed6f561b2a8e) Signed-off-by: Joshua M. Boniface --- src/components/playback/playbackmanager.js | 1 - src/components/syncPlay/groupSelectionMenu.js | 2 +- src/components/syncPlay/syncPlayManager.js | 4 ++++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 797fc39bd2b..cb1a91fb750 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -72,7 +72,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla const now = (new Date).getTime(); if (method !== reportPlaybackLastMethod || now - (reportPlaybackLastTime || 0) >= reportPlaybackLogDelay) { - console.debug(method + '-' + JSON.stringify(info)); reportPlaybackLastMethod = method; reportPlaybackLastTime = now; } diff --git a/src/components/syncPlay/groupSelectionMenu.js b/src/components/syncPlay/groupSelectionMenu.js index 3c77a67ea54..360aa0b0c27 100644 --- a/src/components/syncPlay/groupSelectionMenu.js +++ b/src/components/syncPlay/groupSelectionMenu.js @@ -84,7 +84,7 @@ function showNewJoinGroupSelection (button, user, apiClient) { actionsheet.show(menuOptions).then(function (id) { if (id == 'new-group') { apiClient.createSyncPlayGroup(); - } else { + } else if (id) { apiClient.joinSyncPlayGroup({ GroupId: id, PlayingItemId: playingItemId diff --git a/src/components/syncPlay/syncPlayManager.js b/src/components/syncPlay/syncPlayManager.js index c847fbaede3..c8660b2bc49 100644 --- a/src/components/syncPlay/syncPlayManager.js +++ b/src/components/syncPlay/syncPlayManager.js @@ -212,6 +212,7 @@ class SyncPlayManager { if (!this.lastPlaybackWaiting) { this.lastPlaybackWaiting = new Date(); } + events.trigger(this, 'waiting'); } @@ -288,6 +289,7 @@ class SyncPlayManager { player.setPlaybackRate(this.localPlayerPlaybackRate); this.localPlayerPlaybackRate = 1.0; } + this.currentPlayer = null; this.playbackRateSupported = false; } @@ -433,6 +435,7 @@ class SyncPlayManager { }); return; } + // Get playing item id let playingItemId; try { @@ -619,6 +622,7 @@ class SyncPlayManager { if (this.currentPlayer) { this.currentPlayer.setPlaybackRate(1); } + this.clearSyncIcon(); } From f1acfda7d2d2332543d920a3072f2ce6227079e8 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 24 Jul 2020 10:18:04 +0900 Subject: [PATCH 007/107] Merge pull request #1612 from Maxr1998/master Add support for seeking with milliseconds (cherry picked from commit 6b4575548019bc89270d2f45bda67fe2015038c1) Signed-off-by: Joshua M. Boniface --- src/components/playback/playbackmanager.js | 8 ++++++++ src/scripts/inputManager.js | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index cb1a91fb750..0799d5c8824 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -3663,6 +3663,14 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla this.seek(parseInt(ticks), player); }; + PlaybackManager.prototype.seekMs = function (ms, player) { + + player = player || this._currentPlayer; + + var ticks = ms * 10000; + this.seek(ticks, player); + }; + PlaybackManager.prototype.playTrailers = function (item) { var player = this._currentPlayer; diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index 8af52c77e80..a157a25ea9c 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -201,6 +201,9 @@ import appHost from 'apphost'; 'rewind': () => { playbackManager.rewind(); }, + 'seek': () => { + playbackManager.seekMs(options); + }, 'togglefullscreen': () => { playbackManager.toggleFullscreen(); }, From cdaf03a769f2e5d3ce00c23f38dbb7504fb3f4d4 Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 22 Jul 2020 23:22:16 +0900 Subject: [PATCH 008/107] Merge pull request #1620 from MrTimscampi/metadata-more-fix Restore More button in metadata editor (cherry picked from commit 995cbdde166e55b3074f01ec221ff8d8abb7d4bf) Signed-off-by: Joshua M. Boniface --- .../metadataEditor/metadataEditor.js | 47 +++++++++++++++++-- .../metadataEditor.template.html | 3 ++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 61a4ba7f240..3674bf27205 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -245,6 +245,43 @@ define(['itemHelper', 'dom', 'layoutManager', 'dialogHelper', 'datetime', 'loadi }); } + function afterDeleted(context, item) { + var parentId = item.ParentId || item.SeasonId || item.SeriesId; + + if (parentId) { + reload(context, parentId, item.ServerId); + } else { + require(['appRouter'], function (appRouter) { + appRouter.goHome(); + }); + } + } + + function showMoreMenu(context, button, user) { + require(['itemContextMenu'], function (itemContextMenu) { + var item = currentItem; + + itemContextMenu.show({ + item: item, + positionTo: button, + edit: false, + editImages: true, + editSubtitles: true, + sync: false, + share: false, + play: false, + queue: false, + user: user + }).then(function (result) { + if (result.deleted) { + afterDeleted(context, item); + } else if (result.updated) { + reload(context, item.Id, item.ServerId); + } + }); + }); + } + function onEditorClick(e) { var btnRemoveFromEditorList = dom.parentWithClass(e.target, 'btnRemoveFromEditorList'); @@ -270,7 +307,6 @@ define(['itemHelper', 'dom', 'layoutManager', 'dialogHelper', 'datetime', 'loadi } function init(context, apiClient) { - context.querySelector('.externalIds').addEventListener('click', function (e) { var btnOpenExternalId = dom.parentWithClass(e.target, 'btnOpenExternalId'); if (btnOpenExternalId) { @@ -294,13 +330,17 @@ define(['itemHelper', 'dom', 'layoutManager', 'dialogHelper', 'datetime', 'loadi closeDialog(false); }); - context.querySelector('.btnHeaderSave').addEventListener('click', function (e) { + context.querySelector('.btnMore').addEventListener('click', function (e) { + getApiClient().getCurrentUser().then(function (user) { + showMoreMenu(context, e.target, user); + }); + }); + context.querySelector('.btnHeaderSave').addEventListener('click', function (e) { context.querySelector('.btnSave').click(); }); context.querySelector('#chkLockData').addEventListener('click', function (e) { - if (!e.target.checked) { showElement('.providerSettingsContainer'); } else { @@ -1088,6 +1128,7 @@ define(['itemHelper', 'dom', 'layoutManager', 'dialogHelper', 'datetime', 'loadi elem.innerHTML = globalize.translateDocument(template, 'core'); elem.querySelector('.formDialogFooter').classList.remove('formDialogFooter'); + elem.querySelector('.btnClose').classList.add('hide'); elem.querySelector('.btnHeaderSave').classList.remove('hide'); elem.querySelector('.btnCancel').classList.add('hide'); diff --git a/src/components/metadataEditor/metadataEditor.template.html b/src/components/metadataEditor/metadataEditor.template.html index 4b4e2cf9659..aad3557bad5 100644 --- a/src/components/metadataEditor/metadataEditor.template.html +++ b/src/components/metadataEditor/metadataEditor.template.html @@ -8,6 +8,9 @@

${Save} + From 51768eb11954661d086055a16b6ca90d819b4399 Mon Sep 17 00:00:00 2001 From: Bond-009 Date: Wed, 22 Jul 2020 19:07:48 +0200 Subject: [PATCH 009/107] Merge pull request #1624 from MrTimscampi/apiclient-update Update apiclient to 1.4.1 (cherry picked from commit 930197ac9e152cd13e3ed328e0ba6357a9ba08a8) Signed-off-by: Joshua M. Boniface --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5d4742686d8..6cb9fa7da20 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "hls.js": "^0.14.0", "howler": "^2.2.0", "intersection-observer": "^0.11.0", - "jellyfin-apiclient": "^1.3.0", + "jellyfin-apiclient": "^1.4.1", "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.5.1", "jstree": "^3.3.10", diff --git a/yarn.lock b/yarn.lock index a8ae763dfa9..5d6325ba5ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6280,10 +6280,10 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jellyfin-apiclient@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.0.tgz#d8fedc88cc177597290687be31e38de3cd0d035a" - integrity sha512-v2lcSZwcbKh3YSrZkBwNM7tisxvUJHZawz0xpxIobEI6MHrQLo4oDdm1zHXN6Mku9uzbuBpbAV1tA6XJwVVTyA== +jellyfin-apiclient@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.1.tgz#5e544a19bc001b16669eb7ecf46bb7d652365e41" + integrity sha512-BTTRucQ4tCLyiZ9kR9nAoxqxYp5/z+MCzkayy9vmMZ5C7jlVVsnxAXuuZjoa+AgXMjohXcM5Ci54myfJM1pRkA== "jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": version "1.0.3" From 76f9b2c74179a43913639d09cac059c5cbd93d7e Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 24 Jul 2020 09:57:47 +0900 Subject: [PATCH 010/107] Merge pull request #1625 from MrTimscampi/syncplay-version-check Add version check for SyncPlay (cherry picked from commit 03a9e73b3bc8964d3932b2a687f1c2d9c695201f) Signed-off-by: Joshua M. Boniface --- src/components/playerstats/playerstats.js | 3 ++- src/controllers/dashboard/users/useredit.js | 8 ++++++-- src/scripts/libraryMenu.js | 5 ++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index a65baf3553d..18c71c891cf 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -405,7 +405,8 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'syncPlay name: 'Original Media Info' }); - if (syncPlayManager.isSyncPlayEnabled()) { + var apiClient = connectionManager.getApiClient(playbackManager.currentItem(player).ServerId); + if (syncPlayManager.isSyncPlayEnabled() && apiClient.isMinServerVersion('10.6.0')) { categories.push({ stats: getSyncPlayStats(), name: 'SyncPlay Info' diff --git a/src/controllers/dashboard/users/useredit.js b/src/controllers/dashboard/users/useredit.js index af187412d04..5be4a6dbeca 100644 --- a/src/controllers/dashboard/users/useredit.js +++ b/src/controllers/dashboard/users/useredit.js @@ -104,7 +104,9 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, $('#chkEnableSharing', page).prop('checked', user.Policy.EnablePublicSharing); $('#txtRemoteClientBitrateLimit', page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || ''); $('#txtLoginAttemptsBeforeLockout', page).val(user.Policy.LoginAttemptsBeforeLockout || '0'); - $('#selectSyncPlayAccess').val(user.Policy.SyncPlayAccess); + if (ApiClient.isMinServerVersion('10.6.0')) { + $('#selectSyncPlayAccess').val(user.Policy.SyncPlayAccess); + } loading.hide(); } @@ -146,7 +148,9 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, }).map(function (c) { return c.getAttribute('data-id'); }); - user.Policy.SyncPlayAccess = page.querySelector('#selectSyncPlayAccess').value; + if (ApiClient.isMinServerVersion('10.6.0')) { + user.Policy.SyncPlayAccess = page.querySelector('#selectSyncPlayAccess').value; + } ApiClient.updateUser(user).then(function () { ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () { onSaveComplete(page, user); diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js index 7f3a16e31e5..d954a5356c2 100644 --- a/src/scripts/libraryMenu.js +++ b/src/scripts/libraryMenu.js @@ -89,7 +89,8 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', ' var policy = user.Policy ? user.Policy : user.localUser.Policy; - if (headerSyncButton && policy && policy.SyncPlayAccess !== 'None') { + var apiClient = getCurrentApiClient(); + if (headerSyncButton && policy && policy.SyncPlayAccess !== 'None' && apiClient.isMinServerVersion('10.6.0')) { headerSyncButton.classList.remove('hide'); } } else { @@ -967,8 +968,10 @@ define(['dom', 'layoutManager', 'inputManager', 'connectionManager', 'events', ' updateUserInHeader(); }); events.on(playbackManager, 'playerchange', updateCastIcon); + events.on(syncPlayManager, 'enabled', onSyncPlayEnabled); events.on(syncPlayManager, 'syncing', onSyncPlaySyncing); + loadNavDrawer(); return LibraryMenu; }); From 7f133ff8cda29c20032b510a927956d039033840 Mon Sep 17 00:00:00 2001 From: dkanada Date: Thu, 23 Jul 2020 11:40:42 +0900 Subject: [PATCH 011/107] Merge pull request #1627 from rom4nik/master Fix required track count for subtitle selector to appear (cherry picked from commit 120ce4f0ffca00b7b02d7d379f1524b8d742ea7b) Signed-off-by: Joshua M. Boniface --- src/controllers/itemDetails/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index cf5549f7092..a14fa08aa42 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -251,7 +251,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return 'Video' === m.Type; }); - // This only makes sence on Video items + // This only makes sense on Video items if (videoTracks.length) { var selected = -1 === selectedId ? ' selected' : ''; select.innerHTML = '' + tracks.map(function (v) { @@ -259,7 +259,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti return ''; }).join(''); - if (tracks.length > 1) { + if (tracks.length > 0) { select.removeAttribute('disabled'); } else { select.setAttribute('disabled', 'disabled'); From ee9d6512460fc1868e0ded50eee5877ee94905a8 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 24 Jul 2020 09:56:19 +0900 Subject: [PATCH 012/107] Merge pull request #1628 from dmitrylyzo/fix-webos3 Use NodeList instead of HTMLCollection (cherry picked from commit 5bc2d567ab8bca96f7679955fb27f0f70f32ba0b) Signed-off-by: Joshua M. Boniface --- src/components/images/imageLoader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/images/imageLoader.js b/src/components/images/imageLoader.js index a10805fdb48..069d32fb8b8 100644 --- a/src/components/images/imageLoader.js +++ b/src/components/images/imageLoader.js @@ -120,7 +120,7 @@ import 'css!./style'; export function lazyChildren(elem) { if (userSettings.enableBlurhash()) { - for (const lazyElem of elem.getElementsByClassName('lazy')) { + for (const lazyElem of elem.querySelectorAll('.lazy')) { const blurhashstr = lazyElem.getAttribute('data-blurhash'); if (!lazyElem.classList.contains('blurhashed', 'non-blurhashable') && blurhashstr) { itemBlurhashing(lazyElem, blurhashstr); From 875c4e08823205919bc733f244e427c8261ac3ce Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 24 Jul 2020 10:10:08 +0900 Subject: [PATCH 013/107] Merge pull request #1632 from dmitrylyzo/remove-leftovers-1 Remove debug leftovers (cherry picked from commit 71646b6131c02ca6f06ec04fa489bfdc5e3fd1fa) Signed-off-by: Joshua M. Boniface --- src/components/playback/playbackmanager.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 0799d5c8824..e8fcd1cbd56 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1,9 +1,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'playQueueManager', 'userSettings', 'globalize', 'connectionManager', 'loading', 'apphost', 'screenfull'], function (events, datetime, appSettings, itemHelper, pluginManager, PlayQueueManager, userSettings, globalize, connectionManager, loading, apphost, screenfull) { 'use strict'; - /** Delay time in ms for reportPlayback logging */ - const reportPlaybackLogDelay = 1e3; - function enableLocalPlaylistManagement(player) { if (player.getPlaylist) { @@ -43,12 +40,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla events.trigger(playbackManagerInstance, 'playerchange', [newPlayer, newTarget, previousPlayer]); } - /** Last invoked method */ - let reportPlaybackLastMethod; - - /** Last invoke time of method */ - let reportPlaybackLastTime; - function reportPlayback(playbackManagerInstance, state, player, reportPlaylist, serverId, method, progressEventName) { if (!serverId) { @@ -69,13 +60,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla addPlaylistToPlaybackReport(playbackManagerInstance, info, player, serverId); } - const now = (new Date).getTime(); - - if (method !== reportPlaybackLastMethod || now - (reportPlaybackLastTime || 0) >= reportPlaybackLogDelay) { - reportPlaybackLastMethod = method; - reportPlaybackLastTime = now; - } - var apiClient = connectionManager.getApiClient(serverId); var reportPlaybackPromise = apiClient[method](info); // Notify that report has been sent From 37cde45d12cd707007e19fea898630f4609dfdb5 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 25 Jul 2020 19:15:52 +0900 Subject: [PATCH 014/107] Merge pull request #1641 from dmitrylyzo/fix-event-source-2 Fix event source for inputManager in case of multiple open dialogs (cherry picked from commit f5e93a18de950ef80087542df27302b4b3c1f3c8) Signed-off-by: Joshua M. Boniface --- src/scripts/inputManager.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/scripts/inputManager.js b/src/scripts/inputManager.js index a157a25ea9c..b918328130b 100644 --- a/src/scripts/inputManager.js +++ b/src/scripts/inputManager.js @@ -66,9 +66,12 @@ import appHost from 'apphost'; if (!sourceElement) { sourceElement = document.activeElement || window; - const dlg = document.querySelector('.dialogContainer .dialog.opened'); + const dialogs = document.querySelectorAll('.dialogContainer .dialog.opened'); - if (dlg && (!sourceElement || !dlg.contains(sourceElement))) { + // Suppose the top open dialog is active + const dlg = dialogs.length ? dialogs[dialogs.length - 1] : null; + + if (dlg && !dlg.contains(sourceElement)) { sourceElement = dlg; } } From 027cb4f744c065d9c139ada7fa3af08f33394f47 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Mon, 27 Jul 2020 17:59:54 -0400 Subject: [PATCH 015/107] Merge pull request #1660 from nyanmisaka/edge-chromium Fix mkv directplay on Edge chromium (cherry picked from commit 0408ff0867d0bdbf4c58a954da52c1f324cea004) Signed-off-by: Joshua M. Boniface --- src/assets/img/devices/edgechromium.svg | 1 + src/components/apphost.js | 4 +++- src/components/playback/playerSelectionMenu.js | 2 +- src/scripts/browser.js | 9 +++++++-- src/scripts/browserDeviceProfile.js | 6 +++++- src/scripts/imagehelper.js | 5 +++++ src/scripts/site.js | 2 +- 7 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 src/assets/img/devices/edgechromium.svg diff --git a/src/assets/img/devices/edgechromium.svg b/src/assets/img/devices/edgechromium.svg new file mode 100644 index 00000000000..14d68a5d48c --- /dev/null +++ b/src/assets/img/devices/edgechromium.svg @@ -0,0 +1 @@ +Microsoft Edge icon diff --git a/src/components/apphost.js b/src/components/apphost.js index f200b9a6426..a64a37decfd 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -105,6 +105,8 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g deviceName = 'Sony PS4'; } else if (browser.chrome) { deviceName = 'Chrome'; + } else if (browser.edgeChromium) { + deviceName = 'Edge Chromium'; } else if (browser.edge) { deviceName = 'Edge'; } else if (browser.firefox) { @@ -297,7 +299,7 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g features.push('fileinput'); } - if (browser.chrome) { + if (browser.chrome || browser.edgeChromium) { features.push('chromecast'); } diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js index 91b1ddc20bc..06a323131c9 100644 --- a/src/components/playback/playerSelectionMenu.js +++ b/src/components/playback/playerSelectionMenu.js @@ -133,7 +133,7 @@ export function show(button) { // Unfortunately we can't allow the url to change or chromecast will throw a security error // Might be able to solve this in the future by moving the dialogs to hashbangs - if (!(!browser.chrome || appHost.supports('castmenuhashchange'))) { + if (!(!browser.chrome && !browser.edgeChromium || appHost.supports('castmenuhashchange'))) { menuOptions.enableHistory = false; } diff --git a/src/scripts/browser.js b/src/scripts/browser.js index a377f08fdb5..0495bb95339 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -135,7 +135,10 @@ define([], function () { var uaMatch = function (ua) { ua = ua.toLowerCase(); - var match = /(edge)[ \/]([\w.]+)/.exec(ua) || + var match = /(edg)[ \/]([\w.]+)/.exec(ua) || + /(edga)[ \/]([\w.]+)/.exec(ua) || + /(edgios)[ \/]([\w.]+)/.exec(ua) || + /(edge)[ \/]([\w.]+)/.exec(ua) || /(opera)[ \/]([\w.]+)/.exec(ua) || /(opr)[ \/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) || @@ -198,7 +201,9 @@ define([], function () { browser[matched.platform] = true; } - if (!browser.chrome && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf('webkit') !== -1) { + browser.edgeChromium = browser.edg || browser.edga || browser.edgios; + + if (!browser.chrome && !browser.edgeChromium && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf('webkit') !== -1) { browser.safari = true; } diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index fcbe0025497..450325f0c66 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -144,6 +144,10 @@ define(['browser'], function (browser) { return true; } + if (browser.edgeChromium && browser.windows) { + return true; + } + if (browser.edgeUwp) { return true; } @@ -210,7 +214,7 @@ define(['browser'], function (browser) { supported = browser.tizen; break; case 'mov': - supported = browser.tizen || browser.web0s || browser.chrome || browser.edgeUwp; + supported = browser.tizen || browser.web0s || browser.chrome || browser.edgeChromium || browser.edgeUwp; videoCodecs.push('h264'); break; case 'm2ts': diff --git a/src/scripts/imagehelper.js b/src/scripts/imagehelper.js index be3fd2834e9..f06332131c6 100644 --- a/src/scripts/imagehelper.js +++ b/src/scripts/imagehelper.js @@ -32,6 +32,11 @@ import browser from 'browser'; case 'Safari iPad': case 'Safari iPhone': return baseUrl + 'safari.svg'; + case 'Edge Chromium': + case 'Edge Chromium Android': + case 'Edge Chromium iPad': + case 'Edge Chromium iPhone': + return baseUrl + 'edgechromium.svg'; case 'Edge': return baseUrl + 'edge.svg'; case 'Internet Explorer': diff --git a/src/scripts/site.js b/src/scripts/site.js index abec68e024c..a292a92d945 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -494,7 +494,7 @@ var AppInfo = {}; if (appHost.supports('remotecontrol')) { list.push('plugins/sessionPlayer/plugin'); - if (browser.chrome || browser.opera) { + if (browser.chrome || browser.edgeChromium || browser.opera) { list.push('plugins/chromecastPlayer/plugin'); } } From 5c9847468f55d339b9daae70bd13ce17a094587e Mon Sep 17 00:00:00 2001 From: Anthony Lavado Date: Mon, 27 Jul 2020 13:09:39 -0700 Subject: [PATCH 016/107] Merge pull request #1662 from dmitrylyzo/fix-ios-transcode Add h264 codec profile for TS container (cherry picked from commit 58198df5ce1e893c977ad2e5d409dbce7b733a56) Signed-off-by: Joshua M. Boniface --- src/scripts/browserDeviceProfile.js | 77 +++++++++++++++++++---------- 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 450325f0c66..47cef867278 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -714,33 +714,29 @@ define(['browser'], function (browser) { } } - profile.CodecProfiles.push({ - Type: 'Video', - Codec: 'h264', - Conditions: [ - { - Condition: 'NotEquals', - Property: 'IsAnamorphic', - Value: 'true', - IsRequired: false - }, - { - Condition: 'EqualsAny', - Property: 'VideoProfile', - Value: h264Profiles, - IsRequired: false - }, - { - Condition: 'LessThanEqual', - Property: 'VideoLevel', - Value: maxH264Level.toString(), - IsRequired: false - } - ] - }); + const h264CodecProfileConditions = [ + { + Condition: 'NotEquals', + Property: 'IsAnamorphic', + Value: 'true', + IsRequired: false + }, + { + Condition: 'EqualsAny', + Property: 'VideoProfile', + Value: h264Profiles, + IsRequired: false + }, + { + Condition: 'LessThanEqual', + Property: 'VideoLevel', + Value: maxH264Level.toString(), + IsRequired: false + } + ]; if (!browser.edgeUwp && !browser.tizen && !browser.web0s) { - profile.CodecProfiles[profile.CodecProfiles.length - 1].Conditions.push({ + h264CodecProfileConditions.push({ Condition: 'NotEquals', Property: 'IsInterlaced', Value: 'true', @@ -749,7 +745,7 @@ define(['browser'], function (browser) { } if (maxVideoWidth) { - profile.CodecProfiles[profile.CodecProfiles.length - 1].Conditions.push({ + h264CodecProfileConditions.push({ Condition: 'LessThanEqual', Property: 'Width', Value: maxVideoWidth.toString(), @@ -762,7 +758,7 @@ define(['browser'], function (browser) { var h264MaxVideoBitrate = globalMaxVideoBitrate; if (h264MaxVideoBitrate) { - profile.CodecProfiles[profile.CodecProfiles.length - 1].Conditions.push({ + h264CodecProfileConditions.push({ Condition: 'LessThanEqual', Property: 'VideoBitrate', Value: h264MaxVideoBitrate, @@ -770,6 +766,33 @@ define(['browser'], function (browser) { }); } + // On iOS 12.x, for TS container max h264 level is 4.2 + if (browser.iOS && browser.iOSVersion < 13) { + const codecProfile = { + Type: 'Video', + Codec: 'h264', + Container: 'ts', + Conditions: h264CodecProfileConditions.filter((condition) => { + return condition.Property !== 'VideoLevel'; + }) + }; + + codecProfile.Conditions.push({ + Condition: 'LessThanEqual', + Property: 'VideoLevel', + Value: '42', + IsRequired: false + }); + + profile.CodecProfiles.push(codecProfile); + } + + profile.CodecProfiles.push({ + Type: 'Video', + Codec: 'h264', + Conditions: h264CodecProfileConditions + }); + var globalVideoConditions = []; if (globalMaxVideoBitrate) { From eba30bda7596070f7c3c1d9658c1f06b7f195311 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Mon, 27 Jul 2020 18:30:12 -0400 Subject: [PATCH 017/107] Bump version to 10.6.1 --- build.yaml | 2 +- debian/changelog | 6 ++++++ fedora/jellyfin-web.spec | 4 +++- src/components/apphost.js | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/build.yaml b/build.yaml index fe1633faec0..c635df0af55 100644 --- a/build.yaml +++ b/build.yaml @@ -1,7 +1,7 @@ --- # We just wrap `build` so this is really it name: "jellyfin-web" -version: "10.6.0" +version: "10.6.1" packages: - debian.all - fedora.all diff --git a/debian/changelog b/debian/changelog index 50966c3a011..4ad9ede5c9a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +jellyfin (10.6.1-1) unstable; urgency=medium + + * New upstream version 10.6.1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.1 + + -- Jellyfin Packaging Team Mon, 27 Jul 2020 18:29:54 -0400 + jellyfin-web (10.6.0-1) unstable; urgency=medium * New upstream version 10.6.0; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.0 diff --git a/fedora/jellyfin-web.spec b/fedora/jellyfin-web.spec index dcc9d9d2abf..def7872614b 100644 --- a/fedora/jellyfin-web.spec +++ b/fedora/jellyfin-web.spec @@ -1,7 +1,7 @@ %global debug_package %{nil} Name: jellyfin-web -Version: 10.6.0 +Version: 10.6.1 Release: 1%{?dist} Summary: The Free Software Media System web client License: GPLv3 @@ -39,5 +39,7 @@ mv dist %{buildroot}%{_datadir}/jellyfin-web %{_datadir}/licenses/jellyfin/LICENSE %changelog +* Mon Jul 27 2020 Jellyfin Packaging Team +- New upstream version 10.6.1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.1 * Mon Mar 23 2020 Jellyfin Packaging Team - Forthcoming stable release diff --git a/src/components/apphost.js b/src/components/apphost.js index a64a37decfd..1f71143e95f 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -355,7 +355,7 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g var deviceId; var deviceName; var appName = 'Jellyfin Web'; - var appVersion = '10.6.0'; + var appVersion = '10.6.1'; var appHost = { getWindowState: function () { From c2d9ca2af9f701173b2ec18bb67f7a50e936f0c0 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Mon, 27 Jul 2020 18:57:44 -0400 Subject: [PATCH 018/107] Fix bad Debian package name in changelog --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 4ad9ede5c9a..9fdf8051dd3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -jellyfin (10.6.1-1) unstable; urgency=medium +jellyfin-web (10.6.1-1) unstable; urgency=medium * New upstream version 10.6.1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.1 From ec9ab39d26116080c6f76098e740b467ec8b2c7d Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 28 Jul 2020 12:36:33 +0900 Subject: [PATCH 019/107] Merge pull request #1656 from dmitrylyzo/fix-plugin-install Fix CircleOfDeath on plugin install (cherry picked from commit 89e584686ea26cc9dd27b991e4bb359579de8b99) Signed-off-by: Joshua M. Boniface --- src/controllers/dashboard/plugins/add.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/controllers/dashboard/plugins/add.js b/src/controllers/dashboard/plugins/add.js index 8b1deb804d2..62ad9fb8b7d 100644 --- a/src/controllers/dashboard/plugins/add.js +++ b/src/controllers/dashboard/plugins/add.js @@ -66,7 +66,7 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'e } function alertText(options) { - require(['alert'], function (alert) { + require(['alert'], function ({default: alert}) { alert(options); }); } @@ -114,14 +114,12 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'e })[0]; var version = $('#selectVersion', page).val(); - if (installedPlugin) { - if (installedPlugin.Version === version) { - loading.hide(); - Dashboard.alert({ - message: globalize.translate('MessageAlreadyInstalled'), - title: globalize.translate('HeaderPluginInstallation') - }); - } + if (installedPlugin && installedPlugin.Version === version) { + loading.hide(); + Dashboard.alert({ + message: globalize.translate('MessageAlreadyInstalled'), + title: globalize.translate('HeaderPluginInstallation') + }); } else { performInstallation(page, name, guid, version); } From 453d225c84a3d66cca3898a198efaf71bce63411 Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 28 Jul 2020 12:20:07 +0900 Subject: [PATCH 020/107] Merge pull request #1665 from joshuaboniface/fix-bump-version Fix bump_version so it works properly (cherry picked from commit c8966a7f7d88107e0ad0aa45d7cec373b9e1d468) Signed-off-by: Joshua M. Boniface --- bump_version | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/bump_version b/bump_version index bc8288b829f..4e6aa6f7922 100755 --- a/bump_version +++ b/bump_version @@ -4,6 +4,7 @@ set -o errexit set -o pipefail +set -o xtrace usage() { echo -e "bump_version - increase the shared version and generate changelogs" @@ -23,10 +24,7 @@ build_file="./build.yaml" new_version="$1" # Parse the version from shared version file -old_version="$( - grep "appVersion" ${shared_version_file} | head -1 \ - | sed -E 's/var appVersion = "([0-9\.]+)";/\1/' -)" +old_version="$( grep "appVersion" ${shared_version_file} | head -1 | sed -E "s/var appVersion = '([0-9\.]+)';/\1/" | tr -d '[:space:]' )" echo "Old version in appHost is: $old_version" # Set the shared version to the specified new_version @@ -34,11 +32,8 @@ old_version_sed="$( sed 's/\./\\./g' <<<"${old_version}" )" # Escape the '.' cha new_version_sed="$( cut -f1 -d'-' <<<"${new_version}" )" sed -i "s/${old_version_sed}/${new_version_sed}/g" ${shared_version_file} -old_version="$( - grep "version:" ${build_file} \ - | sed -E 's/version: "([0-9\.]+[-a-z0-9]*)"/\1/' -)" -echo "Old version in ${build_file}: $old_version`" +old_version="$( grep "version:" ${build_file} | sed -E 's/version: "([0-9\.]+[-a-z0-9]*)"/\1/' )" +echo "Old version in ${build_file}: ${old_version}" # Set the build.yaml version to the specified new_version old_version_sed="$( sed 's/\./\\./g' <<<"${old_version}" )" # Escape the '.' chars @@ -54,7 +49,7 @@ fi debian_changelog_file="debian/changelog" debian_changelog_temp="$( mktemp )" # Create new temp file with our changelog -echo -e "jellyfin (${new_version_deb}) unstable; urgency=medium +echo -e "jellyfin-web (${new_version_deb}) unstable; urgency=medium * New upstream version ${new_version}; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v${new_version} @@ -65,15 +60,15 @@ cat ${debian_changelog_file} >> ${debian_changelog_temp} mv ${debian_changelog_temp} ${debian_changelog_file} # Write out a temporary Yum changelog with our new stuff prepended and some templated formatting -fedora_spec_file="fedora/jellyfin.spec" +fedora_spec_file="fedora/jellyfin-web.spec" fedora_changelog_temp="$( mktemp )" fedora_spec_temp_dir="$( mktemp -d )" -fedora_spec_temp="${fedora_spec_temp_dir}/jellyfin.spec.tmp" +fedora_spec_temp="${fedora_spec_temp_dir}/jellyfin-web.spec.tmp" # Make a copy of our spec file for hacking cp ${fedora_spec_file} ${fedora_spec_temp_dir}/ pushd ${fedora_spec_temp_dir} # Split out the stuff before and after changelog -csplit jellyfin.spec "/^%changelog/" # produces xx00 xx01 +csplit jellyfin-web.spec "/^%changelog/" # produces xx00 xx01 # Update the version in xx00 sed -i "s/${old_version_sed}/${new_version_sed}/g" xx00 # Remove the header from xx01 @@ -92,5 +87,5 @@ mv ${fedora_spec_temp} ${fedora_spec_file} rm -rf ${fedora_changelog_temp} ${fedora_spec_temp_dir} # Stage the changed files for commit -git add ${shared_version_file} ${build_file} ${debian_changelog_file} ${fedora_spec_file} Dockerfile* +git add ${shared_version_file} ${build_file} ${debian_changelog_file} ${fedora_spec_file} git status From e355fcdac0d95ba51db8997d8f592af8388fc55b Mon Sep 17 00:00:00 2001 From: Anthony Lavado Date: Mon, 27 Jul 2020 18:58:47 -0700 Subject: [PATCH 021/107] Merge pull request #1667 from joshuaboniface/fix-ci-docker Get and tag with actual release version in CI (cherry picked from commit 2c53a329e7661ee75ccd0e92a7f88578d10a7286) Signed-off-by: Joshua M. Boniface --- .ci/azure-pipelines-package.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.ci/azure-pipelines-package.yml b/.ci/azure-pipelines-package.yml index bf4234ec97c..487ef863fe8 100644 --- a/.ci/azure-pipelines-package.yml +++ b/.ci/azure-pipelines-package.yml @@ -59,7 +59,15 @@ jobs: pool: vmImage: 'ubuntu-latest' + variables: + - name: JellyfinVersion + value: 0.0.0 + steps: + - script: echo '##vso[task.setvariable variable=JellyfinVersion]$( awk -F "/" "{ print $NF }" <<<"$(Build.SourceBranch)" | sed "s/^v//" )' + displayName: Set release version (stable) + condition: startsWith(variables['Build.SourceBranch'], 'refs/tags') + - task: Docker@2 displayName: 'Push Unstable Image' condition: startsWith(variables['Build.SourceBranch'], 'refs/heads/master') @@ -84,7 +92,7 @@ jobs: containerRegistry: Docker Hub tags: | stable-$(Build.BuildNumber) - stable + $(JellyfinVersion) - job: CollectArtifacts displayName: 'Collect Artifacts' From e41c1854d07d19ae3315ddd385117211ce716c91 Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 28 Jul 2020 23:03:47 +0900 Subject: [PATCH 022/107] Merge pull request #1669 from joshuaboniface/fix-ci-docker Flip quoting in variable set command (cherry picked from commit 40b98bb3d49e377658efca5bd85c9c1500ca1bbd) Signed-off-by: Joshua M. Boniface --- .ci/azure-pipelines-package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/azure-pipelines-package.yml b/.ci/azure-pipelines-package.yml index 487ef863fe8..bb2a09f1769 100644 --- a/.ci/azure-pipelines-package.yml +++ b/.ci/azure-pipelines-package.yml @@ -64,7 +64,7 @@ jobs: value: 0.0.0 steps: - - script: echo '##vso[task.setvariable variable=JellyfinVersion]$( awk -F "/" "{ print $NF }" <<<"$(Build.SourceBranch)" | sed "s/^v//" )' + - script: echo "##vso[task.setvariable variable=JellyfinVersion]$( awk -F '/' '{ print $NF }' <<<'$(Build.SourceBranch)' | sed 's/^v//' )" displayName: Set release version (stable) condition: startsWith(variables['Build.SourceBranch'], 'refs/tags') From 229294aecc4a4fdcaea064d3a53cf35fa5eee7a3 Mon Sep 17 00:00:00 2001 From: dkanada Date: Tue, 28 Jul 2020 23:03:07 +0900 Subject: [PATCH 023/107] Merge pull request #1672 from MrTimscampi/browsers Adjust target browsers (cherry picked from commit feab1aca89813b6bbc49d1612d103ec0328b258a) Signed-off-by: Joshua M. Boniface --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 6cb9fa7da20..6535ec46c27 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "last 2 Chrome versions", "last 2 ChromeAndroid versions", "last 2 Safari versions", - "last 2 iOS versions", + "iOS > 10", "last 2 Edge versions", "Chrome 27", "Chrome 38", @@ -159,6 +159,7 @@ "Chrome 53", "Chrome 56", "Chrome 63", + "Edge 18", "Firefox ESR" ], "scripts": { From e7be594b8f2b3027047a2bf91b5ea5ca6a8ad911 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 31 Jul 2020 04:56:04 +0900 Subject: [PATCH 024/107] Merge pull request #1678 from jellyfin/banner Fix banner height and use primary image as fallback (cherry picked from commit 34d0b67f0ef19c6b07ca172e64c00e6d43b254fe) Signed-off-by: Joshua M. Boniface --- src/assets/css/librarybrowser.css | 2 +- src/controllers/itemDetails/index.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/assets/css/librarybrowser.css b/src/assets/css/librarybrowser.css index 61815a590fd..047ae0a1c68 100644 --- a/src/assets/css/librarybrowser.css +++ b/src/assets/css/librarybrowser.css @@ -646,7 +646,7 @@ .layout-desktop .detailRibbon, .layout-tv .detailRibbon { margin-top: -7.2em; - height: 7.18em; + height: 7.2em; } .layout-desktop .noBackdrop .detailRibbon, diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index a14fa08aa42..e1a53273297 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -523,6 +523,14 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti }); imageLoader.lazyImage(itemBackdropElement, imgUrl); hasbackdrop = true; + } else if (item.ImageTags && item.ImageTags.Primary) { + imgUrl = apiClient.getScaledImageUrl(item.Id, { + type: 'Primary', + maxWidth: dom.getScreenWidth(), + tag: item.ImageTags.Primary + }); + imageLoader.lazyImage(itemBackdropElement, imgUrl); + hasbackdrop = true; } else { itemBackdropElement.style.backgroundImage = ''; } From ab58d3c3a1f186eca601e3b65eb419d40ca59c35 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 2 Aug 2020 16:50:29 +0900 Subject: [PATCH 025/107] Merge pull request #1681 from jellyfin/book-paging Add paging in book player with touch events (cherry picked from commit cefdde1848bf6d293d792cc17a0c5aff8c4dd4c3) Signed-off-by: Joshua M. Boniface --- src/plugins/bookPlayer/plugin.js | 47 ++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/src/plugins/bookPlayer/plugin.js b/src/plugins/bookPlayer/plugin.js index 5e8732e97fe..5b0b3ebe8b4 100644 --- a/src/plugins/bookPlayer/plugin.js +++ b/src/plugins/bookPlayer/plugin.js @@ -2,6 +2,7 @@ import connectionManager from 'connectionManager'; import loading from 'loading'; import keyboardnavigation from 'keyboardnavigation'; import dialogHelper from 'dialogHelper'; +import dom from 'dom'; import events from 'events'; import 'css!./style'; import 'material-icons'; @@ -93,23 +94,22 @@ export class BookPlayer { onWindowKeyUp(e) { let key = keyboardnavigation.getKeyName(e); - let rendition = this._rendition; + + // TODO: depending on the event this can be the document or the rendition itself + let rendition = this._rendition || this; let book = rendition.book; + if (this._loaded === false) return; switch (key) { case 'l': case 'ArrowRight': case 'Right': - if (this._loaded) { - book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next(); - } + book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next(); break; case 'j': case 'ArrowLeft': case 'Left': - if (this._loaded) { - book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev(); - } + book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev(); break; case 'Escape': if (this._tocElement) { @@ -123,6 +123,25 @@ export class BookPlayer { } } + onTouchStart(e) { + // TODO: depending on the event this can be the document or the rendition itself + let rendition = this._rendition || this; + let book = rendition.book; + + // check that the event is from the book or the document + if (!book || this._loaded === false) return; + + // epubjs stores pages off the screen or something for preloading + // get the modulus of the touch event to account for the increased width + if (!e.touches || e.touches.length === 0) return; + let touch = e.touches[0].clientX % dom.getWindowSize().innerWidth; + if (touch < dom.getWindowSize().innerWidth / 2) { + book.package.metadata.direction === 'rtl' ? rendition.next() : rendition.prev(); + } else { + book.package.metadata.direction === 'rtl' ? rendition.prev() : rendition.next(); + } + } + onDialogClosed() { this.stop(); } @@ -139,8 +158,11 @@ export class BookPlayer { this.bindMediaElementEvents(); document.addEventListener('keyup', this.onWindowKeyUp); + document.addEventListener('touchstart', this.onTouchStart); + // FIXME: I don't really get why document keyup event is not triggered when epub is in focus this._rendition.on('keyup', this.onWindowKeyUp); + this._rendition.on('touchstart', this.onTouchStart); } unbindMediaElementEvents() { @@ -155,9 +177,13 @@ export class BookPlayer { if (this._mediaElement) { this.unbindMediaElementEvents(); } + document.removeEventListener('keyup', this.onWindowKeyUp); + document.removeEventListener('touchstart', this.onTouchStart); + if (this._rendition) { this._rendition.off('keyup', this.onWindowKeyUp); + this._rendition.off('touchstart', this.onTouchStart); } } @@ -169,13 +195,11 @@ export class BookPlayer { createMediaElement() { let elem = this._mediaElement; - if (elem) { return elem; } elem = document.getElementById('bookPlayer'); - if (!elem) { elem = dialogHelper.createDialog({ exitAnimationDuration: 400, @@ -185,6 +209,7 @@ export class BookPlayer { exitAnimation: 'fadeout', removeOnClose: true }); + elem.id = 'bookPlayer'; let html = ''; @@ -230,6 +255,7 @@ export class BookPlayer { let cancellationToken = { shouldCancel: false }; + this._cancellationToken = cancellationToken; return rendition.display().then(() => { @@ -253,7 +279,6 @@ export class BookPlayer { epubElem.style.display = 'block'; rendition.on('relocated', (locations) => { this._progress = book.locations.percentageFromCfi(locations.start.cfi); - events.trigger(this, 'timeupdate'); }); @@ -262,7 +287,7 @@ export class BookPlayer { return resolve(); }); }, () => { - console.error('Failed to display epub'); + console.error('failed to display epub'); return reject(); }); }); From 537b3a33512dbfd497cb34e6047d3bed2148128f Mon Sep 17 00:00:00 2001 From: Anthony Lavado Date: Wed, 29 Jul 2020 13:49:37 -0700 Subject: [PATCH 026/107] Merge pull request #1684 from thornbill/fix-ios-fullscreeen Fix fullscreen video in iOS Safari (cherry picked from commit 9b6a90ffdd46adbb5b3be2d478049fc59c2ce892) Signed-off-by: Joshua M. Boniface --- src/components/playback/playbackmanager.js | 20 ++++++++++++++++++++ src/plugins/htmlVideoPlayer/plugin.js | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index e8fcd1cbd56..fc922353da0 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -21,6 +21,11 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla screenfull.on('change', function () { events.trigger(player, 'fullscreenchange'); }); + } else { + // iOS Safari + document.addEventListener('webkitfullscreenchange', function () { + events.trigger(player, 'fullscreenchange'); + }, false); } } @@ -1520,6 +1525,11 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla return player.isFullscreen(); } + if (!screenfull.isEnabled) { + // iOS Safari + return document.webkitIsFullScreen; + } + return screenfull.isFullscreen; }; @@ -1532,6 +1542,16 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla if (screenfull.isEnabled) { screenfull.toggle(); + } else { + // iOS Safari + if (document.webkitIsFullScreen && document.webkitCancelFullscreen) { + document.webkitCancelFullscreen(); + } else { + const elem = document.querySelector('video'); + if (elem && elem.webkitEnterFullscreen) { + elem.webkitEnterFullscreen(); + } + } } }; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index cc312bb9568..0b789dab740 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -804,6 +804,11 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa if (screenfull.isEnabled) { screenfull.exit(); + } else { + // iOS Safari + if (document.webkitIsFullScreen && document.webkitCancelFullscreen) { + document.webkitCancelFullscreen(); + } } }; From 26d29dc2cbc5bcaaff51d444fd55a30abd8141be Mon Sep 17 00:00:00 2001 From: dkanada Date: Sun, 2 Aug 2020 02:55:41 +0900 Subject: [PATCH 027/107] Merge pull request #1686 from Larvitar/master Fix issue with nowplaying page when item.Album or item.Artists are null. (cherry picked from commit b1aa18e7e77d09619032ecc159788836a691c9c2) Signed-off-by: Joshua M. Boniface --- src/components/remotecontrol/remotecontrol.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 949276337fb..3c33fe96847 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -119,9 +119,9 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL var nowPlayingServerId = (item.ServerId || serverId); if (item.Type == 'Audio' || item.MediaStreams[0].Type == 'Audio') { var songName = item.Name; - if (item.Album != null && item.Artists != null) { - var artistsSeries = ''; - var albumName = item.Album; + var artistsSeries = ''; + var albumName = ''; + if (item.Artists != null) { if (item.ArtistItems != null) { for (const artist of item.ArtistItems) { let artistName = artist.Name; @@ -142,9 +142,12 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL } } } - context.querySelector('.nowPlayingArtist').innerHTML = artistsSeries; - context.querySelector('.nowPlayingAlbum').innerHTML = '${albumName}`; } + if (item.Album != null) { + albumName = '` + item.Album + ''; + } + context.querySelector('.nowPlayingAlbum').innerHTML = albumName; + context.querySelector('.nowPlayingArtist').innerHTML = artistsSeries; context.querySelector('.nowPlayingSongName').innerHTML = songName; } else if (item.Type == 'Episode') { if (item.SeasonName != null) { From f11b27fc14bfc90468ed860637457665fd6bbe89 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 31 Jul 2020 14:17:38 +0900 Subject: [PATCH 028/107] Merge pull request #1701 from MrTimscampi/mobile-logo Use emblem when loading on mobile (cherry picked from commit 60d9af0d758d501541b23692bebc1a5cd795f62a) Signed-off-by: Joshua M. Boniface --- src/index.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/index.html b/src/index.html index f8d867cb1a1..a135079a7db 100644 --- a/src/index.html +++ b/src/index.html @@ -129,7 +129,7 @@ animation: fadein 0.5s; width: 30%; height: 30%; - background-image: url(assets/img/banner-light.png); + background-image: url(assets/img/icon-transparent.png); background-position: center center; background-repeat: no-repeat; background-size: contain; @@ -139,6 +139,14 @@ -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } + + @media screen + and (min-device-width: 992px) + and (-webkit-min-device-pixel-ratio: 1) { + .splashLogo { + background-image: url(assets/img/banner-light.png); + } + } From e25721cb343b17c04e1170bb6c303d3a7b42c420 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 3 Aug 2020 02:39:18 +0900 Subject: [PATCH 029/107] Merge pull request #1734 from dmitrylyzo/fix-plugin-configuration Fix injecting of view with embedded script (cherry picked from commit 6607718edb0edde0c05c937d37103031d68f09f1) Signed-off-by: Joshua M. Boniface --- src/components/viewContainer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/viewContainer.js b/src/components/viewContainer.js index dfc9569f34e..d0927ab59b8 100644 --- a/src/components/viewContainer.js +++ b/src/components/viewContainer.js @@ -70,8 +70,8 @@ define(['browser', 'dom', 'layoutManager', 'css!components/viewManager/viewConta if (currentPage) { if (newViewInfo.hasScript && window.$) { - view = $(view).appendTo(mainAnimatedPages)[0]; mainAnimatedPages.removeChild(currentPage); + view = $(view).appendTo(mainAnimatedPages)[0]; } else { mainAnimatedPages.replaceChild(view, currentPage); } From 5c37ee627698cdffebbe7b6fae97a90cbab7a5c3 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Sun, 2 Aug 2020 20:26:00 -0400 Subject: [PATCH 030/107] Bump version to 10.6.2 --- build.yaml | 2 +- debian/changelog | 6 ++++++ fedora/jellyfin-web.spec | 4 +++- src/components/apphost.js | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/build.yaml b/build.yaml index c635df0af55..2854704b33e 100644 --- a/build.yaml +++ b/build.yaml @@ -1,7 +1,7 @@ --- # We just wrap `build` so this is really it name: "jellyfin-web" -version: "10.6.1" +version: "10.6.2" packages: - debian.all - fedora.all diff --git a/debian/changelog b/debian/changelog index 9fdf8051dd3..1653aa8f2eb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +jellyfin-web (10.6.2-1) unstable; urgency=medium + + * New upstream version 10.6.2; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.2 + + -- Jellyfin Packaging Team Sun, 02 Aug 2020 20:25:58 -0400 + jellyfin-web (10.6.1-1) unstable; urgency=medium * New upstream version 10.6.1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.1 diff --git a/fedora/jellyfin-web.spec b/fedora/jellyfin-web.spec index def7872614b..a5334fa2bcc 100644 --- a/fedora/jellyfin-web.spec +++ b/fedora/jellyfin-web.spec @@ -1,7 +1,7 @@ %global debug_package %{nil} Name: jellyfin-web -Version: 10.6.1 +Version: 10.6.2 Release: 1%{?dist} Summary: The Free Software Media System web client License: GPLv3 @@ -39,6 +39,8 @@ mv dist %{buildroot}%{_datadir}/jellyfin-web %{_datadir}/licenses/jellyfin/LICENSE %changelog +* Sun Aug 02 2020 Jellyfin Packaging Team +- New upstream version 10.6.2; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.2 * Mon Jul 27 2020 Jellyfin Packaging Team - New upstream version 10.6.1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.1 * Mon Mar 23 2020 Jellyfin Packaging Team diff --git a/src/components/apphost.js b/src/components/apphost.js index 1f71143e95f..a9d2cdfdb7e 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -355,7 +355,7 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g var deviceId; var deviceName; var appName = 'Jellyfin Web'; - var appVersion = '10.6.1'; + var appVersion = '10.6.2'; var appHost = { getWindowState: function () { From 6e8764c3dc4a0ec005b149198a8a3af4aaf8391d Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Fri, 7 Aug 2020 23:52:59 -0400 Subject: [PATCH 031/107] Add syncplay bypass. --- src/bundle.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/bundle.js b/src/bundle.js index 83b2f162f18..84adfa0154a 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -217,6 +217,18 @@ var apiclient = require('jellyfin-apiclient'); } this._webSocket.onopen = onOpen; }; + + apiclient.ApiClient.prototype.joinSyncPlayGroup = function(options = {}) { + return new Promise((resolve) => { + group_id = options.GroupId; + // Syncplay Join Group + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_syncplay_join", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.send(JSON.stringify(options)); + resolve(); + }) + }; })() // END Patches for MPV Shim From 17b54dde59eb83603eb6490ed85bb31dbb230f74 Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Sun, 16 Aug 2020 07:41:24 -0400 Subject: [PATCH 032/107] Intentionally break non-MPV playback. --- src/components/playback/playbackmanager.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index fc922353da0..524dada432b 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -2025,6 +2025,16 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla } } + // Explicitly break non-MPV playback + require(['alert'], function (alert) { + alert({ + text: "MPV Shim's player backend is not connected. This could be caused by " + + "many things. Try logging out/in again and making sure websockets work.", + title: globalize.translate('HeaderPlaybackError') + }); + }); + return Promise.reject(); + if (options.fullscreen) { loading.show(); } From 4b9ffb7b22a1cc591ccfc59d00b9c6fda8ab8ed6 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Fri, 4 Dec 2020 21:00:31 -0500 Subject: [PATCH 033/107] Bump version to 10.7.0~rc1 --- build.yaml | 2 +- debian/changelog | 12 +++--------- fedora/jellyfin-web.spec | 4 +++- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/build.yaml b/build.yaml index a73be8ec43c..0f9ab83291e 100644 --- a/build.yaml +++ b/build.yaml @@ -1,7 +1,7 @@ --- # We just wrap `build` so this is really it name: "jellyfin-web" -version: "10.7.0" +version: "10.7.0~rc1" packages: - debian.all - fedora.all diff --git a/debian/changelog b/debian/changelog index ab5e13196d1..e4c87cba09c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,11 +1,5 @@ -jellyfin-web (10.7.0-1) unstable; urgency=medium +jellyfin-web (10.7.0~rc1) unstable; urgency=medium - * Forthcoming stable release + * New upstream version 10.7.0-rc1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc1 - -- Jellyfin Packaging Team Mon, 27 Jul 2020 19:13:31 -0400 - -jellyfin-web (10.6.0-1) unstable; urgency=medium - - * New upstream version 10.6.0; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.6.0 - - -- Jellyfin Packaging Team Mon, 16 Mar 2020 11:15:00 -0400 + -- Jellyfin Packaging Team Fri, 04 Dec 2020 20:58:23 -0500 diff --git a/fedora/jellyfin-web.spec b/fedora/jellyfin-web.spec index c35a1caab28..398a3235598 100644 --- a/fedora/jellyfin-web.spec +++ b/fedora/jellyfin-web.spec @@ -1,7 +1,7 @@ %global debug_package %{nil} Name: jellyfin-web -Version: 10.7.0 +Version: 10.7.0~rc1 Release: 1%{?dist} Summary: The Free Software Media System web client License: GPLv3 @@ -42,6 +42,8 @@ mv dist %{buildroot}%{_datadir}/jellyfin-web %{_datadir}/licenses/jellyfin/LICENSE %changelog +* Fri Dec 04 2020 Jellyfin Packaging Team +- New upstream version 10.7.0-rc1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc1 * Mon Jul 27 2020 Jellyfin Packaging Team - Forthcoming stable release * Mon Mar 23 2020 Jellyfin Packaging Team From a0ef8a405ca23c1c586fcc91840b8ed8a29a9d70 Mon Sep 17 00:00:00 2001 From: Anthony Lavado Date: Fri, 4 Dec 2020 23:12:29 -0500 Subject: [PATCH 034/107] Merge pull request #2177 from anthonylavado/update-apiclient Update the API Client version (cherry picked from commit 46716fc25ac6c46e6fec04246c0a8544da5f72c1) Signed-off-by: Joshua M. Boniface --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0ef62015320..d18a9243f0f 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "headroom.js": "^0.12.0", "hls.js": "^0.14.16", "intersection-observer": "^0.11.0", - "jellyfin-apiclient": "^1.4.2", + "jellyfin-apiclient": "^1.5.0", "jellyfin-noto": "https://github.com/jellyfin/jellyfin-noto", "jquery": "^3.5.1", "jstree": "^3.3.10", diff --git a/yarn.lock b/yarn.lock index fae81a5cd7c..41274e8483c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4697,10 +4697,10 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -jellyfin-apiclient@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.4.2.tgz#0a7ab7b371380cfb1bc9789204439b8dfdcdbafd" - integrity sha512-xUvt1G0cDlam6hJgC5Jr6EE5botzdEMGxeer3Vm0+zhM7nb8iFnRmQRmTpVbXtYS8NLiHsiUmK1RLlelgtWDYg== +jellyfin-apiclient@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jellyfin-apiclient/-/jellyfin-apiclient-1.5.0.tgz#44a91c267c3a9a230c32489e7138d565f3b0703e" + integrity sha512-F1LP0w+jrNBI+T17uLdOpESn/hNqZdubnWfQy1VGZnSn4abktAR+J+kIFH/RaSBbTRSAbZ2QxIyyu0Jxm3aB6A== "jellyfin-noto@https://github.com/jellyfin/jellyfin-noto": version "1.0.3" From c4fd94b1475802ca40cfdf2d03f23261312db17a Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sun, 6 Dec 2020 02:11:20 -0500 Subject: [PATCH 035/107] Merge pull request #2181 from MrTimscampi/no-userdata-field Remove non-existing UserData field from requests (cherry picked from commit 7cbaa99784edba892099ede1980b6f7bd2317caf) Signed-off-by: Joshua M. Boniface --- src/controllers/itemDetails/index.js | 2 +- src/controllers/shows/episodes.js | 2 +- src/controllers/shows/tvupcoming.js | 2 +- src/scripts/playlistedit.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index 63eac6abceb..df029d049dc 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -1244,7 +1244,7 @@ function renderSimilarItems(page, item, context) { const options = { userId: apiClient.getCurrentUserId(), limit: 12, - fields: 'PrimaryImageAspectRatio,UserData,CanDelete' + fields: 'PrimaryImageAspectRatio,CanDelete' }; if (item.Type == 'MusicAlbum' && item.AlbumArtists && item.AlbumArtists.length) { diff --git a/src/controllers/shows/episodes.js b/src/controllers/shows/episodes.js index 3dd08e3f760..4852a676ec2 100644 --- a/src/controllers/shows/episodes.js +++ b/src/controllers/shows/episodes.js @@ -23,7 +23,7 @@ import Dashboard from '../../scripts/clientUtils'; SortOrder: 'Ascending', IncludeItemTypes: 'Episode', Recursive: true, - Fields: 'PrimaryImageAspectRatio,MediaSourceCount,UserData', + Fields: 'PrimaryImageAspectRatio,MediaSourceCount', IsMissing: false, ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Thumb', diff --git a/src/controllers/shows/tvupcoming.js b/src/controllers/shows/tvupcoming.js index 897c02b5a8a..052323faeaa 100644 --- a/src/controllers/shows/tvupcoming.js +++ b/src/controllers/shows/tvupcoming.js @@ -13,7 +13,7 @@ import '../../elements/emby-itemscontainer/emby-itemscontainer'; loading.show(); const query = { Limit: 48, - Fields: 'AirTime,UserData', + Fields: 'AirTime', UserId: ApiClient.getCurrentUserId(), ImageTypeLimit: 1, EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', diff --git a/src/scripts/playlistedit.js b/src/scripts/playlistedit.js index 1dc5481c1e0..7b6b05b2915 100644 --- a/src/scripts/playlistedit.js +++ b/src/scripts/playlistedit.js @@ -3,7 +3,7 @@ import listView from '../components/listview/listview'; function getFetchPlaylistItemsFn(itemId) { return function () { const query = { - Fields: 'PrimaryImageAspectRatio,UserData', + Fields: 'PrimaryImageAspectRatio', EnableImageTypes: 'Primary,Backdrop,Banner,Thumb', UserId: ApiClient.getCurrentUserId() }; From 972ecc41064b7af07244ccc099fac73aca50bf00 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 7 Dec 2020 15:44:59 +0900 Subject: [PATCH 036/107] Merge pull request #2183 from dmitrylyzo/fix-multiserver-syncplay SyncPlay, don't use bad ApiClient (cherry picked from commit 9815c64cdcdc00c2edcdc02e378cfc6c68888ddd) Signed-off-by: Joshua M. Boniface --- src/scripts/site.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/scripts/site.js b/src/scripts/site.js index 04f19c9d0bd..543486fae47 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -169,8 +169,11 @@ function initSyncPlay() { // Start SyncPlay. const apiClient = ServerConnections.currentApiClient(); - SyncPlay.Manager.init(apiClient); + if (apiClient) SyncPlay.Manager.init(apiClient); SyncPlayToasts.init(); + + // FIXME: Multiple apiClients? + Events.on(ServerConnections, 'apiclientcreated', (e, newApiClient) => SyncPlay.Manager.init(newApiClient)); } function onAppReady() { From 5f63743ed0d3adf98c289bf4f0b8c92994d35ddd Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Dec 2020 14:27:50 -0500 Subject: [PATCH 037/107] Merge pull request #2186 from Maxr1998/fix-plugin-loader Fix plugin loader for function definitions in window (cherry picked from commit 399226518969f6158afe725370050f34c3d923c2) Signed-off-by: Joshua M. Boniface --- src/components/pluginManager.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/components/pluginManager.js b/src/components/pluginManager.js index 6c48b7ef7fa..985b76725f2 100644 --- a/src/components/pluginManager.js +++ b/src/components/pluginManager.js @@ -74,14 +74,19 @@ import { playbackManager } from './playback/playbackmanager'; if (typeof pluginSpec === 'string') { if (pluginSpec in window) { console.log(`Loading plugin (via window): ${pluginSpec}`); - let pluginInstance = await window[pluginSpec]; - if (typeof pluginInstance === 'function') { - pluginInstance = await new pluginInstance(); + const pluginDefinition = await window[pluginSpec]; + if (typeof pluginDefinition !== 'function') { + throw new TypeError('Plugin definitions in window have to be an (async) function returning the plugin class'); + } + + const pluginClass = await pluginDefinition(); + if (typeof pluginClass !== 'function') { + throw new TypeError(`Plugin definition doesn't return a class for '${pluginSpec}'`); } // init plugin and pass basic dependencies - plugin = new pluginInstance({ + plugin = new pluginClass({ events: Events, loading, appSettings, @@ -98,9 +103,7 @@ import { playbackManager } from './playback/playbackmanager'; const pluginResult = await pluginSpec; plugin = new pluginResult.default; } else { - const err = new TypeError('Plugins have to be a Promise that resolves to a plugin builder function'); - console.error(err); - throw err; + throw new TypeError('Plugins have to be a Promise that resolves to a plugin builder function'); } return this.#preparePlugin(pluginSpec, plugin); From ccef18ee5d9eb35e9edc641425eb08fdc9fff77f Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 7 Dec 2020 15:44:16 +0900 Subject: [PATCH 038/107] Merge pull request #2188 from dmitrylyzo/fix-back Fix anchor click action and plugin configuration page URL (cherry picked from commit 62a09b7a4ed4a2d0c255e00cd31176e57e22b703) Signed-off-by: Joshua M. Boniface --- src/elements/emby-button/emby-button.js | 1 + src/scripts/clientUtils.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/elements/emby-button/emby-button.js b/src/elements/emby-button/emby-button.js index e51fb4f130f..a3568be0185 100644 --- a/src/elements/emby-button/emby-button.js +++ b/src/elements/emby-button/emby-button.js @@ -18,6 +18,7 @@ function onAnchorClick(e) { shell.openUrl(href); } } else { + e.preventDefault(); appRouter.show(href); } } else { diff --git a/src/scripts/clientUtils.js b/src/scripts/clientUtils.js index a72584729ad..291202b2e0e 100644 --- a/src/scripts/clientUtils.js +++ b/src/scripts/clientUtils.js @@ -95,7 +95,7 @@ export function logout() { } export function getPluginUrl(name) { - return '#!/configurationpage?name=' + encodeURIComponent(name); + return 'configurationpage?name=' + encodeURIComponent(name); } export function navigate(url, preserveQueryString) { From 7e5fcd8374edf37a0e55907ca25e5c0a945ad328 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 9 Dec 2020 10:33:17 -0500 Subject: [PATCH 039/107] Merge pull request #2195 from OancaAndrei/syncplay-fix-next-item Fix SyncPlay switching to next item in queue (cherry picked from commit 60e8fc4d8ebe4f6b0badd6b9f7c2bf29ec821185) Signed-off-by: Joshua M. Boniface --- src/components/syncPlay/core/PlaybackCore.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/syncPlay/core/PlaybackCore.js b/src/components/syncPlay/core/PlaybackCore.js index 203af7ebcd5..12e0c67abba 100644 --- a/src/components/syncPlay/core/PlaybackCore.js +++ b/src/components/syncPlay/core/PlaybackCore.js @@ -70,7 +70,6 @@ class PlaybackCore { onPlaybackStop(stopInfo) { this.lastCommand = null; Events.trigger(this.manager, 'playbackstop', [stopInfo]); - this.manager.releaseCurrentPlayer(); } /** From ac6ba3228f0093ad73b7144e3c638801e0452157 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 7 Dec 2020 15:43:38 +0900 Subject: [PATCH 040/107] Merge pull request #2202 from thornbill/fix-user-edit Remove reference to sharing help element (cherry picked from commit a8005f2ec332a79a02e09677968d4c991fbc3279) Signed-off-by: Joshua M. Boniface --- src/controllers/dashboard/users/useredit.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/dashboard/users/useredit.js b/src/controllers/dashboard/users/useredit.js index 17e401d5dcd..64668270212 100644 --- a/src/controllers/dashboard/users/useredit.js +++ b/src/controllers/dashboard/users/useredit.js @@ -174,7 +174,6 @@ import toast from '../../../components/toast/toast'; $(document).on('pageinit', '#editUserPage', function () { $('.editUserProfileForm').off('submit', onSubmit).on('submit', onSubmit); - this.querySelector('.sharingHelp').innerHTML = globalize.translate('OptionAllowLinkSharingHelp', 30); const page = this; $('#chkEnableDeleteAllFolders', this).on('change', function () { if (this.checked) { From 22df1eb3a6dcc54dfd949ff63d06152c9bb2ce45 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 12 Dec 2020 00:11:52 +0900 Subject: [PATCH 041/107] Merge pull request #2210 from nyanmisaka/offset-step Set the step of subtitle offset slider to 0.1 (cherry picked from commit c7a1c19d9e828c3908102bc6983da0b3bf2aac4c) Signed-off-by: Joshua M. Boniface --- src/components/subtitlesync/subtitlesync.js | 6 +++--- src/components/subtitlesync/subtitlesync.template.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/subtitlesync/subtitlesync.js b/src/components/subtitlesync/subtitlesync.js index d3477932c38..f04ce58e7ad 100644 --- a/src/components/subtitlesync/subtitlesync.js +++ b/src/components/subtitlesync/subtitlesync.js @@ -45,11 +45,11 @@ function init(instance) { let inputOffset = /[-+]?\d+\.?\d*/g.exec(this.textContent); if (inputOffset) { inputOffset = inputOffset[0]; + inputOffset = parseFloat(inputOffset); + inputOffset = Math.min(30, Math.max(-30, inputOffset)); // replace current text by considered offset this.textContent = inputOffset + 's'; - - inputOffset = parseFloat(inputOffset); // set new offset playbackManager.setSubtitleOffset(inputOffset, player); // synchronize with slider value @@ -121,7 +121,7 @@ function getPercentageFromOffset(value) { // convert fraction to percent percentValue *= 50; percentValue += 50; - return Math.min(100, Math.max(0, percentValue.toFixed())); + return Math.min(100, Math.max(0, percentValue.toFixed(1))); } class SubtitleSync { diff --git a/src/components/subtitlesync/subtitlesync.template.html b/src/components/subtitlesync/subtitlesync.template.html index fe202ebf606..8de75416351 100644 --- a/src/components/subtitlesync/subtitlesync.template.html +++ b/src/components/subtitlesync/subtitlesync.template.html @@ -3,7 +3,7 @@
0s
- +
From d768cf7970da16edcb91a2405a7bf18bde5946f5 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 12 Dec 2020 00:10:05 +0900 Subject: [PATCH 042/107] Merge pull request #2211 from thornbill/fix-dlna-profile-link Fix invalid dlna profile path (cherry picked from commit 39951436903ecfbb2b5f79f42cc495ced0a3f46d) Signed-off-by: Joshua M. Boniface --- src/controllers/dashboard/dlna/profiles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/dashboard/dlna/profiles.js b/src/controllers/dashboard/dlna/profiles.js index 3eedc347289..a0186c79ab8 100644 --- a/src/controllers/dashboard/dlna/profiles.js +++ b/src/controllers/dashboard/dlna/profiles.js @@ -41,7 +41,7 @@ import confirm from '../../../components/confirm/confirm'; html += '
'; html += ''; html += ''; From 88bb7adaba2e4ddcce040dea732dbf3790f29010 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 10 Dec 2020 07:42:59 -0500 Subject: [PATCH 043/107] Merge pull request #2213 from thornbill/fix-sonar-bugs Fix sonarqube bugs (cherry picked from commit 52543f8a515452c9bb4310a9d7275329b8cf887d) Signed-off-by: Joshua M. Boniface --- src/components/htmlMediaHelper.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index 4f803aa4b61..da53d6a063e 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -158,15 +158,11 @@ import { Events } from 'jellyfin-apiclient'; // (but rewinding cannot happen as the first event with media of non-empty duration) console.debug(`seeking to ${seconds} on ${e.type} event`); setCurrentTimeIfNeeded(element, seconds); - events.map(function(name) { - element.removeEventListener(name, onMediaChange); - }); + events.forEach(name => element.removeEventListener(name, onMediaChange)); if (onMediaReady) onMediaReady(); } }; - events.map(function (name) { - return element.addEventListener(name, onMediaChange); - }); + events.forEach(name => element.addEventListener(name, onMediaChange)); } } } From 4aeecfa043586225f69009a05e7863d1ce2d49a7 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 12 Dec 2020 00:09:39 +0900 Subject: [PATCH 044/107] Merge pull request #2214 from dmitrylyzo/fix-livetv-route Fix LiveTV group anchors (cherry picked from commit 5da9d934235d7724bec199d6780db999cbf507fa) Signed-off-by: Joshua M. Boniface --- src/controllers/livetv/livetvsuggested.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/livetv/livetvsuggested.js b/src/controllers/livetv/livetvsuggested.js index bc011001cad..e9a19a78c2f 100644 --- a/src/controllers/livetv/livetvsuggested.js +++ b/src/controllers/livetv/livetvsuggested.js @@ -338,7 +338,7 @@ export default function (view, params) { let initialTabIndex = currentTabIndex; let lastFullRender = 0; [].forEach.call(view.querySelectorAll('.sectionTitleTextButton-programs'), function (link) { - const href = link.href; + const href = link.getAttribute('href'); if (href) { link.href = href + '&serverId=' + ApiClient.serverId(); From 27896bcc844efe56ebbdb0f0f02b38322dd3e63e Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 12 Dec 2020 00:15:55 +0900 Subject: [PATCH 045/107] Merge pull request #2215 from dmitrylyzo/fix-livetv-pages Fix multiplication of event listeners on Live TV pages (cherry picked from commit 568968f654eeb5bd506ab4614bb474ae811e54af) Signed-off-by: Joshua M. Boniface --- src/controllers/livetvsettings.js | 116 +++++++++++++++--------------- src/controllers/livetvstatus.js | 62 ++++++++-------- 2 files changed, 87 insertions(+), 91 deletions(-) diff --git a/src/controllers/livetvsettings.js b/src/controllers/livetvsettings.js index 2a325038617..4bc7d11283e 100644 --- a/src/controllers/livetvsettings.js +++ b/src/controllers/livetvsettings.js @@ -56,75 +56,73 @@ function showSaveMessage(recordingPathChanged) { } } -export default function () { - $(document).on('pageinit', '#liveTvSettingsPage', function () { - const page = this; - $('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit); - $('#btnSelectRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { - const picker = new directoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - $('#txtRecordingPath', page).val(path); - } +$(document).on('pageinit', '#liveTvSettingsPage', function () { + const page = this; + $('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit); + $('#btnSelectRecordingPath', page).on('click.selectDirectory', function () { + import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { + const picker = new directoryBrowser(); + picker.show({ + callback: function (path) { + if (path) { + $('#txtRecordingPath', page).val(path); + } - picker.close(); - }, - validateWriteable: true - }); + picker.close(); + }, + validateWriteable: true }); }); - $('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { - const picker = new directoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - $('#txtMovieRecordingPath', page).val(path); - } + }); + $('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () { + import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { + const picker = new directoryBrowser(); + picker.show({ + callback: function (path) { + if (path) { + $('#txtMovieRecordingPath', page).val(path); + } - picker.close(); - }, - validateWriteable: true - }); + picker.close(); + }, + validateWriteable: true }); }); - $('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { - const picker = new directoryBrowser(); - picker.show({ - callback: function (path) { - if (path) { - $('#txtSeriesRecordingPath', page).val(path); - } + }); + $('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () { + import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { + const picker = new directoryBrowser(); + picker.show({ + callback: function (path) { + if (path) { + $('#txtSeriesRecordingPath', page).val(path); + } - picker.close(); - }, - validateWriteable: true - }); + picker.close(); + }, + validateWriteable: true }); }); - $('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () { - import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { - const picker = new directoryBrowser(); - picker.show({ - includeFiles: true, - callback: function (path) { - if (path) { - $('#txtPostProcessor', page).val(path); - } - - picker.close(); + }); + $('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () { + import('../components/directorybrowser/directorybrowser').then(({default: directoryBrowser}) => { + const picker = new directoryBrowser(); + picker.show({ + includeFiles: true, + callback: function (path) { + if (path) { + $('#txtPostProcessor', page).val(path); } - }); + + picker.close(); + } }); }); - }).on('pageshow', '#liveTvSettingsPage', function () { - loading.show(); - const page = this; - ApiClient.getNamedConfiguration('livetv').then(function (config) { - loadPage(page, config); - }); }); -} +}).on('pageshow', '#liveTvSettingsPage', function () { + loading.show(); + const page = this; + ApiClient.getNamedConfiguration('livetv').then(function (config) { + loadPage(page, config); + }); +}); diff --git a/src/controllers/livetvstatus.js b/src/controllers/livetvstatus.js index 9143d8b87c8..26df1e4b311 100644 --- a/src/controllers/livetvstatus.js +++ b/src/controllers/livetvstatus.js @@ -293,36 +293,34 @@ function onDevicesListClick(e) { } } -export default function () { - $(document).on('pageinit', '#liveTvStatusPage', function () { - const page = this; - $('.btnAddDevice', page).on('click', function () { - addDevice(this); - }); - $('.formAddDevice', page).on('submit', function () { - submitAddDeviceForm(page); - return false; - }); - $('.btnAddProvider', page).on('click', function () { - addProvider(this); - }); - page.querySelector('.devicesList').addEventListener('click', onDevicesListClick); - }).on('pageshow', '#liveTvStatusPage', function () { - const page = this; - reload(page); - taskButton({ - mode: 'on', - progressElem: page.querySelector('.refreshGuideProgress'), - taskKey: 'RefreshGuide', - button: page.querySelector('.btnRefresh') - }); - }).on('pagehide', '#liveTvStatusPage', function () { - const page = this; - taskButton({ - mode: 'off', - progressElem: page.querySelector('.refreshGuideProgress'), - taskKey: 'RefreshGuide', - button: page.querySelector('.btnRefresh') - }); +$(document).on('pageinit', '#liveTvStatusPage', function () { + const page = this; + $('.btnAddDevice', page).on('click', function () { + addDevice(this); }); -} + $('.formAddDevice', page).on('submit', function () { + submitAddDeviceForm(page); + return false; + }); + $('.btnAddProvider', page).on('click', function () { + addProvider(this); + }); + page.querySelector('.devicesList').addEventListener('click', onDevicesListClick); +}).on('pageshow', '#liveTvStatusPage', function () { + const page = this; + reload(page); + taskButton({ + mode: 'on', + progressElem: page.querySelector('.refreshGuideProgress'), + taskKey: 'RefreshGuide', + button: page.querySelector('.btnRefresh') + }); +}).on('pagehide', '#liveTvStatusPage', function () { + const page = this; + taskButton({ + mode: 'off', + progressElem: page.querySelector('.refreshGuideProgress'), + taskKey: 'RefreshGuide', + button: page.querySelector('.btnRefresh') + }); +}); From 95a995327d31c917ba52afb6787559aac960450b Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 10 Dec 2020 22:14:18 -0500 Subject: [PATCH 046/107] Merge pull request #2216 from dmitrylyzo/fix-livetv-canplay Fix canPlay for Live TV (cherry picked from commit fdcf74d498279c5126e18af84f0087487bedcdcc) Signed-off-by: Joshua M. Boniface --- src/components/cardbuilder/cardBuilder.js | 4 +++- src/components/shortcuts.js | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index 7f43db47ffe..b34c3969a48 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1421,6 +1421,8 @@ import ServerConnections from '../ServerConnections'; const pathData = item.Path ? (' data-path="' + item.Path + '"') : ''; const contextData = options.context ? (' data-context="' + options.context + '"') : ''; const parentIdData = options.parentId ? (' data-parentid="' + options.parentId + '"') : ''; + const startDate = item.StartDate ? (' data-startdate="' + item.StartDate.toString() + '"') : ''; + const endDate = item.EndDate ? (' data-enddate="' + item.EndDate.toString() + '"') : ''; let additionalCardContent = ''; @@ -1428,7 +1430,7 @@ import ServerConnections from '../ServerConnections'; additionalCardContent += getHoverMenuHtml(item, action); } - return '<' + tagName + ' data-index="' + index + '"' + timerAttributes + actionAttribute + ' data-isfolder="' + (item.IsFolder || false) + '" data-serverid="' + (item.ServerId || options.serverId) + '" data-id="' + (item.Id || item.ItemId) + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + pathData + positionTicksData + collectionIdData + playlistIdData + contextData + parentIdData + ' data-prefix="' + prefix + '" class="' + className + '">' + cardImageContainerOpen + innerCardFooter + cardImageContainerClose + overlayButtons + additionalCardContent + cardScalableClose + outerCardFooter + cardBoxClose + ''; + return '<' + tagName + ' data-index="' + index + '"' + timerAttributes + actionAttribute + ' data-isfolder="' + (item.IsFolder || false) + '" data-serverid="' + (item.ServerId || options.serverId) + '" data-id="' + (item.Id || item.ItemId) + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + pathData + positionTicksData + collectionIdData + playlistIdData + contextData + parentIdData + startDate + endDate + ' data-prefix="' + prefix + '" class="' + className + '">' + cardImageContainerOpen + innerCardFooter + cardImageContainerClose + overlayButtons + additionalCardContent + cardScalableClose + outerCardFooter + cardBoxClose + ''; } /** diff --git a/src/components/shortcuts.js b/src/components/shortcuts.js index 90515fc16f9..b3d82c4988a 100644 --- a/src/components/shortcuts.js +++ b/src/components/shortcuts.js @@ -147,6 +147,8 @@ import toast from './toast/toast'; MediaType: card.getAttribute('data-mediatype'), Path: card.getAttribute('data-path'), IsFolder: card.getAttribute('data-isfolder') === 'true', + StartDate: card.getAttribute('data-startdate'), + EndDate: card.getAttribute('data-enddate'), UserData: { PlaybackPositionTicks: parseInt(card.getAttribute('data-positionticks') || '0') } From eeded17cbdad5adad2bec5ecf5622ed77a148463 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 12 Dec 2020 00:05:28 +0900 Subject: [PATCH 047/107] Merge pull request #2217 from nyanmisaka/landingScreen-cleanup Landing screen options clean up (cherry picked from commit f94cbfed7c65423357ead50eb09c4c6c55482f27) Signed-off-by: Joshua M. Boniface --- .../homeScreenSettings/homeScreenSettings.js | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index 5898844434c..b07203442f9 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -57,8 +57,8 @@ import template from './homeScreenSettings.template.html'; value: 'suggestions' }); list.push({ - name: globalize.translate('Genres'), - value: 'genres' + name: globalize.translate('Trailers'), + value: 'trailers' }); list.push({ name: globalize.translate('Favorites'), @@ -68,6 +68,10 @@ import template from './homeScreenSettings.template.html'; name: globalize.translate('Collections'), value: 'collections' }); + list.push({ + name: globalize.translate('Genres'), + value: 'genres' + }); } else if (type === 'tvshows') { list.push({ name: globalize.translate('Shows'), @@ -79,7 +83,7 @@ import template from './homeScreenSettings.template.html'; value: 'suggestions' }); list.push({ - name: globalize.translate('Upcoming'), + name: globalize.translate('TabUpcoming'), value: 'upcoming' }); list.push({ @@ -87,7 +91,7 @@ import template from './homeScreenSettings.template.html'; value: 'genres' }); list.push({ - name: globalize.translate('Networks'), + name: globalize.translate('TabNetworks'), value: 'networks' }); list.push({ @@ -116,20 +120,40 @@ import template from './homeScreenSettings.template.html'; name: globalize.translate('Playlists'), value: 'playlists' }); + list.push({ + name: globalize.translate('Songs'), + value: 'songs' + }); list.push({ name: globalize.translate('Genres'), value: 'genres' }); } else if (type === 'livetv') { list.push({ - name: globalize.translate('Suggestions'), - value: 'suggestions', + name: globalize.translate('Programs'), + value: 'programs', isDefault: true }); list.push({ name: globalize.translate('Guide'), value: 'guide' }); + list.push({ + name: globalize.translate('Channels'), + value: 'channels' + }); + list.push({ + name: globalize.translate('Recordings'), + value: 'recordings' + }); + list.push({ + name: globalize.translate('Schedule'), + value: 'schedule' + }); + list.push({ + name: globalize.translate('Series'), + value: 'series' + }); } return list; From 87d459f82765848400badbc7b883aade2ec5b102 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Thu, 10 Dec 2020 22:17:05 -0500 Subject: [PATCH 048/107] Merge pull request #2219 from crobibero/create-playlist Set Content-Type header when creating a playlist (cherry picked from commit 1c03e4c83073332ba160564a207aca3361b58c3f) Signed-off-by: Joshua M. Boniface --- src/components/playlisteditor/playlisteditor.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/playlisteditor/playlisteditor.js b/src/components/playlisteditor/playlisteditor.js index e6c0349719c..675e8e09c99 100644 --- a/src/components/playlisteditor/playlisteditor.js +++ b/src/components/playlisteditor/playlisteditor.js @@ -49,7 +49,8 @@ import ServerConnections from '../ServerConnections'; apiClient.ajax({ type: 'POST', url: url, - dataType: 'json' + dataType: 'json', + contentType: 'application/json' }).then(result => { loading.hide(); From 4dedb8ae4586587e4eb8659e41e84733d37da8d3 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 11 Dec 2020 12:37:29 +0900 Subject: [PATCH 049/107] Merge pull request #2220 from jellyfin/dependabot/npm_and_yarn/ini-1.3.7 Bump ini from 1.3.5 to 1.3.7 (cherry picked from commit c1a675053cc54f85247efb0b2a169f219b182049) Signed-off-by: Joshua M. Boniface --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 41274e8483c..45d1faa1305 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4281,9 +4281,9 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== internal-ip@^4.3.0: version "4.3.0" From 07a33779d85c89323bffd768a19bbb8e5ef1ab7c Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Tue, 22 Dec 2020 22:24:43 -0500 Subject: [PATCH 050/107] Merge pull request #2218 from thornbill/style-fixes (cherry picked from commit 68fb95bf7d0c071122426e6cc3bb39bc9776bde7) Signed-off-by: Joshua M. Boniface --- src/assets/css/dashboard.css | 41 ++++++++++++------------ src/controllers/dashboard/dashboard.html | 4 +-- src/elements/emby-button/emby-button.css | 2 +- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/assets/css/dashboard.css b/src/assets/css/dashboard.css index 48e6fe807e1..35d50d1251c 100644 --- a/src/assets/css/dashboard.css +++ b/src/assets/css/dashboard.css @@ -127,8 +127,8 @@ div[data-role=controlgroup] a.ui-btn-active { } .sessionAppInfo img { - max-width: 40px; - max-height: 40px; + max-width: 2.5em; + max-height: 2.5em; margin-right: 8px; } @@ -204,6 +204,10 @@ div[data-role=controlgroup] a.ui-btn-active { flex-grow: 1; } +.dashboardActionsContainer { + margin: 1em -0.3em 0; +} + .sessionNowPlayingContent { -webkit-background-size: cover; background-size: cover; @@ -246,20 +250,12 @@ div[data-role=controlgroup] a.ui-btn-active { @media all and (min-width: 70em) { .dashboardSections { - -webkit-flex-wrap: wrap; flex-wrap: wrap; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -webkit-flex-direction: row; flex-direction: row; } .dashboardColumn-2-60 { - width: 46%; - } - - .dashboardColumn-2-40 { - width: 27%; + flex-grow: 2; } .dashboardSection { @@ -291,6 +287,7 @@ div[data-role=controlgroup] a.ui-btn-active { } .activeSession { + min-width: 20rem; width: 100% !important; } @@ -304,15 +301,12 @@ div[data-role=controlgroup] a.ui-btn-active { background-position: center; } -@media all and (min-width: 40em) { - .activeSession { - width: 100% !important; - } -} - @media all and (min-width: 50em) { .activeSession { - width: 50% !important; + max-width: 25rem; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 50%; } } @@ -325,6 +319,7 @@ div[data-role=controlgroup] a.ui-btn-active { } .sessionAppInfo { + flex-grow: 1; padding: 0.5em; overflow: hidden; } @@ -344,6 +339,8 @@ div[data-role=controlgroup] a.ui-btn-active { right: 0; bottom: 0; font-weight: 400; + display: flex; + flex-direction: column; } .sessionNowPlayingContent-withbackground + .sessionNowPlayingInnerContent { @@ -358,9 +355,6 @@ div[data-role=controlgroup] a.ui-btn-active { .sessionNowPlayingDetails { display: flex; - position: absolute; - bottom: 0; - width: 100%; } .sessionNowPlayingInfo { @@ -387,6 +381,11 @@ div[data-role=controlgroup] a.ui-btn-active { background: transparent !important; } +.activeDevices.itemsContainer { + /* offset for cardBox margin */ + margin: -0.6em; +} + .activeSession .playbackProgress, .activeSession .transcodingProgress { position: absolute; diff --git a/src/controllers/dashboard/dashboard.html b/src/controllers/dashboard/dashboard.html index 9b177e3f345..0fa80bc087a 100644 --- a/src/controllers/dashboard/dashboard.html +++ b/src/controllers/dashboard/dashboard.html @@ -15,11 +15,11 @@

${TabServer}

-
+
- - '; html += ''; - - btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? '' : ' hide'; html += ''; btnCssClass = session.ServerId && session.SupportedCommands.indexOf('DisplayMessage') !== -1 && session.DeviceId !== ServerConnections.deviceId() ? '' : ' hide'; html += ''; html += '
'; - html += '
'; - html += DashboardPage.getSessionNowPlayingStreamInfo(session); - html += '
'; - html += '
'; const userImage = DashboardPage.getUserImage(session); html += userImage ? '
" : '
'; @@ -415,10 +404,8 @@ import confirm from '../../components/confirm/confirm'; } else if (displayPlayMethod === 'DirectStream') { html += globalize.translate('DirectStreaming'); } else if (displayPlayMethod === 'Transcode') { - html += globalize.translate('Transcoding'); - if (session.TranscodingInfo && session.TranscodingInfo.Framerate) { - html += ' (' + session.TranscodingInfo.Framerate + ' fps)'; + html += `${globalize.translate('Framerate')}: ${session.TranscodingInfo.Framerate}fps`; } showTranscodingInfo = true; @@ -562,8 +549,10 @@ import confirm from '../../components/confirm/confirm'; if (nowPlayingItem) { row.classList.add('playingSession'); + row.querySelector('.btnSessionInfo').classList.remove('hide'); } else { row.classList.remove('playingSession'); + row.querySelector('.btnSessionInfo').classList.add('hide'); } if (session.ServerId && session.SupportedCommands.indexOf('DisplayMessage') !== -1) { @@ -572,12 +561,6 @@ import confirm from '../../components/confirm/confirm'; row.querySelector('.btnSessionSendMessage').classList.add('hide'); } - if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo) { - row.querySelector('.btnSessionInfo').classList.remove('hide'); - } else { - row.querySelector('.btnSessionInfo').classList.add('hide'); - } - const btnSessionPlayPause = row.querySelector('.btnSessionPlayPause'); if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl) { @@ -592,7 +575,6 @@ import confirm from '../../components/confirm/confirm'; btnSessionPlayPauseIcon.classList.remove('play_arrow', 'pause'); btnSessionPlayPauseIcon.classList.add(session.PlayState && session.PlayState.IsPaused ? 'play_arrow' : 'pause'); - row.querySelector('.sessionNowPlayingStreamInfo').innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session); row.querySelector('.sessionNowPlayingTime').innerHTML = DashboardPage.getSessionNowPlayingTime(session); row.querySelector('.sessionUserName').innerHTML = DashboardPage.getUsersHtml(session); row.querySelector('.sessionAppSecondaryText').innerHTML = DashboardPage.getAppSecondaryText(session); @@ -605,30 +587,17 @@ import confirm from '../../components/confirm/confirm'; } const playbackProgressElem = row.querySelector('.playbackProgress'); - - if (nowPlayingItem && nowPlayingItem.RunTimeTicks) { - const percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks; - playbackProgressElem.outerHTML = indicators.getProgressHtml(percent, { - containerClass: 'playbackProgress' - }); - } else { - playbackProgressElem.outerHTML = indicators.getProgressHtml(0, { - containerClass: 'playbackProgress hide' - }); - } - const transcodingProgress = row.querySelector('.transcodingProgress'); - if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) { - const percent = session.TranscodingInfo.CompletionPercentage.toFixed(1); - transcodingProgress.outerHTML = indicators.getProgressHtml(percent, { - containerClass: 'transcodingProgress' - }); - } else { - transcodingProgress.outerHTML = indicators.getProgressHtml(0, { - containerClass: 'transcodingProgress hide' - }); - } + let percent = 100 * session?.PlayState?.PositionTicks / nowPlayingItem?.RunTimeTicks; + playbackProgressElem.outerHTML = indicators.getProgressHtml(percent || 0, { + containerClass: 'playbackProgress' + }); + + percent = session?.TranscodingInfo?.CompletionPercentage?.toFixed(1); + transcodingProgress.outerHTML = indicators.getProgressHtml(percent || 0, { + containerClass: 'transcodingProgress' + }); const imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || ''; const imgElem = row.querySelector('.sessionNowPlayingContent'); diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 2761066717c..4982637825b 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -176,6 +176,7 @@ "Director": "Director", "Directors": "Directors", "DirectPlaying": "Direct playing", + "DirectPlayHelp": "The source file is entirely compatible with this client, and the session is receiving the file without modifications.", "DirectStreamHelp1": "The video stream is compatible with the device, but has an incompatible audio format (DTS, TRUEHD, etc) or number of audio channels. The video stream will be repackaged losslessly on the fly before being sent to the device. Only the audio stream will be transcoded.", "DirectStreamHelp2": "Power consumed by direct streaming usually depends on the audio profile. Only the video stream is lossless.", "DirectStreaming": "Direct streaming", @@ -264,6 +265,7 @@ "Filters": "Filters", "Folders": "Folders", "FormatValue": "Format: {0}", + "Framerate": "Framerate", "Friday": "Friday", "Fullscreen": "Full screen", "General": "General", From 7724b5fedc44abd9f3ac9b7a464403ad32b67ae3 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sat, 27 Feb 2021 00:01:52 -0500 Subject: [PATCH 097/107] Merge pull request #2443 from dmitrylyzo/fix-tizen-subtitles Fix attachment delivery urls (cherry picked from commit 0a342ce095b70763d461f6ab3864f2311d9bb034) Signed-off-by: Joshua M. Boniface --- src/plugins/htmlVideoPlayer/plugin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index af555e35bec..af6f3d25e10 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1049,11 +1049,11 @@ function tryRemoveElement(elem) { renderSsaAss(videoElement, track, item) { const avaliableFonts = []; const attachments = this._currentPlayOptions.mediaSource.MediaAttachments || []; + const apiClient = ServerConnections.getApiClient(item); attachments.map(function (i) { // embedded font url - return avaliableFonts.push(i.DeliveryUrl); + return avaliableFonts.push(apiClient.getUrl(i.DeliveryUrl)); }); - const apiClient = ServerConnections.getApiClient(item); const fallbackFontList = apiClient.getUrl('/FallbackFont/Fonts', { api_key: apiClient.accessToken() }); From 3ad0bb9118234059b5e6bad7851e90a91320dfdc Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Sun, 28 Feb 2021 01:29:35 -0500 Subject: [PATCH 098/107] Merge pull request #2461 from thornbill/remove-ios-limit Remove iOS bandwidth limit (cherry picked from commit 8f2437ab9731c9e520ae27e110516a2862522c33) Signed-off-by: Joshua M. Boniface --- src/components/appRouter.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/components/appRouter.js b/src/components/appRouter.js index b03773c4303..c14434180d8 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -471,18 +471,9 @@ class AppRouter { return null; } - getMaxBandwidthIOS() { - return 800000; - } - onApiClientCreated(e, newApiClient) { newApiClient.normalizeImageOptions = this.normalizeImageOptions; - - if (browser.iOS) { - newApiClient.getMaxBandwidth = this.getMaxBandwidthIOS; - } else { - newApiClient.getMaxBandwidth = this.getMaxBandwidth; - } + newApiClient.getMaxBandwidth = this.getMaxBandwidth; Events.off(newApiClient, 'requestfail', this.onRequestFail); Events.on(newApiClient, 'requestfail', this.onRequestFail); From 8bb34c4266f75d878fb322b182f9c31605138341 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Sun, 28 Feb 2021 22:29:59 -0500 Subject: [PATCH 099/107] Fix bad spacer in changelog line --- debian/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 0b8ad265e1d..8fd0748684c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,6 @@ jellyfin-web (10.7.0~rc4) unstable; urgency=medium - * New upstream version 10.7.0~rc4; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0~rc4 + * New upstream version 10.7.0-rc4; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc4 -- Jellyfin Packaging Team Sun, 21 Feb 2021 13:39:05 -0500 From 48201581d6b1a034a15409f0d9cf648d2ad2d1cf Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Mar 2021 16:17:28 +0900 Subject: [PATCH 100/107] Merge pull request #2442 from jellyfin/plugin-tweaks minor improvements to plugin pages (cherry picked from commit d149430f65927ff270bce1efaa0ba91aeb0cf424) Signed-off-by: Joshua M. Boniface --- .../dashboard/plugins/add/index.js | 4 ++ .../dashboard/plugins/installed/index.js | 14 +++--- src/strings/en-gb.json | 47 ++++++++++++++++++- src/strings/en-us.json | 4 +- 4 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/controllers/dashboard/plugins/add/index.js b/src/controllers/dashboard/plugins/add/index.js index 89bd499f496..007a2d84107 100644 --- a/src/controllers/dashboard/plugins/add/index.js +++ b/src/controllers/dashboard/plugins/add/index.js @@ -22,6 +22,10 @@ function populateHistory(packageInfo, page) { function populateVersions(packageInfo, page, installedPlugin) { let html = ''; + packageInfo.versions.sort((a, b) => { + return b.timestamp < a.timestamp ? -1 : 1; + }); + for (let i = 0; i < packageInfo.versions.length; i++) { const version = packageInfo.versions[i]; html += ''; diff --git a/src/controllers/dashboard/plugins/installed/index.js b/src/controllers/dashboard/plugins/installed/index.js index 654ae4c29eb..77229f3ac98 100644 --- a/src/controllers/dashboard/plugins/installed/index.js +++ b/src/controllers/dashboard/plugins/installed/index.js @@ -66,7 +66,7 @@ function getPluginCardHtml(plugin, pluginConfigurationPages) { if (configPageUrl) { html += `
`; } else { - html += '
'; + html += '
'; } if (plugin.HasImage) { @@ -87,12 +87,10 @@ function getPluginCardHtml(plugin, pluginConfigurationPages) { html += '
'; } - html += "
"; - html += configPage && configPage.DisplayName ? configPage.DisplayName : plugin.Name; - html += `
${globalize.translate('LabelStatus')} ${plugin.Status}
`; - html += "
"; - html += plugin.Version; + html += '
'; + html += `${plugin.Name}${plugin.Version}`; html += '
'; + html += `
${globalize.translate('LabelStatus')} ${plugin.Status}
`; html += '
'; html += '
'; html += '
'; @@ -161,7 +159,7 @@ function showPluginMenu(page, elem) { menuItems.push({ name: globalize.translate('EnablePlugin'), id: 'enable', - icon: 'mode_enable' + icon: 'check_circle_outline' }); } @@ -169,7 +167,7 @@ function showPluginMenu(page, elem) { menuItems.push({ name: globalize.translate('DisablePlugin'), id: 'disable', - icon: 'mode_disable' + icon: 'do_not_disturb' }); } diff --git a/src/strings/en-gb.json b/src/strings/en-gb.json index 83e1219d382..574d324fea1 100644 --- a/src/strings/en-gb.json +++ b/src/strings/en-gb.json @@ -1457,6 +1457,49 @@ "LabelEnableIP4Help": "Enables IPv4 functionality.", "LabelEnableIP4": "Enable IPv4:", "HeaderNetworking": "IP Protocols", - "EnablePlugin": "Enable Plugin", - "DisablePlugin": "Disable Plugin" + "EnablePlugin": "Enable", + "DisablePlugin": "Disable", + "YoutubeDenied": "Requested video is not allowed to be played in embedded players.", + "YoutubeNotFound": "Video not found.", + "YoutubePlaybackError": "Requested video cannot be played.", + "YoutubeBadRequest": "Bad request.", + "LabelSelectStereo": "Stereo", + "LabelSelectMono": "Mono", + "LabelSelectAudioChannels": "Channels", + "LabelAllowedAudioChannels": "Maximum Allowed Audio Channels", + "AllowHevcEncoding": "Allow encoding in HEVC format", + "PreferFmp4HlsContainerHelp": "Prefer to use fMP4 as the default container for HLS, making it possible to direct stream HEVC content on supported devices.", + "PreferFmp4HlsContainer": "Prefer fMP4-HLS Media Container", + "LabelSyncPlayInfo": "Sync Play Info", + "LabelOriginalMediaInfo": "Original Media Info", + "LabelRemuxingInfo": "Re-muxing Info", + "LabelDirectStreamingInfo": "Direct Streaming Info", + "LabelTranscodingInfo": "Transcoding Info", + "LabelVideoInfo": "Video Info", + "LabelAudioInfo": "Audio Info", + "LabelPlaybackInfo": "Playback Info", + "RemuxHelp2": "Re-mux uses very little processing power with a completely lossless media quality.", + "RemuxHelp1": "The media is in an incompatible file container (MKV, AVI, WMV, etc) but both the video stream and audio stream are compatible with the device. The media will be repackaged losslessly on the fly before being sent to the device.", + "Remuxing": "Re-muxing", + "AspectRatioFill": "Fill", + "AspectRatioCover": "Cover", + "SyncPlayGroupDefaultTitle": "{0}'s group", + "PluginFromRepo": "{0} from repository {1}", + "MessageSyncPlayIsDisabled": "Permission required to use Sync Play.", + "LabelSyncPlayTimeSyncOffset": "Time offset:", + "LabelSyncPlayTimeSyncDevice": "Time syncing with:", + "LabelSyncPlayResumePlaybackDescription": "Join back group playback", + "LabelSyncPlayResumePlayback": "Resume local playback", + "LabelSyncPlayHaltPlaybackDescription": "And ignore current playlist updates", + "LabelSyncPlayHaltPlayback": "Stop local playback", + "LabelIsForced": "Forced", + "LabelH265Crf": "H265 encoding CRF:", + "LabelDropSubtitleHere": "Drop subtitle here, or click to browse.", + "HeaderUploadSubtitle": "Upload Subtitle", + "HeaderAddUser": "Add User", + "HeaderAddUpdateSubtitle": "Add/Update Subtitle", + "LabelMinAudiobookResumeHelp": "Titles are assumed unplayed if stopped before this time.", + "LabelMinAudiobookResume": "Minimum Audiobook resume in minutes:", + "LabelMaxAudiobookResumeHelp": "Titles are assumed fully played if stopped after this time.", + "LabelMaxAudiobookResume": "Maximum Audiobook resume in minutes:" } diff --git a/src/strings/en-us.json b/src/strings/en-us.json index 4982637825b..ac0ef434374 100644 --- a/src/strings/en-us.json +++ b/src/strings/en-us.json @@ -180,8 +180,8 @@ "DirectStreamHelp1": "The video stream is compatible with the device, but has an incompatible audio format (DTS, TRUEHD, etc) or number of audio channels. The video stream will be repackaged losslessly on the fly before being sent to the device. Only the audio stream will be transcoded.", "DirectStreamHelp2": "Power consumed by direct streaming usually depends on the audio profile. Only the video stream is lossless.", "DirectStreaming": "Direct streaming", - "EnablePlugin": "Enable Plugin", - "DisablePlugin": "Disable Plugin", + "EnablePlugin": "Enable", + "DisablePlugin": "Disable", "Disc": "Disc", "Disconnect": "Disconnect", "Display": "Display", From afdaf29dc6896f622d3d2b7039b7815e8a61dd22 Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Mar 2021 14:05:13 +0900 Subject: [PATCH 101/107] Merge pull request #2470 from pgeorgi/fix-cros browser.js: Avoid misdetecting Chrome OS as OS X (cherry picked from commit 8d01ed530e7fc9fc7b061ceda7afb6ceeacbaf07) Signed-off-by: Joshua M. Boniface --- src/scripts/browser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/browser.js b/src/scripts/browser.js index 1e7b5fb34cf..ea384bd060b 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -210,7 +210,7 @@ if (!browser.chrome && !browser.edgeChromium && !browser.edge && !browser.opera browser.safari = true; } -browser.osx = userAgent.toLowerCase().indexOf('os x') !== -1; +browser.osx = userAgent.toLowerCase().indexOf('mac os x') !== -1; // This is a workaround to detect iPads on iOS 13+ that report as desktop Safari // This may break in the future if Apple releases a touchscreen Mac From e6f59a761b1a05896e8bca0b8bb1b16e6a2c5a15 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 2 Mar 2021 11:33:50 -0500 Subject: [PATCH 102/107] Merge pull request #2473 from thornbill/cache-busting Add hash to bundle urls for cache busting (cherry picked from commit 68bf09de1611138b8dc5cec63f02242ecd80698c) Signed-off-by: Joshua M. Boniface --- webpack.common.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack.common.js b/webpack.common.js index 09219a47573..1bcb1f6a74c 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -77,8 +77,8 @@ module.exports = { }) ], output: { - filename: '[name].bundle.js', - path: path.resolve(__dirname, 'dist') + filename: '[name].[contenthash].bundle.js', + path: path.resolve(__dirname, 'dist'), }, module: { rules: [ From bad273ee3ff69e831479e0b54a173863298fe43a Mon Sep 17 00:00:00 2001 From: dkanada Date: Sat, 6 Mar 2021 16:44:00 +0900 Subject: [PATCH 103/107] Merge pull request #2482 from cvium/fix-addlibrary don't use Locations as an indicator for AddLibrary (cherry picked from commit ce95dced1d502395194565649ee184a374cb498f) Signed-off-by: Joshua M. Boniface --- src/controllers/dashboard/library.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/controllers/dashboard/library.js b/src/controllers/dashboard/library.js index a0acb36ad45..9de19e8a9f3 100644 --- a/src/controllers/dashboard/library.js +++ b/src/controllers/dashboard/library.js @@ -169,7 +169,8 @@ import cardBuilder from '../../components/cardbuilder/cardBuilder'; showType: false, showLocations: false, showMenu: false, - showNameWithIcon: false + showNameWithIcon: false, + elementId: 'addLibrary' }); for (let i = 0; i < virtualFolders.length; i++) { @@ -255,11 +256,8 @@ import cardBuilder from '../../components/cardbuilder/cardBuilder'; style += 'min-width:33.3%;'; } - if (virtualFolder.Locations.length == 0) { - html += '
'; - } else { - html += '
'; - } + const elementId = virtualFolder.elementId ? `id="${virtualFolder.elementId}" ` : ''; + html += '
'; html += '
'; html += '
'; From a1dddf45247221727ac943007ae7f4daa7f64de9 Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Mon, 8 Mar 2021 17:03:07 -0500 Subject: [PATCH 104/107] Bump version to 10.7.0 --- build.yaml | 2 +- debian/changelog | 24 ++---------------------- fedora/jellyfin-web.spec | 12 +++--------- 3 files changed, 6 insertions(+), 32 deletions(-) diff --git a/build.yaml b/build.yaml index e19fce3c23d..a73be8ec43c 100644 --- a/build.yaml +++ b/build.yaml @@ -1,7 +1,7 @@ --- # We just wrap `build` so this is really it name: "jellyfin-web" -version: "10.7.0~rc4" +version: "10.7.0" packages: - debian.all - fedora.all diff --git a/debian/changelog b/debian/changelog index 8fd0748684c..85ffa0ba202 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,23 +1,3 @@ -jellyfin-web (10.7.0~rc4) unstable; urgency=medium +jellyfin-web (10.7.0-1) unstable; urgency=medium - * New upstream version 10.7.0-rc4; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc4 - - -- Jellyfin Packaging Team Sun, 21 Feb 2021 13:39:05 -0500 - -jellyfin-web (10.7.0~rc3) unstable; urgency=medium - - * New upstream version 10.7.0-rc3; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc3 - - -- Jellyfin Packaging Team Sat, 23 Jan 2021 16:01:36 -0500 - -jellyfin-web (10.7.0~rc2) unstable; urgency=medium - - * New upstream version 10.7.0-rc2; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc2 - - -- Jellyfin Packaging Team Thu, 31 Dec 2020 19:23:51 -0500 - -jellyfin-web (10.7.0~rc1) unstable; urgency=medium - - * New upstream version 10.7.0-rc1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc1 - - -- Jellyfin Packaging Team Fri, 04 Dec 2020 20:58:23 -0500 + * New upstream version 10.7.0; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0 diff --git a/fedora/jellyfin-web.spec b/fedora/jellyfin-web.spec index d2a1b2d144d..99e05c3fcfc 100644 --- a/fedora/jellyfin-web.spec +++ b/fedora/jellyfin-web.spec @@ -1,7 +1,7 @@ %global debug_package %{nil} Name: jellyfin-web -Version: 10.7.0~rc4 +Version: 10.7.0 Release: 1%{?dist} Summary: The Free Software Media System web client License: GPLv3 @@ -42,14 +42,8 @@ mv dist %{buildroot}%{_datadir}/jellyfin-web %{_datadir}/licenses/jellyfin/LICENSE %changelog -* Sun Feb 21 2021 Jellyfin Packaging Team -- New upstream version 10.7.0-rc4; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc4 -* Sat Jan 23 2021 Jellyfin Packaging Team -- New upstream version 10.7.0-rc3; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc3 -* Thu Dec 31 2020 Jellyfin Packaging Team -- New upstream version 10.7.0-rc2; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc2 -* Fri Dec 04 2020 Jellyfin Packaging Team -- New upstream version 10.7.0-rc1; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0-rc1 +* Mon Mar 08 2021 Jellyfin Packaging Team +- New stable release 10.7.0; release changelog at https://github.com/jellyfin/jellyfin-web/releases/tag/v10.7.0 * Mon Jul 27 2020 Jellyfin Packaging Team - Forthcoming stable release * Mon Mar 23 2020 Jellyfin Packaging Team From 5dc131726dee236159f39240a332e013dc2b6852 Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Sun, 14 Mar 2021 20:18:39 -0400 Subject: [PATCH 105/107] Upgrade web client and re-patch (needs more changes for SyncPlay). --- package.json | 1 - src/components/ServerConnections.js | 81 ++++++++++++++++++++++ src/components/playback/playbackmanager.js | 10 +++ src/config.json | 2 +- webpack.common.js | 6 -- 5 files changed, 92 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 830dfd06b88..ea314644f52 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,6 @@ "jquery": "^3.5.1", "jstree": "^3.3.10", "libarchive.js": "^1.3.0", - "libass-wasm": "https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-smarttv", "material-design-icons-iconfont": "^6.1.0", "native-promise-only": "^0.8.0-a", "page": "^1.11.6", diff --git a/src/components/ServerConnections.js b/src/components/ServerConnections.js index 0242e549cdb..b3ba69a84ac 100644 --- a/src/components/ServerConnections.js +++ b/src/components/ServerConnections.js @@ -3,6 +3,87 @@ import { appHost } from './apphost'; import Dashboard from '../scripts/clientUtils'; import { setUserInfo } from '../scripts/settings/userSettings'; +// BEGIN Patches for MPV Shim +// It's got a new home! +import { playbackManager } from '../components/playback/playbackmanager'; +(function() { + let oldLogout = ApiClient.prototype.logout; + ApiClient.prototype.logout = function() { + // Logout Callback + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/destroy_session", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.send("{}"); + + return oldLogout.bind(this)(); + } + + let oldAuthenticateUserByName = ApiClient.prototype.authenticateUserByName; + ApiClient.prototype.authenticateUserByName = function(name, password) { + // Password Provider + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_password", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.onloadend = (result) => { + var res = JSON.parse(result.target.response); + if (!res.success) { + alert("MPV Shim Login Failed"); + reject(); + } + oldAuthenticateUserByName.bind(this)(name, password).then(resolve).catch(reject); + }; + xhr.onerror = () => { + reject(); + } + xhr.send(JSON.stringify({ + server: this.serverAddress(), + username: name, + password: password + })); + }) + } + + let oldOpenWebSocket = ApiClient.prototype.openWebSocket; + ApiClient.prototype.openWebSocket = function() { + oldOpenWebSocket.bind(this)(); + let oldOnOpen = this._webSocket.onopen; + function onOpen() { + // Auto-Connect + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_id", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.onloadend = function (result) { + var res = JSON.parse(result.target.response); + playbackManager.getTargets().then(function (targets) { + for (var i = 0; i < targets.length; i++) { + if (targets[i].appName == res.appName && + targets[i].deviceName == res.deviceName) + playbackManager.trySetActivePlayer(targets[i].playerName, targets[i]); + } + }); + }; + xhr.send("{}"); + + oldOnOpen(); + } + this._webSocket.onopen = onOpen; + }; + + ApiClient.prototype.joinSyncPlayGroup = function(options = {}) { + return new Promise((resolve) => { + group_id = options.GroupId; + // Syncplay Join Group + var xhr = new XMLHttpRequest(); + xhr.open('POST', "/mpv_shim_syncplay_join", true); + xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); + xhr.send(JSON.stringify(options)); + resolve(); + }) + }; +})() +// END Patches for MPV Shim + class ServerConnections extends ConnectionManager { constructor() { super(...arguments); diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 6d9aebdacbb..f21ca42bc6f 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -1892,6 +1892,16 @@ class PlaybackManager { } } + // BEGIN Patches for MPV Shim + // Explicitly break non-MPV playback + alert({ + text: "MPV Shim's player backend is not connected. This could be caused by " + + "many things. Try logging out/in again and making sure websockets work.", + title: globalize.translate('HeaderPlaybackError') + }); + return Promise.reject(); + // END Patches for MPV Shim + if (options.fullscreen) { loading.show(); } diff --git a/src/config.json b/src/config.json index 9dd6fa01d6c..473af757b5c 100644 --- a/src/config.json +++ b/src/config.json @@ -1,6 +1,6 @@ { "includeCorsCredentials": false, - "multiserver": false, + "multiserver": true, "themes": [ { "name": "Apple TV", diff --git a/webpack.common.js b/webpack.common.js index 1bcb1f6a74c..dd1e1c3a052 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -7,12 +7,6 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const Assets = [ 'native-promise-only/npo.js', 'libarchive.js/dist/worker-bundle.js', - 'libass-wasm/dist/js/subtitles-octopus-worker.js', - 'libass-wasm/dist/js/subtitles-octopus-worker.data', - 'libass-wasm/dist/js/subtitles-octopus-worker.wasm', - 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.js', - 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.data', - 'libass-wasm/dist/js/subtitles-octopus-worker-legacy.js.mem', 'pdfjs-dist/build/pdf.worker.js' ]; From 02a07ecf3d6ee1550414156f0fdfae10d964620b Mon Sep 17 00:00:00 2001 From: Ian Walton Date: Sun, 14 Mar 2021 20:22:29 -0400 Subject: [PATCH 106/107] Delete .github/workflows directory --- .github/workflows/codeql-analysis.yml | 31 --------- .github/workflows/lint.yml | 95 --------------------------- .github/workflows/merge-conflicts.yml | 15 ----- 3 files changed, 141 deletions(-) delete mode 100644 .github/workflows/codeql-analysis.yml delete mode 100644 .github/workflows/lint.yml delete mode 100644 .github/workflows/merge-conflicts.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml deleted file mode 100644 index f94934b4471..00000000000 --- a/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - schedule: - - cron: '30 7 * * 6' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - language: [ 'javascript' ] - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - queries: +security-extended - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 8b9ca0b2f06..00000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,95 +0,0 @@ -name: Lint - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - run-eslint: - name: Run eslint - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 12 - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: '**/node_modules' - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - - - name: Install Node.js dependencies - run: yarn install --frozen-lockfile - env: - SKIP_PREPARE: true - - - name: Run eslint - run: yarn lint - - run-stylelint-css: - name: Run stylelint (css) - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 12 - - - name: Set up stylelint matcher - uses: xt0rted/stylelint-problem-matcher@v1 - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: '**/node_modules' - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - - - name: Install Node.js dependencies - run: yarn install --frozen-lockfile - env: - SKIP_PREPARE: true - - - name: Run stylelint - run: yarn stylelint:css - - run-stylelint-scss: - name: Run stylelint (scss) - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 12 - - - name: Set up stylelint matcher - uses: xt0rted/stylelint-problem-matcher@v1 - - - name: Cache dependencies - uses: actions/cache@v2 - with: - path: '**/node_modules' - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} - - - name: Install Node.js dependencies - run: yarn install --frozen-lockfile - env: - SKIP_PREPARE: true - - - name: Run stylelint - run: yarn stylelint:scss diff --git a/.github/workflows/merge-conflicts.yml b/.github/workflows/merge-conflicts.yml deleted file mode 100644 index 9f4d95d884d..00000000000 --- a/.github/workflows/merge-conflicts.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: "Merge Conflicts" - -on: - push: - branches: - - master -jobs: - triage: - runs-on: ubuntu-latest - if: github.repository == 'jellyfin/jellyfin-web' - steps: - - uses: mschilde/auto-label-merge-conflicts@master - with: - CONFLICT_LABEL_NAME: "merge conflict" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a1f5b31ff6b6218c87bafc83ad1cb163afe3d9ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Mar 2021 00:53:36 +0000 Subject: [PATCH 107/107] Bump @babel/plugin-transform-modules-umd from 7.12.1 to 7.13.0 Bumps [@babel/plugin-transform-modules-umd](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-umd) from 7.12.1 to 7.13.0. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.13.0/packages/babel-plugin-transform-modules-umd) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 197 +++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 162 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index ea314644f52..9fa8619c6e2 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@babel/eslint-plugin": "^7.12.1", "@babel/plugin-proposal-class-properties": "^7.10.1", "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.13.0", "@babel/preset-env": "^7.12.7", "@uupaa/dynamic-import-polyfill": "^1.0.2", "autoprefixer": "^9.8.6", diff --git a/yarn.lock b/yarn.lock index e6548553fee..026c370b98c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" @@ -61,6 +68,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.13.0": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== + dependencies: + "@babel/types" "^7.13.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -131,6 +147,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -138,6 +163,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -152,6 +184,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== + dependencies: + "@babel/types" "^7.13.0" + "@babel/helper-module-imports@7.x", "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" @@ -159,19 +198,26 @@ dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-transforms@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" - integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== - dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-replace-supers" "^7.12.1" - "@babel/helper-simple-access" "^7.12.1" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/helper-validator-identifier" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" lodash "^4.17.19" "@babel/helper-optimise-call-expression@^7.10.4": @@ -181,10 +227,17 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== "@babel/helper-regex@^7.10.4": version "7.10.5" @@ -212,6 +265,16 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helper-simple-access@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" @@ -219,6 +282,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -233,11 +303,23 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + "@babel/helper-validator-option@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" @@ -271,6 +353,20 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.13.0": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" + integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== + "@babel/parser@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" @@ -607,13 +703,13 @@ "@babel/helper-validator-identifier" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" - integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" + integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== dependencies: - "@babel/helper-module-transforms" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": version "7.12.1" @@ -815,7 +911,16 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== @@ -830,6 +935,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" @@ -839,6 +959,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.13", "@babel/types@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -3986,10 +4115,10 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -hls.js@^0.14.16: - version "0.14.16" - resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-0.14.16.tgz#4ff68a1fa7260a43d316270e9bc7f7bdf93c5731" - integrity sha512-VACiO99DQFBpflR4fI+6GVHUZn35R0SGGQo0XTDZOm2BUXbeuDHTghTC/k2/3wGln6KBmG8/bXIcDIzDsY2UEg== +hls.js@^0.14.17: + version "0.14.17" + resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-0.14.17.tgz#0127cff2ec2f994a54eb955fe669ef6153a8e317" + integrity sha512-25A7+m6qqp6UVkuzUQ//VVh2EEOPYlOBg32ypr34bcPO7liBMOkKFvbjbCBfiPAOTA/7BSx1Dujft3Th57WyFg== dependencies: eventemitter3 "^4.0.3" url-toolkit "^2.1.6" @@ -4323,10 +4452,10 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -intersection-observer@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.11.0.tgz#f4ea067070326f68393ee161cc0a2ca4c0040c6f" - integrity sha512-KZArj2QVnmdud9zTpKf279m2bbGfG+4/kn16UU0NL3pTVl52ZHiJ9IRNSsnn6jaHrL9EGLFM5eWjTx2fz/+zoQ== +intersection-observer@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.12.0.tgz#6c84628f67ce8698e5f9ccf857d97718745837aa" + integrity sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ== ip-regex@^2.1.0: version "2.1.0" @@ -4907,10 +5036,6 @@ libarchive.js@^1.3.0: resolved "https://registry.yarnpkg.com/libarchive.js/-/libarchive.js-1.3.0.tgz#18c42c6b4ce727a02359c90769e4e454cf3743cd" integrity sha512-EkQfRXt9DhWwj6BnEA2TNpOf4jTnzSTUPGgE+iFxcdNqjktY8GitbDeHnx8qZA0/IukNyyBUR3oQKRdYkO+HFg== -"libass-wasm@https://github.com/jellyfin/JavascriptSubtitlesOctopus#4.0.0-jf-smarttv": - version "4.0.0" - resolved "https://github.com/jellyfin/JavascriptSubtitlesOctopus#58e9a3f1a7f7883556ee002545f445a430120639" - lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e"