From 4fb729169f8a8852a455f7d5bb666363853441af Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 13 Mar 2016 03:34:17 -0400 Subject: [PATCH] update sat/ip discovery --- .../emby-webcomponents/.bower.json | 8 +- .../actionsheet/actionsheet.js | 84 ++++++++++++++----- .../paperdialoghelper/paperdialoghelper.js | 49 +---------- .../bower_components/iron-icon/.bower.json | 6 +- .../iron-selector/.bower.json | 4 +- dashboard-ui/devices/ios/ios.css | 9 -- .../livetvtunerprovider-hdhomerun.html | 2 +- dashboard-ui/livetvtunerprovider-satip.html | 41 +++++++++ dashboard-ui/scripts/livetvstatus.js | 15 +++- .../scripts/livetvtunerprovider-satip.js | 84 +++++++++++++++++++ 10 files changed, 210 insertions(+), 92 deletions(-) create mode 100644 dashboard-ui/livetvtunerprovider-satip.html create mode 100644 dashboard-ui/scripts/livetvtunerprovider-satip.js diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index af282d5a4..aae56271d 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.1.44", - "_release": "1.1.44", + "version": "1.1.45", + "_release": "1.1.45", "_resolution": { "type": "version", - "tag": "1.1.44", - "commit": "b1b66d4e81e6abad2f5369b442107577d0dac74e" + "tag": "1.1.45", + "commit": "4096a916053ab04935ebbe0dec9bbc491d66ae9d" }, "_source": "git://github.com/MediaBrowser/emby-webcomponents.git", "_target": "~1.1.5", diff --git a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js index 5ebf6a497..51dc772a5 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js +++ b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js @@ -13,38 +13,74 @@ return elem; } + function getOffsets(elems) { + + var doc = document; + var results = []; + + if (!doc) { + return results; + } + + var docElem = doc.documentElement; + var docElemValues = { + clientTop: docElem.clientTop, + clientLeft: docElem.clientLeft + }; + + var win = doc.defaultView; + var winValues = { + pageXOffset: win.pageXOffset, + pageYOffset: win.pageYOffset + }; + + var box; + var elem; + + for (var i = 0, length = elems.length; i < length; i++) { + + elem = elems[i]; + // Support: BlackBerry 5, iOS 3 (original iPhone) + // If we don't have gBCR, just use 0,0 rather than error + if (elem.getBoundingClientRect) { + box = elem.getBoundingClientRect(); + } else { + box = { top: 0, left: 0 }; + } + + results[i] = { + top: box.top, + left: box.left + }; + } + + return results; + } + function getPosition(options) { - var windowHeight = $(window).height(); + var windowHeight = window.innerHeight; if (windowHeight < 540) { return null; } - var pos = $(options.positionTo).offset(); + var pos = getOffsets([options.positionTo])[0]; - pos.top += $(options.positionTo).innerHeight() / 2; - pos.left += $(options.positionTo).innerWidth() / 2; - - // Account for margins - pos.top -= 24; - pos.left -= 24; + pos.top += options.positionTo.offsetHeight / 2; + pos.left += options.positionTo.offsetWidth / 2; // Account for popup size - we can't predict this yet so just estimate pos.top -= (55 * options.items.length) / 2; pos.left -= 80; - // Account for scroll position - pos.top -= $(window).scrollTop(); - pos.left -= $(window).scrollLeft(); - // Avoid showing too close to the bottom pos.top = Math.min(pos.top, windowHeight - 300); - pos.left = Math.min(pos.left, $(window).width() - 300); + pos.left = Math.min(pos.left, window.innerWidth - 300); // Do some boundary checking - pos.top = Math.max(pos.top, 0); - pos.left = Math.max(pos.left, 0); + pos.top = Math.max(pos.top, 10); + pos.left = Math.max(pos.left, 10); return pos; } @@ -58,13 +94,16 @@ function show(options) { + var pos = options.positionTo ? getPosition(options) : null; + // items // positionTo // showCancel // title var dialogOptions = { removeOnClose: true, - enableHistory: options.enableHistory + enableHistory: options.enableHistory, + refit: pos == null }; var backButton = false; @@ -82,7 +121,6 @@ } var dlg = paperdialoghelper.createDialog(dialogOptions); - var pos = options.positionTo ? getPosition(options) : null; dlg.classList.add('actionSheet'); @@ -155,12 +193,6 @@ dlg.innerHTML = html; - if (pos) { - dlg.style.position = 'fixed'; - dlg.style.left = pos.left + 'px'; - dlg.style.top = pos.top + 'px'; - } - if (layoutManager.tv) { addCenterFocus(dlg); } @@ -198,6 +230,12 @@ }); paperdialoghelper.open(dlg); + + if (pos) { + dlg.style.position = 'fixed'; + dlg.style.left = pos.left + 'px'; + dlg.style.top = pos.top + 'px'; + } }); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/paperdialoghelper/paperdialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/paperdialoghelper/paperdialoghelper.js index b66ea3c4d..b33d31eea 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/paperdialoghelper/paperdialoghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/paperdialoghelper/paperdialoghelper.js @@ -67,13 +67,6 @@ dlg.addEventListener('iron-overlay-closed', onDialogClosed); dlg.open(); - // It's not being positioned properly in firefox - if (!browser.chrome && !dlg.classList.contains('fixedSize')) { - setTimeout(function () { - dlg.refit(); - }, 100); - } - if (dlg.getAttribute('data-lockscroll') == 'true' && !document.body.classList.contains('noScroll')) { document.body.classList.add('noScroll'); removeScrollLockOnClose = true; @@ -211,49 +204,9 @@ return dlg; } - function positionTo(dlg, elem) { - - var windowHeight = $(window).height(); - - // If the window height is under a certain amount, don't bother trying to position - // based on an element. - if (windowHeight >= 540) { - - var pos = $(elem).offset(); - - pos.top += elem.offsetHeight / 2; - pos.left += elem.offsetWidth / 2; - - // Account for margins - pos.top -= 24; - pos.left -= 24; - - // Account for popup size - we can't predict this yet so just estimate - pos.top -= $(dlg).height() / 2; - pos.left -= $(dlg).width() / 2; - - // Account for scroll position - pos.top -= $(window).scrollTop(); - pos.left -= $(window).scrollLeft(); - - // Avoid showing too close to the bottom - pos.top = Math.min(pos.top, windowHeight - 300); - pos.left = Math.min(pos.left, $(window).width() - 300); - - // Do some boundary checking - pos.top = Math.max(pos.top, 0); - pos.left = Math.max(pos.left, 0); - - dlg.style.position = 'fixed'; - dlg.style.left = pos.left + 'px'; - dlg.style.top = pos.top + 'px'; - } - } - return { open: open, close: close, - createDialog: createDialog, - positionTo: positionTo + createDialog: createDialog }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-icon/.bower.json b/dashboard-ui/bower_components/iron-icon/.bower.json index f0167baf1..9784e3a3b 100644 --- a/dashboard-ui/bower_components/iron-icon/.bower.json +++ b/dashboard-ui/bower_components/iron-icon/.bower.json @@ -32,14 +32,14 @@ "web-component-tester": "^4.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "homepage": "https://github.com/polymerelements/iron-icon", + "homepage": "https://github.com/PolymerElements/iron-icon", "_release": "1.0.8", "_resolution": { "type": "version", "tag": "v1.0.8", "commit": "f36b38928849ef3853db727faa8c9ef104d611eb" }, - "_source": "git://github.com/polymerelements/iron-icon.git", + "_source": "git://github.com/PolymerElements/iron-icon.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-icon" + "_originalSource": "PolymerElements/iron-icon" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json index 24e587a26..1a5c3225c 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.2.5", "commit": "06bd256eacfd70f959c4aed8c03c221f01074c0f" }, - "_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/devices/ios/ios.css b/dashboard-ui/devices/ios/ios.css index 90be5a3db..6f0ab336a 100644 --- a/dashboard-ui/devices/ios/ios.css +++ b/dashboard-ui/devices/ios/ios.css @@ -2,15 +2,6 @@ font-size: 15px; } -.ui-body-b a:visited { - color: #007AFF /*{b-link-visited}*/; -} - -.ui-body-b a { - color: #007AFF /*{b-link-color}*/; - font-weight: 500; -} - .ui-body-b select { -webkit-appearance: none; } diff --git a/dashboard-ui/livetvtunerprovider-hdhomerun.html b/dashboard-ui/livetvtunerprovider-hdhomerun.html index 941fa4877..ebf88991e 100644 --- a/dashboard-ui/livetvtunerprovider-hdhomerun.html +++ b/dashboard-ui/livetvtunerprovider-hdhomerun.html @@ -17,7 +17,7 @@
-

HD Homerun Setup

+

HD Homerun

diff --git a/dashboard-ui/livetvtunerprovider-satip.html b/dashboard-ui/livetvtunerprovider-satip.html new file mode 100644 index 000000000..5fc6a9360 --- /dev/null +++ b/dashboard-ui/livetvtunerprovider-satip.html @@ -0,0 +1,41 @@ + + + + ${TitleLiveTV} + + +
+ +
+
+ + + +
+ +

DVB

+ + +
+
+ +
+
+
+ + ${ButtonCancel} +
+
+ +
+
+
+
+ + diff --git a/dashboard-ui/scripts/livetvstatus.js b/dashboard-ui/scripts/livetvstatus.js index f7a2ec3bc..e3641f1ea 100644 --- a/dashboard-ui/scripts/livetvstatus.js +++ b/dashboard-ui/scripts/livetvstatus.js @@ -74,7 +74,11 @@ html += '
'; html += ''; - html += ''; + + if (tuner.CanReset) { + html += ''; + } + html += ''; } @@ -201,7 +205,7 @@ html += ''; html += ''; html += '
'; - html += getTunerName(device.Type); + html += device.FriendlyName || getTunerName(device.Type); html += '
'; html += '
'; @@ -367,6 +371,8 @@ return 'M3U Playlist'; case 'hdhomerun': return 'HDHomerun'; + case 'satip': + return 'DVB'; default: return 'Unknown'; } @@ -445,6 +451,11 @@ var menuItems = []; + //menuItems.push({ + // name: getTunerName('satip'), + // id: 'satip' + //}); + menuItems.push({ name: 'HDHomerun', id: 'hdhomerun' diff --git a/dashboard-ui/scripts/livetvtunerprovider-satip.js b/dashboard-ui/scripts/livetvtunerprovider-satip.js new file mode 100644 index 000000000..67e5beb18 --- /dev/null +++ b/dashboard-ui/scripts/livetvtunerprovider-satip.js @@ -0,0 +1,84 @@ +(function ($, document, window) { + + function reload(page, providerId) { + + page.querySelector('.txtDevicePath').value = ''; + + if (providerId) { + ApiClient.getNamedConfiguration("livetv").then(function (config) { + + var info = config.TunerHosts.filter(function (i) { + return i.Id == providerId; + })[0]; + + page.querySelector('.txtDevicePath').value = info.Url || ''; + }); + } + } + + function submitForm(page) { + + Dashboard.showLoadingMsg(); + + var id = getParameterByName('id'); + + if (id) { + + ApiClient.getNamedConfiguration("livetv").then(function (config) { + + var info = config.TunerHosts.filter(function (i) { + return i.Id == id; + })[0]; + + info.Url = page.querySelector('.txtDevicePath').value; + + submitTunerInfo(page, info); + }); + + } else { + var info = { + Type: 'satip', + Url: page.querySelector('.txtDevicePath').value + }; + + submitTunerInfo(page, info); + } + } + + function submitTunerInfo(page, info) { + ApiClient.ajax({ + type: "POST", + url: ApiClient.getUrl('LiveTv/TunerHosts'), + data: JSON.stringify(info), + contentType: "application/json" + + }).then(function () { + + Dashboard.processServerConfigurationUpdateResult(); + Dashboard.navigate('livetvstatus.html'); + + }, function () { + Dashboard.hideLoadingMsg(); + Dashboard.alert({ + message: Globalize.translate('ErrorSavingTvProvider') + }); + }); + } + + $(document).on('pageinit', "#liveTvTunerProviderSatPage", function () { + + var page = this; + + $('form', page).on('submit', function () { + submitForm(page); + return false; + }); + + }).on('pageshow', "#liveTvTunerProviderSatPage", function () { + + var providerId = getParameterByName('id'); + var page = this; + reload(page, providerId); + }); + +})(jQuery, document, window);