diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index d1d0265e25..f20b0c734e 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 e601311188..d00f60f63f 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 f608a62615..039c0418ba 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 0000000000..9ac2787574 --- /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 1f1940a66b..ba9b88c196 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 d447f163a8..8395c5273d 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 c88ed41aaf..43e942ccc6 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 2b04bf9f8a..a6b333d335 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 157225ee71..2f654d71c6 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 369646cf18..9d08eeada7 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 c656413028..87f87d400a 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 c3aa6b247f..22cd639db4 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 900f3085bf..b3da6ae943 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 23dd2d2e41..4ae453a525 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 556af2ec62..3301c8202a 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 becba5ee6e..43be4ad7bb 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 0472679add..0000000000 --- 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 97722b31a1..e5fd1b0914 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 177e162e9b..9ac4fb5f98 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." }