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; + } + /// Starts listening for voice commands /// . function listen(options) { @@ -31,14 +48,18 @@ var resultInput = event.results[resultCount][0].transcript || ''; resultCount++; - if (options.continuous) { - events.trigger(receiver, 'input', [ - { - text: resultInput - } - ]); - } else { - resolve(resultInput); + resultInput = normalizeInput(resultInput, options); + + if (resultInput) { + if (options.continuous) { + events.trigger(receiver, 'input', [ + { + text: resultInput + } + ]); + } else { + resolve(resultInput); + } } } }; diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 0b92da967f..49720a9205 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1125,7 +1125,7 @@ html += ''; html += ''; - html += '
'; + html += '
'; var shape = type.type == 'MusicAlbum' ? 'detailPageSquare' : 'detailPagePortrait'; @@ -1138,7 +1138,8 @@ showDetailsMenu: true, overlayMoreButton: true, showAddToCollection: false, - showRemoveFromCollection: true + showRemoveFromCollection: true, + collectionId: parentItem.Id }); html += '
'; diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 6d7be81c1f..3459c03721 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -810,6 +810,13 @@ }); } + if (options.collectionId) { + atts.push({ + name: 'collectionid', + value: options.collectionId + }); + } + return atts; }, diff --git a/dashboard-ui/scripts/playlistedit.js b/dashboard-ui/scripts/playlistedit.js index 687aa88c0d..b0b0c0b8d9 100644 --- a/dashboard-ui/scripts/playlistedit.js +++ b/dashboard-ui/scripts/playlistedit.js @@ -68,12 +68,12 @@ playFromHere: true, action: 'playallfromhere', smallIcon: true, - dragHandle: true + dragHandle: true, + playlistId: item.Id }); } var elem = page.querySelector('#childrenContent .itemsContainer'); - elem.setAttribute('data-playlistid', item.Id); elem.innerHTML = html; ImageLoader.lazyChildren(elem);