define(['appSettings', 'loading', 'apphost', 'iapManager', 'events', 'shell', 'globalize', 'dialogHelper', 'connectionManager', 'layoutManager', 'emby-button'], function (appSettings, loading, appHost, iapManager, events, shell, globalize, dialogHelper, connectionManager, layoutManager) {
var currentDisplayingProductInfos = [];
var currentDisplayingResolve = null;
function alertText(options) {
return new Promise(function (resolve, reject) {
require(['alert'], function (alert) {
alert(options).then(resolve, reject);
});
});
}
function showInAppPurchaseInfo(subscriptionOptions, unlockableProductInfo, dialogOptions) {
return new Promise(function (resolve, reject) {
require(['listViewStyle', 'formDialogStyle'], function () {
showInAppPurchaseElement(subscriptionOptions, unlockableProductInfo, dialogOptions, resolve, reject);
currentDisplayingResolve = resolve;
});
});
}
function validateFeature(feature, options) {
options = options || {};
console.log('validateFeature: ' + feature);
return iapManager.isUnlockedByDefault(feature).catch(function () {
var unlockableFeatureCacheKey = 'featurepurchased-' + feature;
if (appSettings.get(unlockableFeatureCacheKey) == '1') {
return Promise.resolve();
}
var unlockableProduct = iapManager.getProductInfo(feature);
if (unlockableProduct) {
var unlockableCacheKey = 'productpurchased-' + unlockableProduct.id;
if (unlockableProduct.owned) {
// Cache this to eliminate the store as a possible point of failure in the future
appSettings.set(unlockableFeatureCacheKey, '1');
appSettings.set(unlockableCacheKey, '1');
return Promise.resolve();
}
if (appSettings.get(unlockableCacheKey) == '1') {
return Promise.resolve();
}
}
var unlockableProductInfo = unlockableProduct ? {
enableAppUnlock: true,
id: unlockableProduct.id,
price: unlockableProduct.price,
feature: feature
} : null;
return iapManager.getSubscriptionOptions().then(function (subscriptionOptions) {
if (subscriptionOptions.filter(function (p) {
return p.owned;
}).length > 0) {
return Promise.resolve();
}
// Get supporter status
return connectionManager.getRegistrationInfo(iapManager.getAdminFeatureName(feature), connectionManager.currentApiClient()).catch(function () {
var dialogOptions = {
title: globalize.translate('sharedcomponents#HeaderUnlockFeature'),
feature: feature
};
if (options.showDialog === false) {
return Promise.reject();
}
return showInAppPurchaseInfo(subscriptionOptions, unlockableProductInfo, dialogOptions);
});
});
});
}
function cancelInAppPurchase() {
var elem = document.querySelector('.inAppPurchaseOverlay');
if (elem) {
dialogHelper.close(elem);
}
}
function clearCurrentDisplayingInfo() {
currentDisplayingProductInfos = [];
currentDisplayingResolve = null;
}
function showExternalPremiereInfo() {
shell.openUrl('https://emby.media/premiere');
}
function centerFocus(elem, horiz, on) {
require(['scrollHelper'], function (scrollHelper) {
var fn = on ? 'on' : 'off';
scrollHelper.centerFocus[fn](elem, horiz);
});
}
function showInAppPurchaseElement(subscriptionOptions, unlockableProductInfo, dialogOptions, resolve, reject) {
cancelInAppPurchase();
// clone
currentDisplayingProductInfos = subscriptionOptions.slice(0);
if (unlockableProductInfo) {
currentDisplayingProductInfos.push(unlockableProductInfo);
}
var dlg = dialogHelper.createDialog({
size: 'fullscreen-border',
removeOnClose: true,
scrollY: false
});
dlg.classList.add('formDialog');
var html = '';
html += '
';
html += '';
dlg.innerHTML = html;
document.body.appendChild(dlg);
var i, length;
var btnPurchases = dlg.querySelectorAll('.btnPurchase');
for (i = 0, length = btnPurchases.length; i < length; i++) {
btnPurchases[i].addEventListener('click', onPurchaseButtonClick);
}
btnPurchases = dlg.querySelectorAll('.buttonPremiereInfo');
for (i = 0, length = btnPurchases.length; i < length; i++) {
btnPurchases[i].addEventListener('click', showExternalPremiereInfo);
}
dlg.querySelector('.btnRestorePurchase').addEventListener('click', function () {
restorePurchase(unlockableProductInfo);
});
loading.hide();
var rejected = false;
function onCloseButtonClick() {
var onConfirmed = function () {
rejected = true;
dialogHelper.close(dlg);
};
if (dialogOptions.feature == 'playback') {
alertText({
text: globalize.translate('sharedcomponents#ThankYouForTryingEnjoyOneMinute'),
title: globalize.translate('sharedcomponents#HeaderTryPlayback')
}).then(onConfirmed);
} else {
onConfirmed();
}
}
var btnCloseDialogs = dlg.querySelectorAll('.btnCloseDialog');
for (i = 0, length = btnCloseDialogs.length; i < length; i++) {
btnCloseDialogs[i].addEventListener('click', onCloseButtonClick);
}
dlg.classList.add('inAppPurchaseOverlay');
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, true);
}
dialogHelper.open(dlg).then(function () {
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false);
}
clearCurrentDisplayingInfo();
if (rejected) {
reject();
}
});
}
function getSubscriptionBenefits() {
var list = [];
list.push({
name: globalize.translate('sharedcomponents#HeaderFreeApps'),
icon: 'check',
text: globalize.translate('sharedcomponents#FreeAppsFeatureDescription')
});
if (appHost.supports('sync')) {
list.push({
name: globalize.translate('sharedcomponents#HeaderOfflineDownloads'),
icon: 'file_download',
text: globalize.translate('sharedcomponents#HeaderOfflineDownloadsDescription')
});
}
list.push({
name: globalize.translate('sharedcomponents#CoverArt'),
icon: 'photo',
text: globalize.translate('sharedcomponents#CoverArtFeatureDescription')
});
list.push({
name: globalize.translate('sharedcomponents#HeaderCinemaMode'),
icon: 'movie',
text: globalize.translate('sharedcomponents#CinemaModeFeatureDescription')
});
list.push({
name: globalize.translate('sharedcomponents#HeaderCloudSync'),
icon: 'sync',
text: globalize.translate('sharedcomponents#CloudSyncFeatureDescription')
});
return list;
}
function getSubscriptionBenefitHtml(item) {
var enableLink = appHost.supports('externalpremium');
var html = '';
var cssClass = "listItem";
cssClass += ' listItem-button';
if (layoutManager.tv) {
cssClass += ' listItem-focusscale';
}
if (enableLink) {
html += '