EmbyCrackedClient/web/modules/registrationservices/registrationservices.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
16 KiB
JavaScript

import events from"./../emby-apiclient/events.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import appSettings from"./../common/appsettings.js";import focusManager from"./../focusmanager.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import loading from"./../loading/loading.js";import{appHost,shell,iapManager}from"./../common/servicelocator.js";import layoutManager from"./../layoutmanager.js";import globalize from"./../common/globalize.js";import listView from"./../listview/listview.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import"./../emby-elements/emby-itemscontainer/emby-itemscontainer.js";require(["formDialogStyle"]);let currentDisplayingProductInfos=[],currentDisplayingResolve=null,currentValidatingFeature=null,isCurrentDialogRejected=null;function showAlert(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function showPrompt(options){return Emby.importModule("./modules/prompt/prompt.js").then(function(prompt){return prompt(options)})}function showInAppPurchaseInfo(subscriptionOptions,unlockableProductInfo,dialogOptions){return new Promise(function(resolve,reject){showInAppPurchaseElement(subscriptionOptions,unlockableProductInfo,dialogOptions,resolve,reject),currentDisplayingResolve=resolve})}function getBenefitsListOptions(items){return{renderer:listView,options:{defaultBackground:!1,moreButton:!1,action:"none",multiSelect:!1,roundImage:!0,fields:["Name","ShortOverview"],draggable:!1,draggableXActions:!1,contextMenu:!1}}}function initSubscriptionBenefitsItemsContainer(context){let itemsContainer=context.querySelector(".benefitsItemsContainer");if(itemsContainer)return itemsContainer.fetchData=getSubscriptionBenefits,itemsContainer.getListOptions=getBenefitsListOptions,itemsContainer.waitForCustomElementUpgrade().then(function(){return itemsContainer.resume({refresh:!0})})}function showPeriodicMessage(feature,settingsKey){return new Promise(function(resolve,reject){let dlg=dialogHelper.createDialog({size:layoutManager.tv?"fullscreen-border":"medium-tall",removeOnClose:!0,scrollY:!1});dlg.classList.add("formDialog");var html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html=(html="")+'<div class="formDialogHeader">'+'<button type="button" is="emby-dialogclosebutton"></button>')+'<h3 class="formDialogHeaderTitle">Emby Premiere'+"</h3>")+"</div>"+'<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent">')+'<div class="scrollSlider">'+'<div class="dialogContentInner dialog-content-centered padded-left padded-right">')+('<h1 style="margin-top: 0;">'+globalize.translate("HeaderDiscoverEmbyPremiere")+"</h1>"))+("<p>"+globalize.translate("MessageDidYouKnowCinemaMode")+"</p>"))+("<p>"+globalize.translate("CinemaModeFeatureDescription")+"</p>"))+("<h2>"+globalize.translate("HeaderBenefitsEmbyPremiere")+"</h2>"))+'<div is="emby-itemscontainer" class="itemsContainer benefitsItemsContainer vertical-list">'+"</div>")+('<h3 class="secondaryText">'+globalize.translate("AndMuchMoreExclamation")+"</h3>"))+"<br/>"+'<div class="formDialogFooter">')+('<button is="emby-button" type="button" class="raised button-submit block btnGetPremiere block formDialogFooterItem autofocus"><span>'+globalize.translate("HeaderBecomeProjectSupporter")+"</span></button>");let seconds=11,isRejected=(html=(html=(html=(html+='<div class="continueTimeText formDialogFooterItem" style="margin: 1.5em 0 .5em;">'+globalize.translate("ContinueInSecondsValue",seconds)+"</div>")+('<button is="emby-button" type="button" class="raised button-cancel block btnContinue block formDialogFooterItem hide"><span>'+globalize.translate("Continue")+"</span></button>"))+"</div>"+"</div>")+"</div>"+"</div>",dlg.innerHTML=html,!0),timeTextInterval=setInterval(function(){var btnContinue;--seconds<=0?(clearInterval(timeTextInterval),dlg.querySelector(".continueTimeText").classList.add("hide"),(btnContinue=dlg.querySelector(".btnContinue")).classList.remove("hide"),focusManager.focus(btnContinue)):dlg.querySelector(".continueTimeText").innerHTML=globalize.translate("ContinueInSecondsValue",seconds)},1e3),i,length;var btnPurchases=dlg.querySelectorAll(".buttonPremiereInfo");for(i=0,length=btnPurchases.length;i<length;i++)btnPurchases[i].addEventListener("click",showExternalPremiereInfo);dlg.addEventListener("close",function(e){clearInterval(timeTextInterval),(isRejected?reject:(appSettings.set(settingsKey,Date.now()),resolve))()}),dlg.querySelector(".btnContinue").addEventListener("click",function(){isRejected=!1,dialogHelper.close(dlg)}),dlg.querySelector(".btnGetPremiere").addEventListener("click",showPremiereInfo),dlg.addEventListener("open",function(){initSubscriptionBenefitsItemsContainer(dlg)}),dialogHelper.open(dlg)})}function showPeriodicMessageIfNeeded(feature){if("playback"!==feature)return Promise.resolve();var intervalMs=iapManager.getPeriodicMessageIntervalMs(feature);if(intervalMs<=0)return Promise.resolve();let settingsKey="periodicmessage11-"+feature;var lastMessage=parseInt(appSettings.get(settingsKey)||"0");return lastMessage?!(Date.now()-lastMessage>intervalMs)||"554ae9ea56b94c1c82cc628f6de52d85"===(lastMessage=connectionManager.currentApiClient()).serverId()?Promise.resolve():(intervalMs={viewOnly:!0},connectionManager.getRegistrationInfo(iapManager.getAdminFeatureName(feature),lastMessage,intervalMs).catch(function(errorResult){return"overlimit"===errorResult?(appSettings.set(settingsKey,Date.now()),Promise.resolve()):showPeriodicMessage(feature,settingsKey)})):(appSettings.set(settingsKey,Date.now()),Promise.resolve())}function validateFeature(feature,options){return options=options||{},console.log("validateFeature: "+feature),iapManager.isUnlockedByDefault(feature,options).then(function(){return showPeriodicMessageIfNeeded(feature)},function(){var unlockableFeatureCacheKey="featurepurchased-"+feature;if("1"===appSettings.get(unlockableFeatureCacheKey))return showPeriodicMessageIfNeeded(feature);var unlockableProduct=iapManager.getProductInfo(feature);if(unlockableProduct){var unlockableCacheKey="productpurchased-"+unlockableProduct.id;if(unlockableProduct.owned)return appSettings.set(unlockableFeatureCacheKey,"1"),appSettings.set(unlockableCacheKey,"1"),showPeriodicMessageIfNeeded(feature);if("1"===appSettings.get(unlockableCacheKey))return showPeriodicMessageIfNeeded(feature)}let unlockableProductInfo=unlockableProduct?{enableAppUnlock:!0,id:unlockableProduct.id,price:unlockableProduct.price,feature:feature}:null;return iapManager.getSubscriptionOptions().then(function(subscriptionOptions){var registrationOptions,apiClient;return 0<subscriptionOptions.filter(function(p){return p.owned}).length?Promise.resolve():(registrationOptions={viewOnly:options.viewOnly,useCachedFailure:!1===options.showDialog},apiClient=options.serverId?connectionManager.getApiClient(options.serverId):connectionManager.currentApiClient(),connectionManager.getRegistrationInfo(iapManager.getAdminFeatureName(feature),apiClient,registrationOptions).catch(function(errorResult){if(!1===options.showDialog)return Promise.reject();let alertPromise;return(alertPromise=(alertPromise="overlimit"===errorResult?showOverLimitAlert():alertPromise)||Promise.resolve()).then(function(){var dialogOptions={title:globalize.translate("HeaderUnlockFeature"),feature:feature};return currentValidatingFeature=feature,showInAppPurchaseInfo(subscriptionOptions,unlockableProductInfo,dialogOptions)})}))})})}function showOverLimitAlert(){return showAlert("Your Emby Premiere device limit has been exceeded. Please check with the owner of your Emby Server and have them contact Emby support at billingsupport@emby.media if necessary.").catch(function(){return Promise.resolve()})}function cancelInAppPurchase(){var elem=document.querySelector(".inAppPurchaseOverlay");elem&&dialogHelper.close(elem)}function clearCurrentDisplayingInfo(){currentDisplayingProductInfos=[],currentDisplayingResolve=null,currentValidatingFeature=null,isCurrentDialogRejected=null}function showExternalPremiereInfo(){shell.openUrl(iapManager.getPremiumInfoUrl())}function getPurchaseTermHtml(term){return"<li>"+term+"</li>"}function getTermsOfPurchaseHtml(){var html="",termsOfPurchase=iapManager.getTermsOfPurchase?iapManager.getTermsOfPurchase():[];return termsOfPurchase.length?(html+="<h1>"+globalize.translate("HeaderTermsOfPurchase")+"</h1>",termsOfPurchase.push('<a is="emby-linkbutton" class="button-link" href="https://emby.media/privacy" target="_blank">'+globalize.translate("PrivacyPolicy")+"</a>"),termsOfPurchase.push('<a is="emby-linkbutton" class="button-link" href="https://emby.media/terms" target="_blank">'+globalize.translate("TermsOfUse")+"</a>"),(html+="<ul>")+termsOfPurchase.map(getPurchaseTermHtml).join("")+"</ul>"):""}function showInAppPurchaseElement(subscriptionOptions,unlockableProductInfo,dialogOptions,resolve,reject){cancelInAppPurchase(),currentDisplayingProductInfos=subscriptionOptions.slice(0),unlockableProductInfo&&currentDisplayingProductInfos.push(unlockableProductInfo);let dlg=dialogHelper.createDialog({size:layoutManager.tv?"fullscreen-border":"medium-tall",removeOnClose:!0,scrollY:!1}),html=(dlg.classList.add("formDialog"),"");html=(html=(html=(html=(html=(html=(html=(html=(html+='<div class="formDialogHeader">')+'<button type="button" is="emby-dialogclosebutton"></button><h3 class="formDialogHeaderTitle">')+(dialogOptions.title||""))+"</h3></div>")+'<div is="emby-scroller" data-forcescrollbar="true" data-horizontal="false" data-focusscroll="true" class="formDialogContent"><div class="scrollSlider">')+'<form class="dialogContentInner dialog-content-centered padded-left padded-right"><p style="margin-top:0;">')+(unlockableProductInfo?globalize.translate("MessageUnlockAppWithPurchaseOrSupporter"):globalize.translate("MessageUnlockAppWithSupporter")))+'</p><p style="margin-bottom:1.5em;">')+globalize.translate("MessageToValidateSupporter")+"</p>";let i,length;for(i=0,length=subscriptionOptions.length;i<length;i++)html=(html=(html=(html+="<p>")+'<button is="emby-button" type="button" class="raised button-submit block btnPurchase" data-email="'+(!1!==subscriptionOptions[i].requiresEmail)+'" data-featureid="'+subscriptionOptions[i].id+'"><span>')+subscriptionOptions[i].title)+"</span></button></p>";if(unlockableProductInfo){let unlockText=globalize.translate("ButtonUnlockWithPurchase");unlockableProductInfo.price&&(unlockText=globalize.translate("ButtonUnlockPrice",unlockableProductInfo.price)),html=(html+="<p>")+('<button is="emby-button" type="button" class="raised block btnPurchase" data-featureid="'+unlockableProductInfo.id+'"><span>'+unlockText+"</span></button>")+"</p>"}html=(html+="<p>")+'<button is="emby-button" type="button" class="raised button-cancel block btnRestorePurchase"><span>'+iapManager.getRestoreButtonText()+"</span></button></p>",subscriptionOptions.length&&(html=(html=(html+='<h1 style="margin-top:1.5em;">'+globalize.translate("HeaderBenefitsEmbyPremiere")+"</h1>")+'<div is="emby-itemscontainer" class="itemsContainer benefitsItemsContainer vertical-list" style="margin-bottom:1em;"></div>')+'<h3 class="secondaryText">'+globalize.translate("AndMuchMoreExclamation")+"</h3>"),html=(html=(html="playback"===dialogOptions.feature?(html+="<p>")+'<button is="emby-button" type="button" class="raised button-cancel block btnPlayMinute"><span>'+globalize.translate("ButtonPlayOneMinute")+"</span></button></p>":html)+getTermsOfPurchaseHtml()+"</form>")+"</div></div>",dlg.innerHTML=html,document.body.appendChild(dlg);let btnPurchases=dlg.querySelectorAll(".btnPurchase");for(i=0,length=btnPurchases.length;i<length;i++)btnPurchases[i].addEventListener("click",onPurchaseButtonClick);for(btnPurchases=dlg.querySelectorAll(".buttonPremiereInfo"),i=0,length=btnPurchases.length;i<length;i++)btnPurchases[i].addEventListener("click",showExternalPremiereInfo);let resolveWithTimeLimit=!(isCurrentDialogRejected=!0);dialogOptions=dlg.querySelector(".btnPlayMinute");dialogOptions&&dialogOptions.addEventListener("click",function(){resolveWithTimeLimit=!0,isCurrentDialogRejected=!1,dialogHelper.close(dlg)}),dlg.querySelector(".btnRestorePurchase").addEventListener("click",function(){restorePurchase(unlockableProductInfo)}),loading.hide(),dlg.classList.add("inAppPurchaseOverlay"),dlg.addEventListener("open",function(){initSubscriptionBenefitsItemsContainer(dlg)}),dialogHelper.open(dlg).then(function(){var rejected=isCurrentDialogRejected;clearCurrentDisplayingInfo(),rejected?reject():resolveWithTimeLimit&&resolve({enableTimeLimit:!0})})}function getSubscriptionBenefits(){var list=[];return list.push({Name:globalize.translate("HeaderFreeApps"),Icon:"&#xe5CA;",ShortOverview:globalize.translate("FreeAppsFeatureDescription")}),list.push({Name:globalize.translate("HeaderOfflineDownloads"),Icon:"&#xe5db;",ShortOverview:globalize.translate("HeaderOfflineDownloadsDescription")}),list.push({Name:globalize.translate("HeaderHardwareAcceleratedTranscoding"),Icon:"transform",ShortOverview:globalize.translate("HeaderHardwareAcceleratedTranscodingDescription")}),list.push({Name:globalize.translate("LiveTV"),Icon:"&#xe639;",ShortOverview:globalize.translate("LiveTvFeatureDescription")}),list.push({Name:"Emby DVR",Icon:"&#xe1B2;",ShortOverview:globalize.translate("DvrFeatureDescription")}),list.push({Name:globalize.translate("HeaderCinemaMode"),Icon:"&#xe02C;",ShortOverview:globalize.translate("CinemaModeFeatureDescription")}),Promise.resolve({Items:list,TotalRecordCount:list.length})}function onPurchaseButtonClick(){let featureId=this.getAttribute("data-featureid");"true"===this.getAttribute("data-email")?getUserEmail().then(function(email){iapManager.beginPurchase(featureId,email)}):iapManager.beginPurchase(featureId)}function restorePurchase(unlockableProductInfo){let dlg=dialogHelper.createDialog({size:layoutManager.tv?"fullscreen-border":"medium-tall",removeOnClose:!0,scrollY:!1}),html=(dlg.classList.add("formDialog"),"");html=(html=(html=(html=(html=(html=(html=(html=(html+='<div class="formDialogHeader">')+'<button type="button" is="emby-dialogclosebutton"></button><h3 class="formDialogHeaderTitle">')+iapManager.getRestoreButtonText())+"</h3></div>")+'<div is="emby-scroller" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="true" class="formDialogContent"><div class="scrollSlider">')+'<div class="dialogContentInner dialog-content-centered padded-left padded-right"><p style="margin:0 0 2em;">')+globalize.translate("HowDidYouPay"))+"</p><p>")+'<button is="emby-button" type="button" class="raised button-cancel block btnRestoreSub"><span>'+globalize.translate("IHaveEmbyPremiere")+"</span></button></p>",unlockableProductInfo&&(html=(html+="<p>")+'<button is="emby-button" type="button" class="raised button-cancel block btnRestoreUnlock"><span>'+globalize.translate("IPurchasedThisApp")+"</span></button></p>"),html=(html+="</div>")+"</div></div>",dlg.innerHTML=html,document.body.appendChild(dlg),loading.hide(),dlg.querySelector(".btnRestoreSub").addEventListener("click",function(){dialogHelper.close(dlg),showAlert({text:globalize.translate("MessageToValidateSupporter"),title:"Emby Premiere"})});unlockableProductInfo=dlg.querySelector(".btnRestoreUnlock");unlockableProductInfo&&unlockableProductInfo.addEventListener("click",function(){dialogHelper.close(dlg),iapManager.restorePurchase()}),dialogHelper.open(dlg)}function getUserEmail(){if(connectionManager.isLoggedIntoConnect()){var connectUser=connectionManager.connectUser();if(connectUser&&connectUser.Email)return Promise.resolve(connectUser.Email)}return showPrompt({label:globalize.translate("LabelEmail")})}function onProductUpdated(e,product){let resolve=currentDisplayingResolve;var feature;product.owned&&resolve&&currentDisplayingProductInfos.filter(function(p){return product.id===p.id}).length?(isCurrentDialogRejected=!1,cancelInAppPurchase(),resolve()):(feature=currentValidatingFeature)&&iapManager.isUnlockedByDefault(feature).then(function(){isCurrentDialogRejected=!1,cancelInAppPurchase(),resolve&&resolve()})}function showPremiereInfo(){return appHost.supports("externalpremium")?(showExternalPremiereInfo(),Promise.resolve()):iapManager.getSubscriptionOptions().then(function(subscriptionOptions){return showInAppPurchaseInfo(subscriptionOptions,null,{title:"Emby Premiere",feature:"sync"})})}events.on(iapManager,"productupdated",onProductUpdated);export default{validateFeature:validateFeature,showPremiereInfo:showPremiereInfo};