diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index 2749bde151..fe6262f98c 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -15,12 +15,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.4.108",
- "_release": "1.4.108",
+ "version": "1.4.110",
+ "_release": "1.4.110",
"_resolution": {
"type": "version",
- "tag": "1.4.108",
- "commit": "42932aca23d729123c468fa71c73d84483025aca"
+ "tag": "1.4.110",
+ "commit": "fec7da49cf36f8177347d4ad14e443db644dc7f5"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js
index 0a3049104d..3735f369ad 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/browserdeviceprofile.js
@@ -168,6 +168,10 @@ define(['browser'], function (browser) {
return 10000000;
}
+ if (browser.ps4) {
+ return 8000000;
+ }
+
var userAgent = navigator.userAgent.toLowerCase();
if (browser.tizen) {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
index d72ff544db..69a35d21b7 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js
@@ -107,7 +107,6 @@
function onDrop(evt, itemsContainer) {
- var playlistId = itemsContainer.getAttribute('data-playlistid');
loading.show();
@@ -115,6 +114,7 @@
var newIndex = evt.newIndex;
var itemId = el.getAttribute('data-playlistitemid');
+ var playlistId = el.getAttribute('data-playlistid');
var serverId = el.getAttribute('data-serverid');
var apiClient = connectionManager.getApiClient(serverId);
diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js
index 9bdcd5019a..fabbbee2d3 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js
@@ -170,8 +170,10 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
var playlistItemId = item.PlaylistItemId ? (' data-playlistitemid="' + item.PlaylistItemId + '"') : '';
var positionTicksData = item.UserData && item.UserData.PlaybackPositionTicks ? (' data-positionticks="' + item.UserData.PlaybackPositionTicks + '"') : '';
+ var collectionIdData = options.collectionId ? (' data-collectionid="' + options.collectionId + '"') : '';
+ var playlistIdData = options.playlistId ? (' data-playlistid="' + options.playlistId + '"') : '';
- html += '<' + outerTagName + ' class="' + cssClass + '" data-index="' + index + '"' + playlistItemId + ' data-action="' + action + '" data-isfolder="' + item.IsFolder + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-mediatype="' + item.MediaType + '" data-type="' + item.Type + '"' + positionTicksData + '>';
+ html += '<' + outerTagName + ' class="' + cssClass + '" data-index="' + index + '"' + playlistItemId + ' data-action="' + action + '" data-isfolder="' + item.IsFolder + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-mediatype="' + item.MediaType + '" data-type="' + item.Type + '"' + positionTicksData + collectionIdData + playlistIdData + '>';
if (!clickEntireItem && options.dragHandle) {
html += '';
diff --git a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js
index 38de50092b..79dcda8779 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js
@@ -109,10 +109,8 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
getItem(card).then(function (item) {
- var itemsContainer = options.itemsContainer || dom.parentWithAttribute(card, 'is', 'emby-itemscontainer');
-
- var playlistId = itemsContainer ? itemsContainer.getAttribute('data-playlistid') : null;
- var collectionId = itemsContainer ? itemsContainer.getAttribute('data-collectionid') : null;
+ var playlistId = card.getAttribute('data-playlistid');
+ var collectionId = card.getAttribute('data-collectionid');
if (playlistId) {
var elem = dom.parentWithAttribute(card, 'data-playlistitemid');
@@ -138,6 +136,8 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
}
else if (result.command == 'removefromplaylist' || result.command == 'removefromcollection') {
+ var itemsContainer = options.itemsContainer || dom.parentWithAttribute(card, 'is', 'emby-itemscontainer');
+
if (itemsContainer) {
itemsContainer.dispatchEvent(new CustomEvent('needsrefresh', {
detail: {},
@@ -148,6 +148,8 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
}
else if (result.command == 'canceltimer') {
+ var itemsContainer = options.itemsContainer || dom.parentWithAttribute(card, 'is', 'emby-itemscontainer');
+
if (itemsContainer) {
itemsContainer.dispatchEvent(new CustomEvent('timercancelled', {
detail: {},
diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js
index 9c96a8c721..a62efc8447 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voicereceiver.js
@@ -6,6 +6,23 @@
var currentRecognition = null;
+ function normalizeInput(text, options) {
+
+ if (options.requireNamedIdentifier) {
+
+ var srch = 'jarvis';
+ var index = text.toLowerCase().indexOf(srch);
+
+ if (index != -1) {
+ text = text.substring(index + srch.length);
+ } else {
+ return null;
+ }
+ }
+
+ return text;
+ }
+
///