diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index d1d0265e2..f20b0c734 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.2.49", - "_release": "1.2.49", + "version": "1.2.53", + "_release": "1.2.53", "_resolution": { "type": "version", - "tag": "1.2.49", - "commit": "dced619538d91455d46dcbaf0bc03178cbf5ebd8" + "tag": "1.2.53", + "commit": "818133a9b1b4b241b6f0e8e1733da3358bb02df5" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css index e60131118..d00f60f63 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css @@ -181,6 +181,8 @@ align-items: center; color: #fff !important; text-decoration: none; + /* Needed in firefox */ + text-align: left; } @media all and (min-width: 500px) { @@ -232,7 +234,7 @@ @media all and (max-width: 1280px) { - .guideChannelInfoWithImage .guideChannelName { + .channelHeaderCell.withImage .guideChannelNumber { display: none; } } @@ -366,22 +368,28 @@ margin-left: .25em; } -.guideChannelInfo { - display: inline-block; - max-width: 110px; +.guideChannelNumber { + padding-left: 1em; + max-width: 30%; + text-overflow: ellipsis; overflow: hidden; - white-space: nowrap; - padding-left: .7em; } .guideChannelName { margin-left: auto; - margin-right: .3em; - max-width: 6vw; + margin-right: 1em; + max-width: 40%; text-overflow: ellipsis; overflow: hidden; } +@media all and (max-width: 1000px) { + + .guideChannelName { + display: none; + } +} + .channelList, .programGrid { height: auto !important; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js index f608a6261..039c0418b 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.js @@ -328,11 +328,18 @@ dataSrc = ' data-src="' + url + '"'; } - html += ''; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js new file mode 100644 index 000000000..9ac278757 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js @@ -0,0 +1,62 @@ +define(['connectionManager', 'sharingMenu', 'loading'], function (connectionManager, sharingMenu, loading) { + + function onSharingSuccess(options) { + + console.log('share success. shareId: ' + options.share.Id); + } + + function onSharingCancel(options, apiClient) { + + var shareId = options.share.Id; + + console.log('share cancelled. shareId: ' + shareId); + + // Delete the share since it was cancelled + apiClient.ajax({ + + type: 'DELETE', + url: apiClient.getUrl('Social/Shares/' + shareId) + + }); + } + + function showMenu(options) { + + loading.show(); + var itemId = options.itemId; + var apiClient = options.apiClient || connectionManager.getApiClient(options.serverId); + var userId = apiClient.getCurrentUserId(); + + return apiClient.getItem(userId, itemId).then(function () { + + return apiClient.ajax({ + type: 'POST', + url: apiClient.getUrl('Social/Shares', { + + ItemId: itemId, + UserId: userId + }), + dataType: "json" + + }).then(function (share) { + + var options = { + share: share + }; + + loading.hide(); + sharingMenu.showMenu(options, onSharingSuccess, function (options) { + onSharingCancel(options, apiClient); + }); + + }, function () { + + loading.hide(); + }); + }); + } + + return { + showMenu: showMenu + }; +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js index 1f1940a66..ba9b88c19 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js @@ -120,24 +120,41 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f if (options.interactive) { + var actionButtonsOnTop = layoutManager.mobile; + html += '
'; html += '
'; html += ''; html += ''; - html += ''; - - html += '
'; - - //html += ''; - html += ''; - if (appHost.supports('filedownload')) { - html += ''; + html += '
'; + if (actionButtonsOnTop) { + if (appHost.supports('filedownload')) { + html += ''; + } + if (appHost.supports('sharing')) { + html += ''; + } } - + html += ''; html += '
'; + if (!actionButtonsOnTop) { + html += '
'; + + //html += ''; + html += ''; + if (appHost.supports('filedownload')) { + html += ''; + } + if (appHost.supports('sharing')) { + html += ''; + } + + html += '
'; + } + html += '
'; } else { @@ -229,7 +246,8 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f originalImage: getImgUrl(item, true), //title: item.Name, //description: item.Overview - Id: item.Id + Id: item.Id, + ServerId: item.ServerId }); } @@ -254,7 +272,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f function getSwiperSlideHtmlFromSlide(item) { var html = ''; - html += '
'; + html += '
'; html += ''; html += ''; if (item.title || item.subtitle) { @@ -305,21 +323,19 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f } } - function getCurrentItemId() { - + function getCurrentImageInfo() { if (swiperInstance) { - return document.querySelector('.swiper-slide-active').getAttribute('data-itemid'); - } else { + var slide = document.querySelector('.swiper-slide-active'); + + if (slide) { + return { + url: slide.getAttribute('data-original'), + itemId: slide.getAttribute('data-itemid'), + serverId: slide.getAttribute('data-serverid') + }; + } return null; - } - } - - function getCurrentImageUrl() { - - - if (swiperInstance) { - return document.querySelector('.swiper-slide-active').getAttribute('data-original'); } else { return null; } @@ -327,31 +343,39 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f function download() { - var url = getCurrentImageUrl(); - var itemId = getCurrentItemId(); - alert(itemId); + var imageInfo = getCurrentImageInfo(); + require(['fileDownloader'], function (fileDownloader) { - fileDownloader.download([ - { - url: url, - itemId: itemId - }]); + fileDownloader.download([imageInfo]); }); } function share() { + var imageInfo = getCurrentImageInfo(); + + require(['sharingmanager'], function (sharingManager) { + sharingManager.showMenu(imageInfo); + }); } function play() { - dlg.querySelector('.btnSlideshowPause').icon = "slideshow:pause"; + var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause'); + if (btnSlideshowPause) { + btnSlideshowPause.icon = "slideshow:pause"; + } + swiperInstance.startAutoplay(); } function pause() { - dlg.querySelector('.btnSlideshowPause').icon = "slideshow:play-arrow"; + var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause'); + if (btnSlideshowPause) { + btnSlideshowPause.icon = "slideshow:play-arrow"; + } + swiperInstance.stopAutoplay(); } @@ -403,13 +427,19 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f function showOsd() { - slideUpToShow(getOsdBottom()); - startHideTimer(); + var bottom = getOsdBottom(); + if (bottom) { + slideUpToShow(bottom); + startHideTimer(); + } } function hideOsd() { - slideDownToHide(getOsdBottom()); + var bottom = getOsdBottom(); + if (bottom) { + slideDownToHide(bottom); + } } var hideTimeout; diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css index d447f163a..8395c5273 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/style.css @@ -80,7 +80,7 @@ position: absolute; } -.btnSlideshowExit { +.topActionButtons { right: .5vh; top: .5vh; z-index: 1002; diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json index c88ed41aa..43e942ccc 100644 --- a/dashboard-ui/bower_components/iron-selector/.bower.json +++ b/dashboard-ui/bower_components/iron-selector/.bower.json @@ -36,7 +36,7 @@ "tag": "v1.4.0", "commit": "554f7418fdbd97688eb21518b5f8172167d53a95" }, - "_source": "git://github.com/polymerelements/iron-selector.git", + "_source": "git://github.com/PolymerElements/iron-selector.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-selector" + "_originalSource": "PolymerElements/iron-selector" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-behaviors/.bower.json b/dashboard-ui/bower_components/paper-behaviors/.bower.json index 2b04bf9f8..a6b333d33 100644 --- a/dashboard-ui/bower_components/paper-behaviors/.bower.json +++ b/dashboard-ui/bower_components/paper-behaviors/.bower.json @@ -45,7 +45,7 @@ "tag": "v1.0.11", "commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5" }, - "_source": "git://github.com/PolymerElements/paper-behaviors.git", + "_source": "git://github.com/polymerelements/paper-behaviors.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/paper-behaviors" + "_originalSource": "polymerelements/paper-behaviors" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-ripple/.bower.json b/dashboard-ui/bower_components/paper-ripple/.bower.json index 157225ee7..2f654d71c 100644 --- a/dashboard-ui/bower_components/paper-ripple/.bower.json +++ b/dashboard-ui/bower_components/paper-ripple/.bower.json @@ -32,14 +32,14 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" }, "ignore": [], - "homepage": "https://github.com/PolymerElements/paper-ripple", + "homepage": "https://github.com/polymerelements/paper-ripple", "_release": "1.0.5", "_resolution": { "type": "version", "tag": "v1.0.5", "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" }, - "_source": "git://github.com/PolymerElements/paper-ripple.git", + "_source": "git://github.com/polymerelements/paper-ripple.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/paper-ripple" + "_originalSource": "polymerelements/paper-ripple" } \ No newline at end of file diff --git a/dashboard-ui/components/apphost.js b/dashboard-ui/components/apphost.js index 369646cf1..9d08eeada 100644 --- a/dashboard-ui/components/apphost.js +++ b/dashboard-ui/components/apphost.js @@ -94,6 +94,8 @@ define(['appStorage', 'browser'], function (appStorage, browser) { 'filedownload' ]; + features.push('sharing'); + return features.indexOf(command.toLowerCase()) != -1; }, appInfo: function () { diff --git a/dashboard-ui/components/sharingwidget.js b/dashboard-ui/components/sharingwidget.js index c65641302..87f87d400 100644 --- a/dashboard-ui/components/sharingwidget.js +++ b/dashboard-ui/components/sharingwidget.js @@ -1,4 +1,4 @@ -define(['dialogHelper', 'jQuery', 'thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper, $) { +define(['dialogHelper', 'thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper) { function showMenu(options, successCallback, cancelCallback) { @@ -58,11 +58,16 @@ } }); - // Has to be assigned a z-index after the call to .open() - $('.ssk', dlg).on('click', function () { + function onSskButtonClick(e) { isShared = true; dialogHelper.close(dlg); - }); + } + + // Has to be assigned a z-index after the call to .open() + var sskButtons = dlg.querySelectorAll('.ssk'); + for (var i = 0, length = sskButtons.length; i < length; i++) { + sskButtons[i].addEventListener('click', onSskButtonClick); + } // Has to be assigned a z-index after the call to .open() dlg.querySelector('.btnCancel').addEventListener('click', function () { diff --git a/dashboard-ui/livetvsettings.html b/dashboard-ui/livetvsettings.html index c3aa6b247..22cd639db 100644 --- a/dashboard-ui/livetvsettings.html +++ b/dashboard-ui/livetvsettings.html @@ -46,6 +46,11 @@

+
+ ${OptionConvertRecordingPreserveAudio} +
${OptionConvertRecordingPreserveAudioHelp}
+
+

${OptionSendRecordingsToAutoOrganize} diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 900f3085b..b3da6ae94 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -1484,7 +1484,7 @@ } if (stream.IsAVC != null) { - attributes.push(createAttribute('AVC', stream.IsAVC)); + attributes.push(createAttribute('AVC', (stream.IsAVC ? 'Yes' : 'No'))); } if (stream.Profile) { diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 23dd2d2e4..4ae453a52 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -950,6 +950,8 @@ }); } + var serverId = ApiClient.serverInfo().Id; + require(['actionsheet'], function (actionsheet) { actionsheet.show({ @@ -960,8 +962,11 @@ switch (id) { case 'share': - require(['sharingmanager'], function () { - SharingManager.showMenu(Dashboard.getCurrentUserId(), itemId); + require(['sharingmanager'], function (sharingManager) { + sharingManager.showMenu({ + serverId: serverId, + itemId: itemId + }); }); break; case 'addtocollection': @@ -990,7 +995,8 @@ fileDownloader.download([ { url: downloadHref, - itemId: itemId + itemId: itemId, + serverId: serverId }]); }); @@ -1547,6 +1553,11 @@ value: item.LocationType || '' }); + atts.push({ + name: 'index', + value: index + }); + if (item.AlbumId) { atts.push({ name: 'albumid', diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 556af2ec6..3301c8202 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -249,6 +249,7 @@ var albumid = card.getAttribute('data-albumid'); var artistid = card.getAttribute('data-artistid'); + var serverId = ApiClient.serverInfo().Id; Dashboard.getCurrentUser().then(function (user) { @@ -494,7 +495,8 @@ fileDownloader.download([ { url: downloadHref, - itemId: itemId + itemId: itemId, + serverId: serverId }]); }); @@ -576,8 +578,11 @@ LibraryBrowser.playInExternalPlayer(itemId); break; case 'share': - require(['sharingmanager'], function () { - SharingManager.showMenu(Dashboard.getCurrentUserId(), itemId); + require(['sharingmanager'], function (sharingManager) { + sharingManager.showMenu({ + serverId: serverId, + itemId: itemId + }); }); break; case 'removefromplaylist': diff --git a/dashboard-ui/scripts/livetvsettings.js b/dashboard-ui/scripts/livetvsettings.js index becba5ee6..43be4ad7b 100644 --- a/dashboard-ui/scripts/livetvsettings.js +++ b/dashboard-ui/scripts/livetvsettings.js @@ -10,6 +10,7 @@ $('#chkMovies', page).checked(config.EnableMovieProviders); $('#chkOrganize', page).checked(config.EnableAutoOrganize); $('#chkConvertRecordings', page).checked(config.EnableRecordingEncoding); + $('#chkPreserveAudio', page).checked(config.EnableOriginalAudioWithEncodedRecordings || false); $('#txtRecordingPath', page).val(config.RecordingPath || ''); @@ -31,6 +32,7 @@ config.EnableMovieProviders = $('#chkMovies', form).checked(); config.EnableAutoOrganize = $('#chkOrganize', form).checked(); config.EnableRecordingEncoding = $('#chkConvertRecordings', form).checked(); + config.EnableOriginalAudioWithEncodedRecordings = $('#chkPreserveAudio', form).checked(); config.RecordingPath = $('#txtRecordingPath', form).val() || null; config.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60; diff --git a/dashboard-ui/scripts/sharingmanager.js b/dashboard-ui/scripts/sharingmanager.js deleted file mode 100644 index 0472679ad..000000000 --- a/dashboard-ui/scripts/sharingmanager.js +++ /dev/null @@ -1,59 +0,0 @@ -define([], function () { - - function onSharingSuccess(options) { - - console.log('share success. shareId: ' + options.share.Id); - - } - - function onSharingCancel(options) { - - var shareId = options.share.Id; - - console.log('share cancelled. shareId: ' + shareId); - - // Delete the share since it was cancelled - ApiClient.ajax({ - - type: 'DELETE', - url: ApiClient.getUrl('Social/Shares/' + shareId) - - }); - } - - function showMenu(userId, itemId) { - - Dashboard.showLoadingMsg(); - - require(['sharingwidget'], function (SharingWidget) { - - ApiClient.ajax({ - type: 'POST', - url: ApiClient.getUrl('Social/Shares', { - - ItemId: itemId, - UserId: userId - }), - dataType: "json" - - }).then(function (share) { - - var options = { - share: share - }; - - Dashboard.hideLoadingMsg(); - SharingWidget.showMenu(options, onSharingSuccess, onSharingCancel); - - }, function () { - - Dashboard.hideLoadingMsg(); - }); - }); - } - - window.SharingManager = { - showMenu: showMenu - }; - -}); \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 97722b31a..e5fd1b091 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1651,12 +1651,12 @@ var AppInfo = {}; paths.hlsjs = bowerPath + "/hls.js/dist/hls.min"; if (Dashboard.isRunningInCordova()) { - paths.sharingwidget = "cordova/sharingwidget"; + paths.sharingMenu = "cordova/sharingwidget"; paths.serverdiscovery = "cordova/serverdiscovery"; paths.wakeonlan = "cordova/wakeonlan"; paths.actionsheet = "cordova/actionsheet"; } else { - paths.sharingwidget = "components/sharingwidget"; + paths.sharingMenu = "components/sharingwidget"; paths.serverdiscovery = apiClientBowerPath + "/serverdiscovery"; paths.wakeonlan = apiClientBowerPath + "/wakeonlan"; @@ -1678,6 +1678,8 @@ var AppInfo = {}; return viewManager; }); + define("sharingmanager", [embyWebComponentsBowerPath + "/sharing/sharingmanager"], returnFirstDependency); + // hack for an android test before browserInfo is loaded if (Dashboard.isRunningInCordova() && window.MainActivity) { paths.appStorage = "cordova/android/appstorage"; @@ -2028,8 +2030,6 @@ var AppInfo = {}; define("detailtablecss", ['css!css/detailtable.css']); define("tileitemcss", ['css!css/tileitem.css']); - define("sharingmanager", ["scripts/sharingmanager"]); - if (Dashboard.isRunningInCordova() && browserInfo.safari) { define("searchmenu", ["cordova/searchmenu"]); } else { diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json index 177e162e9..9ac4fb5f9 100644 --- a/dashboard-ui/strings/en-US.json +++ b/dashboard-ui/strings/en-US.json @@ -2349,5 +2349,7 @@ "MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.", "LabelTitle": "Title:", "LabelOriginalTitle": "Original title:", - "LabelSortTitle": "Sort title:" + "LabelSortTitle": "Sort title:", + "OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings", + "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices." }