{"version":3,"sources":["header.js","lm-draggable/lm-draggable.js","lm-select/lm-select.js","templates.js","app.js","route.js","slide-animation.js","administration/administration.srv.js","administration/instances.controller.js","administration/permissions.controller.js","billing/billing.srv.js","billing/invoice.controller.js","billing/playplal-express.controller.js","billing/playplal-payflow.controller.js","billing/stripe.controller.js","application/application.controller.js","application/application.srv.js","contacts/contacts.controller.js","contacts/contacts.srv.js","catchup/catchup.controller.js","drm/drm.srv.js","drm/google-drm.controller.js","drm/nagra.controller.js","drm/verimatrix.controller.js","favorites/favorites.controller.js","epg/catchup-2-0.controller.js","epg/catchup.srv.js","epg/epg-import.controller.js","epg/epg.controller.js","epg/epg.srv.js","geoip/geoip-rules.controller.js","greetings/greetings.controller.js","greetings/greetings.srv.js","group/group.controller.js","group/group.srv.js","import/import.controller.js","import/import.srv.js","infrastructure/cdn.controller.js","infrastructure/delivery-method.controller.js","infrastructure/infrastructure.srv.js","infrastructure/monitoring.controller.js","infrastructure/servers.controller.js","live/live.controller.js","live2/live.controller.js","meta/meta.controller.js","npvr/records.controller.js","offer/offer.controller.js","offer/offers.srv.js","owner-auth/owner-auth.controller.js","package/package.controller.js","package/package.srv.js","plan/plan.controller.js","plan/plan.srv.js","profile/profile.controller.js","profile/profile.srv.js","register/register.controller.js","register/register.srv.js","sessions/sessions.controller.js","showcase/showcase.controller..js","showcase/showcase.srv.js","statistics/overview.controller.js","statistics/reports.controller.js","statistics/staistics.srv.js","subscribers/subscriber.srv.js","subscribers/subscribers.controller.js","superuser/superuser.controller.js","superuser/superuser.srv.js","vod/vod.controller.js","vod2/vod.controller.js","welcome/welcome.controller.js","welcome/welcome.srv.js","application/ng/banners.controller.js","application/rails/rails.controller.js","IMDb/imdb-fetcher.srv.js","category/category.srv.js","asset/assets.srv.js","countries/countries.srv.js","cron/cron.srv.js","genre/genre.srv.js","keys/keys.srv.js","metadata/metadata.srv.js","supervisor/supervisor.srv.js","supervisor-api/supervisor-api.srv.js","timezone/tz.srv.js","validator/validator.srv.js","url/url.srv.js","virtual-live-api/virtual-live-api.srv.js","youtube/youtube.srv.js","ads/ads.rsc.js","ads/ads.srv.js","asset/asset.rsc.js","asset/asset.srv.js","asset-viewing-events/asset-viewing-events.rsc.js","category/category.rsc.js","content-node/content-node.rsc.js","country/country.rsc.js","device/device.rsc.js","dvr-tasks/dvr-tasks.rsc.js","dvr-tasks/dvr-tasks.srv.js","epg-channel/epg-channel.rsc.js","favourites/favourites.rsc.js","genre/genre.rsc.js","geoip/geoip-rules.rsc.js","group/group.rsc.js","live-event/live-event.rsc.js","live-event/live-event.srv.js","manager/manager.rsc.js","npvr-node/npvr-node.rsc.js","operator/operator.rsc.js","operator/operator.srv.js","operator/operator.v2.rsc.js","person/person.rsc.js","platform/platforms.rsc.js","provider/provider.rsc.js","rails/rails.rsc.js","replication/replications.rsc.js","session/session.rsc.js","stb-model/stb-model.rsc.js","studio/studio.rsc.js","subscriber/subscriber.rsc.js","subscriber/subscriber.srv.js","subscriber/subscriber.v2.rsc.js","subscription/subscription.rsc.js","subscription-plan/subscription-plan.rsc.js","lm-asset-localization/lm-asset-localization.js","lm-catchup-player/lm-catchup-player.js","lm-confirm-window/lm-confirm-window.js","lm-datepicker/lm-datepicker.js","lm-datepicker2/lm-datepicker.js","lm-duration/lm-duration.js","lm-dropdown/lm-dropdown.js","lm-image-upload/lm-image-upload.js","lm-inline-datepicker/lm-inline-datepicker.js","lm-input-field/input-field.js","lm-jwplayer/jw-player.js","lm-manage-epg-channels-window/lm-manage-window.srv.js","lm-manage-subscribers-window/lm-manage-window.srv.js","lm-manage-window/lm-manage-window.srv.js","lm-modal-window/lm-modal-window.js","lm-monitoring-widget/monitoring-widget.js","lm-pagination/pagination.js","lm-ripple/lm-ripple.js","lm-search-tokens/search-token.js","lm-select-multiple/lm-select-multiple.js","lm-select-multiple-group/lm-select-multiple-group.js","lm-showcase/lm-showcase.js","lm-tabs/tabs.js","lm-tags/lm-tags.js","lm-textarea-field/textarea-field.js","lm-toast/lm-toast.js","lm-tooltip/tooltip.js","lm-video-upload/lm-video-upload.js","lm-virtual-playlist/lm-virtual-playlist.js","src-err/src-error.js","lm-asset-edit/live/edit-live.js","lm-asset-edit/movie/edit-movie.js","lm-asset-edit/live2/edit-live.js","lm-asset-edit/tv-series/edit-tv-series.js","lm-asset-edit/tv-episode/edit-tv-episode.js","lm-asset-edit/season/edit-season.js","lm-assets-edit/live/edit-live.js","lm-assets-edit/movie/edit-movie.js","lm-assets-edit/tv-episode/edit-tv-episode.js","lm-assets-edit/tv-series/edit-tv-series.js","lm-assets-edit/virtual-live/virtual-live.js","lm-showcase/application-android/application-android.js","lm-showcase/application-ios/application-ios.js","lm-showcase/application-ott-web/application-ott-web.js","lm-showcase/tile-asset/tile-asset.controller.js","lm-showcase/tile-asset-collection/tile-asset-collection.controller.js","lm-showcase/tile-back/tile-back.controller.js","lm-showcase/tile-epg/tile-epg.controller.js","lm-showcase/tile-external-app/tile-external-app.controller.js","lm-showcase/tile-external-url/tile-external-url.controller.js","lm-showcase/tile-favorites/tile-favorites.controller.js","lm-showcase/tile-logo/tile-logo.controller.js","lm-showcase/tile-nop/tile-nop.controller.js","lm-showcase/tile-rdvr/tile-rdvr.controller.js","lm-showcase/tile-recent/tile-recent.controller.js","lm-showcase/tile-search/tile-search.controller.js","lm-showcase/tile-settings/tile-settings.controller.js","lm-showcase/tile-showcase/tile-showcase.controller.js","lm-showcase/tile-slider/tile-slider.controller.js","lm-showcase/tile-support/tile-support.controller.js","lm-table-rows/channel-row/channel-row.js","lm-table-rows/common-asset-row/common-asset-row.js","lm-table-rows/movie-row/movie-row.js","lm-table-rows/playlist-asset-row/playlist-asset-row.js","lm-table-rows/tv-episode-row/tv-episode-row.js","lm-table-rows/tv-season-row/tv-season-row.js","lm-table-rows/tv-series-row/tv-series-row.js","lm-table-rows/virtual-channel-row/virtual-channel-row.js","footer.js"],"names":["guid","s4","Math","floor","random","toString","substring","escapeRegExp","string","replace","translit","value","space","text","toLowerCase","transl","а","б","в","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я"," ","_","`","~","!","@","#","$","%","^","&","*","(",")","-","=","+","[","]","\\","|","/",".",",","{","}","'","\"",";",":","?","<",">","№","result","current_sim","i","length","undefined","filterEffects","effects","effectAllowed","filter","effect","indexOf","makeid","characters","charactersLength","charAt","underscore","angular","module","factory","window","hostname","location","host","protocol","document","ready","event","addProp","lh","common","config","set","endpoint","port","timeout","loggingLevel","lmApp","$kookiesProvider","json","run","$templateCache","put","$provide","$httpProvider","$compileProvider","aHrefSanitizationWhitelist","isRequestExcluded","response","url","headers","hasOwnProperty","interceptors","push","$q","$location","$rootScope","responseError","status","logOut","path","reject","decorator","$delegate","seqAll","promises","recursive","promise","j","then","data","results","keys","size","deferred","resolve","error","key","defer","$kookies","$compile","$timeout","AssetService","AuthenticationService","ModalWindowService","ToastService","ApiService","SuperuserSrv","AdministrationService","EVENTS","globals","isMenuOpen","JSON","parse","localStorage","isMenuManual","currentOperator","id","title","getHLSPlayerURL","src","getUtilsConfig","operator","logo","small","big","menu","get","params","region","s3_signature_version","Bucket","accessKeyId","secretAccessKey","aws","AWS","S3","$on","self","name","permissions","sections","GetParseAccountPermissions","infrastructure","isBoolean","stripe","clientId","isLive","_getServiceIcon","service","iconName","_getServiceName","go","isString","currentPath","defaultRoute","$broadcast","isSuperuser","currentUser","currentRoute","remove","clear","authToken","defaultAdminRoute","origin","account","operatorToken","operatorId","operatorName","accounts","company_name","projectName","system","init","token","SetToken","supervisorToken","GetOperators","find","_self","Request","reason","debugInfo","GetPlatforms","platforms","allow","ParseAccountPermissions","clearRoute","nextR","currentR","search","next","current","HideBig","HideSmall","split","permission","mode","isDashboardPage","isLoginPage","isRegisterPage","pop","ClearCredentials","exeption","namespace","isEmpty","project","stack","message","format","moment","utc","timestamp","unix","stringify","type","ga","console","log","e","Small","color","icon","blocked","debuggerInner","Open","content","actions","fn","s","toggleMenu","stopPropagation","preventDefault","showLinearProgress","element","show","hideLinearProgress","hide","locale","addEventListener","$routeProvider","$locationProvider","when","templateUrl","controller","redirectTo","reloadOnSearch","otherwise","history","pushState","html5Mode","enabled","requireBase","animation","enter","doneFn","jQuery","fadeIn","move","leave","fadeOut","Sections","application","route","isExpand","vod","live","catchup","metadata","packages","subscribers","list","groups","favorites","sessions","restrictions","geoip-rules","npvr","records","billing","stripeconnect","offers","plans","statistic","overview","reports","epg","channels","epg-import","servers","parsedPermissions","notSave","copy","forEach","group","readOnly","section","subsection","contacts_help","admin","operators","count","se","sus","CreateAccount","email","password","first_name","firstName","last_name","lastName","join","SetAccountGroups","account_id","RemoveAccount","$scope","$routeParams","ManagerResource","TimezoneService","OperatorService","CronService","ReplicationResource","loading","replications","replication","activeReplication","totalLive","totalVOD","croneConfig","options","allowMinute","allowHour","allowYear","croneInitTime","resources","ext_id","resourceMap","jsonReplicationToNorm","processed","createTime","create_time","updateTime","update_time","scheduleTime","cron","syncSchedule","cronTimeToText","access_token","nextRunTime","next_run_time","checkedOperator","valid","lastRun","runTime","state","runs","sync","elements","last_run","jsonReplicationRunToNorm","lastUpdateTime","normReplicationToJson","timezone","Timezones","tz","$promise","manager","username","ui_timezone","convertTime","dt","addTimezoneToDate","getReplications","routeReplicationId","setActiveReplication","getToken","authError","GetToken","login","checkToken","CheckToken","editReplication","replicationValidateErrors","showLoginForm","update","inner","keyboard","check","trim","updateActiveReplication","create","source","$event","syncNow","updated","isActiveReplicationSet","removeReplication","modalWindowScope","$new","clearActiveReplication","onComplete","$destroy","limit","offset","getRuns","activeReplicationNextPage","activeReplicationPrevPage","max","replication_id","Number","ValidatorService","getManagers","managers","_isCurrentAdmin","accountsCollection","map","_permissions","_onSelfUpdate","toggleAccount","setPermission","savePermissions","permission1","permission2","removeAccount","index","splice","createNewAccount","_createInner_","newAccount","_errors","Email","setManagerPassword","newPassword","errors","Password","setPassword","EbsStripeInstall","code","livemode","EbsStripeUninstall","GetBillingSubscriptions","GetBillingSubscriptionsDetailsForPeriod","period_id","bill","GetInvoicePreview","invoice","GetPaypalExpress","paypal_user","paypal_password","paypal_password2","paypal_signature","SavePaypalExpress","GavePaypalPayflow","payflow_partner","payflow_vendor","payflow_user","payflow_password","SavePaypalPayflow","$window","$interpolate","BillingService","getProductInfoAndCost","total","products","obj","items","currentPeriod","answer","productInfoAndCost","reduce","item","product_code","amount","openPage","act","popupWin","open","screen","height","dueDate","due_time","subtract","invoiceDate","tpl","html","onload","print","write","body","close","pdf","jsPDF","addHTML","output","subscriptionPeriods","subscription","periods","period","start","end","plan","product","$watch","newValue","oldValue","isEqual","paypalExpress","validateErrors","selectedNode","_validate","getPaypalExpressSettings","savePaypalExpressSettings","paypalPayflow","getPaypalPayflowSettings","savePaypalPayflowSettings","$interval","SupervisorService","stripeStatus","stripeConnect","encodeURIComponent","innerWidth","innerHeight","stripeDisconnect","devmode","stripeCode","addClass","Big","stripeError","Self","services","selfInt","selfIntInProgress","cancel","ShowcaseService","tab","currentApplication","currentPlatform","_getApplication","currentService","instance","platform","platformCollection","GetShowcases","showcaseCollection","_parseApplication","collecion","aliases","configuration","service_name","logo_url","bg","labels","GetTileByShowcaseId","collection","background","_ParseTile","_PrivateData","showcase_id","slider","banners","CreateCNAME","alias","RemoveCNAME","UpdatePlatform","platformData","platform_id","app_url","request","post","EpgService","AssetResource","LiveEventResource","currentChannel","processChannel","asset","catchupDepth","streamHLS","streamDASH","streamHLSId","streamDASHId","recorded","catchupResources","resource","category","round","catchup_depth","streamHLSResources","streamDashResources","recordStat","liveMap","getRecords","live_id","end_time","start_time","played","diff","ch","getChannels","assets","date","searchEvent","searchFiel","processLiveEvent","liveEvent","description","startTime","endTime","pictureURL","thumbnail","getEvents","channel","_Events","liveEvents","le","setActiveChannel","collapseProgramme","selectedStream","selectedStreamEscaped","selectedStreamError","isHLSSupported","hlsResourceId","getHLSStream","getStream","resourceId","escape","routeDate","currentDate","live.id[eq]","end_time[gt]","startOf","start_time[lt]","endOf","$expand","watcher","isActiveChannel","isActiveEvent","currentProgramm","expandProgramme","hlsStream","hlsStreamEsc","hlsStreamErr","dashStream","dashStreamErr","license","getCatchupHLSStream","getCatchupDashStream","getDashStream","routeChannelId","channel_id","GetVerimatrix","serverAddress","keyReqTimeout","httpApiPass","httpApiConfirm","enableRandKey","enableRandResourceId","nodes","sourceDesc","liveResourceIdRange","vodResourceIdRange","SaveVerimatrix","GetGoogleDrm","provider","owner","licenseKey","SaveGoogleDrm","GetNagra","prmServerURL","SaveNagra","DrmService","googleDrmData","getGoogleDrm","saveGoogleDrmSettings","NagraDrmData","getNagra","verimatrixData","verimatrixMessages","Numerical","getVerimatrixData","saveVerimatrixSettings","addNode","removeNode","isNodeSelected","selectNode","$filter","SubscriberResource","FavouritesResource","favourites","searchField","topFavourites","resultCount","topOffset","topLimit","topType","topCollection","subscriberMap","assetMap","getSubscribers","ids","reqList","idPart","slice","id[in]","all","values","user","getAssets","getFavourites","subscriberIds","assetIds","assetCount","record","subscriber_id","asset_id","assetId","assetName","assetType","categories","topResult","sortBy","reverse","nextPage","prevPage","nextTopPage","prevTopPage","filterTop","showChannels","topFavourite","refreshPage","setSearchField","searchWatcher","newVal","criterion","tmp","keyword","catchup2","correction","_status","is_catchup_available","MetadataService","CatchupService","loadingFrame","catchupData","playerData","intervalForPreview","intervalForPreviewInAction","_CSS","frame","activeChannel","isShown","_STREAM_TYPES_ATTRS","parseCorrectionStatus","_date","toUpperCase","_color","parseCorrectionProcess","noCorrection","corrections","successCorrection","processingCorrection","pendingCorrection","errorCorrection","correctionTime","findLast","_class","_checkPreviewInterval","GetCatchup2Preview","preview","_media","GetCatchup2PreviewMedia","_checkCorrectionInterval","intervalForCorrection","needNewPreview","intervalForCorrectionInAction","GetCatchup2Events","correction_time","getAllCatchupChannels","GetAllAvailableCatchupChannels","_deployed","stream","stream_type","_has_youtube","_stream_type","poster","is_deployed","_rentalStatus","rental_status","_rentalWindow","Rental","Check","_catchup","_npvr","currentEpgEvent","selectedDay","parseInt","getEpgEvents","dateWatcher","isSame","isActiveChannelSet","clearActiveChannel","setActiveProgram","references","isLocked","allQ","GetCatchup2References","q","start_correction","program","reference","_url","GetCatchup2ReferenceImg","getCatchupMediaStream","isActiveProgram","toggleSearch","focus","GetEpgEvents","epg_channel_id","events","isNow","routeProgramId","deleteReferenceImg","DeleteCatchup2ReferenceImg","setFilter","program_id","SetCatchup2References","reference_url","_ids","event_id","CreateCatchup2Preview","del","GetCatchup2ReferenceFromMedia","position","GetCatchup2ThumbnailImg","ManageEPGChannelsWindow","URLService","openChannelWindow","_assets","assetCache","manageChannelsFn","manageChannelsFromModal","currentCollection","task","activeSource","searchKeyword","epgSourceCollection","epgTasksCollection","newSource","default_image","newImportTask","shown","schedule_time","allSources","channelEvents","scheduleListView","_parseImportTask","is_active","_lastImportTime","last_import_time","getImportSourceCollection","GetEpgSources","lastImportTime","routeSourceId","setActiveSource","getImportTasksCollection","GetEpgImportTasks","isActiveSourceSet","getImportTaskDetail","clearActiveSource","createNewEpgSource","createTpl","defPicture","urlParts","parseURL","joinURLParams","CreateNewEpgSource","show_fn","updateEpgSource","deleteEpgSource","DeleteEpgImport","epgIDs","type[eq]","epg.id[in]","isNew","createEpgImportTask","CreateEpgImportTask","updateEpgImportTask","UpdateEpgImportTask","toAdd","toRemove","toThis","getChannelEPG","isFixed","l","_start","_end","changeView","v","source_id","currentEpg","collectionData","empty","getEpgCollection","GetEpgIDCollection","lastImport","_day","GetPoster","picture","day","channelIds","duration","models","epgEvent","methods","getPosterUrl","epg_channel_ids","force_now","schedule_id","GeoIPRules","GroupResource","CountriesService","processRules","rules","subject_type","_country","countries","subject","_group","groupCache","_description","ruleDescription","isNewRuleValid","newRuleValidateErrors","newRule","subnet","IPWithMask","subnetText","singleIP","IP","singleIPText","country","normRuleToJsonAPI","rule","r","policy","endsWith","groupName","orderBy","_newRule","Countries","getRules","groupIDs","changeOrder","field","startsWith","createNewRule","newRuleList","saveNewRule","updatedRules","priority","oldVal","newItem","deleteRule","reorderRules","reorderedList","GreetingsService","smallPreloaderIndex","preloaderIndex","preloaderMessages","image","activationFormData","isActivationComplete","checkCode","this","Confirm","intPreloadSmall","newIndex","intPreload","newIndex_","mystery","ack","GroupService","SubscriberService","ManageAssetsWindow","ManageSubscribersWindow","groupCollection","activeGroup","newGroup","_tab","specialGroup","_packageCount","tooltip","isCurrentTab","setCurrentTab","extend","UPDATE_GROUP_COLLECTION","_ParseGroup","selectedAsset","selectedUser","assetLoading","userLoading","SearchByKeyword","onlyPackages","GetSubscribersByGroup","users","updateGroupCollection","GetGroups","0","routeGroupId","setActiveGroup","_userCount","group_id","groupId","titles","package","is_available","assetsCount","isActiveGroupSet","clearActiveGroup","toggleAssetSelection","idx","isSelected","removeSelectedAsset","RemoveAsset","manageAssetsFromGroup","addIds","add","AddAsset","removeIds","openAssetWindow","OpenManageAssetsWindow","manageAssetsFn","toggleUserSelection","removeSelectedUser","RemovePrincipal","manageSubscribersFromModal","subscriber","AddPrincipal","openUserWindow","manageSubscribersFn","createNewGroup","extId","CreateGroup","unshift","updateGroup","UpdateGroup","parent_id","removeGroup","$$listeners","Date","now","GetGroupsByIds","parnt","groups_ids","users_ids","principal_id","asset_ids","AddOffer","offer_ids","offer_id","RemoveOffer","ImportService","taskState","byDate","from","to","editorOptions","lineNumbers","indentWithTabs","parseTaskStatus","parseNodeStatus","node","warnings","parseTask","isActive","expand","warningFilter","errorFilter","_Items","failed_items_count","errorCount","warnings_items_count","warningCount","last_update_time","finish_time","parseNode","isArray","uppercase","applyTaskFilter","applyNodeFilter","uploadXml","trigger","cancelImportTask","CancelImport","getTasks","who","GetImportTasks","isFinite","GetImportTaskById","active","getNodes","GetTaskItems","GetTaskItemsById","getNodeXml","toggleItems","GetNodeXml","xml","xmlOrigin","toggleNodeXml","saveXML","SaveNodeXml","resetXML","restartImport","RestartNodes","restartThread","deleteImport","DeleteImport","on","_progress_","_bar_","files","file","css","display","innerHTML","UploadToCloud","width","CreateNewImport","Location","off","progress","progressBar","Key","ContentType","ContentLength","Body","ACL","upload","err","persentage","loaded","xmlUrl","CreatePerformImport","schedule_item_id","import_id","schedule_item_ids","InfrastructureService","saveOriginsList","origins","cdnUrl","cdnUrlOrigin","UpdateOrigin","getOriginsList","GetOrigins","cdn_url","availableMethods","getResourcesList","GetResourceGroups","method","delivery_method","methodOrigin","saveResourceList","UpdateResource","$http","origin_id","monitoringRequest","expr","range","step","ContentNodeResource","NPVRNodeResource","DVRTasksResource","OperatorRsc","contentNodes","catchupNodes","npvrNodes","catchupCount","successDVRTasks","totalDVRTasks","npvrState","npvrLimit","sessionLimit","getOrigins","_state","_sessions","version","api","_address","pos","lastIndexOf","substr","isCatchupServer","isNPVRServer","tags","cdn","_cdn","addEditCDN","cdnValidateErrors","prefix","tag","cdnCopy","editing","saved","newCdn","deleteCDN","getNPVRNodes","_capacity","capacity","toFixed","catchupDepths","depths","d","min","getDVRTasks","state[eq]","getOperator","getCurrentOperator","subscriber_npvr_limit","playback_session_limit","ModalConfirmService","VirtualLiveApiService","UPDATE_LIVE_COLLECTION","importInProgress","getAssetType","channel_type","package_type","tv_series_episode","parseAsset","_stream_sub_type","_playlist","GetPlaylist","playlist","getTotal","filters","genres","isStart","isEnd","isSilentUpdate","byId","GetAssetById","allLive","Search","view","bind","GetAllAvailableChannels","tmpAsset","found","isSearch","href","assign","routeLiveId","currentLiveIndex","findIndex","openModal","routePage","applyFilters","deleteAsset","action","DeleteAsset","assetData","isNewType","modalScope","currentFocused","localCollection","originAssetData","traits","operator_id","is_epg_available","views","package_id","defaults","processAsset","createFn","updateFn","setCurrentQuality","Quality","SetValue","isFirst","isLast","fullscreenToogle","Close","fullscreen","Fullscreen","_modalWindow_","navigation","importPerform","broadcastListener","isUndefined","page","routeKeyword","watcherFiler","$watchCollection","GenreResource","CategoryResource","SubscriberV2Service","LiveEventService","AssetV2Service","lcn","findSubscriberLoading","selectedSubscriber","catchupSubscriber","selectedResource","urlEsc","catchupStream","extid","rotationStart","rotation_start","rotationFinish","rotation_finish","adult","vastId","vast_id","streams","streamResources","rotationPeriodOK","free","conditions","processCondition","pr","deployer","preparer","added","private","URL","depth","deployer_args","cdn_tag","c","condition","required","silent","clearSelectedVOD","selectedVOD","wvLicenseURL","fpsLicenseURL","fpsCertURL","isAssetSelected","selectVOD","selectAsset","selectedParams","getLiveEvents","purchaseOptions","packagePurchaseOptions","GetAssetInId","a","offer","packageName","reloadAsset","sortOptions","searchTimeout","findSubscriber","userList","getSubscriberStreamURL","refreshURL","getCatchupStreamURL","refreshCatchupURL","copyURL","wvLicenseURLEsc","copyCatchupURL","tempInput","createElement","style","appendChild","select","execCommand","removeChild","client_id","GetUserDeviceToken","GetProtectedStream","streamInfo","playback_url","wv_license_url","fps_license_url","fps_cert_url","GetStream","streamURL","openProgram","changeType","selectedStreamType","playAsUser","selectStreamAsUser","selectStreamAsAdmin","routeAssetId","sortWatcher","updateIntreval","newTitle","searchShow","_meta","getPromises","GetGenresCollection","GetCountriesCollection","GetCategoryCollection","studios","GetStudiosCollection","providers","GetProvidersCollection","updatePromises","Genres","UpdateGenre","UpdateCountry","Studios","UpdateStudio","Categories","UpdateCategory","Providers","UpdateProvider","createPromises","CreateGenre","CreateCountry","CreateStudio","CreateCategory","CreateProvider","deletePromises","DeleteGenre","DeleteCountry","DeleteStudio","DeleteCategory","DeleteProvider","getCollections","meta","order","setCurrentMeta","currentMeta","isCurrentMeta","showMore","deleteItem","updateItem","createItem","newExtId","Object","win","changeItemPriority","direction","isOver","showCreateWindow","className","importDefaultMetadata","ImportMetadata","createLocalizationWindow","languages","newLocalizationItem","freeLanguages","languageItem","localizationItem","localization","language","createNewLocalization","addedLocalizationItem","PatchLocalization","checkCurrentMeta","setActiveItem","activeItem","GetLocalization","isActiveItem","unsetActiveItem","deleteLocalizationItem","deletedIndex","DVRTaskService","isAllSelected","stat","getStatData","allKeys","parts","label","pending","scheduled","recording","sort","b","statArr","displayStat","toggleStat","_subscriber_ext_id","_program_name","_program_description","_channel_logo_URL","_channel_name","selected","toggleAll","Filter","SetOrder","RemoveSelectedRecords","streamLoading","licence","getHLSStreamAsAdmin","getDASHStreamAsAdmin","OfferService","getLocalCurrency","currency","availableCurrencies","getLocalDurationUnit","durationUnit","availableDurationUnits","prepareOffer","right_params","typeTitle","isFree","billing_params_price","billing_params","price","billing_params_currency","priceOuput","right_params_duration","duration_unit","right_params_duration_unit","groupsNew","groupSearch","includes","UPDATE_OFFER_COLLECTION","offerData","activeOffer","isActiveOfferSet","availableSubscription","validateFields","ValidateMetadata","Offer","getOfferCollection","GetOffers","routeOfferId","setActiveOffer","clearActiveOffer","isActiveOffer","priorityUp","priorityDown","setSubscriptionType","saveOfferStatus","UpdateOfferStatus","saveOfferOptions","CreateOffer","offer_","groupIds","difference","groupsAdd","UpdateOffer","concat","groupsRemove","toggleSelection","selectAll","removeAssetsFromOffer","createNewOffer","newOffer","manageAssetsFromOffer","documentElement","scrollHeight","offsetHeight","clientHeight","groupWatcher","isTrialAvailable","trial_duration","right_params_trial_duration","trial_duration_unit","right_params_trial_duration_unit","DeleteOffer","ext_offer","AddAssetToOffer","offers_ids","assets_ids","loginFormData","inputs","expires","PackageService","PlanService","SubscriptionPlanResource","packageCollection","offerSearch","categorySearch","savedPlans","getFilterData","groupList","categoryList","processCategory","processGroup","billingType","posters","packageAssets","getPackages2","UPDATE_PACKAGE_COLLECTION","activePackage","isActivePackageSet","_parsePackage","pkg","groupsOld","categoriesOld","categoriesNew","offersOld","offersNew","tagsOld","tagsNew","license_start","license_finish","platformsOld","Platforms","GetAvailablePlatforms","platformsNew","assetToSelection","selectPackage","GetPackageAssets","getPackageAssets","orderedAssets","planList","p","reorderContent","setPackageAssets","setActivePackage","clearActivePackage","isActivePackage","getPackages","GetPackages","routePackageId","removeAssetsFromPackage","isAssetValid","packageValidateErrors","normPackageToJson","CryptoJS","MD5","enc","Hex","comparePlans","delete","sourcePlanMap","savePackage","planDiff","newList","createNewPackage","deletePackage","manageAssetsFromPackage","scrollTop","CreatePackage","SavePackage","GetPackagePoster","vodAsset","pkg_ids","preparePlan","planData","activePlan","searchIsShown","isActivePlanSet","setTab","Plan","getPlanCollection","GetPlans","routePlanId","setActivePlan","clearActivePlan","isActivePlan","savePlanStatus","UpdatePlanStatus","savePlanOptions","CreatePlan","plann","UpdatePlan","removeAssetsFromPlan","createNewPlan","newPlan","manageAssetsFromPlan","plan_id","DeletePlan","AddAssetToPlan","ProfileService","OperatorResource","getPlatformIcon","GetPlatformIcon","getPlatformName","GetPlatformName","getAppUrl","GetPlatformApp","apps","info","profileData","operatorv2","langs","newLangValidateErrors","newLang","langCodeToTitle","lang","selectedTimezone","timezones","getSelfInfo","company","saveData","localization_languages","removeLogo","addLang","existing","query","app_name","app_bundle","app_store_url","clientID","editPlatform","editedPlatform","UpdateOperatorsPlatform","UpdateOperatorsData","UploadImage","GetOperatorData","RegistrationService","vcRecaptchaService","regEzp","setResponse","registrationFormData","recaptchaResponse","validation","recaptcha","setWidgetId","widgetId","cbExpiration","reload","isRegistrationComplete","password1","password2","invite","errorPass","errorConfirm","checkPassLength","pass1","checkPass2","pass2","errorEmail","emailIsExist","IntEmail","emailCheckInProgress","exists","test","errorName","nameIsExist","IntName","nameCheckInProgress","errorFirstName","errorLastName","errorCountry","errorCompany","errorRecaptchaResponse","errorInvite","register","Register","recaptchaReady","recaptcha_response","invite_code","urlEmail","urlName","SessionResource","secs","asHours","minutes","seconds","barChartLabelDay","t","barChartLabelDayNext","barChartLabelHour","barChartLabelHourNext","rangeChartBars","startdate","nextFunc","hours","labelFunc","labelType","bars","barOrder","getTop10Content","resourcePlayingTime","topContent","assetResourceCache","sorted","timeFilter","processSessions","currentTime","session","ticket","contentType","contentTitle","sessionStart","sessionEnd","last_use_time","closed","ip","userAgent","ua","tickedId","sessionId","device","os","deviceOS","model","deviceModel","getSessions","$orderby","ticket.media_type[eq]","$limit","$offset","resourceIDs","chart","periodStart","totalSessions","totalUniqueUsers","totalUniqueDevices","totalPlayed","sessionChartLabels","sessionChartSeries","sessionChartData","deviceChartLabels","deviceChartData","getChartData","lastSession","uniqueDevices","uniqueUsers","deviceOSCount","ios","android","others","editedLabel","assetParams","resources.id[in]","openSession","selectedSession","UPDATE_SHOWCASE_COLLECTION","SAVE_SHOWCASE_COLLECTION","showcaseData","activeShowcase","activePlatform","newShowcase","_allPredefinedLabels","_getLabels","toggleNewShowcase","createNewShowcase","showcase","CreateShowcase","SetShowcaseLabels","getShowcases","showBackground","saveShowcaseBackground","CreateBanner","banner_id","banner","UpdateShowcase","UpdateBanner","updateShowcaseLayout","_Grid","tile","isMoved","UpdateTilePosition","isLayoutChanged","restoreShowcaseLayout","_id","GetShowcasesById","addNewLabel","keyPress","keyEvent","which","newLabel","setActivePlatform","isActivePlatform","getCurrentPlatformShowcases","saveShowcase","deleteShowcase","DeleteShowcase","_parseWidgetType","_getWidgetIcon","_getWidgetName","_parseResource","parsed","args","arg","_AllShowGenresValues","desc","_AllAndroidAppValues","_AlliOSAppValues","_AllAppValues","_AllSortValues","_AllViews","_getValues","_ParseWidget","widget_attrs","warn","widget_type","isDefaultDefined","originPicture","getPictureByCategory","resource_group_id","GetAssetByExtId","genre","uiTitle","searchResult","allApps","platform_extid","app","selectedApp","Type","extids","showGenres","genres_filter_show_mode","isRequeared","asset_title","asset_description","year","asset_movie_year","asset_movie_duration","asset_genres","asset_country","asset_tile_resources","hasNewTile","delay","slider_delay","slider_items","isSliderInner","GetAvailableTiles","GetScreens","GetShowcasesByScreenId","screen_id","CreateScreen","CreateScreenVariant","GetShowcasesByLabel","background_banner_id","RemoveShowcase","tile_id","x0","x1","y0","y1","DeleteTile","CreateSliderTile","slider_id","CreateWidgetTile","widget","widget_id","CreateSlider","UpdateSlider","CreateAssetWidget","attributes","picture_url","UpdateAssetWidget","CreateExternalWidget","UpdateExternalWidget","CreateLogoWidget","UpdateLogoWidget","CreateAssetCollectionWidget","UpdateAssetCollectionWidget","UpdateUiWidget","CreateUiWidget","UpdateShowcaseWidget","selectedShowcase","CreateShowcaseWidget","UpdateExternalAppWidget","CreateExternalAppWidget","StatisticsService","reportData","getReportData","top","GetTopContent","GetHistory","responses","vodTop","last","movie","liveTop","time","GetSubscribers","collcetion","setMapsPoints","mapLoading","initialize","MY_MAPTYPE_ID","featureOpts","featureType","stylers","weight","visibility","geocoder","google","maps","Geocoder","geocode","address","GeocoderStatus","OK","mapOptions","zoom","mapTypeControlOptions","mapTypeIds","MapTypeId","ROADMAP","mapTypeId","mapTypeControl","scaleControl","streetViewControl","Map","getElementById","customMapType","StyledMapType","mapTypes","setCenter","geometry","heatmapData","res","LatLng","latitude","longitude","heatmap","visualization","HeatmapLayer","setMap","gradient","script","PseudeRandomColor","getPseudoRandomColor","reportsData","reportsList","currentReportType","totalMovies","totalActiveMovies","totalSeries","totalActiveSeries","totalEpisodes","Chart","pluginService","beforeDraw","chartInst","ctx","report","textAlign","textBaseline","datasets","dataset","getDatasetMeta","_model","font","fillStyle","fillText","_calculateValueOnTop","x","y","afterDraw","lastend","PI","radius","outerRadius","innerRadius","centerx","centery","sum","thispart","arcsector","lradius","langle","dx","cos","dy","sin","_clearObject","object","ignore","property","_spreadData","calendar","opt","statisticItem","cloneDeep","o","merge","getFormattedDate","getReportsList","GetReportsList","startFrom","prevPeriod","generateReport","nextPeriod","clone","parsedData","GetSubscriberStat","colors","series","maxed","maxBy","responsive","legend","scales","xAxes","stacked","yAxes","ticks","suggestedMax","GetActiveSubscriberStat","total_on_beginning_of_month","joined","GetDeviceStat","devices","GetPlatformColor","flatten","selectPeriod","generateLabels","backgroundColor","hidden","tooltips","GetPackagesUsage","allPackages","keyBy","mapValues","pckg","status[eq]","ActiveAssetStat","showDetails","details","active_details","inactive_details","new_details","toggleReport","GetSubscriberPurchases","GetSubscriberSubscriptions","ResetPassword","ResetRCPassword","Content-Type","transformRequest","str","subscriber_ext_id","GetSubscriberReport","X-Auth-Token","responseType","blob","Blob","objectUrl","webkitURL","createObjectURL","link","attr","download","click","GetNARSubscriberReport","GetCSVSubscriberReport","Accept","encodeURI","target","ResetPin","GetSubscriberInfo","GetSubscriberMsg","notifications","SendSubscriberMsg","msg","$resource","SubscriptionResource","DeviceResource","AssetViewingEventResource","STBModelResource","stbModels","userCount","groupFilter","setOrder","prevParams","groups.id[in]","$match","getSubscribersCount","newParams","newOffset","findCeilingOffset","getFinalCount","_tabLastActivityVersion","_devices","_subscriptions","_subscriptionOffset","_subscriptionLimit","_lastActivity","pc_pin","npvr_limit","_name","_groups","SUBSCRIPTION_STATUS_COLOR","unpaid","cancelled","trialing","SUBSCRIPTION_PERIOD","week","month","getUserSubscriptions","subscriber.id[eq]","_isCanceled","cancel_at_period_end","_statusColor","_periodUnit","period_unit","isSubscriptionActive","cancelSubscription","updatedSubscription","getUserLastActivity","getUserLastActivityV1","getUserLastActivityV2","assetResourceTypes","dvr","hls-catchup","hls-live","hls","resourceIDtoAssetTitle","getUserInfo","id[eq]","respUser","contact_email","registration_code","password_reset_code","isSTBFromSupportedDevicesList","getUserDevices","Boolean","stb","_icon","_isSTBFromSupportedDevicesList","addAsSTB","userSubscriptionsNextPage","userSubscriptionsPrevPage","setActiveSubscriber","unsetActiveSubscriber","isActiveSubscriber","updateSubscriber","Pin","sessionLimitText","npvrLimitText","contactEmailText","pinText","SwitchUserBlock","setSubscriberPassword","removeUser","deleted","len","FilterByGroups","getXLSXReport","getCSVReport","isCreationAllowed","creation","periodCount","addSubscription","newSubscription","existed","rotation_end","subscriptionErrors","period_start_time","period_end_time","changeSubscriptionPeriod","option","addSubscriber","newSubscriber","currentId","isOperatorSelected","returnToGod","viewOperator","GetAccessToken","usertype","userid","lifetime","UPDATE_VOD_COLLECTION","_rotation_start","_rotation_end","deepSearch","foundEpisode","foundEpisodeIndex","_Seasons","season","episodes","oldIndex","pullAt","seasonPushTo","allVod","GetAllAvailableVod","isEpisode","seasonsShow","tv_series_seasons","isShowen","_Parent","seasons","routeVodId","currentVodIndex","showSeasons","persons","ratings","createEpisode","parent","episode","seasonIndexNew","season_id","season_index","vod_id","genreList","type[in]","packageList","imdb","imdbVoteCount","imdb_vote_count","kinopoisk","kinopoiskVoteCount","kinopoisk_vote_count","studio","ageLimit","age_limit","mpaa","durationMin","landscapePoster","series_seasons","seriesId","seriesName","seriesStatus","seasonId","episode_season_id","seasonName","episodeIndex","episode_index","types","seriesParams","seasonIds","seasonMap","series_id","isSubAsset","pswd","validate","Login","SetCredentials","CheckAdmin","is_admin","clientSecret","lhSrv","operatorExtId","CategoryService","GenreService","AdsResource","AdsService","newBannerDefaults","pictures","_selectedTags","Screens","_link_info","_error","tagSelector","ads","capitalizeFirstLetter","parseTags","CustomTags","AutoTags","elemId","updateTags","ad","_autoTags","parseAdLink","getAds","assetIDs","parsedTags","condition_in_rotation","condition_pictures_available","convertAd","adRepresentation","createBanner","newBanner","ValidateAd","newAd","editBanner","patchedAd","updatedAd","deleteAd","openAssetSearch","changeBannerOrder","curr","prev","RailResource","selectedTab","clearActiveRail","clearActiveScreen","screens","rails","firstElement","left","sliderItems","rail","moreVariants","menuLogo","locLangs","menuIcons","menuTitles","menuOptions","scheme","menu_title","default","convertEditedMenuToJsonAPI","editedMenu","customTitle","l10n","loc","convertMenuToJsonAPI","m","normMenuObj","langCode","getScreens","k","getConfigHootko","design","getScreen","carousel","newSlide","getRail","more","getRailContent","isActiveScreenSet","isActiveRailSet","setActiveScreen","setActiveRail","rail_id","changeContent","railList","selectedRails","$apply","addScreen","isScreenValid","saveScreen","patchScreen","createScreen","addRail","isRailValid","railValidateErrors","saveRail","patch","created","createRail","deleteScreen","removeScreen","deleteRail","convertAsset","manageAssets","removed","changeRailContent","slideLeft","slideRight","editSlider","bannerList","screenTag","tagFound","patchedScreen","carousel_tag","setMenu","changeMenuOption","saveMenu","updateConfigHootko","addLocalization","addEditMenu","new","menuValidateErrors","$digest","assetOrderChanged","newOrder","assetMoved","railMoved","railOrderChanged","FetchFromIMDB","$parent","titleToShow","GetIMDBCollection","imdbInnerScope","imdbCollection","selectItem","GetIMDBItem","imdbID","pickBy","AutoFill","unescape","Title","Year","Runtime","durationNew","Plot","imdbRating","ratingsNew","votes_count","imdbVotes","Metascore","metascore","Rated","Rating","mpaaValues","posterNew","Poster","posterUrl","parseGenres","newGenres","genreSearch","genresNew","Director","parseDirectors","role","Writer","parseWriters","Actors","parseActors","union","personSearchResult","requestQ","person","SearchPerson","Country","countrySearch","countriesNew","personsNew","roles","Persons","Prepare","NAMESPACE","fetchCategories","getCategories","subscribeOnUpdate","scope","callback","processGenres","idList","genre_id","processPlatforms","processCategories","category_id","processPersons","person_id","CreateNewVod","definition","country_id","studio_id","CreateNewTVSeries","CreateNewTVSeason","tv_series","tv_series_id","CreateNewTVEpisode","CreateNewLive","er_lcn","CreateNewVirtualLive","UpdateCommonAssetMetadata","UpdateVodMetadata","UpdateTVSeriesMetadata","UpdateTVSeasonMetadata","UpdateTVEpisodeMetadata","UpdateLiveMetadata","UpdateVirtualLiveMetadata","SetAdult","has_adult_content","tagsSet","AddGenres","RemoveGenres","AddPlatforms","RemovePlatforms","AddCategory","RemoveCategory","CreatePerson","middle_name","second_name","AddPerson","RemovePerson","UpdateRentalRotation","UploadImageToCloud","UpdateVodPoster","poster_url","resource_id","AddVodPoster","viewAsset","getMediaUrl","ProcessVodStreams","streamsQ","forIn","channelId","channelType","youtube","channelParse","match","youtubeVideoRegExp","streamOld","doneWithError","toDelete","RemoveVodStream","AddVodStream","deploymentStrategy","source_type","deployment_strategy","overrideDeliveryMethod","override_delivery_method","override_original_source","streamResourceId","UpdateVodStream","streamNew","GetAssetsByGroup","GetReportData","countsQ","reqParams","GetAllAvailableMovies","GetAllAvailableSeries","opt_params","opt_options","CatchupDisable","CatchupEnable","catchup_source","stream_url","NpvrDisable","NpvrEnable","npvr_source","Response","imdbId","GetIMDBPoster","AddRating","rating","RemoveRating","UpdateRating","avg_value","rating_id","getChannelByLcn","days","1","2","3","4","5","6","months","7","8","9","10","11","12","monthSuffix","input","prototype","pad","String","cronTime","fr","getCronFreq","base","minuteValue","dayValue","dayOfMonthValue","monthValue","frequency","hourValue","fetchGenres","getGenres","Keys","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","CAPS_LOCK","ESCAPE","SPACE","PAGE_UP","PAG_DOWN","END","HOME","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","DELETE","randomColor","dash","placeholder","dash_live","hls_live","shoutcast","dvb","getStreamTypeAttrs","LocalizationManager","GetValues","isMoment","inProgress","provider_id","isNumber","Update","oldGenres","diffToRemove","diffToAdd","reasons","oldCategories","newCategories","_personRoles","inCollection","FindInCollection","Process","Add","Remove","Create","indexInRoles","PersonsManager","personsToCompare","personSearchInnerScope","rolesSearch","tmpPerson","unwatch","processPerson","availablePersonRoles","originAsset","createPerson","isNewPerson","scrollbarHeight","onInit","oldPersons","newPersons","oldPlatforms","newPlatforms","_types","GetValue","IsRating","rating_extid","oldRatings","newRatings","qualityFormat","Catchup","ChangeValue","catchupNew","streamsResources","isEnabled","Catchup2","Npvr","npvrNew","Vod","errorValue","Live","lcnText","VirtualLive","TVSeries","TVEpisode","episodeIndexNew","parseFloat","unit","trial_unit","Package","EpgImport","MediaManager2","oldResource","cdnTags","MediaInnerScope","resourceCategory","templates","tmpMedia","template","drm","edit","deployerArgs","selectType","processMedia","ext","urlWithoutQuery","YoutubeChannel","YoutubeUser","YoutubeVideo","MediaManager","success","uploadInProgress","showAdvanced","toggleAdvanced","selectFile","_fileInput_","_form_","reset","trailersResources","strategy","getTime","usernameRegExp","emailRegExp","urlRegExp","passwordRegExp","youtubeChannelRegExp","youtubeUserRegExp","pinRegExp","ipAddressWithMaskRegExp","ipAddressRegExp","Username","Url","Undefined","Logical","h","parseURLEncodedTextArray","decodeURIComponent","JSONRequest","PlainRequest","SetPlaylist","SetStartTime","FetchFromYoutube","youtubeInnerScope","youtubeCollection","searchFromYoutube","isYoutube","userlId","videoId","snippet","thumbnails","high","publishedAt","errorMsg","streamUrl","transformResponse","fromJson","assetLink","externalLink","X-Instance-Check","createSeason","streamFormat","liveEventId","pick","toJson","interceptor","take","accountId","subscriberId","address_country","address_city","city","setPass","resetPass","setPin","grant_type","device_id","directive","restrict","IMDbService","YoutubeService","assetsLocalization","newLocalizationWindow","attrs","_player_","_frame_","player","volume","progressPrefix","progressPostfix","progressPlayed","progressBuffer","progressHr","padding-top","progressDetect","thumbnailGridWidth","toHHMMSS","sec_num","abs","_onCanPlay","_playerReady","_onLoadStart","_onSeeking","_playerSeeking","_onSeeked","_onTimeUpdate","_onProgress","buffered","_onVolumeChange","isMuted","muted","_onPlay","isPlaing","_onPause","_onDurationChange","isReady","previewWatcher","_window","correctionWatcher","play","pause","seek","offsetX","jump","toggleMute","onImgLoad","unbind","getIt","_frame","createPreview","setReferenceImg","invisibleImg","thumbnailPosition","seekTime","overTime","z-index","appendTo","one","tumbnail","background-image","background-position","_onKeyDown","confirmScope","_confirm","passCheck","confirm","_confirm_element_","overlay","append","isKeyevent","FinalCallback","InitCallback","TweenMax","ease","Expo","easeInOut","opacity","pageYOffset","removeAttr","KeyService","ngModel","ngDisabled","_data_element_","selectedMoment","_RemoveTime","_OnKeyDown","_ClosePicker","_BuildMonth","weeks","done","monthIndex","_BuildWeek","number","isCurrentMonth","isToday","_OpenPicker","_picker_","selectedYear","selectedMonth","selectedDate","_empty_","removeOne","selectYear","removeTwo","selectMonth","selects","years","countTo","selectDate","previous","isSelectedMonth","isSelectedYear","today","savedInitialTime","MIME_TYPE","EDGE_MIME_TYPE","MSIE_MIME_TYPE","ALL_EFFECTS","$parse","dndDisableIf","disabled","originalEvent","dndState","isDragging","itemType","dndType","$eval","dropEffect","dndEffectAllowed","dataTransfer","dndDraggable","mimeType","setData","effectsAllowed","_dndHandle","setDragImage","dndDragstart","dndCallback","cb","none","dndDragend","removeClass","dndSelected","dragDrop","getMimeType","getItemType","isDropAllowed","listSettings","externalSources","allowedTypes","getDropEffect","ignoreDataTransfer","ctrlKey","altKey","stopDragover","invokeCallback","expression","external","getPlaceholderIndex","Array","call","listNode","children","placeholderNode","getPlaceholderElement","childNode","child","hasClass","dndAllowedTypes","dndExternalSources","horizontal","dndHorizontalList","parentNode","listItemNode","rect","getBoundingClientRect","isFirstHalf","clientX","clientY","insertBefore","nextSibling","dndDragover","getData","dndDrop","dndList","dndInserted","newTarget","elementFromPoint","contains","_dndPhShown","_duration_element_","_edit_","_inputs_","watch","_Parse","_ClickInput","_ClickElement","_Navigation","_CloseEdit","minus","plus","openEdit","inputShowen","blur","closeEdit","$document","_CloseDropdown","_OpenDropdown","_ChangePosition","_dropmenu_","_toogle_","outerWidth","overflow-y","bodyHeight","optionsHeight","optionsOffsetTop","bodyScrollTop","_container_","_ChangeSize","overflow","scrollLeft","clearProps","transclude","toggle","container","errorSrc","showButton","shadow","transparent","buttonPosition","onUpload","maxHeight","maxWidth","_image_element_","_input_","rnd","uploadTo","noFuture","noPast","noSelects","showBefore","_date_element_","_table_","isMonth","slideToDay","isSelectedDay","ind","elem","countYear","countMonth","endlineIcon","ngModelOptions","ngReadonly","errorFn","warning","warningFn","successFn","isLong","isBordesless","onKeyPress","onFocus","onBlur","isFocused","isInline","mt0","$observe","_onFocus","_onBlur","_onKeyPress","timeoutFocused","focusMe","noCloseButton","hlshtml","isPlayableSource","jwplayer","modes","getStretch","getNextStretch","playbackError","setup","sources","withCredentials","stretching","skin","primary","autostart","$element","addButton","experimentalFeatureWatcher","newV","oldV","urlWatcher","load","linkWatcher","windowScope","manageChannels","fullscreenToggle","addChannelTo","inCurrent","removeChannelFrom","manageChannelsFor","isSelectedAll","isSingle","is_force","manageSubscribers","single","addSubscriberTo","inNew","removeSubscriberFrom","manageSubscribersFor","packageAssetManageScope","addAssetTo","removeAssetFrom","manageAssetsFor","windowContainer","ScopesList","_window_","_CreateAction","_modal_element_","_navigation_element_","_content_element_","_fotter_element_","withActions","onResize","controls","stepDiv","endDate","widgetData","widgetReloading","showControls","getColor","parseRange","tokens","w","make_x_axis","xRange","d3","svg","axis","scale","orient","make_y_axis","yRange","bisectDate","bisector","getInitData","metrics","datas","humanX","updateData","watcherControl","watcherData","noData","realHeight","sizes","HEIGHT","MARGINS","bottom","realWidth","WIDTH","right","lineFunc","line","interpolate","logY","clamp","linear","minX","kv","maxX","maxY","domain","nice","xAxis","tickSize","yAxis","tickFormat","LN10","canvas","tooltip_dot","tooltip_item","distanceOld","distanceNew","coords","mouse","invert","ds","d0","d1","sqrt","tooltip_text","offsetWidth","tooltipItemText","extraMargin","partData","zeroY","_resizeWidget","nextFn","prevFn","maxLength","maxPage","offsetWatcher","maxLengthtWatcher","waveMe","ripple","class","lmWaves","prepend","diameter","outerHeight","pageX","pageY","rippleTimeout","block","notEmpty","_token_element_","setDropdownCss","_dropdown_","_searchField_","buildFilters","removeSearchDropdown","showSearchDropdown","$emptyDiv","isDropped","registeredNavigated","arrayObjectIndexOf","arr","equals","searchData","filterGroups","addToSelected","prevText","removeFromSelected","isTokens","clearFilters","filerCollection","RegExp","watcherFilter","withSearch","optionSection","optionType","onSelect","onSearch","_select_element_","_arrow_","_options_","_uniqId","_search_","localOptions","optWatcher","_ActivateOption","newOption","_isOutOfScroll","_SelectOption","activeOption","li","partial","contHeight","elemTop","elemBottom","isTotal","isPart","_OpenSelect","_CloseSelect","head","selectOption","f","clearSearch","toCreate","limitWatcher","_multi_element_","_body_","modelWatcher","_OpenMultipleSelect","_CloseMultipleSelect","removeFromSelection","removeTag","isSwitcher","_group_element_","isObject","n","applicationType","isFast","tileTypes","bannerName","preventAction","_getBackground","currentItem","bgSlider","isEdit","expandTile","$tile","toggleClass","isSupportTile","padding","containerWidth","containerHeigth","tileExpand","collapseTile","_Size","margin","span_x","span_y","deleteTile","rebuildGrid","createNewTile","editBgSlider","widgetsVariants","prevSlider","nextSlider","isSelectedAsset","addSliderItem","removeSliderItem","createNewSliderItem","slideReorder","swap","_tpl_","getTiles","tiles","bindDragNDrop","$emit","dragElem","isDrag","targetElem","coords_elem","cloneWith","coords_target","reBuildGrid","isTarget","newTile","newSize","$container","showcase_tile","tileScope","setCSS","buildGrid","max_x","max_y","sizeTmp","newTileTypeCss","showcaseBackgroudBanner","buildSupportGrid","sizeX","sizeY","isEmptyPlace","setStep","isStep","newType","typeSelect","confirmNew","isThisTypeSelected","watchRegister","_onResize","resizeTimeout","tabsData","_tab_element_","isOpen","_buildServices","tabs","getStyle","locationPath","activeTab","subTab","activeSubTab","setActiveTab","setActiveSubTab","activeTabIndex","newTag","clearTagInput","addTag","focusInput","_textarea_","toastScope","_bigToast_","_smallToast_","bigToast","smallToast","_ShowBigToast","_HideBigToast","hideBigToast","_ShowSmallToast","_HideSmallToast","hideSmallToast","_tooltip_element_","setTooltipCss","_tooltip_","tooltipCSS","eventInProgress","getEvent","lmTooltip","tooltipContent","showTooltip","contents","hideTooltip","playlistData","isApproxDuration","totalDuration","_parseDuration","parsePlaylist","isMultipleOpen","getGroupDuration","real_duration","memo","getPlaylistDuration","toggleMultiplePlaylist","changeCollectionPriority","changeAssetPriority","deleteAssetFromCollection","deleteCollectionFromPlaylist","multipleGroupManage","innerScope","addSingleAsset","hls_deployment_status","addAssetToMultiplePlaylist","chain","playlistWatcher","errSrc","$set","EPGChannelResource","ProviderResource","epgChannels","processProvider","processGenre","processPackage","pack","getMeta","epgChannelList","epgChannel","providerList","channelfree","setCatchupOptions","hlsFound","getCDNTags","openMediaManager","deleteStream","$index","normStreamResourceToJson","normChannelToJson","channelValidateErrors","newChannel","compareResources","sourceResourceMap","newResources","CountryResource","StudioResource","PersonResource","newPerson","showPersonForm","processStudio","processCountry","jsonPersonToNorm","countryList","studioList","clearStudio","findPersonLoading","findPerson","personList","addPersonToList","deletePerson","togglePersonForm","personValidateErrors","normPersonToJson","normMovieToJson","movieValidateErrors","newMovie","mediaManager","nextAsset","prepareAssetForEdit","previousAsset","removeFromRotation","rentalNew","setOneMonthRotation","setOneYearRotation","qualityFormats","adultContent","rentalOld","genresOld","epgIDSearch","smallTitle","epgChannelIdOld","epgChannelIdNew","providerSearch","providersOld","providersNew","planSearch","plansOld","plansNew","packageSearch","packagesOld","packagesNew","pictureResources","resourse","posterResourceId","posterOld","original_source","noisypeak_job_is_complete","noisypeak_job_error","transcoding","noisypeak_job_progress","catchupOld","newAsset","commonMetadata","TvCategory","rental","groupToRemove","groupToAdd","concatOffersOld","concatOffersNew","offerToRemove","offerToAdd","offersAdd","offersRemove","packageToRemove","packageToAdd","packagesAdd","packagesRemove","metadataCommon","EpgSelectedChange","streamWatch","epgIdWatch","epgWatch","checkLcn","IntLcn","validateWarning","fetchFromYoutube","manageLocalizations","normSeriesToJson","seriesValidateErrors","processSeason","normEpisodeToJson","episodeValidateErrors","normSeasonToJson","seasonValidateErrors","addCatchup","deleteCatchup","personsManager","countriesOld","studioSearch","studiosOld","studiosNew","ratingsOld","mpaaRatingValues","personsOld","durationOld","trailers","metadataVod","fetchFromIMDB","setSeason","seasonIdNew","seasonIdOld","seasonIndexOld","episodeIndexOld","metadataTvSeries","playlistManager","applications","ApplicationService","showVariants","currentShowcase","currentScreen","screensCollection","showcasesCollection","availableGroups","_parseShowcase","toggleVariants","changePriority","isDown","updateShowcase","setShowcase","createNewScreen","newScreen","createNewVariant","tmpShowcase","cloneDeepWith","changeAppUrl","screenWatcher","showcaseWatcher","appWatcher","newAlias","createAlias","deleteAlias","openSearch","closeSearch","processItem","updateWidget","addAssetToTile","createWidget","allCategories","allShowGenresValues","allSortValues","constructor","tileWithSlider","tileWithSliderTypes","carusel","isHeader","actionShown","parseChannelAsset","prepareChannelStatus","posterData","needUpdate","_is_transcoding","streamData","isStreamReady","isStreamAvailable","isDeployedRes","closeStream","contentTr","watchingAssetId","openStream","insertAfter","currentTarget","changeStream","watchStream","isDASHSupported","dashResourceId","hlsResource","dashResource","getDASHStream","deleteFn","assetWatcher","editFn","getType","uiType","parseMovieAsset","prepareMovieStatus","noisypeak_job","_transcoding","parseTvEpisodeRow","prepareTvEpisodeRowStatus","newSeason","editSeason","saveSeason","toggleEpisodes","idToGet","ep","episodesQ","currentSeason","parseTvSeriesAsset","prepareTvSeriesStatus","expandFn","parsePlaylistState","parseVirtualChannelAsset","prepareVirtualChannelStatus","bootstrap"],"mappings":"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","file":"../lm.js","sourcesContent":["\"use strict\";\n\n//UNDERSCORE\nvar underscore = angular.module('underscore', []);\nunderscore.factory('_', function () {\n return window._;\n});\n\nfunction guid() {\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' +\n s4() + '-' + s4() + s4() + s4();\n}\n\nfunction escapeRegExp(string) {\n return string.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nfunction translit(value) {\n var space = '-';\n var text = value.toLowerCase();\n\n var transl = {\n 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh',\n 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n',\n 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h',\n 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': space, 'ы': 'y', 'ь': space, 'э': 'e', 'ю': 'yu', 'я': 'ya',\n ' ': space, '_': space, '`': space, '~': space, '!': space, '@': space,\n '#': space, '$': space, '%': space, '^': space, '&': space, '*': space,\n '(': space, ')': space, '-': space, '\\=': space, '+': space, '[': space,\n ']': space, '\\\\': space, '|': space, '/': space, '.': space, ',': space,\n '{': space, '}': space, '\\'': space, '\"': space, ';': space, ':': space,\n '?': space, '<': space, '>': space, '№': space\n };\n\n var result = '';\n var current_sim = '';\n\n for (var i = 0; i < text.length; i++) {\n if (transl[text[i]] != undefined) {\n if (current_sim != transl[text[i]] || current_sim != space) {\n result += transl[text[i]];\n current_sim = transl[text[i]];\n }\n }\n else {\n result += text[i];\n current_sim = text[i];\n }\n }\n\n return result;\n}\n\nvar hostname = window.location.host + '/discovery';\n\nvar protocol = window.location.protocol.replace(':', '');\n\n$(document).ready(function(){\n $.event.addProp('dataTransfer');\n});\n\n/**\n * Config for LH SDK\n */\nlh.common.config.set({\n endpoint: {\n hostname: hostname,\n port: 80,\n protocol: protocol,\n timeout: 60 * 1000 * 5\n },\n loggingLevel: 'error'\n});\n\n/**\n * Main Angular Module\n * @type {module|*}\n */\nvar lmApp = angular\n .module('lmApp', [\n 'vcRecaptcha',\n 'ngKookies',\n 'ngResource',\n 'ngRoute',\n 'ngSanitize',\n 'ngTouch',\n 'ngAnimate',\n 'underscore',\n 'angular-cron-jobs',\n 'ui.codemirror',\n 'chart.js',\n 'ngCsv'\n ]);\n\nlmApp\n .config(['$kookiesProvider',\n function ($kookiesProvider) {\n $kookiesProvider.config.json = true;\n }\n ]);\n","// In standard-compliant browsers we use a custom mime type and also encode the dnd-type in it.\n// However, IE and Edge only support a limited number of mime types. The workarounds are described\n// in https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design\nvar MIME_TYPE = 'application/x-dnd';\nvar EDGE_MIME_TYPE = 'application/json';\nvar MSIE_MIME_TYPE = 'Text';\n\n// All valid HTML5 drop effects, in the order in which we prefer to use them.\nvar ALL_EFFECTS = ['move', 'copy', 'link'];\n\nlmApp\n .directive('dndDraggable', ['$parse', '$timeout', function($parse, $timeout) {\n return function(scope, element, attr) {\n element.attr(\"draggable\", \"true\");\n\n // If the dnd-disable-if attribute is set, we have to watch that.\n if (attr.dndDisableIf) {\n scope.$watch(attr.dndDisableIf, function(disabled) {\n element.attr(\"draggable\", !disabled);\n });\n }\n\n /**\n * When the drag operation is started we have to prepare the dataTransfer object,\n * which is the primary way we communicate with the target element\n */\n element.on('dragstart', function(event) {\n event = event.originalEvent || event;\n\n // Check whether the element is draggable, since dragstart might be triggered on a child.\n if (element.attr('draggable') == 'false') return true;\n\n // Initialize global state.\n dndState.isDragging = true;\n dndState.itemType = attr.dndType && scope.$eval(attr.dndType).toLowerCase();\n\n // Set the allowed drop effects. See below for special IE handling.\n dndState.dropEffect = \"none\";\n dndState.effectAllowed = attr.dndEffectAllowed || ALL_EFFECTS[0];\n event.dataTransfer.effectAllowed = dndState.effectAllowed;\n\n // Internet Explorer and Microsoft Edge don't support custom mime types, see design doc:\n // https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design\n var item = scope.$eval(attr.dndDraggable);\n var mimeType = MIME_TYPE + (dndState.itemType ? ('-' + dndState.itemType) : '');\n try {\n event.dataTransfer.setData(mimeType, angular.toJson(item));\n } catch (e) {\n // Setting a custom MIME type did not work, we are probably in IE or Edge.\n var data = angular.toJson({item: item, type: dndState.itemType});\n try {\n event.dataTransfer.setData(EDGE_MIME_TYPE, data);\n } catch (e) {\n // We are in Internet Explorer and can only use the Text MIME type. Also note that IE\n // does not allow changing the cursor in the dragover event, therefore we have to choose\n // the one we want to display now by setting effectAllowed.\n var effectsAllowed = filterEffects(ALL_EFFECTS, dndState.effectAllowed);\n event.dataTransfer.effectAllowed = effectsAllowed[0];\n event.dataTransfer.setData(MSIE_MIME_TYPE, data);\n }\n }\n\n // Add CSS classes. See documentation above.\n element.addClass(\"dndDragging\");\n $timeout(function() { element.addClass(\"dndDraggingSource\"); }, 0);\n\n // Try setting a proper drag image if triggered on a dnd-handle (won't work in IE).\n if (event._dndHandle && event.dataTransfer.setDragImage) {\n event.dataTransfer.setDragImage(element[0], 0, 0);\n }\n\n // Invoke dragstart callback and prepare extra callback for dropzone.\n $parse(attr.dndDragstart)(scope, {event: event});\n if (attr.dndCallback) {\n var callback = $parse(attr.dndCallback);\n dndState.callback = function(params) { return callback(scope, params || {}); };\n }\n\n event.stopPropagation();\n });\n\n /**\n * The dragend event is triggered when the element was dropped or when the drag\n * operation was aborted (e.g. hit escape button). Depending on the executed action\n * we will invoke the callbacks specified with the dnd-moved or dnd-copied attribute.\n */\n element.on('dragend', function(event) {\n event = event.originalEvent || event;\n\n // Invoke callbacks. Usually we would use event.dataTransfer.dropEffect to determine\n // the used effect, but Chrome has not implemented that field correctly. On Windows\n // it always sets it to 'none', while Chrome on Linux sometimes sets it to something\n // else when it's supposed to send 'none' (drag operation aborted).\n scope.$apply(function() {\n var dropEffect = dndState.dropEffect;\n var cb = {copy: 'dndCopied', link: 'dndLinked', move: 'dndMoved', none: 'dndCanceled'};\n $parse(attr[cb[dropEffect]])(scope, {event: event});\n $parse(attr.dndDragend)(scope, {event: event, dropEffect: dropEffect});\n });\n\n // Clean up\n dndState.isDragging = false;\n dndState.callback = undefined;\n element.removeClass(\"dndDragging\");\n element.removeClass(\"dndDraggingSource\");\n event.stopPropagation();\n\n // In IE9 it is possible that the timeout from dragstart triggers after the dragend handler.\n $timeout(function() { element.removeClass(\"dndDraggingSource\"); }, 0);\n });\n\n /**\n * When the element is clicked we invoke the callback function\n * specified with the dnd-selected attribute.\n */\n element.on('click', function(event) {\n if (!attr.dndSelected) return;\n\n event = event.originalEvent || event;\n scope.$apply(function() {\n $parse(attr.dndSelected)(scope, {event: event});\n });\n\n // Prevent triggering dndSelected in parent elements.\n event.stopPropagation();\n });\n\n /**\n * Workaround to make element draggable in IE9\n */\n element.on('selectstart', function() {\n if (this.dragDrop) this.dragDrop();\n });\n };\n }]);\n\n\nlmApp\n .directive('dndList', ['$parse', function($parse) {\n return function(scope, element, attr) {\n // While an element is dragged over the list, this placeholder element is inserted\n // at the location where the element would be inserted after dropping.\n var placeholder = getPlaceholderElement();\n placeholder.remove();\n\n var placeholderNode = placeholder[0];\n var listNode = element[0];\n var listSettings = {};\n\n /**\n * The dragenter event is fired when a dragged element or text selection enters a valid drop\n * target. According to the spec, we either need to have a dropzone attribute or listen on\n * dragenter events and call preventDefault(). It should be noted though that no browser seems\n * to enforce this behaviour.\n */\n element.on('dragenter', function (event) {\n event = event.originalEvent || event;\n\n // Calculate list properties, so that we don't have to repeat this on every dragover event.\n var types = attr.dndAllowedTypes && scope.$eval(attr.dndAllowedTypes);\n listSettings = {\n allowedTypes: angular.isArray(types) && types.join('|').toLowerCase().split('|'),\n disabled: attr.dndDisableIf && scope.$eval(attr.dndDisableIf),\n externalSources: attr.dndExternalSources && scope.$eval(attr.dndExternalSources),\n horizontal: attr.dndHorizontalList && scope.$eval(attr.dndHorizontalList)\n };\n\n var mimeType = getMimeType(event.dataTransfer.types);\n if (!mimeType || !isDropAllowed(getItemType(mimeType))) return true;\n event.preventDefault();\n });\n\n /**\n * The dragover event is triggered \"every few hundred milliseconds\" while an element\n * is being dragged over our list, or over an child element.\n */\n element.on('dragover', function(event) {\n event = event.originalEvent || event;\n\n // Check whether the drop is allowed and determine mime type.\n var mimeType = getMimeType(event.dataTransfer.types);\n var itemType = getItemType(mimeType);\n if (!mimeType || !isDropAllowed(itemType)) return true;\n\n // Make sure the placeholder is shown, which is especially important if the list is empty.\n if (placeholderNode.parentNode != listNode) {\n element.append(placeholder);\n }\n\n if (event.target != listNode) {\n // Try to find the node direct directly below the list node.\n var listItemNode = event.target;\n while (listItemNode.parentNode != listNode && listItemNode.parentNode) {\n listItemNode = listItemNode.parentNode;\n }\n\n if (listItemNode.parentNode == listNode && listItemNode != placeholderNode) {\n // If the mouse pointer is in the upper half of the list item element,\n // we position the placeholder before the list item, otherwise after it.\n var rect = listItemNode.getBoundingClientRect();\n if (listSettings.horizontal) {\n var isFirstHalf = event.clientX < rect.left + rect.width / 2;\n } else {\n var isFirstHalf = event.clientY < rect.top + rect.height / 2;\n }\n listNode.insertBefore(placeholderNode,\n isFirstHalf ? listItemNode : listItemNode.nextSibling);\n }\n }\n\n // In IE we set a fake effectAllowed in dragstart to get the correct cursor, we therefore\n // ignore the effectAllowed passed in dataTransfer. We must also not access dataTransfer for\n // drops from external sources, as that throws an exception.\n var ignoreDataTransfer = mimeType == MSIE_MIME_TYPE;\n var dropEffect = getDropEffect(event, ignoreDataTransfer);\n if (dropEffect == 'none') return stopDragover();\n\n // At this point we invoke the callback, which still can disallow the drop.\n // We can't do this earlier because we want to pass the index of the placeholder.\n if (attr.dndDragover && !invokeCallback(attr.dndDragover, event, dropEffect, itemType)) {\n return stopDragover();\n }\n\n // Set dropEffect to modify the cursor shown by the browser, unless we're in IE, where this\n // is not supported. This must be done after preventDefault in Firefox.\n event.preventDefault();\n if (!ignoreDataTransfer) {\n event.dataTransfer.dropEffect = dropEffect;\n }\n\n element.addClass(\"dndDragover\");\n event.stopPropagation();\n return false;\n });\n\n /**\n * When the element is dropped, we use the position of the placeholder element as the\n * position where we insert the transferred data. This assumes that the list has exactly\n * one child element per array element.\n */\n element.on('drop', function(event) {\n event = event.originalEvent || event;\n\n // Check whether the drop is allowed and determine mime type.\n var mimeType = getMimeType(event.dataTransfer.types);\n var itemType = getItemType(mimeType);\n if (!mimeType || !isDropAllowed(itemType)) return true;\n\n // The default behavior in Firefox is to interpret the dropped element as URL and\n // forward to it. We want to prevent that even if our drop is aborted.\n event.preventDefault();\n\n // Unserialize the data that was serialized in dragstart.\n try {\n var data = JSON.parse(event.dataTransfer.getData(mimeType));\n } catch(e) {\n return stopDragover();\n }\n\n // Drops with invalid types from external sources might not have been filtered out yet.\n if (mimeType == MSIE_MIME_TYPE || mimeType == EDGE_MIME_TYPE) {\n itemType = data.type || undefined;\n data = data.item;\n if (!isDropAllowed(itemType)) return stopDragover();\n }\n\n // Special handling for internal IE drops, see dragover handler.\n var ignoreDataTransfer = mimeType == MSIE_MIME_TYPE;\n var dropEffect = getDropEffect(event, ignoreDataTransfer);\n if (dropEffect == 'none') return stopDragover();\n\n // Invoke the callback, which can transform the transferredObject and even abort the drop.\n var index = getPlaceholderIndex();\n if (attr.dndDrop) {\n data = invokeCallback(attr.dndDrop, event, dropEffect, itemType, index, data);\n if (!data) return stopDragover();\n }\n\n // The drop is definitely going to happen now, store the dropEffect.\n dndState.dropEffect = dropEffect;\n if (!ignoreDataTransfer) {\n event.dataTransfer.dropEffect = dropEffect;\n }\n\n // Insert the object into the array, unless dnd-drop took care of that (returned true).\n if (data !== true) {\n scope.$apply(function() {\n scope.$eval(attr.dndList).splice(index, 0, data);\n });\n }\n invokeCallback(attr.dndInserted, event, dropEffect, itemType, index, data);\n\n // Clean up\n stopDragover();\n event.stopPropagation();\n return false;\n });\n\n /**\n * We have to remove the placeholder when the element is no longer dragged over our list. The\n * problem is that the dragleave event is not only fired when the element leaves our list,\n * but also when it leaves a child element. Therefore, we determine whether the mouse cursor\n * is still pointing to an element inside the list or not.\n */\n element.on('dragleave', function(event) {\n event = event.originalEvent || event;\n\n var newTarget = document.elementFromPoint(event.clientX, event.clientY);\n if (listNode.contains(newTarget) && !event._dndPhShown) {\n // Signalize to potential parent lists that a placeholder is already shown.\n event._dndPhShown = true;\n } else {\n stopDragover();\n }\n });\n\n /**\n * Given the types array from the DataTransfer object, returns the first valid mime type.\n * A type is valid if it starts with MIME_TYPE, or it equals MSIE_MIME_TYPE or EDGE_MIME_TYPE.\n */\n function getMimeType(types) {\n if (!types) return MSIE_MIME_TYPE; // IE 9 workaround.\n for (var i = 0; i < types.length; i++) {\n if (types[i] == MSIE_MIME_TYPE || types[i] == EDGE_MIME_TYPE ||\n types[i].substr(0, MIME_TYPE.length) == MIME_TYPE) {\n return types[i];\n }\n }\n return null;\n }\n\n /**\n * Determines the type of the item from the dndState, or from the mime type for items from\n * external sources. Returns undefined if no item type was set and null if the item type could\n * not be determined.\n */\n function getItemType(mimeType) {\n if (dndState.isDragging) return dndState.itemType || undefined;\n if (mimeType == MSIE_MIME_TYPE || mimeType == EDGE_MIME_TYPE) return null;\n return (mimeType && mimeType.substr(MIME_TYPE.length + 1)) || undefined;\n }\n\n /**\n * Checks various conditions that must be fulfilled for a drop to be allowed, including the\n * dnd-allowed-types attribute. If the item Type is unknown (null), the drop will be allowed.\n */\n function isDropAllowed(itemType) {\n if (listSettings.disabled) return false;\n if (!listSettings.externalSources && !dndState.isDragging) return false;\n if (!listSettings.allowedTypes || itemType === null) return true;\n return itemType && listSettings.allowedTypes.indexOf(itemType) != -1;\n }\n\n /**\n * Determines which drop effect to use for the given event. In Internet Explorer we have to\n * ignore the effectAllowed field on dataTransfer, since we set a fake value in dragstart.\n * In those cases we rely on dndState to filter effects. Read the design doc for more details:\n * https://github.com/marceljuenemann/angular-drag-and-drop-lists/wiki/Data-Transfer-Design\n */\n function getDropEffect(event, ignoreDataTransfer) {\n var effects = ALL_EFFECTS;\n if (!ignoreDataTransfer) {\n effects = filterEffects(effects, event.dataTransfer.effectAllowed);\n }\n if (dndState.isDragging) {\n effects = filterEffects(effects, dndState.effectAllowed);\n }\n if (attr.dndEffectAllowed) {\n effects = filterEffects(effects, attr.dndEffectAllowed);\n }\n // MacOS automatically filters dataTransfer.effectAllowed depending on the modifier keys,\n // therefore the following modifier keys will only affect other operating systems.\n if (!effects.length) {\n return 'none';\n } else if (event.ctrlKey && effects.indexOf('copy') != -1) {\n return 'copy';\n } else if (event.altKey && effects.indexOf('link') != -1) {\n return 'link';\n } else {\n return effects[0];\n }\n }\n\n /**\n * Small helper function that cleans up if we aborted a drop.\n */\n function stopDragover() {\n placeholder.remove();\n element.removeClass(\"dndDragover\");\n return true;\n }\n\n /**\n * Invokes a callback with some interesting parameters and returns the callbacks return value.\n */\n function invokeCallback(expression, event, dropEffect, itemType, index, item) {\n return $parse(expression)(scope, {\n callback: dndState.callback,\n dropEffect: dropEffect,\n event: event,\n external: !dndState.isDragging,\n index: index !== undefined ? index : getPlaceholderIndex(),\n item: item || undefined,\n type: itemType\n });\n }\n\n /**\n * We use the position of the placeholder node to determine at which position of the array the\n * object needs to be inserted\n */\n function getPlaceholderIndex() {\n return Array.prototype.indexOf.call(listNode.children, placeholderNode);\n }\n\n /**\n * Tries to find a child element that has the dndPlaceholder class set. If none was found, a\n * new li element is created.\n */\n function getPlaceholderElement() {\n var placeholder;\n angular.forEach(element.children(), function(childNode) {\n var child = angular.element(childNode);\n if (child.hasClass('dndPlaceholder')) {\n placeholder = child;\n }\n });\n return placeholder || angular.element(\"
  • \");\n }\n };\n }]);\n\n /**\n * Use the dnd-nodrag attribute inside of dnd-draggable elements to prevent them from starting\n * drag operations. This is especially useful if you want to use input elements inside of\n * dnd-draggable elements or create specific handle elements. Note: This directive does not work\n * in Internet Explorer 9.\n */\n lmApp\n .directive('dndNodrag', function() {\n return function(scope, element, attr) {\n // Set as draggable so that we can cancel the events explicitly\n element.attr(\"draggable\", \"true\");\n\n /**\n * Since the element is draggable, the browser's default operation is to drag it on dragstart.\n * We will prevent that and also stop the event from bubbling up.\n */\n element.on('dragstart', function(event) {\n event = event.originalEvent || event;\n\n if (!event._dndHandle) {\n // If a child element already reacted to dragstart and set a dataTransfer object, we will\n // allow that. For example, this is the case for user selections inside of input elements.\n if (!(event.dataTransfer.types && event.dataTransfer.types.length)) {\n event.preventDefault();\n }\n event.stopPropagation();\n }\n });\n\n /**\n * Stop propagation of dragend events, otherwise dnd-moved might be triggered and the element\n * would be removed.\n */\n element.on('dragend', function(event) {\n event = event.originalEvent || event;\n if (!event._dndHandle) {\n event.stopPropagation();\n }\n });\n };\n });\n\n /**\n * Use the dnd-handle directive within a dnd-nodrag element in order to allow dragging with that\n * element after all. Therefore, by combining dnd-nodrag and dnd-handle you can allow\n * dnd-draggable elements to only be dragged via specific \"handle\" elements. Note that Internet\n * Explorer will show the handle element as drag image instead of the dnd-draggable element. You\n * can work around this by styling the handle element differently when it is being dragged. Use\n * the CSS selector .dndDragging:not(.dndDraggingSource) [dnd-handle] for that.\n */\n lmApp\n .directive('dndHandle', function() {\n return function(scope, element, attr) {\n element.attr(\"draggable\", \"true\");\n\n element.on('dragstart dragend', function(event) {\n event = event.originalEvent || event;\n event._dndHandle = true;\n });\n };\n });\n\n /**\n * Filters an array of drop effects using a HTML5 effectAllowed string.\n */\n function filterEffects(effects, effectAllowed) {\n if (effectAllowed == 'all') return effects;\n return effects.filter(function(effect) {\n return effectAllowed.toLowerCase().indexOf(effect) != -1;\n });\n }\n\n var dndState = {};\n","lmApp.\n directive('lmSelect', ['$window', '$document', '$timeout',\n function ($window, $document, $timeout) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n ngModel: '=',\n options: '=',\n placeholder: '@',\n limit: '@',\n withSearch: '@',\n loading: '=?',\n error: '@',\n errorFn: '&',\n warning: '@',\n warningFn: '&',\n success: '@',\n successFn: '&',\n noData: '@',\n ngDisabled: '=?',\n optionSection: '@',\n optionType: '@',\n onFocus: '&',\n onBlur: '&',\n onSelect: '&',\n onSearch: '&'\n },\n link: function (scope, element, attrs) {\n scope._select_element_ = element;\n scope._input_ = element.find('#hidden_input');\n scope._arrow_ = element.find('.mdi-chevron-down');\n scope._options_ = element.find('ul');\n scope._uniqId = makeid(10);\n scope._search_ = element.find('#search' + scope._uniqId);\n scope._empty_ = angular.element('
    ');\n scope._empty_.css({'z-index': +scope._options_.css('z-index') - 1});\n\n if (typeof scope.errorFn !== 'function') {\n scope.errorFn = function () {\n return scope.errorFn;\n }\n }\n if (typeof scope.warningFn !== 'function') {\n scope.warningFn = function () {\n return scope.warningFn;\n }\n }\n if (typeof scope.successFn !== 'function') {\n scope.successFn = function () {\n return scope.successFn;\n }\n }\n\n if (!angular.isArray(scope.options)) {\n scope.localOptions = [];\n }\n\n scope.optWatcher = scope.$watchCollection('options', function (newValue, oldValue) {\n if (newValue) {\n scope.localOptions = angular.copy(newValue);\n }\n });\n\n scope._ChangePosition = function () {\n scope._options_.css({\n overflow: 'hidden',\n top: scope._input_.offset().top - $document.scrollTop(),\n left: scope._input_.offset().left - $document.scrollLeft()\n });\n };\n\n scope._ChangeSize = function () {\n scope._options_.css({width: scope._select_element_.width()});\n\n var bodyHeight = $document[0].documentElement.clientHeight;\n var optionsHeight = scope._options_.height();\n var optionsOffsetTop = scope._input_.offset().top - $document.scrollTop();\n var bodyScrollTop = angular.element('body').scrollTop();\n\n if (optionsHeight + optionsOffsetTop > bodyHeight) {\n scope._options_.css({height: bodyHeight - optionsOffsetTop + bodyScrollTop - 10});\n }\n };\n\n scope._ActivateOption = function (options, newOption) {\n scope._options_.find('li.active').removeClass('active');\n angular.element(newOption).addClass('active');\n\n if (_isOutOfScroll(newOption)) {\n scope._options_.scrollTop(scope._options_.scrollTop() + angular.element(newOption).position().top);\n }\n };\n\n scope._SelectOption = function (option) {\n angular.element(option).trigger('click');\n };\n\n var _isOutOfScroll = function (li, partial) {\n var contHeight = scope._options_.height();\n var contTop = scope._options_.scrollTop();\n var contBottom = contTop + contHeight;\n\n var elemTop = angular.element(li).offset().top - scope._options_.offset().top;\n var elemBottom = elemTop + angular.element(li).height();\n\n var isTotal = (elemTop >= 0 && elemBottom <= contHeight);\n var isPart = ((elemTop < 0 && elemBottom > 0 ) || (elemTop > 0 && elemTop <= scope._options_.height())) && partial;\n\n return !isTotal && !isPart;\n };\n\n var _OpenSelect = function () {\n if (scope.ngDisabled) return;\n\n if (scope.onFocus) scope.onFocus();\n\n scope._empty_.appendTo('body');\n scope._options_.appendTo('body');\n\n scope._ChangePosition();\n\n scope._options_.css({overflow: 'hidden'});\n scope._options_.css({display: 'block'});\n\n scope._options_.css({width: scope._select_element_.width()});\n\n TweenMax.from(scope._options_, 0.35, {\n height: 0,\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n if (scope.withSearch) scope._search_.focus();\n scope._ChangeSize();\n\n scope._empty_.bind('click', _CloseSelect);\n },\n clearProps: 'height'\n });\n\n scope._input_.trigger('focus');\n angular.element('body').bind('keydown', _OnKeyDown);\n angular.element($window).bind('resize', scope._ChangePosition);\n angular.element($window).bind('resize', scope._ChangeSize);\n angular.element($window).bind('scroll', scope._ChangePosition);\n };\n\n var _CloseSelect = function (event) {\n scope._options_.css({overflow: 'hidden'});\n\n TweenMax.to(scope._options_, 0.35, {\n height: 0,\n display: 'none',\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n scope._empty_.remove();\n },\n clearProps: 'height,width'\n });\n\n scope._empty_.unbind('click', _CloseSelect);\n angular.element('body').unbind('keydown', _OnKeyDown);\n angular.element($window).unbind('resize', scope._ChangePosition);\n angular.element($window).unbind('resize', scope._ChangeSize);\n angular.element($window).unbind('scroll', scope._ChangePosition);\n if (scope.onBlur) scope.onBlur();\n };\n\n var activeOption;\n var newOption;\n var _OnKeyDown = function (event) {\n // TAB - switch to another input\n if (event.which == 9) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseSelect(event);\n }\n\n // ENTER - select option and close when select options are opened\n if (event.which == 13) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n activeOption = _.head(scope._options_.find('li.active:not(.disabled)'));\n if (activeOption) {\n scope._SelectOption(activeOption);\n }\n }\n\n //ARROW DOWN - move to next not disabled option\n if (event.which == 40) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n newOption = _.head(scope._options_.find('li.active').next('li:not(.disabled)'));\n if (newOption) {\n scope._ActivateOption(scope.localOptions, newOption);\n } else if (scope._options_.find('li:not(.disabled)').length) {\n scope._ActivateOption(scope.localOptions, _.head(scope._options_.find('li:not(.disabled)')));\n }\n }\n\n // ESC - close options\n if (event.which == 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseSelect();\n }\n\n // ARROW UP - move to previous not disabled option\n if (event.which == 38) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n newOption = _.head(scope._options_.find('li.active').prev('li:not(.disabled)'));\n if (newOption) {\n scope._ActivateOption(scope.localOptions, newOption);\n } else if (scope._options_.find('li:not(.disabled)').length) {\n scope._ActivateOption(scope.localOptions, _.last(scope._options_.find('li:not(.disabled)')));\n }\n }\n };\n\n scope._input_.bind('click', _OpenSelect);\n scope._arrow_.bind('click', _OpenSelect);\n\n scope.selectOption = function (option) {\n scope.ngModel = option;\n if (scope.onSelect) {\n var f = scope.onSelect();\n if (typeof f == 'function') {\n f(option);\n }\n }\n _CloseSelect();\n };\n\n scope.clearSearch = function () {\n scope.search = '';\n scope._search_.focus();\n };\n\n scope.toCreate = function (path) {\n if (path) window.location.href = path;\n };\n\n scope.searchWatcher = scope.$watch('search', function (newValue, oldValue) {\n if (typeof scope.onSearch == 'function') {\n var f = scope.onSearch();\n if (typeof f == 'function') {\n f(newValue);\n }\n }\n });\n\n scope.limitWatcher = scope.$watch('limit', function (newValue, oldValue) {\n if (newValue) {\n scope._ChangeSize();\n if (scope.withSearch) {\n scope._search_.focus();\n } else {\n scope._options_.focus();\n }\n }\n });\n\n scope._select_element_.on('$destroy', function () {\n scope._input_.unbind('click', _OpenSelect);\n scope._arrow_.unbind('click', _OpenSelect);\n scope.optWatcher();\n scope.limitWatcher();\n scope.searchWatcher();\n });\n },\n templateUrl: 'lm-select/lm-select.tpl.html'\n };\n }]);\n\nfunction makeid(length) {\n var result = '';\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var charactersLength = characters.length;\n for ( var i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n","lmApp.run(['$templateCache', function($templateCache) {\n$templateCache.put(\"administration/instances.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Content Syndication\\n

    \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n Total Replications: {{ replications.length }}\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameTypeSync ScheduleLast RunNext Run TimeSync
    No data
    {{ replication.name }}\\n {{ replication.type }}\\n {{ replication.syncSchedule }}\\n -\\n \\n {{ convertTime(replication.lastRun.runTime) | date: \\'d MMM y\\' : \\'UTC\\' }}:\\n
    \\n queued\\n
    \\n
    \\n processing\\n
    \\n
    \\n success\\n
    \\n
    \\n error\\n
    \\n
    \\n
    \\n \\n {{ convertTime(replication.nextRunTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n \\n \\n Sync now\\n \\n \\n Sync now\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Replication ID = {{ activeReplication.id }}\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n {{ activeReplication.name }}\\n
    \\n Created\\n \\n {{ convertTime(activeReplication.createTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n Last Update Time\\n \\n {{ convertTime(activeReplication.updateTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n Type\\n \\n {{ activeReplication.type }}\\n
    \\n Elements\\n \\n \\n {{ resource.title }}\\n \\n
    \\n Token\\n \\n \\n {{ activeReplication.token }}\\n \\n
    \\n Instance\\n \\n \\n Invalid token\\n \\n \\n {{ activeReplication.checkedOperator.operator }}\\n \\n
    \\n Sync Schedule\\n \\n {{ activeReplication.syncSchedule }}\\n
    \\n Next Run Time\\n \\n \\n {{ convertTime(activeReplication.nextRunTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n Import History\\n
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Run TimeLast Update TimeStateError
    No data
    {{ convertTime(run.runTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n {{ convertTime(run.lastUpdateTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n
    \\n queued\\n
    \\n
    \\n processing\\n
    \\n
    \\n success\\n
    \\n
    \\n error\\n
    \\n
    \\n {{ run.error }}\\n
    \\n = activeReplication.runs.length\\\"\\n ng-show=\\\"activeReplication.runs.length > 20\\\">\\n \\n
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n\");\n$templateCache.put(\"administration/permissions.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n\\n
      \\n
    • \\n
      \\n
      \\n Super Admins:\\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n {{ manager.username }}\\n
      \\n
      \\n \\n
      \\n
      \\n
    • \\n\\n
    • \\n
      \\n
      \\n Regular Admins and Permissions:\\n
      \\n
      \\n Create Regular Admin\\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
    • \\n
    • \\n
      \\n {{ account.email }}\\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n
      \\n
      \\n {{section.title}}\\n
      \\n
      \\n
      \\n Read\\n
      \\n
      \\n Write\\n
      \\n
      \\n No access\\n
      \\n
      \\n
      \\n
      \\n
      \\n {{section.title}}\\n
      \\n\\n
      \\n
      \\n {{subsection.title}}\\n
      \\n
      \\n
      \\n Read\\n
      \\n
      \\n Write\\n
      \\n
      \\n No access\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Remove account\\n
      \\n
      Save
      \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n\\n
    \\n
    \\n\");\n$templateCache.put(\"application/application.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"billing/invoice.pdf.tpl.html\",\"\\n\\n \\n\\n\\n\\n\\\"SotalCloud\\n
    \\n\\n
    \\n
    \\n

    {{ invoice.seller.name }}

    \\n\\n

    {{ invoice.seller.address.line1 }}, {{ invoice.seller.address.line2 }}

    \\n\\n

    {{ invoice.seller.address.city }}, {{ invoice.seller.address.region }}

    \\n\\n

    {{ invoice.seller.address.country}}, {{ invoice.seller.address.postcode }}

    \\n
    \\n
    \\n INVOICE\\n
    \\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Bill To:Invoice#INV-{{ invoice.id }}
    {{ invoice.buyer.name }}Invoice Date{{ invoice.invoiceDate.format(\\'ll\\') }}
    {{ invoice.buyer.address.line1 }} {{ invoice.buyer.address.line2 }}Due Date{{ invoice.dueDate.format(\\'ll\\') }}
    {{ invoice.buyer.address.city }}, {{ invoice.buyer.address.region }}
    {{ invoice.buyer.address.country}}, {{ invoice.buyer.address.postcode }}
    \\n\\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n
    DetailsQty\\n Total\\n USD\\n
    \\n {{ item.description }}\\n \\n {{ item.quantity }} {{ item.unit }}\\n \\n ${{ (item.amount/100)| number:2 }}\\n
    \\n

    Total Charges:

    \\n
    \\n

    ${{ (total/100) | number:2 }}

    \\n
    \\n\\n\\n\\n\\n\\n\");\n$templateCache.put(\"billing/invoice.print.tpl.html\",\"\\n\\n \\n\\n\\n\\n\\\"SotalCloud\\n
    \\n\\n
    \\n
    \\n

    {{ invoice.seller.name }}

    \\n\\n

    {{ invoice.seller.address.line1 }}, {{ invoice.seller.address.line2 }}

    \\n\\n

    {{ invoice.seller.address.city }}, {{ invoice.seller.address.region }}

    \\n\\n

    {{ invoice.seller.address.country}}, {{ invoice.seller.address.postcode }}

    \\n
    \\n
    \\n INVOICE\\n
    \\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Bill To:Invoice#INV-{{ invoice.id }}
    {{ invoice.buyer.name }}Invoice Date{{ invoice.invoiceDate.format(\\'ll\\') }}
    {{ invoice.buyer.address.line1 }} {{ invoice.buyer.address.line2 }}Due Date{{ invoice.dueDate.format(\\'ll\\') }}
    {{ invoice.buyer.address.city }}, {{ invoice.buyer.address.region }}
    {{ invoice.buyer.address.country}}, {{ invoice.buyer.address.postcode }}
    \\n\\n
    \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n\\n \\n
    DetailsQty\\n Total\\n USD\\n
    \\n {{ item.description }}\\n \\n {{ item.quantity }} {{ item.unit }}\\n \\n ${{ (item.amount/100)| number:2 }}\\n
    \\n

    Total Charges:

    \\n
    \\n

    ${{ (total/100) | number:2 }}

    \\n
    \\n\\n\\n\");\n$templateCache.put(\"billing/invoice.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Date:

    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    Print
    \\n
    Download PDF
    \\n
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    SummaryAmount
    Total${{(total/100) | number:2}}
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    DetailsTotal
    {{data.name}}${{(data.total/100)| number:2}}
    \\n {{item.description}}\\n {{item.quantity}} {{item.unit}}${{(item.amount/100)| number:2}}
    \\n
    \\n\\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"billing/paypal-express.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n PayPal Express Checkout\\n\\n
    Save
    \\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"billing/paypal-payflow.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n PayPal Payflow\\n\\n
    Save
    \\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"billing/stripe.tpl.html\",\"
    \\n\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    \\n Connect stripe to accept payments\\n

    \\n\\n

    \\n SotalCloud has partnered with Stripe to provide your store the easiest way to accept credit cards on the web.\\n
    \\n Click \\\"Connect stripe\\\", fill out a short form, and start processing payments immediately.\\n

    \\n\\n
    \\n Learn more about Stripe\\n Review the Stripe Terms of Service\\n
    \\n\\n
    \\n
    \\n {{stripeStatus ? \\'Disconnect\\' : \\'Connect\\' }} stripe\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Connecting...\\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"contacts/contacts.tpl.html\",\"
    \\n
    \\n\\n
    \\n Contact us\\n
    \\n\\n
    \\n For further instructions, please use the following contacts:\\n
    \\n
    \\n\\n
    Sotal Cloud
    \\n
    \\n
    info@sotalcloud.com
    \\n
    \\n
    \\n
    \\n\\n
    SotalCloud North America
    \\n\\n
    \\n
    Russell Foy
    \\n\\n
    CEO
    \\n\\n
    russell@sotalcloud.com
    \\n\\n
    +1-818-748-9259
    \\n
    \\n
    \\n
    \\n\\n
    SotalCloud Eastern Europe
    \\n\\n
    \\n
    Alexander Piterbarg
    \\n\\n
    CEO
    \\n\\n
    ap@sotalcloud.com
    \\n\\n
    +7-903-549-1349
    \\n
    \\n\\n
    \\n
    \\n\");\n$templateCache.put(\"drm/google-drm.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Google DRM\\n\\n
    Save
    \\n
    \\n
    \\n
    \\n
    License Signing Key
    \\n\\n
    \\n\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"drm/nagra.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Nagra DRM\\n\\n
    Save
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n CAS Messages\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n
    CAS message IDCAS message payload
    \\n Need integration\\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"drm/verimatrix.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Verimatrix DRM\\n\\n
    Save
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    Enable random key
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    Enable random resource ID
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    Nodes
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n {{node.sourceDesc}}\\n
    • \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Live Resource ID Range
    \\n
    \\n \\n \\n
    \\n
    to
    \\n
    \\n \\n \\n
    \\n\\n
    VOD Resource ID Range
    \\n
    \\n \\n \\n
    \\n
    to
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n CAS DVB Integration interfaces\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    CAS message valueCAS message payload
    \\n {{message[0]}}\\n \\n {{message[1]}}\\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"catchup/catchup.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
      \\n
    • \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n LIVE ID\\n
      \\n
      \\n Title\\n
      \\n
      \\n EPG channel\\n
      \\n
      \\n Catchup\\n
      \\n
      \\n Recorded\\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n {{ channel.id }}\\n
      \\n
      \\n {{ channel.name }}\\n
      \\n
      \\n 0\\\">{{ channel.epg.name }}\\n N/A\\n
      \\n
      \\n {{ channel.catchupDepth }} h\\n
      \\n
      \\n \\n \\n {{ channel.recorded }} h\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n \\n {{ channel.name }}\\n \\n \\n
      \\n Live Stream:\\n {{ selectedStream || \\'N/A\\' }}\\n \\n \\n \\n \\n \\n \\n
      \\n Error:\\n {{ selectedStreamError }}\\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n ID\\n
      \\n
      \\n Picture\\n
      \\n
      \\n Start-end time\\n
      \\n
      \\n Event name\\n
      \\n
      \\n Catchup\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n {{ event.id }}\\n
      \\n
      \\n \\n
      \\n
      \\n {{ event.startTime }} - {{ event.endTime }}\\n
      \\n
      \\n {{ event.name }}\\n
      \\n
      \\n \\n -\\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n ID: {{ event.id }}\\n
      \\n
      \\n {{ event.startTime }} - {{ event.endTime }}\\n
      \\n
      \\n {{ event.name }}\\n
      \\n
      \\n {{ event.description }}\\n
      \\n
      \\n Catchup HLS Stream:\\n {{ currentProgramm.hlsStream || \\'N/A\\' }}\\n \\n \\n \\n \\n
      \\n Error:\\n {{ currentProgramm.hlsStreamErr }}\\n
      \\n
      \\n Catchup DASH Stream:\\n {{ currentProgramm.dashStream || \\'N/A\\' }}\\n \\n \\n \\n \\n
      \\n Error:\\n {{ currentProgramm.dashStreamErr }}\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n

      \\n No EPG for selected date. Check EPG Source\\n

      \\n
      \\n
      \\n
      \\n\\n
      \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"epg/catchup-2-0.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n List of currently configured channels:\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    LCNTitleIDStatus
    {{channel.er_lcn || channel.lcn}}{{channel.title}}{{channel.id}}\\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} stream status: {{stream.is_deployed ? \\'Deployed\\' : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-700 bgc-green-50\\': stream.is_deployed, \\'tc-red-600 bgc-red-50\\': !stream.is_deployed}\\\">\\n S\\n
    \\n
    \\n P\\n
    \\n
    \\n E\\n
    \\n
    \\n C\\n
    \\n
    \\n N\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Back to channels\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"epg/epg-import.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n

    \\n EPG Sources\\n

    \\n \\n + Add new source\\n \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameChannels in sourceLast Import
    \\n {{ source.name || source.url }}\\n \\n {{ source.channels.length }}\\n \\n {{ convertTime(source._lastImportTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n never\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Source name: {{ activeSource.name || activeSource.url }}\\n
    \\n \\n
    \\n Import time (UTC+0):\\n \\n
    \\n
    \\n Last import: \\n {{ convertTime(activeSource._lastImportTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n never\\n
    \\n
    \\n Total channels in source: {{ activeSource.channels.length }}\\n \\n Rescan\\n \\n
    \\n
    \\n
    \\n Imported EPG channels ({{ activeSource._PrivateData.task.channels.length || 0 }})\\n \\n Change\\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    IDExt IDNameLast ImportLinked toSchedule
    \\n
    \\n
    \\n
    \\n
    \\n
    No imported channels
    \\n
    {{ channel.id }}{{ channel.extid }}{{ channel.title }}\\n {{ convertTime(channel._lastImportTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n never\\n \\n -\\n \\n {{ asset.name }}\\n \\n \\n \\n see\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"epg/epg.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
      \\n
    • \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n ID\\n
      \\n
      \\n EPG channel ID\\n
      \\n
      \\n Title\\n
      \\n
      \\n Last import\\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n {{ epg.id }}\\n
      \\n
      \\n {{ epg.extid }}\\n
      \\n
      \\n {{ epg.title || epg.extid }}\\n
      \\n
      \\n {{ epg._PrivateData.lastImport }}\\n
      \\n
      \\n never\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n ID\\n
      \\n
      \\n Start-end time\\n
      \\n
      \\n Event name\\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n ID: {{ event.id }}\\n
      \\n
      \\n {{ event._PrivateData.startTime }} - {{ event._PrivateData.endTime }}\\n
      \\n
      \\n {{ event.program.title }}\\n
      \\n
      \\n {{ currentProgramm.title }}\\n
      \\n
      \\n
      \\n {{ genre.title }}\\n
      \\n
      \\n
      \\n {{ currentProgramm.description }}\\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n

      \\n No EPG for {{ epg._day.date }}. Pick another Date.\\n

      \\n
      \\n
      \\n
      \\n
      \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"geoip/geoip-rules.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n GeoIP Rules\\n

    \\n \\n + Add new rule\\n \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    GeoIP rules affect the possibility of a user watching the content\\n .\\n By default, if no rule is set, no blocks are in effect.\\n GeoIP rules don\\'t affect content visibility.

    \\n

    \\n Rules are applied in order of their position.\\n The lower the position number, the higher is the rule\\'s rank.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Position\\n \\n \\n 1\\\"\\n ng-class=\\\"{\\'disabled\\': loading}\\\"\\n ng-click=\\\"reorderRules()\\\">\\n Reorder\\n \\n PolicyNameRuleCreated AtLast Update Time
    No GeoIP rules haven\\'t been created yet
    #{{ $index+1 }}\\n \\n \\n {{ rule.name }}{{ rule._description }}{{ convertTime(rule.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}{{ convertTime(rule.update_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"favorites/favorites.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Favourite Assets ( -1\\\">{{ resultCount }})

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    userassetstatuscategories
    \\n {{ favorite.username }}\\n \\n {{ favorite.assetName | limitTo: 40 }}\\n {{ favorite.assetName | limitTo: 40 }}\\n inactiveactive\\n {{ category.name }}\\n Episode\\n
    No\\n result\\n
    \\n
    \\n
    \\n = favourites.length\\\"\\n >\\n
    \\n
    \\n\\n
    \\n
    \\n

    Top Favourites

    \\n
    \\n
    Type:
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{ $index + 1 + topOffset }}. {{ topFavorite.assetName | limitTo: 40 }}\\n {{ topFavorite.count }}{{ topFavorite.assetType }}
    No\\n result\\n
    \\n
    \\n
    \\n
    \\n = topFavourites.length\\\"\\n >\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"greetings/greetings.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Account activation\\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    {{activationFormData.error}}
    \\n
    \\n
    \\n
    \\n Account has been activated. Redirect in 2sec.\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n preloaderIndex, \\'mdi-checkbox-blank-circle\\': $index <= preloaderIndex}\\\">\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    {{ preloaderMessages[preloaderIndex].title }}
    \\n
    {{\\n preloaderMessages[preloaderIndex].text }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n Please wait till you project is being prepared for the first\\n use.\\n You can leave this page, the process will continue in the background. We will notify you by e-mail when\\n it is ready.\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"group/group.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n Create\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    {{ specialGroup.name }} It includes all content that is not bound to any group. This content is visible to all users via applications.\\\">

    \\n All users, -1\\\">{{ specialGroup._packageCount }} packages\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    {{ group.name | limitTo: 23 }}

    \\n -1\\\">{{ group._userCount }} users,\\n -1\\\">{{ group._packageCount }} packages\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    Add subscriber
    \\n
    Remove selected
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Ext IDContact emailID
    \\n
    \\n
    \\n
    \\n
    \\n
    No users
    \\n
    \\n \\n \\n {{ user.extid }}{{ user.contact_email || \\'N/A\\' }}{{ user.id }}
    \\n
    \\n\\n\\n
    \\n
    Add content
    \\n
    Remove selected
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TitleAssets in PackageStatusID
    \\n
    \\n
    \\n
    \\n
    \\n
    No packages
    \\n
    \\n \\n \\n {{ asset.title }}{{ asset.assets.length || 0 }}\\n Active\\n Inactive\\n {{ asset.id }}
    \\n
    \\n\\n\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"import/import.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ task.error }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\t\t\t\t\t\t\\n\t\t\t\t\t\t\tImport task {{ task.name }} \\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\t\\n\t\t\t\t\t\t\\n
    \\n
    \\n \\n \\n \\n \\n \\n
  • \\n \\n Cancel\\n \\n
  • \\n
  • \\n Restart \\n
  • \\n
  • \\n Delete \\n
  • \\n
    \\n
    \\n {{ task._PrivateData.state.title }} \\n
    \\n
    \\n
    \\n
    \\n
    \\n ID\\n
    \\n
    \\n {{ task.id }} \\n
    \\n
    \\n
    \\n
    \\n Create time\\n
    \\n
    \\n {{ task._PrivateData.create_time.format(\\'MMMM Do YYYY, h:mm:ss a\\') }} \\n
    \\n
    \\n
    \\n
    \\n Last update time\\n
    \\n
    \\n {{ task._PrivateData.finish_time.format(\\'MMMM Do YYYY, h:mm:ss a\\') }} \\n
    \\n
    \\n
    \\n
    \\n
    Total
    \\n
    All: {{ task.total_items_count }}
    \\n
    Done:\\n {{ task.finished_items_count }}\\n
    \\n
    Warnings: {{\\n task.warnings_items_count }}\\n
    \\n
    Errors: {{ task.failed_items_count }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Filters\\n
    \\n
    \\n Errors\\n
    \\n
    \\n Warnings\\n
    \\n
    \\n Restart import\\n
    \\n
    \\n Update\\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n \\n {{ item.name }}\\n \\n {{ item._PrivateData.actions }} {{ item._PrivateData.state.title }} \\n
      \\n
      \\n
      \\n <{{ key }}> \\n
      \\n {{ item }}\\n
      \\n
      \\n
      \\n {{ item.error }}\\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      Save\\n
      \\n
      Undo all\\n
      \\n
      Restart thread\\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"infrastructure/cdn.tpl.html\",\"
    \\n\t
    \\n\t\t
    \\n\t\t\t
    \\n\t\t
    \\n\t\t
    \\n\t\t\t CDN URLs \\n\\n\t\t\t
    Save
    \\n\t\t\t
    \\n\t\t\t
    \\n\t\t\t\t

    Origin {{ origin.id }}:

    \\n\\n\t\t\t\t
    \\n\t\t\t\t\t
    {{ origin.url }}
    \\n\t\t\t\t\t\\n\t\t\t\t\t\\n\t\t\t\t
    \\n\t\t\t
    \\n\t\t
    \\n\t
    \\n
    \\n\");\n$templateCache.put(\"infrastructure/delivery-method.tpl.html\",\"
    \\n\t
    \\n\t\t
    \\n\t\t\t
    \\n\t\t
    \\n\t\t
    \\n\t\t\t Delivery method \\n\\n\t\t\t
    Save
    \\n\t\t\t
    \\n\t\t\t
    \\n\t\t\t\t

    {{resource.title}}

    \\n\\n\t\t\t\t
    \\n\t\t\t\t\t
    \\n\t\t\t\t\t\t\\n\t\t\t\t\t\t\\n\t\t\t\t\t
    \\n\t\t\t\t
    \\n\t\t\t
    \\n\t\t
    \\n\t
    \\n
    \");\n$templateCache.put(\"infrastructure/monitoring.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n eu.sotalcloud.com\\\"\\n expr=\\\"{{\\'sum(rate(request_processing_seconds_count{service_id=~\\\\\\'.*eu.sotalcloud.com\\\\\\'}[5m])) by (service_id)\\'}}\\\"\\n label=\\\"service_id\\\"\\n type=\\\"line\\\" zero-y=\\\"true\\\" is-live=\\\"30000\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n origin.sotalcloud.com\\\"\\n expr=\\\"{{\\'sum(rate(request_processing_seconds_count{service_id=~\\\\\\'origin.172.*\\\\\\'}[5m])) by (service_id)\\'}}\\\"\\n label=\\\"service_id\\\"\\n type=\\\"line\\\" zero-y=\\\"true\\\" is-live=\\\"30000\\\">\\n \\n
    \\n\\n
    \\n
    \\n\");\n$templateCache.put(\"infrastructure/servers.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    \\n Content Nodes\\n

    \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n\\n
    \\n
    \\n The default limit of videos that a user can play simultaneously:\\n \\n \\n \\n = 0\\\">{{ sessionLimit }}\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StateAddress\\n CDN\\n
    You don\\'t have any content servers
    \\n
    \\n {{ node._state }}\\n
    \\n
    \\n {{ node._address }}\\n
    Sessions:\\n \\n \\n \\n {{ node._sessions ? \\'enabled\\' : \\'disabled\\' }}
    \\n
    Created:\\n N/A\\n {{ convertTime(node.node.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n Updated:\\n N/A\\n {{ convertTime(node.node.update_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n \\n Add CDN\\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n {{ cdn.url }}\\n \\n {{ cdn.tag || \\'n/a\\' }}\\n \\n \\n \\n \\n
    \\n
    N/A
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Catch-up Nodes

    \\n
    \\n
    \\n
    \\n Channels with catch-up:\\n \\n \\n \\n -1\\\">{{ catchupCount }}\\n
    \\n
    \\n Catch-up depth:\\n \\n \\n \\n {{ catchupDepth }}\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StateAddressCDNSessionsCreatedModified
    You don\\'t have any catch-up servers
    \\n
    \\n {{ node._state }}\\n
    \\n
    \\n {{ node._address }}\\n N/A\\n \\n {{ node._sessions ? \\'enabled\\' : \\'disabled\\' }}\\n N/A\\n {{ convertTime(node.node.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n N/A\\n {{ convertTime(node.node.update_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    nPVR Nodes

    \\n
    \\n
    \\n
    \\n nPVR state:\\n \\n \\n \\n {{ npvrState }}\\n
    \\n
    \\n The default number of channel programs that a user can record:\\n \\n \\n \\n = 0\\\">{{ npvrLimit }}\\n
    \\n
    \\n DVR Tasks:\\n \\n \\n \\n =0 && totalDVRTasks >= 0\\\">\\n {{ successDVRTasks }} / {{ totalDVRTasks }}\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StateAddressCDNCapacityCreatedModified
    You don\\'t have any nPVR servers
    \\n
    \\n {{ node._state }}\\n
    \\n
    \\n {{ node._address }}\\n N/A\\n {{ node.cdn_url }}\\n {{ node._capacity }}\\n N/A\\n {{ convertTime(node.node.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n N/A\\n {{ convertTime(node.node.update_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n\\n
    \\n\");\n$templateCache.put(\"live/live.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
     
    \\n
    LCN
    \\n
    Title
    \\n
     
    \\n
    ID
    \\n
    Categories
    \\n
    Status
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ asset.lcn }}\\n
    \\n
    \\n {{ asset.name }}\\n
    \\n
    \\n  \\n
    \\n
    \\n {{ asset.id }}\\n
    \\n
    \\n \\n {{ asset.categories[0].name }}\\n \\n 1\\\">\\n +{{ asset.categories.length-1 }}\\n \\n
    \\n
    \\n
    \\n R\\n
    \\n
    {{ stream.type }} stream status: {{ stream.state }}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.state === \\'deployed\\',\\n \\'tc-red-600 bgc-red-100\\': stream.state !== \\'deployed\\'}\\\">\\n S\\n
    \\n
    \\n P\\n
    \\n
    \\n E\\n
    \\n
    0 && ! asset.catchup.state !== \\'deployed\\',\\n \\'tc-grey-600 bgc-grey-100\\': asset.catchup.state === \\'\\' }\\\">\\n C\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    No result for display. You can create new LIVE content

    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n 0 && assets.length\\\"\\n offset=\\\"offset\\\"\\n limit=\\\"limit\\\"\\n max-length=\\\"total-1\\\"\\n next-fn=\\\"nextPage()\\\"\\n prev-fn=\\\"prevPage()\\\"\\n is-start=\\\"offset <= 0\\\"\\n is-end=\\\"offset + limit >= total\\\">\\n \\n
    \\n\\n
    0 && assets.length\\\">\\n {{ offset + 1 }} - {{ (offset + limit) < total ? offset + limit : total }} of {{ total }}\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n Back to list\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n Result URL\\n \\n
    \\n \\n State:\\n \\n {{ selectedVOD.poster.state }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Basics\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n {{ selectedVOD.name }}\\n
    \\n LCN\\n \\n {{ selectedVOD.lcn }}\\n
    \\n Description\\n \\n {{ selectedVOD.description }}\\n
    \\n Rotation\\n \\n {{ convertTime(selectedVOD.rotationStart) | date: \\'MMM d, y\\' : \\'UTC\\' }} -\\n {{ convertTime(selectedVOD.rotationFinish) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n Categories\\n \\n \\n {{ category.name }}\\n \\n
    \\n Genres\\n \\n \\n {{ genre.name }}\\n \\n
    \\n EPG channel\\n \\n {{ selectedVOD.epg.extid }}\\n ---\\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n VAST ID\\n {{ selectedVOD.vastId }}
    \\n Provider\\n {{ selectedVOD.provider }}
    \\n Adult\\n {{ selectedVOD.adult }}
    \\n ExtID\\n \\n {{ selectedVOD.extid }}\\n
    \\n Added\\n \\n {{ convertTime(selectedVOD.createTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n Updated\\n \\n {{ convertTime(selectedVOD.updateTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Pricing / Packages ({{ selectedVOD.packages.length }})\\n \\n
    \\n
    \\n
    \\n No entitlements\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    1.\\n \\n Free\\n \\n \\n {{ plan }}\\n \\n
    \\n {{ $index + 2}}\\n {{ $index + 1}}\\n .\\n From package\\n \\\"{{ po.package }}\\\":\\n Free\\n \\n {{ plan }}\\n \\n
    \\n
    \\n
    \\n \\n Media ({{ selectedVOD.streamResources.length || 0 }})\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateCDN tagURL
    \\n {{ stream.type }}\\n \\n
    {{ stream.category }}\\n \\n - {{ (stream.depth / 3600).toString().substring(0,3) + \\'h\\' }}\\n \\n
    \\n
    \\n {{ stream.state }}\\n \\n {{ stream.deployer }}\\n {{ stream.private ? \\'Yes\\' : \\'No\\' }}{{ stream.tags }}\\n {{ stream.URL }}\\n
    \\n
    \\n
    \\n
    \\n \\n Status:\\n \\n Ready\\n \\n
    \\n {{ selectedVOD.conditions.ready.state || \\'N/A\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Status Conditions\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Ready\\n \\n
    \\n ok\\n
    \\n
    \\n {{ selectedVOD.conditions.ready.state || \\'N/A\\' }}\\n
    \\n
    \\n Rotation\\n \\n
    \\n {{ convertTime(selectedVOD.rotationStart) | date: \\'MMM d, y\\' : \\'UTC\\' }} /\\n {{ convertTime(selectedVOD.rotationFinish) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n Poster\\n \\n \\n \\n
    \\n Stream\\n \\n \\n \\n
    \\n
    \\n
    \\n \\n SotalCloud App Conditions\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n Categories\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Stream Check\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n {{ stream.type }}\\n \\n \\n {{ stream.URL }}\\n \\n
    \\n No streams\\n
    \\n \\n Check Stream From User\\n \\n
    \\n \\n \\n
    \\n \\n Result Stream URL\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n {{ selectedResource.url }}\\n \\n \\n {{ selectedResource.error }}\\n \\n \\n \\n \\n
    \\n \\n HLS.JS\\n \\n \\n \\n \\n
    \\n \\n Axinom FairPlay\\n \\n \\n \\n \\n
    \\n \\n Shaka (v3.3.2)\\n \\n \\n \\n \\n
    \\n \\n Shaka (latest)\\n \\n \\n \\n \\n
    \\n \\n DASH-IF\\n \\n \\n \\n \\n
    \\n No streams\\n
    \\n
    \\n
    \\n \\n Visibility to Users\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    User GroupThrough Packages
    \\n {{ group.name }}\\n \\n \\n {{ package }}\\n \\n
    \\n
    \\n visible to everyone if active\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n EPG\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n ID\\n
    \\n
    \\n Picture\\n
    \\n
    \\n Start-end time\\n
    \\n
    \\n Event name\\n
    \\n
    \\n Catchup\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ event.id }}\\n
    \\n
    \\n \\n
    \\n
    \\n {{ event.startTime }} - {{ event.endTime }}\\n
    \\n
    \\n {{ event.name }}\\n
    \\n
    \\n \\n -\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n ID: {{ event.id }}\\n
    \\n
    \\n {{ event.startTime }} - {{ event.endTime }}\\n
    \\n
    \\n {{ event.name }}\\n
    \\n
    \\n {{ event.description }}\\n
    \\n
    \\n Catchup HLS Stream:\\n {{ currentProgramm.hlsStream || \\'N/A\\' }}\\n \\n \\n \\n \\n
    \\n Error:\\n {{ currentProgramm.hlsStreamErr }}\\n
    \\n
    \\n Catchup DASH Stream:\\n {{ currentProgramm.dashStream || \\'N/A\\' }}\\n \\n \\n \\n \\n
    \\n Error:\\n {{ currentProgramm.dashStreamErr }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n No EPG for selected date. Check EPG Source\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n\");\n$templateCache.put(\"meta/meta.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Create\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n
      \\n Order\\n
      \\n
      \\n Title\\n
      \\n
      \\n ExtID\\n
      \\n
      \\n  \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
      \\n {{ item.order }}\\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n
      \\n {{item.title}}\\n
      \\n
      \\n
      \\n
      \\n {{ item.extid }}\\n
      \\n
      \\n
      \\n
      \\n Delete\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n \\n LanguageTitle 
        {{ localizationItem.language }} {{ localizationItem.title }} \\n
      \\n Delete\\n
      \\n
      \\n No Data\\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n No Data\\n
      \\n
      \\n
    • \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"npvr/records.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n DVR Tasks\\n \\n ShowHide stat\\n \\n

    \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n {{ s.label }}\\n
    Recorded\\n {{ s.recorded }}\\n
    Failed\\n {{ s.error }}\\n
    Pending\\n {{ s.pending }}\\n
    Scheduled\\n {{ s.scheduled }}\\n
    Recording\\n {{ s.recording }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n
      \\n Subscriber\\n
      \\n
      \\n Channel\\n
      \\n
      \\n Program\\n
      \\n
      \\n Program Time\\n
      \\n
      \\n Size (MB)\\n \\n \\n
      \\n
      \\n Create Date\\n \\n \\n
      \\n
      \\n State\\n
      \\n
      \\n Record ID\\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n {{ $index + 1 + collectionData.offset }}. {{ record._subscriber_ext_id }}\\n
      \\n
      \\n \\n {{ record._channel_name }}\\n
      \\n
      \\n {{ record._program_name }}\\n
      \\n
      \\n {{ convertTime(record.start_time) | date: \\'MMM d, y h:mm\\' : \\'UTC\\' }}-\\n {{ convertTime(record.end_time) | date: \\'h:mm a\\' : \\'UTC\\' }}\\n
      \\n
      \\n {{ record.size }}\\n
      \\n
      \\n {{ convertTime(record.create_time) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
      \\n
      \\n error{{ record.state }}\\n
      \\n
      \\n {{ record.id }}\\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n No result\\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n \\n
    \\n\");\n$templateCache.put(\"offer/offer.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Create\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameTypeRent DurationPriceRestrictionsStatus
    {{offer.name}}\\n {{offer._PrivateData.isFree ? \\'Free\\' : offer._PrivateData.typeTitle}}\\n \\n {{(offer._PrivateData.isFree || (offer.right_params.duration === 0) || !offer.right_params.duration ) ? \\'∞\\' : offer.right_params.duration + \\' \\' +\\n offer.right_params.duration_unit + \\'(s)\\'}}\\n {{offer._PrivateData.isFree ? \\'Free\\' : offer._PrivateData.priceOuput}}\\n \\n {{group.title}}\\n \\n \\n To: {{offer._PrivateData.end_time.format(\\'lll\\')}}\\\" ng-if=\\\"offer.is_active\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n
    \\n Common\\n
    \\n \\n
    \\n \\n {{ activeOffer._PrivateData.isNew ? \\'Create\\' : \\'Save\\' }}\\n \\n
    \\n
    \\n\\n Offer Name\\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n Options\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Billing Options\\n

    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    Rental options

    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    Restriction options

    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n Rent Options\\n

    \\n\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Options\\n
    \\n
    \\n
    \\n
    \\n

    \\n Billing Options\\n

    \\n
    \\n
    \\n {{activeOffer._PrivateData.billing_params_price}}\\n
    \\n
    \\n {{activeOffer._PrivateData.billing_params_currency.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Rental options

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Restriction options

    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Rent Options\\n

    \\n
    \\n
    \\n {{activeOffer._PrivateData.right_params_duration || \\'Permanent\\'}}\\n
    \\n
    \\n {{activeOffer._PrivateData.right_params_duration_unit.title}}\\n
    \\n
    \\n
    \\n
    \\n

    \\n Free Options\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n Content\\n
    \\n \\n
    \\n
    \\n
    \\n  \\n\\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    No content in this offer. You can add new one.

    \\n \\n Add content to offer\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"owner-auth/owner-auth.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Key\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    {{loginFormData.error}}
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"package/package.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n Create\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameStatus
    {{pkg.title}}\\n To: {{pkg._PrivateData.rotation_finish.format(\\'lll\\')}}\\\" ng-if=\\\"pkg.is_available\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Package name*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Available Period\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Monetization Model\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Free\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Plans\\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Restrict visibility with groups:\\n ({{ activePackage.groups.length }})\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n Content\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n  \\n
    \\n \\n
    \\n
    \\n
    \\n Order\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n #{{ $index + 1 + activePackage._PrivateData.offset }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n = activePackage._PrivateData.assets.length\\\"\\n >\\n
    \\n
    \\n
    \\n

    No content in this Package. You can add new one.

    \\n \\n Add content to Package\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"plan/plan.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NamePeriodPriceTrialRestrictionsStatus
    {{plan.name}}\\n {{plan.right_params.duration + \\' \\' + plan.right_params.duration_unit + \\'(s)\\'}}\\n {{plan._PrivateData.priceOuput}}\\n \\n \\n \\n \\n {{group.title}}\\n \\n \\n To: {{plan._PrivateData.end_time.format(\\'lll\\')}}\\\" ng-if=\\\"plan.is_active\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Back\\n
    \\n
    \\n
    \\n
    \\n Common\\n
    \\n \\n
    \\n \\n {{ activePlan._PrivateData.isNew ? \\'Create\\' : \\'Save\\' }}\\n \\n
    \\n
    \\n Plan Name\\n \\n \\n
    \\n
    \\n
    \\n
    \\n Options\\n
    \\n
    \\n
    \\n
    \\n

    \\n Billing Options\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    Rental options

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Restriction options

    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Subscription Options\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Trial Options\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Options\\n
    \\n
    \\n
    \\n
    \\n

    \\n Billing Options\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    Rental options

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Restriction options

    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Subscription Options\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Trial Options\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Content\\n
    \\n \\n
    \\n
    \\n
    \\n  \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    No content in this plan. You can add new one.

    \\n \\n Add content to plan\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"profile/profile.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Instance Logo\\n
    \\n
    \\n \\n Reset logo\\n \\n
    \\n
    \\n

    Name and description of the project

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n Languages\\n \\n

    \\n
      \\n
    • \\n {{ $index+1 }}.\\n {{ lang.title || \\'N/A\\' }} ({{ lang.lang }})\\n \\n \\n \\n
    • \\n
    \\n
    \\n
    \\n

    \\n \\n Timezone\\n

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Your services

    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n {{::app.title}} \\n \\n Open\\n {{::app.app_url}}\\n \\n {{ app.clientID }}\\n \\n App name:\\n n/a\\n {{ app.app_name | limitTo: 10 }}\\n Bundle:\\n n/a\\n {{ app.app_bundle | limitTo: 10 }}\\n Store URL:\\n n/a\\n {{ app.app_store_url | limitTo: 10 }}\\n
    \\n Or visit this link to get the latest info\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n Contact information\\n
    \\n
    \\n

    \\n Name: {{::info.name}}\\n

    \\n

    \\n Company: {{::info.company}}\\n

    \\n

    \\n Email: {{::info.email}}\\n

    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"register/register.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Registration\\n
    \\n\\n
    \\n
    \\n Your domain: {{translit(registrationFormData.inputs.name)}}.sotalcloud.com\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n\\n
    \\n
    \\n
    \\n Please contact our sales team to receive
    an activation code at\\n sales@sotalcloud.com
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    {{registrationFormData.error ||\\n registrationFormData.validation.errorRecaptchaResponse}}\\n
    \\n
    \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n

    Thank you for your registration!

    \\n A confirmation e-mail has been sent to you. Please click on the link in the email in order to complete your registration.\\n

    \\n
    \\n
    \\n\");\n$templateCache.put(\"sessions/sessions.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n Sessions\\n

    \\n
    \\n
    \\n
    \\n \\n Last Update Time:\\n {{ convertTime(lastUpdateTime) | date: \\'MMM d, H:mm:ss\\' : \\'UTC\\' }}\\n \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Notice

    \\n A session is created for viewing a channel/VOD/Catchup/nPVR when the following conditions are met:
    \\n - the session mechanism is turned on on the servers (this can be specified with the administrators);
    \\n - the channel/VOD specifies, that the stream is going to be controlled by the origin servers (the \\\"deployment strategy\\\" of the asset stream is specified as \\\"origin\\\")\\n

    In the other cases, asset views will not be accounted for in the session statistics.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    SubscriberContent TypeTitleIPDeviceSession StartSession EndPlayed
    No data
    {{ session.subscriber }}{{ session.contentType }}{{ session.contentTitle }}{{ session.IP }}\\n {{ session.deviceOS }} ({{ session.deviceModel }})\\n {{ session.deviceOS || \\'N/A\\' }}\\n {{ convertTime(session.sessionStart) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n active\\n \\n N/A\\n \\n \\n {{ convertTime(session.sessionEnd) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n \\n \\n \\n N/A\\n \\n \\n {{ session.duration }}\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Detailed analysis of the last sessions\\n \\n
    \\n
    \\n Detailed analysis of the last {{ chart.totalSessions }} sessions: the period from {{ convertTime(chart.periodStart) | date: \\'MMM d, y H:00\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Top ContentPlayed
    {{ asset.title }}{{ asset.played }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Unique Users:{{ chart.totalUniqueUsers }}
    Unique Devices:{{ chart.totalUniqueDevices }}
    Total content played:{{ chart.totalPlayed }}
    \\n
    \\n
    \\n
    \\n
    \\n Device Distribution\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"showcase/showcase.tpl.html\",\"
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    0\\\">\\n
    \\n Labels: \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    create
    \\n
    \\n\\n
    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Labels: \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Action\\n

    \\n\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/overview.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Top Month VOD\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitleViews
    \\n Insufficient data for result\\n
    {{$index + 1}}{{data.asset.id}}{{data.asset.title}}{{data.count}}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Top Month live\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitleViews
    \\n Insufficient data for result\\n
    {{$index + 1}}{{data.asset.id}}{{data.asset.title}}{{data.count}}
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n History\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TitleSubscriberIpUser AgentDate
    {{data.asset.title}}{{data.subscriber.extid}}{{data.ip || \\'N/A\\'}}{{data.user_agent}}{{data.time}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"subscribers/subscribers.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n \\n Import Subscribers\\n\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n\\n \\n + Add Subscriber\\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n \\n
      \\n \\n
      \\n
      Total: -1\\\">{{ userCount }}
      \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n
      \\n
      \\n

      No result for display.

      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n ID\\n \\n \\n
      \\n
      \\n Username\\n \\n \\n
      \\n
      \\n Status\\n \\n \\n
      \\n
      \\n Registered On\\n \\n \\n
      \\n
      \\n Name\\n
      \\n
      \\n ExtID\\n \\n \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n
      \\n \\n {{ ::user.id }}\\n
      \\n
      \\n {{ user.username || \\'N/A\\' }}\\n
      \\n
      \\n \\n
      \\n
      \\n {{ convertTime(user.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
      \\n
      \\n {{ ((user.first_name ? user.first_name + \\' \\' : \\'\\') + (user.last_name ? user.last_name + \\' \\': \\'\\')) || \\'N/A\\' }}\\n
      \\n
      \\n {{ ::user.ext_id }}\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Refresh \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      Username{{ user.username || \\'N/A\\' }}
      Status{{ user.blocked ? \\'blocked\\' : \\'active\\' }}
      Language{{ user.language }}
      Registration Code{{ user.registration_code }}
      Password Reset Code{{ user.password_reset_code }}
      First Name
      Last Name
      Contact Phone
      Contact Email
      Country
      State/Province
      City
      Zip/Postal Code
      Address #1
      Address #2
      PC PIN\\n
      \\n \\n
      \\n
      Screen Count \\n
      \\n \\n
      \\n
      NPVR Limit\\n
      \\n \\n
      \\n
      Groups\\n \\n
      \\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n Save\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Registered devices\\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      IDStatusLast Login TimeTypeExtIDRegistered OnTitleOSAPPModelSTB
      {{ device.id }}\\n \\n \\n {{ convertTime(device.update_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }} {{ device.platform.name }}{{ device.ext_id }}{{ convertTime(device.create_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}{{ device.name }}{{ device.os }} {{device.os_version}}{{ device.app_name }} {{device.app_version}}{{ device.model }}\\n
      \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n No result\\n
      \\n
      \\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n \\n Sessions |\\n Viewing Stats\\n \\n \\n These statistics are collected if the applications are working with APIv2 while the session mechanism is enabled on the content servers.\\n These statistics are collected if the applications are working with APIv1.\\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      Content TypeTitleSession StartSession EndPlayedIPDevice
      {{ session.contentType }}{{ session.contentTitle }}{{ convertTime(session.sessionStart) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n active\\n {{ convertTime(session.sessionEnd) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n \\n \\n {{ session.duration }}\\n {{ session.IP }}\\n {{ session.deviceOS }} ({{ session.deviceModel }})\\n {{ session.deviceOS }}\\n
      \\n
      \\n
      \\n
      \\n No result\\n
      \\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      EventDateTitleIPUser Agent
      Viewing {{ event.asset.type }}{{ convertTime(event.timestamp) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}{{ event.asset.name }}{{ event.subscriber_ip || \\'N/A\\' }}{{ event.subscriber_ua }}
      \\n
      \\n
      \\n
      \\n No result\\n
      \\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n
      \\n
      \\n\\n\\n
      \\n
      \\n
      \\n Refresh \\n \\n + Add subscription\\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      IDPlanPriceStatusBilling PeriodPeriod StartPeriod End
      {{ ::user._subscriptionOffset + $index + 1 }}{{ ::subscription.id }}{{ ::subscription.plan.name }}{{ ::subscription.plan.price / 100 }} {{ subscription.plan.price_currency }}\\n {{subscription._state}} \\n \\n {{ subscription._periodUnit }}{{ convertTime(subscription.period_start_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}{{ convertTime(subscription.period_end_time) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n No result\\n
      \\n
      \\n
      \\n = user._subscriptions.length\\\"\\n style=\\\"margin: auto;\\\"\\n >\\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n \\n \\n
      \\n
      \\n
      \\n Close\\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n \\n\\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"superuser/superuser.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Instance\\n
    \\n
    \\n
    \\n\\n
    \\n {{operator.name}}  \\n
    \\n
    \\n
    \\n Select\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"vod/vod.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    {{collectionData.error}}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n

    No result for display. You can create new VOD content

    \\n \\n Create new VOD\\n \\n \\n Create new TV Series\\n \\n \\n Import content\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n\\n
    \\n \\n\\n
    \\n \\n \\n
    \\n No episodes found. You can create new one\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \");\n$templateCache.put(\"vod2/vod.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n Type\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Title Name\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Categories\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Genres\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Packages\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    FormatTitleYearIMDbCategoriesGenresStream(s)Ready
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    {{ asset.type }}\\n {{ asset.name }}\\n {{ asset.year || \\'-\\' }}{{ asset.imdb }}\\n \\n {{ asset.categories[0].name }}\\n 1\\\">\\n +{{ asset.categories.length-1 }}\\n \\n \\n {{ asset.durationMin }}\\'\\n \\n \\n {{ asset.genres[0].name }}\\n 1\\\">\\n +{{ asset.genres.length-1 }}\\n \\n \\n \\n t{{ stream.type }}\\n \\n \\n n/a\\n \\n \\n
    \\n R\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n No data\\n
    \\n\\n
    \\n 0 && assets.length\\\"\\n offset=\\\"offset\\\"\\n limit=\\\"limit\\\"\\n max-length=\\\"total-1\\\"\\n next-fn=\\\"nextPage()\\\"\\n prev-fn=\\\"prevPage()\\\"\\n is-start=\\\"offset <= 0\\\"\\n is-end=\\\"offset + limit >= total\\\">\\n \\n
    \\n\\n
    0 && assets.length\\\">\\n {{ offset + 1 }} - {{ (offset + limit) < total ? offset + limit : total }} of {{ total }}\\n
    \\n
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n Back to list\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n Result URL\\n \\n
    \\n \\n Type: 2x3 State:\\n \\n {{ selectedVOD.poster.state }}\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n Result URL\\n \\n
    \\n \\n Type: 16x9 State:\\n \\n {{ selectedVOD.landscapePoster.state }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Basics\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n TV Series\\n \\n \\n {{ selectedVOD.seriesName }}\\n \\n
    \\n Season\\n \\n {{ selectedVOD.seasonName }}\\n
    \\n Name\\n \\n {{ selectedVOD.name }}\\n
    \\n Index\\n \\n {{ selectedVOD.episodeIndex }}\\n
    \\n Year\\n \\n {{ selectedVOD.year }}\\n
    \\n Running time\\n \\n {{ selectedVOD.duration }}\\n
    \\n Description\\n \\n {{ selectedVOD.description }}\\n
    \\n Seasons\\n \\n {{ selectedVOD.seasons.length }}\\n
    \\n Genres\\n \\n \\n {{ genre.name }}\\n \\n
    \\n Release Date\\n \\n {{ convertTime(selectedVOD.rotationStart) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n Expiration Date\\n \\n {{ convertTime(selectedVOD.rotationFinish) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n Categories\\n \\n \\n {{ category.name }}\\n \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n IMDb\\n \\n {{ selectedVOD.imdb || \\'\\'}}\\n \\n ({{ selectedVOD.imdbVoteCount || \\'\\' }})\\n \\n
    \\n Country of origin\\n {{ selectedVOD.country }}
    \\n Adult\\n {{ selectedVOD.adult }}
    \\n Age Limit\\n {{ selectedVOD.ageLimit }}
    \\n Kp rating\\n \\n {{ selectedVOD.kinopoisk }}\\n \\n ({{ selectedVOD.kinopoiskVoteCount }})\\n \\n
    \\n Provider\\n {{ selectedVOD.provider }}
    \\n Studio\\n {{ selectedVOD.studio }}
    \\n MPAA\\n {{ selectedVOD.mpaa }}
    \\n VAST ID\\n {{ selectedVOD.vastId }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n Pricing / Packages ({{ selectedVOD.packages.length }})\\n \\n
    \\n
    \\n
    \\n No entitlements\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    1.\\n \\n Free\\n \\n \\n {{ plan }}\\n \\n
    \\n {{ $index + 2}}\\n {{ $index + 1}}\\n .\\n From package\\n \\\"{{ po.package }}\\\":\\n Free\\n \\n {{ plan }}\\n \\n
    \\n
    \\n
    \\n \\n Media ({{ selectedVOD.streamResources.length || 0 }})\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateTagsURL
    \\n {{ stream.type }}\\n \\n
    {{ stream.category }}\\n
    \\n
    \\n {{ stream.state }}\\n \\n {{ stream.deployer }}\\n {{ stream.private }}{{ stream.tags }}\\n {{ stream.URL }}\\n
    \\n
    \\n
    \\n
    \\n \\n Status:\\n \\n Ready\\n \\n
    \\n {{ selectedVOD.conditions.ready.state || \\'N/A\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Metadata\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n ExtID\\n \\n {{ selectedVOD.extid }}\\n
    \\n Added\\n \\n {{ convertTime(selectedVOD.createTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n Updated\\n \\n {{ convertTime(selectedVOD.updateTime) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n \\n Cast & Crew ({{ selectedVOD.persons.length }})\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameRole
    \\n {{ person.first_name }} {{ person.last_name }}\\n {{ person.role }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Status Conditions\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Ready\\n \\n
    \\n ok\\n
    \\n
    \\n {{ selectedVOD.conditions.ready.state || \\'N/A\\' }}\\n
    \\n
    \\n Rotation\\n \\n
    \\n {{ convertTime(selectedVOD.rotationStart) | date: \\'MMM d, y\\' : \\'UTC\\' }} /\\n {{ convertTime(selectedVOD.rotationFinish) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n Poster\\n \\n \\n \\n
    \\n Stream\\n \\n \\n \\n
    \\n
    \\n
    \\n \\n SotalCloud App Conditions\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Categories\\n \\n \\n \\n
    \\n Genres\\n \\n \\n \\n
    \\n
    \\n
    \\n \\n Series Status\\n \\n
    \\n
    \\n
    \\n
    \\n ok\\n
    \\n
    \\n {{ selectedVOD.seriesStatus || \\'N/A\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Stream Check\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ stream.type }}\\n ({{ stream.category}})\\n \\n \\n \\n {{ stream.URL.replace(\\'http+proxy://\\', \\'https://\\') }}\\n \\n
    \\n No streams\\n
    \\n \\n Check Stream From User\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Stream URL\\n \\n \\n {{ selectedResource.url }}\\n \\n \\n {{ selectedResource.error }}\\n \\n \\n \\n \\n \\n \\n \\n \\n Axinom FairPlay\\n \\n \\n Shaka\\n \\n \\n \\n \\n
    \\n No streams\\n
    \\n
    \\n
    \\n \\n Visibility to Users\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    User GroupThrough Packages
    \\n {{ group.name }}\\n \\n \\n {{ package }}\\n \\n
    \\n
    \\n visible to everyone if active\\n
    \\n
    \\n
    \\n
    \\n inherited from the series setting\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Seasons\\n \\n \\n Add Season\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    IndexNameDescriptionEpisodes
    {{ season.season_index }}{{ season.name }}{{ season.description || \\'N/A\\' }}{{ season.episodes.length }}\\n \\n \\n \\n \\n
    \\n No seasons\\n
    \\n
    \\n
    \\n \\n Episodes\\n \\n \\n Add Episode\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Season {{ season.season_index }}: {{ season.name }}
    {{ episode.episode_index }}\\n \\n {{ episode.name }}\\n \\n \\n
    {{stream.type}} {{stream.category}} status: {{stream.state === \\'deployed\\' ? \\'Deployed\\' : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.state === \\'deployed\\',\\n \\'tc-red-600 bgc-red-100\\': stream.state !== \\'deployed\\' && !(stream.preparer == \\'noisypeak\\' && stream.progress != 100),\\n \\'tc-amber-800 transcoding-pulse-animation\\': stream.preparer == \\'noisypeak\\' && stream.progress != 100}\\\">\\n P\\n S\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n No episodes\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"welcome/welcome.tpl.html\",\"
    \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n Welcome\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n Registration\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    {{loginFormData.error}}
    \\n
    \\n
    \\n\\n\");\n$templateCache.put(\"application/ng/banners.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n Banners NG\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n # {{ ad.order }}\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n {{ ad.pictures[0].state }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name:\\n \\n {{ ad.name || \\'Empty\\' }}\\n
    \\n Status:\\n \\n Active\\n Inactive\\n
    \\n Selected Tags:\\n \\n
    \\n
    \\n \\n {{ tag.type }}:\\n \\n
    \\n {{ tag.title || tag.id }}\\n
    \\n
    \\n
    \\n
    \\n Auto-Tags:\\n \\n
    \\n \\n {{ tag.type }}:\\n \\n
    \\n {{ tag.title || tag.id }}\\n
    \\n
    \\n
    \\n Active Period:\\n \\n From {{ ad._rotation_start | date: \\'M/d/yyyy\\' : \\'UTC\\' }} to {{ ad._rotation_end | date: \\'M/d/yyyy\\' : \\'UTC\\' }}\\n
    \\n Link to {{ ad._link_info.asset.type }}:\\n \\n {{ ad._link_info.asset.title || ad._link_info.asset.id }}\\n ASSET NOT FOUND\\n
    \\n External Link:\\n \\n {{ ad._link_info.link }}\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"application/rails/rails.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Total Screen: {{ screens.length }}\\n
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    {{ screen.name | limitTo: 25 }}

    \\n \\n {{ screen.rails.length }} rails\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n To Screens\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Screen ID = {{ screen.id }}\\n New Screen\\n
    \\n
    \\n
    \\n \\n \\n Save\\n \\n \\n \\n Delete\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n
    \\n \\n \\n
    \\n
    \\n ExtID\\n \\n
    \\n \\n \\n
    \\n
    \\n Created\\n \\n {{ convertTime(screen.create_time) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n\\n
    \\n
    \\n Banners\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
      \\n
    • \\n \\n\\n
      Edit\\n
      \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n \\n Add/Delete \\n
      \\n
    • \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n  \\n
    \\n
    \\n Order\\n
    \\n
    \\n Rail\\n
    \\n
    \\n Preview\\n
    \\n
    \\n  \\n
    \\n
    \\n
    \\n
      \\n
    • \\n \\n
      \\n \\n :::\\n
      \\n
      \\n \\n
      \\n
      \\n {{ rail.name }}\\n ({{ rail.content_n || 0 }})\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n N/A\\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
    \\n \\n \\n
  • \\n
    \\n
    \\n No data\\n
    \\n
    \\n
  • \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Add Rail\\n \\n
    \\n\\n
    \\n Total Rails: {{ rails.length }}\\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TitleAssetsPreview
    \\n
    No data
    \\n
    \\n {{ $index + 1 }}.\\n \\n {{ rail.name }}\\n \\n {{ rail.content_n || 0 }}\\n \\n
    \\n
    \\n \\n
    \\n
    \\n N/A\\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n To Rails\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Rail ID = {{ rail.id }}\\n New Rail\\n
    \\n
    \\n
    \\n \\n \\n Save\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n
    \\n \\n \\n
    \\n
    \\n ExtID\\n \\n {{ rail.ext_id }}\\n
    \\n \\n \\n
    \\n
    \\n \\\"More\\\" menu\\n \\n
    \\n \\n \\n
    \\n
    \\n Created\\n \\n {{ convertTime(rail.create_time) | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n Type\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n  \\n
    \\n
    \\n Order\\n
    \\n
    \\n  \\n
    \\n
    \\n Format\\n
    \\n
    \\n Name\\n
    \\n
    \\n Genres\\n
    \\n
    \\n ID\\n
    \\n
    \\n Ready\\n
    \\n
    \\n  \\n
    \\n
    \\n
    \\n
      \\n
    • \\n \\n
      \\n \\n :::\\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n {{ asset.type }}\\n
      \\n
      \\n {{ asset.name }}\\n
      \\n
      \\n \\n {{ genre.name }}\\n \\n \\n N/A\\n \\n
      \\n \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
    \\n \\n \\n
  • \\n
    \\n
    \\n No data\\n
    \\n
    \\n
  • \\n \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n Menu Editor\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n {{ m.title }}\\n
    \\n
    \\n
    \\n Search\\n
    \\n
    Login\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n Save\\n \\n
    \\n
    \\n
    \\n \\n \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Order\\n
    \\n
    \\n Title\\n
    \\n
    \\n Type\\n
    \\n
    \\n App icon\\n
    \\n
    \\n  \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n #{{ $index+1 }}\\n
      \\n
      \\n {{ m.title }}\\n
      \\n
      \\n \\n Custom screen\\n \\n \\n Default screen\\n \\n
      \\n
      \\n {{ m.icon }}\\n
      \\n
      \\n
      \\n \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n
      \\n No data\\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n\\n
    \\n\\n\\n
    \\n\\n\");\n$templateCache.put(\"statistics/reports/active-subscriber-stat.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\')}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    PeriodTotal on start Total on end Delta (change)
    \\n Insufficient data for result\\n
    {{getFormattedDate(data._date, \\'M.D.YYYY\\')}}{{data.total_on_beginning_of_month}}{{data.total_on_beginning_of_month + data.joined + data.unsubscribed}}{{data.joined + data.unsubscribed}}
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/content-purchases.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\')}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Period{{package.title}}
    \\n Insufficient data for result\\n
    {{getFormattedDate(data._date, \\'M.D.YYYY\\')}}{{data.packages[package.id] ? data.packages[package.id].usage_count.toString() : \\'-\\'}}
    \\n
    \\n
    \\n

    Distribution of devices in {{getFormattedDate(statistic[report.type].total.period, \\'M.D.YYYY\\')}}

    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/content-usage.html\",\"
    \\n
    \\n\\n
    \\n
    \\n
    \\n Top VOD\\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitleUsers
    \\n Insufficient data for result\\n
    {{$index + 1}}{{data.asset.id}}{{data.asset.title}}{{data.count}}
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n Top Live\\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitleUsers
    \\n Insufficient data for result\\n
    {{$index + 1}}{{data.asset.id}}{{data.asset.title}}{{data.count}}
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/devices-total.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\')}}\\n
    \\n
    \\n
    \\n

    Distribution of devices in {{getFormattedDate(statistic[report.type].total.period, \\'M.D.YYYY\\')}}

    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Period{{device}}
    \\n Insufficient data for result\\n
    {{getFormattedDate(data._date, \\'M.D.YYYY\\')}}{{device.total}} ({{device.new}})
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n Insufficient data for result\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/packages-purchases.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\')}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Period{{package.title}}
    \\n Insufficient data for result\\n
    {{getFormattedDate(data._date, \\'M.D.YYYY\\')}}{{data.packages[package.id] ? data.packages[package.id].usage_count.toString() : \\'-\\'}}
    \\n
    \\n
    \\n

    Distribution of packages in {{getFormattedDate(statistic[report.type].total.period, \\'M.D.YYYY\\')}}

    \\n \\n \\n \\n
    \\n Insufficient data for result\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/subs-total.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\')}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    PeriodActive Total New
    \\n Insufficient data for result\\n
    {{getFormattedDate(data._date, \\'M.D.YYYY\\')}}{{data.active}}{{data.total}}{{data.new}}
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/subs-total_old.html\",\"
    \\n \\n \\n
    \\n\");\n$templateCache.put(\"statistics/reports/total-live-details.html\",\"
    \\n
    \\n
    \\n Details for {{statistic[currentReportType].details.title}}\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitle
    \\n No data\\n
    {{$index + 1}}{{asset.id}}{{asset.title}}
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/total-live.html\",\"
    \\n
    \\n
    \\n Statistic Period:\\n {{ getFormattedDate(statistic[report.type].calendar[0], \\'M.D.YYYY\\') }} -\\n {{ getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'M.D.YYYY\\') }}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    PeriodNew ChannelsTotal in system
    \\n Insufficient data for result\\n
    {{ getFormattedDate(data._date, \\'MMM YYYY\\') }}\\n {{ data.new }}\\n 0\\\"\\n style=\\\"text-decoration: underline\\\"\\n ng-click=\\\"statistic[report.type].showDetails(data, \\'new\\')\\\">\\n list\\n \\n {{ data.total }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/total-vod-details.html\",\"
    \\n
    \\n
    \\n Details for {{statistic[currentReportType].details.title}}\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    #IdTitle
    \\n No data\\n
    {{ $index + 1 }}{{ asset.id }}{{ asset.title }}
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"statistics/reports/total-vod.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n Statistic Period:\\n {{getFormattedDate(statistic[report.type].calendar[0], \\'MM/DD/YYYY\\')}} -\\n {{getFormattedDate(statistic[report.type].calendar[statistic[report.type].calendar.length - 1], \\'MM/DD/YYYY\\')}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    MonthNew VOD
    \\n Insufficient data for result\\n
    \\n {{ getFormattedDate(data._date, \\'MMM YYYY\\') }}\\n \\n {{ data.new }}\\n 0\\\"\\n style=\\\"text-decoration: underline\\\"\\n ng-click=\\\"statistic[report.type].showDetails(data, \\'new\\')\\\">\\n list\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Total Movies:\\n \\n \\n \\n -1\\\" class=\\\"tc-green-700\\\">\\n {{ totalVOD.totalActiveMovies }}\\n \\n /\\n \\n \\n \\n -1\\\">\\n {{ totalVOD.totalMovies }}\\n \\n
    \\n
    \\n Total Series:\\n \\n \\n \\n -1\\\" class=\\\"tc-green-700\\\">\\n {{ totalVOD.totalActiveSeries }}\\n \\n /\\n \\n \\n \\n -1\\\">\\n {{ totalVOD.totalSeries }}\\n \\n
    \\n
    \\n Total Episodes:\\n \\n \\n \\n -1\\\" class=\\\"tc-grey-700\\\">\\n {{ totalVOD.totalEpisodes }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"add-account.html\",\"
    \\n

    Create new account

    \\n\\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"add-asset-localization.html\",\"
    \\n
    \\n Create localization for\\n {{ currentMeta }}: {{ activeItem.title }} \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \");\n$templateCache.put(\"add-cast-crew.html\",\"
    \\n
    \\n

    Cast & Crew

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Create\\n
    \\n
    \\n
    \\n
    \\n

    \\n First Name\\n

    \\n \\n \\n
    \\n
    \\n

    \\n Middle Name (optional)\\n

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Second Name\\n

    \\n \\n \\n
    \\n
    \\n

    \\n Role\\n

    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n {{key.replace(\\'_\\', \\' \\')}}\\n\\n
      \\n
    • \\n
      \\n
      \\n {{person.first_name}} {{person.second_name}}\\n
      \\n
      \\n \\n \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"add-catchup.html\",\"
    \\n\t
    \\n\t
    \\n
    \\n
    \\n\t
    \\n\t\t
    \\n\t\t\t
    \\n\t\t\t\t
    Catchup source
    \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
    \\n\\n\t\t\t
    \\n\t\t\t\t
    Catchup depth
    \\n\t\t\t\t\\n\t\t\t
    \\n\t\t
    \\n\t
    \\n
    \\n\");\n$templateCache.put(\"add-cdn.html\",\"
    \\n
    \\n

    Add CDN

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"add-group.html\",\"
    \\n\t

    Create new group

    \\n\\n\t
    \\n\t\t\\n\t
    \\n
    \\n\");\n$templateCache.put(\"add-instance.html\",\"
    \\n
    \\n

    \\n Add\\n Edit\\n Replication\\n ID = {{ replication.id }}\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Invalid token\\n
    \\n
    \\n {{ replication.checkedOperator.operator }}\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n {{ replication.authError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Type\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n {{ replication.type }}\\n
    \\n
    \\n
    \\n
    \\n \\n Elements\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Import time (UTC+0)\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"add-localization-lang.html\",\"
    \\n
    \\n

    Add Localization Language

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"add-media.html\",\"
    \\n
    \\n

    Add media

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Upload video file\\n
      \\n
      \\n
      \\n
      \\n Transcoding profile:\\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n\\n
      \\n {{ tmpMedia.file.name || \\'Select file...\\' }}\\n
      \\n
      \\n Note: Maximum file size is 100mb\\n
      \\n
      \\n Source URL: {{ tmpMedia.source }}\\n
      \\n
      \\n
      \\n {{ errors.upload || errors.source }}\\n
      \\n
      \\n {{ success.upload }}\\n
      \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Video file from external source\\n
      \\n
      \\n
      \\n
      \\n Transcoding profile:\\n
      \\n
      \\n \\n
      \\n
      \\n Supported format:
      \\n Video: h.264
      \\n Audio: AAC\\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n HLS/DASH adaptive stream from external source\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Youtube link\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n\\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Shoutcast link\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
      \\n
    • \\n
      \\n Advanced\\n
      \\n
      \\n
      \\n
      \\n Select deployment strategy:\\n\\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"add-metadata-localization.html\",\"
    \\n
    \\n Create localization for\\n {{ currentMeta }}: {{ activeItem.title }} \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \");\n$templateCache.put(\"add-metadata.html\",\"
    \\n
    \\n Create {{ currentMeta }} \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"add-screen-variant.html\",\"
    \\n

    Create new screen representation

    \\n\\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"add-screen.html\",\"
    \\n\t

    Create new screen

    \\n\\n\t
    \\n\t\t\\n\t
    \\n
    \\n\");\n$templateCache.put(\"add-subscriber.html\",\"
    \\n
    \\n

    New Subscriber

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"add-user-to-group.html\",\"
    \\n\t
    \\n\t\t
    \\n\t
    \\n
    \\n
    \\n\t
    \\n\t\t

    User manager

    \\n\t
    \\n
    \\n
    \\n\t
    \\n\t\t\\n\t\t\\n\t
    \\n\t
    \\n\t\t\\n\t
    \\n
    \\n\");\n$templateCache.put(\"add-video.html\",\"
    \\n
    \\n

    \\n Add\\n Edit\\n media\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Upload video file\\n
      \\n
      \\n
      \\n
      \\n Transcoding profile:\\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n
      \\n Note: Maximum file size is 100mb\\n
      \\n
      \\n
      \\n Source URL: {{ tmpMedia.url }}\\n
      \\n
      \\n {{ error }}\\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Video file from external source\\n
      \\n
      \\n
      \\n
      \\n Transcoding profile:\\n
      \\n
      \\n \\n \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n HLS/DASH adaptive stream from external source\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Youtube link\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n {{ error }}\\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Shoutcast link\\n
      \\n
      \\n
      \\n
      \\n Source URL:\\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n
      \\n Select deployment strategy:\\n\\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
      \\n
    • \\n
      \\n
      \\n
      \\n Select private resource protection:\\n\\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"asset-localization.html\",\"
    \\n
    \\n \\n
    \\n
    \");\n$templateCache.put(\"asset-status-change.html\",\"
    \\n
    Rental options
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    Warning

    \\n Licenses Window is out of date.\\n
    \\n \\n \\n \\n \\n \\n
    \\n\");\n$templateCache.put(\"catchup-options.html\",\"
    \\n\t
    \\n\t
    \\n
    \\n
    \\n\t
    \\n\t\t
    \\n\t\t\t
    \\n\t\t\t\t
    Catchup source
    \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
    \\n\\n\t\t\t
    \\n\t\t\t\t
    Catchup depth
    \\n\t\t\t\t\\n\t\t\t
    \\n\t\t
    \\n\t
    \\n
    \\n\");\n$templateCache.put(\"create-epg-import.html\",\"
    \\n\t

    Create new EPG Source

    \\n\\n\t
    \\n\t\t\\n\t
    \\n\t
    \\n\t\t\\n\t
    \\n\t
    \\n\t\t\\n\t\te.g., http://sotalcloud.blob.core.windows.net/publicstorage/def_epg_image.jpeg\\n\t
    \\n
    \\n\");\n$templateCache.put(\"edit-platform.tpl.html\",\"
    \\n
    \\n

    Platform {{ editedPlatform.title }}

    \\n
    \\n
    \\n
    \\n
    \\n \\n App Name\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n App Bundle\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n App Store URL\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"edit-playlist-multiple.html\",\"
    \\n

    Multiple group

    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"epg-channel-schedule.tpl.html\",\"
    \\n
    \\n

    Schedule for {{ activeChannel.title }}

    \\n
    \\n
    \\n
    \\n Timezone:\\n \\n {{ tz }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Picture\\n
    \\n
    \\n Start-end time\\n
    \\n
    \\n Event name\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n {{ convertTime(event._start) | date: \\'HH:mm\\' : \\'UTC\\' }} - {{ convertTime(event._end) | date: \\'HH:mm\\' : \\'UTC\\' }}\\n
    \\n
    \\n {{ event.title }}\\n
    \\n
    \\n
    \\n {{ genre.title }}\\n
    \\n
    \\n
    \\n {{ event.description }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n {{ convertTime(event._start) | date: \\'HH:mm\\' : \\'UTC\\' }} - {{ convertTime(event._end) | date: \\'HH:mm\\' : \\'UTC\\' }}\\n
    \\n
    \\n {{ event.title }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n No EPG for {{ date.date }}. Pick another Date.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"header.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\\"Sotal\\n \\n
    \\n
    \\n \\n Administration panel {{currentRoute ? \\'/\\' + currentRoute : \\'\\'}} [Read-only]\\n \\n\\n
    \\n \\n {{currentOperator.title}}\\n [{{currentOperator.projectName}}]\\n \\n\\n \\n
    \\n
    \\n\\n \\n \\n {{globals.currentUser.username}}\\n \\n\\n \\n
  • \\n Profile \\n
  • \\n
  • \\n Log Out \\n
  • \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"imdb-import.html\",\"
    \\n

    IMDb import

    \\n
    \\n
    \\n
    \\n Choose one:\\n \\n
    \\n
    \\n\");\n$templateCache.put(\"live-event.tpl.html\",\"
    \\n
    \\n
    \\n

    Live Event Details

    \\n
    \\n
    \\n
    \\n \\n Select User\\n \\n \\n \\n
    \\n
    \\n \\n Catchup Stream Type\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Catchup Stream URL\\n
    \\n \\n please select user\\n \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n {{ catchupStream.url }}\\n \\n \\n {{ catchupStream.error }}\\n \\n \\n \\n \\n \\n HLS.JS\\n \\n \\n Shaka\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Live Event ID{{ liveEvent.id }}
    Time{{ liveEvent.start }} - {{ liveEvent.endTime }}
    Name{{ liveEvent.name || \\'N/A\\' }}
    Description{{ liveEvent.description || \\'N/A\\' }}
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"live-watch-stream.tpl.html\",\"
    \\n
    \\n
    \\n

    Watch Stream {{ asset.title }}

    \\n
    \\n \\n
    \\n Stream:\\n {{ selectedStream || \\'N/A\\' }}
    \\n Error:\\n {{ selectedStreamError }}\\n
    \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"new-banner.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    Banner type:
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n {{ newBanner._error.assetLink }}\\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"new-geoip-rule.tpl.html\",\"
    \\n
    \\n

    Create new GeoIP rule

    \\n After a rule is created, it is effective immediately.\\n
    \\n
    \\n
    \\n
    \\n \\n Name\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Policy\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Source IP\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Apply to all IP addresses\\n
    \\n
    \\n
    \\n
    \\n Please enter the IP address with mask: ip/x (x is from 0 to 32):\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Please enter the IP address:\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Please select a country:\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Position\\n \\n

    \\n 1\\\">Select a rule\\'s position by dragging the new rule line in the table below.\\n Rules are applied in order of their position. The lower the position number, the higher is the rule\\'s rank.\\n

    \\n
    \\n
    \\n
      \\n
    • \\n #{{ $index+1 }}\\n \\n \\n \\n {{ item.name }}:\\n {{ item._description }}\\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"new-subscription.tpl.html\",\"
    \\n
    \\n

    New Subscription

    \\n
    \\n
    \\n
    \\n Username:\\n {{ newSubscription.username }}\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Active subscription with specified plan already exists\\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"npvr-options.html\",\"
    \\n\t
    \\n\t
    \\n
    \\n
    \\n\t
    \\n\t\t
    \\n\t\t\t
    \\n\t\t\t\t
    NPVR source
    \\n\t\t\t\t\\n\t\t\t\t\\n\t\t\t
    \\n\t\t
    \\n\t
    \\n
    \\n\");\n$templateCache.put(\"npvr-record.tpl.html\",\"
    \\n
    \\n
    \\n

    Program Details

    \\n
    \\n \\n
    \\n \\n Stream type\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Stream:\\n \\n {{ selectedStream || \\'N/A\\' }}\\n \\n
    \\n Error:\\n {{ selectedStreamError }}\\n
    \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID{{ program.id }}
    State{{ program.state }}
    Error{{ program.error }}
    Name{{ program._program_name || \\'N/A\\' }}
    Description{{ program._program_description || \\'N/A\\' }}
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"player-tooltip-with-thumbnails.html\",\"\\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ playerData.overTime }}\\n
    \\n
    \\n\");\n$templateCache.put(\"rails-change-content.tpl.html\",\"
    \\n
    \\n

    Add/Delete Rails

    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"reorder-geoip-rules.tpl.html\",\"
    \\n
    \\n

    Reorder GeoIP rules

    \\n After the rules are reordered, it is effective immediately.\\n
    \\n
    \\n
    \\n
    \\n \\n Positions\\n \\n

    \\n Select rule positions by dragging the respective lines in the table below.\\n Rules are applied in order of their position. The lower the position number, the higher is the rule\\'s rank.\\n

    \\n
    \\n
    \\n
      \\n
    • \\n #{{ $index+1 }}\\n \\n \\n \\n {{ item.name }}:\\n {{ item._description }}\\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"reorder-package-assets.tpl.html\",\"
    \\n
    \\n

    Reorder Package Content

    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Select asset positions by dragging the respective lines in the table below.\\n

    \\n
    \\n
    \\n
      \\n
    • \\n #{{ $index+1 }}\\n {{ item.type }}\\n {{ item.name }}\\n LCN={{ item.lcn }}\\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"reset-subscriber-password.html\",\"
    \\n

    RESET PASSWORD

    \\n
    \\n Are you sure?\\n

    This action will Reset subscriber\\'s password.

    \\n

    Subscriber will receive new password to {{ username }}

    \\n
    \\n\");\n$templateCache.put(\"screen-change-banners.tpl.html\",\"
    \\n
    \\n

    Add/Delete Banners

    \\n
    \\n\\n
    \\n
    \\n \\n
  • \\n
    \\n
    \\n
    \\n No data\\n
    \\n
    \\n
    \\n
  • \\n \\n
    \\n\\n\");\n$templateCache.put(\"send-msg.html\",\"
    \\n

    Send message

    \\n\\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"session-details.tpl.html\",\"
    \\n
    \\n
    \\n

    Session Details

    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Ticked ID{{ selectedSession.tickedId }}
    Session ID{{ selectedSession.sessionId }}
    Content{{ selectedSession.contentType }}: {{ selectedSession.contentTitle }}
    Start{{ convertTime(selectedSession.sessionStart) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}
    End\\n {{ convertTime(selectedSession.sessionEnd) | date: \\'MMM d, y H:mm:ss\\' : \\'UTC\\' }}\\n active\\n
    Subscriber{{ selectedSession.subscriber }}
    IP{{ selectedSession.IP }}
    UA{{ selectedSession.userAgent }}
    Device\\n {{ selectedSession.deviceOS }} ({{ selectedSession.deviceModel }})\\n {{ selectedSession.deviceOS || \\'N/A\\' }}\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"set-operator-password.html\",\"
    \\n

    Set new password for

    \\n\\n

    {{operator.name}}: {{operator.account.email}}

    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"set-subscriber-password.html\",\"
    \\n

    SET NEW PASSWORD FOR

    \\n
    \\n

    {{username}}

    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"set-subscriber-pin.html\",\"
    \\n

    SET NEW PIN FOR

    \\n
    \\n

    {{username}}

    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"stripe-disconnect-manual.html\",\"
    Stripe disconnect
    \\n\\n
    \\n This action CANNOT be undone. This will permanently cancel all active subscriptions.\\n
    \\n Please, contact us for manual disconnect.\\n
    \\n
    \\n\\n
    SotalCloud North America
    \\n
    \\n
    Russell Foy
    \\n\\n
    CEO
    \\n\\n
    russell@sotalcloud.com
    \\n\\n
    +1-818-748-9259
    \\n
    \\n
    \\n\\n
    SotalCloud Eastern Europe
    \\n
    \\n
    Alexander Piterbarg
    \\n\\n
    CEO
    \\n\\n
    ap@sotalcloud.com
    \\n\\n
    +7-903-549-1349
    \\n
    \\n
    \\n\");\n$templateCache.put(\"stripe-disconnect.html\",\"
    Are you ABSOLUTELY sure?
    \\n\\n
    \\n Unexpected bad things will happen if you don\\'t read this!\\n
    \\n This action CANNOT be undone. This will permanently cancel all active subscriptions.\\n
    \\n\");\n$templateCache.put(\"ui-add-edit-menu.tpl.html\",\"
    \\n
    \\n

    \\n Edit\\n Add Menu

    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Screen\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Icon\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Menu title\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Menu localization\\n \\n \\n add\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n No data\\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"youtube-import.html\",\"
    \\n
    \\n
    \\n
    \\n

    Youtube import

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"help/admin-description.html\",\"There are two types of administrators: super and regular.
    \\nSuper administrators always have access to all parts of the admin panel and can add/remove other administrators.
    \\nRegular administrators are controlled by the specific permissions applied to them. They are unable to add/remove administrators.\");\n$templateCache.put(\"help/catchup-description.html\",\"

    Notice

    \\nYou can configure additional channels with catchup using\\n
    Content > Live section.\\n\");\n$templateCache.put(\"help/catchup.html\",\"

    Notice

    \\n You don\\'t have any Live Channels with Catch-up\\n
    Contact us for more information.\\n
    \\n\");\n$templateCache.put(\"help/default-dm.html\",\"Copy and play through our servers (default value)\\n\");\n$templateCache.put(\"help/epg-import-format.html\",\"We support only XMLTVFormat\\n\");\n$templateCache.put(\"help/epg-import.html\",\"

    Notice

    \\n This tab is designed to import EPG in\\n\tXMLTV format.\\n
    Contact us for more information.\\n
    \\n\");\n$templateCache.put(\"help/epg.html\",\"

    Notice

    \\n You don\\'t have any EPG. You can import new EPG source \\n
    Contact us for more information.\\n
    \\n\");\n$templateCache.put(\"help/group-description.html\",\"

    Notice

    \\nGroups are intended to limit the visibility of content for particular users. By default, if some content is not added to any group, it is visible to everyone.\\n
    \\nOne and the same content/users can belong to several groups.\\n

    \\nAs soon as content is added to a group, it becomes visible only to the users from this group.\\n
    \\nUnintentionally adding content to a group can result in some users not being able to see it in their applications anymore.\\n
    \\n
    \\nAdding a user to a group does not have any consequences aside from this user gaining access to more content than before.\\n

    \\nAlso, groups can be created without adding content to them. This can be done in two cases:\\n
    \\n- just to single out some group of users and see that a user belongs to a particular group in the reports;\\n
    \\n- to make Geo-IP rules available for some group.\\n\\n\");\n$templateCache.put(\"help/group-in-asset.html\",\"Groups can be used to separate\\n
    \\ncontent between users.\\n
    \\nExamples: V.I.P., Premium\\n\");\n$templateCache.put(\"help/import.html\",\"

    Notice

    \\n This tab is designed to import VOD content (and metadata such as genres, categories, etc.) from specially formatted XML files.\\n
    You can contact us for more information.\\n
    \\n\");\n$templateCache.put(\"help/is-external.html\",\"Play Directly from source, avoiding our servers\\n\");\n$templateCache.put(\"help/offer-description.html\",\"

    Notice

    \\nYou can use offers to sell or give in rent\\n
    different content at fixed price.\\n
    Examples: 10$ for 48h, 99$\\n\");\n$templateCache.put(\"help/offer-in-asset.html\",\"You can use offers to sell\\n
    different content at fixed price.\\n
    Examples: 10$/month, 99$/year\\n\");\n$templateCache.put(\"help/origin_proxy.html\",\"Proxy and play through our servers\\n\");\n$templateCache.put(\"help/override-dm.html\",\"Stream will play through CDN, specified in Infrastructure > CDN section\\n\");\n$templateCache.put(\"help/package-description.html\",\"

    Notice

    \\nYou can group content on some criterion.
    \\nExamples: Movies of Week, Star Wars Collection\\n\");\n$templateCache.put(\"help/package-in-asset.html\",\"You can group content by some criterion.
    \\nExamples: Movies of the Week, Star Wars Collection\\n\");\n$templateCache.put(\"help/permissions-description.html\",\"

    Notice

    \\nYou can create more that one account to administrate your content.\\n
    \\nEach account could have different pemissions.\\n
    \\nExamples: Access to VOD section with \\\"Read only\\\" permission\\n\");\n$templateCache.put(\"help/plan-description.html\",\"

    Notice

    \\nYou can use plans to sell subscription for\\n
    different content.\\n
    Examples: 10$/month, 99$/year\\n\");\n$templateCache.put(\"help/profile-messages.html\",\"These messages confirm users\\' registration in your services\\n\");\n$templateCache.put(\"help/qr_android.html\",\"
    \\n
    \\n \\n
    \\n
    \\n Android\\n
    \\n
    \\n\");\n$templateCache.put(\"help/qr_ios.html\",\"
    \\n
    \\n \\n
    \\n
    \\n iOS\\n
    \\n
    \\n\");\n$templateCache.put(\"help/showcase-priority.html\",\"

    Notice

    \\n
    \\n If you want use different screen representation for different subscriber groups\\n
    you should remember this rules:\\n\\n
    \\n 1. Group \\\"Everyone\\\" contain all other groups\\n
    \\n\\n
    \\n 2. If more than one screen representation is available to the subscriber,
    \\n the one with higher priority is shown to the subscriber\\n
    \\n\\n Example: If you want have specific screen representation for VIP subscribers,
    \\n then you should set \\\"V.I.P.\\\" group and place it higher than Default representation (group \\\"Everyone\\\").\\n
    \\n In this example QA users will see representation for group \\\"Everyone\\\".\\n\\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"help/showcase.html\",\"

    Notice

    \\n\\nThis option for Advanced users only.\\n\t
    Showcase allow you to manipulate banners in your services.\\n
    Contact us for more information.\\n
    \\n\t\");\n$templateCache.put(\"help/subscriber.html\",\"

    Notice

    \\n\\nYou don\\'t have any subscribers right now. As soon as they register in your system, you will be able to see contact information and latest purchase.\\n
    Contact us for more information.\\n
    \\n\");\n$templateCache.put(\"invalid/no-application.html\",\"
    \\n No application was selected.\\n
    \");\n$templateCache.put(\"lm-asset-edit/edit-window.tpl.html\",\"
    \\n \\n \\n \\n \\n \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/navigation-buttons.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-localization/lm-asset-localization.html\",\"
    \\n
    \\n Localization\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n LanguageTitleDescription 
      {{ localizationItem.language }} {{ localizationItem.title }} {{ localizationItem.description }}\\n
    \\n Delete\\n
    \\n
    \\n No Data\\n
    \\n
    \");\n$templateCache.put(\"lm-assets-edit/edit-window.tpl.html\",\"
    \\n \\n \\n \\n \\n \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/navigation-buttons.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-catchup-player/lm-catchup-player.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n Preparing
    {{preview.progress}}%
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n Save choice\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    {{_window.from}} min
    \\n
    {{_window.to}} min
    \\n
    0
    \\n
    \\n
    \\n
    \\n
    \\n -10\\n
    \\n
    \\n -1\\n
    \\n
    \\n \\n
    \\n
    \\n +1\\n
    \\n
    \\n +10\\n
    \\n
    \\n {{playerData.time}}\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-confirm-window/lm-confirm-window.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Please type in the password to confirm\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n I understand the consequences. {{action.title}}\\n
    \\n
    \\n Cancel\\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-datepicker/lm-datapicker-input.tpl.html\",\"
    \\n \\n \\n \\n
    \\n\");\n$templateCache.put(\"lm-datepicker/lm-datapicker.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ selectedDay }}\\n
    \\n
    \\n
    {{ selectedMonth }}
    \\n
    \\n
    \\n
    {{ selectedDate }}
    \\n
    \\n
    \\n
    {{ selectedYear }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    SMTWTFS
    \\n
    \\n {{day.number}}\\n
    \\n
    \\n
    \\n
    \\n
    Today
    \\n
    Cancel
    \\n
    Done
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-datepicker2/lm-datapicker-input.tpl.html\",\"
    \\n \\n \\n \\n
    \\n\");\n$templateCache.put(\"lm-datepicker2/lm-datapicker.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    SMTWTFS
    \\n
    \\n {{day.number}}\\n
    \\n
    \\n
    \\n
    \\n
    Today
    \\n
    Cancel
    \\n
    Done
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-dropdown/lm-dropdown-menu.tpl.html\",\"\\n\");\n$templateCache.put(\"lm-dropdown/lm-dropdown-toogle.tpl.html\",\"
    \\n\");\n$templateCache.put(\"lm-dropdown/lm-dropdown.tpl.html\",\"
    \\n
    \\n\\n \\n
    \\n\");\n$templateCache.put(\"lm-duration/lm-duration.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    {{hours}}
    \\n
    \\n
    \\n
    \\n
    \\n :\\n
    \\n
    \\n
    \\n
    \\n
    {{minutes}}
    \\n
    \\n
    \\n
    \\n
    \\n :\\n
    \\n
    \\n
    \\n
    \\n
    {{seconds}}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Hours\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n  \\n
    \\n
    \\n :\\n
    \\n
    \\n  \\n
    \\n
    \\n
    \\n
    \\n Minutes\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n  \\n
    \\n
    \\n :\\n
    \\n
    \\n  \\n
    \\n
    \\n
    \\n
    \\n Seconds\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-image-upload/lm-image-upload.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n \\n\\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-inline-datepicker/lm-inline-datepicker.tpl.html\",\"
    \\n
    \\n
    \\n
    {{ selectedMonth }} {{ selectedYear }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n\\n
    Today
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{day.number}}\\n {{day.name}}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-input-field/input-field.tpl.html\",\"
    \\n \\n \\n \\n\\n \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-jwplayer/jw-player.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n {{stream._stream_type.title}} {{stream.category}}\\n
    \\n
    \\n \\n
    \\n

    {{playbackError}}

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Version: {{version}}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-epg-channels-window/lm-manage-window-nav.tpl.html\",\"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-epg-channels-window/lm-manage-window.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Manage EPG channels for {{ title }}

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n  \\n \\n
    \\n
    \\n
    \\n
    Title
    \\n
    ExtID
    \\n
    Linked To
    \\n
    \\n
    \\n
    \\n
    \\n No EPG channels found. Check search criteria.\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    {{ channel.title }}
    \\n
    {{ channel.extid }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n = searchResult.length\\\"\\n style=\\\"margin: auto;\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-subscribers-window/lm-manage-window-nav.tpl.html\",\"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-subscribers-window/lm-manage-window.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Manage subscribers for {{ title }}

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n  \\n \\n
    \\n
    \\n
    \\n
    ID
    \\n
    ExtID
    \\n
    Name
    \\n
    \\n
    \\n
    \\n
    \\n No subscribers found. Check search criteria.\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    {{ user.id }}
    \\n
    {{ user.ext_id }}
    \\n
    {{ ((user.first_name ? user.first_name + \\' \\' : \\'\\') + (user.last_name ? user.last_name + \\' \\': \\'\\')) || \\'N/A\\' }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-window/lm-manage-window-nav.tpl.html\",\"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-manage-window/lm-manage-window.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Manage assets for {{title}}

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n  \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n No assets found. Check search criteria.\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-modal-window/lm-modal-window.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-monitoring-widget/monitoring-widget.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n Advanced\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Logarithmic

    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n Update\\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    No Data for this period
    \\n
    \\n
    \\n Live\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-pagination/pagination.tpl.html\",\"
    \\n
    \\n \\n Previous\\n \\n \\n - {{ page }} / {{ maxPage }} -\\n \\n \\n Next\\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-search-tokens/search-token.dropdown.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{filter.title}}: \\n\\n
    \\n {{token.title}}\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n\\n
    \\n \\n
    \\n\\n \\n\\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-search-tokens/search-tokens.tpl.html\",\"
    \\n
    \\n \\n
    {{placeholder}}
    \\n\\n
    \\n {{filter.title}}: \\n\\n
    \\n {{token.title}} {{ !$last ? \\', \\': \\'\\' }}\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-select/lm-select.tpl.html\",\"
    \\n\\n\t
    \\n\\n\t
    \\n\t\t
    \\n\t\t\t{{ error }}\\n\t\t
    \\n\t\t
    \\n\t\t\t\\n\t\t
    \\n\t
    \\n\t
    \\n\t\t
    \\n\t\t\t{{ warning }}\\n\t\t
    \\n\t\t
    \\n\t\t\t\\n\t\t
    \\n\t
    \\n\t
    \\n\t\t
    \\n\t\t\t{{ warning }}\\n\t\t
    \\n\t\t
    \\n\t\t\t\\n\t\t
    \\n\t
    \\n\t\\n
    \\n\");\n$templateCache.put(\"lm-select-multiple/lm-select-multiple.tpl.html\",\"
    \\n \\n\\n
    \\n \\n \\n {{ placeholder }}\\n \\n
    \\n\\n
    \\n
    \\n {{ error }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n\\n \\n
    \\n\");\n$templateCache.put(\"lm-select-multiple-group/lm-select-multiple-group.tpl.html\",\"
    \\n \\n\\n
    \\n
    \\n
    \\n
    \\n {{key}}: \\n\\n
    \\n {{item.title}}{{ !$last ? \\', \\': \\'\\' }}\\n
    \\n
    \\n
    \\n
    \\n
    {{ placeholder }}
    \\n
    \\n\\n
    \\n
    \\n {{ error }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n {{key}}: \\n\\n
    \\n
    \\n {{item.title}}\\n
    \\n {{ !$last ? \\', \\': \\'\\' }}\\n
    \\n
    \\n
    \\n {{ placeholder }}\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n No Result. See {{ optionType || \\'appropriate\\' }} section.\\n \\n
    \\n\\n
    \\n {{key}}\\n
      \\n
    • \\n \\n \\n\\n \\n
    • \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/lm-showcase.tpl.html\",\"
    \\n
    \\n
    \\n \\n
    \\n Edit\\n
    \\n
    \\n
    \\n \\n
    \\n Edit\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{tile.x0}}:{{tile.y0}}\\n
    \\n
    \\n {{tile.x1}}:{{tile.y1}} \\n
    \\n
    \\n {{tile._PrivateData.type || \\'Unsupported tile\\'}}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-tabs/tabs.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n {{tab.title}}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{ item.title }}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-tags/lm-tags.tpl.html\",\"
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    {{ placeholder || \\'No tags\\' }}
    \\n
    \\n
    \\n\\n
    \\n
    \\n {{ error }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ warning }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-textarea-field/textarea.tpl.html\",\"
    \\n \\n\\n \\n\\n \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \");\n$templateCache.put(\"lm-toast/lm-big-toast.tpl.html\",\"
    \\n
    \\n
    \\n \\n {{bigToast.title}}\\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-toast/lm-small-toast.tpl.html\",\"
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-tooltip/tooltip.tpl.html\",\"
    \\n\");\n$templateCache.put(\"lm-video-upload/lm-video-upload.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n \\n Upload Video\\n \\n
    \\n {{ error }}\\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-virtual-playlist/lm-virtual-playlist.tpl.html\",\"
    \\n
    \\n
    \\n Playlist \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/live2/edit-live.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{quality.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Genre

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n

    Tags

    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Title

    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    LCN

    \\n \\n \\n
    \\n
    \\n

    EPG Source

    \\n \\n \\n
    \\n
    \\n

    EPG

    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Catchup

    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Provider

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Description\\n
    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Relations\\n \\n
    \\n \\n
    \\n
    \\n Packages\\n \\n
    \\n \\n
    \\n
    \\n
    \\n Plans\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Rental options\\n \\n \\n \\n
  • \\n Remove from rotation\\n
  • \\n
  • \\n One Month from now\\n
  • \\n
  • \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Media \\n \\n Add\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n = 0\\\" lm-tooltip=\\\"Transcoding in progress..\\\"> {{ stream.transcoding }}% \\n
    \\n {{ stream.strategy }} \\n \\n {{ stream.title }} \\n \\n {{stream.source || stream.streamNew }} \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/movie/edit-movie.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n

    \\n Vertical Poster 2x3\\n

    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Landscape Poster 16x9 (optional)

    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Title*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n Year\\n \\n \\n \\n
    \\n
    \\n \\n Country\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n Duration\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Provider\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n Studio\\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Ratings\\n

    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Age Limit\\n \\n \\n \\n
    \\n IMDb\\n \\n \\n \\n \\n \\n \\n
    \\n Kinopoisk\\n \\n \\n \\n \\n \\n \\n
    \\n MPAA\\n \\n \\n \\n
    \\n VAST ID\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Available Period\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Media\\n ({{ movie.streamResources.length }})\\n \\n \\n Add Content Stream\\n \\n \\n Add Trailer Stream\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateCDN tagURL
    \\n {{ stream.type }}\\n
    {{ stream.category }}
    \\n
    {{ stream.state }}\\n {{ stream.deployer }}\\n {{ stream.private ? \\'Yes\\' : \\'No\\' }}{{ stream.tags }}\\n {{ stream.URL }}\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Pricing\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n From Packages\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Free\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Plans\\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Packages\\n ({{ movie.packages.length }})\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Cast & Crew\\n ({{ movie.persons.length }})\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n {{ person.firstName }} {{ person.lastName }}\\n {{ person.role }}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n First Name\\n \\n \\n \\n
    \\n
    \\n \\n Last Name\\n \\n \\n \\n
    \\n
    \\n \\n Role\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/live/edit-live.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n or provide URL:\\n \\n \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Title*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n EPG Channel\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n Provider\\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Metadata\\n

    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n LCN\\n \\n \\n \\n
    \\n VAST ID\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Available Period\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Media\\n ({{ channel.streamResources.length }})\\n \\n \\n Add Live Stream\\n \\n \\n Add Catchup Stream\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateCDN tagURL
    \\n {{ stream.type }}\\n \\n
    {{ stream.category }}\\n - {{ (stream.depth / 3600).toString().substring(0,3) + \\'h\\' }}\\n
    \\n
    {{ stream.state }}\\n {{ stream.deployer }}\\n {{ stream.private ? \\'Yes\\' : \\'No\\' }}{{ stream.tags }}\\n {{ stream.URL }}\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Pricing\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n From Packages\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Free\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Plans\\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Packages\\n ({{ channel.packages.length }})\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/season/edit-season.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n or provide URL:\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Title*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Season index*\\n

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/tv-episode/edit-tv-episode.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n

    Episode

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n or provide URL:\\n \\n \\n
    \\n
    \\n

    Landscape Poster 16x9 (optional)

    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Season\\n \\n \\n \\n
    \\n
    \\n Title*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n Year\\n \\n \\n \\n
    \\n
    \\n \\n Duration\\n \\n \\n \\n
    \\n
    \\n \\n Episode index*\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Ratings\\n

    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Age Limit\\n \\n \\n \\n
    \\n IMDb\\n \\n \\n \\n \\n \\n \\n
    \\n Kinopoisk\\n \\n \\n \\n \\n \\n \\n
    \\n MPAA\\n \\n \\n \\n
    \\n VAST ID\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Available Period\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Media\\n ({{ episode.streamResources.length }})\\n \\n \\n Add Content Stream\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateCDN tagURL
    \\n {{ stream.type }}\\n
    {{ stream.category }}
    \\n
    {{ stream.state }}\\n {{ stream.deployer }}\\n {{ stream.private ? \\'Yes\\' : \\'No\\' }}{{ stream.tags }}\\n {{ stream.URL }}\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Cast & Crew\\n ({{ episode.persons.length }})\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n {{ person.firstName }} {{ person.lastName }}\\n {{ person.role }}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n First Name\\n \\n \\n \\n
    \\n
    \\n \\n Last Name\\n \\n \\n \\n
    \\n
    \\n \\n Role\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-asset-edit/tv-series/edit-tv-series.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n

    \\n Vertical Poster 2x3\\n

    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Landscape Poster 16x9 (optional)

    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Title*\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Description\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n Year\\n \\n \\n \\n
    \\n
    \\n \\n Country\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Provider\\n \\n \\n \\n
    \\n
    \\n \\n Studio\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Ratings\\n

    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Age Limit\\n \\n \\n \\n
    \\n IMDb\\n \\n \\n \\n \\n \\n \\n
    \\n Kinopoisk\\n \\n \\n \\n \\n \\n \\n
    \\n MPAA\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Available Period\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Media\\n ({{ series.streamResources.length }})\\n \\n \\n Add Trailer Stream\\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeStateDeployerPrivateURL
    \\n {{ stream.type }}\\n
    {{ stream.category }}
    \\n
    {{ stream.state }}\\n {{ stream.deployer }}\\n {{ stream.private ? \\'Yes\\' : \\'No\\' }}\\n {{ stream.URL }}\\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Pricing\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n From Packages\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Free\\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
      \\n
    • \\n
      \\n Plans\\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Packages\\n ({{ series.packages.length }})\\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Cast & Crew\\n ({{ series.persons.length }})\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n {{ person.firstName }} {{ person.lastName }}\\n {{ person.role }}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n First Name\\n \\n \\n \\n
    \\n
    \\n \\n Last Name\\n \\n \\n \\n
    \\n
    \\n \\n Role\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/live/edit-live.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{quality.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Genre

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n

    Tags

    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Title

    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    LCN

    \\n \\n \\n
    \\n
    \\n

    EPG Source

    \\n \\n \\n
    \\n
    \\n

    EPG

    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Provider

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Description\\n
    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Relations\\n \\n
    \\n \\n
    \\n
    \\n Packages\\n \\n
    \\n \\n
    \\n
    \\n
    \\n Plans\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Rental options\\n \\n \\n \\n
  • \\n Remove from rotation\\n
  • \\n
  • \\n One Month from now\\n
  • \\n
  • \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n {{stream.source || stream.streamNew }} \\n \\n
    \\n
    \\n = 0\\\" lm-tooltip=\\\"Transcoding in progress..\\\"> {{ stream.transcoding }}% \\n
    \\n {{ stream.strategy }} \\n \\n {{ stream.title }} \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n {{ assetData._PrivateData.catchupNew.source }}\\n \\n \\n \\n Catchup\\n \\n \\n {{ (assetData._PrivateData.catchupNew.depth > 0) ? (assetData._PrivateData.catchupNew.depth / 3600).toString().substring(0,3) + \\'h\\' : \\'\\' }}\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/movie/edit-movie.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{quality.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n

    Tags

    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Title

    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Year

    \\n \\n \\n
    \\n
    \\n

    Country

    \\n \\n \\n
    \\n
    \\n

    Duration

    \\n \\n
    \\n
    \\n

    Studio

    \\n \\n \\n
    \\n
    \\n

    Provider

    \\n \\n \\n
    \\n
    \\n

    \\n Ratings\\n

    \\n
    \\n

    {{rating.label}}

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Description\\n
    \\n
    \\n
    18+
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Relations\\n \\n
    \\n \\n
    \\n
    \\n Packages\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Billing\\n \\n
    \\n
    \\n
    \\n Offers\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n Plans\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n Rental options\\n \\n \\n \\n \\n\\n \\n
  • \\n \\n Remove from rotation\\n
  • \\n
  • \\n \\n One Month from now\\n
  • \\n
  • \\n \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    {{ stream.transcoding }}%
    \\n
    \\n
    {{ stream.strategy }}
    \\n
    \\n
    {{ stream.title }}
    \\n
    \\n {{stream.source || stream.streamNew }}\\n
    Trailer
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n {{ stream.transcoding }}% \\n
    \\n {{ stream.strategy }} \\n \\n {{ stream.title }} \\n \\n {{stream.source || stream.streamNew }}\\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Cast & Crew\\n \\n \\n \\n Add\\n \\n
    \\n
    \\n

    {{key.replace(\\'_\\', \\' \\')}}

    \\n
      \\n
    • \\n
      \\n
      \\n
      \\n {{person.first_name + \\' \\' + person.second_name}}\\n
      \\n
      \\n \\n \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/tv-episode/edit-tv-episode.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n

    TV Series

    \\n {{assetData._Parent.title}}\\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    season index

    \\n\\n \\n \\n
    \\n \\n {{ assetData._PrivateData.seasonIndexNew.toString() || \\'#\\' }}\\n \\n \\n
    \\n
    \\n\\n \\n
  • \\n {{ season.index }} - {{ season.title || \\'No Title\\' }} \\n
  • \\n
    \\n
    \\n
    \\n
    \\n

    Episode index

    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n

    Title

    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Duration\\n

    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Ratings\\n

    \\n\\n
    \\n\\n

    {{rating.label}}

    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n Description\\n

    \\n\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n Rental options\\n \\n \\n\\n \\n
  • \\n Remove from rotation\\n
  • \\n
  • \\n One Month from now\\n
  • \\n
  • \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n {{ stream.transcoding }}% \\n
    \\n {{ stream.strategy }} \\n \\n {{ stream.title }} \\n \\n {{stream.source || stream.streamNew }} Trailer \\n \\n
    \\n
    \\n
    \\n
    \\n {{ stream.transcoding }}% \\n
    \\n {{ stream.strategy }} \\n \\n {{ stream.title }} \\n \\n {{stream.source || stream.streamNew }} \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Cast & Crew \\n \\n \\n Add\\n \\n
    \\n\\n
    \\n

    {{key.replace(\\'_\\', \\' \\')}}

    \\n\\n
      \\n
    • \\n
      \\n
      \\n
      \\n {{person.first_name + \\' \\' + person.second_name}}\\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/tv-series/edit-tv-series.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n {{quality.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Genres

    \\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n

    Tags

    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n

    Title

    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Year

    \\n \\n \\n
    \\n
    \\n

    Country

    \\n\\n \\n \\n
    \\n
    \\n

    Studio

    \\n\\n \\n \\n
    \\n\\n
    \\n

    \\n Ratings\\n

    \\n\\n
    \\n\\n

    {{rating.label}}

    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Description\\n
    \\n
    \\n
    18+
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n \\n Relations\\n \\n
    \\n \\n
    \\n
    \\n Packages\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Billing\\n \\n
    \\n
    \\n
    \\n Offers\\n \\n
    \\n \\n
    \\n
    \\n
    \\n Plans\\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n Rental options\\n \\n\\n \\n
  • \\n Remove from rotation\\n
  • \\n
  • \\n One Month from now\\n
  • \\n
  • \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-assets-edit/virtual-live/edit-virtual-live.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{quality.title}}\\n
    \\n
    \\n
    \\n
    \\n

    Genre

    \\n\\n \\n \\n
    \\n
    \\n

    Category

    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Title

    \\n\\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    LCN

    \\n\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n Description\\n
    \\n
    \\n
    Restrict content
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n Platform\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Relations\\n \\n
    \\n \\n
    \\n
    \\n Packages \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n Rental options\\n \\n \\n\\n \\n
  • \\n Remove from rotation\\n
  • \\n
  • \\n One Month from now\\n
  • \\n
  • \\n One Year from now\\n
  • \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/_tile-banner/tile-banner.tpl.html\",\"
    \\n
    \\n \\n banner\\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n Action\\n

    \\n\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/_tile-movie/tile-movie.tpl.html\",\"
    \\n
    \\n \\n movie\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    {{ tile.asset_title }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n VOD | id{{tile._PrivateData.asset_id}}\\n \\n \\n
    \\n\\n
    {{tile._PrivateData.title}} ({{tile._PrivateData.year}})
    \\n\\n
    Duration {{tile._PrivateData.duration}} hour(s)
    \\n\\n
    \\n {{genre}}\\n
    \\n\\n
    {{tile._PrivateData.description}}
    \\n
    \\n
    \\n
    \\n
    No content data
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n

    Try to change search request

    \\n
    \\n
    \\n\\n
    \\n \\n Cancel\\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-android/application-android.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n Create screen\\n
    \\n
    \\n
    \\n\\n
    \\n
      \\n
    • \\n
      \\n
      \\n Representation\\n \\n \\n
      \\n
      \\n
      \\n \\n New\\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
      PriorityName\\n Groups \\n
      {{$index + 1}} {{variant.title}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n Name\\n
    \\n \\n \\n
    \\n
    \\n
    \\n Change\\n
    \\n
    \\n
    \\n
    \\n Save Layout\\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n
    Settings
    \\n
    \\n\\n
    \\n Link\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-android/edit-slider.tpl.html\",\"
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n Add slider item\\n \\n \\n
  • \\n \\n {{widget.banner.bannerName}}\\n \\n
  • \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-ott-web/application-ott-web.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{application.platform.app_url}}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n Edit\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n TV Channels\\n Movies\\n Cartoons\\n TV Series\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
      \\n
    • \\n \\n\\n
      Edit\\n
      \\n
      \\n
    • \\n
    • \\n
      Add
      \\n
    • \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    Settings
    \\n
    \\n\\n
    \\n Link\\n
    \\n \\n
    \\n \\n
    \\n\\n
    \\n

    \\n Aliases\\n

    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n If you\\'d like to redirect your domain to the\\n {{ application.platform.app_url }}\\n website, you need to add a CNAME record to your domain hosting provider.\\n

    \\n

    \\n Step 1. Sign in to your domain hosting provider
    \\n Your domain hosting provider is typically where you purchased your domain name.
    \\n If you don’t know who this is, you can search for your provider online (for example, lookup.icann.org)\\n

    \\n

    \\n Step 2: Add the CNAME record to your domain’s DNS records
    \\n If you\\'re not familiar with CNAME records, contact your domain hosting provider, who can help you.
    \\n You can read more about CNAME records here
    \\n Note: CNAME record changes can take up to 72 hours to go into effect\\n

    \\n

    \\n Step 3: Specify the alias in the Aliases list above.\\n

    \\n

    \\n HTTPS\\n

    \\n

    \\n HTTPs support requires a valid certificate to be provided by a client to SotalCloud.\\n If you plan to use more than one alias a wildcard SSL certificate is recommended.
    \\n Preferable duration of the certificate is 2-3 years to reduce update overhead and to reduce potential service downtime.\\n

    \\n

    \\n EXAMPLE\\n

    \\n

    \\n For example, you want to redirect your example.tv to example.sotalcloud.com

    \\n CNAME record will look approximately as follows:
    \\n \\n
    \\n The record in the Aliases list will look as:
    \\n \\n

    \\n
    \\n\\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-ott-web/edit-slider.tpl.html\",\"
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Action for slide {{data._PrivateData.currentItem + 1}}\\n new\\n

    \\n
    Widget Type: {{item._PrivateData.widget_type === \\'external\\' ? \\'Redirect to external URL\\' : \\'Content\\'}}
    \\n
    \\n
    \\n
    Widget type:
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n {{ item._PrivateData.asset.type === \\'channel\\' ? \\'Live\\' : \\'VOD\\' }} | id{{item._PrivateData.asset.id}}\\n \\n \\n
    \\n
    {{item._PrivateData.asset.title}}\\n ({{item._PrivateData.asset.year}})\\n
    \\n
    \\n Duration\\n {{item._PrivateData.asset.duration}}\\n min\\n
    \\n
    \\n {{genre}}\\n
    \\n
    \\n
    \\n
    No content data
    \\n \\n
    \\n Required field\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    No result

    \\n
    \\n
    \\n
    \\n
    \\n Select\\n
    \\n
    Cancel\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-ios/application-ios.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n Create screen\\n
    \\n
    \\n
    \\n\\n
    \\n
      \\n
    • \\n
      \\n
      \\n Representation\\n \\n \\n
      \\n
      \\n
      \\n \\n New\\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
      PriorityName\\n Groups \\n
      {{$index + 1}} {{variant.title}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n
    • \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n Name\\n
    \\n \\n \\n
    \\n
    \\n
    \\n Change\\n
    \\n
    \\n
    \\n
    \\n Save Layout\\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n
    Settings
    \\n
    \\n\\n
    \\n Link\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/application-ios/edit-slider.tpl.html\",\"
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n\\n Add slider item\\n\\n \\n\\n \\n
  • \\n \\n {{widget.banner.bannerName}}\\n \\n
  • \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-asset/tile-asset.tpl.html\",\"
    \\n
    \\n \\n Asset\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n
    \\n
    \\n \\n {{ tile.banner._PrivateData.asset.type === \\'channel\\' ? \\'Live\\' : \\'VOD\\' }} | id{{tile.banner._PrivateData.asset.id}}\\n \\n \\n
    \\n\\n
    {{tile.banner._PrivateData.asset.title}}\\n ({{tile.banner._PrivateData.asset.year}})\\n
    \\n\\n
    \\n Duration {{tile.banner._PrivateData.asset.duration}}\\n min
    \\n\\n
    \\n {{genre}}\\n
    \\n
    \\n
    \\n
    Select content
    \\n \\n
    \\n Required field\\n
    \\n
    \\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-asset-collection/tile-asset-collection.tpl.html\",\"
    \\n
    \\n \\n Collection\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n\\n
    \\n Label\\n \\n
    \\n\\n
    \\n

    Collection parameters

    \\n\\n \\n
    \\n\\n
    \\n Show Genres\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\\n
    \\n Sort\\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-back/tile-back.tpl.html\",\"
    \\n
    \\n \\n Back\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-epg/tile-epg.tpl.html\",\"
    \\n
    \\n \\n Tv-guide\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-external-app/tile-external-app.tpl.html\",\"
    \\n
    \\n \\n External App\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n
    \\n Select Application\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-external-url/tile-external-url.tpl.html\",\"
    \\n
    \\n \\n External Url\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-favorites/tile-favorites.tpl.html\",\"
    \\n
    \\n \\n Favorites\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-logo/tile-logo.tpl.html\",\"
    \\n
    \\n Logo\\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-nop/tile-nop.tpl.html\",\"
    \\n
    \\n \\n Picture\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-recent/tile-recent.tpl.html\",\"
    \\n
    \\n \\n Recent\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-rdvr/tile-rdvr.tpl.html\",\"
    \\n
    \\n \\n RDVR\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-search/tile-search.tpl.html\",\"
    \\n
    \\n \\n Search\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\\n\");\n$templateCache.put(\"lm-showcase/tile-settings/tile-settings.tpl.html\",\"
    \\n
    \\n \\n Settings\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-showcase/tile-showcase.tpl.html\",\"
    \\n
    \\n \\n Showcase\\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n {{ tile.banner._PrivateData.uiTitle }}\\n
    \\n
    \\n
    \\n
    \\n Label\\n \\n
    \\n\\n
    \\n Select Showcase\\n \\n
    \\n\\n
    \\n
    \\n {{tile.banner.isNew ? \\'Create\\' : \\'Save\\'}}
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-slider/tile-slider.tpl.html\",\"
    \\n
    \\n Slider\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n\\n Add slider item\\n\\n \\n\\n \\n
  • \\n \\n {{widget.banner.bannerName}}\\n \\n
  • \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-showcase/tile-support/tile-support.tpl.html\",\"
    \\n
    \\n \\n\\n
    \\n
    \\n Add new tile\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Step 1: Select type

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{newTile.banner.bannerName}}\\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    Next step
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Step 2: Select size

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{showcase._Size.newSize.span_x}}x{{showcase._Size.newSize.span_y}}\\n
    \\n
    \\n
    \\n
    \\n
    Create
    \\n
    Prev Step
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/channel-row/channel-row.tpl.html\",\"
    \\n
    \\n
    \\n
     
    \\n
    LCN
    \\n
    Title
    \\n
     
    \\n
    ID
    \\n
    Stream
    \\n
    Status
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n {{assetData.lcn || assetData.er_lcn}}\\n
    \\n
    {{assetData.title}}
    \\n
    \\n
    \\n \\n
    \\n  \\n
    \\n
    {{assetData.id}}
    \\n \\n
    \\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} {{stream.category}} stream status: {{stream.is_deployed ? \\'Deployed\\' : stream._is_transcoding ? stream._transcoding : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.is_deployed && !stream._is_transcoding,\\n \\'tc-red-600 bgc-red-100\\': !stream._is_transcoding && !stream.is_deployed || stream.noisypeak_job_error,\\n \\'tc-amber-800 transcoding-pulse-animation\\': stream._is_transcoding && !stream.noisypeak_job_error}\\\">\\n S{{stream._stream_sub_type}}\\n
    \\n
    \\n P\\n
    \\n
    \\n E\\n
    \\n
    \\n C\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/common-asset-row/common-asset-row.tpl.html\",\"
    \\n
    \\n
    ID
    \\n
     
    \\n
    Title
    \\n
    Status
    \\n
    Type
    \\n
    Categories
    \\n
    Genres
    \\n
    \\n
    \\n
    {{asset.id}}
    \\n
    \\n \\n
    \\n\\n
    {{asset.title}}\\n  \\n
    \\n
    \\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} {{stream.category}} stream status: {{stream.is_deployed ? \\'Deployed\\' : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.is_deployed, \\'tc-red-600 bgc-red-100\\': !stream.is_deployed}\\\">\\n S{{stream._stream_sub_type}}\\n
    \\n
    \\n P\\n
    \\n
    \\n
    \\n {{asset.uiType}}\\n
    \\n
    \\n \\n {{category.title}}\\n
    \\n
    \\n \\n {{genre.title}}\\n \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/movie-row/movie-row.tpl.html\",\"
    \\n
    \\n
    \\n
     
    \\n
    Category
    \\n
    ID
    \\n
    Title
    \\n
    Year
    \\n
    Stream
    \\n
    Rental Start
    \\n
    Rental End
    \\n
    Status
    \\n
     
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\t\t\t\\n\t\t\t\t{{category.title}}\\n\t\t\t\\n \\n  \\n
    \\n
    {{assetData.id}} 
    \\n
    \\n {{assetData.title}}\\n \\n
    \\n \\n
    \\n
    \\n
    \\n {{ assetData.year || \\'N/A\\'}}\\n
    \\n
    \\n \\n Play \\n
    \\n
    \\n {{ assetData._rotation_start | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n {{ assetData._rotation_end | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} {{stream.category}} stream status: {{stream.is_deployed ? \\'Deployed\\' : stream._is_transcoding ? stream._transcoding : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.is_deployed && !stream._is_transcoding,\\n \\'tc-red-600 bgc-red-100\\': !stream._is_transcoding && !stream.is_deployed || stream.noisypeak_job_error,\\n \\'tc-amber-800 transcoding-pulse-animation\\': stream._is_transcoding && !stream.noisypeak_job_error}\\\">\\n S{{stream._stream_sub_type}}\\n
    \\n
    \\n P\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/playlist-asset-row/playlist-asset-row.tpl.html\",\"
    \\n
    \\n
    ID
    \\n
    Title
    \\n
    Duration
    \\n
    Status
    \\n
    \\n
    \\n
    {{asset.id}}
    \\n
    {{asset.title}}\\n  \\n
    \\n
    \\n \\n {{asset._PrivateData.duration}}\\n \\n
    \\n
    \\n
    \\n S\\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/tv-episode-row/tv-episode-row.tpl.html\",\"
    \\n
    \\n \\n
    \\n
    \\n Episode {{assetData.tv_series_episode.index}} \\n
    \\n
    {{assetData.id}}
    \\n
    \\n {{assetData.title}}\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Watch Stream \\n
    \\n
    \\n
    \\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} {{stream.category}} stream status: {{stream.is_deployed ? \\'Deployed\\' : stream._is_transcoding ? stream._transcoding : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.is_deployed && !stream._is_transcoding,\\n \\'tc-red-600 bgc-red-100\\': !stream._is_transcoding && !stream.is_deployed || stream.noisypeak_job_error,\\n \\'tc-amber-800 transcoding-pulse-animation\\': stream._is_transcoding && !stream.noisypeak_job_error}\\\">\\n S{{stream._stream_sub_type}}\\n
    \\n
    \\n P\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");\n$templateCache.put(\"lm-table-rows/tv-season-row/tv-season-row.tpl.html\",\"
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Add\\n \\n Cancel\\n
    \\n
    \\n
    \\n \\n Add new Season\\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n\\n Season {{season.index}}: {{season.title}}\\n
    \\n\\n
    Title\\\" lm-waves=\\\"lm-600\\\">\\n \\n
    \\n\\n
    Episode\\\" lm-waves=\\\"lm-600\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Save\\n \\n Cancel\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\");\n$templateCache.put(\"lm-table-rows/tv-series-row/tv-series-row.tpl.html\",\"
    \\n
    \\n
    \\n
     
    \\n
    Category
    \\n
    ID
    \\n
    Title
    \\n
    Year
    \\n
    Stream
    \\n
    Rental Start
    \\n
    Rental End
    \\n
    Status
    \\n
     
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\t\t\t\\n {{category.title}}\\n \\n  \\n
    \\n
    {{assetData.id}} 
    \\n
    \\n {{assetData.title}} \\n
    \\n
    \\n {{ assetData.year || \\'N/A\\'}}\\n
    \\n
    \\n
    TV Series
    \\n
    \\n
    \\n {{ assetData._rotation_start | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n {{ assetData._rotation_end | date: \\'MMM d, y\\' : \\'UTC\\' }}\\n
    \\n
    \\n
    \\n
    \\n R\\n
    \\n
    \\n P\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \");\n$templateCache.put(\"lm-table-rows/virtual-channel-row/virtual-channel-row.tpl.html\",\"
    \\n
    \\n
    \\n
     
    \\n
    LCN
    \\n
    Title
    \\n
     
    \\n
    ID
    \\n
    Stream
    \\n
    Status
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n {{assetData.lcn || assetData.er_lcn}}\\n
    \\n
    {{assetData.title}}
    \\n
    \\n
    \\n \\n
    \\n  \\n
    \\n
    {{assetData.id}}
    \\n \\n
    \\n
    \\n R\\n
    \\n
    {{stream._stream_type.title}} {{stream.category}} stream status: {{stream.is_deployed ? \\'Deployed\\' : stream._is_transcoding ? stream._transcoding : \\'Not deployed\\'}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': stream.is_deployed && !stream._is_transcoding,\\n \\'tc-red-600 bgc-red-100\\': !stream._is_transcoding && !stream.is_deployed || stream.noisypeak_job_error,\\n \\'tc-amber-800 transcoding-pulse-animation\\': stream._is_transcoding && !stream.noisypeak_job_error}\\\">\\n S{{stream._stream_sub_type}}\\n
    \\n
    \\n P\\n
    \\n
    \\n E\\n
    \\n
    Virtual Live status: {{assetData._status.playlist.error ? assetData._status.playlist.error : assetData._status.playlist.state + \\'
    \\' + assetData._status.playlist.warnings}}\\\"\\n ng-class=\\\"{\\'tc-green-900 bgc-green-100\\': assetData._status.playlist.state === \\'running\\',\\n \\'tc-red-600 bgc-red-100\\': assetData._status.playlist.state === \\'failed\\',\\n \\'tc-amber-800 bgc-amber-100\\': assetData._status.playlist.state === \\'penging\\',\\n \\'tc-grey-600 bgc-grey-100\\': assetData._status.playlist.state === \\'stopped\\' || assetData._status.playlist.state === \\'unknown\\'}\\\">\\n V\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\");}]);","lmApp\n/**\n * ------------| Configuration phase |------------\n */\n .config(['$provide', '$httpProvider', '$compileProvider',\n function ($provide, $httpProvider, $compileProvider) {\n $compileProvider.aHrefSanitizationWhitelist(/^\\s*(https?|ftp|mailto|chrome-extension|itms-services):/);\n\n //Redirect to login if LH answer with 401 and 403\n var isRequestExcluded = function(response) {\n if (response.config.url === '/discovery:80/sdp/v2/operators/me'\n && response.config.headers.hasOwnProperty('X-Instance-Check')) {\n return true;\n }\n return false;\n };\n $httpProvider.interceptors.push(['$q', '$location', '$rootScope',\n function ($q, $location, $rootScope) {\n return {\n 'responseError': function (response) {\n if ((response.status === 401 || response.status === 403) && !isRequestExcluded(response)) {\n $rootScope.logOut();\n $location.path('/');\n }\n return $q.reject(response);\n }\n };\n }]);\n\n $provide.decorator('$q', ['$delegate', function ($delegate) {\n function seqAll(promises) {\n\n var deferred = $delegate.defer();\n\n if (!_.size(promises)) {\n deferred.resolve({});\n\n return deferred.promise;\n }\n\n var results = [];\n var j = 0;\n var keys = _.keys(promises);\n recursive(promises[keys[j]]);\n\n function recursive(promise) {\n j++;\n\n promise().then(function (data) {\n\n results[keys[j - 1]] = data;\n\n if (j < _.size(promises)) {\n recursive(promises[keys[j]]);\n } else {\n deferred.resolve(results);\n }\n }, function (error) {\n\n deferred.reject({\n key: keys[j - 1],\n error: error\n });\n\n return;\n });\n }\n\n return deferred.promise;\n }\n\n $delegate.seqAll = seqAll;\n return $delegate;\n }]);\n }])\n\n /**\n * ------------| Used to kickstart the application |------------\n */\n .run(['$rootScope', '$location', '$kookies', '$templateCache', '$compile', '$timeout', 'AssetService', 'AuthenticationService', 'ModalWindowService', 'ToastService', 'ApiService', 'SuperuserSrv', 'AdministrationService',\n function ($rootScope, $location, $kookies, $templateCache, $compile, $timeout, AssetService, AuthenticationService, ModalWindowService, ToastService, ApiService, SuperuserSrv, AdministrationService) {\n\n $rootScope.EVENTS = {};\n $rootScope.globals = {};\n $rootScope.isMenuOpen = JSON.parse(localStorage['is-menu-open'] || 'true');\n $rootScope.isMenuManual = !$rootScope.isMenuOpen;\n\n $rootScope.currentOperator = {\n id: -1,\n title: ''\n };\n\n $rootScope.getHLSPlayerURL = function (src) {\n return 'https://demo24.noisypeak.com/hls-js/demo/?src=' + src\n }\n\n $rootScope.getUtilsConfig = function (operator) {\n\n $rootScope.logo = {\n small: '/images/sotal_cloud_logo_small.png',\n big: '/images/sotal_cloud_logo_big.png',\n menu: '/images/sotal_cloud_logo_header.png'\n };\n\n if (_.get(window, 'config[' + operator + '].logo')) {\n if (_.get(window, 'config[' + operator + '].logo.menu')) $rootScope.logo.menu = _.get(window, 'config[' + operator + '].logo.menu', '');\n if (_.get(window, 'config[' + operator + '].logo.small')) $rootScope.logo.small = _.get(window, 'config[' + operator + '].logo.small', '');\n if (_.get(window, 'config[' + operator + '].logo.big')) $rootScope.logo.big = _.get(window, 'config[' + operator + '].logo.big', '');\n }\n\n var params = {};\n if (_.get(window, 'config[' + operator + '].aws')) {\n params = _.get(window, 'config[' + operator + '].aws');\n } else {\n params = {\n region: 'eu-west-1',\n s3_signature_version: ':v4',\n params: {\n Bucket: \"sotalcloud-storage-eu\"\n },\n accessKeyId: \"AKIAWE5QIRPBRVNFKAPW\",\n secretAccessKey: \"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\"\n };\n }\n\n $rootScope.aws = new AWS.S3(params);\n };\n\n $rootScope.$on('self:update', function (event, self) {\n $rootScope.logo = {\n small: '/images/sotal_cloud_logo_small.png',\n big: '/images/sotal_cloud_logo_big.png',\n menu: '/images/sotal_cloud_logo_header.png'\n };\n\n if (!self) return;\n\n $rootScope.getUtilsConfig(self.name);\n\n $rootScope.permissions.sections = AdministrationService.GetParseAccountPermissions();\n });\n\n var infrastructure;\n if (window.config && _.isBoolean(window.config.infrastructure)) {\n infrastructure = window.config.infrastructure;\n } else {\n infrastructure = true;\n }\n\n $rootScope.infrastructure = infrastructure;\n\n\n\n if (window.config && window.config.stripe) {\n $rootScope.stripe = window.config.stripe;\n } else {\n $rootScope.stripe = {\n // clientId: 'ca_6RAOcF0baHO5tdKOCeLvea6FS2jqNLHd', // SotalCloud (Dev)\n clientId: 'ca_6qA0rusByFmq19FVQP3IyI6cYSuNDUcB', // SotalCloud (Prod)\n isLive: true\n }\n }\n\n $rootScope._getServiceIcon = function (service) {\n var iconName;\n\n switch (true) {\n case service.name.indexOf('smarttv') !== -1:\n iconName = 'monitor-multiple';\n break;\n\n case service.name.indexOf('and') !== -1:\n iconName = 'android';\n break;\n\n case service.name.indexOf('ios') !== -1:\n iconName = 'apple';\n break;\n\n case service.name.indexOf('stb') !== -1:\n iconName = 'nest-protect';\n break;\n\n case service.name.indexOf('web') !== -1:\n iconName = 'web';\n break;\n\n default :\n iconName = '';\n break;\n }\n\n return iconName;\n };\n\n $rootScope._getServiceName = function (service) {\n var name;\n\n switch (true) {\n case service.name.indexOf('smarttv') !== -1:\n name = 'Smart TV';\n break;\n\n case service.name.indexOf('and') !== -1:\n name = 'Android';\n break;\n\n case service.name.indexOf('ios') !== -1:\n name = 'iOS';\n break;\n\n case service.name.indexOf('stb') !== -1:\n name = 'STB';\n break;\n\n case service.name.indexOf('web') !== -1:\n name = 'Web';\n break;\n\n default :\n name = 'Unknown';\n break;\n }\n\n return name;\n };\n\n /**\n * Change window location []\n * @param path\n */\n $rootScope.go = function (path) {\n var globals = $kookies.get('globals');\n\n if (_.isString(globals)) {\n globals = JSON.parse(globals);\n }\n\n //if (!_.isEmpty($rootScope.globals) && $rootScope.globals.currentUser.isSuperuser && !$rootScope.globals.currentUser.operatorToken && path === '/profile') {\n // return;\n //}\n\n $rootScope.currentPath = path;\n\n if (path === '/' && globals) {\n $location.path($rootScope.defaultRoute);\n } else {\n //$location.path(path);\n $location.url(path);\n }\n $rootScope.$broadcast('location:change', path);\n };\n\n $rootScope.isSuperuser = function () {\n return $rootScope.globals.currentUser && $rootScope.globals.currentUser.isSuperuser;\n };\n\n /**\n * Logout from current user\n */\n $rootScope.logOut = function () {\n $rootScope.globals = {};\n $rootScope.currentRoute = '';\n $kookies.remove('globals');\n\n localStorage.clear && localStorage.clear();\n\n lh.common.config.set({authToken: null});\n $location.path(\"/\");\n };\n\n //Default route after auth\n $rootScope.defaultRoute = '/profile';\n $rootScope.defaultAdminRoute = '/superuser/operators';\n\n // keep user logged in after page refresh\n $rootScope.globals = $kookies.get('globals') || {};\n\n\n if (_.isString($rootScope.globals)) {\n $rootScope.globals = JSON.parse($rootScope.globals);\n }\n\n $rootScope.globals.location = window.location.origin\n\n if ($rootScope.globals.currentUser && !$rootScope.globals.currentUser.account) $rootScope.logOut();\n\n if ($rootScope.globals.currentUser) {\n\n if ($rootScope.globals.currentUser.isSuperuser && $rootScope.globals.currentUser.operatorToken) {\n $rootScope.currentOperator.id = $rootScope.globals.currentUser.operatorId;\n $rootScope.currentOperator.title = $rootScope.globals.currentUser.operatorName;\n\n $rootScope.currentOperator.accounts = localStorage['accounts'] || $rootScope.globals.currentUser.accounts || [];\n\n if ($rootScope.currentOperator.accounts && _.isString($rootScope.currentOperator.accounts)) {\n $rootScope.currentOperator.accounts = JSON.parse($rootScope.currentOperator.accounts);\n }\n\n $rootScope.currentOperator.company_name = $rootScope.globals.currentUser.company_name;\n $rootScope.currentOperator.projectName = $rootScope.globals.currentUser.projectName;\n\n $rootScope.getUtilsConfig($rootScope.currentOperator.title);\n\n lh.common.config.set({authToken: $rootScope.globals.currentUser.operatorToken});\n lh.system.init();\n } else {\n $rootScope.currentOperator = {};\n\n $rootScope.getUtilsConfig($rootScope.globals.currentUser.name);\n\n lh.common.config.set({authToken: $rootScope.globals.currentUser.token});\n lh.system.init();\n }\n\n ApiService.SetToken($rootScope.globals.currentUser.supervisorToken);\n\n if ($rootScope.isSuperuser()) {\n SuperuserSrv.GetOperators()\n .then(function (response) {\n var currentOperator = _.find(_.get(response, 'data.data', []), {id: $rootScope.currentOperator.id});\n if (currentOperator) {\n if (currentOperator) {\n $rootScope._self = currentOperator;\n\n $timeout(function () {\n $rootScope.$broadcast('self:update', currentOperator)\n }, 350);\n }\n }\n });\n } else {\n ApiService.Request('1/self', 'GET')\n .then(function (response) {\n $rootScope._self = response.self;\n\n $timeout(function () {\n $rootScope.$broadcast('self:update', response.self)\n }, 350);\n })\n .catch(function (reason) {\n $rootScope._self = {};\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n\n AssetService.GetPlatforms()\n .then(function (data) {\n $rootScope.platforms = data;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }\n\n $rootScope.permissions = {\n allow: false\n };\n\n if ($rootScope.globals.currentUser) {\n $rootScope.permissions.sections = AdministrationService.ParseAccountPermissions();\n }\n\n var clearRoute = function (nextR, currentR) {\n if (currentR === 'vod' && nextR !== 'vod') {\n $location.search('page', null);\n $location.search('vod_id', null);\n $location.search('keyword', null);\n }\n\n if (currentR === 'live' && nextR !== 'live') {\n $location.search('page', null);\n $location.search('live_id', null);\n $location.search('keyword', null);\n }\n\n if (currentR === 'offers' && nextR !== 'offers') {\n $location.search('offer_id', null);\n }\n\n if (currentR === 'plans' && nextR !== 'plans') {\n $location.search('plan_id', null);\n }\n\n if (currentR === 'packages' && nextR !== 'packages') {\n $location.search('package_id', null);\n }\n\n if (currentR === 'groups' && nextR !== 'groups') {\n $location.search('group_id', null);\n }\n\n if (currentR === 'channels' && nextR !== 'channels') {\n $location.search('channel_id', null);\n $location.search('date', null);\n }\n\n if (currentR === 'catchup-2-0' && nextR !== 'catchup-2-0') {\n $location.search('channel_id', null);\n $location.search('date', null);\n $location.search('program_id', null);\n }\n\n if (currentR === 'metadata' && nextR !== 'metadata') {\n $location.search('meta', null);\n }\n };\n\n /**\n * Redirect to login if no auth data\n */\n $rootScope.$on('$locationChangeStart', function (event, next, current) {\n ToastService.HideBig();\n ToastService.HideSmall();\n\n var path = $location.path().split('/');\n\n var permission = '';\n if (path[1] && $rootScope.permissions.sections) {\n permission = $rootScope.permissions.sections[path[1]];\n\n if (permission) {\n if (permission.sections) {\n permission = path[2] && permission.sections[path[2]] ? permission.sections[path[2]].mode : permission.mode;\n } else {\n permission = permission.mode;\n }\n } else {\n permission = '';\n }\n }\n\n $rootScope.permissions.allow = $rootScope.isDashboardPage() || $rootScope.isLoginPage() || $rootScope.isRegisterPage() || path[1] === 'profile' || permission === 'rw';\n\n if ((!permission || permission === 'none') && $rootScope.globals.currentUser) {\n //if ($rootScope.globals.currentUser.isSuperuser) {\n // $location.path($rootScope.defaultAdminRoute);\n //} else {\n $location.path($rootScope.defaultRoute);\n //}\n\n return;\n }\n\n var nextR = next.split('/').pop().split('?')[0];\n var currentR = current.split('/').pop().split('?')[0];\n\n clearRoute(nextR, currentR);\n\n // redirect to login page if not logged in\n if (!$rootScope.isLoginPage() && !$rootScope.isRegisterPage() && !$rootScope.isDashboardPage() && !$rootScope.globals.currentUser) {\n $location.path('/');\n AuthenticationService.ClearCredentials();\n return;\n }\n\n if (next.split('/').pop() === '' && $rootScope.globals.currentUser) {\n if ($rootScope.globals.currentUser.isSuperuser) {\n $location.path($rootScope.defaultAdminRoute);\n } else {\n $location.path($rootScope.defaultRoute);\n }\n }\n });\n\n /**\n * Check if current location is ROOT\n * @returns {boolean}\n */\n $rootScope.isLoginPage = function () {\n return $location.path() == '/' || !$location.path();\n };\n\n /**\n * Check if current location is registration\n * @returns {boolean}\n */\n $rootScope.isRegisterPage = function () {\n return $location.path().indexOf('/register') === 0 || $location.path().indexOf('/greetings') === 0;\n };\n\n /**\n * Check if current location is registration\n * @returns {boolean}\n */\n $rootScope.isDashboardPage = function () {\n return $location.path().indexOf('/dashboard') === 0;\n };\n\n /**\n * Debug functionality\n * TODO: Create logger to server\n * @param data\n */\n $rootScope.debugInfo = function (reason, exeption) {\n $rootScope.namespace = !_.isEmpty($rootScope.globals) ? $rootScope.globals.currentUser.project : 'Root';\n\n if (exeption || reason.stack) {\n try {\n var message = {\n format: moment.utc().format(\"MMMM Do YYYY, HH:mm:ss a\"),\n timestamp: moment.utc().unix(),\n stack: reason.stack || (reason.error && reason.error.stack) || 'No Stack: ' + reason,\n message: reason.message || 'No Message',\n exeption: exeption ? exeption : 'No Exception',\n data: JSON.stringify(reason.data) || 'No data',\n type: 'exceptionJS'\n };\n\n ga('send', 'event', 'Error:JS Exception:' + $rootScope.namespace, JSON.stringify(message));\n\n console.log(message);\n } catch (e) {\n\n ga('send', 'event', 'Error:CantSend:' + $rootScope.namespace, JSON.stringify(e));\n\n console.log(e, JSON.stringify(e));\n }\n\n if (reason.message === 'timeout of 20000ms exceeded') {\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n }\n\n console.log(reason, JSON.stringify(reason));\n return;\n } else {\n try {\n var message = {\n format: moment.utc().format(\"MMMM Do YYYY, HH:mm:ss a\"),\n timestamp: moment.utc().unix(),\n url: reason.url || 'No Url',\n message: reason.message ? reason.message : 'No message',\n data: JSON.stringify(reason.data) || 'No data',\n type: 'rejectLM'\n };\n\n ga('send', 'event', 'Error:LM:' + $rootScope.namespace, JSON.stringify(message));\n\n console.log(message);\n } catch (e) {\n\n ga('send', 'event', 'Error:CantSend:' + $rootScope.namespace, JSON.stringify(e));\n\n console.log(e, JSON.stringify(e));\n }\n }\n\n var debuggerInner = '
    :( Something went wrong ...
    ' +\n '
    Contact us to provide full description of what happened
    ' +\n '
    ' + reason.message + '
    ';\n\n debuggerInner = $compile(debuggerInner)($rootScope);\n\n ModalWindowService.Open({\n content: debuggerInner,\n actions: [\n {\n title: 'OK',\n color: 'light-blue',\n fn: function () {\n try {\n var message = {\n format: moment.utc().format(\"MMMM Do YYYY, HH:mm:ss a\"),\n timestamp: moment.utc().unix(),\n url: reason.url,\n message: reason.message,\n data: JSON.stringify(reason.data),\n type: 'send'\n };\n\n ga('send', 'event', 'Error:Send:' + $rootScope.namespace, JSON.stringify(message));\n\n console.log(message);\n } catch (e) {\n ga('send', 'event', 'Error:CantSend:' + $rootScope.namespace, JSON.stringify(e));\n\n console.log(e, JSON.stringify(e));\n }\n }\n }\n ],\n size: {\n s: 4\n }\n });\n };\n\n $rootScope.toggleMenu = function (event) {\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n $rootScope.isMenuOpen = !$rootScope.isMenuOpen;\n $rootScope.isMenuManual = true;\n localStorage['is-menu-open'] = JSON.stringify($rootScope.isMenuOpen);\n };\n\n /**\n * Start progress bar activity\n * @param id\n */\n $rootScope.showLinearProgress = function (id) {\n angular.element(id).show();\n };\n\n /**\n * Hide all progressbars\n */\n $rootScope.hideLinearProgress = function (id) {\n angular.element(id).hide();\n };\n\n $rootScope.locale = 'eng';\n\n window.addEventListener('error', function (e) {\n $rootScope.debugInfo(e, true);\n });\n\n $timeout(function () {\n $rootScope.$broadcast('location:change', $location.path())\n }, 350);\n }]);\n","lmApp\n .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {\n\n $routeProvider\n .when('/', {\n templateUrl: 'welcome/welcome.tpl.html',\n controller: 'WelcomeController'\n })\n .when('/register', {\n templateUrl: 'register/register.tpl.html',\n controller: 'RegisterController'\n })\n .when('/greetings', {\n templateUrl: 'greetings/greetings.tpl.html',\n controller: 'GreetingsController'\n })\n .when('/greetings/:activationCode', {\n templateUrl: 'greetings/greetings.tpl.html',\n controller: 'GreetingsController'\n })\n .when('/support', {\n redirectTo: '/content/vod'\n })\n .when('/support/contacts_help', {\n templateUrl: 'contacts/contacts.tpl.html',\n controller: 'ContactsController'\n })\n .when('/profile', {\n templateUrl: 'profile/profile.tpl.html',\n controller: 'ProfileController'\n })\n .when('/content', {\n redirectTo: '/content/vod'\n })\n .when('/content/vod', {\n templateUrl: 'vod2/vod.tpl.html',\n controller: 'VodController',\n reloadOnSearch: false\n })\n .when('/content/live', {\n templateUrl: 'live/live.tpl.html',\n controller: 'LiveController',\n reloadOnSearch: false\n })\n .when('/content/catchup', {\n templateUrl: 'catchup/catchup.tpl.html',\n controller: 'CatchupController',\n reloadOnSearch: false\n })\n .when('/content/import', {\n templateUrl: 'import/import.tpl.html',\n controller: 'ImportController'\n })\n .when('/content/metadata', {\n templateUrl: 'meta/meta.tpl.html',\n controller: 'MetaController',\n reloadOnSearch: false\n })\n .when('/content/packages', {\n templateUrl: 'package/package.tpl.html',\n controller: 'PackageController',\n reloadOnSearch: false\n })\n .when('/subscribers', {\n redirectTo: '/subscribers/list'\n })\n .when('/subscribers/list', {\n templateUrl: 'subscribers/subscribers.tpl.html',\n controller: 'SubscribersController',\n reloadOnSearch: false\n })\n .when('/subscribers/groups', {\n templateUrl: 'group/group.tpl.html',\n controller: 'GroupController',\n reloadOnSearch: false\n })\n .when('/subscribers/favorites', {\n templateUrl: 'favorites/favorites.tpl.html',\n controller: 'FavoritesController',\n reloadOnSearch: false\n })\n .when('/subscribers/sessions', {\n templateUrl: 'sessions/sessions.tpl.html',\n controller: 'SessionsController',\n reloadOnSearch: false\n })\n .when('/restrictions', {\n redirectTo: '/restrictions/geoip-rules'\n })\n .when('/restrictions/geoip-rules', {\n templateUrl: 'geoip/geoip-rules.tpl.html',\n controller: 'GeoIPRulesController',\n reloadOnSearch: false\n })\n .when('/npvr', {\n redirectTo: '/npvr/records'\n })\n .when('/npvr/records', {\n templateUrl: 'npvr/records.tpl.html',\n controller: 'NPVRController',\n reloadOnSearch: false\n })\n .when('/relations/packages', {\n templateUrl: 'package/package.tpl.html',\n controller: 'PackageController',\n reloadOnSearch: false\n })\n .when('/statistic', {\n redirectTo: '/statistic/overview'\n })\n .when('/statistic/overview', {\n templateUrl: 'statistics/overview.tpl.html',\n controller: 'OverviewController'\n })\n .when('/statistic/reports', {\n templateUrl: 'statistics/reports.tpl.html',\n controller: 'ReportsController'\n })\n .when('/billing/stripeconnect', {\n templateUrl: 'billing/stripe.tpl.html',\n controller: 'StripeController'\n })\n .when('/billing/stripe', {\n templateUrl: 'billing/stripe.tpl.html',\n controller: 'StripeController'\n })\n .when('/billing/paypal-express', {\n templateUrl: 'billing/paypal-express.tpl.html',\n controller: 'PaypalExpressController'\n })\n .when('/billing/paypal-payflow', {\n templateUrl: 'billing/paypal-payflow.tpl.html',\n controller: 'PaypalPayflowController'\n })\n .when('/billing/invoice', {\n templateUrl: 'billing/invoice.tpl.html',\n controller: 'InvoiceController'\n })\n .when('/billing/offers', {\n templateUrl: 'offer/offer.tpl.html',\n controller: 'OfferController',\n reloadOnSearch: false\n })\n .when('/billing/plans', {\n templateUrl: 'plan/plan.tpl.html',\n controller: 'PlanController',\n reloadOnSearch: false\n })\n .when('/showcases', {\n templateUrl: 'showcase/showcase.tpl.html',\n controller: 'ShowcaseController'\n })\n .when('/epg', {\n redirectTo: '/epg/channels'\n })\n .when('/epg/channels', {\n templateUrl: 'epg/epg.tpl.html',\n controller: 'EpgController',\n reloadOnSearch: false\n })\n .when('/epg/epg-import', {\n templateUrl: 'epg/epg-import.tpl.html',\n controller: 'EpgImportController',\n reloadOnSearch: false\n })\n .when('/epg/catchup-2-0', {\n templateUrl: 'epg/catchup-2-0.tpl.html',\n controller: 'Catchup20Controller',\n reloadOnSearch: false\n })\n .when('/infrastructure', {\n redirectTo: '/infrastructure/servers'\n })\n .when('/infrastructure/servers', {\n templateUrl: 'infrastructure/servers.tpl.html',\n controller: 'ServersController'\n })\n/* .when('/infrastructure', {\n redirectTo: '/infrastructure/cdn'\n })\n .when('/infrastructure/cdn', {\n templateUrl: 'infrastructure/cdn.tpl.html',\n controller: 'CdnController'\n })\n .when('/infrastructure/monitoring', {\n templateUrl: 'infrastructure/monitoring.tpl.html',\n controller: 'MonitoringController'\n })*/\n .when('/application', {\n templateUrl: 'application/application.tpl.html',\n controller: 'ApplicationController'\n })\n .when('/application/banners-ng', {\n templateUrl: 'application/ng/banners.tpl.html',\n controller: 'NGBannerController'\n })\n .when('/application/rails', {\n templateUrl: 'application/rails/rails.tpl.html',\n controller: 'RailsController',\n reloadOnSearch: false\n })\n .when('/application/:application', {\n templateUrl: 'application/application.tpl.html',\n controller: 'ApplicationController'\n })\n .when('/superuser', {\n redirectTo: '/superuser/operators'\n })\n .when('/superuser/operators', {\n templateUrl: 'superuser/superuser.tpl.html',\n controller: 'SuperuserController'\n })\n .when('/administration', {\n redirectTo: '/administration/permissions'\n })\n .when('/administration/instances', {\n templateUrl: 'administration/instances.tpl.html',\n controller: 'InstanceController',\n reloadOnSearch: false\n })\n .when('/administration/permissions', {\n templateUrl: 'administration/permissions.tpl.html',\n controller: 'PermissionsController'\n })\n .when('/print/permissions', {\n templateUrl: 'administration/permissions.tpl.html',\n controller: 'PermissionsController'\n })\n .when('/dashboard', {\n templateUrl: 'owner-auth/owner-auth.tpl.html',\n controller: 'OwnerAuthController'\n })\n .otherwise({ redirectTo: '/' });\n\n if (window.history && window.history.pushState) {\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false\n });\n }\n }]);\n","lmApp\n .animation('.slide-animation', [function () {\n return {\n // make note that other events (like addClass/removeClass)\n // have different function input parameters\n enter: function(element, doneFn) {\n jQuery(element).fadeIn(1000, doneFn);\n\n // remember to call doneFn so that angular\n // knows that the animation has concluded\n },\n\n move: function(element, doneFn) {\n jQuery(element).fadeIn(1000, doneFn);\n },\n\n leave: function(element, doneFn) {\n jQuery(element).fadeOut(1000, doneFn);\n }\n };\n }]);\n","lmApp\n .service('AdministrationService', ['$rootScope', 'ApiService', '$timeout',\n function ($rootScope, ApiService, $timeout) {\n var service = {};\n\n service.Sections = {\n 'application': {\n title: 'Applications',\n route: '/application',\n mode: 'none',\n isExpand: true\n },\n 'content': {\n title: 'Content',\n route: '/content',\n isExpand: true,\n sections: {\n 'vod': {\n title: 'VOD',\n route: '/content/vod',\n mode: 'none',\n icon: 'filmstrip'\n },\n 'live': {\n title: 'Live',\n route: '/content/live',\n mode: 'none',\n icon: 'monitor'\n },\n 'catchup': {\n title: 'Catchup',\n route: '/content/catchup',\n mode: 'none',\n icon: 'video-switch'\n },\n 'metadata': {\n title: 'Metadata',\n route: '/content/metadata',\n mode: 'none',\n icon: 'tag-text-outline'\n },\n 'packages': {\n title: 'Packages',\n route: '/content/packages',\n mode: 'none',\n icon: 'package'\n }\n }\n },\n 'subscribers': {\n route: '/subscribers',\n title: 'Subscribers',\n isExpand: true,\n sections: {\n 'list': {\n title: 'List',\n route: '/subscribers/list',\n mode: 'none',\n icon: 'account-multiple'\n },\n 'groups': {\n title: 'Groups',\n route: '/subscribers/groups',\n mode: 'none',\n icon: 'google-circles-group'\n },\n 'favorites': {\n title: 'Favorites',\n route: '/subscribers/favorites',\n mode: 'none',\n icon: 'heart'\n },\n 'sessions': {\n title: 'Sessions',\n route: '/subscribers/sessions',\n mode: 'none',\n icon: 'chart-bar'\n }\n }\n },\n 'restrictions': {\n route: '/restrictions',\n title: 'Restrictions',\n isExpand: true,\n sections: {\n 'geoip-rules': {\n title: 'GeoIP rules',\n route: '/restrictions/geoip-rules',\n mode: 'none',\n icon: 'minus-network'\n }\n }\n },\n 'npvr': {\n route: '/npvr',\n title: 'nPVR',\n isExpand: true,\n sections: {\n 'records': {\n title: 'Records',\n route: '/npvr/records',\n mode: 'none',\n icon: 'record-rec'\n }\n }\n },\n 'billing': {\n route: '/billing',\n title: 'Billing',\n isExpand: true,\n sections: {\n 'stripeconnect': {\n title: 'Stripe',\n route: '/billing/stripeconnect',\n mode: 'none',\n icon: 'code-string'\n },\n 'offers': {\n title: 'Offers',\n route: '/billing/offers',\n mode: 'none',\n icon: 'coin'\n },\n 'plans': {\n title: 'Plans',\n route: '/billing/plans',\n mode: 'none',\n icon: 'cash-usd'\n }\n }\n },\n 'statistic': {\n route: '/statistic',\n title: 'Statistic',\n isExpand: true,\n sections: {\n 'overview': {\n title: 'Overview',\n route: '/statistic/overview',\n mode: 'none',\n icon: 'star-circle'\n },\n 'reports': {\n title: 'Reports',\n route: '/statistic/reports',\n mode: 'none',\n icon: 'chart-line'\n }\n }\n },\n 'epg': {\n route: '/epg',\n title: 'EPG',\n isExpand: true,\n sections: {\n 'channels': {\n title: 'Channels',\n route: '/epg/channels',\n mode: 'none',\n icon: 'timetable'\n },\n 'epg-import': {\n title: 'XMLTV',\n route: '/epg/epg-import',\n mode: 'none',\n icon: 'arrow-down-bold-hexagon-outline'\n }\n // 'catchup-2-0': {\n // title: 'Catchup 2.0',\n // route: '/epg/catchup-2-0',\n // mode: 'none',\n // icon: 'video-switch'\n // }\n }\n },\n 'infrastructure': {\n title: 'Infrastructure',\n route: '/infrastructure',\n isExpand: true,\n sections: {\n 'servers': {\n title: 'Servers',\n route: '/infrastructure/servers',\n mode: 'none',\n icon: 'server'\n }\n }\n }\n };\n\n service.parsedPermissions = service.Sections;\n\n service.ParseAccountPermissions = function (groups, notSave) {\n if (!groups) groups = $rootScope.globals.currentUser.account.groups || [];\n\n var permissions = angular.copy(service.Sections);\n\n angular.forEach(groups.filter(function (group) {\n\n return group !== 'admin';\n }), function (group) {\n if (!group) return;\n\n var mode = group.split('=');\n var split = mode[0].split(':');\n\n if (split.length > 1 && permissions[split[0]] && permissions[split[0]].sections && permissions[split[0]].sections[split[1]]) {\n permissions[split[0]].sections[split[1]].mode = mode[1] ? mode[1] : 'none';\n } else {\n if (!permissions[split[0]]) permissions[split[0]] = {};\n permissions[split[0]].mode = mode && mode[1] ? mode[1] : 'none';\n }\n\n });\n\n if (_.indexOf(groups, 'admin') !== -1) {\n permissions['application'].mode = $rootScope.globals.currentUser.readOnly ? 'r' : 'rw';\n\n for (var section in permissions) {\n if (!permissions[section].sections) {\n permissions[section].mode = $rootScope.globals.currentUser.readOnly ? 'r' : 'rw';\n } else {\n\n for (var subsection in permissions[section].sections) {\n permissions[section].sections[subsection].mode = $rootScope.globals.currentUser.readOnly ? 'r' : 'rw';\n }\n }\n }\n\n permissions['administration'] = {\n title: 'Administration',\n isExpand: true,\n sections: {\n 'permissions': {\n title: 'Permissions',\n route: '/administration/permissions',\n mode: $rootScope.globals.currentUser.readOnly ? 'r' : 'rw',\n icon: 'account-star'\n }\n }\n };\n\n if (!_.isEmpty($rootScope.globals)\n && !_.isEmpty($rootScope.globals.currentUser)) {\n\n if ($rootScope.globals.currentUser.project === 'realchoice') {\n permissions['billing']['invoice'] = {\n title: 'Invoices',\n route: '/billing/invoice',\n mode: 'none',\n icon: 'file-document'\n };\n }\n }\n }\n\n if (_.indexOf(groups, 'infrastructure:replication=rw') !== -1) {\n permissions['administration'].sections['instances'] = {\n title: 'Syndication',\n route: '/administration/instances',\n mode: 'rw',\n icon: 'sync'\n };\n }\n\n if (_.indexOf(groups, 'subscribers:creation=rw') !== -1) {\n permissions['subscribers']['creation'] = true;\n }\n\n if (!$rootScope.infrastructure) {\n $timeout(function () {\n permissions['infrastructure'].sections['delivery-method'].mode = 'none';\n }, 350);\n }\n\n permissions['support'] = {\n title: 'Support',\n route: '/support',\n isExpand: true,\n sections: {\n 'contacts_help': {\n title: 'Help',\n route: '/support/contacts_help',\n mode: 'rw',\n icon: 'help'\n }\n }\n };\n\n if (!_.isEmpty($rootScope.globals) && $rootScope.globals.currentUser.isSuperuser) {\n permissions['superuser'] = {\n admin: true,\n title: 'Superuser',\n route: '/superuser',\n isExpand: true,\n sections: {\n 'operators': {\n admin: true,\n title: 'Operators',\n route: '/superuser/operators',\n mode: 'rw',\n icon: 'account-switch'\n }\n }\n };\n\n // permissions['infrastructure'].sections['monitoring'] = {\n // admin: true,\n // title: 'Monitoring',\n // route: '/infrastructure/monitoring',\n // mode: $rootScope.globals.currentUser.readOnly ? 'r' : 'rw',\n // icon: 'speedometer'\n // };\n }\n\n var count = 0;\n for (var se in permissions) {\n if (permissions[se].sections) {\n count = 0;\n for (var sus in permissions[se].sections) {\n if (permissions[se].sections[sus].mode === 'none') count += 1;\n }\n\n if (_.size(permissions[se].sections) === count) {\n permissions[se].mode = 'none';\n }\n }\n }\n\n if (!notSave) service.parsedPermissions = permissions;\n\n return permissions;\n };\n\n service.GetParseAccountPermissions = function () {\n\n return service.parsedPermissions;\n };\n\n service.CreateAccount = function (account) {\n\n var data = {\n email: account.email,\n password: account.password,\n first_name: account.firstName,\n last_name: account.lastName\n };\n\n if (account.groups) data.groups = account.groups.join(',');\n\n return ApiService.Request('1/operator/account/create', 'POST', data);\n };\n\n service.SetAccountGroups = function (account) {\n\n var data = {\n account_id: account.id,\n groups: account.groups.join(',')\n };\n\n return ApiService.Request('1/operator/account/groups/set', 'POST', data);\n };\n\n service.RemoveAccount = function (account) {\n\n var data = {\n account_id: account.id\n };\n\n return ApiService.Request('1/operator/account/remove', 'POST', data);\n };\n\n $rootScope.$on('self:update', function (event, data) {\n service.ParseAccountPermissions();\n\n });\n\n return service;\n }]);\n","lmApp\n .controller('InstanceController', ['$scope', '$rootScope', '$templateCache', '$compile', '$routeParams', '$location', 'ModalWindowService', 'ToastService', 'ManagerResource', 'TimezoneService', 'OperatorService', 'CronService', 'ReplicationResource',\n function ($scope, $rootScope, $templateCache, $compile, $routeParams, $location, ModalWindowService, ToastService, ManagerResource, TimezoneService, OperatorService, CronService, ReplicationResource) {\n $scope.loading = false;\n\n $scope.replications = [];\n $scope.replication = {};\n $scope.activeReplication= {};\n\n $scope.totalLive = 0;\n $scope.totalVOD = 0;\n\n $scope.croneConfig = {\n options: {allowMinute: false, allowHour: false, allowYear: false}\n };\n $scope.croneInitTime = '0 5 * * *';\n\n $scope.resources = [\n {\n id: 0,\n 'ext_id': 'channels',\n 'title': 'Сhannels'\n },\n {\n id: 1,\n 'ext_id': 'movies',\n 'title': 'Movies'\n },\n {\n id: 2,\n 'ext_id': 'series',\n 'title': 'Series'\n },\n {\n id: 3,\n 'ext_id': 'packages',\n 'title': 'Packages'\n },\n {\n id: 4,\n 'ext_id': 'genres',\n 'title': 'Genres'\n },\n {\n id: 5,\n 'ext_id': 'categories',\n 'title': 'Categories'\n },\n {\n id: 6,\n 'ext_id': 'countries',\n 'title': 'Countries'\n },\n {\n id: 7,\n 'ext_id': 'epg-channels',\n 'title': 'EPG Channels'\n },\n {\n id: 8,\n 'ext_id': 'epg-sources',\n 'title': 'EPG Sources'\n }\n ];\n\n var resourceMap = {};\n for (var i = 0; i < $scope.resources.length; i++) {\n resourceMap[$scope.resources[i].ext_id] = i;\n }\n\n var jsonReplicationToNorm = function (replication) {\n var processed = {\n id: replication.id,\n createTime: replication.create_time,\n updateTime: replication.update_time,\n name: replication.name,\n type: replication.type,\n scheduleTime: replication.cron,\n syncSchedule: CronService.cronTimeToText(replication.cron),\n token: replication.access_token,\n nextRunTime: replication.next_run_time,\n resources: [],\n checkedOperator: {\n valid: false,\n operator: ''\n },\n lastRun: {\n runTime: null,\n state: '',\n error: ''\n },\n runs: [],\n sync: false\n };\n for (var i = 0; i < replication.elements.length; i++) {\n if (resourceMap.hasOwnProperty(replication.elements[i])) {\n processed.resources.push($scope.resources[resourceMap[replication.elements[i]]]);\n }\n }\n if (replication.last_run !== undefined) {\n processed.lastRun.runTime = replication.last_run.create_time;\n processed.lastRun.state = replication.last_run.state;\n processed.lastRun.error = replication.last_run.error;\n }\n return processed;\n };\n\n var jsonReplicationRunToNorm = function(run) {\n return {\n id: run.id,\n runTime: run.create_time,\n lastUpdateTime: run.update_time,\n state: run.state,\n error: run.error\n };\n };\n\n var normReplicationToJson = function(replication) {\n var processed = {\n name: replication.name,\n type: replication.type,\n access_token: replication.token,\n cron: replication.scheduleTime,\n elements: []\n };\n for (var i = 0; i < replication.resources.length; i++) {\n processed.elements.push(replication.resources[i].ext_id);\n }\n return processed;\n };\n\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n //\n $scope.getReplications = function() {\n if ($scope.loading) return;\n\n $scope.replications = [];\n\n $rootScope.showLinearProgress('#replicationLoader');\n $scope.loading = true;\n\n ReplicationResource.get().$promise\n .then(function (replications) {\n for (var i = 0; i < replications.length; i++) {\n $scope.replications.push(jsonReplicationToNorm(replications[i]))\n }\n\n if ($scope.replications.length && $scope.routeReplicationId) {\n var replication = _.find($scope.replications, {id: $scope.routeReplicationId});\n if (replication) {\n $scope.setActiveReplication(replication);\n }\n }\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#replicationLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#replicationLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.getToken = function() {\n $scope.replication.loading = true;\n $scope.replication.authError = '';\n return OperatorService.GetToken($scope.replication.login, $scope.replication.password)\n .then(function (result) {\n if (result.error && result.error.message) {\n $scope.replication.authError = result.error.message;\n }\n if (result.access_token) {\n $scope.replication.token = result.access_token;\n $scope.checkToken();\n }\n $scope.replication.loading = false;\n })\n .catch(function (reason) {\n $scope.replication.authError = 'invalid credentials';\n $scope.replication.loading = false;\n });\n };\n\n $scope.checkToken = function() {\n $scope.replication.loading = true;\n $scope.replication.authError = '';\n return OperatorService.CheckToken($scope.replication.token)\n .then(function (result) {\n $scope.replication.checkedOperator.valid = true;\n $scope.replication.checkedOperator.operator = result.data.ext_id;\n $scope.replication.loading = false;\n })\n .catch(function (reason) {\n $scope.replication.loading = false;\n $scope.replication.checkedOperator.valid = false;\n });\n };\n\n $scope.editReplication = function(replication) {\n if ($scope.loading) return;\n\n $scope.replicationValidateErrors = {};\n $scope.replication = {\n name: '',\n token: '',\n checkedOperator: {\n valid: null,\n operator: ''\n },\n type: 'push',\n resources: [],\n scheduleTime: '0 5 * * *',\n loading: false,\n showLoginForm: false,\n login: '',\n password: '',\n authError: ''\n };\n\n var update = false;\n if (replication !== undefined) {\n update = true;\n $scope.replication.id = replication.id;\n $scope.replication.name = replication.name;\n $scope.replication.token = replication.token;\n $scope.replication.checkedOperator.valid = replication.checkedOperator.valid;\n $scope.replication.checkedOperator.operator = replication.checkedOperator.operator;\n $scope.replication.type = replication.type;\n $scope.replication.resources = replication.resources;\n $scope.replication.scheduleTime = replication.scheduleTime;\n }\n\n $scope.croneInitTime = $scope.replication.scheduleTime;\n\n var inner = $templateCache.get('add-instance.html');\n inner = $compile(inner)($scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: update ? 'Save' : 'Create',\n color: 'green',\n check: function () {\n var valid = true;\n if (!$scope.replication.checkedOperator.valid) {\n $scope.replication.checkedOperator.valid = false;\n valid = false;\n }\n $scope.replicationValidateErrors = {};\n if (!_.trim($scope.replication.name)) {\n $scope.replicationValidateErrors.name = true;\n valid = false;\n }\n if ($scope.replication.resources.length === 0) {\n $scope.replicationValidateErrors.resources = true;\n valid = false;\n }\n return valid;\n },\n fn: function () {\n if (update === true) {\n ReplicationResource.update({id: $scope.replication.id}, normReplicationToJson($scope.replication)).$promise\n .then(function (response) {\n updateActiveReplication($scope.replication, response.data);\n ToastService.Small({\n title: 'The replication has been updated',\n color: 'green',\n icon: 'plus'\n }, 20 * 1000);\n return response\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Failed to update replication: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n } else {\n ReplicationResource.create(normReplicationToJson($scope.replication)).$promise\n .then(function (response) {\n $scope.replications.push(jsonReplicationToNorm(response.data));\n ToastService.Small({\n title: 'The replication has been added',\n color: 'green',\n icon: 'plus'\n }, 20 * 1000);\n return response\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Failed to create replication: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ]\n });\n };\n\n var updateActiveReplication = function(source, replication) {\n var processed = jsonReplicationToNorm(replication);\n $scope.activeReplication.updateTime = processed.updateTime;\n $scope.activeReplication.name = processed.name;\n $scope.activeReplication.type = processed.type;\n $scope.activeReplication.scheduleTime = processed.scheduleTime;\n $scope.activeReplication.syncSchedule = processed.syncSchedule;\n $scope.activeReplication.token = processed.token;\n $scope.activeReplication.nextRunTime = processed.nextRunTime;\n $scope.activeReplication.resources = processed.resources;\n $scope.activeReplication.checkedOperator.valid = true;\n $scope.activeReplication.checkedOperator.operator = source.checkedOperator.operator;\n };\n\n $scope.sync = function($event, replication) {\n $event.stopPropagation();\n $event.preventDefault();\n replication.sync = true;\n\n ReplicationResource.syncNow({id: replication.id}).$promise\n .then(function (response) {\n var updated = jsonReplicationToNorm(response.data);\n if ($scope.isActiveReplicationSet()) {\n $scope.setActiveReplication(updated);\n }\n\n for (var i = 0; i < $scope.replications.length; i++) {\n if ($scope.replications[i].id === updated.id) {\n $scope.replications[i].nextRunTime = updated.nextRunTime;\n $scope.replications[i].lastRun = updated.lastRun;\n break\n }\n }\n\n replication.sync = false;\n ToastService.Small({\n title: 'The next import time of the replication ' + replication.name + ' has been successfully updated',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n replication.sync = false;\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to sync replication',\n color: 'red',\n icon: 'delete'\n });\n });\n };\n\n $scope.removeReplication = function (replication) {\n if ($scope.loading) return;\n $rootScope.showLinearProgress('#replicationLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the replication \"' + replication.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n ReplicationResource.remove({id: replication.id}).$promise\n .then(function () {\n $scope.clearActiveReplication();\n $scope.getReplications();\n $rootScope.hideLinearProgress('#replicationLoader');\n ToastService.Small({\n title: 'The replication ' + replication.name + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#replicationLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove replication',\n color: 'red',\n icon: 'delete'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#replicationLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n //\n $scope.isActiveReplicationSet = function () {\n return !_.isEmpty($scope.activeReplication);\n };\n\n $scope.setActiveReplication = function (replication) {\n $scope.activeReplication = replication;\n $scope.activeReplication.limit = 20;\n $scope.activeReplication.offset = 0;\n $scope.activeReplication.runs = [];\n $location.search('replication_id', replication.id);\n $rootScope.showLinearProgress('#replicationLoader');\n\n $scope.activeReplication.loading = true;\n OperatorService.CheckToken(replication.token)\n .then(function (result) {\n $scope.activeReplication.checkedOperator.valid = true;\n $scope.activeReplication.checkedOperator.operator = result.data.ext_id;\n })\n .catch(function (reason) {\n $scope.activeReplication.checkedOperator.valid = false;\n });\n\n return ReplicationResource.getRuns({id: replication.id}).$promise\n .then(function (runs) {\n for (var i = 0; i < runs.length; i++) {\n $scope.activeReplication.runs.push(jsonReplicationRunToNorm(runs[i]))\n }\n $scope.activeReplication.loading = false;\n $rootScope.hideLinearProgress('#replicationLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n $scope.activeReplication.loading = false;\n $rootScope.hideLinearProgress('#replicationLoader');\n });\n };\n\n $scope.activeReplicationNextPage = function () {\n if ($scope.activeReplication.offset + $scope.activeReplication.limit < $scope.activeReplication.runs.length) {\n $scope.activeReplication.offset = $scope.activeReplication.offset + $scope.activeReplication.limit;\n }\n };\n\n $scope.activeReplicationPrevPage = function () {\n $scope.activeReplication.offset = Math.max($scope.activeReplication.offset - $scope.activeReplication.limit, 0);\n };\n\n $scope.clearActiveReplication = function () {\n $scope.activeReplication = {};\n $location.search('replication_id', null);\n };\n\n $scope.routeReplicationId = null;\n if ($routeParams.replication_id) {\n $scope.routeReplicationId = Number($routeParams.replication_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeReplicationId && !$routeParams.replication_id) {\n $scope.clearActiveReplication();\n }\n $scope.routeReplicationId = Number($routeParams.replication_id) || null;\n });\n\n $scope.getReplications();\n }]);\n","lmApp\n .controller('PermissionsController', ['$scope', '$rootScope', '$templateCache', '$compile', '$timeout', 'AdministrationService', 'ModalWindowService', 'ToastService', 'ValidatorService', 'ApiService', 'ManagerResource',\n function ($scope, $rootScope, $templateCache, $compile, $timeout, AdministrationService, ModalWindowService, ToastService, ValidatorService, ApiService, ManagerResource) {\n $scope.loading = false;\n\n $scope.getManagers = function () {\n ManagerResource.get().$promise\n .then(function (result) {\n $scope.managers = result.filter(function (account) {\n return _.indexOf(account.groups, 'admin') >= 0;\n });\n angular.forEach($scope.managers, function (manager) {\n if (manager.username === $rootScope.globals.currentUser.username) {\n manager._isCurrentAdmin = true;\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n $scope.getManagers();\n\n if ($rootScope._self) {\n $scope.getManagers();\n $scope.accountsCollection = $rootScope._self.accounts\n .filter(function (account) {\n return account.groups;\n })\n .filter(function (account) {\n return _.indexOf(account.groups, 'admin') === -1;\n })\n .map(function (account) {\n account._permissions = {};\n account._permissions = AdministrationService.ParseAccountPermissions(account.groups, true);\n return account;\n });\n } else {\n $scope.loading = true;\n }\n\n var _onSelfUpdate = $scope.$on('self:update', function (event, data) {\n $scope.accountsCollection = data.accounts\n .filter(function (account) {\n return account.groups;\n })\n .filter(function (account) {\n return _.indexOf(account.groups, 'admin') === -1;\n })\n .map(function (account) {\n account._permissions = {};\n account._permissions = angular.copy(AdministrationService.ParseAccountPermissions(account.groups, true));\n return account;\n });\n $scope.loading = false;\n });\n\n $scope.toggleAccount = function (account) {\n account.isExpand = !account.isExpand;\n };\n\n $scope.setPermission = function (section, value) {\n section.mode = value;\n };\n\n $scope.savePermissions = function (account) {\n account.groups = [];\n\n _.forEach(account._permissions, function (section, permission1) {\n if (!section.sections) {\n if (section.mode !== 'none') account.groups.push(permission1 + '=' + section.mode);\n } else {\n _.forEach(section.sections, function (subsection, permission2) {\n if (subsection.mode !== 'none') account.groups.push(permission1 + ':' + permission2 + '=' + subsection.mode);\n });\n }\n });\n\n AdministrationService.SetAccountGroups(account)\n .then(function (response) {\n $scope.loading = false;\n\n ToastService.Small({\n color: 'green',\n title: 'Permissions successfully saved',\n icon: 'account'\n }, 6000);\n })\n .catch(function (reason) {\n $scope.loading = false;\n\n ToastService.Small({\n color: 'red',\n title: 'Permissions save failed',\n icon: 'account'\n }, 6000);\n });\n };\n\n $scope.removeAccount = function (account) {\n\n ModalWindowService.Open({\n content: '

    Are you sure?

    ' +\n '
    ' +\n 'This action will remove account from system permanently.',\n actions: [\n {\n title: 'Do it',\n color: 'green',\n fn: function () {\n AdministrationService.RemoveAccount(account)\n .then(function (response) {\n $scope.loading = false;\n\n ToastService.Small({\n color: 'green',\n title: 'Account successfully removed',\n icon: 'account'\n }, 6000);\n\n var index = $scope.accountsCollection.indexOf(account);\n\n if (index !== -1) {\n $scope.accountsCollection.splice(index, 1);\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n\n ToastService.Small({\n color: 'red',\n title: 'Account removed failed',\n icon: 'account'\n }, 6000);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.createNewAccount = function () {\n $scope._createInner_ = $templateCache.get('add-account.html');\n $scope._createInner_ = $compile($scope._createInner_)($scope);\n\n $scope.newAccount = {};\n $scope.newAccount = {};\n $scope.newAccount._errors = {};\n $scope.newAccount.groups = [\"content:vod=rw\"];\n\n ModalWindowService.Open({\n content: $scope._createInner_,\n actions: [\n {\n title: 'Create',\n color: 'green',\n fn: function () {\n AdministrationService.CreateAccount($scope.newAccount)\n .then(function (response) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.loading = false;\n\n ToastService.Small({\n title: 'Account successfully created',\n color: 'green',\n icon: 'account'\n }, 1000 * 3);\n\n ApiService.Request('1/self', 'GET')\n .then(function (response) {\n $rootScope._self = response.self;\n\n $rootScope.$broadcast('self:update', response.self)\n })\n .catch(function (reason) {\n $rootScope._self = {};\n $rootScope.debugInfo(reason, 'silent');\n });\n\n //response.account._permissions = {};\n //response.account._permissions = AdministrationService.ParseAccountPermissions(response.account.groups);\n //$scope.accountsCollection.unshift(response.account);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Account create failed',\n color: 'red',\n icon: 'account'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.loading = false;\n });\n },\n check: function () {\n $scope.newAccount._errors = {};\n\n if (!$scope.newAccount.email) {\n $scope.newAccount._errors.email = 'Required filed';\n }\n if ($scope.newAccount.email && !ValidatorService.Email($scope.newAccount.email)) {\n $scope.newAccount._errors.email = 'Wrong email format';\n }\n if (!$scope.newAccount.password) {\n $scope.newAccount._errors.password = 'Required filed';\n }\n if (!$scope.newAccount.lastName) {\n $scope.newAccount._errors.lastName = 'Required filed';\n }\n if (!$scope.newAccount.firstName) {\n $scope.newAccount._errors.firstName = 'Required filed';\n }\n\n return _.isEmpty($scope.newAccount._errors);\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.setManagerPassword = function(manager) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n\n $scope.modalWindowScope = $scope.$new();\n $scope.modalWindowScope.username = manager.username;\n $scope.modalWindowScope.newPassword = '';\n $scope.modalWindowScope.errors = {\n newPassword: ''\n };\n var inner = $compile($templateCache.get('set-subscriber-password.html'))($scope.modalWindowScope);\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n check: function () {\n $scope.modalWindowScope.errors.newPassword = '';\n if (!$scope.modalWindowScope.newPassword) {\n $scope.modalWindowScope.errors.newPassword = 'Password field cannot be empty';\n } else if (!ValidatorService.Password($scope.modalWindowScope.newPassword)) {\n $scope.modalWindowScope.errors.newPassword = 'Invalid password format. Min 6 symbols. a-z 0-9 _ -.';\n }\n return !$scope.modalWindowScope.errors.newPassword;\n },\n fn: function () {\n ManagerResource.setPassword({id: manager.id, password: $scope.modalWindowScope.newPassword}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Small({\n title: 'Password successfully changed',\n color: 'green',\n icon: 'email-outline'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to set manager password',\n color: 'red',\n icon: 'email-outline'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.$on('$destroy', function () {\n _onSelfUpdate();\n });\n }]);\n","lmApp\n .service('BillingService', ['$q', 'ApiService',\n function ($q, ApiService) {\n var service = {};\n\n service.EbsStripeInstall = function (code, livemode) {\n var data = {\n code: code,\n livemode: +livemode\n };\n\n return ApiService.Request('1/services/ebs.stripe/install', 'POST', data);\n };\n\n service.EbsStripeUninstall = function () {\n return ApiService.Request('1/services/ebs.stripe/uninstall', 'POST');\n };\n\n service.GetBillingSubscriptions = function () {\n return ApiService.Request('1/billing/subscription', 'GET');\n };\n\n service.GetBillingSubscriptionsDetailsForPeriod = function (period_id) {\n var deferred = $q.defer();\n\n var url = '1/billing/subscription/period/bill?period_id=' + period_id;\n\n ApiService.Request(url, 'GET')\n .then(function (response) {\n deferred.resolve(response.bill);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetInvoicePreview = function (period_id) {\n var deferred = $q.defer();\n\n var url = '1/billing/subscription/period/invoice/preview?period_id=' + period_id;\n\n ApiService.Request(url, 'GET')\n .then(function (response) {\n deferred.resolve(response.invoice);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetPaypalExpress = function () {\n var data = window.localStorage['paypal-express'];\n if (!data || data === 'undefined') {\n data = {\n paypal_user: 'name_api1.sotal.tv',\n paypal_password: '8GKU8V79L9HF54DN',\n paypal_password2: '8GKU8V79L9HF54DN',\n paypal_signature: 'AFcWxV21C7fd0v3bYYYRCpSSRl31Awm.Hu-Cx8jaJLTL9AS9kUFSPbtN'\n };\n } else {\n data = JSON.parse(data);\n }\n\n return data;\n };\n\n service.SavePaypalExpress = function (data) {\n window.localStorage['paypal-express'] = JSON.stringify(data);\n };\n\n service.GavePaypalPayflow = function () {\n var data = window.localStorage['paypal-payflow'];\n if (!data || data === 'undefined') {\n data = {\n payflow_partner: 'PayPalCA',\n payflow_vendor: 'sotalcloud',\n payflow_user: 'sotalcloud',\n payflow_password: 'am3xsWag4smOh'\n };\n } else {\n data = JSON.parse(data);\n }\n\n return data;\n };\n\n service.SavePaypalPayflow = function (data) {\n window.localStorage['paypal-payflow'] = JSON.stringify(data);\n };\n\n return service;\n }]);\n","lmApp\n .controller('InvoiceController', ['$scope', '$rootScope', '$templateCache', '$compile', '$timeout', '$window', '$interpolate', 'BillingService',\n function ($scope, $rootScope, $templateCache, $compile, $timeout, $window, $interpolate, BillingService) {\n\n $rootScope.showLinearProgress('#billsLoader');\n\n $scope.openPage = function (act) {\n var popupWin = $window.open('', 'newwin', \"width=\" + 800 + \",height=\" + screen.height * 0.9);\n\n $scope.invoice = {};\n\n BillingService.GetInvoicePreview($scope.currentPeriod.id)\n .then(function (answer) {\n $scope.invoice = answer;\n $scope.invoice.dueDate = moment.utc(answer.due_time * 1000).subtract(1, 'day');\n $scope.invoice.invoiceDate = moment.utc();\n\n //scope.$digest();\n\n if (act == 'print') {\n var tpl = $templateCache.get('billing/invoice.print.tpl.html');\n var html = $compile(tpl)($scope);\n\n popupWin.document.open();\n popupWin.onload = function () {\n popupWin.print();\n };\n popupWin.document.write(tpl);\n angular.element(popupWin.document.body).html(html);\n popupWin.document.close();\n } else {\n\n // This pdf generation technique is kind of ugly, it is better to find another solution.\n\n var tpl = $templateCache.get('billing/invoice.pdf.tpl.html');\n var html = $compile(tpl)($scope);\n\n popupWin.document.open();\n\n popupWin.onload = function () {\n var pdf = new jsPDF('p','pt','a4');\n pdf.addHTML(popupWin.document.body, function () {\n pdf.output('save', 'sotal_invoice_'+ moment.utc().format(\"MMMM_D_YYYY_hh-mm-ss\") +'.pdf');\n });\n };\n\n popupWin.document.write(tpl);\n angular.element(popupWin.document.body).html(html);\n\n popupWin.document.close();\n }\n });\n };\n\n BillingService.GetBillingSubscriptions()\n .then(function (answer) {\n $scope.subscriptionPeriods = answer.subscription.periods.map(function (period) {\n return {\n title: period.name,\n id: period.id,\n start: moment.utc(period.start * 1000),\n end: moment.utc(period.end * 1000).subtract(1, 'day')\n }\n });\n\n $scope.currentPeriod = $scope.subscriptionPeriods[0];\n\n $scope.products = answer.subscription.plan.products.map(function (product) {\n return {\n name: product.name,\n code: product.code,\n items: [],\n total: 0\n }\n });\n });\n\n function getProductInfoAndCost() {\n $scope.total = 0;\n angular.forEach($scope.products, function (obj) {\n obj.total = 0;\n obj.items.length = 0;\n });\n\n BillingService.GetBillingSubscriptionsDetailsForPeriod($scope.currentPeriod.id)\n .then(function (answer) {\n\n $scope.invoice = answer.invoice;\n\n var productInfoAndCost = answer.items.reduce(function (result, item) {\n if (item.product_code in result) {\n result[item.product_code].push(item);\n result['total'] += item.amount;\n } else {\n result[item.product_code] = {\n 'items': [item],\n 'total': item.amount\n }\n }\n return result\n }, []);\n\n angular.forEach($scope.products, function (obj) {\n if (obj.code in productInfoAndCost) {\n obj.total = productInfoAndCost[obj.code].total;\n obj.items = productInfoAndCost[obj.code].items;\n $scope.total += obj.total;\n }\n });\n\n $rootScope.hideLinearProgress('#billsLoader');\n })\n .catch(function (reason) {\n console.log(reason);\n });\n }\n\n $scope.$watch('currentPeriod', function (newValue, oldValue) {\n if (!_.isEqual(newValue, oldValue) && !_.isEmpty(newValue)) {\n $rootScope.showLinearProgress('#billsLoader');\n getProductInfoAndCost();\n }\n });\n\n }]);","lmApp\n .controller('PaypalExpressController', ['$scope', '$rootScope', '$timeout', 'BillingService', 'ToastService', 'ValidatorService',\n function ($scope, $rootScope, $timeout, BillingService, ToastService, ValidatorService) {\n $scope.loading = false;\n $scope.paypalExpress = {};\n $scope.validateErrors = {};\n $scope.selectedNode = {};\n\n var _validate = function (data) {\n var error = {\n };\n\n if (!data.paypal_user) error.paypal_user = true;\n if (!data.paypal_password) error.paypal_password = true;\n if (data.paypal_password !== data.paypal_password2) error.paypal_password2 = true;\n if (!data.paypal_signature) error.paypal_signature = true;\n\n $scope.validateErrors = error;\n return error;\n };\n\n $scope.getPaypalExpressSettings = function () {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#paypalDrmLoader');\n $timeout(function () {\n $scope.paypalExpress = BillingService.GetPaypalExpress();\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#paypalDrmLoader');\n }, 1000);\n };\n\n $scope.savePaypalExpressSettings = function () {\n if ($scope.loading) return;\n\n if (!_.isEmpty(_validate($scope.paypalExpress))) return;\n\n BillingService.SavePaypalExpress($scope.paypalExpress);\n ToastService.Small({\n title: 'Paypal Express Checkout settings successfully saved',\n color: 'green',\n icon: 'security-network',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.getPaypalExpressSettings();\n }\n ]);","lmApp\n .controller('PaypalPayflowController', ['$scope', '$rootScope', '$timeout', 'BillingService', 'ToastService', 'ValidatorService',\n function ($scope, $rootScope, $timeout, BillingService, ToastService, ValidatorService) {\n $scope.loading = false;\n $scope.paypalPayflow = {};\n $scope.validateErrors = {};\n $scope.selectedNode = {};\n\n var _validate = function (data) {\n var error = {\n };\n\n if (!data.payflow_partner) error.payflow_partner = true;\n if (!data.payflow_vendor) error.payflow_vendor = true;\n if (!data.payflow_user) error.payflow_user = true;\n if (!data.payflow_password) error.payflow_password = true;\n\n $scope.validateErrors = error;\n return error;\n };\n\n $scope.getPaypalPayflowSettings = function () {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#paypalDrmLoader');\n $timeout(function () {\n $scope.paypalPayflow = BillingService.GavePaypalPayflow();\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#paypalDrmLoader');\n }, 1000);\n };\n\n $scope.savePaypalPayflowSettings = function () {\n if ($scope.loading) return;\n\n if (!_.isEmpty(_validate($scope.paypalPayflow))) return;\n\n BillingService.SavePaypalPayflow($scope.paypalPayflow);\n ToastService.Small({\n title: 'Paypal Express Checkout settings successfully saved',\n color: 'green',\n icon: 'security-network',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.getPaypalPayflowSettings();\n }\n ]);","lmApp\n .controller('StripeController', ['$scope', '$rootScope', '$routeParams', '$timeout', '$interval', '$templateCache', '$compile', 'SupervisorService', 'BillingService', 'ToastService', 'ModalWindowService',\n function ($scope, $rootScope, $routeParams, $timeout, $interval, $templateCache, $compile, SupervisorService, BillingService, ToastService, ModalWindowService) {\n $scope.loading = false;\n $scope.stripeStatus = true;\n\n $scope.stripeConnect = function () {\n if ($scope.loading) return;\n\n var host = window.location.protocol + '//' + window.location.host;\n\n if ($scope.isLive) {\n window.open('https://connect.stripe.com/oauth/authorize?response_type=code' +\n '&client_id=' + $scope.clientId +\n '&redirect_uri=' + encodeURIComponent(host.replace('http://', 'https://') + '/billing/stripeconnect') +\n '&scope=read_write',\n 'newwindow', 'width=' + window.innerWidth / 1.3 + ', height=' + window.innerHeight / 1.3 + ', left=350, top=150');\n } else {\n window.open('https://connect.stripe.com/oauth/authorize?response_type=code' +\n '&client_id=' + $scope.clientId +\n '&redirect_uri=' + encodeURIComponent(host + '/billing/stripeconnect?devmode=1') +\n '&scope=read_write',\n 'newwindow', 'width=' + window.innerWidth / 1.3 + ', height=' + window.innerHeight / 1.3 + ', left=350, top=150');\n }\n\n return false;\n };\n\n $scope.stripeDisconnect = function () {\n if ($scope.loading) return;\n\n var tpl = $templateCache.get('stripe-disconnect-manual.html');\n tpl = $compile(tpl)($scope);\n\n ModalWindowService.Open({\n content: tpl,\n size: {\n s: 5\n },\n actions: [{\n title: 'OK',\n color: 'lm',\n fn: function () {\n }\n }]\n });\n };\n\n if ($routeParams.devmode) {\n $scope.clientId = 'ca_6qA0owYgGr2TFkN94r6YZ2xEbRqf9Duo'; // SotalCloud (Dev)\n //$scope.clientId = 'ca_6qA0owYgGr2TFkN94r6YZ2xEbRqf9Duo'; // SotalCloud (Prod)\n $scope.isLive = false;\n } else {\n $scope.clientId = $rootScope.stripe.clientId;\n //$scope.clientId = 'ca_6qA0rusByFmq19FVQP3IyI6cYSuNDUcB';\n $scope.isLive = $rootScope.stripe.isLive;\n }\n\n if ($routeParams.code) {\n $scope.stripeCode = $routeParams.code;\n\n angular.element('body').addClass('modal-open');\n\n BillingService.EbsStripeInstall($scope.stripeCode, $scope.isLive)\n .then(function (response) {\n $rootScope.hideLinearProgress('#connectLoader');\n ToastService.Big({\n title: 'Stripe connect',\n text: 'Your stripe account successfully connected',\n color: 'green',\n icon: 'code-string'\n }, 6000);\n\n $timeout(function () {\n window.close();\n }, 3000);\n })\n .catch(function (reason) {\n $scope.stripeError = reason.message;\n $rootScope.hideLinearProgress('#connectLoader');\n ToastService.Big({\n title: 'Stripe connect',\n text: 'Failed stripe connect. ' + reason.message,\n color: 'deep-orange',\n icon: 'code-string'\n })\n }, 6000);\n } else if ($routeParams.error) {\n $scope.stripeError = $routeParams.error;\n } else {\n SupervisorService.Self()\n .then(function (response) {\n $scope.stripeStatus = !!_.find(response.self.services, {name: 'ebs.stripe'});\n\n $scope.selfInt = $interval(function () {\n if ($scope.selfIntInProgress) return;\n\n $scope.selfIntInProgress = true;\n\n SupervisorService.Self()\n .then(function (response) {\n $scope.stripeStatus = !!_.find(response.self.services, {name: 'ebs.stripe'});\n $scope.selfIntInProgress = false;\n })\n .catch(function () {\n $scope.selfIntInProgress = false;\n })\n }, 60000);\n })\n .catch(function () {\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n $scope.$on('$destroy', function () {\n $interval.cancel($scope.selfInt);\n });\n }]);","lmApp\n .controller('ApplicationController', ['$scope', '$rootScope', '$routeParams', '$templateCache', 'AssetService', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $routeParams, $templateCache, AssetService, ShowcaseService, ToastService) {\n\n $scope.tab = 'settings';\n $scope.loading = false;\n $scope.currentApplication = null;\n $scope.currentPlatform = {};\n $scope.message = '';\n\n var _getApplication = function () {\n if ($routeParams.application) {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n var service;\n\n switch ($routeParams.application) {\n case 'stockweb':\n service = _.find($rootScope._self.services, {name: 'app.stockweb'});\n break;\n\n /* case 'stockios':\n service = _.find($rootScope._self.services, {name: 'app.stockios'});\n break;\n\n case 'stockand':\n service = _.find($rootScope._self.services, {name: 'app.stockand'});\n break;*/\n\n default:\n $scope.message = $templateCache.get('invalid/no-application.html');\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n break;\n }\n }\n\n if (service) {\n $scope.currentService = service;\n AssetService.GetPlatforms(service.instance.platform.ext_id)\n .then(function (platformCollection) {\n if (platformCollection.length) {\n $scope.currentPlatform = platformCollection[0];\n if ($routeParams.application === 'stockweb') {\n ShowcaseService.GetShowcases(platformCollection[0].id)\n .then(function (showcaseCollection) {\n $scope.currentApplication = _parseApplication(showcaseCollection);\n })\n } else {\n $scope.currentApplication = _parseApplication();\n }\n }\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n });\n } else {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n }\n };\n\n var _parseApplication = function (collecion) {\n var application = {};\n\n switch ($scope.currentService.name) {\n case 'app.stockweb':\n\n application.aliases = $scope.currentService.instance.configuration.aliases;\n application.service_name = $scope.currentService.name;\n application.platform = $scope.currentService.instance.platform;\n application.platform.logo_url = $scope.currentService.instance.configuration.logo_url;\n application.platform.id = $scope.currentPlatform.id;\n application.platform.name = $scope.currentPlatform.name;\n\n var bg = _.find(collecion, {labels: ['promo.background.slider']});\n\n if (bg) ShowcaseService.GetTileByShowcaseId(bg.id)\n .then(function (collection) {\n if (!collection.length) return;\n\n application.background = {};\n application.background = ShowcaseService._ParseTile(collection[0]);\n application.background._PrivateData.showcase_id = bg.id;\n });\n\n var slider = _.find(collecion, {labels: ['promo.home.slider']});\n\n if (slider) ShowcaseService.GetTileByShowcaseId(slider.id)\n .then(function (collection) {\n if (!collection.length) return;\n\n application.banners = {};\n application.banners = ShowcaseService._ParseTile(collection[0]);\n application.banners._PrivateData.showcase_id = bg.id;\n });\n\n application.type = 'ott-web';\n break;\n case 'app.stockios':\n\n application.service_name = $scope.currentService.name;\n application.platform = $scope.currentService.instance.platform;\n application.platform.id = $scope.currentPlatform.id;\n application.platform.name = $scope.currentPlatform.name;\n\n application.type = 'ios';\n break;\n\n case 'app.stockand':\n\n application.service_name = $scope.currentService.name;\n application.platform = $scope.currentService.instance.platform;\n application.platform.id = $scope.currentPlatform.id;\n application.platform.name = $scope.currentPlatform.name;\n\n application.type = 'android';\n break;\n }\n\n $rootScope.currentPlatform = application.platform;\n\n return application;\n };\n\n if ($rootScope._self) {\n _getApplication();\n } else {\n var _onSelfUpdate = $scope.$on('self:update', function (event, data) {\n _getApplication();\n });\n }\n\n $scope.$on('$destroy', function () {\n if (_onSelfUpdate) _onSelfUpdate();\n });\n }\n ]);\n","lmApp\n.service('ApplicationService', ['$q', 'ApiService', function ($q, ApiService) {\n var service = {};\n\n service.CreateCNAME = function (alias) {\n var data = {\n alias: alias\n };\n\n return ApiService.Request('1/services/app.stockweb/alias/create', 'POST', data);\n };\n\n service.RemoveCNAME = function (alias) {\n var data = {\n alias: alias\n };\n\n return ApiService.Request('1/services/app.stockweb/alias/remove', 'POST', data);\n };\n\n service.UpdatePlatform = function (data) {\n var deferred = $q.defer();\n\n var platformData = {\n platform_id: data.id\n };\n\n if (data.app_url) platformData.app_url = data.app_url;\n if (data.logo_url) platformData.logo_url = data.logo_url;\n\n lh.common.request.post('cloud/mgmt/operator/platform/update', platformData)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.url = 'cloud/mgmt/operator/platform/update';\n reason.data = platformData;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:MainCtrl\n * @description\n * # MainCtrl\n * Controller of the lmApp\n */\nlmApp.controller('ContactsController', [function () {\n\n }]);\n","lmApp\n .service('ContactsService', [function () {\n\n var service = {};\n\n return service;\n }]);\n","lmApp\n .controller('CatchupController', ['$scope', '$rootScope', '$q', '$timeout', '$routeParams', '$location', '$templateCache', '$compile', 'ToastService', 'ModalWindowService', 'EpgService', 'AssetService', 'AssetResource', 'LiveEventResource',\n function ($scope, $rootScope, $q, $timeout, $routeParams, $location, $templateCache, $compile, ToastService, ModalWindowService, EpgService, AssetService, AssetResource, LiveEventResource) {\n $scope.loading = false;\n $scope.channels = [];\n $scope.currentChannel = -1;\n\n var processChannel = function(asset) {\n var processed = {\n id: asset.id,\n name: asset.name,\n epg: {\n id: 0,\n name: ''\n },\n catchupDepth: 0,\n streamHLS: false,\n streamDASH: false,\n streamHLSId: 0,\n streamDASHId: 0,\n recorded: -1\n };\n if (asset.epg) {\n processed.epg.id = asset.epg.id;\n processed.epg.name = asset.epg.ext_id;\n }\n var catchupResources = asset.resources.filter(function(resource) {\n return resource.category === 'catchup';\n });\n if (catchupResources.length > 0) {\n processed.catchupDepth = Math.round(catchupResources[0].catchup_depth/3600) || 0;\n }\n\n var streamHLSResources = asset.resources.filter(function(resource) {\n return resource.type === 'hls-live' && resource.state === 'deployed';\n });\n if (streamHLSResources.length > 0) {\n processed.streamHLS = true;\n processed.streamHLSId = streamHLSResources[0].id;\n }\n\n var streamDashResources = asset.resources.filter(function(resource) {\n return resource.type === 'dash-live' && resource.state === 'deployed';\n });\n if (streamDashResources.length > 0) {\n processed.streamDASH = true;\n processed.streamDASHId = streamDashResources[0].id;\n }\n\n return processed;\n };\n\n var recordStat = function() {\n var params = {};\n params['catchup[eq]'] = '1';\n\n var liveMap = {};\n var keys = {};\n\n var getRecords = function(offset) {\n params['$limit'] = 3000;\n params['$offset'] = offset;\n LiveEventResource.get(params).$promise\n .then(function (records) {\n if (records.length > 0) {\n for (var i = 0; i < records.length; i++) {\n if (!liveMap.hasOwnProperty(records[i].live_id)) {\n liveMap[records[i].live_id] = 0;\n }\n var key = records[i].live_id + records[i].end_time + records[i].start_time;\n if (keys.hasOwnProperty(key)) {\n continue\n }\n var played = moment(records[i].end_time).diff(moment(records[i].start_time), 'seconds');\n liveMap[records[i].live_id] += played;\n keys[key] = true;\n }\n\n offset += 3000;\n getRecords(offset);\n } else {\n keys = {};\n angular.forEach($scope.channels, function(ch) {\n if (liveMap.hasOwnProperty(ch.id)) {\n ch.recorded = Math.round(liveMap[ch.id]/3600) || 0;\n } else {\n ch.recorded = 0;\n }\n });\n liveMap = {};\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n LiveEventResource.count(params).$promise\n .then(function (result) {\n var count = result.data;\n if (count === 0) {\n return;\n }\n getRecords(0);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getChannels = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader');\n\n var params = {};\n params['type[in]'] = 'channel';\n params['$expand'] = 'resources(url),epg';\n\n AssetResource.get(params).$promise\n .then(function (assets) {\n var processed = assets.filter(function(asset) {\n if (asset.resources) {\n var catchupResources = asset.resources.filter(function(resource) {\n return resource.category === 'catchup' && resource.state === 'deployed';\n });\n if (catchupResources.length > 0) {\n return true;\n }\n }\n return false;\n });\n $scope.channels = processed.map(function(asset) {\n return processChannel(asset);\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n recordStat();\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getChannels();\n\n $scope.date = {};\n $scope.searchEvent = '';\n $scope.searchFiel = '';\n\n var processLiveEvent = function(liveEvent) {\n var processed = {\n id: liveEvent.id,\n name: liveEvent.name,\n description: liveEvent.description,\n startTime: moment(liveEvent.start_time).format('HH:mm'),\n endTime: moment(liveEvent.end_time).format('HH:mm'),\n pictureURL: '',\n catchup: liveEvent.catchup\n };\n if (liveEvent.thumbnail) {\n processed.pictureURL = liveEvent.thumbnail.url;\n }\n return processed;\n };\n\n $scope.getEvents = function (channel, params) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader' + channel.id);\n\n channel._Events = [];\n\n LiveEventResource.get(params).$promise\n .then(function (liveEvents) {\n channel._Events = liveEvents.map(function(le) {\n return processLiveEvent(le);\n });\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.setActiveChannel = function (channel) {\n if ($scope.currentChannel === channel.id) {\n $scope.currentChannel = -1;\n $location.search('channel_id', null);\n return;\n }\n\n $scope.currentChannel = channel.id;\n $scope.collapseProgramme();\n if (channel.id !== -1) {\n $location.search('channel_id', channel.id);\n } else {\n $location.search('channel_id', null);\n }\n\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamError = '';\n $scope.isHLSSupported = channel.streamHLS;\n $scope.hlsResourceId = channel.streamHLSId;\n\n $scope.getHLSStream = function () {\n if (!$scope.isHLSSupported) return;\n $scope.selectedStreamError = '';\n AssetResource.getStream({ id: channel.id, resourceId: $scope.hlsResourceId }).$promise\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n })\n .catch(function (reason) {\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error;\n }\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getHLSStream();\n\n if ($scope.routeDate) {\n $scope.date.currentDate = moment($scope.routeDate * 1000);\n } else {\n $scope.date.currentDate = moment.utc();\n $location.search('date', $scope.date.currentDate.unix());\n }\n\n var params = {\n 'live.id[eq]': channel.id,\n 'end_time[gt]': $scope.date.currentDate.startOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n 'start_time[lt]': $scope.date.currentDate.endOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n '$expand': 'thumbnail(url)'\n };\n\n if ($scope.watcher) $scope.watcher();\n $scope.watcher = $scope.$watch('date.currentDate', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.search('date', newValue.unix());\n $scope.collapseProgramme();\n var params = {\n 'live.id[eq]': channel.id,\n 'end_time[gt]': moment(newValue).startOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n 'start_time[lt]': moment(newValue).endOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n '$expand': 'thumbnail(url)'\n };\n $scope.getEvents(channel, params);\n }\n });\n $scope.getEvents(channel, params);\n };\n\n $scope.isActiveChannel = function (channel) {\n return channel.id === $scope.currentChannel;\n };\n\n $scope.isActiveEvent = function (event) {\n return $scope.currentProgramm && event.id === $scope.currentProgramm.id;\n };\n\n\n $scope.expandProgramme = function (channel, event) {\n if ($scope.currentProgramm.id === event.id) return;\n\n $scope.currentProgramm = event;\n $scope.currentProgramm.hlsStream = '';\n $scope.currentProgramm.hlsStreamEsc = '';\n $scope.currentProgramm.hlsStreamErr = '';\n $scope.currentProgramm.dashStream = '';\n $scope.currentProgramm.dashStreamErr = '';\n\n if (!event.catchup) {\n return;\n }\n $rootScope.showLinearProgress('#catchupLoader' + channel.id);\n\n $scope.license = $location.protocol() + '://'+ $location.host() + '/discovery:80/sdp/v2/assets/'+channel.id+'/wv-license?auth_token='+lh.common.config.get('authToken');\n\n $scope.getCatchupHLSStream = function () {\n $scope.currentProgramm.hlsStreamErr = '';\n LiveEventResource.getHLSStream({ id: event.id }).$promise\n .then(function (response) {\n $scope.currentProgramm.hlsStream = response.data;\n $scope.currentProgramm.hlsStreamEsc = escape(response.data);\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n })\n .catch(function (reason) {\n $scope.currentProgramm.hlsStream = '';\n $scope.currentProgramm.hlsStreamEsc = '';\n if (reason.data.error) {\n $scope.currentProgramm.hlsStreamErr = reason.data.error;\n }\n $rootScope.debugInfo(reason, 'silent');\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n })\n };\n\n $scope.getCatchupDashStream = function () {\n $scope.currentProgramm.dashStreamErr = '';\n LiveEventResource.getDashStream({ id: event.id }).$promise\n .then(function (response) {\n $scope.currentProgramm.dashStream = response.data;\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n })\n .catch(function (reason) {\n $scope.currentProgramm.dashStream = '';\n if (reason.data.error) {\n $scope.currentProgramm.dashStreamErr = reason.data.error;\n }\n $rootScope.debugInfo(reason, 'silent');\n $rootScope.hideLinearProgress('#catchupLoader' + channel.id);\n })\n };\n\n $scope.getCatchupHLSStream();\n $scope.getCatchupDashStream();\n };\n\n $scope.collapseProgramme = function () {\n $scope.currentProgramm = {};\n };\n\n $scope.routeChannelId = null;\n if ($routeParams.channel_id) {\n $scope.routeChannelId = Number($routeParams.channel_id);\n }\n\n $scope.routeDate = null;\n if ($routeParams.date) {\n $scope.routeDate = Number($routeParams.date);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeChannelId && !$routeParams.channel_id) {\n $scope.currentChannel = -1;\n $location.search('date', null);\n }\n $scope.routeChannelId = Number($routeParams.channel_id) || null;\n\n $scope.routeDate = Number($routeParams.date) || null;\n });\n\n $scope.$on('destroy', function () {\n if ($scope.watcher) $scope.watcher();\n })\n }]);\n","lmApp\n .service('DrmService', ['$rootScope',\n function ($rootScope) {\n var service = {};\n\n service.GetVerimatrix = function () {\n var data = window.localStorage['verimatrix'];\n if (!data || data === 'undefined') {\n data = {\n serverAddress: '72.62.179.10',\n port: 12684,\n keyReqTimeout: 10,\n httpApiPass: '****',\n httpApiConfirm: '****',\n enableRandKey: true,\n enableRandResourceId: true,\n nodes: [\n {\n sourceDesc: 'VCAS Private',\n liveResourceIdRange: [1000, 2000],\n vodResourceIdRange: [2001, 30000]\n }\n ]\n };\n } else {\n data = JSON.parse(data);\n }\n\n return data;\n };\n\n service.SaveVerimatrix = function (data) {\n window.localStorage['verimatrix'] = JSON.stringify(data);\n };\n\n service.GetGoogleDrm = function () {\n var data = window.localStorage['googleDrm'];\n if (!data || data === 'undefined') {\n data = {\n provider: '',\n owner: '',\n licenseKey: ['', '']\n };\n } else {\n data = JSON.parse(data);\n }\n\n return data;\n };\n\n service.SaveGoogleDrm = function (data) {\n window.localStorage['googleDrm'] = JSON.stringify(data);\n };\n\n service.GetNagra = function () {\n var data = window.localStorage['nagra'];\n if (!data || data === 'undefined') {\n data = {\n prmServerURL: '',\n };\n } else {\n data = JSON.parse(data);\n }\n\n return data;\n };\n\n service.SaveNagra = function (data) {\n window.localStorage['nagra'] = JSON.stringify(data);\n };\n\n return service;\n }\n ]);","lmApp\n .controller('GoogleDrmController', ['$scope', '$rootScope', '$timeout', 'DrmService', 'ToastService', 'ValidatorService',\n function ($scope, $rootScope, $timeout, DrmService, ToastService, ValidatorService) {\n $scope.loading = false;\n $scope.googleDrmData = {};\n $scope.validateErrors = {};\n $scope.selectedNode = {};\n\n var _validate = function (data) {\n var error = {\n licenseKey: []\n };\n\n if (!data.licenseKey[0]) error.licenseKey[0] = true;\n if (!data.licenseKey[1]) error.licenseKey[1] = true;\n if (!data.provider) error.provider = true;\n if (!data.owner) error.owner = true;\n\n $scope.validateErrors = error;\n return error;\n };\n\n $scope.getGoogleDrm = function () {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#googleDrmLoader');\n $timeout(function () {\n $scope.googleDrmData = DrmService.GetVerimatrix();\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#googleDrmLoader');\n }, 1000);\n };\n\n $scope.saveGoogleDrmSettings = function () {\n if ($scope.loading) return;\n\n if (!_.isEmpty(_validate($scope.googleDrmData))) return;\n\n DrmService.SaveVerimatrix($scope.googleDrmData);\n ToastService.Small({\n title: 'Verimatrix settings successfully saved',\n color: 'green',\n icon: 'security-network',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.getGoogleDrm();\n }\n ]);","lmApp\n .controller('NagraDrmController', ['$scope', '$rootScope', '$timeout', 'DrmService', 'ToastService', 'ValidatorService',\n function ($scope, $rootScope, $timeout, DrmService, ToastService, ValidatorService) {\n $scope.loading = false;\n $scope.NagraDrmData = {};\n $scope.validateErrors = {};\n $scope.selectedNode = {};\n\n var _validate = function (data) {\n var error = {};\n\n if (!data.prmServerURL) error.prmServerURL = true;\n\n $scope.validateErrors = error;\n return error;\n };\n\n $scope.getNagra = function () {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#googleDrmLoader');\n $timeout(function () {\n $scope.NagraDrmData = DrmService.GetNagra();\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#googleDrmLoader');\n }, 1000);\n };\n\n $scope.saveGoogleDrmSettings = function () {\n if ($scope.loading) return;\n\n if (!_.isEmpty(_validate($scope.NagraDrmData))) return;\n\n DrmService.SaveNagra($scope.NagraDrmData);\n ToastService.Small({\n title: 'Verimatrix settings successfully saved',\n color: 'green',\n icon: 'security-network',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.getNagra();\n }\n ]);","lmApp\n .controller('VerimatrixController', ['$scope', '$rootScope', '$timeout', 'DrmService', 'ToastService', 'ValidatorService',\n function ($scope, $rootScope, $timeout, DrmService, ToastService, ValidatorService) {\n $scope.loading = false;\n $scope.verimatrixData = {};\n $scope.verimatrixMessages = [];\n $scope.validateErrors = {};\n $scope.selectedNode = {};\n\n var _validate = function (data) {\n var error = {};\n\n if (!data.serverAddress) error.serverAddress = true;\n if (!data.port || !ValidatorService.Numerical(data.port)) error.port = true;\n if (!data.keyReqTimeout || !ValidatorService.Numerical(data.keyReqTimeout)) error.keyReqTimeout = true;\n if (!data.httpApiPass) error.httpApiPass = true;\n if (data.httpApiPass !== data.httpApiConfirm) error.httpApiConfirm = true;\n\n $scope.validateErrors = error;\n return error;\n };\n\n $scope.getVerimatrixData = function () {\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#verimatrixDrmLoader');\n $timeout(function () {\n $scope.verimatrixData = DrmService.GetVerimatrix();\n\n if ($scope.verimatrixData.nodes.length) $scope.selectedNode = $scope.verimatrixData.nodes[0];\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#verimatrixDrmLoader');\n }, 1000);\n };\n\n $scope.saveVerimatrixSettings = function () {\n if ($scope.loading) return;\n\n if (!_.isEmpty(_validate($scope.verimatrixData))) return;\n\n DrmService.SaveVerimatrix($scope.verimatrixData);\n ToastService.Small({\n title: 'Verimatrix settings successfully saved',\n color: 'green',\n icon: 'security-network',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.addNode = function () {\n if ($scope.loading) return;\n\n ToastService.Small({\n title: 'No new nodes found. Check VCAS OMI config first',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.removeNode = function () {\n if ($scope.loading) return;\n\n ToastService.Small({\n title: 'Cant remove. Check VCAS OMI config first',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n };\n\n $scope.isNodeSelected = function () {\n return !_.isEmpty($scope.selectedNode);\n };\n\n $scope.selectNode = function (index) {\n $scope.selectedNode = $scope.verimatrixData.nodes[index];\n };\n\n $scope.verimatrixMessages = [\n ['0x0000', 'DVB reserved'],\n ['0x0001', 'Channel set-up'],\n ['0x0002', 'Channeljest'],\n ['0x0003', 'Channel_status'],\n ['0x0004', 'Channel_close'],\n ['0x0005', 'Channel error'],\n ['0x0006', 'DVB reserved'],\n ['0x0011', 'Channel set-up'],\n ['0x0012', 'Channel test'],\n ['0x0013', 'Channel_status'],\n ['0x0014', 'Channel close'],\n ['0x0015', 'Channel_error'],\n ['0x0016', 'DVB reserved'],\n ['0x0101', 'Stream set-up'],\n ['0x0102', 'Stream test'],\n ['0x0103', 'Stream status'],\n ['0x0104', 'Stream_close_request'],\n ['0x0105', 'Stream_close_response'],\n ['0x0106', 'Stream_error'],\n ['0x107 ', 'DVB reserved'],\n ['0x0111', 'Stream_set-up'],\n ['0x0112', 'Stream test'],\n ['0x0113', 'Stream status'],\n ['0x0114', 'Stream_close_request'],\n ['0x0115', 'Stream_close_response'],\n ['0x0116', 'Stream_error'],\n ['0x0117', 'Stream BW request'],\n ['0x0118', 'Stream BW allocation'],\n ['0x0119', 'DVB reserved\tDVB reserved'],\n ['0x0201', 'CW provision'],\n ['0x0202', 'ECM response'],\n ['0x0203', 'DVB reserved\tDVB reserved'],\n ['0x0211', 'data_provision'],\n ['0x0212', 'DVB reserved\tDVB reserved'],\n ['0x0221', 'DVB reserved\tDVB reserved'],\n ['0x8000', 'User defined\tUser defined']\n ];\n\n $scope.getVerimatrixData();\n }\n ]);","lmApp.controller('FavoritesController', ['$routeParams', '$location', '$q', '$scope', '$rootScope', '$filter', 'ToastService', 'SubscriberResource', 'FavouritesResource', 'AssetResource', 'ModalWindowService',\n function ($routeParams, $location, $q, $scope, $rootScope, $filter, ToastService, SubscriberResource, FavouritesResource, AssetResource, ModalWindowService) {\n $scope.loading = false;\n\n $scope.favourites = [];\n $scope.offset = 0;\n $scope.limit = 20;\n $scope.searchField = '';\n var collection = [];\n\n $scope.topFavourites = [];\n $scope.resultCount = -1;\n $scope.topOffset = 0;\n $scope.topLimit = 16;\n $scope.topType = '';\n var topCollection = [];\n\n var subscriberMap = {};\n var assetMap = {};\n\n var getSubscribers = function (ids) {\n var total = ids.length;\n var start = 0;\n var limit = 1000;\n var end = limit;\n var deferred = $q.defer();\n if (total === 0) {\n deferred.resolve();\n return deferred.promise;\n }\n\n var reqList = [];\n while (start < total) {\n var idPart = ids.slice(start, end);\n if (idPart.length === 0) break;\n reqList.push(SubscriberResource.get({'id[in]': idPart.join(',')}).$promise);\n start += end;\n end += limit;\n }\n\n $q.all(reqList)\n .then(function (values) {\n for (var i = 0; i < values.length; i++) {\n var subscribers = (values[i].data || []);\n subscribers.forEach(function (user) {\n subscriberMap[user.id] = user;\n })\n }\n deferred.resolve();\n })\n .catch(function (reason) {\n deferred.resolve();\n $rootScope.debugInfo(reason, 'silent');\n });\n return deferred.promise;\n };\n\n var getAssets = function (ids) {\n var total = ids.length;\n var start = 0;\n var limit = 1000;\n var end = limit;\n var deferred = $q.defer();\n if (total === 0) {\n deferred.resolve();\n return deferred.promise;\n }\n\n var reqList = [];\n while (start < total) {\n var idPart = ids.slice(start, end);\n reqList.push(AssetResource.get({\n 'id[in]': idPart.join(','),\n '$expand': 'categories'\n }).$promise);\n start += end;\n end += limit;\n }\n\n $q.all(reqList)\n .then(function (values) {\n for (var i = 0; i < values.length; i++) {\n var assets = values[i];\n assets.forEach(function (asset) {\n assetMap[asset.id] = asset;\n })\n }\n deferred.resolve();\n })\n .catch(function (reason) {\n deferred.resolve();\n $rootScope.debugInfo(reason, 'silent');\n });\n return deferred.promise;\n };\n\n $scope.getFavourites = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#favouriteLoader');\n\n FavouritesResource.get().$promise\n .then(function (result) {\n var records = (result.collection || []);\n var subscriberIds = [];\n var assetIds = [];\n var assetCount = {};\n records.forEach(function (record) {\n if (!subscriberMap.hasOwnProperty(record.subscriber_id)) {\n subscriberMap[record.subscriber_id] = {};\n subscriberIds.push(record.subscriber_id);\n }\n if (!assetMap.hasOwnProperty(record.asset_id)) {\n assetMap[record.asset_id] = {};\n assetIds.push(record.asset_id);\n }\n if (!assetCount.hasOwnProperty(record.asset_id)) {\n assetCount[record.asset_id] = {count: 0};\n }\n assetCount[record.asset_id].count++;\n });\n\n getSubscribers(subscriberIds)\n .then(function () {\n getAssets(assetIds)\n .then(function () {\n var result = [];\n for (var i = records.length - 1; i >= 0; i--) {\n var record = records[i];\n if (subscriberMap.hasOwnProperty(record.subscriber_id)\n && subscriberMap[record.subscriber_id].username\n && assetMap.hasOwnProperty(record.asset_id)\n && assetMap[record.asset_id].name) {\n result.push({\n username: subscriberMap[record.subscriber_id].username,\n assetId: assetMap[record.asset_id].id,\n assetName: assetMap[record.asset_id].name,\n assetType: assetMap[record.asset_id].type,\n status: assetMap[record.asset_id].status,\n categories: assetMap[record.asset_id].categories\n })\n }\n }\n $scope.favourites = result;\n $scope.resultCount = result.length;\n collection = angular.copy($scope.favourites);\n\n var topResult = [];\n for (var assetId in assetCount) {\n if (assetMap.hasOwnProperty(assetId) && assetMap[assetId].name) {\n topResult.push({\n count: assetCount[assetId].count,\n assetName: assetMap[assetId].name,\n assetType: assetMap[assetId].type\n })\n }\n }\n $scope.topFavourites = _.sortBy(topResult, 'count').reverse();\n topCollection = angular.copy($scope.topFavourites);\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#favouriteLoader');\n });\n });\n }\n )\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#favouriteLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n };\n\n $scope.nextPage = function () {\n if ($scope.offset + $scope.limit < $scope.favourites.length) {\n $scope.offset = $scope.offset + $scope.limit;\n }\n };\n\n $scope.prevPage = function () {\n $scope.offset = Math.max($scope.offset - $scope.limit, 0);\n };\n\n $scope.nextTopPage = function () {\n if ($scope.topOffset + $scope.topLimit < $scope.topFavourites.length) {\n $scope.topOffset = $scope.topOffset + $scope.topLimit;\n }\n };\n\n $scope.prevTopPage = function () {\n $scope.topOffset = Math.max($scope.topOffset - $scope.topLimit, 0);\n };\n\n $scope.filterTop = function () {\n $scope.topOffset = 0;\n var showChannels = $scope.topType === 'channel';\n $scope.topFavourites = $filter('filter')(topCollection, function (topFavourite) {\n if (showChannels) {\n return topFavourite.assetType === 'channel';\n }\n return topFavourite.assetType !== 'channel';\n }, true)\n };\n\n $scope.refreshPage = function () {\n if ($scope.loading) {\n return\n }\n $scope.offset = 0;\n $scope.topOffset = 0;\n $scope.topType = '';\n $scope.searchField = '';\n $scope.getFavourites();\n };\n\n $scope.getFavourites();\n\n $scope.setSearchField = function (text) {\n $scope.searchField = text;\n };\n\n var searchWatcher = $scope.$watch('searchField', function (newVal) {\n $scope.offset = 0;\n $scope.favourites = $filter('filter')(collection, newVal);\n if (!newVal) {\n $scope.favourites = collection;\n }\n });\n\n $scope.$on('$destroy', function () {\n if (searchWatcher) searchWatcher();\n });\n }])\n;\n","lmApp\n .filter('eventCorrectionFilter', function () {\n return function (items, criterion) {\n var tmp = {};\n for (var i in items) {\n var item = items[i];\n if (item.title.toLowerCase().indexOf(criterion.keyword.toLowerCase()) !== -1) {\n if (criterion.filter) {\n if (item._PrivateData.catchup2.correction._status\n && item._PrivateData.catchup2.correction._status.indexOf(criterion.filter) !== -1\n && item.is_catchup_available) {\n tmp[i] = item;\n }\n } else {\n tmp[i] = item;\n }\n }\n }\n return tmp;\n }\n });\n\nlmApp\n .controller('Catchup20Controller', ['$scope', '$rootScope', '$timeout', '$interval', '$q', '$routeParams', '$location', 'AssetService', 'MetadataService', 'EpgService', 'CatchupService', 'ToastService',\n function ($scope, $rootScope, $timeout, $interval, $q, $routeParams, $location, AssetService, MetadataService, EpgService, CatchupService, ToastService) {\n $scope.loading = false;\n $scope.loadingFrame = false;\n $scope.catchupData = [];\n $scope.playerData = {};\n $scope.intervalForPreview = null;\n $scope.intervalForPreviewInAction = false;\n $scope._CSS = {\n frame: {}\n };\n\n $scope.activeChannel = {};\n $scope.search = {\n searchField: '',\n isShown: false,\n filter: ''\n };\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n var parseCorrectionStatus = function (correction) {\n correction._date = moment(correction.update_time * 1000).format('D MMM YYYY - H:mm');\n\n switch (correction.state) {\n case 'success':\n correction._status = correction.state.toUpperCase();\n correction._color = 'green';\n break;\n\n case 'error':\n correction._status = 'ERROR: ' + (correction.error || '');\n correction._color = 'red';\n break;\n\n case 'processing':\n correction._status = 'IN PROGRESS';\n correction._color = 'amber';\n break;\n\n case 'pending':\n correction._status = correction.state.toUpperCase();\n correction._color = 'amber';\n break;\n\n default:\n correction._status = correction.state.toUpperCase();\n correction._color = 'black';\n break;\n }\n };\n\n var parseCorrectionProcess = function (correction, event) {\n if (!event) return {};\n\n correction.noCorrection = !event.corrections;\n correction.successCorrection = !!_.find(event.corrections, {state: 'success'});\n correction.processingCorrection = !!_.find(event.corrections, {state: 'processing'});\n correction.pendingCorrection = !!_.find(event.corrections, {state: 'pending'});\n correction.pendingCorrection = !!_.find(event.corrections, {state: 'pending'});\n correction.errorCorrection = event.corrections && event.corrections.length && event.corrections[event.corrections.length - 1].state === 'error';\n\n correction.correctionTime = correction.successCorrection ? _.findLast(event.corrections, {state: 'success'}).correction : 0;\n\n switch (true) {\n case (correction.noCorrection):\n correction._status = 'No correction';\n correction._class = 'tc-grey-600 bgc-grey-100';\n break;\n\n case (correction.errorCorrection):\n correction._status = 'Error: ' + (_.findLast(event.corrections, {state: 'error'}).error || '');\n correction._class = 'tc-red-700 bgc-red-50';\n break;\n\n case (correction.processingCorrection):\n correction._status = 'Correction in Progress';\n correction._class = 'tc-amber-700 bgc-amber-50';\n break;\n\n case (correction.successCorrection):\n correction._status = 'Correction Done';\n correction._class = 'tc-green-700 bgc-green-50';\n break;\n\n case (correction.pendingCorrection):\n correction._status = 'Correction Pending';\n correction._class = 'tc-lm-600 bgc-lm-100';\n break;\n\n default:\n correction._status = 'No correction';\n correction._class = 'tc-grey-600 bgc-grey-100';\n break;\n }\n\n return correction;\n };\n\n $scope._checkPreviewInterval = function (event) {\n if ($scope.intervalForPreview) $interval.cancel($scope.intervalForPreview);\n\n $scope.intervalForPreview = $interval(function () {\n if ($scope.intervalForPreviewInAction) return;\n\n $scope.intervalForPreviewInAction = true;\n\n CatchupService.GetCatchup2Preview(event)\n .then(function (result) {\n $scope.intervalForPreviewInAction = false;\n event._PrivateData.catchup2.preview = result.event.preview;\n\n if (result.event.preview && result.event.preview.state === 'prepared') {\n event._PrivateData.catchup2.preview._media = CatchupService.GetCatchup2PreviewMedia(event, result.event.preview);\n\n $interval.cancel($scope.intervalForPreview);\n $scope.intervalForPreview = null;\n }\n })\n .catch(function (reason) {\n $scope.intervalForPreviewInAction = false;\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 15);\n $rootScope.debugInfo(reason, 'silent');\n });\n }, 1000);\n };\n\n $scope._checkCorrectionInterval = function (event) {\n if ($scope.intervalForCorrection) $interval.cancel($scope.intervalForCorrection);\n\n var needNewPreview = false;\n\n $scope.intervalForCorrection = $interval(function () {\n if ($scope.intervalForCorrectionInAction) return;\n\n $scope.intervalForCorrectionInAction = true;\n event._PrivateData.catchup2.correction = {};\n\n CatchupService.GetCatchup2Events([event.id])\n .then(function (collection) {\n event._PrivateData.catchup2.correction = parseCorrectionProcess(event._PrivateData.catchup2.correction, collection[0]);\n event._PrivateData.catchup2.correction.list = (collection[0] && collection[0].corrections) || [];\n event._PrivateData.catchup2.correction.list.forEach(parseCorrectionStatus);\n\n if (event._PrivateData.catchup2.correction.successCorrection && needNewPreview && !event._PrivateData.catchup2.correction.processingCorrection) {\n event._PrivateData.catchup2.correction_time = event._PrivateData.catchup2.correction.correctionTime;\n needNewPreview = false;\n }\n\n if (event._PrivateData.catchup2.correction.processingCorrection) {\n needNewPreview = true;\n }\n\n $scope.intervalForCorrectionInAction = false;\n }).catch(function (reason) {\n $scope.intervalForCorrectionInAction = false;\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 15);\n $rootScope.debugInfo(reason, 'silent');\n });\n }, 15 * 1000);\n };\n\n $scope.getAllCatchupChannels = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader');\n\n AssetService.GetAllAvailableCatchupChannels()\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n\n $scope.catchupData = collection.map(function (asset) {\n asset._deployed = {\n stream: asset.resources.filter(function (resource) {\n if (resource.type === 'stream'\n && resource.stream_type.indexOf('youtube') !== -1) {\n asset._has_youtube = true;\n resource.stream_type = 'youtube';\n }\n\n resource._stream_type = $scope._STREAM_TYPES_ATTRS[resource.stream_type];\n\n return resource.type === 'stream' && resource.stream_type !== 'hls_catchup';\n }),\n poster: _.find(asset.resources, {category: 'poster_blueprint'}) && _.find(asset.resources, {category: 'poster_blueprint'}).is_deployed\n };\n\n asset._rentalStatus = asset.rental_status === \"progress\";\n if (!asset._rentalStatus) {\n asset._rentalWindow = MetadataService.Rental.Check(asset);\n }\n\n asset._catchup = _.find(asset.resources, {\n category: 'catchup',\n type: 'stream',\n stream_type: 'hls_catchup'\n });\n\n asset._npvr = _.find(asset.resources, {\n category: 'npvr',\n type: 'stream',\n stream_type: 'hls_catchup'\n });\n\n return asset;\n });\n\n if ($scope.routeChannelId) {\n var channel = _.find($scope.catchupData, {id: $scope.routeChannelId});\n if (channel) {\n $scope.setActiveChannel(channel);\n }\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 15);\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n $scope.setActiveChannel = function (channel) {\n if ($scope.loading) return;\n\n $location.search('channel_id', channel.id);\n\n $scope.activeChannel = angular.copy(channel);\n $scope.activeChannel._PrivateData = {};\n\n if ($scope.routeDate) {\n $scope.activeChannel._PrivateData.currentDate = moment.utc($scope.routeDate * 1000).startOf('day');\n } else {\n $scope.activeChannel._PrivateData.currentDate = moment.utc().startOf('day');\n $location.search('date', $scope.activeChannel._PrivateData.currentDate.unix());\n }\n\n $scope.activeChannel._PrivateData.currentEpgEvent = {};\n $scope.activeChannel._PrivateData.selectedDay = {\n start: parseInt($scope.activeChannel._PrivateData.currentDate.startOf('day').unix(), 10),\n end: parseInt($scope.activeChannel._PrivateData.currentDate.endOf('day').unix(), 10),\n date: $scope.activeChannel._PrivateData.currentDate.endOf('day').format(\"D, MMMM\")\n };\n\n $scope.getEpgEvents();\n\n if ($scope.dateWatcher) $scope.dateWatcher();\n $scope.dateWatcher = $scope.$watch('activeChannel._PrivateData.currentDate', function (newValue, oldValue) {\n if (!_.isEmpty($scope.activeChannel) && !oldValue.isSame(newValue)) {\n $location.search('date', $scope.activeChannel._PrivateData.currentDate.unix());\n\n $scope.activeChannel._PrivateData.selectedDay = {\n start: parseInt(moment.utc(newValue).startOf('day').format('X'), 10),\n end: parseInt(moment.utc(newValue).endOf('day').format('X'), 10),\n date: moment.utc(newValue).endOf('day').format(\"D, MMMM\")\n };\n $scope.getEpgEvents();\n }\n });\n };\n\n $scope.isActiveChannelSet = function () {\n return !_.isEmpty($scope.activeChannel);\n };\n\n $scope.clearActiveChannel = function () {\n if ($scope.loading) return;\n\n $scope.activeChannel = {};\n $location.search('channel_id', null);\n };\n\n $scope.isActiveChannel = function (id) {\n\n return $scope.activeChannel.id === id;\n };\n\n $scope.collapseProgramme = function () {\n $scope.activeChannel._PrivateData.currentEpgEvent = {};\n\n if ($scope.intervalForCorrection) $interval.cancel($scope.intervalForCorrection);\n $location.search('program_id', null);\n };\n\n $scope.setActiveProgram = function (activeChannel, event) {\n event._PrivateData.catchup2.preview = {};\n event._PrivateData.catchup2.references = {};\n\n if (event.id === activeChannel._PrivateData.currentEpgEvent.id) {\n activeChannel._PrivateData.currentEpgEvent = {};\n $scope.collapseProgramme();\n\n return;\n }\n\n if (event._PrivateData.isLocked) {\n if (moment.utc().unix() < event.end) {\n ToastService.Small({\n title: 'Sorry, you can\\'t correct program in future',\n color: 'amber',\n icon: 'video-switch',\n blocked: true\n }, 1000 * 15);\n } else if (!event.is_catchup_available) {\n ToastService.Small({\n title: 'Sorry, catchup for this programme unavailable',\n color: 'amber',\n icon: 'video-switch',\n blocked: true\n }, 1000 * 15);\n }\n\n return;\n }\n\n activeChannel._PrivateData.currentEpgEvent = event;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader' + event.id);\n\n var allQ = {};\n\n allQ.references = CatchupService.GetCatchup2References(event)\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n allQ.preview = CatchupService.GetCatchup2Preview(event)\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n allQ.correction = CatchupService.GetCatchup2Events([event.id])\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n $q.all(allQ)\n .then(function (q) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n\n event._PrivateData.catchup2.preview = q.preview.event.preview;\n event._PrivateData.catchup2.correction_time = q.preview.event.start_correction;\n\n event._PrivateData.catchup2.references = q.references.program.references\n .map(function (reference) {\n reference._url = CatchupService.GetCatchup2ReferenceImg(event, reference);\n\n return reference;\n });\n\n event._PrivateData.catchup2.correction = parseCorrectionProcess(event._PrivateData.catchup2.correction, q.correction[0]);\n\n event._PrivateData.catchup2.correction.list = (q.correction[0] && q.correction[0].corrections) || [];\n\n event._PrivateData.catchup2.correction.list.forEach(parseCorrectionStatus);\n\n $scope._checkCorrectionInterval(event);\n\n if (q.preview.event.preview && q.preview.event.preview.state === 'prepared') {\n event._PrivateData.catchup2.preview._media = CatchupService.GetCatchup2PreviewMedia(event, q.preview.event.preview);\n } else if (q.preview.event.preview) {\n $scope._checkPreviewInterval(event);\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 15);\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $location.search('program_id', event.id);\n };\n\n $scope.getCatchupMediaStream = function (event) {\n if (event.preview && event.preview.state === 'prepared') {\n return CatchupService.GetCatchup2PreviewMedia(event, event.preview);\n } else {\n return null;\n }\n };\n\n $scope.isActiveProgram = function (activeChannel, event) {\n return !_.isEmpty(activeChannel) && event.id === activeChannel._PrivateData.currentEpgEvent.id\n };\n\n $scope.toggleSearch = function () {\n $scope.search.isShown = !$scope.search.isShown;\n $timeout(function () {\n angular.element('input#channel_search').focus();\n }, 200);\n };\n\n $scope.getEpgEvents = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader');\n\n //moment.utc().subtract(moment().utcOffset(), 'minutes').unix()\n EpgService.GetEpgEvents({id: $scope.activeChannel.epg_channel_id}, $scope.activeChannel._PrivateData.selectedDay)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n\n $scope.activeChannel._PrivateData.events = collection.map(function (event) {\n event._PrivateData = {};\n event._PrivateData.catchup2 = {};\n event._PrivateData.startTime = moment.unix(event.start).format('HH:mm');\n event._PrivateData.endTime = moment.unix(event.end).format('HH:mm');\n event._PrivateData.isLocked = moment.utc().unix() < event.end || !event.is_catchup_available;\n event._PrivateData.isNow = moment.utc().unix() > event.start &&\n moment.utc().unix() < event.end;\n\n return event;\n });\n\n if (collection.length && $scope.routeProgramId) {\n var event = _.find($scope.activeChannel._PrivateData.events, {id: $scope.routeProgramId});\n if (event) {\n $scope.setActiveProgram($scope.activeChannel, event);\n }\n }\n\n if (collection.length) {\n CatchupService.GetCatchup2Events(_.map(collection, 'id'))\n .then(function (collection) {\n $scope.activeChannel._PrivateData.events.forEach(function (event, index) {\n event._PrivateData.catchup2.correction = {};\n\n if (!collection[index]) collection[index] = {};\n if (!collection[index].corrections) collection[index].corrections = [];\n\n event._PrivateData.catchup2.correction = parseCorrectionProcess(event._PrivateData.catchup2.correction, collection[index]);\n event._PrivateData.catchup2.correction.list = collection[index].corrections || [];\n });\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 15);\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.deleteReferenceImg = function (event, reference) {\n if ($scope.loadingFrame) return;\n\n CatchupService.DeleteCatchup2ReferenceImg(event, reference)\n .then(function (result) {\n var index = event._PrivateData.catchup2.references.indexOf(reference);\n\n if (index !== -1) event._PrivateData.catchup2.references.splice(index, 1);\n })\n };\n\n $scope.setFilter = function (filter) {\n if (filter !== $scope.search.filter) {\n $scope.search.filter = filter;\n } else {\n $scope.search.filter = '';\n }\n };\n\n $scope.routeChannelId = null;\n if ($routeParams.channel_id) {\n $scope.routeChannelId = Number($routeParams.channel_id);\n }\n\n $scope.routeDate = null;\n if ($routeParams.date) {\n $scope.routeDate = Number($routeParams.date);\n }\n\n $scope.routeProgramId = null;\n if ($routeParams.program_id) {\n $scope.routeProgramId = Number($routeParams.program_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeChannelId && !$routeParams.channel_id) {\n $scope.clearActiveChannel();\n $location.search('date', null);\n $location.search('program_id', null);\n }\n $scope.routeChannelId = Number($routeParams.channel_id) || null;\n\n $scope.routeDate = Number($routeParams.date) || null;\n\n if ($routeParams.program_id && !$routeParams.program_id) {\n $scope.collapseProgramme();\n }\n\n $scope.routeProgramId = Number($routeParams.program_id) || null;\n });\n\n $scope.getAllCatchupChannels();\n\n $scope.$on('destroy', function () {\n if ($scope.dateWatcher) $scope.dateWatcher();\n })\n }\n ]);\n","lmApp\n .service('CatchupService', ['$rootScope', '$q',\n function ($rootScope, $q) {\n\n var service = {};\n\n service.GetCatchup2References = function (event) {\n var deferred = $q.defer();\n\n var url = 'catchup2/programs/' + event.program_id;\n\n lh.common.request(url)\n .then(function (result) {\n deferred.resolve(result);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.SetCatchup2References = function (event, frame) {\n var deferred = $q.defer();\n\n var url = 'catchup2/programs/' + event.program_id + '/references';\n\n var data = {\n reference_url: frame\n };\n\n lh.common.request.post(url, data)\n .then(function (result) {\n deferred.resolve(result);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetCatchup2Events = function (_ids) {\n var deferred = $q.defer();\n\n var url = 'catchup2/events';\n\n var data = {\n event_id: _ids.join(',')\n };\n\n lh.common.request.get(url, data)\n .then(function (result) {\n deferred.resolve(result.events);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetCatchup2Preview = function (event) {\n var deferred = $q.defer();\n\n var url = 'catchup2/events/' + event.id;\n\n lh.common.request(url)\n .then(function (result) {\n deferred.resolve(result);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateCatchup2Preview = function (event) {\n var deferred = $q.defer();\n\n var url = 'catchup2/events/' + event.id + '/preview';\n\n lh.common.request.post(url)\n .then(function (collection) {\n deferred.resolve(collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.DeleteCatchup2ReferenceImg = function (event, reference) {\n var deferred = $q.defer();\n\n var url = 'catchup2/programs/' + event.program_id + '/references/' + reference.id;\n\n lh.common.request.del(url)\n .then(function (result) {\n deferred.resolve(result);\n }, function (reason) {\n reason.url = url;\n reason.data = 'DELETE';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetCatchup2PreviewMedia = function (event, preview) {\n var url = '/discovery:80/catchup2/events/' + event.id +\n '/preview/' + preview.id +\n '/media?auth_token=' + encodeURIComponent($rootScope.isSuperuser() ? $rootScope.globals.currentUser.operatorToken : $rootScope.globals.currentUser.token);\n\n return url;\n };\n\n service.GetCatchup2ReferenceFromMedia = function (event, preview, position) {\n var url = '/discovery:80/catchup2/events/' + event.id +\n '/preview/' + preview.id +\n '/frame?position=' + position +\n '&auth_token=' + encodeURIComponent($rootScope.isSuperuser() ? $rootScope.globals.currentUser.operatorToken : $rootScope.globals.currentUser.token);\n\n return url;\n };\n\n service.GetCatchup2ReferenceImg = function (event, reference) {\n var url = '/discovery:80/catchup2/programs/' + event.program_id +\n '/references/' + reference.id +\n '/media' +\n '?auth_token=' + encodeURIComponent($rootScope.isSuperuser() ? $rootScope.globals.currentUser.operatorToken : $rootScope.globals.currentUser.token);\n\n return url;\n };\n\n service.GetCatchup2ThumbnailImg = function (event, preview, index) {\n var url = '/discovery:80/catchup2/events/' + event.id +\n '/preview/' + preview.id +\n '/thumbnails?auth_token=' + encodeURIComponent($rootScope.isSuperuser() ? $rootScope.globals.currentUser.operatorToken : $rootScope.globals.currentUser.token);\n //+'&index=' + index;\n return url;\n };\n\n return service;\n }]);\n","lmApp\n .controller('EpgImportController', ['$scope', '$rootScope', '$q', '$timeout', '$routeParams', '$location', '$templateCache', '$compile', 'EpgService', 'ToastService', 'ModalWindowService', 'MetadataService', 'TimezoneService', 'ManagerResource', 'AssetResource', 'ManageEPGChannelsWindow', 'URLService',\n function ($scope, $rootScope, $q, $timeout, $routeParams, $location, $templateCache, $compile, EpgService, ToastService, ModalWindowService, MetadataService, TimezoneService, ManagerResource, AssetResource, ManageEPGChannelsWindow, URLService) {\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, { username: $rootScope.globals.currentUser.username });\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, { title: manager.ui_timezone || 'UTC' });\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n //\n $scope.loading = false;\n $scope.activeSource = {};\n $scope.searchKeyword = '';\n $scope.croneConfig = {\n options: {allowMinute: false, allowHour: false, allowYear: false}\n };\n $scope.epgSourceCollection = [];\n $scope.epgTasksCollection = [];\n $scope.newSource = {\n name: '',\n url: '',\n default_image: ''\n };\n $scope.newImportTask = {\n name: '',\n shown: false,\n _PrivateData: {\n schedule_time: '0 5 * * *',\n source: {},\n channels: [],\n allSources: []\n }\n };\n\n $scope.activeChannel = {};\n $scope.date = {};\n $scope.channelEvents = [];\n $scope.searchEvent = '';\n $scope.scheduleListView = true;\n\n var assetCache = {};\n\n var _parseImportTask = function (task) {\n task._PrivateData = {};\n task.is_active = !!task.is_active;\n task._PrivateData.schedule_time = '';\n for(var i=0; i < task.channels.length; i++) {\n task.channels[i]._lastImportTime = task.channels[i].last_import_time > 0 ? moment.utc(task.channels[i].last_import_time * 1000) : '';\n }\n return task;\n };\n\n $scope.getImportSourceCollection = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourcesLoader');\n\n EpgService.GetEpgSources()\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n $scope.epgSourceCollection = collection.map(function (source) {\n source._PrivateData = {};\n source.url = _.trim(source.url);\n source.name = _.trim(source.name);\n var lastImportTime = '';\n for(var i=0; i < source.channels.length; i++) {\n if (source.channels[i].last_import_time > lastImportTime) {\n lastImportTime = source.channels[i].last_import_time;\n }\n }\n source._lastImportTime = lastImportTime ? moment.utc(lastImportTime * 1000) : '';\n return source;\n });\n\n if ($scope.epgSourceCollection.length && $scope.routeSourceId) {\n var source = _.find($scope.epgSourceCollection, {id: $scope.routeSourceId});\n if (source) {\n $scope.setActiveSource(source);\n }\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.getImportTasksCollection = function (id) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourceLoader' + id);\n\n EpgService.GetEpgImportTasks(id)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + id);\n $scope.epgTasksCollection = collection.map(function (task) {\n task._PrivateData = {};\n task._PrivateData.schedule_time = '';\n return task;\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + id);\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.isActiveSourceSet = function () {\n return !_.isEmpty($scope.activeSource);\n };\n\n $scope.setActiveSource = function (source) {\n $scope.activeSource = source;\n $scope.getImportTaskDetail(source);\n $location.search('source_id', source.id);\n };\n\n $scope.clearActiveSource = function () {\n $scope.activeSource = {};\n $location.search('source_id', null);\n };\n\n $scope.createNewEpgSource = function () {\n if ($scope.loading) return;\n\n var createTpl = $templateCache.get('create-epg-import.html');\n createTpl = $compile(createTpl)($scope);\n\n ModalWindowService.Open({\n content: createTpl,\n actions: [\n {\n title: 'Create',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourcesLoader');\n\n var defPicture = _.trim($scope.newSource.default_image);\n if (defPicture) {\n var url = $scope.newSource.url;\n var urlParts = URLService.parseURL(url);\n urlParts.params.push({name: \"$genericImage\", value: [defPicture]});\n $scope.newSource.url = urlParts.url + '?' + URLService.joinURLParams(urlParts.params);\n }\n\n EpgService.CreateNewEpgSource($scope.newSource)\n .then(function (response) {\n $scope.setActiveSource(response.source);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n $scope.getImportSourceCollection();\n ToastService.Small({\n title: 'Source successfully created',\n color: 'green',\n icon: 'plus-network'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n ToastService.Small({\n title: 'Source creation failed',\n color: 'red',\n icon: 'plus-network'\n });\n $rootScope.debugInfo(reason);\n });\n },\n show_fn: function () {\n return !!$scope.newSource.url;\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ]\n });\n };\n\n $scope.updateEpgSource = function (source) {\n if ($scope.loading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourceLoader' + source.id);\n\n EpgService.CreateNewEpgSource(source)\n .then(function (response) {\n source.channels = angular.copy(response.source.channels);\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n ToastService.Small({\n title: 'Source successfully updated',\n color: 'green',\n icon: 'refresh'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n ToastService.Small({\n title: 'Source update failed',\n color: 'red',\n icon: 'refresh'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.deleteEpgSource = function (source) {\n if ($scope.loading) return;\n\n ModalWindowService.Open({\n content: '

    DELETE EPG SOURCE

    ' +\n '

    This action will delete source permanently with all imported data. Are You sure?

    ',\n actions: [\n {\n title: 'DO IT',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourcesLoader');\n\n EpgService.DeleteEpgImport(source)\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n $scope.getImportSourceCollection();\n $scope.clearActiveSource();\n ToastService.Small({\n title: 'Source successfully deleted',\n color: 'green',\n icon: 'delete'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourcesLoader');\n ToastService.Small({\n title: 'Source delete failed',\n color: 'red',\n icon: 'delete'\n });\n $rootScope.debugInfo(reason);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ]\n });\n };\n\n $scope.getImportTaskDetail = function (source) {\n $rootScope.showLinearProgress('#epgSourceLoader' + source.id);\n $scope.loading = true;\n\n EpgService.GetEpgImportTasks(source.id)\n .then(function (collection) {\n if (collection.length) {\n source._PrivateData.task = _parseImportTask(collection[0]);\n\n var epgIDs = [];\n for (var i = 0; i < source._PrivateData.task.channels.length; i++) {\n epgIDs.push(source._PrivateData.task.channels[i].id);\n }\n if (epgIDs.length > 0) {\n var params = {\n 'type[eq]': 'channel',\n 'epg.id[in]': epgIDs.join(','),\n '$expand': 'epg'\n };\n AssetResource.get(params).$promise\n .then(function (assets) {\n for (var i=0; i < assets.length; i++) {\n if (!assetCache.hasOwnProperty(assets[i].epg.id)) {\n assetCache[assets[i].epg.id] = [];\n }\n var asset = _.find(assetCache[assets[i].epg.id], { id: assets[i].id });\n if (!asset) assetCache[assets[i].epg.id].push(assets[i]);\n }\n for (var i=0; i < source._PrivateData.task.channels.length; i++) {\n source._PrivateData.task.channels[i]._assets = assetCache[source._PrivateData.task.channels[i].id];\n }\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n $scope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n }\n } else {\n source._PrivateData.task = {\n isNew: true,\n name: '',\n _PrivateData: {\n schedule_time: '0 5 * * *'\n },\n schedule_time: '0 5 * * *',\n channels: []\n };\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n $scope.loading = false;\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.createEpgImportTask = function (source) {\n if ($scope.loading) return;\n\n var _ids = [];\n for (var i = 0; i < source._PrivateData.task.channels.length; i++) {\n _ids.push(source._PrivateData.task.channels[i].id);\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourceLoader' + source.id);\n\n EpgService.CreateEpgImportTask(source, source._PrivateData.task, _ids)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n\n $scope.getImportTaskDetail(source);\n\n ToastService.Small({\n title: 'Task successfully created',\n color: 'green',\n icon: 'plus'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n ToastService.Small({\n title: 'Task creation failed',\n color: 'red',\n icon: 'plus'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.updateEpgImportTask = function (source) {\n if ($scope.loading) return;\n\n if (source._PrivateData.task.isNew) {\n return $scope.createEpgImportTask(source);\n }\n\n var _ids = [];\n for (var i = 0; i < source._PrivateData.task.channels.length; i++) {\n _ids.push(source._PrivateData.task.channels[i].id);\n }\n\n if (!_ids.length) {\n ToastService.Small({\n title: 'Choose at least one channel',\n color: 'yellow',\n icon: 'alert'\n });\n return;\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgSourceLoader' + source.id);\n\n EpgService.UpdateEpgImportTask(source, source._PrivateData.task, _ids)\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n ToastService.Small({\n title: 'Task successfully updated',\n color: 'green',\n icon: 'refresh'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgSourceLoader' + source.id);\n ToastService.Small({\n title: 'Task update failed',\n color: 'red',\n icon: 'refresh'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n var manageChannelsFromModal = function (toAdd, toRemove, toThis) {\n var allQ = {};\n var ids = {};\n var channels = [];\n for (var i = 0; i < $scope.activeSource._PrivateData.task.channels.length; i++) {\n ids[$scope.activeSource._PrivateData.task.channels[i].id] = true;\n channels.push($scope.activeSource._PrivateData.task.channels[i]);\n }\n\n if (toAdd.length) {\n for (var i = 0; i < toAdd.length; i++) {\n if (ids.hasOwnProperty(toAdd[i].id)) {\n continue\n }\n channels.push(toAdd[i]);\n }\n }\n if (toRemove.length) {\n for (var i = 0; i < toRemove.length; i++) {\n if (!ids.hasOwnProperty(toRemove[i].id)) {\n continue\n }\n channels = _.filter(channels, function(item) {\n return item.id !== toRemove[i].id\n });\n }\n }\n\n $scope.activeSource._PrivateData.task.channels = angular.copy(channels);\n return allQ;\n };\n\n function openChannelWindow(source) {\n for (var i = 0; i < source.channels.length; i++) {\n source.channels[i]._assets = assetCache[source.channels[i].id];\n }\n ManageEPGChannelsWindow.Open({\n manageChannelsFn: manageChannelsFromModal,\n title: 'the source \"' + (source.name || source.url) + '\"',\n filter: {},\n obj: source,\n collection: source.channels,\n currentCollection: _.map(source._PrivateData.task.channels, 'id')\n });\n }\n\n $scope.openChannelWindow = function (source) {\n var epgIDs = [];\n for (var i = 0; i < source.channels.length; i++) {\n if (assetCache.hasOwnProperty(source.channels[i].id)) {\n continue\n }\n epgIDs.push(source.channels[i].id);\n }\n if (epgIDs.length > 0) {\n var params = {\n 'type[eq]': 'channel',\n 'epg.id[in]': epgIDs.join(','),\n '$expand': 'epg'\n };\n AssetResource.get(params).$promise\n .then(function (assets) {\n for (var i = 0; i < assets.length; i++) {\n if (!assetCache.hasOwnProperty(assets[i].epg.id)) {\n assetCache[assets[i].epg.id] = [];\n }\n var asset = _.find(assetCache[assets[i].epg.id], { id: assets[i].id });\n if (!asset) assetCache[assets[i].epg.id].push(assets[i]);\n }\n openChannelWindow(source);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n } else {\n openChannelWindow(source);\n }\n };\n\n //\n $scope.getChannelEPG = function (source, channel) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgEventsLoader');\n\n var inner = $templateCache.get('epg-channel-schedule.tpl.html');\n inner = $compile(inner)($scope);\n ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {}\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n\n $scope.activeChannel = channel;\n $scope.date.currentDate = moment.utc();\n $scope.date.date = $scope.date.currentDate.endOf('day').format(\"D, MMMM\");\n\n var params = {\n start: parseInt($scope.date.currentDate.startOf('day').unix(), 10),\n end: parseInt($scope.date.currentDate.endOf('day').unix(), 10)\n };\n\n if ($scope.watcher) $scope.watcher();\n $scope.watcher = $scope.$watch('date.currentDate', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n params = {\n start: parseInt(moment.utc(newValue).startOf('day').format('X'), 10),\n end: parseInt(moment.utc(newValue).endOf('day').format('X'), 10)\n };\n $scope.date.date = moment.utc(newValue).endOf('day').format(\"D, MMMM\");\n $scope.getEvents(source, channel, params);\n }\n });\n $scope.getEvents(source, channel, params);\n };\n\n $scope.getEvents = function (source, channel, params) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgEventsLoader');\n\n $scope.channelEvents = [];\n\n EpgService.GetEpgEvents(channel, params)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgEventsLoader');\n $scope.channelEvents = collection.map(function (event) {\n event._PrivateData = {};\n event._start = moment.utc(event.start * 1000);\n event._end = moment.utc(event.end * 1000);\n return event;\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgEventsLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.changeView = function(v) {\n $scope.scheduleListView = v;\n };\n\n $scope.routeSourceId = null;\n if ($routeParams.source_id) {\n $scope.routeSourceId = Number($routeParams.source_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeSourceId && !$routeParams.source_id) {\n $scope.clearActiveSource();\n }\n $scope.routeSourceId = Number($routeParams.source_id) || null;\n });\n\n $scope.getImportSourceCollection();\n\n $scope.$on('destroy', function () {\n if ($scope.watcher) $scope.watcher();\n })\n }]);\n","lmApp\n .controller('EpgController', ['$scope', '$rootScope', '$q', '$timeout', '$routeParams', '$location', 'EpgService', 'AssetService',\n function ($scope, $rootScope, $q, $timeout, $routeParams, $location, EpgService, AssetService) {\n\n $scope.loading = false;\n $scope.currentEpg = -1;\n $scope.date = {};\n $scope.searchEvent = '';\n $scope.searchFiel = '';\n\n $scope.collectionData = {\n empty: false\n };\n\n $scope.collection = [];\n\n $scope.getEpgCollection = function () {\n if ($scope.loading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgLoader');\n\n AssetService.GetEpgIDCollection()\n .then(function (collection) {\n $scope.collectionData.empty = !collection.length;\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgLoader');\n $scope.collection = collection.map(function (epg) {\n epg._PrivateData = {};\n epg._PrivateData.offset = 0;\n epg._PrivateData.limit = 10;\n epg._PrivateData.lastImport = epg.last_import_time > 0 ? moment.utc(epg.last_import_time * 1000).format('lll') : '';\n return epg;\n });\n\n if ($scope.routeChannelId) {\n var channel = _.find($scope.collection, {id: $scope.routeChannelId});\n if (channel) {\n $scope.setActiveChannel(channel);\n }\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getEvents = function (epg) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#epgLoader' + epg.id);\n\n epg._day._Events = [];\n\n EpgService.GetEpgEvents(epg, epg._day)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgLoader' + epg.id);\n epg._day._Events = collection.map(function (event) {\n event._PrivateData = {};\n event._PrivateData.startTime = moment.unix(event.start).format('HH:mm');\n event._PrivateData.endTime = moment.unix(event.end).format('HH:mm');\n\n return event;\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#epgLoader' + epg.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.setActiveChannel = function (epg) {\n\n if ($scope.currentEpg !== epg.id) {\n $scope.currentEpg = epg.id;\n $scope.collapseProgramme();\n if (epg.id !== -1) {\n $location.search('channel_id', epg.id);\n } else {\n $location.search('channel_id', null);\n }\n } else {\n $scope.currentEpg = -1;\n $location.search('channel_id', null);\n return;\n }\n\n if ($scope.routeDate) {\n $scope.date.currentDate = moment($scope.routeDate * 1000);\n } else {\n $scope.date.currentDate = moment.utc();\n $location.search('date', $scope.date.currentDate.unix());\n }\n\n epg._day = {\n start: parseInt($scope.date.currentDate.startOf('day').unix(), 10),\n end: parseInt($scope.date.currentDate.endOf('day').unix(), 10),\n date: $scope.date.currentDate.endOf('day').format(\"D, MMMM\")\n };\n\n if ($scope.watcher) $scope.watcher();\n $scope.watcher = $scope.$watch('date.currentDate', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $location.search('date', newValue.unix());\n $scope.collapseProgramme();\n epg._day = {\n start: parseInt(moment.utc(newValue).startOf('day').format('X'), 10),\n end: parseInt(moment.utc(newValue).endOf('day').format('X'), 10),\n date: moment.utc(newValue).endOf('day').format(\"D, MMMM\")\n };\n\n $scope.getEvents(epg);\n }\n });\n\n $scope.getEvents(epg);\n };\n\n $scope.isActiveChannel = function (epg) {\n return epg.id === $scope.currentEpg;\n };\n\n $scope.isActiveEvent = function (event) {\n return $scope.currentProgramm && event.id === $scope.currentProgramm.id;\n };\n\n $scope.expandProgramme = function (event) {\n $scope.currentProgramm = event;\n\n EpgService.GetPoster($scope.currentProgramm.program)\n .then(function (response) {\n $scope.currentProgramm._PrivateData.picture = response;\n });\n };\n\n $scope.collapseProgramme = function () {\n $scope.currentProgramm = {};\n };\n\n $scope.routeChannelId = null;\n if ($routeParams.channel_id) {\n $scope.routeChannelId = Number($routeParams.channel_id);\n }\n\n $scope.routeDate = null;\n if ($routeParams.date) {\n $scope.routeDate = Number($routeParams.date);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeChannelId && !$routeParams.channel_id) {\n $scope.currentEpg = -1;\n $location.search('date', null);\n }\n $scope.routeChannelId = Number($routeParams.channel_id) || null;\n\n $scope.routeDate = Number($routeParams.date) || null;\n });\n\n $scope.getEpgCollection();\n\n $scope.$on('destroy', function () {\n if ($scope.watcher) $scope.watcher();\n })\n }]);\n","lmApp\n .service('EpgService', ['$rootScope', '$q',\n function ($rootScope, $q) {\n\n var service = {};\n\n service.GetEpgEvents = function (epg, day) {\n var deferred = $q.defer();\n\n var data = {\n channelIds: [epg.id],\n startTime: day.start,\n duration: day.end - day.start\n };\n\n lh.epg.getEvents(data)\n .then(function (collection) {\n deferred.resolve(collection);\n }, function (reason) {\n reason.url = 'lh.epg.getEvents';\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetPoster = function (event) {\n var deferred = $q.defer();\n\n lh.models.epgEvent.methods.getPosterUrl(event)\n .then(function (url) {\n deferred.resolve(url);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetEpgSources = function () {\n var deferred = $q.defer();\n\n var url = 'collection/epg.source/query';\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetEpgImportTasks = function (id) {\n var deferred = $q.defer();\n\n var url = 'collection/epg.import/query';\n\n if (id) url += '/dimension/source_id/eq/' + id;\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CreateNewEpgSource = function (source) {\n var deferred = $q.defer();\n\n var url = 'epg/import/source/create';\n\n var data = {\n url: source.url\n };\n\n if (source.name) data.name = source.name;\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CreateEpgImportTask = function (source, task, channels) {\n var deferred = $q.defer();\n\n var url = 'epg/import/schedule';\n\n var data = {\n source_id: source.id,\n epg_channel_ids: channels.join(','),\n schedule_time: task._PrivateData.schedule_time,\n force_now: 1\n };\n\n if (task.name) data.name = task.name;\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UpdateEpgImportTask = function (source, task, channels) {\n var deferred = $q.defer();\n\n var url = 'epg/import/schedule/update';\n\n var data = {\n schedule_id: task.id,\n source_id: source.id,\n epg_channel_ids: channels.join(','),\n schedule_time: task._PrivateData.schedule_time,\n is_active: +task.is_active,\n force_now: 1\n };\n\n if (task.name) data.name = task.name;\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.DeleteEpgImport = function (source) {\n var deferred = $q.defer();\n\n var url = 'epg/import/source/remove';\n\n var data = {\n source_id: source.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.controller('GeoIPRulesController', ['$routeParams', '$location', '$q', '$scope', '$interval', '$rootScope', '$templateCache', '$compile', '$filter', 'ModalWindowService', 'ValidatorService', 'ToastService', 'GeoIPRules', 'GroupResource', 'ManagerResource', 'TimezoneService', 'CountriesService',\n function ($routeParams, $location, $q, $scope, $interval, $rootScope, $templateCache, $compile, $filter, ModalWindowService, ValidatorService, ToastService, GeoIPRules, GroupResource, ManagerResource, TimezoneService, CountriesService) {\n $scope.loading = false;\n $scope.rules = [];\n $scope.orderBy = 'priority';\n\n $scope.newRule = {};\n $scope.newRuleValidateErrors = {};\n\n var _newRule = {\n name: '',\n policy: 'allow',\n type: 'all',\n subnet: '',\n singleIP: '',\n country: {}\n };\n $scope.countries = _.sortBy(angular.copy(CountriesService.Countries), 'title');\n var groupCache = {}; // key: group ID, value: group name\n\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n //\n function processRules(rules) {\n for (var i=0; i < rules.length; i++) {\n if (rules[i].subject_type === 'country' ) {\n rules[i]._country = _.find($scope.countries, {code: rules[i].subject}) || {};\n }\n if (rules[i].subject_type === 'group' ) {\n rules[i]._group = groupCache[rules[i].subject];\n }\n rules[i]._description = ruleDescription(rules[i]);\n }\n $scope.rules = _.sortBy(rules, 'priority');\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n\n $scope.getRules = function() {\n $scope.loading = true;\n $rootScope.showLinearProgress('#geoIPRulesLoader');\n\n return GeoIPRules.get().$promise\n .then(function (rules) {\n if (rules.length === 0) {\n $scope.rules = [];\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n return;\n }\n var groupIDs = [];\n for (var i = 0; i < rules.length; i++) {\n if (rules[i].subject_type === 'group' && !groupCache.hasOwnProperty(rules[i].subject)) {\n groupIDs.push(rules[i].subject);\n }\n }\n if (groupIDs.length > 0) {\n GroupResource.get({'id[in]': groupIDs.join(',')}).$promise\n .then(function (groups) {\n for (var i = 0; i < groups.length; i++) {\n groupCache[groups[i].id] = groups[i].name || groups[i].ext_id;\n }\n processRules(rules);\n })\n .catch(function (reason) {\n processRules(rules);\n $rootScope.debugInfo(reason);\n });\n } else {\n processRules(rules);\n return;\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.changeOrder = function (field) {\n $scope.orderBy = $scope.orderBy.startsWith('-') ? 'priority' : '-priority';\n };\n\n $scope.createNewRule = function() {\n if ($scope.loading) return;\n $rootScope.showLinearProgress('#geoIPRulesLoader');\n $scope.newRule = angular.copy(_newRule);\n $scope.newRuleValidateErrors = {};\n $scope.newRuleList = angular.copy($scope.rules);\n\n var inner = $templateCache.get('new-geoip-rule.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Create',\n color: 'green',\n check: function () {\n return isNewRuleValid();\n },\n fn: function () {\n $scope.saveNewRule();\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n function isNewRuleValid() {\n var valid = true;\n $scope.newRuleValidateErrors = {};\n if (!_.trim($scope.newRule.name)) {\n $scope.newRuleValidateErrors.name = true;\n valid = false;\n }\n if ($scope.newRule.type === 'network') {\n if (!_.trim($scope.newRule.subnet)) {\n $scope.newRuleValidateErrors.subnet = true;\n $scope.newRuleValidateErrors.subnetText = 'Required field';\n valid = false;\n } else if (!ValidatorService.IPWithMask($scope.newRule.subnet)) {\n $scope.newRuleValidateErrors.subnet = true;\n $scope.newRuleValidateErrors.subnetText = 'Invalid subnet';\n valid = false;\n }\n }\n if ($scope.newRule.type === 'single_ip') {\n if (!_.trim($scope.newRule.singleIP)) {\n $scope.newRuleValidateErrors.singleIP = true;\n $scope.newRuleValidateErrors.singleIPText = 'Required field';\n valid = false;\n } else if (!ValidatorService.IP($scope.newRule.singleIP)) {\n $scope.newRuleValidateErrors.singleIP = true;\n $scope.newRuleValidateErrors.singleIPText = 'Invalid IP';\n valid = false;\n }\n }\n if ($scope.newRule.type === 'country' && !$scope.newRule.country.code) {\n $scope.newRuleValidateErrors.country = true;\n valid = false;\n }\n return valid;\n }\n\n $scope.saveNewRule = function() {\n $scope.loading = true;\n $rootScope.showLinearProgress('#geoIPRulesLoader');\n\n var newRule = {};\n var updatedRules = [];\n for (var i=0; i < $scope.newRuleList.length; i++) {\n var rule = $scope.newRuleList[i];\n if (rule.id === 'new') {\n newRule = {\n name: rule.name,\n priority: i+1,\n allow: rule.allow,\n subject_type: rule.subject_type,\n subject: rule.subject\n };\n continue\n }\n if (rule.priority !== (i+1)) {\n rule.priority = i+1;\n updatedRules.push(rule);\n }\n }\n\n GeoIPRules.create(newRule).$promise\n .then(function () {\n if (updatedRules.length) {\n var reqList = [];\n for(var i=0; i < updatedRules.length; i++) {\n reqList.push(GeoIPRules.update(updatedRules[i]).$promise)\n }\n $q.all(reqList)\n .then(function(values) {\n $scope.getRules();\n ToastService.Small({\n title: 'The new GeoIP rule has been added',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n })\n .catch(function(reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to add new GeoIP rule',\n color: 'red',\n icon: 'server-minus'\n });\n });\n } else {\n $scope.getRules();\n ToastService.Small({\n title: 'The new GeoIP rule has been added',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n return;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to add new GeoIP rule',\n color: 'red',\n icon: 'server-minus'\n });\n });\n };\n\n function normRuleToJsonAPI(rule) {\n var r = {\n allow: rule.policy === 'allow',\n name: _.trim(rule.name),\n subject_type: '',\n subject: '',\n _country: {}\n };\n switch (rule.type) {\n case 'all':\n r.subject_type = 'everyone';\n break;\n case 'network':\n r.subject_type = 'network';\n r.subject = _.trim(rule.subnet);\n break;\n case 'single_ip':\n r.subject_type = 'network';\n r.subject = _.trim(rule.singleIP)+'/32';\n break;\n case 'country':\n r.subject_type = 'country';\n r.subject = rule.country.code;\n r._country = rule.country;\n }\n return r;\n }\n\n function ruleDescription(rule) {\n var description = rule.allow ? 'allow ' : 'deny ';\n if (rule.subject_type === 'everyone') {\n return description + 'all';\n }\n if (rule.subject_type === 'network' && !rule.subject.endsWith('/32')) {\n if (rule.subject) {\n return description + 'subnet ' + rule.subject;\n }\n return description + 'subnet...';\n }\n if (rule.subject_type === 'network' && rule.subject.endsWith('/32')) {\n if (rule.subject !== '/32') {\n return description + 'IP ' + rule.subject.substring(0, rule.subject.length - 3);\n }\n return description + 'IP...';\n }\n if (rule.subject_type === 'country') {\n if (rule._country.title) {\n return description + 'country ' + rule._country.title + ' (' + rule._country.code + ')';\n }\n return description + 'country...';\n }\n if (rule.subject_type === 'group') {\n var groupName = rule._group || rule.subject;\n return description + 'user group \"' + groupName + '\"';\n }\n return '';\n }\n\n $scope.$watch('newRule', function(newVal, oldVal){\n if (_.isEqual(newVal, oldVal)) {\n return;\n }\n var newItem = $filter('filter')($scope.newRuleList, {'id': 'new'});\n if (!newItem.length) {\n $scope.newRuleList.splice(0, 0, {\n id: 'new',\n allow: true,\n subject_type: 'everyone',\n name: '',\n _description: ''\n });\n } else {\n var rule = normRuleToJsonAPI(newVal);\n newItem[0].allow = rule.allow;\n newItem[0].name = rule.name;\n newItem[0].subject_type = rule.subject_type;\n newItem[0].subject = rule.subject;\n newItem[0]._description = ruleDescription(rule);\n if (rule._country.code) {\n $scope.newRuleValidateErrors.country = false;\n }\n }\n }, true);\n\n $scope.deleteRule = function (rule) {\n if ($scope.loading) return;\n $rootScope.showLinearProgress('#geoIPRulesLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the geoIP rule \"' + rule.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n GeoIPRules.remove({id: rule.id}).$promise\n .then(function () {\n ToastService.Small({\n title: 'The geoIP rule ' + rule.name + ' has been successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $scope.getRules();\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove geoIP rule',\n color: 'red',\n icon: 'delete'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.reorderRules = function() {\n if ($scope.loading) return;\n $rootScope.showLinearProgress('#geoIPRulesLoader');\n $scope.reorderedList = angular.copy($scope.rules);\n\n var inner = $templateCache.get('reorder-geoip-rules.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Update',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n var updatedRules = [];\n for (var i=0; i < $scope.reorderedList.length; i++) {\n var rule = $scope.reorderedList[i];\n if (rule.priority !== (i+1)) {\n rule.priority = i+1;\n updatedRules.push(rule);\n }\n }\n if (updatedRules.length) {\n var reqList = [];\n for(var i=0; i < updatedRules.length; i++) {\n reqList.push(GeoIPRules.update(updatedRules[i]).$promise)\n }\n $q.all(reqList)\n .then(function(values) {\n $scope.getRules();\n ToastService.Small({\n title: 'The geoIP rules have been reordered',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n })\n .catch(function(reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to reorder geoIP rules',\n color: 'red',\n icon: 'server-minus'\n });\n });\n } else {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#geoIPRulesLoader');\n }\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n $scope.getRules();\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:MainCtrl\n * @description\n * # MainCtrl\n * Controller of the lmApp\n */\nlmApp.controller('GreetingsController', ['$scope', '$location', '$rootScope', '$routeParams', '$timeout', '$interval', 'GreetingsService',\n function ($scope, $location, $rootScope, $routeParams, $timeout, $interval, GreetingsService) {\n\n $scope.smallPreloaderIndex = 0;\n $scope.preloaderIndex = 0;\n $scope.preloaderMessages = [\n {\n image: '/images/message-0.png',\n title: 'Welcome to SotalCloud',\n text: 'your brand new video content distribution space! In just few steps you will unleash power of DRM protected unlimited content distribution for movies, events and linear channels on most popular connected devices!'\n },\n {\n image: '/images/message-1.png',\n title: '',\n text: 'Sell movies, series, pack them into bundles or sell one by one! Want to give away for free - its also an option to boost your project\\'s audience.'\n },\n {\n image: '/images/message-2.png',\n title: '',\n text: 'Events or Linear channels - live, recorded in CatchUp or by users NPVR! Automated bandwidth management will deliver best quality to any part of the world.'\n },\n {\n image: '/images/message-3.png',\n title: '',\n text: 'Make decision and adjust your business instantly with our intuitive analytics and consumption statistics. Get most out your business!'\n },\n {\n image: '/images/message-4.png',\n title: '',\n text: 'Grow with no limits. Automatic content distribution to CDNs or SotalCloud private CDN, cloud based content encoding with DRM support. From few to few million of subscribers - SotalCloud your trusted partner!'\n }\n ];\n\n $scope.activationFormData = {\n code: '',\n loading: false,\n isActivationComplete: false,\n error: '',\n /**\n * Check activation code\n */\n checkCode: function () {\n if (this.loading) return;\n\n if (!this.code) {\n this.error = 'Input activation code';\n return;\n }\n\n this.loading = true;\n\n $rootScope.showLinearProgress('#greetingsLoader');\n\n this.error = '';\n\n GreetingsService.Confirm($scope.activationFormData.code)\n .then(function (response) {\n $rootScope.hideLinearProgress('#greetingsLoader');\n $scope.activationFormData.loading = false;\n $scope.activationFormData.isActivationComplete = true;\n\n $scope.intPreloadSmall = $interval(function () {\n $scope.newIndex = $scope.smallPreloaderIndex + 1;\n $timeout(function () {\n if ($scope.newIndex < 4) {\n $scope.smallPreloaderIndex = $scope.newIndex\n } else {\n $scope.smallPreloaderIndex = 0;\n }\n });\n }, 650);\n\n $scope.intPreload = $interval(function () {\n $scope.newIndex_ = $scope.preloaderIndex + 1;\n $timeout(function () {\n $scope.newIndex_ < 5 ? $scope.preloaderIndex = $scope.newIndex_ : $rootScope.go('/enter');\n });\n }, 18 * 1000);\n }, function (reason) {\n $rootScope.hideLinearProgress('#greetingsLoader');\n $scope.activationFormData.loading = false;\n if (reason.message === 'Invalid code') {\n $scope.activationFormData.error = 'Wrong activation code.';\n } else {\n $rootScope.debugInfo(reason);\n }\n });\n }\n };\n\n /**\n * Get activation code from url\n */\n if ($location.path().split('/')[2]) {\n $scope.activationFormData.code = $location.path().split('/')[2];\n $scope.activationFormData.checkCode();\n }\n\n if ($routeParams.mystery) {\n $scope.activationFormData.isActivationComplete = true;\n\n $scope.intPreloadSmall = $interval(function () {\n $scope.newIndex = $scope.smallPreloaderIndex + 1;\n $timeout(function () {\n if ($scope.newIndex < 4) {\n $scope.smallPreloaderIndex = $scope.newIndex\n } else {\n $scope.smallPreloaderIndex = 0;\n }\n });\n }, 650);\n\n $scope.intPreload = $interval(function () {\n $scope.newIndex_ = $scope.preloaderIndex + 1;\n $timeout(function () {\n $scope.newIndex_ < 5 ? $scope.preloaderIndex = $scope.newIndex_ : $scope.preloaderIndex = 0;\n });\n }, 18 * 1000);\n }\n\n $scope.$on('$destroy', function () {\n if ($scope.intPreloadSmall) $interval.cancel($scope.intPreloadSmall);\n if ($scope.intPreload) $interval.cancel($scope.intPreload);\n });\n }]);\n","lmApp\n .service('GreetingsService', ['$q', 'ApiService', function ($q, ApiService) {\n\n var service = {};\n\n service.Confirm = function (code) {\n var deferred = $q.defer();\n\n var data = {\n ack: code\n };\n\n ApiService.Request('1/register/acknowledge', 'POST', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'supervisor/1/register/acknowledge';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .controller('GroupController', ['$scope', '$templateCache', '$rootScope', '$compile', '$q', '$timeout', '$routeParams', '$location', 'GroupService', 'GroupResource', 'AssetService', 'SubscriberService', 'ValidatorService', 'ToastService', 'ManageAssetsWindow', 'ModalWindowService', 'ManageSubscribersWindow',\n function ($scope, $templateCache, $rootScope, $compile, $q, $timeout, $routeParams, $location, GroupService, GroupResource, AssetService, SubscriberService, ValidatorService, ToastService, ManageAssetsWindow, ModalWindowService, ManageSubscribersWindow) {\n $scope.loading = false;\n $scope.groupCollection = [];\n $scope.search = {\n isShown: false,\n searchField: ''\n };\n $scope.activeGroup = {};\n $scope.newGroup = {};\n $scope.newGroup._PrivateData = {};\n $scope._tab = 'packages';\n\n $scope.specialGroup = {\n name: 'Everyone',\n _packageCount: -1,\n tooltip: ''\n };\n\n $scope.isCurrentTab = function (tab) {\n return $scope._tab === tab;\n };\n\n $scope.setCurrentTab = function (tab) {\n $scope._tab = tab;\n };\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_GROUP_COLLECTION: 'update.group.collection'});\n\n var _ParseGroup = function (group) {\n group._PrivateData = {};\n group._PrivateData.selectedAsset = [];\n group._PrivateData.selectedUser = [];\n group._PrivateData.validateErrors = {};\n group._PrivateData.name = group.name;\n\n $rootScope.showLinearProgress('#assetLoader' + group.id);\n group._PrivateData.assetLoading = true;\n\n $rootScope.showLinearProgress('#userLoader' + group.id);\n group._PrivateData.userLoading = true;\n\n AssetService.SearchByKeyword('', {groups: [group.id], onlyPackages: true}, 0, 10000)\n .then(function (collection) {\n $rootScope.hideLinearProgress('#assetLoader' + group.id);\n group._PrivateData.assetLoading = false;\n\n group._PrivateData.assets = collection;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#assetLoader' + group.id);\n group._PrivateData.assetLoading = false;\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n SubscriberService.GetSubscribersByGroup([group.id])\n .then(function (collection) {\n $rootScope.hideLinearProgress('#userLoader' + group.id);\n group._PrivateData.userLoading = false;\n\n group._PrivateData.users = collection;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#userLoader' + group.id);\n group._PrivateData.userLoading = false;\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n return group;\n };\n\n $scope.updateGroupCollection = function () {\n $rootScope.showLinearProgress('#groupLoader');\n $scope.loading = true;\n GroupService.GetGroups()\n .then(function (collection) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n $scope.groupCollection = collection;\n var assetMap = {\n 0: []\n };\n\n if ($scope.groupCollection.length && $scope.routeGroupId) {\n var group = _.find($scope.groupCollection, {id: $scope.routeGroupId});\n if (group) {\n $scope.setActiveGroup(group);\n }\n }\n\n $scope.groupCollection.forEach(function (group) {\n group._userCount = -1;\n group._packageCount = -1;\n });\n\n AssetService.SearchByKeyword('', {onlyPackages: true}, 0, 10000)\n .then(function (collection) {\n collection.forEach(function (asset) {\n if (asset.group_id.length > 0) {\n asset.group_id.forEach(function (groupId) {\n if (!assetMap.hasOwnProperty(groupId)) assetMap[groupId] = [];\n assetMap[groupId].push(asset);\n })\n } else {\n assetMap[0].push(asset);\n }\n });\n\n var titles = [];\n assetMap[0].forEach(function (package) {\n var status = 'inactive';\n if (package.is_available) {\n status = 'active';\n }\n var assetsCount = 0;\n if (package.assets) {\n assetsCount = package.assets.length;\n }\n titles.push(package.title + ' (' + status + ', ' + assetsCount + ' assets)')\n });\n titles.push(\"+ all channels/VODs without package\");\n $scope.specialGroup._packageCount = assetMap[0].length;\n $scope.specialGroup.tooltip = titles.join('
    ');\n\n $scope.groupCollection.forEach(function (group) {\n if (assetMap.hasOwnProperty(group.id)) {\n group._packageCount = assetMap[group.id].length;\n } else {\n group._packageCount = 0;\n }\n return group;\n });\n\n return collection;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 5);\n });\n\n $scope.groupCollection.forEach(function (group) {\n SubscriberService.GetSubscribersByGroup([group.id])\n .then(function (collection) {\n group._userCount = collection.length;\n return group\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 5);\n });\n return group;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.toggleSearch = function (group) {\n $scope.search.isShown = !$scope.search.isShown;\n };\n\n $scope.isActiveGroupSet = function () {\n return !_.isEmpty($scope.activeGroup);\n };\n\n $scope.setActiveGroup = function (group) {\n $scope.activeGroup = _ParseGroup(group);\n $location.search('group_id', group.id);\n };\n\n $scope.clearActiveGroup = function () {\n $scope.activeGroup = {};\n $location.search('group_id', null);\n };\n\n $scope.toggleAssetSelection = function (group, asset) {\n var idx = group._PrivateData.selectedAsset.indexOf(asset);\n\n if (!asset.isSelected) {\n asset.isSelected = false;\n\n if (idx !== -1) {\n group._PrivateData.selectedAsset.splice(idx, 1);\n }\n } else {\n asset.isSelected = true;\n\n if (idx === -1) {\n group._PrivateData.selectedAsset.push(asset);\n }\n }\n };\n\n $scope.removeSelectedAsset = function (group) {\n if (group._PrivateData.assetLoading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#assetLoader' + group.id);\n\n var _ids = group._PrivateData.selectedAsset.map(function (asset) {\n return asset.id;\n });\n\n GroupService.RemoveAsset([group.id], _ids)\n .then(function (response) {\n $rootScope.hideLinearProgress('#assetLoader' + group.id);\n $scope.loading = false;\n ToastService.Small({\n title: 'Asset(s) successfully removed',\n color: 'green',\n icon: 'movie'\n }, 1000 * 3);\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#assetLoader' + group.id);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Asset(s) remove failed',\n color: 'red',\n icon: 'movie'\n }, 1000 * 3);\n })\n };\n\n $scope.manageAssetsFromGroup = function (toAdd, toRemove, toThis) {\n var allQ = {};\n\n if (toAdd.length) {\n var addIds = toAdd.map(function (asset) {\n return asset.id;\n });\n\n allQ.add = GroupService.AddAsset([toThis.id], addIds);\n }\n\n if (toRemove.length) {\n var removeIds = toRemove.map(function (asset) {\n return asset.id;\n });\n\n allQ.remove = GroupService.RemoveAsset([toThis.id], removeIds);\n }\n\n return allQ;\n };\n\n $scope.openAssetWindow = function (group, index) {\n if (group._PrivateData.assetLoading) return;\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: $scope.manageAssetsFromGroup,\n obj: group,\n index: index,\n data: 'group',\n onlyPackages: true,\n currentCollection: _.map(group._PrivateData.assets, 'id'),\n title: group.name\n })\n };\n\n $scope.toggleUserSelection = function (group, user) {\n var idx = group._PrivateData.selectedUser.indexOf(user);\n\n if (!user.isSelected) {\n user.isSelected = false;\n\n if (idx !== -1) {\n group._PrivateData.selectedUser.splice(idx, 1);\n }\n } else {\n user.isSelected = true;\n\n if (idx === -1) {\n group._PrivateData.selectedUser.push(user);\n }\n }\n };\n\n $scope.removeSelectedUser = function (group) {\n if (group._PrivateData.userLoading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#userLoader' + group.id);\n\n var _ids = group._PrivateData.selectedUser.map(function (user) {\n return user.id;\n });\n\n GroupService.RemovePrincipal([group.id], _ids)\n .then(function (response) {\n $rootScope.hideLinearProgress('#userLoader' + group.id);\n $scope.loading = false;\n ToastService.Small({\n title: 'User(s) successfully removed',\n color: 'green',\n icon: 'account'\n }, 1000 * 3);\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#userLoader' + group.id);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'User(s) remove failed',\n color: 'red',\n icon: 'account'\n }, 1000 * 3);\n })\n };\n\n var manageSubscribersFromModal = function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n var allQ = {};\n\n if (toAdd.length) {\n var addIds = toAdd.map(function (subscriber) {\n return subscriber.id;\n });\n allQ.add = GroupService.AddPrincipal([toThis.id], addIds);\n }\n\n if (toRemove.length) {\n var removeIds = toRemove.map(function (subscriber) {\n return subscriber.id;\n });\n allQ.remove = GroupService.RemovePrincipal([toThis.id], removeIds);\n }\n\n return allQ;\n };\n\n $scope.openUserWindow = function (group) {\n ManageSubscribersWindow.Open({\n manageSubscribersFn: manageSubscribersFromModal,\n title: 'adding/removing group \"' + group.name + '\"',\n filter: {},\n obj: group,\n currentCollection: _.map(group._PrivateData.users, 'id')\n });\n };\n\n/* $scope.openUserWindow = function (group) {\n if (group._PrivateData.userLoading) return;\n\n $scope.innerScope = $scope.$new();\n\n $scope.innerScope.userSearch = '';\n $scope.innerScope.loading = false;\n\n $scope.innerScope.users = [];\n $scope.innerScope.toRemove = [];\n $scope.innerScope.toAdd = [];\n\n $scope.innerScope.loading = true;\n SubscriberService.GetSubscribers()\n .then(function (collection) {\n $scope.innerScope.loading = false;\n $scope.innerScope.users = collection;\n $scope.innerScope.$watch('userSearch', function (newValue, oldValue) {\n $scope.innerScope.users.forEach(function (user) {\n user.inSelection = !!_.find(group._PrivateData.users, {id: user.id});\n return user;\n });\n });\n })\n .catch(function () {\n $scope.innerScope.loading = false;\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n $scope.innerScope.addUser = function (user) {\n user.inSelection = true;\n\n var inNew = false;\n $scope.innerScope.toRemove.forEach(function (item, index, collection) {\n if (item.id === user.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) $scope.innerScope.toAdd.push(user);\n };\n\n $scope.innerScope.removeUser = function (user) {\n user.inSelection = false;\n\n var inNew = false;\n $scope.innerScope.toAdd.forEach(function (item, index, collection) {\n if (item.id === user.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) $scope.innerScope.toRemove.push(user);\n };\n\n var _inner_ = $templateCache.get('add-user-to-group.html');\n _inner_ = $compile(_inner_)($scope.innerScope);\n\n ModalWindowService.Open({\n content: _inner_,\n isFixed: true,\n actions: [\n {\n title: 'Add',\n color: 'teal',\n fn: function () {\n if ($scope.loading) return;\n\n var allQ = {};\n\n if ($scope.innerScope.toAdd.length) {\n var addIds = $scope.innerScope.toAdd.map(function (asset) {\n return asset.id;\n });\n\n allQ.add = GroupService.AddPrincipal([group.id], addIds);\n }\n\n if ($scope.innerScope.toRemove.length) {\n var removeIds = $scope.innerScope.toRemove.map(function (asset) {\n return asset.id;\n });\n\n allQ.remove = GroupService.RemovePrincipal([group.id], removeIds);\n }\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.innerScope.loading = false;\n ToastService.Small({\n title: 'User(s) successfully added/removed',\n color: 'green',\n icon: 'package-down'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error happened',\n color: 'red',\n icon: 'package-down'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.innerScope.loading = false;\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n onComplete: function () {\n $scope.innerScope.$destroy();\n },\n size: {\n s: 4\n }\n });\n };*/\n\n $scope.createNewGroup = function () {\n $scope._createInner_ = $templateCache.get('add-group.html');\n $scope._createInner_ = $compile($scope._createInner_)($scope);\n\n ModalWindowService.Open({\n content: $scope._createInner_,\n actions: [\n {\n title: 'Create',\n color: 'green',\n fn: function () {\n var extId = \"group:\" + translit($scope.newGroup._PrivateData.title);\n\n GroupService.CreateGroup(extId, $scope.newGroup)\n .then(function (response) {\n $scope.newGroup = {};\n ToastService.Small({\n title: 'Group successfully created',\n color: 'green',\n icon: 'source-fork'\n }, 1000 * 3);\n $scope.groupCollection.unshift(_ParseGroup(response.group));\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.loading = false;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Group create failed',\n color: 'red',\n icon: 'source-fork'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.loading = false;\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.updateGroup = function (group) {\n group._PrivateData.validateErrors = {};\n\n if (!group._PrivateData.name) {\n group._PrivateData.validateErrors.name = true;\n return;\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#groupLoader');\n\n GroupService.UpdateGroup(group, group.parent_id)\n .then(function (response) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Group successfully updated',\n color: 'green',\n icon: 'source-fork'\n }, 1000 * 3);\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#groupLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Group update failed',\n color: 'red',\n icon: 'source-fork'\n }, 1000 * 3);\n })\n };\n\n $scope.removeGroup = function (group) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#groupLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the group \"' + group.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n GroupResource.remove({id: group.id}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#groupLoader');\n ToastService.Small({\n title: 'The group ' + group.name + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n $scope.clearActiveGroup();\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#groupLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove group',\n color: 'red',\n icon: 'delete'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#groupLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_GROUP_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_GROUP_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.UPDATE_GROUP_COLLECTION, function (event) {\n $scope.updateGroupCollection();\n });\n }\n\n $scope.routeGroupId = null;\n if ($routeParams.group_id) {\n $scope.routeGroupId = Number($routeParams.group_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeGroupId && !$routeParams.group_id) {\n $scope.clearActiveGroup();\n }\n $scope.routeGroupId = Number($routeParams.group_id) || null;\n });\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n\n $scope.$on('$destroy', function () {\n $rootScope.$$listeners[$rootScope.EVENTS.UPDATE_GROUP_COLLECTION] = [];\n });\n\n }]);\n","lmApp\n .service('GroupService' ,['$q', '$rootScope',\n function ($q, $rootScope) {\n var service = {};\n\n service.GetGroups = function () {\n var deferred = $q.defer();\n\n var url = 'collection/principal.group/query' + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetGroupsByIds = function (ids) {\n var deferred = $q.defer();\n\n var url = 'collection/principal.group/query/dimension/id/in/' + ids.join(',') + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CreateGroup = function (ext_id, group, parnt) {\n var deferred = $q.defer();\n\n var url = 'principal/mgmt/group/create';\n\n var data = {\n ext_id: ext_id,\n name: group._PrivateData.title\n };\n\n if (parnt) {\n data.parent_id = parnt.id;\n }\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UpdateGroup = function (group, parnt) {\n var deferred = $q.defer();\n\n var url = 'principal/mgmt/group/update';\n\n var data = {\n group_id: group.id,\n name: group._PrivateData.name\n };\n\n if (parnt) {\n data.parent_id = parnt.id;\n }\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddPrincipal = function (groups_ids, users_ids) {\n var deferred = $q.defer();\n\n var url = 'principal/mgmt/group/assoc';\n\n var data = {\n group_id: groups_ids.join(','),\n principal_id: users_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemovePrincipal = function (groups_ids, users_ids) {\n var deferred = $q.defer();\n\n var url = 'principal/mgmt/group/deassoc';\n\n var data = {\n group_id: groups_ids.join(','),\n principal_id: users_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAsset = function (groups_ids, asset_ids) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/group/assoc';\n\n var data = {\n group_id: groups_ids.join(','),\n asset_id: asset_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveAsset = function (groups_ids, asset_ids) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/group/deassoc';\n\n var data = {\n group_id: groups_ids.join(','),\n asset_id: asset_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddOffer = function (groups_ids, offer_ids) {\n var deferred = $q.defer();\n\n var url = 'offer/mgmt/group/assoc';\n\n var data = {\n group_id: groups_ids.join(','),\n offer_id: offer_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveOffer = function (groups_ids, offer_ids) {\n var deferred = $q.defer();\n\n var url = 'offer/mgmt/group/deassoc';\n\n var data = {\n group_id: groups_ids.join(','),\n offer_id: offer_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .controller('ImportController', ['$scope', '$rootScope', '$timeout', '$interval', 'ToastService', 'ImportService', 'ModalWindowService',\n function ($scope, $rootScope, $timeout, $interval, ToastService, ImportService, ModalWindowService) {\n\n $scope.loading = false;\n $scope.taskState = 'all';\n $scope.byDate = {\n from: moment.utc().startOf('month'),\n to: moment.utc().endOf('month')\n };\n\n $scope.editorOptions = {\n lineNumbers: true,\n indentWithTabs: true,\n mode: 'html'\n };\n\n var parseTaskStatus = function (status) {\n var state = {};\n\n switch (status) {\n case 'finished':\n state.title = status.toUpperCase();\n state.color = 'green';\n break;\n case 'failed':\n state.title = status.toUpperCase();\n state.color = 'red';\n break;\n case 'canceled':\n state.title = status.toUpperCase() + ' BY USER';\n state.color = 'red';\n break;\n case 'process':\n state.title = 'IN PROGRESS';\n state.color = 'yellow';\n break;\n case 'preprocess':\n state.title = 'IN PROGRESS';\n state.color = 'yellow';\n break;\n case 'pending':\n state.title = status.toUpperCase();\n state.color = 'yellow';\n break;\n default:\n state.title = status.toUpperCase();\n state.color = 'black';\n }\n\n return state;\n };\n\n var parseNodeStatus = function (node) {\n var state = {};\n\n switch (node.state) {\n case 'finished':\n state.title = node.state.toUpperCase();\n state.color = 'green';\n state.icon = 'checkbox-marked-circle-outline';\n break;\n case 'failed':\n state.title = node.state.toUpperCase();\n state.color = 'red';\n state.icon = 'close-circle-outline';\n break;\n case 'process':\n state.title = 'IN PROGRESS';\n state.color = 'yellow';\n state.icon = 'checkbox-blank-circle-outline';\n break;\n case 'deploy_resources':\n state.title = 'Deploy Resources'.toUpperCase();\n state.color = 'yellow';\n state.icon = 'play-circle-outline';\n break;\n case 'pending':\n state.title = node.state.toUpperCase();\n state.color = 'black';\n state.icon = 'pause-circle-outline';\n break;\n default:\n state.title = node.state.toUpperCase();\n state.color = 'black';\n state.icon = 'checkbox-blank-circle-outline';\n }\n\n if (node.warnings && !_.isEmpty(node.warnings) && !node.error) {\n state.color = 'amber';\n state.icon = 'alert-circle';\n state.title = 'NEED ATTENTION'.toUpperCase();\n }\n\n return state;\n };\n\n var parseTask = function (task, isActive) {\n task._PrivateData = {};\n\n task._PrivateData.expand = !!isActive;\n task._PrivateData.warningFilter = false;\n task._PrivateData.errorFilter = false;\n task._PrivateData._Items = [];\n\n if (task.failed_items_count <= 9 && task.failed_items_count > 0) {\n task._PrivateData.errorCount = task.failed_items_count;\n } else if (task.failed_items_count > 9) {\n task._PrivateData.errorCount = '9-plus';\n } else {\n task._PrivateData.errorCount = 'null';\n }\n\n if (task.warnings_items_count < 9 && task.warnings_items_count > 0) {\n task._PrivateData.warningCount = task.warnings_items_count;\n } else if (task.warnings_items_count > 9) {\n task._PrivateData.warningCount = '9-plus'\n } else {\n task._PrivateData.warningCount = 'null';\n }\n\n task._PrivateData.state = parseTaskStatus(task.state);\n\n if (task.start_time) {\n task._PrivateData.create_time = moment.utc(task.start_time * 1000);\n } else {\n task._PrivateData.create_time = moment.utc();\n }\n\n if (task.last_update_time) {\n task._PrivateData.finish_time = moment.utc(task.last_update_time * 1000);\n } else {\n task._PrivateData.finish_time = moment.utc();\n }\n\n return task;\n };\n\n var parseNode = function (item, isActive) {\n item._PrivateData = {};\n item._PrivateData.isActive = !!isActive;\n item._PrivateData.state = parseNodeStatus(item);\n\n item._PrivateData.actions = _.isArray(item.actions) ? '' : angular.uppercase(item.actions);\n\n return item;\n };\n\n var getEditorHeight = function (node) {\n angular.element(\"#ace\" + node.id).css({height: angular.element(\"#textarea\" + node.id).val().split(\"\\n\").length + angular.element(\"#textarea\" + node.id).val().split(\"\\n\").length * 0.1 + 'rem'});\n };\n\n $scope.collection = [];\n\n $scope.applyTaskFilter = function () {\n return function (task) {\n return ($scope.taskState === 'all')\n || ($scope.taskState === 'active' && (task.state === 'process' || task.state === 'preprocess'))\n || ($scope.taskState === 'completed' && task.state === 'finished')\n || ($scope.taskState === 'date' && task.start_time >= $scope.byDate.from.startOf('day').unix() && task.start_time <= $scope.byDate.to.endOf('day').unix())\n || ($scope.taskState === 'failed' && task.state === 'failed');\n };\n };\n\n $scope.applyNodeFilter = function (task) {\n return function (node) {\n return (!task._PrivateData.errorFilter && !task._PrivateData.warningFilter)\n || (task._PrivateData.errorFilter && node.error)\n || (task._PrivateData.warningFilter && node.warnings);\n };\n };\n\n $scope.uploadXml = function () {\n if ($scope.loading) return;\n\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $scope.cancelImportTask = function (task) {\n ModalWindowService.Open({\n content: '

    Cancel import task

    This action will cancel import task permanently. ' +\n 'Are You sure?

    ',\n actions: [\n {\n title: 'Do it',\n icon: 'close-box-outline',\n color: 'red',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n ImportService.CancelImport(task)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n ToastService.Small({\n title: 'Task successfully canceled',\n color: 'green',\n icon: 'close-box-outline'\n }, 1000 * 3);\n $scope.getTasks({id: 'all'});\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Task cancel failed',\n color: 'red',\n icon: 'close-box-outline'\n }, 1000 * 3);\n });\n }\n },\n {\n title: 'Cancel'\n }\n ]\n });\n };\n\n $scope.getTasks = function (who) {\n if (who.id === 'all') {\n $scope.loading = true;\n $rootScope.showLinearProgress('#importLoader');\n\n ImportService.GetImportTasks()\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#importLoader');\n $scope.collection = collection.map(function (task) {\n return parseTask(task);\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#importLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n\n if (_.isFinite(who.id)) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#importLoader');\n\n ImportService.GetImportTaskById([who.id])\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#importLoader');\n if (collection.length) {\n who.collection[who.index] = parseTask(collection[0], who.active);\n $scope.getNodes(collection[0], {id: 'all'});\n } else {\n who.collection.splice(who.index, 1);\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#importLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n };\n\n $scope.getNodes = function (task, who) {\n if (who.id === 'all') {\n ImportService.GetTaskItems(task)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n task._PrivateData.expand = true;\n task._PrivateData._Items = collection.map(function (item) {\n return parseNode(item);\n })\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n if (_.isFinite(who.id)) {\n ImportService.GetTaskItemsById([who.id])\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n task._PrivateData._Items[who.index] = parseNode(collection[0], who.active);\n $scope.getNodeXml(task, collection[0]);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n };\n\n $scope.toggleItems = function (task) {\n if (task._PrivateData.expand) {\n task._PrivateData.expand = false;\n } else {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n\n $scope.getNodes(task, {id: 'all'});\n }\n };\n\n $scope.getNodeXml = function (task, node) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n ImportService.GetNodeXml(node)\n .then(function (xml) {\n node._PrivateData.xml = xml[0];\n node._PrivateData.xmlOrigin = xml[0];\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n\n $scope.toggleNodeXml = function (task, node) {\n if (node._PrivateData.isActive) {\n node._PrivateData.isActive = false;\n } else {\n node._PrivateData.isActive = true;\n\n $scope.getNodeXml(task, node);\n }\n };\n\n $scope.saveXML = function (task, node) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n ImportService.SaveNodeXml(node, node._PrivateData.xml)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n ToastService.Small({\n title: 'Changes successfully saved',\n color: 'green',\n icon: 'xml'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Save failed',\n color: 'red',\n icon: 'xml'\n }, 1000 * 3);\n });\n };\n\n $scope.resetXML = function (node) {\n node._PrivateData.xml = node._PrivateData.xmlOrigin;\n };\n\n $scope.restartImport = function (task) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n var _ids = task._PrivateData._Items.map(function (item) {\n return item.id;\n });\n\n ImportService.RestartNodes(task, _ids)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n ToastService.Small({\n title: 'Task successfully restarted',\n color: 'green',\n icon: 'refresh'\n }, 1000 * 3);\n $scope.getTasks({id: 'all'});\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Task restart failed',\n color: 'red',\n icon: 'refresh'\n }, 1000 * 3);\n });\n };\n\n $scope.restartThread = function (task, item, index) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n ImportService.RestartNodes(task, [item.id])\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n ToastService.Small({\n title: 'Thread successfully restarted',\n color: 'green',\n icon: 'refresh'\n }, 1000 * 3);\n $scope.getNodes(task, {id: item.id, index: index, active: true});\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Thread restart failed',\n color: 'red',\n icon: 'refresh'\n }, 1000 * 3);\n });\n };\n\n $scope.deleteImport = function (task) {\n ModalWindowService.Open({\n content: '

    DELETE IMPORT TASK

    This action will delete import task permanently. All imported data will be save.' +\n 'Are You sure?

    ',\n actions: [\n {\n title: 'Yes',\n icon: 'delete',\n color: 'red',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#taskLoader' + task.id);\n\n ImportService.DeleteImport(task)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n ToastService.Small({\n title: 'Task successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $scope.getTasks({id: 'all'});\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#taskLoader' + task.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Task delete failed',\n color: 'red',\n icon: 'delete'\n }, 1000 * 3);\n });\n }\n },\n {\n title: 'Cancel'\n }\n ]\n });\n };\n\n $scope.getTasks({id: 'all'});\n\n $scope.int = $interval(function () {\n $scope.getTasks({id: 'all'});\n }, 15 * 60 * 1000);\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope.loading = true;\n $scope._progress_.css({'display': 'block'});\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, angular.element('#importProgress'))\n .then(function (response) {\n $scope._progress_.css({'display': 'none'});\n $scope._bar_.css({width: 0});\n ImportService.CreateNewImport(response.Location)\n .then(function () {\n $scope.loading = false;\n $scope.getTasks({id: 'all'});\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.loading = false;\n $scope._progress_.css({'display': 'none'});\n $scope._bar_.css({width: 0});\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n $scope.$on('$destroy', function () {\n $interval.cancel($scope.int);\n\n angular.element('#import_xml').off('change');\n })\n }]);\n","lmApp\n .service('ImportService', ['$q', '$rootScope',\n function ($q, $rootScope) {\n var service = {};\n\n service.UploadToCloud = function (image, progress) {\n var deferred = $q.defer();\n if (progress) {\n var progressBar = progress.find('.determinate');\n progress.css({display: 'block'});\n }\n\n var params = {\n Key: Date.now() + '_' + image.name,\n ContentType: image.type,\n ContentLength: image.size,\n Body: image,\n ACL: 'public-read'\n };\n\n $rootScope.aws\n .upload(params, function (err, data) {\n if (err) {\n err.url = 'AWS3 CloudServer';\n err.data = image;\n deferred.reject(err);\n return;\n }\n\n if (progress) progress.css({display: 'none'});\n deferred.resolve(data);\n })\n .on('httpUploadProgress', function (persentage) {\n if (progress) progressBar.css({width: Math.round(persentage.loaded / persentage.total * 100) + '%'});\n }\n );\n\n return deferred.promise;\n };\n\n service.CreateNewImport = function (xmlUrl) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/schedule';\n var data = {\n url: xmlUrl\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CreatePerformImport = function (xmlUrl) {\n var deferred = $q.defer();\n\n var url = 'asset/import/perform';\n var data = {\n url: xmlUrl\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetImportTasks = function () {\n var deferred = $q.defer();\n\n var url = 'collection/vod.import/query' + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetImportTaskById = function (ids) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.import/query/dimension/id/eq/'+ ids.join(',') + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetTaskItems = function (task) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.import.item/query/dimension/import_schedule_id/eq/' + task.id + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetTaskItemsById = function (ids) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.import.item/query/dimension/id/eq/' + ids.join(',') + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetNodeXml = function (node) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/item/xml';\n\n var data = {\n schedule_item_id: node.id\n };\n\n lh.common.request.get(url, data)\n .then(function (response) {\n deferred.resolve(response.xml);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.SaveNodeXml = function (node, xml) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/item/xml/update';\n var data = {\n schedule_item_id: node.id,\n xml: xml\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CancelImport = function (task) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/cancel';\n var data = {\n import_id: task.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RestartNodes = function (task, ids) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/reschedule/item';\n var data = {\n import_id: task.id,\n schedule_item_ids: ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.DeleteImport = function (task) {\n var deferred = $q.defer();\n\n var url = 'asset/import/scheduler/remove';\n var data = {\n import_id: task.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .controller('CdnController', ['$scope', '$rootScope', 'ToastService', 'InfrastructureService',\n function ($scope, $rootScope, ToastService, InfrastructureService) {\n $scope.data = {};\n $scope.loading = false;\n\n $scope.saveOriginsList = function () {\n if ($scope.loading) return;\n\n $rootScope.showLinearProgress('#cdnLoader');\n $scope.loading = true;\n for (var i = 0; i < $scope.data.origins.length; i++) {\n var origin = $scope.data.origins[i];\n\n if (origin._PrivateData.cdnUrl !== origin._PrivateData.cdnUrlOrigin) {\n InfrastructureService.UpdateOrigin(origin)\n .then(function (response) {\n $rootScope.hideLinearProgress('#cdnLoader');\n $scope.loading = false;\n\n ToastService.Small({\n color: 'green',\n title: 'CDN URLs successfully saved',\n icon: 'swap-horizontal'\n }, 6000);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#cdnLoader');\n $scope.loading = false;\n\n ToastService.Small({\n color: 'red',\n title: 'CDN URLs save failed',\n icon: 'swap-horizontal'\n }, 6000);\n });\n }\n }\n };\n\n $scope.getOriginsList = function () {\n\n $rootScope.showLinearProgress('#cdnLoader');\n $scope.loading = true;\n InfrastructureService.GetOrigins()\n .then(function (collection) {\n $rootScope.hideLinearProgress('#cdnLoader');\n $scope.loading = false;\n $scope.data.origins = collection.map(function (origin) {\n origin._PrivateData = {};\n origin._PrivateData.cdnUrl = origin.cdn_url;\n origin._PrivateData.cdnUrlOrigin = origin.cdn_url;\n\n return origin;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#cdnLoader');\n $scope.loading = false;\n });\n };\n\n $scope.getOriginsList();\n }]);\n","lmApp\n .controller('DeliveryMethodController', ['$scope', '$rootScope', '$q', 'ToastService', 'InfrastructureService',\n function ($scope, $rootScope, $q, ToastService, InfrastructureService) {\n $scope.data = {};\n $scope.loading = false;\n\n $scope.availableMethods = [\n {\n title: 'Origin',\n value: 'origin'\n },\n {\n title: 'Cdn',\n value: 'cdn'\n },\n {\n title: 'Direct',\n value: 'direct'\n }\n ];\n\n $scope.getResourcesList = function () {\n\n $rootScope.showLinearProgress('#deliveryLoader');\n $scope.loading = true;\n InfrastructureService.GetResourceGroups()\n .then(function (collection) {\n $rootScope.hideLinearProgress('#deliveryLoader');\n $scope.loading = false;\n $scope.data.resources = collection.map(function (resource) {\n resource._PrivateData = {};\n resource._PrivateData.method = resource.delivery_method;\n resource._PrivateData.methodOrigin = resource.delivery_method;\n\n return resource;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#deliveryLoader');\n $scope.loading = false;\n });\n };\n\n $scope.saveResourceList = function () {\n if ($scope.loading) return;\n\n $rootScope.showLinearProgress('#deliveryLoader');\n $scope.loading = true;\n var allQ = {};\n for (var i = 0; i < $scope.data.resources.length; i++) {\n var resource = $scope.data.resources[i];\n\n if (resource._PrivateData.method !== resource._PrivateData.methodOrigin) {\n allQ[resource.ext_id] = InfrastructureService.UpdateResource(resource);\n }\n }\n\n $q.all(allQ)\n .then(function (response) {\n $rootScope.hideLinearProgress('#deliveryLoader');\n $scope.loading = false;\n\n ToastService.Small({\n color: 'green',\n title: 'Delivery method successfully saved',\n icon: 'swap-horizontal'\n }, 6000);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#deliveryLoader');\n $scope.loading = false;\n\n ToastService.Small({\n color: 'red',\n title: 'Delivery method save failed',\n icon: 'swap-horizontal'\n }, 6000);\n });\n };\n\n $scope.getResourcesList();\n }]);\n","lmApp\n .service('InfrastructureService', ['$q', '$http', function ($q, $http) {\n var service = {};\n\n /**\n * Get Origins\n * @returns {*|Deferred|number}\n * @constructor\n */\n service.GetOrigins = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/origin/query' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'collection/resource_group/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n /**\n * Get resource groups\n * @returns {*|Deferred|number}\n * @constructor\n */\n service.GetResourceGroups = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/resource_group/query' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'collection/resource_group/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Update origin\n * @param origin\n * @returns {*|Deferred|number}\n * @constructor\n */\n service.UpdateOrigin = function (origin) {\n var deferred = $q.defer();\n\n var data = {\n origin_id: origin.id,\n cdn_url: origin._PrivateData.cdnUrl\n };\n\n lh.common.request.post('origin/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'origin/mgmt/update';\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n /**\n * Update resource delivery method: origin | cdn | direct\n * @param group\n * @returns {*|Deferred|number}\n * @constructor\n */\n service.UpdateResource = function (group) {\n var deferred = $q.defer();\n\n var data = {\n group_id: group.id,\n delivery_method: group._PrivateData.method\n };\n\n lh.common.request.post('resource/mgmt/group/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'resource/mgmt/group/update';\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.monitoringRequest = function (expr, range, step, end) {\n var deferred = $q.defer();\n\n var data = {\n end: end || 0,\n expr: expr,\n range: range || 3600,\n step: step || 5\n };\n\n $http({\n url: '/monitoring/query_range',\n method: \"GET\",\n params: data\n })\n .then(function (response) {\n if (response.status == 200) {\n if (response.data.type === 'error') {\n deferred.reject(response.data)\n } else {\n deferred.resolve(response.data);\n }\n } else {\n deferred.reject(response)\n }\n }, function (reason) {\n reason.url = '/monitoring/query_range';\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","/**\n * Monitoring Widget directive for Infrastructure\n * Created by\n * @author Art Yunishev\n * on 23.12.2015-15:55\n */\n\nlmApp\n .controller('MonitoringController', ['$scope', function ($scope) {\n\n\n }]);\n","lmApp.controller('ServersController', ['$scope', '$templateCache', '$compile', '$rootScope', 'ToastService', 'ContentNodeResource', 'NPVRNodeResource', 'AssetResource', 'DVRTasksResource', 'ManagerResource', 'ModalWindowService', 'TimezoneService', 'OperatorRsc',\n function ($scope, $templateCache, $compile, $rootScope, ToastService, ContentNodeResource, NPVRNodeResource, AssetResource, DVRTasksResource, ManagerResource, ModalWindowService, TimezoneService, OperatorRsc) {\n $scope.loading = false;\n $scope.contentNodes = [];\n $scope.catchupNodes = [];\n $scope.npvrNodes = [];\n\n $scope.catchupCount = -1;\n $scope.catchupDepth = '';\n $scope.successDVRTasks = -1;\n $scope.totalDVRTasks = -1;\n $scope.npvrState = '';\n $scope.npvrLimit = -1;\n $scope.sessionLimit = -1;\n\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n //\n $scope.getOrigins = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#serverLoader');\n\n $scope.contentNodes = [];\n $scope.catchupNodes = [];\n\n return ContentNodeResource.get().$promise\n .then(function (origins) {\n for (var i = 0; i < origins.length; i++) {\n var origin = origins[i];\n var node = origin.node;\n if (!node) continue;\n origin._state = node.state === 'up' ? 'Up' : 'Down';\n origin._sessions = node.version === 2 && origin.api === 2;\n origin._address = node.url;\n var pos = node.url.lastIndexOf(\"/content\");\n if (pos > 0) {\n origin._address = node.url.substr(0, pos) + \"/contentserver/v1/origin/status\";\n } else {\n origin._address += \"/contentserver/v1/origin/status\";\n }\n var isCatchupServer = false;\n var isNPVRServer = false;\n for (var j = 0; j < node.tags.length; j++) {\n var resource = node.tags[j];\n if (resource.startsWith(\"catchup\")) {\n isCatchupServer = true;\n }\n if (resource.startsWith(\"npvr\")) {\n isNPVRServer = true;\n }\n }\n\n var cdn = []\n if (!origin.cdn) origin.cdn = [];\n for (var j = 0; j < origin.cdn.length; j++) {\n if (origin.cdn[j].url !== '') {\n cdn.push(origin.cdn[j])\n }\n }\n\n origin._cdn = cdn;\n\n if (isCatchupServer) {\n $scope.catchupNodes.push(origin);\n } else if (!isNPVRServer) {\n $scope.contentNodes.push(origin);\n }\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#serverLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#serverLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.addEditCDN = function(node, cdn) {\n if ($scope.loading) return;\n\n $scope.cdnValidateErrors = {\n url: false,\n };\n $scope.cdn = {\n url: '',\n prefix: '/contentserver/v2/distributions',\n tag: '',\n priority: 100,\n group: 'everyone',\n node: node,\n };\n\n var cdnCopy = angular.copy(cdn);\n\n var editing = false;\n if (cdn !== undefined) {\n editing = true;\n $scope.cdn.url = cdn.url;\n $scope.cdn.tag = cdn.tag;\n $scope.cdn.prefix = cdn.prefix;\n $scope.cdn.priority = cdn.priority;\n $scope.cdn.group = cdn.group;\n }\n\n var inner = $templateCache.get('add-cdn.html');\n inner = $compile(inner)($scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: editing ? 'Save' : 'Create',\n color: 'green',\n check: function () {\n var valid = true;\n if (!$scope.cdn.url.startsWith('http')) {\n $scope.cdnValidateErrors.url = true;\n valid = false;\n }\n return valid;\n },\n fn: function () {\n var saved = {\n cdn: [],\n }\n if (node.api) {\n saved.api = node.api;\n }\n if (editing) {\n for (var i = 0; i < node.cdn.length; i++) {\n if (node.cdn[i].url === cdnCopy.url && node.cdn[i].tag === cdnCopy.tag && node.cdn[i].prefix === cdnCopy.prefix) {\n node.cdn[i].url = $scope.cdn.url;\n node.cdn[i].tag = $scope.cdn.tag;\n node.cdn[i].prefix = $scope.cdn.prefix;\n break;\n }\n }\n saved.cdn = node.cdn;\n } else {\n saved.cdn = node.cdn;\n var newCdn = {\n url: $scope.cdn.url,\n prefix: $scope.cdn.prefix,\n tag: $scope.cdn.tag,\n priority: $scope.cdn.priority,\n group: $scope.cdn.group,\n }\n saved.cdn.push(newCdn)\n }\n\n ContentNodeResource.update({ id: node.node.id }, saved).$promise\n .then(function (response) {\n $scope.getOrigins();\n ToastService.Small({\n title: 'The content node has been updated',\n color: 'green',\n icon: 'plus'\n }, 20 * 1000);\n return response\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Failed to update content node: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ]\n });\n };\n\n $scope.deleteCDN = function (node, cdn) {\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the CDN' + cdn.url +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n var saved = {\n cdn: [],\n }\n if (node.api) {\n saved.api = node.api;\n }\n for (var i = 0; i < node.cdn.length; i++) {\n if (node.cdn[i].url === cdn.url && node.cdn[i].tag === cdn.tag && node.cdn[i].prefix === cdn.prefix) {\n continue\n }\n saved.cdn.push(node.cdn[i])\n }\n\n ContentNodeResource.update({ id: node.node.id }, saved).$promise\n .then(function (response) {\n $scope.getOrigins();\n ToastService.Small({\n title: 'The content node has been updated',\n color: 'green',\n icon: 'plus'\n }, 20 * 1000);\n return response\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Failed to update content node: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {}\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.getNPVRNodes = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#serverLoader');\n\n return NPVRNodeResource.get().$promise\n .then(function (origins) {\n for (var i = 0; i < origins.length; i++) {\n var origin = origins[i];\n var node = origin.node;\n if (!node) continue;\n origin._state = node.state === 'up' ? 'Up' : 'Down';\n origin._capacity = (node.capacity / 1024 / 1024 / 1024).toFixed() + ' GB';\n origin._address = node.url;\n var pos = node.url.lastIndexOf(\"/content\");\n if (pos > 0) {\n origin._address = node.url.substr(0, pos) + \"/contentserver/v1/origin/status\";\n } else {\n origin._address += \"/contentserver/v1/origin/status\";\n }\n $scope.npvrNodes.push(origin);\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#serverLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#serverLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getAssets = function() {\n var params = {\n 'type[eq]': 'channel',\n '$expand': 'resources'\n };\n AssetResource.get(params).$promise\n .then(function (assets) {\n var catchupDepths = {};\n var catchupCount = 0;\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n if (!asset.resources) continue;\n for (var j = 0; j < asset.resources.length; j++) {\n var resource = asset.resources[j];\n if (resource.category === 'catchup' && resource.state === 'deployed') {\n catchupCount += 1;\n catchupDepths[resource.catchup_depth] = true;\n break;\n }\n }\n }\n $scope.catchupCount = catchupCount;\n var depths = [];\n for (var d in catchupDepths) {\n depths.push(Number(d));\n }\n if (depths.length === 0) {\n $scope.catchupDepth = 'N/A';\n } else if (depths.length === 1) {\n $scope.catchupDepth = depths[0]/3600 + 'h';\n } else {\n var min = depths[0];\n var max = depths[0];\n for (var i = 0; i < depths.length; i++) {\n if (depths[i] > max) {\n max = depths[i];\n }\n if (depths[i] < min) {\n min = depths[i];\n }\n }\n $scope.catchupDepth = Math.round(min/3600) + 'h...' + Math.round(max/3600) + 'h';\n }\n return;\n })\n .catch(function (reason) {\n $scope.catchupCount = 0;\n $scope.catchupDepth = 'N/A';\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getDVRTasks = function() {\n var params = {\n 'state[eq]': 'recorded'\n };\n DVRTasksResource.count(params).$promise\n .then(function (response) {\n $scope.successDVRTasks = response.data ? response.data : 0;\n return;\n })\n .catch(function (reason) {\n $scope.successDVRTasks = 0;\n $rootScope.debugInfo(reason);\n });\n\n DVRTasksResource.count().$promise\n .then(function (response) {\n $scope.totalDVRTasks = response.data ? response.data : 0;\n return;\n })\n .catch(function (reason) {\n $scope.totalDVRTasks = 0;\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getOperator = function() {\n OperatorRsc.getCurrentOperator().$promise\n .then(function (response) {\n $scope.npvrState = response.data.npvr ? 'enabled' : 'disabled';\n $scope.npvrLimit = response.data.subscriber_npvr_limit ? response.data.subscriber_npvr_limit : 50;\n $scope.sessionLimit = response.data.playback_session_limit ? response.data.playback_session_limit : 3;\n return;\n })\n .catch(function (reason) {\n $scope.npvrState = 'N/A';\n $scope.npvrLimit = 50;\n $scope.sessionLimit = 3;\n\n $rootScope.debugInfo(reason);\n });\n };\n\n\n $scope.getOrigins();\n $scope.getNPVRNodes();\n $scope.getAssets();\n $scope.getDVRTasks();\n $scope.getOperator();\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:LiveController\n * @description\n * # LiveController\n * Controller of the lmApp\n */\n\nlmApp\n .controller('LiveController2', ['$routeParams', '$location', '$q', '$scope', '$templateCache', '$compile', '$rootScope', '$timeout', 'ValidatorService', 'AssetService', 'MetadataService', 'ToastService', 'ModalWindowService', 'ModalConfirmService', 'VirtualLiveApiService', 'ImportService', 'AssetResource',\n function ($routeParams, $location, $q, $scope, $templateCache, $compile, $rootScope, $timeout, ValidatorService, AssetService, MetadataService, ToastService, ModalWindowService, ModalConfirmService, VirtualLiveApiService, ImportService, AssetResource) {\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_LIVE_COLLECTION: 'update:live:collection'});\n\n $scope.collection = [];\n $scope.loading = false;\n $scope.importInProgress = false;\n\n $scope.getAssetType = function (asset) {\n\n switch (true) {\n case asset.type === 'channel' && asset.channel_type !== 'playlist':\n return 'channel';\n break;\n\n case asset.type === 'channel' && asset.channel_type === 'playlist':\n return 'virtual-channel';\n break;\n\n case asset.type === 'package' && asset.package_type === 'tv_series':\n return 'tv_series';\n break;\n\n case asset.type === 'movie' && !!asset.tv_series_episode:\n return 'tv_episode';\n break;\n\n case asset.type === 'movie':\n return 'movie';\n break;\n }\n\n };\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.parseAsset = function (asset) {\n asset._PrivateData = {};\n\n asset.type = $scope.getAssetType(asset);\n\n asset.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.stream_type.indexOf('youtube') !== -1) {\n asset._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n });\n\n if (asset.channel_type === 'playlist') {\n\n asset._playlist = {};\n\n VirtualLiveApiService.GetPlaylist(asset.id)\n .then(function (playlist) {\n asset._playlist = playlist;\n\n });\n }\n\n return asset;\n };\n\n $scope.total = 0;\n\n var getTotal = function(params) {\n params = {};\n params['type[in]'] = 'channel';\n\n AssetResource.count(params).$promise\n .then(function (response) {\n $scope.total = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.collectionData = {\n empty: false,\n error: '',\n filters: {\n genres: [],\n categories: [],\n keyword: ''\n },\n offset: 0,\n limit: 20,\n isStart: false,\n isEnd: false,\n isEmpty: function () {\n return !$scope.loading && !$scope.collection.length;\n },\n update: function (who) {\n if (!who.isSilentUpdate) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#liveCollectionLoader');\n }\n\n getTotal();\n\n $scope.collectionData.empty = false;\n $scope.collectionData.error = false;\n\n var allQ = {};\n\n if (ValidatorService.Numerical(who.id)) {\n allQ.byId = AssetService.GetAssetById(who.id);\n }\n\n if (who.id === 'all') {\n $scope.collection = [];\n this.isEnd = false;\n this.isStart = false;\n\n this.isStart = this.offset < this.limit;\n\n if ($scope.collectionData.filters.keyword ||\n $scope.collectionData.filters.genres.length ||\n $scope.collectionData.filters.categories.length) {\n\n allQ.allLive = AssetService.Search($scope.collectionData.filters.keyword, {\n genres: _.map($scope.collectionData.filters.genres, 'id'),\n categories: _.map($scope.collectionData.filters.categories, 'id'),\n view: 'live'\n }, this.offset, this.limit + 1)\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n\n } else {\n allQ.allLive = AssetService.GetAllAvailableChannels(this.offset, this.limit + 1)\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n }\n }\n\n return $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n\n if (response.byId) {\n if (!response.byId.length) {\n this.update({id: 'all'});\n return;\n }\n\n var tmpAsset = response.byId[0];\n\n tmpAsset = $scope.parseAsset(tmpAsset);\n\n var found;\n if (who.isSearch) {\n $scope.collection = [tmpAsset];\n this.isEnd = true;\n\n } else if (who.collection) {\n console.log('Check this: ', location && location.href);\n\n found = _.find(who.collection, {id: tmpAsset.id});\n } else {\n\n found = _.find($scope.collection, {id: tmpAsset.id});\n }\n\n _.assign(found, tmpAsset);\n\n return $q.when(found);\n }\n\n if (response.allLive) {\n\n if (!response.allLive.length && $scope.collectionData.offset > 0) {\n $scope.collectionData.offset = 0;\n $scope.collectionData.limit = 20;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: 'all'\n });\n\n $location.search('page', 1);\n\n return;\n }\n\n response.allLive.forEach($scope.parseAsset);\n\n if (!response.allLive.length) {\n $scope.collectionData.empty = true;\n }\n\n $scope.collection = response.allLive;\n\n if ($scope.routeLiveId) {\n var currentLiveIndex = _.findIndex($scope.collection, {id: $scope.routeLiveId});\n\n if (currentLiveIndex !== -1) {\n $scope.openModal($scope.collection[currentLiveIndex], currentLiveIndex, $scope.collection, null, false);\n } else {\n $location.search('live_id', null);\n }\n }\n\n return $q.when($scope.collection);\n }\n }.bind(this))\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $rootScope.debugInfo(reason, 'silent');\n return false;\n });\n },\n nextPage: function () {\n if (this.isEnd) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n this.offset += $scope.collectionData.limit;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'});\n },\n prevPage: function () {\n if (this.isStart) return;\n\n if (this.offset >= this.limit) {\n this.offset -= this.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n this.offset = 0;\n $location.search('page', 1);\n }\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'});\n }\n };\n\n $scope.applyFilters = function (filters) {\n if ($scope.loading || _.isEmpty(filters)) return;\n\n if (filters.keyword ||\n filters.genres.length ||\n filters.categories.length) {\n $scope.collectionData.offset = 0;\n }\n\n if (ValidatorService.Numerical(filters.keyword)) {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: filters.keyword,\n isSearch: true\n });\n } else {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'})\n }\n };\n\n $scope.deleteAsset = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n ModalConfirmService.Open({\n content: '

    Delete

    This action will delete content permanently. ' +\n 'Are You sure?

    ',\n action: {\n title: 'Delete',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#liveCollectionLoader');\n\n AssetService.DeleteAsset(asset)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: 'all'\n });\n })\n .catch(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' delete failed',\n color: 'red',\n icon: 'delete'\n }, 1000 * 3);\n });\n }\n }\n });\n };\n\n //When modal window open = save Data for edit\n $scope.openModal = function (assetData, index, collection, e, isNewType) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n var modalScope = $rootScope.$new();\n\n modalScope.currentFocused = index;\n modalScope.localCollection = collection;\n modalScope.isNewType = isNewType;\n\n if (isNewType) {\n switch (isNewType) {\n case 'channel':\n var originAssetData = {\n platform_id: [],\n categories: [],\n traits: [],\n operator_id: [],\n resources: [],\n genres: [],\n is_epg_available: false,\n views: [],\n offers: [],\n group_id: [],\n package_id: [],\n tags: []\n };\n originAssetData._PrivateData = {};\n originAssetData._PrivateData.isNew = true;\n originAssetData.type = isNewType;\n _.defaults(originAssetData, assetData);\n break;\n\n case 'virtual-channel':\n var originAssetData = {\n platform_id: [],\n categories: [],\n traits: [],\n operator_id: [],\n resources: [],\n genres: [],\n views: [],\n offers: [],\n group_id: [],\n package_id: [],\n tags: [],\n _playlist: {\n groups: [],\n start: 0\n }\n };\n\n originAssetData._PrivateData = {};\n originAssetData._PrivateData.isNew = true;\n originAssetData.type = isNewType;\n _.defaults(originAssetData, assetData);\n break;\n }\n\n modalScope.asset = originAssetData;\n } else {\n modalScope.asset = angular.copy(assetData);\n modalScope.asset._PrivateData = {};\n $location.search('live_id', modalScope.asset.id);\n }\n\n modalScope.loading = false;\n\n modalScope.processAsset = function (asset) {\n if (modalScope.loading) return;\n\n if (asset._PrivateData.isNew) {\n modalScope.createFn(asset);\n } else {\n modalScope.updateFn(asset, modalScope.currentFocused);\n }\n };\n\n modalScope.setCurrentQuality = function (asset, value) {\n\n MetadataService.Quality.SetValue(asset, value);\n };\n\n modalScope.isFirst = function () {\n return !modalScope.currentFocused;\n };\n\n modalScope.isLast = function () {\n return modalScope.localCollection && modalScope.currentFocused === modalScope.localCollection.length - 1;\n };\n\n modalScope.close = function () {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n ModalWindowService.Close($scope.window, false);\n $location.search('live_id', null);\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope._modalWindow_ = $templateCache.get('lm-assets-edit/edit-window.tpl.html');\n\n modalScope._modalWindow_ = $compile(modalScope._modalWindow_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-assets-edit/navigation-buttons.tpl.html'))(modalScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n },\n clearRoute: ['vod_id']\n });\n\n modalScope._modalWindow_.on('$destroy', function () {\n modalScope.$destroy();\n })\n };\n\n $scope.importPerform = function () {\n\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope.importInProgress = true;\n $scope._progress_.css({'display': 'block'});\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, $scope._progress_)\n .then(function (response) {\n $scope._progress_.css({'display': 'none'});\n $scope._bar_.css({width: 0});\n\n ImportService.CreatePerformImport(response.Location)\n .then(function () {\n $scope.importInProgress = false;\n\n ToastService.Big({\n title: 'Import will continue in background. Check this page later.',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.importInProgress = false;\n $scope._progress_.css({'display': 'none'});\n $scope._bar_.css({width: 0});\n\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n $scope.broadcastListener = $rootScope.$on($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, function (event, data) {\n $scope.collectionData.update(data);\n });\n\n /**\n * Init collection on controller add\n */\n $scope.routePage = 1;\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.collectionData.offset = ($scope.routePage - 1) * $scope.collectionData.limit;\n $scope.collectionData.limit = 20;\n } else {\n $location.search('page', 1);\n }\n\n $scope.routeLiveId = null;\n if (!_.isUndefined($routeParams.live_id)) {\n $scope.routeLiveId = Number($routeParams.live_id);\n } else {\n $location.search('live_id', null);\n }\n\n $scope.routeKeyword = '';\n if (!_.isUndefined($routeParams.keyword)) {\n $scope.routeKeyword = $routeParams.keyword;\n $scope.collectionData.filters.keyword = $routeParams.keyword;\n } else {\n $location.search('keyword', null);\n }\n\n $scope.watcherFiler = $scope.$watchCollection('collectionData.filters', function (newValue, oldValue) {\n if (oldValue && newValue) {\n\n //TODO: Check this logic\n if (!newValue.keyword && !newValue.genres.length && !newValue.categories.length\n && (oldValue.keyword || oldValue.genres.length || oldValue.categories.length)) {\n $scope.collectionData.offset = 0;\n $location.search('page', 1);\n $scope.applyFilters(newValue);\n $location.search('keyword', null);\n }\n\n //if (!oldValue.keyword && !oldValue.genres.length && !oldValue.categories.length) {\n // $scope.collectionData.offset = 0;\n //}\n\n if (newValue.keyword || newValue.genres.length || newValue.categories.length) {\n $location.search('page', 1);\n if (newValue.keyword) $location.search('keyword', newValue.keyword);\n $scope.applyFilters(newValue);\n }\n }\n });\n\n $scope.$on('$routeUpdate', function () {\n $scope.routePage = $routeParams.page || 1;\n\n if ($scope.routeLiveId && !$routeParams.live_id) {\n ModalWindowService.Close($scope.window, false);\n }\n $scope.routeLiveId = Number($routeParams.live_id) || null;\n\n if ($scope.routeKeyword && !$routeParams.keyword) {\n $scope.collectionData.filters.keyword = '';\n $scope.routeKeyword = '';\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all', collection: $scope.collection});\n }\n $scope.routeKeyword = $routeParams.keyword || '';\n });\n\n $scope.applyFilters($scope.collectionData.filters);\n\n AssetService.GetPlatforms()\n .then(function (data) {\n $rootScope.platforms = data;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n $scope.$on('$destroy', function () {\n $scope.watcherFiler();\n $scope.broadcastListener();\n\n angular.element('#import_xml').off('change');\n });\n\n }]);\n","lmApp\n .controller('LiveController', ['$routeParams', '$location', '$q', '$scope', '$templateCache', '$compile', '$rootScope', '$timeout', '$interval', 'AssetService', 'MetadataService', 'ModalWindowService', 'ToastService', 'ValidatorService', 'ModalConfirmService', 'ImportService', 'AssetResource', 'TimezoneService', 'ManagerResource', 'GenreResource', 'CategoryResource', 'LiveEventResource', 'SubscriberResource', 'SubscriberV2Service', 'LiveEventService', 'AssetV2Service',\n function ($routeParams, $location, $q, $scope, $templateCache, $compile, $rootScope, $timeout, $interval, AssetService, MetadataService, ModalWindowService, ToastService, ValidatorService, ModalConfirmService, ImportService, AssetResource, TimezoneService, ManagerResource, GenreResource, CategoryResource, LiveEventResource, SubscriberResource, SubscriberV2Service, LiveEventService, AssetV2Service) {\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n /////////////\n $scope.assets = [];\n $scope.limit = 20;\n $scope.offset = 0;\n $scope.total = 0;\n\n $scope.filters = {\n name: '',\n lcn: '',\n packages: [],\n categories: [],\n genres: []\n };\n ///\n $scope.findSubscriberLoading = false;\n $scope.subscribers = []\n $scope.selectedSubscriber = {}\n $scope.catchupSubscriber = {}\n $scope.selectedResource = {\n id: 0,\n loading: false,\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n }\n\n $scope.date = {}\n $scope.searchEvent = '';\n $scope.liveEvents = []\n $scope.liveEvent = {}\n $scope.catchupStream = {\n loading: false,\n type: 'hls',\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n }\n\n var processAsset = function(asset) {\n var processed = {\n id: asset.id,\n extid: asset.ext_id,\n createTime: asset.create_time,\n updateTime: asset.update_time,\n type: asset.type,\n name: asset.name,\n description: asset.description,\n lcn: asset.lcn,\n rotationStart: asset.rotation_start,\n rotationFinish: asset.rotation_finish,\n provider: asset.provider ? asset.provider.name : '',\n adult: asset.adult ? 'Yes' : 'No',\n categories: asset.categories || [],\n genres: asset.genres || [],\n vastId: asset.vast_id || '',\n epg: {\n id: 0,\n extid: '',\n },\n poster: {\n state: '',\n url: '',\n source: ''\n },\n streams: [],\n catchup: {\n id: 0,\n state: '',\n },\n streamResources: [],\n packages: asset.packages || [],\n rotationPeriodOK: true,\n free: asset.free || false,\n conditions: {\n ready: processCondition({})\n }\n };\n\n if (moment(asset.rotation_start).diff(moment()) > 0 || moment(asset.rotation_finish).diff(moment()) < 0) {\n processed.rotationPeriodOK = false;\n }\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n processed.poster.state = r.state;\n processed.poster.url = r.url;\n processed.poster.source = r.source;\n continue\n }\n if (r.category === 'catchup') {\n processed.catchup.id = r.id;\n processed.catchup.state = r.state;\n }\n var pr = {\n id: r.id,\n type: r.type.toUpperCase(),\n state: r.state,\n deployer: r.deployer,\n preparer: r.preparer,\n added: r.create_time,\n private: r.private,\n URL: r.source,\n category: r.category,\n tags: '',\n depth: parseInt(r.catchup_depth) || 0\n }\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n pr.tags = r.deployer_args.cdn_tag;\n }\n if (r.type === 'dash-live' || r.type === 'hls-live' || r.type === 'shoutcast' || r.type === 'hls-live-protected' || r.type === 'dash-live-protected') {\n processed.streams.push(pr)\n }\n processed.streamResources.push(pr)\n }\n }\n\n if (asset.epg) {\n processed.epg.id = asset.epg.id\n processed.epg.extid = asset.epg.ext_id\n }\n\n if (asset.conditions) {\n var ready = asset.conditions.filter(function(c) {\n if (c.type === 'ready') return c;\n });\n if (ready.length) {\n processed.conditions.ready = processCondition(ready[0]);\n }\n }\n\n return processed;\n };\n\n var processCondition = function (condition) {\n return {\n id: condition.id || 0,\n required: condition.required || false,\n type: condition.type || '',\n state: condition.state || ''\n }\n };\n\n var getTotal = function(params) {\n if (params === undefined) {\n params = {\n 'type[eq]': 'channel'\n };\n }\n\n if (params.hasOwnProperty('$match') && params['$match'] !== '') {\n AssetResource.get(params).$promise\n .then(function (assets) {\n $scope.total = assets.length;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n AssetResource.count(params).$promise\n .then(function (response) {\n $scope.total = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }\n };\n\n //getTotal();\n\n $scope.getAssets = function (silent) {\n if ($scope.loading) return;\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#liveCollectionLoader');\n }\n\n var params = {\n 'type[eq]': 'channel'\n };\n\n if ($scope.filters.name.trim() !== '') {\n params['$match'] = $scope.filters.name.trim();\n }\n\n if ($scope.filters.genres.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.genres.length; i++) {\n ids.push($scope.filters.genres[i].id);\n }\n params['genres.id[in]'] = ids.join(',');\n }\n\n if ($scope.filters.categories.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.categories.length; i++) {\n ids.push($scope.filters.categories[i].id);\n }\n params['categories.id[in]'] = ids.join(',');\n }\n\n if ($scope.filters.packages.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.packages.length; i++) {\n ids.push($scope.filters.packages[i].id);\n }\n params['packages.id[in]'] = ids.join(',');\n }\n\n getTotal(params);\n\n params['$limit'] = $scope.limit;\n params['$offset'] = $scope.offset;\n params['$expand'] = 'resources(url),categories,genres,packages,provider,epg,country,conditions';\n params['$orderby'] = _.get($scope.collectionData.sortBy, 'field', '');\n\n AssetResource.get(params).$promise\n .then(function (assets) {\n if (assets.length === 0 && $scope.routePage != 1) {\n $scope.routePage = 1;\n $scope.offset = 0;\n $scope.loading = false;\n $location.search('page', $scope.routePage);\n } else {\n var processed = [];\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n processed.push(processAsset(asset));\n }\n $scope.assets = processed;\n $scope.loading = false;\n }\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n if (silent !== true) {\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n }\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.nextPage = function () {\n if ($scope.offset + $scope.limit < $scope.total) {\n $scope.offset = $scope.offset + $scope.limit;\n $scope.routePage = Number($scope.routePage) + 1;\n $location.search('page', $scope.routePage);\n }\n };\n\n $scope.prevPage = function () {\n if ($scope.offset - $scope.limit >= 0) {\n $scope.offset = $scope.offset - $scope.limit;\n $scope.routePage = Number($scope.routePage) - 1;\n } else {\n $scope.offset = 0;\n $scope.routePage = 1;\n }\n $location.search('page', $scope.routePage);\n };\n\n\n $scope.clearSelectedVOD = function () {\n $scope.selectedVOD = {};\n $scope.selectedResource = {\n id: 0,\n loading: false,\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n wvLicenseURL: '',\n fpsLicenseURL: '',\n fpsCertURL: '',\n type: '',\n }\n $location.search('asset_id', null);\n };\n\n $scope.isAssetSelected = function () {\n return !_.isEmpty($scope.selectedVOD);\n };\n\n $scope.selectVOD = function(asset) {\n $location.search('asset_id', asset.id);\n };\n\n $scope.selectAsset = function (asset, silent) {\n if (!asset.type) {\n if (silent !== true) {\n $scope.selectedVOD = {};\n }\n var selectedParams = {};\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#liveCollectionLoader');\n }\n selectedParams['id[eq]'] = asset.id;\n selectedParams['$expand'] = 'resources(url),categories,genres,packages,provider,epg,country,conditions';\n AssetResource.get(selectedParams).$promise\n .then(function (result) {\n if (result.length) {\n $scope.selectAsset(processAsset(result[0]), silent);\n } else {\n $location.search('asset_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n }\n })\n .catch(function (reason) {\n $location.search('asset_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n $rootScope.debugInfo(reason, 'silent');\n });\n return;\n }\n\n $scope.selectedVOD = asset;\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#liveCollectionLoader');\n }\n if (asset.streams.length > 0) {\n $scope.selectedResource.id = asset.streams[0].id + ''\n }\n\n $scope.date.currentDate = moment.utc();\n var params = {\n 'live.id[eq]': $scope.selectedVOD.id,\n 'end_time[gt]': $scope.date.currentDate.startOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n 'start_time[lt]': $scope.date.currentDate.endOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n //'start_time[gt]': $scope.date.currentDate.startOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n //'end_time[lt]': $scope.date.currentDate.endOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n '$expand': 'thumbnail(url)'\n };\n\n if ($scope.watcher) $scope.watcher();\n $scope.watcher = $scope.$watch('date.currentDate', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n var params = {\n 'live.id[eq]': $scope.selectedVOD.id,\n 'end_time[gt]': moment(newValue).startOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n 'start_time[lt]': moment(newValue).endOf('day').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n '$expand': 'thumbnail(url)'\n };\n $scope.getLiveEvents(params);\n }\n });\n $scope.getLiveEvents(params);\n\n /* for (var i = 0; i < $scope.selectedVOD.streams.length; i++) {\n $scope.selectedVOD.streams[i].type += \"-protected\"\n }*/\n\n var ids = [];\n ids.push(asset.id);\n for (var i = 0; i < asset.packages.length; i++) {\n ids.push(asset.packages[i].id);\n }\n\n $scope.selectedVOD.purchaseOptions = {};\n $scope.selectedVOD.packagePurchaseOptions = [];\n\n AssetService.GetAssetInId(ids)\n .then(function (assets) {\n for (var i = 0; i < assets.length; i++) {\n var a = assets[i];\n var purchaseOptions = {\n package: a.title,\n free: false,\n plans: []\n };\n for (var j = 0; j < a.offers.length; j++) {\n var offer = a.offers[j];\n if (offer.type === 'free') {\n purchaseOptions.free = true;\n } else {\n purchaseOptions.plans.push(offer.name);\n }\n }\n if (a.id === asset.id) {\n if (asset.free) purchaseOptions.free = true;\n $scope.selectedVOD.purchaseOptions = purchaseOptions;\n } else {\n $scope.selectedVOD.packagePurchaseOptions.push(purchaseOptions);\n }\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n });\n\n\n ids = [];\n for (var i = 0; i < asset.packages.length; i++) {\n ids.push(asset.packages[i].id);\n }\n if (ids.length) {\n var params = {};\n params['id[in]'] = ids.join(',');\n params['$expand'] = 'groups';\n AssetResource.get(params).$promise\n .then(function (assets) {\n var groups = {};\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n if (asset.groups) {\n for (var j = 0; j < asset.groups.length; j++) {\n if (!groups.hasOwnProperty(asset.groups[j].name)) {\n groups[asset.groups[j].name] = {\n group: asset.groups[j].name,\n packages: {}\n }\n }\n groups[asset.groups[j].name].packages[asset.name] = true;\n }\n }\n }\n $scope.selectedVOD.groups = [];\n for (var groupName in groups) {\n if (!groups.hasOwnProperty(groupName)) {\n continue\n }\n var packages = [];\n for (var packageName in groups[groupName].packages) {\n if (!groups[groupName].packages.hasOwnProperty(packageName)) {\n continue\n }\n packages.push(packageName);\n }\n $scope.selectedVOD.groups.push({\n name: groupName,\n packages: packages\n })\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n };\n\n var processLiveEvent = function(liveEvent) {\n var processed = {\n id: liveEvent.id,\n name: liveEvent.name,\n description: liveEvent.description,\n startTime: moment(liveEvent.start_time).format('HH:mm'),\n endTime: moment(liveEvent.end_time).format('HH:mm'),\n start: moment(liveEvent.start_time).format('D MMM HH:mm'),\n end: moment(liveEvent.end_time).format('D MMM HH:mm'),\n pictureURL: '',\n catchup: liveEvent.catchup\n };\n if (liveEvent.thumbnail) {\n processed.pictureURL = liveEvent.thumbnail.url;\n }\n return processed;\n };\n\n $scope.getLiveEvents = function (params) {\n $scope.liveEvents = [];\n\n LiveEventResource.get(params).$promise\n .then(function (liveEvents) {\n $scope.liveEvents = liveEvents.map(function(le) {\n return processLiveEvent(le);\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }\n\n $scope.reloadAsset = function (asset) {\n var selectedParams = {};\n selectedParams['id[eq]'] = asset.id;\n selectedParams['type[eq]'] = 'channel';\n selectedParams['$expand'] = 'resources(url),categories,genres,packages,provider,epg,country,conditions';\n AssetResource.get(selectedParams).$promise\n .then(function (result) {\n if (result.length) {\n var processed = processAsset(result[0]);\n $scope.selectedVOD.updateTime = processed.updateTime;\n $scope.selectedVOD.poster = processed.poster;\n $scope.selectedVOD.streams = processed.streams;\n $scope.selectedVOD.streamResources = processed.streamResources;\n $scope.selectedVOD.conditions = processed.conditions;\n } else {\n $location.search('asset_id', null);\n }\n })\n .catch(function (reason) {\n $location.search('asset_id', null);\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n /////////////\n\n $scope.permissions = $rootScope.permissions;\n\n $scope.collection = [];\n $scope.loading = false;\n $scope.importInProgress = false;\n ///\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.sortOptions = [\n {title: \"ID Asc\", field: \"id\"},\n {title: \"ID Desc\", field: \"-id\"},\n {title: \"Name A-Z\", field: \"name\"},\n {title: \"Name Z-A\", field: \"-name\"},\n {title: \"LCN Asc\", field: \"lcn\"},\n {title: \"LCN Desc\", field: \"-lcn\"},\n {title: \"Rotation Start Asc\", field: \"rotation_start\"},\n {title: \"Rotation Start Desc\", field: \"-rotation_start\"},\n {title: \"Rotation End Asc\", field: \"rotation_end\"},\n {title: \"Rotation End Desc\", field: \"-rotation_end\"},\n {title: \"Create Time Asc\", field: \"create_time\"},\n {title: \"Create Time Desc\", field: \"-create_time\"},\n ];\n\n $scope.collectionData = {\n empty: false,\n error: '',\n filters: {\n genres: [],\n categories: [],\n keyword: ''\n },\n sortBy: {title: \"ID Desc\", field: \"-id\"},\n offset: 0,\n limit: 20,\n isStart: false,\n isEnd: false,\n };\n\n var sortBy = window.localStorage['live_sortby'];\n if (sortBy && sortBy !== 'undefined') {\n try {\n $scope.collectionData.sortBy = JSON.parse(sortBy);\n } catch (e) {\n }\n }\n\n $scope.deleteAsset = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the ' + asset.type + ' \"' + asset.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n AssetResource.remove({id: asset.id}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n ToastService.Small({\n title: 'Channel: ' + asset.name + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n },1000 * 3);\n $scope.getAssets();\n if ($routeParams.asset_id) {\n $scope.clearSelectedVOD();\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#liveCollectionLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Channel: ' + asset.name + ' delete failed',\n color: 'red',\n icon: 'delete'\n },1000 * 3);\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {}\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n //When modal window open = save Data for edit\n $scope.openModal = function (asset, e, isNewType, id) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n var modalScope = $rootScope.$new();\n\n if (isNewType) {\n modalScope.asset = {type: isNewType};\n } else {\n modalScope.asset = angular.copy(asset);\n }\n\n modalScope.loading = false;\n\n modalScope.processAsset = function (asset) {\n if (modalScope.loading) return;\n\n if (isNewType && !id) {\n modalScope.createFn();\n } else {\n modalScope.updateFn(asset);\n }\n };\n\n modalScope.close = function (id) {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n ModalWindowService.Close($scope.window, false);\n if (id === -1) {\n AssetResource.update({id: asset.id}, { name: asset.name }).$promise\n .then(function (response) {\n $scope.selectAsset({id: asset.id});\n })\n .catch(function (reason) {\n });\n return;\n }\n if (id) {\n if ($routeParams.asset_id == id) {\n $scope.selectAsset({id: id});\n } else {\n $location.search('asset_id', id);\n }\n }\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope._modalWindow_ = $templateCache.get('lm-asset-edit/edit-window.tpl.html');\n\n modalScope._modalWindow_ = $compile(modalScope._modalWindow_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-asset-edit/navigation-buttons.tpl.html'))(modalScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n }\n });\n\n modalScope._modalWindow_.on('$destroy', function () {\n modalScope.$destroy();\n })\n };\n\n $scope.importPerform = function () {\n\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope.importInProgress = true;\n $scope._progress_.css({ 'display': 'block' });\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, $scope._progress_)\n .then(function (response) {\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n ImportService.CreatePerformImport(response.Location)\n .then(function () {\n $scope.importInProgress = false;\n\n ToastService.Big({\n title: 'Import will continue in background. Check this page later.',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.importInProgress = false;\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n // Stream Check\n var searchTimeout;\n $scope.findSubscriber = function(text) {\n if (!text) return;\n text = text.trim();\n if (text === '') return;\n if (searchTimeout) $timeout.cancel(searchTimeout);\n $scope.findSubscriberLoading = true;\n searchTimeout = $timeout(function () {\n var params = {};\n params['$limit'] = 1000;\n params['$match'] = text\n SubscriberResource.get(params).$promise\n .then(function (result) {\n var users = (result.data || []);\n var userList = [];\n for (var i = 0; i < users.length; i++) {\n const subscriber = users[i];\n userList.push({\n id: subscriber.id,\n title: subscriber.username,\n });\n }\n $scope.subscribers = userList;\n $scope.findSubscriberLoading = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n }, 650);\n };\n\n $scope.getSubscriberStreamURL = function(subscriber) {\n $scope.selectedResource.loading = true;\n $scope.selectedResource.subscriber = subscriber;\n $scope.refreshURL();\n };\n\n $scope.getCatchupStreamURL = function(subscriber) {\n $scope.catchupStream.loading = true;\n $scope.catchupStream.subscriber = subscriber;\n $scope.refreshCatchupURL();\n }\n\n $scope.copyURL = function(version) {\n var url = '';\n if ($scope.selectedResource.type === 'hls-live') {\n url = $rootScope.getHLSPlayerURL($scope.selectedResource.urlEsc);\n\n } else if ($scope.selectedResource.type === 'hls-live-protected') {\n url = 'https://vtb.axinom.com/fairplay_streaming_sample_player.html?url=' + $scope.selectedResource.urlEsc + '&license=' + $scope.selectedResource.fpsLicenseURL + '&token=&certUrl=' + $scope.selectedResource.fpsCertURL;\n }\n if ($scope.selectedResource.type === 'dash-live' || $scope.selectedResource.type === 'dash-live-protected') {\n url = 'https://shaka-player-demo.appspot.com/demo/#asset=' + $scope.selectedResource.url + ';license=' + $scope.selectedResource.wvLicenseURL;\n }\n if (version === '3.3.2') {\n url = 'https://demo24.noisypeak.com:8083/demo/#asset=' + $scope.selectedResource.url + ';license=' + $scope.selectedResource.wvLicenseURL;\n }\n if (version === 'dashif') {\n url = 'https://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html?mpd=' + $scope.selectedResource.urlEsc + '&widevine.isActive=true&widevine.drmKeySystem=com.widevine.alpha&widevine.licenseServerUrl=' + $scope.selectedResource.wvLicenseURLEsc + '&widevine.priority=0&widevine.httpTimeout=5000&widevine.audioRobustness=SW_SECURE_CRYPTO&widevine.videoRobustness=SW_SECURE_DECODE+&debug.logLevel=4';\n }\n $scope.copy(url)\n }\n\n $scope.copyCatchupURL = function() {\n var url = '';\n if ($scope.catchupStream.type === 'hls') {\n url = $rootScope.getHLSPlayerURL($scope.catchupStream.urlEsc);\n } else {\n url = 'https://shaka-player-demo.appspot.com/demo/#asset=' + $scope.catchupStream.url;\n }\n $scope.copy(url);\n }\n\n $scope.copy = function(value) {\n const tempInput = document.createElement('input')\n tempInput.style = 'position: absolute; left: -1000px; top: -1000px'\n tempInput.value = value\n document.body.appendChild(tempInput)\n tempInput.select()\n document.execCommand('copy')\n document.body.removeChild(tempInput)\n }\n\n $scope.refreshURL = function() {\n if (!$scope.selectedResource.subscriber.title) {\n return\n }\n $scope.selectedResource.loading = true;\n\n for (var i = 0; i < $scope.selectedVOD.streams.length; i++) {\n if ($scope.selectedVOD.streams[i].id == $scope.selectedResource.id) {\n $scope.selectedResource.type = $scope.selectedVOD.streams[i].type.toLowerCase();\n break;\n }\n }\n\n var clientId = '';\n for (var i=0; i < $rootScope._self.services.length; i++) {\n var service = $rootScope._self.services[i];\n if (service.instance && service.instance.platform && service.instance.platform.client_id) {\n clientId = service.instance.platform.client_id;\n break;\n }\n }\n if (clientId === '') {\n return;\n }\n\n return SubscriberV2Service.GetUserDeviceToken($scope.selectedResource.subscriber.title, clientId)\n .then(function (result) {\n if (result.data) {\n var token = result.data;\n\n if ($scope.selectedResource.type === 'hls-live-protected' || $scope.selectedResource.type === 'dash-live-protected' || $scope.selectedResource.type === 'dash-live') {\n AssetV2Service.GetProtectedStream($scope.selectedVOD.id, $scope.selectedResource.id, token)\n .then(function (response) {\n var streamInfo = response.data;\n $scope.selectedResource.url = streamInfo.playback_url;\n $scope.selectedResource.urlEsc = escape(streamInfo.playback_url);\n $scope.selectedResource.loading = false;\n $scope.selectedResource.error = '';\n $scope.selectedResource.wvLicenseURL = streamInfo.wv_license_url;\n $scope.selectedResource.wvLicenseURLEsc = escape(streamInfo.wv_license_url);\n $scope.selectedResource.fpsLicenseURL = escape(streamInfo.fps_license_url);\n $scope.selectedResource.fpsCertURL = escape(streamInfo.fps_cert_url);\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n if (reason.data.error) {\n $scope.selectedResource.error = reason.data.error.message;\n }\n $scope.selectedResource.url = '';\n $scope.selectedResource.urlEsc = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n AssetV2Service.GetStream($scope.selectedVOD.id, $scope.selectedResource.id, token)\n .then(function (response) {\n var streamURL = response.data;\n $scope.selectedResource.url = streamURL;\n $scope.selectedResource.urlEsc = escape(streamURL);\n $scope.selectedResource.loading = false;\n $scope.selectedResource.error = '';\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n if (reason.data.error) {\n $scope.selectedResource.error = reason.data.error.message;\n }\n $scope.selectedResource.url = '';\n $scope.selectedResource.urlEsc = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n }\n } else {\n $scope.selectedResource.loading = false;\n }\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n $scope.refreshCatchupURL = function() {\n if (!$scope.catchupStream.subscriber.title) {\n return\n }\n $scope.catchupStream.loading = true;\n\n var clientId = '';\n for (var i=0; i < $rootScope._self.services.length; i++) {\n var service = $rootScope._self.services[i];\n if (service.instance && service.instance.platform && service.instance.platform.client_id) {\n clientId = service.instance.platform.client_id;\n break;\n }\n }\n if (clientId === '') {\n return;\n }\n\n return SubscriberV2Service.GetUserDeviceToken($scope.catchupStream.subscriber.title, clientId)\n .then(function (result) {\n if (result.data) {\n var token = result.data;\n\n LiveEventService.GetStream($scope.liveEvent.id, $scope.catchupStream.type, token)\n .then(function (response) {\n $scope.catchupStream.url = response.data;\n $scope.catchupStream.urlEsc = escape(response.data);\n $scope.catchupStream.loading = false;\n $scope.catchupStream.error = '';\n })\n .catch(function (reason) {\n $scope.catchupStream.loading = false;\n if (reason.data.error) {\n $scope.catchupStream.error = reason.data.error.message;\n }\n $scope.catchupStream.url = '';\n $scope.catchupStream.urlEsc = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n $scope.catchupStream.loading = false;\n }\n })\n .catch(function (reason) {\n $scope.catchupStream.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n $scope.openProgram = function (liveEvent) {\n if ($scope.loading) return;\n\n $scope.liveEvent = angular.copy(liveEvent);\n $scope.catchupStream = {\n loading: false,\n type: 'hls',\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n }\n\n\n/* $scope.selectStreamAsUser = function() {\n if ($scope.program.state !== 'recorded') return;\n var clientId = '';\n for (var i=0; i < $rootScope._self.services.length; i++) {\n var service = $rootScope._self.services[i];\n if (service.instance && service.instance.platform && service.instance.platform.client_id) {\n clientId = service.instance.platform.client_id;\n break;\n }\n }\n if (clientId === '') {\n return;\n }\n\n return SubscriberV2Service.GetUserDeviceToken($scope.program._subscriber_ext_id, clientId)\n .then(function (result) {\n if (result.data) {\n var token = result.data;\n $scope.playAsUser = true;\n\n DVRTaskService.GetStream($scope.program.id, token, $scope.selectedStreamType)\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error.message;\n }\n $scope.selectedStream = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n $scope.streamLoading = false;\n }\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n $rootScope.debugInfo(reason, 'silent');\n });\n\n };*/\n\n $scope.changeType = function(type) {\n $scope.selectedStreamType = type;\n if ($scope.playAsUser) {\n $scope.selectStreamAsUser();\n } else {\n $scope.selectStreamAsAdmin();\n }\n };\n\n var inner = $templateCache.get('live-event.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Close',\n color: 'red',\n fn: function () {}\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n /**\n * Init collection on controller add\n */\n $scope.routeKeyword = '';\n if (!_.isUndefined($routeParams.keyword)) {\n $scope.routeKeyword = $routeParams.keyword;\n $scope.collectionData.filters.keyword = $routeParams.keyword;\n $scope.filters.name = $routeParams.keyword;\n } else {\n $location.search('keyword', null);\n }\n\n $scope.routePage = 1;\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.offset = ($scope.routePage - 1) * $scope.limit;\n $scope.getAssets();\n } else {\n $location.search('page', 1);\n }\n\n $scope.routeAssetId = null;\n if ($routeParams.asset_id) {\n $scope.routeAssetId = Number($routeParams.asset_id);\n $scope.selectAsset({id: $scope.routeAssetId})\n } else {\n $location.search('asset_id', null);\n }\n\n ///\n $scope.watcherFiler = $scope.$watchCollection('collectionData.filters', function (newValue, oldValue) {\n if (oldValue && newValue) {\n $scope.filters.name = newValue.keyword\n $scope.filters.genres = newValue.genres\n $scope.filters.categories = newValue.categories\n\n if (newValue.keyword || newValue.genres.length || newValue.categories.length) {\n $location.search('page', 1);\n }\n\n if (newValue.keyword) {\n $location.search('keyword', newValue.keyword);\n } else {\n $location.search('keyword', null);\n }\n\n\n/* //TODO: Check this logic\n if (!newValue.keyword && !newValue.genres.length && !newValue.categories.length\n && (oldValue.keyword || oldValue.genres.length || oldValue.categories.length)) {\n $scope.collectionData.offset = 0;\n $location.search('page', 1);\n $scope.applyFilters(newValue);\n $location.search('keyword', null);\n }\n\n //if (!oldValue.keyword && !oldValue.genres.length && !oldValue.categories.length) {\n // $scope.collectionData.offset = 0;\n //}\n\n if (newValue.keyword || newValue.genres.length || newValue.categories.length) {\n $location.search('page', 1);\n if (newValue.keyword) $location.search('keyword', newValue.keyword);\n $scope.applyFilters(newValue);\n }*/\n }\n });\n\n ////\n $scope.sortWatcher = $scope.$watchCollection('collectionData.sortBy', function (newValue, oldValue) {\n if (oldValue && newValue) {\n if (newValue.title !== oldValue.title) {\n $scope.getAssets();\n window.localStorage['live_sortby'] = JSON.stringify($scope.collectionData.sortBy);\n }\n }\n });\n\n /////\n $scope.$on('$routeUpdate', function () {\n // console.log(\"$routeUpdate\");\n //console.log(\"$routeParams.page\", $routeParams.page);\n //console.log(\"$scope.routePage\", $scope.routePage);\n //console.log(\"$scope.routeAssetId\", $scope.routeAssetId);\n //console.log(\"$routeParams.asset_id\", $routeParams.asset_id);\n\n $scope.routePage = $routeParams.page || 1\n\n if ($scope.routeAssetId && !$routeParams.asset_id) {\n ModalWindowService.Close($scope.window, false);\n }\n\n $scope.routeAssetId = Number($routeParams.asset_id) || null;\n if ($scope.routeAssetId) {\n $scope.selectAsset({id: $scope.routeAssetId})\n } else {\n $scope.clearSelectedVOD()\n }\n\n $scope.getAssets();\n });\n\n $scope.updateIntreval = $interval(function () {\n $scope.routeAssetId = Number($routeParams.asset_id) || null;\n if ($scope.routeAssetId) {\n var silent = false;\n if ($scope.isAssetSelected()) {\n silent = true;\n }\n $scope.reloadAsset({id: $scope.routeAssetId})\n } else {\n $scope.clearSelectedVOD();\n $scope.getAssets(true);\n }\n }, 15 * 1000);\n\n $scope.$on('$destroy', function () {\n $scope.watcherFiler();\n $scope.sortWatcher();\n $interval.cancel($scope.updateIntreval);\n\n angular.element('#import_xml').off('change');\n });\n\n }]);\n","lmApp\n .controller('MetaController', ['$scope', '$rootScope', '$templateCache', '$compile', '$routeParams', '$location', '$timeout', '$q', 'AssetService', 'MetadataService', 'ToastService', 'ModalWindowService',\n function ($scope, $rootScope, $templateCache, $compile, $routeParams, $location, $timeout, $q, AssetService, MetadataService, ToastService, ModalWindowService) {\n $scope.search = {\n newTitle: ''\n };\n //$scope.offset = 20;\n $scope.loading = false;\n $scope.searchShow = false;\n\n var _meta = ['genres', 'countries', 'categories', 'studios', 'providers'];\n\n $scope.getPromises = {\n genres: AssetService.GetGenresCollection,\n countries: AssetService.GetCountriesCollection,\n categories: AssetService.GetCategoryCollection,\n studios: AssetService.GetStudiosCollection,\n providers: AssetService.GetProvidersCollection\n };\n\n $scope.updatePromises = {\n genres: MetadataService.Genres.UpdateGenre,\n countries: MetadataService.Countries.UpdateCountry,\n studios: MetadataService.Studios.UpdateStudio,\n categories: MetadataService.Categories.UpdateCategory,\n providers: MetadataService.Providers.UpdateProvider\n };\n\n $scope.createPromises = {\n genres: MetadataService.Genres.CreateGenre,\n countries: MetadataService.Countries.CreateCountry,\n studios: MetadataService.Studios.CreateStudio,\n categories: MetadataService.Categories.CreateCategory,\n providers: MetadataService.Providers.CreateProvider\n };\n\n $scope.deletePromises = {\n genres: MetadataService.Genres.DeleteGenre,\n countries: MetadataService.Countries.DeleteCountry,\n studios: MetadataService.Studios.DeleteStudio,\n categories: MetadataService.Categories.DeleteCategory,\n providers: MetadataService.Providers.DeleteProvider\n };\n\n $scope.data = {};\n\n $scope.getCollections = function () {\n $rootScope.showLinearProgress('#metaLoader');\n $rootScope.loading = true;\n for (var key in $scope.getPromises) {\n (function (meta) {\n $scope.getPromises[meta]()\n .then(function (collection) {\n $rootScope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n\n $scope.data[meta] = _.orderBy(collection.filter(function (item, index) {\n item.index = index;\n if (!item.order) item.order = 0;\n return item.namespace !== 'epg';\n }), ['order'], ['desc']);\n })\n .catch(function (reason) {\n $rootScope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n\n $rootScope.debugInfo(reason);\n })\n })(key);\n }\n };\n\n $scope.setCurrentMeta = function (meta) {\n $scope.currentMeta = meta;\n //$scope.offset = 10;\n $location.search('meta', meta);\n };\n\n $scope.isCurrentMeta = function (meta) {\n return $scope.currentMeta === meta;\n };\n\n $scope.showMore = function () {\n // $scope.offset = $scope.data[$scope.currentMeta].length + 1000;\n };\n\n $scope.deleteItem = function (item) {\n if ($scope.loading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#metaLoader');\n\n $scope.deletePromises[$scope.currentMeta](item.id)\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' successfully deleted',\n color: 'green',\n icon: 'tag'\n });\n\n var index = $scope.data[$scope.currentMeta].indexOf(item);\n if (index !== -1) {\n $scope.data[$scope.currentMeta].splice(index, 1);\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' delete failed',\n color: 'red',\n icon: 'tag'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.updateItem = function (item) {\n item.error = false;\n\n if ($scope.loading) return;\n if (!item.title) {\n item.error = true;\n return;\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#metaLoader');\n\n $scope.updatePromises[$scope.currentMeta](item.id, item.title, item.order)\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' successfully updated',\n color: 'green',\n icon: 'tag'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' update failed',\n color: 'red',\n icon: 'tag'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createItem = function () {\n $scope.error = false;\n if ($scope.loading) return;\n\n if (!$scope.newTitle) {\n $scope.error = true;\n return;\n }\n $scope.loading = true;\n $rootScope.showLinearProgress('#metaLoader');\n\n $scope.createPromises[$scope.currentMeta]($scope.newTitle, $scope.newExtId, 0)\n .then(function (item) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' successfully created',\n color: 'green',\n icon: 'tag'\n });\n\n $scope.newTitle = '';\n $scope.newExtId = '';\n\n $scope.data[$scope.currentMeta].unshift(item[Object.keys(item)[0]]);\n\n if ($scope.win) {\n ModalWindowService.Close($scope.win, true);\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' creation failed ',\n color: 'red',\n icon: 'tag'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.changeItemPriority = function (items, index, direction) {\n items[index].isOver = false;\n\n var allQ = {};\n switch (direction) {\n case 'up':\n if (index > 0) {\n for (var i = 0; i < items.length; i++) {\n if (i === index) {\n items[i].order = i;\n allQ[i] = $scope.updatePromises[$scope.currentMeta](items[i].id, items[i].title, items[i].order);\n continue\n }\n if (i === index-1) {\n items[i].order = i+2;\n allQ[i] = $scope.updatePromises[$scope.currentMeta]( items[i].id, items[i].title, items[i].order);\n continue\n }\n if (items[i].order !== (i+1)) {\n items[i].order = i+1;\n allQ[i] = $scope.updatePromises[$scope.currentMeta](items[i].id, items[i].title, items[i].order);\n }\n }\n }\n\n break;\n\n case 'down':\n if (index < items.length - 1) {\n for (var i = 0; i < items.length - 1; i++) {\n if (i === index) {\n items[i].order = i+2;\n allQ[i] = $scope.updatePromises[$scope.currentMeta](items[i].id, items[i].title, items[i].order);\n continue\n }\n if (i === index+1) {\n items[i].order = i;\n allQ[i] = $scope.updatePromises[$scope.currentMeta]( items[i].id, items[i].title, items[i].order);\n continue\n }\n if (items[i].order !== (i+1)) {\n items[i].order = i+1;\n allQ[i] = $scope.updatePromises[$scope.currentMeta](items[i].id, items[i].title, items[i].order);\n }\n }\n }\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#metaLoader');\n\n for (var i = 0; i < $scope.data[$scope.currentMeta].length; i++) {\n var item = $scope.data[$scope.currentMeta][i];\n item.error = false;\n\n if (!item.title) {\n item.error = true;\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n return;\n }\n }\n\n $q.all(allQ)\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' order successfully updated',\n color: 'green',\n icon: 'tag'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' order update failed',\n color: 'red',\n icon: 'tag'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.showCreateWindow = function () {\n $scope._createInner_ = $templateCache.get('add-metadata.html');\n $scope.newTitle = angular.copy($scope.search.newTitle);\n $scope._createInner_ = $compile($scope._createInner_)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: $scope._createInner_,\n size: {\n s: 3\n },\n actions: [\n {\n title: 'Create',\n color: 'lm',\n fn: function () {\n $scope.createItem();\n },\n className: 'btn-ghost'\n },\n {\n title: 'Cancel',\n color: 'grey',\n className: 'btn-ghost'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.importDefaultMetadata = function (meta) {\n if ($scope.loading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#metaLoader');\n\n MetadataService.ImportMetadata(meta)\n .then(function (response) {\n $scope.loading = false;\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' imported successfully',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n });\n $rootScope.hideLinearProgress('#metaLoader');\n $scope.getCollections();\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#metaLoader');\n ToastService.Small({\n title: $scope.currentMeta.toUpperCase() + ' import failed',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n });\n });\n };\n\n $scope.$watch('search.newTitle', function (newValue, oldValue) {\n /* if (newValue) {\n $scope.offset = $scope.data[$scope.currentMeta].length;\n } else {\n $scope.offset = 20;\n }*/\n });\n\n $scope.getCollections();\n\n if ($routeParams.meta && _meta.indexOf($routeParams.meta) !== -1) {\n $scope.currentMeta = $routeParams.meta;\n } else {\n $scope.currentMeta = 'categories';\n $location.search('meta', 'categories');\n }\n\n $scope.createLocalizationWindow = function (item, languages, newLocalizationItem) {\n $scope.freeLanguages = {};\n $scope.freeLanguages.list = [];\n languages.list.forEach(function (languageItem) {\n var localizationItem = _.find(item.localization, { language: languageItem.title });\n if (!localizationItem) {\n $scope.freeLanguages.list.push(languageItem);\n }\n });\n $scope._createInner_ = $templateCache.get('add-metadata-localization.html');\n $scope._createInner_ = $compile($scope._createInner_)($scope);\n $scope.window = ModalWindowService.Open({\n content: $scope._createInner_,\n size: {\n s: 3\n },\n actions: [\n {\n title: 'Create',\n color: 'lm',\n fn: function () {\n $scope.createNewLocalization(item, newLocalizationItem);\n },\n className: 'btn-ghost'\n },\n {\n title: 'Cancel',\n color: 'grey',\n className: 'btn-ghost'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.languages = MetadataService.languages;\n $scope.newLocalizationItem = { language: {}, title: ''};\n\n $scope.createNewLocalization = function (item, newLocalizationItem) {\n if (newLocalizationItem.language.id && newLocalizationItem.title) {\n var data = {};\n item.localization.forEach(function (localizationItem) {\n var languageItem = _.find($scope.languages.list, { title: localizationItem.language });\n data[languageItem.id] = { title: localizationItem.title };\n });\n\n var addedLocalizationItem = {};\n addedLocalizationItem[newLocalizationItem.language.id] = { title: newLocalizationItem.title }\n data = Object.assign(data, addedLocalizationItem);\n\n MetadataService.PatchLocalization($scope.currentMeta, item.id, data).then(function () {\n var localization = {};\n localization.language = newLocalizationItem.language.title;\n localization.title = newLocalizationItem.title;\n item.localization.push(localization);\n $scope.newLocalizationItem = { language: {}, title: '' };\n });\n }\n };\n\n $scope.checkCurrentMeta = function(item) {\n if ($scope.currentMeta === 'studios' || $scope.currentMeta === 'providers') {\n return;\n }\n $scope.setActiveItem(item);\n };\n\n $scope.setActiveItem = function (item) {\n $scope.activeItem = item;\n $scope.activeItem.localization = [];\n if (item.isActive) {\n item.isActive = false;\n return;\n } else {\n item.isActive = true;\n item.tab = 'localization';\n MetadataService.GetLocalization($scope.currentMeta, item.id).then(function (response) {\n for (var localizationItem in response.data) {\n var language = _.find($scope.languages.list, { id: localizationItem });\n var localization = {};\n localization.language = language.title;\n localization.title = response.data[localizationItem].title;\n $scope.activeItem.localization.push(localization);\n }\n });\n }\n };\n\n $scope.isActiveItem = function (item) {\n return item.isActive;\n };\n\n $scope.unsetActiveItem = function (item) {\n item.isActive = false;\n };\n\n $scope.deleteLocalizationItem = function (item, deletedIndex) {\n item.localization.splice(deletedIndex, 1);\n var data = {};\n item.localization.forEach(function (localizationItem) {\n var languageItem = _.find($scope.languages.list, { title: localizationItem.language });\n data[languageItem.id] = { title: localizationItem.title };\n });\n MetadataService.PatchLocalization($scope.currentMeta, item.id, data);\n };\n\n $scope.isCurrentTab = function (item, tab) {\n return item.tab === tab;\n };\n\n $scope.setCurrentTab = function (item, tab) {\n item.tab = tab;\n };\n }\n ]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:MainCtrl\n * @description\n * # MainCtrl\n * Controller of the lmApp\n */\nlmApp.controller('NPVRController', ['$routeParams', '$location', '$q', '$templateCache', '$compile', '$scope', '$rootScope', 'ToastService', 'SubscriberResource', 'DVRTasksResource', 'ModalWindowService', 'ManagerResource', 'TimezoneService', 'SubscriberV2Service', 'DVRTaskService',\n function ($routeParams, $location, $q, $templateCache, $compile, $scope, $rootScope, ToastService, SubscriberResource, DVRTasksResource, ModalWindowService, ManagerResource, TimezoneService, SubscriberV2Service, DVRTaskService) {\n $scope.loading = false;\n $scope.records = [];\n $scope.subscribers = [];\n $scope.isAllSelected = false;\n\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n //\n $scope.collectionData = {\n filters: {\n subscribers: [],\n sortBy: '-create_time'\n },\n offset: 0,\n limit: 20,\n isStart: function () {\n return $scope.routePage === 1;\n },\n isEnd: false,\n nextPage: function () {\n if (this.isEnd || $scope.loading) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n this.offset += $scope.collectionData.limit;\n $scope.isAllSelected = false;\n $scope.getRecords();\n },\n prevPage: function () {\n if (this.isStart()) return;\n if (this.offset >= this.limit) {\n this.offset -= this.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n this.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n }\n $scope.isAllSelected = false;\n $scope.getRecords();\n }\n };\n\n if ($scope.subscribers.length === 0) {\n SubscriberResource.get().$promise\n .then(function (result) {\n $scope.subscribers = (result.data || []).map(function (subscriber) {\n return {\n id: subscriber.id,\n title: subscriber.username\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n\n $scope.stat = [];\n $scope.getStatData = function() {\n var params = {};\n params['$limit'] = 5000;\n params['$offset'] = 0;\n params['$orderby'] = '-create_time';\n DVRTasksResource.list(params).$promise\n .then(function (result) {\n var records = (result.data || []);\n var stat = {};\n var allKeys = [];\n if (records.length) {\n for (var i = 0; i < records.length; i++) {\n var r = records[i];\n var parts = r.start_time.split('T');\n var key = moment(parts[0] + 'T00:00:00Z').unix();\n if (!stat.hasOwnProperty(key)) {\n allKeys.push(key);\n stat[key] = {\n label: moment(r.start_time).utc().format('D MMM'),\n pending: 0,\n scheduled: 0,\n recording: 0,\n recorded: 0,\n error: 0\n }\n }\n switch (r.state) {\n case 'pending':\n stat[key].pending += 1;\n break;\n case 'scheduled':\n stat[key].scheduled += 1;\n break;\n case 'recording':\n stat[key].recording += 1;\n break;\n case 'recorded':\n stat[key].recorded += 1;\n break;\n case 'error':\n stat[key].error += 1;\n }\n }\n }\n allKeys.sort(function(a, b) { return b-a });\n var statArr = [];\n for (var i = 0; i < allKeys.length; i++) {\n if (i >= 20) break;\n var s = stat[allKeys[i]];\n statArr.push({\n label: s.label,\n pending: s.pending,\n scheduled: s.scheduled,\n recording: s.recording,\n recorded: s.recorded,\n error: s.error\n });\n }\n $scope.stat = statArr.reverse();\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.displayStat = false;\n $scope.toggleStat = function() {\n if ($scope.stat.length === 0) return;\n $scope.displayStat = !$scope.displayStat;\n };\n\n $scope.getRecords = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#npvrLoader');\n\n $scope.collectionData.isEnd = false;\n\n var params = {};\n params['$limit'] = $scope.collectionData.limit + 1;\n params['$offset'] = $scope.collectionData.offset;\n params['$orderby'] = $scope.collectionData.filters.sortBy;\n\n if ($scope.collectionData.filters.subscribers.length > 0) {\n var id = [];\n $scope.collectionData.filters.subscribers.forEach(function (s) { id.push(s.id) });\n params['subscribers.id[in]'] = id.join(',')\n }\n\n DVRTasksResource.get(params).$promise\n .then(function (result) {\n var records = (result.data || []);\n if (records.length < $scope.collectionData.limit + 1) {\n $scope.collectionData.isEnd = true;\n } else {\n records.pop();\n }\n\n $scope.records = records.map(function (record, i) {\n record._subscriber_ext_id = \"N/A\";\n if (record.subscriber) {\n record._subscriber_ext_id = record.subscriber.username;\n }\n record._program_name = \"N/A\";\n record._program_description = \"N/A\";\n if (record.program) {\n record._program_name = record.program.name;\n record._program_description = record.program.description;\n }\n record._channel_logo_URL = '';\n record._channel_name = '';\n if (record.live) {\n record._channel_logo_URL = _.get(_.find(record.live.resources, {type: 'picture', category: 'poster_blueprint'}), 'source', '');\n record._channel_name = record.live.name;\n }\n record.size = record.size || 0;\n if (record.size > 0) {\n record.size = (record.size / 1024 / 1024).toFixed();\n }\n record.selected = false;\n return record;\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#npvrLoader');\n\n if ($scope.records.length === 0 && $scope.routePage !== 1) {\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getRecords();\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#npvrLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n };\n\n $scope.toggleAll = function () {\n angular.forEach($scope.records, function(r){ r.selected = $scope.isAllSelected; });\n };\n\n $scope.Filter = function () {\n $scope.collectionData.offset = 0;\n $scope.isAllSelected = false;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getRecords();\n };\n\n $scope.SetOrder = function (field) {\n if (!$scope.records.length) return;\n\n if (field === $scope.collectionData.filters.sortBy) {\n $scope.collectionData.filters.sortBy = '-' + $scope.collectionData.filters.sortBy;\n } else {\n $scope.collectionData.filters.sortBy = field\n }\n $scope.collectionData.offset = 0;\n $scope.isAllSelected = false;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getRecords();\n };\n\n $scope.RemoveSelectedRecords = function () {\n if ($scope.loading) return;\n\n var ids = [];\n angular.forEach($scope.records, function(record, index) {\n if (record.selected) {\n ids.push(record.id);\n }\n });\n\n if (!ids.length) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#npvrLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete ' + ids.length +' records?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n var reqList = [];\n for(var i = 0; i < ids.length; i++) {\n reqList.push(DVRTasksResource.remove({id: ids[i]}).$promise)\n }\n $q.all(reqList).then(function(values) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#npvrLoader');\n ToastService.Small({\n title: 'The records were deleted',\n color: 'green',\n icon: 'delete'\n });\n $location.search('page', $scope.routePage);\n $scope.getRecords();\n }).catch(function(reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#npvrLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove records',\n color: 'red',\n icon: 'delete'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#npvrLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.openProgram = function (record) {\n if ($scope.loading) return;\n\n $scope.program = angular.copy(record);\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'hls';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n $scope.playAsUser = false;\n\n var licence = $location.protocol() + '://'+ $location.host() + '/discovery:80/sdp/v2/assets/'+record.live.id+'/wv-license?auth_token='+lh.common.config.get('authToken');\n $scope.license = licence.replace(/^http:\\/\\//,\"https://\");\n\n $scope.selectStreamAsAdmin = function() {\n if ($scope.program.state !== 'recorded') return;\n $scope.selectedStream = '';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n $scope.playAsUser = false;\n\n if ($scope.selectedStreamType === 'hls') {\n $scope.getHLSStreamAsAdmin();\n } else {\n $scope.getDASHStreamAsAdmin();\n }\n };\n\n $scope.getDASHStreamAsAdmin = function () {\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'dash';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n DVRTasksResource.getDashStream({ id: $scope.program.id }).$promise\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error;\n }\n $scope.selectedStream = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getHLSStreamAsAdmin = function () {\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'hls';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n DVRTasksResource.getHLSStream({ id: $scope.program.id }).$promise\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error;\n }\n $scope.selectedStream = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.selectStreamAsUser = function() {\n if ($scope.program.state !== 'recorded') return;\n var clientId = '';\n for (var i=0; i < $rootScope._self.services.length; i++) {\n var service = $rootScope._self.services[i];\n if (service.instance && service.instance.platform && service.instance.platform.client_id) {\n clientId = service.instance.platform.client_id;\n break;\n }\n }\n if (clientId === '') {\n return;\n }\n\n return SubscriberV2Service.GetUserDeviceToken($scope.program._subscriber_ext_id, clientId)\n .then(function (result) {\n if (result.data) {\n var token = result.data;\n $scope.playAsUser = true;\n\n DVRTaskService.GetStream($scope.program.id, token, $scope.selectedStreamType)\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error.message;\n }\n $scope.selectedStream = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n $scope.streamLoading = false;\n }\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n $rootScope.debugInfo(reason, 'silent');\n });\n\n };\n\n $scope.changeType = function(type) {\n $scope.selectedStreamType = type;\n if ($scope.playAsUser) {\n $scope.selectStreamAsUser();\n } else {\n $scope.selectStreamAsAdmin();\n }\n };\n\n $scope.selectStreamAsUser();\n\n var inner = $templateCache.get('npvr-record.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Close',\n color: 'red',\n fn: function () {}\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.collectionData.offset = ($scope.routePage - 1) * $scope.collectionData.limit;\n } else {\n $scope.routePage = 1;\n }\n\n $scope.getRecords();\n $scope.getStatData();\n\n}]);\n","lmApp\n .controller('OfferController', ['$scope', '$rootScope', '$timeout', '$compile', '$templateCache', '$q', '$routeParams', '$location', 'AssetService', 'MetadataService', 'OfferService', 'GroupService', 'ToastService', 'ManageAssetsWindow',\n function ($scope, $rootScope, $timeout, $compile, $templateCache, $q, $routeParams, $location, AssetService, MetadataService, OfferService, GroupService, ToastService, ManageAssetsWindow) {\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_OFFER_COLLECTION: 'update.offer.collection'});\n\n $scope.offerData = [];\n $scope.groupSearch = [];\n $scope.loading = false;\n $scope.activeOffer = {};\n $scope.search = {\n searchField: '',\n isShown: false\n };\n\n $scope.isActiveOfferSet = function () {\n return !_.isEmpty($scope.activeOffer);\n };\n\n $scope.toggleSearch = function () {\n $scope.search.isShown = !$scope.search.isShown;\n $timeout(function () {\n angular.element('input#offer_search').focus();\n }, 200);\n };\n\n $scope.availableCurrencies = [\n {\n title: 'US Dollar',\n id: 'USD'\n },\n {\n title: 'Russian Ruble',\n id: 'RUB'\n }\n ];\n\n $scope.availableSubscription = [\n {\n label: 'Transactional Permanent (TVOD/DTO)',\n value: 'transactional-own'\n },\n {\n label: 'Transactional Rent (TVOD/DTR)',\n value: 'transactional-rent'\n }\n ];\n\n function getLocalCurrency(currency) {\n\n return _.find($scope.availableCurrencies, {id: currency});\n }\n\n $scope.availableDurationUnits = [\n {\n title: 'Hour(s)',\n id: 'hour'\n },\n {\n title: 'Day(s)',\n id: 'day'\n },\n {\n title: 'Week(s)',\n id: 'week'\n },\n {\n title: 'Month(s)',\n id: 'month'\n },\n {\n title: 'Year(s)',\n id: 'year'\n }\n ];\n\n function getLocalDurationUnit(durationUnit) {\n var parse;\n\n parse = _.find($scope.availableDurationUnits, {id: durationUnit});\n\n if (!parse) {\n parse = null;\n }\n\n return parse;\n }\n\n function prepareOffer(offer, index) {\n if (!offer._PrivateData) offer._PrivateData = {};\n offer._PrivateData.validateErrors = {};\n offer._PrivateData.assets = [];\n offer._PrivateData.index = index;\n\n offer._PrivateData.is_active = !!offer.is_active;\n offer._PrivateData.priority = +offer.priority;\n offer._PrivateData.name = offer.name;\n offer._PrivateData.selectedAsset = [];\n\n if (offer.type === 'transactional') {\n\n if (offer.right_params.duration === 0 || !offer.right_params.duration) {\n offer._PrivateData.type = 'transactional-own';\n offer._PrivateData.typeTitle = 'Permanent (TVOD/DTO)';\n } else {\n offer._PrivateData.type = 'transactional-rent';\n offer._PrivateData.typeTitle = 'Rent (TVOD/DTR)';\n }\n } else if (offer.type === 'free') {\n\n offer._PrivateData.isFree = true;\n }\n\n offer._PrivateData.billing_params_price = (offer.billing_params.price ? offer.billing_params.price / 100 : '').toString();\n offer._PrivateData.billing_params_currency = getLocalCurrency(offer.billing_params.currency);\n\n if (offer._PrivateData.billing_params_currency) offer._PrivateData.priceOuput = offer._PrivateData.billing_params_price + ' ' + offer._PrivateData.billing_params_currency.id;\n\n offer._PrivateData.start_time = moment.utc(offer.start_time * 1000);\n offer._PrivateData.end_time = moment.utc(offer.end_time * 1000);\n\n offer._PrivateData.right_params_duration = offer.right_params.duration && offer.right_params.duration.toString() || null;\n if (offer.right_params.duration_unit) offer._PrivateData.right_params_duration_unit = getLocalDurationUnit(offer.right_params.duration_unit);\n\n offer._PrivateData.groupsNew = $scope.groupSearch\n .filter(function (group) {\n return _.includes(offer.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.title,\n id: group.id\n }\n });\n\n return offer;\n }\n\n $scope.validateFields = MetadataService.ValidateMetadata.Offer;\n\n $scope.getOfferCollection = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#offersLoader');\n\n return OfferService.GetOffers()\n .then(function (offers) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#offersLoader');\n\n $scope.offerData = offers.map(function (offer, index) {\n return prepareOffer(offer, index);\n });\n\n if (offers.length && $scope.routeOfferId) {\n var offer = _.find(offers, {id: $scope.routeOfferId});\n\n if (offer) {\n $scope.setActiveOffer(offer);\n }\n }\n\n return true;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#offersLoader');\n\n $rootScope.debugInfo(reason);\n return false;\n })\n };\n\n $scope.setActiveOffer = function (offer, index) {\n if ($scope.loading) return;\n\n $scope.direction = 'right';\n\n $scope.activeOffer = angular.copy(offer);\n $scope.activeOffer = prepareOffer(offer, index);\n $scope.activeOffer._PrivateData.assets = [];\n $scope.activeOffer._PrivateData.selectedAsset = [];\n $location.search('offer_id', offer.id);\n\n if ($scope.activeOffer.assets.length) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#offersLoader');\n\n AssetService.GetAssetInId(offer.assets)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#offersLoader');\n $scope.activeOffer._PrivateData.assets = collection;\n });\n }\n };\n\n $scope.clearActiveOffer = function () {\n if ($scope.loading) return;\n\n $scope.activeOffer = {};\n $location.search('offer_id', null);\n };\n\n $scope.isActiveOffer = function (id) {\n\n return $scope.activeOffer.id === id;\n };\n\n $scope.priorityUp = function (offer) {\n ++offer._PrivateData.priority;\n };\n\n $scope.priorityDown = function (offer) {\n if (offer._PrivateData.priority > 0) --offer._PrivateData.priority;\n };\n\n $scope.setSubscriptionType = function (offer, type) {\n offer._PrivateData.type = type;\n };\n\n $scope.saveOfferStatus = function (offer) {\n if ($scope.loading) return;\n if (offer._PrivateData.isNew) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#offersLoader');\n\n OfferService.UpdateOfferStatus(offer)\n .then(function () {\n $scope.getOfferCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n })\n };\n\n $scope.saveOfferOptions = function (offer) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validateFields(offer))) {\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n\n return;\n }\n\n var allQ = {};\n $scope.loading = true;\n $rootScope.showLinearProgress('#offersLoader');\n\n if (offer._PrivateData.isFree) {\n\n offer._PrivateData.type = 'free';\n offer._PrivateData.billing_params_price = 0.01;\n offer._PrivateData.billing_params_currency = $scope.availableCurrencies[0];\n }\n\n if (offer._PrivateData.isNew) {\n OfferService.CreateOffer(offer)\n .then(function (offer_) {\n\n var groupIds = offer._PrivateData.groupsNew.map(function (group) {\n return group.id;\n });\n\n var toAdd = _.difference(groupIds, offer.group_id);\n\n if (toAdd.length) {\n allQ.groupsAdd = GroupService.AddOffer.bind(this, toAdd, [offer_.id]);\n }\n\n $q.seqAll(allQ)\n .then(function () {\n $scope.loading = false;\n ToastService.Small({\n title: 'Offer successfully created',\n color: 'green',\n icon: 'cloud-outline'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#offersLoader');\n\n $location.search('offer_id', offer_.id);\n $scope.getOfferCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Offer creation failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#offersLoader');\n $rootScope.debugInfo(reason);\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Offer creation failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#offersLoader');\n $rootScope.debugInfo(reason);\n });\n } else {\n\n\n allQ.metadata = OfferService.UpdateOffer.bind(this, offer);\n\n var groupIds = offer._PrivateData.groupsNew.map(function (group) {\n return group.id;\n });\n\n var toAdd = _.difference(groupIds, offer.group_id);\n\n var toRemove = _.difference(_.reject(offer.group_id, function (item) {\n return item == '0';\n }), groupIds);\n\n if (toAdd.length) {\n allQ.groupsAdd = GroupService.AddOffer.bind(this, toAdd, [offer.id]);\n offer.group_id = offer.group_id.concat(toAdd);\n }\n if (toRemove.length) {\n allQ.groupsRemove = GroupService.RemoveOffer.bind(this, toRemove, [offer.id]);\n offer.group_id = _.difference(offer.group_id, toRemove);\n }\n\n $q.seqAll(allQ)\n .then(function () {\n $scope.loading = false;\n ToastService.Small({\n title: 'Offer successfully updated',\n color: 'green',\n icon: 'cloud-outline'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#offersLoader');\n $scope.getOfferCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Offer update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#offersLoader');\n $rootScope.debugInfo(reason);\n });\n\n }\n\n };\n\n $scope.toggleSelection = function (activeOffer, asset) {\n var idx = activeOffer._PrivateData.selectedAsset.indexOf(asset);\n\n if (!asset._PrivateData.isSelected) {\n asset._PrivateData.isSelected = false;\n\n if (idx !== -1) {\n activeOffer._PrivateData.selectedAsset.splice(idx, 1);\n }\n } else {\n asset._PrivateData.isSelected = true;\n\n if (idx === -1) {\n activeOffer._PrivateData.selectedAsset.push(asset);\n }\n }\n };\n \n $scope.selectAll = function (activeOffer) {\n if (activeOffer._PrivateData.selectedAsset.length !== activeOffer._PrivateData.assets.length){\n activeOffer._PrivateData.selectedAsset = [];\n\n activeOffer._PrivateData.assets.forEach(function (asset) {\n if (!asset._PrivateData) asset._PrivateData = {};\n asset._PrivateData.isSelected = true;\n activeOffer._PrivateData.selectedAsset.push(asset);\n });\n } else {\n activeOffer._PrivateData.assets.forEach(function (asset) {\n asset._PrivateData.isSelected = false;\n });\n activeOffer._PrivateData.selectedAsset = [];\n }\n };\n\n $scope.removeAssetsFromOffer = function (activeOffer) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#offersLoader');\n\n var _ids = activeOffer._PrivateData.selectedAsset.map(function (asset) {\n return asset.id;\n });\n\n OfferService.RemoveAsset([$scope.activeOffer.id], _ids)\n .then(function () {\n $scope.getOfferCollection();\n ToastService.Small({\n title: 'Asset(s) successfully removed',\n color: 'green',\n icon: 'package-up'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createNewOffer = function () {\n var newOffer = {};\n\n newOffer.is_active = 0;\n newOffer.billing_params = {};\n newOffer.right_params = {};\n newOffer.group_id = [];\n newOffer.priority = 0;\n newOffer._PrivateData = {};\n newOffer._PrivateData.isNew = true;\n newOffer.start_time = moment.utc().unix();\n newOffer.end_time = moment.utc().unix();\n\n $scope.activeOffer = prepareOffer(newOffer);\n $scope.activeOffer._PrivateData.index = -1;\n };\n\n $scope.manageAssetsFromOffer = function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n var allQ = {};\n\n if (toAdd.length) {\n var addIds = toAdd.map(function (asset) {\n return asset.id;\n });\n\n allQ.add = OfferService.AddAsset([toThis.id], addIds);\n }\n\n if (toRemove.length) {\n var removeIds = toRemove.map(function (asset) {\n return asset.id;\n });\n\n allQ.remove = OfferService.RemoveAsset([toThis.id], removeIds);\n }\n\n return allQ;\n };\n\n $scope.openModal = function (offer) {\n if (!offer._PrivateData.isNew) {\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: $scope.manageAssetsFromOffer,\n obj: offer,\n index: offer._PrivateData.index,\n data: 'offer',\n title: offer.title,\n currentCollection: _.map(offer._PrivateData.assets, 'id'),\n filter: {\n live: true\n }\n })\n\n } else {\n ToastService.Small({\n title: 'You should create offer first',\n color: 'amber',\n icon: 'alert'\n }, 1000 * 3);\n }\n };\n\n GroupService.GetGroups()\n .then(function (collection) {\n\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.UPDATE_OFFER_COLLECTION, function (event) {\n $scope.getOfferCollection();\n });\n }\n\n $timeout(function () {\n var body = document.body;\n var html = document.documentElement;\n\n var height = Math.max(body.scrollHeight, body.offsetHeight,\n html.clientHeight, html.scrollHeight, html.offsetHeight);\n\n angular.element('#offer_data').css({\n height: height\n });\n });\n\n $scope.routeOfferId = null;\n if ($routeParams.offer_id) {\n $scope.routeOfferId = Number($routeParams.offer_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routeOfferId && !$routeParams.offer_id) {\n $scope.clearActiveOffer();\n }\n $scope.routeOfferId = Number($routeParams.offer_id) || null;\n });\n\n $scope.groupWatcher = $scope.$watchCollection('groupSearch', function (newValue, oldValue) {\n\n $scope.offerData.forEach(function (offer, index) {\n\n prepareOffer(offer, index);\n });\n\n if (!_.isEmpty($scope.activeOffer)) {\n\n $scope.activeOffer = prepareOffer($scope.activeOffer, $scope.activeOffer.index);\n }\n });\n\n /**\n * Init collection on controller add\n */\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_OFFER_COLLECTION);\n\n $scope.$on('$destroy', function () {\n $rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION] = [];\n })\n }]);\n","lmApp\n .service('OfferService', ['$rootScope', '$q', function ($rootScope, $q) {\n\n var service = {};\n\n /**\n * Get offers from server\n * @returns {*}\n */\n service.GetOffers = function () {\n var deferred = $q.defer();\n\n lh.common.request.get('collection/offer/query' + '?t=' + Date.now())\n .then(function (response) {\n\n deferred.resolve(response.collection.filter(function (offer) {\n\n return offer.type === 'transactional' || offer.type === 'free';\n }));\n }, function (reason) {\n\n reason.url = 'collection/offer/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Update offer status [is_active]\n * @param offer\n * @returns {*}\n * @constructor\n */\n service.UpdateOfferStatus = function (offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offer.id,\n is_active: +offer._PrivateData.is_active\n };\n\n lh.common.request.post('offer/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'offer/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Update offers options\n * @returns {*}\n */\n service.UpdateOffer = function (offer) {\n var deferred = $q.defer();\n\n offer.billing_params.currency = offer._PrivateData.billing_params_currency.id;\n offer.billing_params.price = parseInt(offer._PrivateData.billing_params_price * 100, 10) || 0;\n\n offer.right_params = {};\n\n if (!offer._PrivateData.right_params_duration) {\n offer.right_params.duration = 0;\n } else {\n offer.right_params.duration = parseInt(offer._PrivateData.right_params_duration, 10) || 0;\n }\n\n if (offer._PrivateData.right_params_duration_unit) offer.right_params.duration_unit = offer._PrivateData.right_params_duration_unit.id;\n\n if (offer._PrivateData.isTrialAvailable) {\n offer.right_params.trial_duration = parseInt(offer._PrivateData.right_params_trial_duration, 10) || 0;\n offer.right_params.trial_duration_unit = (offer._PrivateData.right_params_trial_duration_unit) ? offer._PrivateData.right_params_trial_duration_unit.id : undefined;\n }\n\n if (offer._PrivateData.type === 'transactional-own') {\n offer.right_params.duration = 0;\n }\n\n if (offer._PrivateData.type.indexOf('transactional') !== -1) {\n offer._PrivateData.type = 'transactional';\n }\n\n var data = {\n offer_id: offer.id,\n name: offer._PrivateData.name,\n type: offer._PrivateData.type,\n start_time: offer._PrivateData.start_time.unix(),\n end_time: offer._PrivateData.end_time.unix(),\n priority: offer._PrivateData.priority,\n billing_params: JSON.stringify(offer.billing_params),\n is_active: +offer._PrivateData.is_active\n };\n\n if (!_.isEmpty(offer.right_params)) {\n data.right_params = JSON.stringify(offer.right_params);\n }\n\n lh.common.request.post('offer/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'offer/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Create offers options\n * @returns {*}\n */\n service.CreateOffer = function (offer) {\n var deferred = $q.defer();\n\n offer.billing_params.currency = offer._PrivateData.billing_params_currency.id;\n offer.billing_params.price = parseInt(offer._PrivateData.billing_params_price * 100, 10) || 0;\n\n if (!offer._PrivateData.right_params_duration) {\n offer.right_params.duration = 0;\n } else {\n offer.right_params.duration = parseInt(offer._PrivateData.right_params_duration, 10) || 0;\n }\n\n if (offer._PrivateData.right_params_duration_unit) offer.right_params.duration_unit = offer._PrivateData.right_params_duration_unit.id;\n\n if (offer._PrivateData.isTrialAvailable) {\n offer.right_params.trial_duration = parseInt(offer._PrivateData.right_params_trial_duration, 10) || 0;\n offer.right_params.trial_duration_unit = (offer._PrivateData.right_params_trial_duration_unit) ? offer._PrivateData.right_params_trial_duration_unit.id : undefined;\n }\n\n if (offer._PrivateData.type === 'transactional-own') {\n offer.right_params.duration = 0;\n }\n\n if (offer._PrivateData.type.indexOf('transactional') !== -1) {\n offer._PrivateData.type = 'transactional';\n }\n\n var data = {\n name: offer._PrivateData.name,\n type: offer._PrivateData.type,\n start_time: offer._PrivateData.start_time.unix(),\n end_time: offer._PrivateData.end_time.unix(),\n priority: offer._PrivateData.priority,\n billing_params: JSON.stringify(offer.billing_params),\n right_params: JSON.stringify(offer.right_params),\n is_active: +offer._PrivateData.is_active\n };\n\n lh.common.request.post('offer/mgmt/create', data)\n .then(function (response) {\n deferred.resolve(response.offer);\n }, function (reason) {\n reason.url = 'offer/mgmt/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Create offers options\n * @returns {*}\n */\n service.DeleteOffer = function (ext_offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: ext_offer.id\n };\n\n lh.common.request.post('offer/mgmt/delete', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.url = 'offer/mgmt/delete';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAssetToOffer = function (assets, offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offer.id,\n asset_id: assets.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/assoc')\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/assoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAsset = function (offers_ids, assets_ids) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offers_ids.join(','),\n asset_id: assets_ids.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/assoc', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/assoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveAsset = function (offers_ids, assets_ids) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offers_ids.join(','),\n asset_id: assets_ids.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/deassoc', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/deassoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.controller('OwnerAuthController', ['$scope', '$rootScope', '$kookies', '$timeout', '$location',\n function ($scope, $rootScope, $kookies, $timeout, $location) {\n $scope.loginFormData = {\n error: '',\n inputs: {\n token: ''\n }\n };\n\n $scope.login = function () {\n $rootScope.globals.currentUser = {\n isSuperuser: true,\n readOnly: true,\n project: '',\n company_name: '',\n supervisorToken: $scope.loginFormData.inputs.token,\n username: '',\n token: $scope.loginFormData.inputs.token,\n operatorToken: null,\n name: '',\n account: {\n groups: ['admin']\n }\n };\n\n $rootScope._self = $rootScope.globals.currentUser;\n $rootScope.$broadcast('self:update', $rootScope._self);\n\n lh.common.config.set({authToken: $scope.loginFormData.inputs.token});\n lh.system.init();\n\n $kookies.set('globals', JSON.stringify($rootScope.globals), {path: '/', expires: 7});\n $timeout(function () {\n $location.path($rootScope.defaultAdminRoute);\n }, 1000);\n }\n }]);","lmApp\n .controller('PackageController', ['$scope', '$rootScope', '$timeout', '$templateCache', '$compile', '$q', '$routeParams', '$location', 'AssetService', 'ModalWindowService', 'MetadataService', 'PackageService', 'ToastService', 'ManageAssetsWindow', 'GroupService', 'OfferService', 'PlanService', 'ModalConfirmService', 'AssetResource', 'GroupResource', 'CategoryResource', 'SubscriptionPlanResource',\n function ($scope, $rootScope, $timeout, $templateCache, $compile, $q, $routeParams, $location, AssetService, ModalWindowService, MetadataService, PackageService, ToastService, ManageAssetsWindow, GroupService, OfferService, PlanService, ModalConfirmService, AssetResource, GroupResource, CategoryResource, SubscriptionPlanResource) {\n $scope.loading = false;\n $scope.packageCollection = [];\n $scope.offerSearch = [];\n $scope.groupSearch = [];\n $scope.categorySearch = [];\n\n $scope.categories = [];\n $scope.groups = [];\n $scope.plans = [];\n\n var savedPlans = {};\n\n var getFilterData = function () {\n GroupResource.get().$promise\n .then(function (groups) {\n var groupList = [];\n for (var i = 0; i < groups.length; i++) {\n var group = groups[i];\n groupList.push({\n id: group.id,\n title: group.name\n });\n }\n $scope.groups = groupList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CategoryResource.get().$promise\n .then(function (categories) {\n var categoryList = [];\n for (var i = 0; i < categories.length; i++) {\n var category = categories[i];\n categoryList.push({\n id: category.id,\n title: category.name\n });\n }\n $scope.categories = categoryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n\n getFilterData();\n\n /////////\n $scope.assets = [];\n\n var processCategory = function(category) {\n return {\n id: category.id,\n title: category.name\n };\n };\n\n var processGroup = function(group) {\n return {\n id: group.id,\n title: group.name\n };\n };\n\n var processAsset = function(asset) {\n var processed = {\n id: asset.id,\n extid: asset.ext_id,\n description: asset.description,\n createTime: asset.create_time,\n updateTime: asset.update_time,\n name: asset.name,\n rotationStart: moment(asset.rotation_start),\n rotationFinish: moment(asset.rotation_finish),\n categories: [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n rotationPeriodOK: true,\n free: false,\n conditions: {\n ready: processCondition({})\n },\n groups: [],\n billingType: 'free', // free, plans\n plans: [],\n _PrivateData: {}\n };\n\n if (asset.free) {\n processed.free = true;\n processed.billingType = 'free';\n }\n\n if (moment(asset.rotation_start).diff(moment()) > 0 || moment(asset.rotation_finish).diff(moment()) < 0) {\n processed.rotationPeriodOK = false;\n }\n\n if (asset.resources) {\n var posters = asset.resources.filter(function (resource) {\n return resource.type === 'picture';\n });\n if (posters.length > 0) {\n processed.poster.state = posters[0].state;\n processed.poster.url = posters[0].url;\n processed.poster.source = posters[0].source;\n }\n }\n\n if (asset.groups) {\n processed.groups = asset.groups.map(processGroup);\n }\n if (asset.categories) {\n processed.categories = asset.categories.map(processCategory);\n }\n\n processed._PrivateData.offset = 0;\n processed._PrivateData.limit = 30;\n processed._PrivateData.selectedAsset = [];\n processed._PrivateData.packageAssets = [];\n\n return processed;\n };\n\n var processCondition = function (condition) {\n return {\n id: condition.id || 0,\n required: condition.required || false,\n type: condition.type || '',\n state: condition.state || ''\n }\n };\n\n $scope.getPackages2 = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n\n var params = {};\n params['$limit'] = 1000;\n params['$offset'] = 0;\n params['type[in]'] = 'package';\n params['$expand'] = 'groups,conditions';\n\n AssetResource.get(params).$promise\n .then(function (assets) {\n var processed = [];\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n processed.push(processAsset(asset));\n }\n $scope.assets = processed;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n // $scope.getPackages();\n /////////\n\n\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_PACKAGE_COLLECTION: 'update.package.collection'});\n\n $scope.search = {\n isShown: false,\n searchField: ''\n };\n\n $scope.activePackage = {};\n\n $scope.isActivePackageSet = function () {\n return !_.isEmpty($scope.activePackage);\n };\n\n var _parsePackage = function (pkg, index) {\n pkg._PrivateData = {};\n pkg._PrivateData.index = index;\n pkg._PrivateData.id = pkg.id;\n\n pkg._PrivateData.offset = 0;\n pkg._PrivateData.limit = 30;\n\n if (!pkg.assets) pkg.assets = [];\n pkg._PrivateData.title = pkg.title;\n pkg._PrivateData.description = pkg.description;\n pkg._PrivateData.selectedAsset = [];\n pkg._PrivateData.groupsOld = [];\n pkg._PrivateData.groupsNew = [];\n pkg._PrivateData.categoriesOld = [];\n pkg._PrivateData.categoriesNew = [];\n pkg._PrivateData.offersOld = [];\n pkg._PrivateData.offersNew = [];\n pkg._PrivateData.tagsOld = pkg.tags;\n pkg._PrivateData.tagsNew = pkg._PrivateData.tagsOld;\n\n pkg._PrivateData.rotation_start = pkg.rotation_start ? moment.utc(pkg.rotation_start * 1000) : moment.utc();\n pkg._PrivateData.rotation_finish = pkg.rotation_finish ? moment.utc(pkg.rotation_finish * 1000) : moment.utc();\n\n pkg._PrivateData.license_start = pkg.license_start ? moment.utc(pkg.license_start * 1000) : moment.utc();\n pkg._PrivateData.license_finish = pkg.license_finish ? moment.utc(pkg.license_finish * 1000) : moment.utc();\n\n pkg._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(pkg, $rootScope.platforms);\n pkg._PrivateData.platformsNew = angular.copy(pkg._PrivateData.platformsOld);\n\n return pkg;\n };\n\n $scope.nextPage = function () {\n if ($scope.activePackage._PrivateData.offset + $scope.activePackage._PrivateData.limit < $scope.activePackage._PrivateData.assets.length) {\n $scope.activePackage._PrivateData.offset = $scope.activePackage._PrivateData.offset + $scope.activePackage._PrivateData.limit;\n }\n };\n\n $scope.prevPage = function () {\n $scope.activePackage._PrivateData.offset = Math.max($scope.activePackage._PrivateData.offset - $scope.activePackage._PrivateData.limit, 0);\n };\n\n $scope.assetToSelection = function (asset) {\n var index = $scope.activePackage._PrivateData.selectedAsset.indexOf(asset);\n\n if (index !== -1) {\n $scope.activePackage._PrivateData.selectedAsset.splice(index, 1);\n } else {\n $scope.activePackage._PrivateData.selectedAsset.push(asset);\n }\n };\n\n $scope.toggleSearch = function () {\n $scope.search.isShown = !$scope.search.isShown;\n\n if ($scope.search.isShown) $timeout(function () {\n angular.element('input#package_search').focus();\n });\n };\n\n $scope.selectAll = function (activePackage) {\n if (activePackage._PrivateData.selectedAsset.length !== activePackage._PrivateData.assets.length) {\n activePackage._PrivateData.selectedAsset = [];\n\n activePackage._PrivateData.assets.forEach(function (asset) {\n if (!asset._PrivateData) asset._PrivateData = {};\n asset._PrivateData.isSelected = true;\n activePackage._PrivateData.selectedAsset.push(asset);\n });\n } else {\n activePackage._PrivateData.assets.forEach(function (asset) {\n asset._PrivateData.isSelected = false;\n });\n activePackage._PrivateData.selectedAsset = [];\n }\n };\n\n $scope.selectPackage = function (asset) {\n $scope.activePackage = {};\n\n var selectedParams = {};\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n $location.search('package_id', asset.id);\n\n selectedParams['id[eq]'] = asset.id;\n selectedParams['$expand'] = 'resources(url),categories,groups';\n AssetResource.get(selectedParams).$promise\n .then(function (result) {\n if (result.length) {\n $scope.activePackage = processAsset(result[0]);\n\n PackageService.GetPackageAssets(asset.id)\n .then(function (collection) {\n var assetMap = {};\n for (var i = 0; i < collection.length; i += 1) {\n assetMap[collection[i].id] = collection[i];\n }\n\n AssetResource.getPackageAssets({id: asset.id}).$promise\n .then(function (assets) {\n var orderedAssets = [];\n for (var i = 0; i < assets.length; i += 1) {\n if (assetMap.hasOwnProperty(assets[i].id)) {\n orderedAssets.push(assetMap[assets[i].id]);\n }\n }\n $scope.activePackage.packageAssets = assets;\n $scope.activePackage._PrivateData.assets = orderedAssets;\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n $scope.activePackage._PrivateData.assets = collection;\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n } else {\n $location.search('package_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n }\n })\n .catch(function (reason) {\n $location.search('package_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n AssetService.GetAssetById(asset.id)\n .then(function (assets) {\n var a = assets[0];\n for (var i = 0; i < a.offers.length; i += 1) {\n var offer = a.offers[i];\n if (offer.type === 'free') {\n $scope.activePackage.free = true;\n break;\n }\n }\n if ($scope.activePackage.free) {\n $scope.activePackage.billingType = 'free';\n }\n\n SubscriptionPlanResource.get({'$expand': 'assets'}).$promise\n .then(function (plans) {\n var planList = [];\n for (var i = 0; i < plans.length; i++) {\n var p = plans[i];\n var assets = p.assets || [];\n var processed = {\n id: p.id,\n title: p.name,\n assets: assets\n };\n planList.push(processed);\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id === $scope.activePackage.id) {\n $scope.activePackage.billingType = 'plans';\n $scope.activePackage.plans.push(processed);\n break;\n }\n }\n savedPlans = angular.copy($scope.activePackage.plans);\n }\n $scope.plans = planList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n });\n };\n\n $scope.reorderContent = function() {\n $scope.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n\n $scope.reorderedList = angular.copy($scope.activePackage.packageAssets);\n\n var inner = $templateCache.get('reorder-package-assets.tpl.html');\n inner = $compile(inner)($scope);\n\n var assetMap = {};\n for (var i = 0; i < $scope.activePackage._PrivateData.assets.length; i += 1) {\n assetMap[$scope.activePackage._PrivateData.assets[i].id] = $scope.activePackage._PrivateData.assets[i];\n }\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Update',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n\n AssetResource.setPackageAssets({id: $scope.activePackage.id}, $scope.reorderedList).$promise\n .then(function () {\n var orderedAssets = [];\n for (var i = 0; i < $scope.reorderedList.length; i += 1) {\n if (assetMap.hasOwnProperty($scope.reorderedList[i].id)) {\n orderedAssets.push(assetMap[$scope.reorderedList[i].id]);\n }\n }\n $scope.activePackage.packageAssets = $scope.reorderedList;\n $scope.activePackage._PrivateData.assets = orderedAssets;\n ToastService.Small({\n title: 'The package content has been reordered',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n $rootScope.hideLinearProgress('#packageLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to reorder the package content',\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n $rootScope.hideLinearProgress('#packageLoader');\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#modalLoader');\n }\n }\n ],\n size: {\n s: 12,\n l: 8\n }\n });\n };\n\n $scope.setActivePackage = function (pkg) {\n $scope.selectPackage(pkg);\n };\n\n $scope.clearActivePackage = function () {\n\n $scope.activePackage = {};\n $location.search('package_id', null);\n };\n\n $scope.isActivePackage = function (pkg) {\n return $scope.activePackage.id === pkg.id;\n };\n\n $scope.getPackages = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n\n $scope.packageCollection = collection.map(function (item, index) {\n return _parsePackage(item, index);\n });\n\n if ($scope.packageCollection.length && $scope.routePackageId) {\n var pkg = _.find($scope.packageCollection, {id: $scope.routePackageId});\n\n if (pkg) {\n $scope.selectPackage(pkg);\n }\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n };\n\n $scope.removeAssetsFromPackage = function (pkg) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n\n var _ids = pkg._PrivateData.selectedAsset.map(function (asset) {\n return asset.id;\n });\n\n PackageService.RemoveAsset([pkg.id], _ids)\n .then(function () {\n $scope.getPackages({index: pkg._PrivateData.index});\n ToastService.Small({\n title: 'Asset(s) successfully removed',\n color: 'green',\n icon: 'package-up'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n var isAssetValid = function() {\n $scope.packageValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.activePackage.name)) {\n $scope.packageValidateErrors.name = true;\n valid = false;\n }\n return valid;\n };\n\n var normPackageToJson = function(package) {\n var processed = {\n type: 'package',\n name: _.trim(package.name),\n description: _.trim(package.description),\n categories: package.categories,\n rotation_start: package.rotationStart.format(),\n rotation_finish: package.rotationFinish.format(),\n resources: [],\n groups: package.groups,\n free: false,\n plans: []\n };\n if (package.isNew) {\n processed.ext_id = 'package:' + package.name + ':' + CryptoJS.MD5(package.name).toString(CryptoJS.enc.Hex);\n }\n if (package.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: package.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n if (package.billingType === 'free') {\n processed.free = true;\n processed.plans = [];\n }\n if (package.billingType === 'plans') {\n processed.plans = package.plans;\n }\n return processed;\n };\n\n var comparePlans = function(updated) {\n var diff = {\n add: {},\n delete: {}\n };\n\n var sourcePlanMap = {};\n for (var i = 0; i < savedPlans.length; i++) {\n sourcePlanMap[savedPlans[i].id] = true;\n }\n\n for (var i = 0; i < updated.plans.length; i++) {\n var key = updated.plans[i].id;\n if (sourcePlanMap.hasOwnProperty(key)) {\n delete sourcePlanMap[key];\n } else {\n diff.add[key] = true;\n }\n }\n for (var key in sourcePlanMap) {\n diff.delete[key] = true;\n }\n return diff;\n };\n\n $scope.savePackage = function (pkg) {\n if ($scope.loading) return;\n\n if (!isAssetValid()) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#packageLoader');\n\n var updated = normPackageToJson($scope.activePackage);\n\n if (pkg.isNew) {\n AssetResource.create(updated).$promise\n .then(function (response) {\n if ($scope.activePackage.plans.length > 0) {\n for (var i = 0; i < $scope.activePackage.plans.length; i++) {\n var assets = $scope.activePackage.plans[i].assets;\n assets.push({id: response.data.id});\n SubscriptionPlanResource.update({id: $scope.activePackage.plans[i].id}, {assets: assets}).$promise\n .then(function (response) {\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n ToastService.Small({\n title: 'Package successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 3);\n $scope.clearActivePackage();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#packageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Package create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n\n $scope.clearActivePackage();\n });\n } else {\n AssetResource.update({id: $scope.activePackage.id}, updated).$promise\n .then(function (response) {\n var planDiff = comparePlans(updated);\n\n for (var i = 0; i < $scope.plans.length; i++) {\n var plan = $scope.plans[i];\n var assets = angular.copy(plan.assets);\n if (planDiff.add.hasOwnProperty(plan.id)) {\n assets.push({id: $scope.activePackage.id});\n SubscriptionPlanResource.update({id: plan.id}, {assets: assets}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n if (planDiff.delete.hasOwnProperty(plan.id)) {\n var newList = [];\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id !== $scope.activePackage.id) {\n newList.push({id: assets[j].id});\n }\n }\n SubscriptionPlanResource.update({id: plan.id}, {assets: newList}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'Package successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 3);\n\n $rootScope.hideLinearProgress('#packageLoader');\n $scope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#packageLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Package update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n });\n }\n };\n\n $scope.createNewPackage = function () {\n $scope.activePackage = {};\n\n $scope.activePackage.isNew = true;\n\n $rootScope.hideLinearProgress('#activePackageLoader');\n\n $scope.activePackage.index = -1;\n $scope.activePackage.extid = '';\n $scope.activePackage.name = '';\n $scope.activePackage.description = '';\n $scope.activePackage.rotationStart = moment.utc();\n $scope.activePackage.rotationFinish = moment.utc();\n\n $scope.activePackage.categories = [];\n $scope.activePackage.assets = [];\n $scope.activePackage.groups = [];\n $scope.activePackage.plans = [];\n $scope.activePackage.free = true;\n $scope.activePackage.billingType = 'free';\n\n $scope.activePackage.poster = {\n state: '',\n url: '',\n source: ''\n };\n\n $scope.activePackage._PrivateData = {};\n $scope.activePackage._PrivateData.offset = 0;\n $scope.activePackage._PrivateData.limit = 30;\n $scope.activePackage._PrivateData.selectedAsset = [];\n };\n\n $scope.deletePackage = function (pkg, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n if ($scope.loading) return;\n\n ModalConfirmService.Open({\n content: '

    Delete

    This action will delete content permanently. ' +\n 'Are You sure?

    ',\n action: {\n title: 'Delete',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#activePackageLoader');\n\n AssetService.DeleteAsset(pkg)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#activePackageLoader');\n ToastService.Small({\n title: 'Package: ' + pkg.title + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION);\n $scope.clearActivePackage();\n })\n .catch(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Package: ' + pkg.title + ' delete failed',\n color: 'red',\n icon: 'delete'\n }, 1000 * 3);\n });\n }\n }\n });\n };\n\n $scope.manageAssetsFromPackage = function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.loading = true;\n\n var allQ = {};\n\n if (toAdd.length) {\n var addIds = toAdd.map(function (asset) {\n return asset.id;\n });\n\n allQ.add = PackageService.AddAsset([toThis.id], addIds);\n }\n\n if (toRemove.length) {\n var removeIds = toRemove.map(function (asset) {\n return asset.id;\n });\n\n allQ.remove = PackageService.RemoveAsset([toThis.id], removeIds);\n }\n\n return allQ;\n };\n\n $scope.openModal = function (pkg) {\n if ($scope.loading) return;\n\n if (!pkg.isNew) {\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: $scope.manageAssetsFromPackage,\n obj: pkg,\n index: pkg._PrivateData.index,\n currentCollection: _.map(pkg._PrivateData.assets, 'id'),\n data: 'package',\n title: pkg.title,\n filter: {\n packages: true\n }\n })\n\n } else {\n ToastService.Small({\n title: 'You should create Package first',\n color: 'amber',\n icon: 'alert'\n }, 1000 * 3);\n }\n };\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION, function (event) {\n $scope.getPackages();\n });\n }\n\n angular.element('#package_data').css({\n height: angular.element(window).height() + angular.element(window).scrollTop()\n });\n\n $scope.routePackageId = null;\n if ($routeParams.package_id) {\n $scope.routePackageId = Number($routeParams.package_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routePackageId && !$routeParams.package_id) {\n $scope.clearActivePackage();\n }\n $scope.routePackageId = Number($routeParams.package_id) || '';\n });\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION);\n\n $scope.$on('$destroy', function () {\n $rootScope.$$listeners[$rootScope.EVENTS.UPDATE_PACKAGE_COLLECTION] = [];\n $scope.groupWatcher();\n });\n }]);\n","lmApp\n .service('PackageService', ['$q', '$rootScope', function ($q, $rootScope) {\n var service = {};\n\n service.GetPackages = function (offset, limit) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/type/eq/package/dimension/package_type/neq/tv_series';\n\n if (offset && limit) {\n url += '/enum/' + offset + ',' + limit;\n }\n\n url += '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n \n service.GetPackageAssets = function (package_id, offset, limit) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/package_id/eq/' + package_id;\n\n if (offset && limit) {\n url += '/enum/' + offset + ',' + limit;\n }\n\n url += '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n \n service.CreatePackage = function (extid, pkg) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/package/create';\n\n var data = {\n type: 'generic',\n ext_id: extid + ':' + guid(),\n metadata: {}\n };\n\n var language = $rootScope.locale;\n\n data.metadata[language] = {\n 'title': pkg._PrivateData.title,\n 'description': pkg._PrivateData.description\n };\n\n data.metadata['_'] = {\n 'title': pkg._PrivateData.title,\n 'description': pkg._PrivateData.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.SavePackage = function (pkg) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/package/update';\n\n var data = {\n type: 'generic',\n asset_id: pkg.id,\n metadata: {}\n };\n\n var language = $rootScope.locale;\n\n data.metadata[language] = {\n 'title': pkg._PrivateData.title,\n 'description': pkg._PrivateData.description\n };\n\n data.metadata['_'] = {\n 'title': pkg._PrivateData.title,\n 'description': pkg._PrivateData.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetPackagePoster = function (pkg) {\n var deferred = $q.defer();\n\n lh.models.vodAsset.methods.getPosterUrl(pkg)\n .then(function (url) {\n deferred.resolve(url);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAsset = function (pkg_ids, asset_ids) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/package/asset/assoc';\n\n var data = {\n package_id: pkg_ids.join(','),\n asset_id: asset_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveAsset = function (pkg_ids, asset_ids) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/package/asset/deassoc';\n\n var data = {\n package_id: pkg_ids.join(','),\n asset_id: asset_ids.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .controller('PlanController', ['$scope', '$rootScope', '$timeout', '$compile', '$templateCache', '$q', '$routeParams', '$location', 'AssetService', 'MetadataService', 'PlanService', 'GroupService', 'ToastService', 'ManageAssetsWindow',\n function ($scope, $rootScope, $timeout, $compile, $templateCache, $q, $routeParams, $location, AssetService, MetadataService, PlanService, GroupService, ToastService, ManageAssetsWindow) {\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_OFFER_COLLECTION: 'update.plan.collection'});\n\n $scope.planData = [];\n $scope.groupSearch = [];\n $scope.loading = false;\n $scope.activePlan = {};\n\n $scope.search = {\n $: '',\n is_active: true\n };\n\n $scope.searchIsShown = false;\n\n $scope.isActivePlanSet = function () {\n return !_.isEmpty($scope.activePlan);\n };\n\n $scope.toggleSearch = function () {\n $scope.searchIsShown = !$scope.searchIsShown;\n\n $timeout(function () {\n angular.element('input#plan_search').focus();\n }, 200);\n };\n\n $scope.setTab = function (tab) {\n\n if (tab === 'active') $scope.search.is_active = true;\n if (tab === 'archive') $scope.search.is_active = false;\n };\n\n $scope.availableCurrencies = [\n {\n title: 'US Dollar',\n id: 'USD'\n },\n {\n title: 'Russian Ruble',\n id: 'RUB'\n }\n ];\n\n $scope.availableSubscription = [\n {\n label: 'Transactional Permanent (TVOD/DTO)',\n value: 'transactional-own'\n },\n {\n label: 'Transactional Rent (TVOD/DTR)',\n value: 'transactional-rent'\n },\n {\n label: 'Subscription (SVOD)',\n value: 'subscription'\n }\n ];\n\n function getLocalCurrency(currency) {\n\n return _.find($scope.availableCurrencies, {id: currency});\n }\n\n $scope.availableDurationUnits = [\n {\n title: 'Hour(s)',\n id: 'hour'\n },\n {\n title: 'Day(s)',\n id: 'day'\n },\n {\n title: 'Week(s)',\n id: 'week'\n },\n {\n title: 'Month(s)',\n id: 'month'\n },\n {\n title: 'Year(s)',\n id: 'year'\n }\n ];\n\n function getLocalDurationUnit(durationUnit) {\n var parse;\n\n parse = _.find($scope.availableDurationUnits, {id: durationUnit});\n\n if (!parse) {\n parse = null;\n }\n\n return parse;\n }\n\n function preparePlan(plan, index) {\n if (!plan._PrivateData) plan._PrivateData = {};\n\n plan._PrivateData.validateErrors = {};\n plan._PrivateData.assets = [];\n plan._PrivateData.index = index;\n\n plan._PrivateData.groupsOld = [];\n plan._PrivateData.groupsNew = [];\n\n plan.is_active = !!plan.is_active;\n plan._PrivateData.is_active = !!plan.is_active;\n plan._PrivateData.priority = +plan.priority;\n plan._PrivateData.name = plan.name;\n plan._PrivateData.selectedAsset = [];\n\n plan._PrivateData.type = plan.type;\n plan._PrivateData.typeTitle = 'Subscription (SVOD)';\n\n plan._PrivateData.billing_params_price = (plan.billing_params.price ? plan.billing_params.price / 100 : '').toString();\n plan._PrivateData.billing_params_currency = getLocalCurrency(plan.billing_params.currency);\n\n if (plan._PrivateData.billing_params_currency) plan._PrivateData.priceOuput = plan._PrivateData.billing_params_price + ' ' + plan._PrivateData.billing_params_currency.id;\n\n plan._PrivateData.start_time = moment.utc(plan.start_time * 1000);\n plan._PrivateData.end_time = moment.utc(plan.end_time * 1000);\n\n plan._PrivateData.right_params_duration = plan.billing_params.price && plan.right_params.duration.toString() || null;\n if (plan.right_params.duration_unit) plan._PrivateData.right_params_duration_unit = getLocalDurationUnit(plan.right_params.duration_unit);\n\n plan._PrivateData.right_params_trial_duration = plan.right_params.trial_duration && plan.right_params.trial_duration.toString() || null;\n if (plan.right_params.trial_duration_unit) plan._PrivateData.right_params_trial_duration_unit = getLocalDurationUnit(plan.right_params.trial_duration_unit);\n\n if (plan.right_params.trial_duration && plan.right_params.trial_duration_unit) plan._PrivateData.isTrialAvailable = true;\n\n plan._PrivateData.groupsNew = $scope.groupSearch\n .filter(function (group) {\n return _.includes(plan.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.title,\n id: group.id\n }\n });\n\n return plan;\n }\n\n $scope.validateFields = MetadataService.ValidateMetadata.Plan;\n\n $scope.getPlanCollection = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#plansLoader');\n\n return PlanService.GetPlans()\n .then(function (plans) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#plansLoader');\n\n $scope.planData = plans.map(function (plan, index) {\n return preparePlan(plan, index);\n });\n\n if (plans.length && $scope.routePlanId) {\n var plan = _.find(plans, {id: $scope.routePlanId});\n\n if (plan) {\n $scope.setActivePlan(plan);\n }\n }\n\n return true;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#plansLoader');\n\n $rootScope.debugInfo(reason);\n return false;\n })\n };\n\n $scope.setActivePlan = function (plan, index) {\n if ($scope.loading) return;\n\n $scope.direction = 'right';\n\n $scope.activePlan = angular.copy(plan);\n $scope.activeOffer = preparePlan(plan, index);\n $scope.activePlan._PrivateData.assets = [];\n $scope.activePlan._PrivateData.selectedAsset = [];\n $location.search('plan_id', plan.id);\n\n if ($scope.activePlan.assets.length) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#plansLoader');\n\n AssetService.GetAssetInId(plan.assets)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#plansLoader');\n $scope.activePlan._PrivateData.assets = collection;\n });\n }\n };\n\n $scope.clearActivePlan = function () {\n if ($scope.loading) return;\n\n $scope.activePlan = {};\n $location.search('plan_id', null);\n };\n\n $scope.isActivePlan = function (id) {\n\n return $scope.activePlan.id === id;\n };\n\n //$scope.priorityUp = function (plan) {\n // ++plan._PrivateData.priority;\n //};\n //\n //$scope.priorityDown = function (plan) {\n // if (plan._PrivateData.priority > 0) --plan._PrivateData.priority;\n //};\n //\n //$scope.setSubscriptionType = function (plan, type) {\n // plan._PrivateData.type = type;\n //};\n\n $scope.savePlanStatus = function (plan) {\n if ($scope.loading) return;\n if (plan._PrivateData.isNew) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#plansLoader');\n\n PlanService.UpdatePlanStatus(plan)\n .then(function () {\n $scope.getPlanCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n })\n };\n\n $scope.savePlanOptions = function (plan) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validateFields(plan))) {\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n\n return;\n }\n\n var allQ = {};\n $scope.loading = true;\n $rootScope.showLinearProgress('#plansLoader');\n\n if (!plan._PrivateData.isTrialAvailable) {\n\n delete plan._PrivateData.right_params_trial_duration;\n delete plan._PrivateData.right_params_trial_duration_unit;\n }\n\n if (plan._PrivateData.isNew) {\n\n PlanService.CreatePlan(plan)\n .then(function (plann) {\n\n var groupIds = plan._PrivateData.groupsNew.map(function (group) {\n return group.id;\n });\n\n var toAdd = _.difference(groupIds, plan.group_id);\n\n if (toAdd.length) {\n allQ.groupsAdd = GroupService.AddOffer.bind(this, toAdd, [plann.id]);\n }\n\n $q.seqAll(allQ)\n .then(function () {\n $scope.loading = false;\n ToastService.Small({\n title: 'Plan successfully created',\n color: 'green',\n icon: 'cloud-outline'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#plansLoader');\n\n $location.search('plan_id', plann.id);\n $scope.getPlanCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Plan creation failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#plansLoader');\n $rootScope.debugInfo(reason);\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Plan creation failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#plansLoader');\n $rootScope.debugInfo(reason);\n });\n } else {\n\n allQ.metadata = PlanService.UpdatePlan.bind(this, plan);\n\n var groupIds = plan._PrivateData.groupsNew.map(function (group) {\n return group.id;\n });\n\n var toAdd = _.difference(groupIds, plan.group_id);\n\n var toRemove = _.difference(_.reject(plan.group_id, function (item) {\n return item == '0';\n }), groupIds);\n\n if (toAdd.length) {\n allQ.groupsAdd = GroupService.AddOffer.bind(this, toAdd, [plan.id]);\n plan.group_id = plan.group_id.concat(toAdd);\n }\n if (toRemove.length) {\n allQ.groupsRemove = GroupService.RemoveOffer.bind(this, toRemove, [plan.id]);\n plan.group_id = _.difference(plan.group_id, toRemove);\n }\n\n $q.seqAll(allQ)\n .then(function () {\n $scope.loading = false;\n ToastService.Small({\n title: 'Plan successfully updated',\n color: 'green',\n icon: 'cloud-outline'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#plansLoader');\n $scope.getPlanCollection();\n })\n .catch(function (reason) {\n $scope.loading = false;\n ToastService.Small({\n title: 'Plan update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n $rootScope.hideLinearProgress('#plansLoader');\n $rootScope.debugInfo(reason);\n });\n }\n\n };\n\n $scope.toggleSelection = function (activePlan, asset) {\n var idx = activePlan._PrivateData.selectedAsset.indexOf(asset);\n\n if (!asset._PrivateData.isSelected) {\n asset._PrivateData.isSelected = false;\n\n if (idx !== -1) {\n activePlan._PrivateData.selectedAsset.splice(idx, 1);\n }\n } else {\n asset._PrivateData.isSelected = true;\n\n if (idx === -1) {\n activePlan._PrivateData.selectedAsset.push(asset);\n }\n }\n };\n\n $scope.selectAll = function (activePlan) {\n if (activePlan._PrivateData.selectedAsset.length !== activePlan._PrivateData.assets.length) {\n activePlan._PrivateData.selectedAsset = [];\n\n activePlan._PrivateData.assets.forEach(function (asset) {\n if (!asset._PrivateData) asset._PrivateData = {};\n asset._PrivateData.isSelected = true;\n activePlan._PrivateData.selectedAsset.push(asset);\n });\n } else {\n activePlan._PrivateData.assets.forEach(function (asset) {\n asset._PrivateData.isSelected = false;\n });\n activePlan._PrivateData.selectedAsset = [];\n }\n };\n\n $scope.removeAssetsFromPlan = function (activePlan) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#plansLoader');\n\n var _ids = activePlan._PrivateData.selectedAsset.map(function (asset) {\n return asset.id;\n });\n\n PlanService.RemoveAsset([$scope.activePlan.id], _ids)\n .then(function () {\n $scope.getPlanCollection();\n ToastService.Small({\n title: 'Asset(s) successfully removed',\n color: 'green',\n icon: 'package-up'\n }, 1000 * 3);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createNewPlan = function () {\n var newPlan = {};\n\n newPlan.type = 'subscription';\n newPlan.is_active = 1;\n newPlan.group_id = [];\n newPlan.billing_params = {};\n newPlan.right_params = {};\n newPlan.priority = 0;\n newPlan._PrivateData = {};\n newPlan._PrivateData.isNew = true;\n newPlan.start_time = moment.utc().unix();\n newPlan.end_time = moment.utc().unix();\n\n $scope.activePlan = preparePlan(newPlan);\n $scope.activePlan._PrivateData.index = -1;\n };\n\n $scope.manageAssetsFromPlan = function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n var allQ = {};\n\n if (toAdd.length) {\n var addIds = toAdd.map(function (asset) {\n return asset.id;\n });\n\n allQ.add = PlanService.AddAsset([toThis.id], addIds);\n }\n\n if (toRemove.length) {\n var removeIds = toRemove.map(function (asset) {\n return asset.id;\n });\n\n allQ.remove = PlanService.RemoveAsset([toThis.id], removeIds);\n }\n\n return allQ;\n };\n\n $scope.openModal = function (plan) {\n if (!plan._PrivateData.isNew) {\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: $scope.manageAssetsFromPlan,\n obj: plan,\n index: plan._PrivateData.index,\n data: 'plan',\n title: plan.title,\n currentCollection: _.map(plan._PrivateData.assets, 'id'),\n filter: {\n live: true\n }\n })\n\n } else {\n ToastService.Small({\n title: 'You should create plan first',\n color: 'amber',\n icon: 'alert'\n }, 1000 * 3);\n }\n };\n\n GroupService.GetGroups()\n .then(function (collection) {\n\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.UPDATE_OFFER_COLLECTION, function (event) {\n $scope.getPlanCollection();\n });\n }\n\n $timeout(function () {\n var body = document.body;\n var html = document.documentElement;\n\n var height = Math.max(body.scrollHeight, body.offsetHeight,\n html.clientHeight, html.scrollHeight, html.offsetHeight);\n\n angular.element('#plan_data').css({\n height: height\n });\n });\n\n $scope.routePlanId = null;\n if ($routeParams.plan_id) {\n $scope.routePlanId = Number($routeParams.plan_id);\n }\n\n $scope.$on('$routeUpdate', function () {\n if ($scope.routePlanId && !$routeParams.plan_id) {\n $scope.clearActivePlan();\n }\n $scope.routePlanId = Number($routeParams.plan_id) || null;\n });\n\n $scope.groupWatcher = $scope.$watchCollection('groupSearch', function (newValue, oldValue) {\n\n $scope.planData.forEach(function (plan, index) {\n\n preparePlan(plan, index);\n });\n\n if (!_.isEmpty($scope.activePlan)) {\n $scope.activePlan = preparePlan($scope.activePlan, $scope.activePlan.index);\n }\n });\n\n /**\n * Init collection on controller add\n */\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_OFFER_COLLECTION);\n\n $scope.$on('$destroy', function () {\n $rootScope.$$listeners[$rootScope.EVENTS.UPDATE_OFFER_COLLECTION] = [];\n $scope.groupWatcher();\n })\n }]);\n","lmApp\n .factory('PlanService', ['$rootScope', '$q', function ($rootScope, $q) {\n\n var service = {};\n\n /**\n * Get offers from server\n * @returns {*}\n */\n service.GetPlans = function () {\n var deferred = $q.defer();\n\n lh.common.request.get('collection/offer/query' + '?t=' + Date.now())\n .then(function (response) {\n\n deferred.resolve(response.collection.filter(function (plan) {\n\n return plan.type === 'subscription';\n }));\n\n }, function (reason) {\n\n reason.url = 'collection/offer/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Update offer status [is_active]\n * @param offer\n * @returns {*}\n * @constructor\n */\n service.UpdatePlanStatus = function (offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offer.id,\n is_active: +offer._PrivateData.is_active\n };\n\n lh.common.request.post('offer/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'offer/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Update offers options\n * @returns {*}\n */\n service.UpdatePlan = function (offer) {\n var deferred = $q.defer();\n\n offer.billing_params.currency = offer._PrivateData.billing_params_currency.id;\n offer.billing_params.price = parseInt(offer._PrivateData.billing_params_price * 100, 10) || 0;\n\n offer.right_params = {};\n\n if (!offer._PrivateData.right_params_duration) {\n offer.right_params.duration = 0;\n } else {\n offer.right_params.duration = parseInt(offer._PrivateData.right_params_duration, 10) || 0;\n }\n\n if (offer._PrivateData.right_params_duration_unit) offer.right_params.duration_unit = offer._PrivateData.right_params_duration_unit.id;\n\n if (offer._PrivateData.isTrialAvailable) {\n offer.right_params.trial_duration = parseInt(offer._PrivateData.right_params_trial_duration, 10) || 0;\n offer.right_params.trial_duration_unit = (offer._PrivateData.right_params_trial_duration_unit) ? offer._PrivateData.right_params_trial_duration_unit.id : undefined;\n }\n\n if (offer._PrivateData.type === 'transactional-own') {\n offer.right_params.duration = 0;\n }\n\n if (offer._PrivateData.type.indexOf('transactional') !== -1) {\n offer._PrivateData.type = 'transactional';\n }\n\n var data = {\n offer_id: offer.id,\n name: offer._PrivateData.name,\n type: offer._PrivateData.type,\n start_time: offer._PrivateData.start_time.unix(),\n end_time: offer._PrivateData.end_time.unix(),\n priority: offer._PrivateData.priority,\n billing_params: JSON.stringify(offer.billing_params),\n is_active: +offer._PrivateData.is_active\n };\n\n if (!_.isEmpty(offer.right_params)) {\n data.right_params = JSON.stringify(offer.right_params);\n }\n\n lh.common.request.post('offer/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'offer/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Create offers options\n * @returns {*}\n */\n service.CreatePlan = function (offer) {\n var deferred = $q.defer();\n\n offer.billing_params.currency = offer._PrivateData.billing_params_currency.id;\n offer.billing_params.price = parseInt(offer._PrivateData.billing_params_price * 100, 10) || 0;\n\n if (!offer._PrivateData.right_params_duration) {\n offer.right_params.duration = 0;\n } else {\n offer.right_params.duration = parseInt(offer._PrivateData.right_params_duration, 10) || 0;\n }\n\n if (offer._PrivateData.right_params_duration_unit) offer.right_params.duration_unit = offer._PrivateData.right_params_duration_unit.id;\n\n if (offer._PrivateData.isTrialAvailable) {\n offer.right_params.trial_duration = parseInt(offer._PrivateData.right_params_trial_duration, 10) || 0;\n offer.right_params.trial_duration_unit = (offer._PrivateData.right_params_trial_duration_unit) ? offer._PrivateData.right_params_trial_duration_unit.id : undefined;\n }\n\n if (offer._PrivateData.type === 'transactional-own') {\n offer.right_params.duration = 0;\n }\n\n if (offer._PrivateData.type.indexOf('transactional') !== -1) {\n offer._PrivateData.type = 'transactional';\n }\n\n var data = {\n name: offer._PrivateData.name,\n type: offer._PrivateData.type,\n start_time: offer._PrivateData.start_time.unix(),\n end_time: offer._PrivateData.end_time.unix(),\n priority: offer._PrivateData.priority,\n billing_params: JSON.stringify(offer.billing_params),\n right_params: JSON.stringify(offer.right_params),\n is_active: +offer._PrivateData.is_active\n };\n\n lh.common.request.post('offer/mgmt/create', data)\n .then(function (response) {\n deferred.resolve(response.offer);\n }, function (reason) {\n reason.url = 'offer/mgmt/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Create offers options\n * @returns {*}\n */\n service.DeletePlan = function (ext_offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: ext_offer.id\n };\n\n lh.common.request.post('offer/mgmt/delete', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.url = 'offer/mgmt/delete';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAssetToPlan = function (assets, offer) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offer.id,\n asset_id: assets.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/assoc')\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/assoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddAsset = function (offers_ids, assets_ids) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offers_ids.join(','),\n asset_id: assets_ids.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/assoc', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/assoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveAsset = function (offers_ids, assets_ids) {\n var deferred = $q.defer();\n\n var data = {\n offer_id: offers_ids.join(','),\n asset_id: assets_ids.join(',')\n };\n\n lh.common.request.post('offer/mgmt/asset/deassoc', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.data = data;\n reason.url = 'offer/mgmt/asset/deassoc';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:ProfileController\n * @description\n * # ProfileController\n * Controller of the lmApp\n */\nlmApp\n .controller('ProfileController',\n ['$timeout', '$scope', '$rootScope', '$q', '$compile', '$templateCache', 'ModalWindowService', 'ProfileService', 'Platforms', 'ToastService', 'MetadataService', 'OperatorRsc', 'TimezoneService', 'ManagerResource', 'OperatorResource',\n function ($timeout, $scope, $rootScope, $q, $compile, $templateCache, ModalWindowService, ProfileService, Platforms, ToastService, MetadataService, OperatorRsc, TimezoneService, ManagerResource, OperatorResource) {\n\n var getPlatformIcon = MetadataService.GetPlatformIcon;\n var getPlatformName = MetadataService.GetPlatformName;\n var getPlatformApp = MetadataService.GetPlatformApp;\n var getAppUrl = function (platform) {\n var extid = platform.extid || platform.ext_id;\n\n/* if (platform.app_url === '' && extid === 'android') {\n return 'https://play.google.com/store/apps/details?id=com.sotalcloud.ng';\n }\n\n if (platform.app_url === '' && extid === 'ios') {\n return 'https://itunes.apple.com/us/app/sotalng/id1301990330';\n }*/\n\n return platform.app_url;\n };\n\n $scope.apps = {};\n $scope.info = {};\n\n $scope.profileData = {\n operator: {},\n operatorv2: {}\n };\n\n $scope.langs = [];\n $scope.newLangValidateErrors = {};\n $scope.newLang = {};\n var languages = angular.copy(MetadataService.languages.list);\n $scope.languages = [];\n var langCodeToTitle = {};\n for (var i=0; i < languages.length; i++) {\n var lang = languages[i];\n langCodeToTitle[lang.id] = lang.title;\n }\n\n $scope.manager = {};\n $scope.selectedTimezone = {};\n $scope.timezones = angular.copy(TimezoneService.Timezones);\n\n $scope.getSelfInfo = function (account, currentUser) {\n if (!account) return;\n\n $scope.profileData.loading = true;\n $rootScope.showLinearProgress('#profileLoader');\n\n ManagerResource.get().$promise\n .then(function (result) {\n $scope.manager = _.find(result, {username: account.email});\n var tz = $scope.manager.ui_timezone || 'UTC';\n $scope.selectedTimezone = _.find(TimezoneService.Timezones, {title: tz});\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.info.name = account.first_name + ' ' + account.last_name;\n\n if (!$scope.info.name || $scope.info.name === ' ') {\n $scope.info.name = 'N/A';\n }\n\n $scope.info.company = currentUser.company_name;\n if (!$scope.info.company) {\n $scope.info.company = 'N/A';\n }\n\n $scope.info.email = account.email;\n if (!$scope.info.email) {\n $scope.info.email = 'N/A';\n }\n\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n };\n\n if ($rootScope.globals.currentUser.isSuperuser) {\n $scope.getSelfInfo(_.get($rootScope.currentOperator, 'accounts.0.'), $rootScope.globals.currentUser);\n } else if ($rootScope.globals.currentUser.account) {\n $scope.getSelfInfo($rootScope.globals.currentUser.account, $rootScope.globals.currentUser);\n }\n\n $scope.saveData = function () {\n if ($scope.profileData.loading) return;\n $scope.profileData.loading = true;\n $rootScope.showLinearProgress('#profileLoader');\n\n var langs = [];\n for (var i=0; i < $scope.langs.length; i++) {\n langs.push($scope.langs[i].lang);\n }\n\n var params = {\n name: $scope.profileData.operator.title,\n description: $scope.profileData.operator.description,\n logo_url: $scope.profileData.operatorv2.logo_url,\n localization_languages: langs\n };\n\n OperatorResource.update(params).$promise\n .then(function (result) {\n ManagerResource.update({id: $scope.manager.id}, {ui_timezone: $scope.selectedTimezone.title}).$promise\n .then(function () {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n ToastService.Small({\n title: 'Profile successfully updated',\n color: 'green',\n icon: 'account-check'\n });\n })\n .catch(function (reason) {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n })\n .catch(function (reason) {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n };\n\n $scope.removeLogo = function() {\n $scope.profileData.operatorv2.logo_url = '';\n };\n\n $scope.addLang = function() {\n if ($scope.profileData.loading) return;\n\n $scope.newLangValidateErrors = {};\n $scope.newLang = {};\n $scope.languages = [];\n\n var existing = {};\n for (var i=0; i < $scope.langs.length; i++) {\n existing[$scope.langs[i].lang] = true;\n }\n for (var i=0; i < languages.length; i++) {\n var lang = languages[i];\n if (existing.hasOwnProperty(lang.id)) {\n continue\n }\n $scope.languages.push(lang);\n }\n\n var inner = $templateCache.get('add-localization-lang.html');\n inner = $compile(inner)($scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: 'Create',\n color: 'green',\n check: function () {\n var valid = true;\n $scope.newRuleValidateErrors = {};\n if (!_.trim($scope.newLang.title)) {\n $scope.newLangValidateErrors.lang = true;\n valid = false;\n }\n return valid;\n },\n fn: function () {\n $scope.langs.push({\n lang: $scope.newLang.id,\n title: $scope.newLang.title\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ]\n });\n };\n\n //$scope.saveData = function () {\n // if (this.loading) return;\n // this.loading = true;\n // $rootScope.showLinearProgress('#profileLoader');\n //\n // ProfileService.UpdateOperatorsData($scope.profileData.operator)\n // .then(function () {\n // $scope.profileData.loading = false;\n // $rootScope.hideLinearProgress('#profileLoader');\n // ToastService.Small({\n // title: 'Profile successfully updated',\n // color: 'green',\n // icon: 'account-check'\n // });\n // })\n // .catch(function (reason) {\n // $scope.profileData.loading = false;\n // $rootScope.hideLinearProgress('#profileLoader');\n // $rootScope.debugInfo(reason);\n // });\n //};\n\n $scope.profileData.loading = true;\n $rootScope.showLinearProgress('#profileLoader');\n\n OperatorRsc.query(function (data) {\n/* $scope.apps = _.get(data, 'operator.platforms', []).map(function (platform) {\n platform.icon = getPlatformIcon(platform);\n platform.app = getPlatformApp(platform);\n platform.title = getPlatformName(platform);\n platform.app_url = getAppUrl(platform);\n return platform;\n });*/\n\n Platforms.get().$promise\n .then(function (platforms) {\n $scope.apps = platforms.map(function (platform) {\n platform.icon = getPlatformIcon(platform);\n platform.title = getPlatformName(platform);\n platform.app_url = getAppUrl(platform);\n platform.app_name = platform.app_name || '';\n platform.app_bundle = platform.app_bundle || '';\n platform.app_store_url = platform.app_store_url || '';\n platform.clientID = 'cloud:' + data.operator.extid + '_' + platform.type + '_device';\n return platform;\n });\n\n for (var i = 0; i < $scope.apps.length; i += 1) {\n if ($scope.apps[i].type === 'ottweb') {\n var service = _.find($rootScope._self.services, {name: 'app.stockweb'});\n if (service.instance.configuration.aliases && service.instance.configuration.aliases.length) {\n $scope.apps[i].app_url = 'https://' + service.instance.configuration.aliases[0]\n }\n break\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n $scope.profileData.operator = data.operator;\n OperatorRsc.getCurrentOperator().$promise\n .then(function (response) {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n $scope.profileData.operatorv2 = response.data;\n if ($scope.profileData.operatorv2.localization_languages && $scope.profileData.operatorv2.localization_languages.length) {\n for (var i = 0; i < $scope.profileData.operatorv2.localization_languages.length; i += 1) {\n var lang = $scope.profileData.operatorv2.localization_languages[i];\n $scope.langs.push({\n lang: lang,\n title: langCodeToTitle[lang]\n });\n }\n }\n })\n .catch(function (reason) {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.profileData.loading = false;\n $rootScope.hideLinearProgress('#profileLoader');\n $rootScope.debugInfo(reason);\n });\n\n $scope.editPlatform = function(platform) {\n if ($scope.loading) return;\n\n $scope.editedPlatform = angular.copy(platform);\n\n var inner = $templateCache.get('edit-platform.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Update',\n color: 'green',\n fn: function () {\n $scope.loading = true;\n\n const params = {\n app_name: $scope.editedPlatform.app_name,\n app_bundle: $scope.editedPlatform.app_bundle,\n app_store_url: $scope.editedPlatform.app_store_url,\n }\n\n Platforms.update({id: $scope.editedPlatform.id}, params).$promise\n .then(function () {\n $scope.loading = false;\n\n platform.app_name = $scope.editedPlatform.app_name\n platform.app_bundle = $scope.editedPlatform.app_bundle\n platform.app_store_url = $scope.editedPlatform.app_store_url\n\n ToastService.Small({\n title: 'Platform successfully updated',\n color: 'green',\n icon: 'account-check'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ],\n size: {\n s: 11,\n l: 6\n }\n });\n };\n\n //ProfileService.GetOperatorData()\n // .then(function (data) {\n // $scope.profileData.loading = false;\n // $rootScope.hideLinearProgress('#profileLoader');\n // $scope.profileData.operator.title = data.operator.title;\n //\n // $scope.profileData.operator.description = data.operator.description;\n //\n // $scope.apps = data.operator.platforms.map(function (platform) {\n // platform.icon = getPlatformIcon(platform);\n // platform.app = getPlatformApp(platform);\n // platform.title = getPlatformName(platform);\n // return platform;\n // });\n // }, function (reason) {\n // $scope.profileData.loading = false;\n // $rootScope.hideLinearProgress('#profileLoader');\n // $rootScope.debugInfo(reason);\n // });\n\n }\n ]);\n","lmApp\n .service('ProfileService', ['$q', '$rootScope', function ($q, $rootScope) {\n\n var service = {};\n\n service.UpdateOperatorsPlatform = function (data) {\n var deferred = $q.defer();\n\n var platformData = {\n platform_id: data.id\n };\n\n if (data.app_url) platformData.app_url = data.app_url;\n if (data.logo_url) platformData.logo_url = data.logo_url;\n\n lh.common.request.post('cloud/mgmt/operator/platform/update', platformData)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.url = 'cloud/mgmt/operator/platform/update';\n reason.data = platformData;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UpdateOperatorsData = function (profileData) {\n var deferred = $q.defer();\n\n var data = {\n title: profileData.title,\n description: profileData.description\n //offer_text: profileData.userAgreement,\n //email_template: JSON.stringify(profileData.email_template),\n //sms_confirmation_text: profileData.sms_text,\n //support_phone: profileData.support_phone,\n //support_email: profileData.support_email\n };\n\n lh.common.request.post('cloud/mgmt/operator/update', data)\n .then(function (response) {\n deferred.resolve();\n }, function (reason) {\n reason.url = 'cloud/mgmt/operator/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UploadImage = function (file) {\n var deferred = $q.defer();\n\n var params = {\n Key: file.name,\n ContentType: file.type,\n ContentLength: file.size,\n Body: file,\n ACL: 'public-read'\n };\n $rootScope.aws.upload(params, function (err, data) {\n if (data && 'Location' in data) {\n deferred.resolve(data.Location);\n return;\n }\n\n if (err) {\n deferred.reject({\n url: 'aws3',\n message: err,\n data: params\n });\n return;\n }\n });\n\n return deferred.promise;\n };\n\n service.GetOperatorData = function () {\n var deferred = $q.defer();\n\n lh.common.request('cloud/mgmt/get_operator')\n .then(function (data) {\n deferred.resolve(data);\n }, function (reason) {\n reason.url = 'cloud/mgmt/get_operator';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:MainCtrl\n * @description\n * # MainCtrl\n * Controller of the lmApp\n */\nlmApp.controller('RegisterController', ['$scope', '$rootScope', '$location', '$routeParams', '$timeout', '$interval', 'RegistrationService', 'ValidatorService', 'ApiService', 'vcRecaptchaService',\n function ($scope, $rootScope, $location, $routeParams, $timeout, $interval, RegistrationService, ValidatorService, ApiService, vcRecaptchaService) {\n $scope.regEzp = /^[0-9a-z-_]{3,20}$/;\n $scope.translit = translit;\n\n $scope.setResponse = function (response) {\n $scope.registrationFormData.inputs.recaptchaResponse = response;\n $scope.registrationFormData.validation.errors.recaptcha = $scope.registrationFormData.validation.recaptcha();\n };\n\n $scope.setWidgetId = function (widgetId) {\n $timeout(function () {\n $scope.widgetId = widgetId;\n }, 1000);\n };\n\n $scope.cbExpiration = function () {\n vcRecaptchaService.reload($scope.widgetId);\n $scope.registrationFormData.inputs.recaptchaResponse = null;\n };\n\n $scope.registrationFormData = {\n loading: false,\n isRegistrationComplete: false,\n inputs: {\n name: '',\n firstName: '',\n lastName: '',\n company: '',\n country: '',\n email: '',\n password1: '',\n password2: '',\n recaptchaResponse: null,\n invite: ''\n },\n\n validation: {\n errorPass: '',\n errorConfirm: '',\n ready: function () {\n return $scope.registrationFormData.inputs.name && !this.name() && !this.errors.name &&\n $scope.registrationFormData.inputs.email && !this.email() && !this.errors.email &&\n $scope.registrationFormData.inputs.password1 && !this.checkPassLength() && !this.errors.pass1 &&\n $scope.registrationFormData.inputs.password2 && !this.checkPass2() && !this.errors.pass2 &&\n $scope.registrationFormData.inputs.firstName && !this.firstName() && !this.errors.firstName &&\n $scope.registrationFormData.inputs.lastName && !this.lastName() && !this.errors.lastName &&\n $scope.registrationFormData.inputs.company && !this.company() && !this.errors.company &&\n $scope.registrationFormData.inputs.country && !this.country() && !this.errors.country &&\n $scope.registrationFormData.inputs.invite && !this.invite() && !this.errors.invite &&\n $scope.registrationFormData.inputs.recaptchaResponse && !this.recaptcha() && !this.errors.recaptchaResponse;\n },\n\n email: function () {\n if (!$scope.registrationFormData.inputs.email.length) {\n $scope.registrationFormData.validation.errorEmail = 'Empty Email';\n return true;\n }\n\n if ($scope.registrationFormData.inputs.email.length && !ValidatorService.Email($scope.registrationFormData.inputs.email)) {\n $scope.registrationFormData.validation.errorEmail = 'Wrong Email format';\n return true;\n }\n },\n\n emailIsExist: function () {\n if (!$scope.registrationFormData.inputs.email) return;\n\n if ($scope.IntEmail) $timeout.cancel($scope.IntEmail);\n\n $scope.IntEmail = $timeout(function () {\n if ($scope.emailCheckInProgress) return;\n\n $scope.emailCheckInProgress = true;\n var url = '1/operator/exists?email=' + $scope.registrationFormData.inputs.email;\n ApiService.Request(url, 'GET')\n .then(function (response) {\n $scope.emailCheckInProgress = false;\n if (response.exists) {\n $scope.registrationFormData.validation.errorEmail = 'Sorry. Already exist';\n $scope.registrationFormData.validation.errors.email = true;\n }\n })\n .catch(function () {\n $scope.emailCheckInProgress = false;\n })\n }, 250);\n },\n\n checkPassLength: function () {\n if (!$scope.registrationFormData.inputs.password1.length) {\n $scope.registrationFormData.validation.errorPass = 'Empty Password';\n return true;\n }\n\n if ($scope.registrationFormData.inputs.password1 && $scope.registrationFormData.inputs.password1.length < 6) {\n this.errorPass = 'Password minimum length 6';\n return true;\n }\n },\n\n checkPass2: function () {\n if (!this.checkPassLength() &&\n $scope.registrationFormData.inputs.password2 &&\n $scope.registrationFormData.inputs.password1 !== $scope.registrationFormData.inputs.password2) {\n this.errorConfirm = 'Password does not match';\n return true;\n }\n },\n\n name: function () {\n if (!$scope.registrationFormData.inputs.name || !$scope.regEzp.test(translit($scope.registrationFormData.inputs.name.toLowerCase()))) {\n this.errorName = 'Min length 3, max 20. Only Latin letters, numbers, -, _';\n return true;\n }\n },\n\n nameIsExist: function () {\n if (!$scope.registrationFormData.inputs.name) return;\n\n if ($scope.IntName) $timeout.cancel($scope.IntName);\n\n $scope.IntName = $timeout(function () {\n if ($scope.nameCheckInProgress) return;\n\n $scope.nameCheckInProgress = true;\n var url = '1/operator/exists?name=' + translit($scope.registrationFormData.inputs.name);\n ApiService.Request(url, 'GET')\n .then(function (response) {\n $scope.nameCheckInProgress = false;\n if (response.exists) {\n $scope.registrationFormData.validation.errorName = 'Sorry. Already exist';\n $scope.registrationFormData.validation.errors.name = true;\n }\n })\n .catch(function () {\n $scope.nameCheckInProgress = false;\n })\n }, 250);\n },\n\n firstName: function () {\n if (!$scope.registrationFormData.inputs.firstName) {\n this.errorFirstName = 'Leave your contact information so we can contact you';\n return true;\n }\n },\n\n lastName: function () {\n if (!$scope.registrationFormData.inputs.lastName) {\n this.errorLastName = 'Leave your contact information so we can contact you';\n return true;\n }\n },\n\n company: function () {\n if (!$scope.registrationFormData.inputs.company) {\n this.errorCountry = 'Required field';\n return true;\n }\n },\n\n country: function () {\n if (!$scope.registrationFormData.inputs.country) {\n this.errorCompany = 'Required field';\n return true;\n }\n },\n\n recaptcha: function () {\n if (_.isUndefined($scope.widgetId) || !$scope.registrationFormData.inputs.recaptchaResponse) {\n this.errorRecaptchaResponse = 'Wrong reCaptcha';\n return true;\n }\n },\n\n invite: function () {\n if (!$scope.registrationFormData.inputs.invite) {\n this.errorInvite = 'Required field';\n return true;\n }\n },\n\n errors: {}\n },\n\n register: function () {\n if (this.loading) return;\n if (!this.validation.ready()) {\n $scope.registrationFormData.validation.nameIsExist();\n $scope.registrationFormData.validation.emailIsExist();\n $scope.registrationFormData.validation.errors.name = $scope.registrationFormData.validation.name();\n $scope.registrationFormData.validation.errors.firstName = $scope.registrationFormData.validation.firstName();\n $scope.registrationFormData.validation.errors.lastName = $scope.registrationFormData.validation.lastName();\n $scope.registrationFormData.validation.errors.company = $scope.registrationFormData.validation.company();\n $scope.registrationFormData.validation.errors.country = $scope.registrationFormData.validation.country();\n $scope.registrationFormData.validation.errors.email = $scope.registrationFormData.validation.email();\n $scope.registrationFormData.validation.errors.pass1 = $scope.registrationFormData.validation.checkPassLength();\n $scope.registrationFormData.validation.errors.pass2 = $scope.registrationFormData.validation.checkPass2();\n $scope.registrationFormData.validation.errors.recaptcha = $scope.registrationFormData.validation.recaptcha();\n $scope.registrationFormData.validation.errors.invite = $scope.registrationFormData.validation.invite();\n return;\n }\n\n this.error = '';\n this.loading = true;\n $rootScope.showLinearProgress('#registerLoader');\n\n RegistrationService.Register($scope.registrationFormData.inputs)\n .then(function () {\n $scope.registrationFormData.isRegistrationComplete = true;\n $scope.registrationFormData.error = '';\n $scope.registrationFormData.loading = false;\n $rootScope.hideLinearProgress('#registerLoader');\n\n }, function (reason) {\n $scope.registrationFormData.loading = false;\n $rootScope.hideLinearProgress('#registerLoader');\n\n if (reason.message) {\n switch (reason.message) {\n case 'operator with this ext_id already exist':\n $scope.registrationFormData.error = 'This EMAIL has been already registered in the system';\n break;\n\n case 'operator already exists':\n $scope.registrationFormData.error = 'This Project name already exists in the system';\n break;\n\n case 'invalid email':\n $scope.registrationFormData.error = 'Invalid email address';\n break;\n\n case 'invalid email format':\n $scope.registrationFormData.error = 'Incorrect Email format';\n break;\n\n case 'invalid password':\n $scope.registrationFormData.error = 'Invalid characters in password';\n break;\n\n case 'invalid recaptcha':\n $scope.registrationFormData.error = 'Invalid reCaptcha';\n\n break;\n\n case 'invalid invite code':\n $scope.registrationFormData.error = 'Invalid activation code';\n $scope.registrationFormData.validation.errors.invite = 'Invalid activation code';\n break;\n\n default:\n $rootScope.debugInfo(reason);\n break;\n }\n\n if (!_.isUndefined($scope.widgetId)) {\n vcRecaptchaService.reload($scope.widgetId);\n }\n } else {\n $rootScope.debugInfo(reason);\n }\n });\n },\n\n error: ''\n };\n\n $scope.watcher = $scope.$watchCollection('registrationFormData.inputs', function (newValue, oldValue) {\n if (newValue.name !== oldValue.name) {\n $scope.registrationFormData.validation.errors.name = $scope.registrationFormData.validation.name();\n $scope.registrationFormData.validation.nameIsExist();\n }\n if (newValue.firstName !== oldValue.firstName) {\n $scope.registrationFormData.validation.errors.firstName = $scope.registrationFormData.validation.firstName();\n }\n if (newValue.lastName !== oldValue.lastName) {\n $scope.registrationFormData.validation.errors.lastName = $scope.registrationFormData.validation.lastName();\n }\n if (newValue.company !== oldValue.company) {\n $scope.registrationFormData.validation.errors.company = $scope.registrationFormData.validation.company();\n }\n if (newValue.country !== oldValue.country) {\n $scope.registrationFormData.validation.errors.country = $scope.registrationFormData.validation.country();\n }\n if (newValue.email !== oldValue.email) {\n $scope.registrationFormData.validation.errors.email = $scope.registrationFormData.validation.email();\n $scope.registrationFormData.validation.emailIsExist();\n }\n if (newValue.password1 !== oldValue.password1) {\n $scope.registrationFormData.validation.errors.pass1 = $scope.registrationFormData.validation.checkPassLength();\n }\n if (newValue.password2 !== oldValue.password2) {\n $scope.registrationFormData.validation.errors.pass2 = $scope.registrationFormData.validation.checkPass2();\n }\n });\n\n $timeout(function () {\n $scope.recaptchaReady = true;\n }, 1000);\n\n $scope.$on('$destroy', function () {\n if ($scope.intPreloadSmall) $interval.cancel($scope.intPreloadSmall);\n if ($scope.intPreload) $interval.cancel($scope.intPreload);\n $scope.watcher();\n });\n\n }]);\n","lmApp\n .service('RegistrationService', ['$q', 'ApiService', function ($q, ApiService) {\n\n var service = {};\n\n service.Register = function (user) {\n var deferred = $q.defer();\n\n var data = {\n email: user.email,\n password: user.password1,\n name: translit(user.name),\n first_name: user.firstName,\n last_name: user.lastName,\n company_name: user.company,\n recaptcha_response: user.recaptchaResponse,\n invite_code: user.invite\n };\n\n ApiService.Request('1/register', 'POST', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'supervisor/1/register';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.Check = function (email, name) {\n var deferred = $q.defer();\n\n var urlEmail = '1/operator/exists?email=';\n var urlName = '1/operator/exists?name=';\n\n var all = {};\n all.email = ApiService.Request(urlEmail);\n\n all.name = ApiService.Request(urlName);\n\n $q.all(all)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = '1/operator/exists';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.controller('SessionsController', ['$routeParams', '$location', '$q', '$scope', '$interval', '$rootScope', '$templateCache', '$compile', 'ModalWindowService', '$filter', 'ToastService', 'SubscriberResource', 'AssetResource', 'SessionResource', 'ManagerResource', 'TimezoneService',\n function ($routeParams, $location, $q, $scope, $interval, $rootScope, $templateCache, $compile, ModalWindowService, $filter, ToastService, SubscriberResource, AssetResource, SessionResource, ManagerResource, TimezoneService) {\n $scope.loading = false;\n $scope.sessions = [];\n $scope.offset = 0;\n $scope.limit = 10;\n $scope.lastUpdateTime = moment();\n\n var timeFilter = '';\n var assetResourceTypes = {\n 'dvr': 'TV catch-up',\n 'hls-catchup': 'TV catch-up',\n 'hls-live': 'TV live',\n 'hls': 'Video on demand'\n };\n var assetResourceCache = {}; // key: resource ID, value: asset title\n\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n // Sessions\n var processSessions = function(sessions) {\n var result = [];\n var currentTime = moment();\n for (var i = 0; i < sessions.length; i++) {\n var session = sessions[i];\n var item = {\n subscriber: session.ticket.subscriber.username,\n contentType: 'N/A',\n contentTitle: 'N/A',\n sessionStart: session.ticket.create_time,\n sessionEnd: session.last_use_time,\n closed: !(!session.ticket.closed && currentTime.diff(moment(session.last_use_time), 'hours') < 3),\n duration: moment.utc(moment(session.last_use_time).diff(moment(session.ticket.create_time), 'seconds') * 1000).format('HH:mm:ss'),\n IP: session.ip,\n userAgent: session.ua,\n tickedId: session.ticket.id,\n sessionId: session.id\n };\n if (session.ticket) {\n if (session.ticket.device) {\n if (session.ticket.device.os) item.deviceOS = session.ticket.device.os;\n if (session.ticket.device.model) item.deviceModel = session.ticket.device.model;\n }\n if (session.ticket.asset) {\n if (session.ticket.asset.name) item.contentTitle = session.ticket.asset.name;\n if (session.ticket.asset.type) item.contentType = session.ticket.asset.type;\n }\n }\n result.push(item);\n }\n return result;\n };\n\n $scope.getSessions = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#sessionLoader');\n\n var params = {\n '$expand': 'ticket(resource,device,subscriber,asset)',\n '$orderby': '-create_time',\n //'create_time[gt]': moment().subtract(12, 'months').format('YYYY-MM-DDTHH:mm:ss') + 'Z',\n 'ticket.media_type[eq]': 'resource',\n '$limit': $scope.limit + 1,\n '$offset': $scope.offset\n };\n if (timeFilter) {\n params['create_time[gt]'] = timeFilter;\n }\n return SessionResource.get(params).$promise\n .then(function (sessions) {\n $scope.lastUpdateTime = moment();\n\n if (sessions.length === 0) {\n $scope.sessions = [];\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n return;\n }\n\n var resourceIDs = [];\n for (var i = 0; i < sessions.length; i++) {\n if (!sessions[i].ticket.resource) {\n continue\n }\n if (assetResourceCache.hasOwnProperty(sessions[i].ticket.resource.id)) {\n continue\n }\n resourceIDs.push(sessions[i].ticket.resource.id);\n }\n/* if (!resourceIDs.length) {\n $scope.sessions = processSessions(sessions);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n return;\n }*/\n\n $scope.sessions = processSessions(sessions);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n\n /* var params = {\n 'resources.id[in]': resourceIDs.join(','),\n '$expand': 'resources'\n };\n AssetResource.get(params).$promise\n .then(function (assets) {\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n for (var j = 0; j < asset.resources.length; j++) {\n assetResourceCache[asset.resources[j].id] = asset.name;\n }\n }\n $scope.sessions = processSessions(sessions);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n $rootScope.debugInfo(reason);\n });*/\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#sessionLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.isStart = function () {\n return $scope.routePage === 1;\n };\n\n $scope.nextPage = function () {\n if ($scope.isEnd || $scope.loading) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n $scope.offset += $scope.limit;\n $scope.getSessions();\n };\n\n $scope.prevPage = function () {\n if ($scope.isStart()) return;\n if ($scope.offset >= $scope.limit) {\n $scope.offset -= $scope.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n $scope.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n }\n $scope.getSessions();\n };\n\n // Chart data\n $scope.chart = {\n loading: true,\n periodStart: '',\n totalSessions: 0,\n totalUniqueUsers: 0,\n totalUniqueDevices: 0,\n totalPlayed: 0,\n sessionChartLabels: [],\n sessionChartSeries: ['Total Sessions'],\n sessionChartData: [[]],\n deviceChartLabels: ['iOS', 'Android', 'Others'],\n deviceChartData: [0, 0, 0],\n topContent: []\n };\n\n function duration(secs) {\n return Math.floor(moment.duration(secs,'seconds').asHours()) + 'h ' + moment.duration(secs,'seconds').minutes() + 'm ' + moment.duration(secs,'seconds').seconds() + 's';\n }\n function barChartLabelDay(t) {\n return t.utc().format('YYYY/MM/DD');\n }\n function barChartLabelDayNext(t) {\n return moment(t).add(1, 'days');\n }\n function barChartLabelHour(t) {\n return t.utc().format('YYYY/MM/DD HH') + ':00';\n }\n function barChartLabelHourNext(t) {\n return moment(t).add(1, 'hours');\n }\n\n var bars = {}; // label to value\n var barOrder = {}; // label to order\n var labelType = 'hour';\n var labelFunc = barChartLabelHour;\n\n function rangeChartBars(startdate) {\n var nextFunc = barChartLabelHourNext;\n var now = moment();\n var next = startdate;\n\n var hours = now.diff(startdate, 'hours');\n if (hours > 72) {\n labelFunc = barChartLabelDay;\n nextFunc = barChartLabelDayNext;\n labelType = 'day';\n }\n\n var order = 0;\n var label = '';\n for (var i = 0; i < 200; i++) {\n label = labelFunc(next);\n bars[label] = 0;\n barOrder[label] = order;\n order++;\n next = nextFunc(next);\n if (now.diff(next, 'hours') < 0) break;\n }\n }\n\n function getTop10Content(resourcePlayingTime) {\n var topContent = {};\n for (var id in resourcePlayingTime) {\n if (!assetResourceCache.hasOwnProperty(id)) {\n continue\n }\n var secs = resourcePlayingTime[id];\n var assetName = assetResourceCache[id];\n if (!topContent.hasOwnProperty(assetName)) {\n topContent[assetName] = 0;\n }\n topContent[assetName] += secs;\n }\n\n var sorted = [];\n for (var title in topContent) {\n sorted.push({title: title, played: topContent[title]});\n }\n sorted.sort(function(a, b) {return b.played - a.played});\n\n var result = [];\n var limit = sorted.length < 10 ? sorted.length : 10;\n for (var i = 0; i < limit; i++) {\n result.push({\n title: sorted[i].title,\n played: duration(sorted[i].played)\n })\n }\n return result;\n }\n\n $scope.getChartData = function() {\n var params = {\n '$expand': 'ticket(device)',\n '$orderby': '-create_time',\n 'ticket.media_type[eq]': 'resource',\n '$limit': 1000,\n '$offset': 0\n };\n if (timeFilter) {\n params['create_time[gt]'] = timeFilter;\n }\n return SessionResource.get(params).$promise\n .then(function (sessions) {\n if (sessions.length === 0) {\n $scope.chart.loading = false;\n return;\n }\n\n var lastSession = sessions[sessions.length-1];\n var startdate = moment(lastSession.ticket.create_time);\n rangeChartBars(startdate);\n\n var uniqueDevices = {};\n var uniqueUsers = {};\n var totalPlayed = 0;\n var deviceOSCount = {ios: 0, android: 0, others: 0};\n var resourcePlayingTime = {};\n\n for (var i = 0; i < sessions.length; i++) {\n var session = sessions[i];\n var createTime = moment(session.ticket.create_time);\n\n bars[labelFunc(createTime)] += 1;\n uniqueUsers[session.ticket.subscriber.id] = true;\n\n var os = '';\n if (session.ticket.device && session.ticket.device.os) {\n os = session.ticket.device.os.toLowerCase();\n }\n if (session.ticket.device && session.ticket.device.id) {\n if (!uniqueDevices.hasOwnProperty(session.ticket.device.id)) {\n if ((os === 'ios' || os === 'android')) {\n deviceOSCount[os] += 1\n } else {\n deviceOSCount.others += 1\n }\n }\n uniqueDevices[session.ticket.device.id] = true;\n }\n\n var played = moment(session.last_use_time).diff(moment(session.ticket.create_time), 'seconds');\n if (session.ticket.resource) {\n if (!resourcePlayingTime.hasOwnProperty(session.ticket.resource.id)) {\n resourcePlayingTime[session.ticket.resource.id] = 0;\n }\n resourcePlayingTime[session.ticket.resource.id] += played;\n }\n totalPlayed += played;\n }\n\n $scope.chart.totalSessions = sessions.length;\n $scope.chart.periodStart = lastSession.ticket.create_time;\n $scope.chart.totalUniqueUsers = Object.keys(uniqueUsers).length;\n $scope.chart.totalUniqueDevices = Object.keys(uniqueDevices).length;\n $scope.chart.deviceChartData[0] = deviceOSCount.ios;\n $scope.chart.deviceChartData[1] = deviceOSCount.android;\n $scope.chart.deviceChartData[2] = deviceOSCount.others;\n $scope.chart.totalPlayed = duration(totalPlayed);\n\n for (var label in bars) {\n var count = bars[label];\n if (!barOrder.hasOwnProperty(label)) {\n continue\n }\n var editedLabel = label;\n if (labelType === 'hour') {\n editedLabel = moment($scope.convertTime(label)).format('YYYY/MM/DD HH') + ':00';\n }\n $scope.chart.sessionChartLabels[barOrder[label]] = editedLabel;\n $scope.chart.sessionChartData[0][barOrder[label]] = count;\n }\n\n // Top Content\n var resourceIDs = [];\n for (var id in resourcePlayingTime) {\n if (resourcePlayingTime[id] > 0 && !assetResourceCache.hasOwnProperty(id)) {\n resourceIDs.push(id);\n }\n }\n if (!resourceIDs.length) {\n $scope.chart.topContent = getTop10Content(resourcePlayingTime);\n $scope.chart.loading = false;\n return;\n }\n var assetParams = {\n 'resources.id[in]': resourceIDs.join(','),\n '$expand': 'resources'\n };\n AssetResource.get(assetParams).$promise\n .then(function (assets) {\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n for (var j = 0; j < asset.resources.length; j++) {\n assetResourceCache[asset.resources[j].id] = asset.name;\n }\n }\n $scope.chart.topContent = getTop10Content(resourcePlayingTime);\n $scope.chart.loading = false;\n })\n .catch(function (reason) {\n $scope.chart.loading = false;\n $rootScope.debugInfo(reason);\n });\n })\n .catch(function (reason) {\n $scope.chart.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n //\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.offset = ($scope.routePage - 1) * $scope.limit;\n } else {\n $scope.routePage = 1;\n }\n\n $scope.getSessions();\n\n var params = {\n '$orderby': '-create_time',\n '$expand': 'ticket',\n 'ticket.media_type[eq]': 'resource',\n '$limit': 1,\n '$offset': 1001\n };\n\n SessionResource.get(params).$promise\n .then(function (sessions) {\n if (sessions.length) {\n timeFilter = sessions[0].ticket.create_time;\n }\n $scope.getChartData();\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n $scope.updateIntreval = $interval(function () {\n $scope.getSessions();\n $scope.getChartData();\n }, 30 * 1000);\n\n $scope.openSession = function(session) {\n if ($scope.loading) return;\n\n $scope.selectedSession = session;\n\n var inner = $templateCache.get('session-details.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Close',\n color: 'red',\n fn: function () {}\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n $scope.$on(\"$destroy\", function () {\n $interval.cancel($scope.updateIntreval);\n });\n }]);\n","lmApp\n .controller('ShowcaseController', ['$scope', '$rootScope', 'AssetService', '$q', '$timeout', 'ShowcaseService', 'ToastService', 'ModalWindowService',\n function ($scope, $rootScope, AssetService, $q, $timeout, ShowcaseService, ToastService, ModalWindowService) {\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {UPDATE_SHOWCASE_COLLECTION: 'update:showcase:collection'});\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, {SAVE_SHOWCASE_COLLECTION: 'save:showcase:collection'});\n\n $scope.showcaseData = [];\n $scope.platforms = [];\n $scope.loading = false;\n $scope.activeShowcase = {};\n $scope.activePlatform = {};\n $scope.newShowcase = {\n isShown: false,\n labels: [],\n _PrivateData: {}\n };\n\n var _allPredefinedLabels = [\n {\n title: 'Promo Slider',\n id: 'promo.home.slider'\n },\n {\n title: 'Background',\n id: 'promo.background.slider'\n }\n ];\n\n var _getLabels = function (platform) {\n var labels = [];\n\n switch (platform.extid) {\n case 'ottweb':\n labels = [\n {\n title: 'Promo Slider',\n id: 'promo.home.slider'\n },\n {\n title: 'Background',\n id: 'promo.background.slider'\n }\n ];\n break;\n }\n\n return labels;\n };\n\n $scope.toggleNewShowcase = function () {\n $timeout(function () {\n $scope.newShowcase.isShown = !$scope.newShowcase.isShown;\n })\n };\n\n $scope.createNewShowcase = function (showcase) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n ShowcaseService.CreateShowcase(showcase, $scope.activePlatform.id)\n .then(function (response) {\n response.showcase.labels = showcase.labels.map(function (label) {\n if (_.find(_allPredefinedLabels, {id: label})) {\n return _.find(_allPredefinedLabels, {id: label});\n } else {\n return {\n title: label,\n id: label\n }\n }\n });\n\n return ShowcaseService.SetShowcaseLabels(response.showcase)\n .then(function () {\n ToastService.Small({\n title: 'Showcase successfully created',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.newShowcase.isShown = false;\n $scope.newShowcase.labels = [];\n $scope.newShowcase._PrivateData = {};\n $scope.getShowcases();\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n })\n\n };\n\n $scope.showBackground = function (showcase) {\n showcase._PrivateData.background.isShown = !showcase._PrivateData.background.isShown;\n };\n\n $scope.saveShowcaseBackground = function (showcase, index) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var allQ = {};\n\n if (showcase._PrivateData.background.isNew) {\n allQ.background = ShowcaseService.CreateBanner(showcase._PrivateData.background)\n .then(function (response) {\n showcase._PrivateData.background.banner_id = response.banner.id;\n showcase._PrivateData.background.isNew = false;\n return ShowcaseService.UpdateShowcase(showcase);\n });\n } else {\n allQ.background = ShowcaseService.UpdateBanner(showcase._PrivateData.background)\n .then(function (response) {\n return ShowcaseService.UpdateShowcase(showcase);\n });\n }\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Showcase\\'s background successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.getShowcases(showcase.id, index);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Showcase\\' background update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n })\n\n };\n\n $scope.updateShowcaseLayout = function (showcase, index) {\n var diff = showcase._Grid.filter(function (tile) {\n return tile._PrivateData.isMoved;\n });\n\n if (diff.length) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var allQ = [];\n\n diff.forEach(function (tile) {\n allQ.push(ShowcaseService.UpdateTilePosition(tile));\n });\n\n $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Showcase layout successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.getShowcases();\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Showcase layout update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n })\n } else {\n showcase._PrivateData.isLayoutChanged = false;\n }\n };\n\n $scope.restoreShowcaseLayout = function (showcase, index) {\n $scope.getShowcases(showcase.id, index)\n };\n\n $scope.getShowcases = function (_id, index) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var promise;\n\n if (_id) {\n promise = ShowcaseService.GetShowcasesById(_id)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n\n var showcase = collection[0];\n showcase._PrivateData = {};\n\n showcase.labels = showcase.labels.map(function (label) {\n if (_.find(_allPredefinedLabels, {id: label})) {\n return _.find(_allPredefinedLabels, {id: label});\n } else {\n return {\n title: label,\n id: label\n }\n }\n });\n\n showcase.index = index;\n\n $scope.showcaseData[index] = showcase;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n })\n } else {\n promise = ShowcaseService.GetShowcases()\n .then(function (collection) {\n $scope.showcaseData = _.map(collection, function (showcase, index) {\n showcase._PrivateData = {};\n showcase.index = index;\n showcase.labels = showcase.labels.map(function (label) {\n if (_.find(_allPredefinedLabels, {id: label})) {\n return _.find(_allPredefinedLabels, {id: label});\n } else {\n return {\n title: label,\n id: label\n }\n }\n });\n return showcase;\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n })\n }\n\n return promise;\n };\n\n $scope.addNewLabel = function (showcase, label) {\n var index = _.find(showcase.labels, {id: label});\n\n if (!label || index) return;\n showcase.labels.push({\n title: label,\n id: label\n });\n };\n\n $scope.keyPress = function (showcase, keyEvent) {\n var key = keyEvent.which;\n\n if (key === 13) {\n $scope.addNewLabel(showcase, showcase._PrivateData.newLabel);\n showcase._PrivateData.newLabel = '';\n }\n };\n\n $scope.setActivePlatform = function (platform) {\n $scope.activePlatform = platform;\n };\n\n $scope.isActivePlatform = function (platform) {\n return platform.id === $scope.activePlatform.id;\n };\n\n $scope.getCurrentPlatformShowcases = function (platform) {\n return $scope.showcaseData.filter(function (showcase) {\n return showcase.platform_id === platform.id;\n });\n };\n\n $scope.saveShowcase = function (showcase, index) {\n if ($scope.loading) return;\n\n $rootScope.showLinearProgress('#showcasesLoader');\n $scope.loading = true;\n\n var allQ = {};\n\n allQ.update = ShowcaseService.UpdateShowcase(showcase);\n\n allQ.labels = ShowcaseService.SetShowcaseLabels(showcase);\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Showcase successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.getShowcases(showcase.id, index);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Showcase update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n })\n };\n\n $scope.deleteShowcase = function (showcase, index) {\n\n ModalWindowService.Open({\n content: '

    Delete showcase

    ' +\n '

    This action will delete showcase permanently. Are You sure?

    ',\n actions: [\n {\n title: 'Delete',\n icon: 'delete',\n color: 'red',\n fn: function () {\n if ($scope.loading) return;\n\n $rootScope.showLinearProgress('#showcasesLoader');\n $scope.loading = true;\n\n ShowcaseService.DeleteShowcase(showcase)\n .then(function () {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Showcase successfully deleted',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.getShowcases();\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Showcase delete failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n })\n }\n },\n {\n title: 'Cancel'\n }\n ]\n });\n };\n\n function getPlatformIcon(platform) {\n var iconName;\n\n switch (platform.extid) {\n case 'smarttv':\n iconName = 'mdi-monitor-multiple';\n break;\n\n case 'android':\n iconName = 'mdi-android';\n break;\n\n case 'ios':\n iconName = 'mdi-apple';\n break;\n\n case 'stb':\n iconName = 'mdi-nest-protect';\n break;\n\n case 'ottweb':\n iconName = 'mdi-web';\n break;\n\n default :\n iconName = '';\n break;\n }\n\n return iconName;\n }\n\n $scope.getShowcases();\n\n $rootScope.$on($rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION, function (event, showcase) {\n $scope.getShowcases(showcase.id, showcase.index);\n });\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION, function (event, showcase) {\n $scope.getShowcases(showcase.id, showcase.index);\n });\n }\n\n if (!$rootScope.$$listeners[$rootScope.EVENTS.SAVE_SHOWCASE_COLLECTION] || !$rootScope.$$listeners[$rootScope.EVENTS.SAVE_SHOWCASE_COLLECTION].length) {\n $rootScope.$on($rootScope.EVENTS.SAVE_SHOWCASE_COLLECTION, function (event, showcase) {\n $scope.saveShowcase(showcase);\n });\n }\n\n AssetService.GetPlatforms()\n .then(function (collection) {\n $scope.platforms = _.map(collection, function (platform) {\n platform.icon = getPlatformIcon(platform);\n platform.labels = _getLabels(platform);\n return platform;\n });\n if (collection.length) $scope.setActivePlatform($scope.platforms[0]);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }]);\n","lmApp\n .service('ShowcaseService', ['$rootScope', '$q', '$interval', '$timeout', 'AssetService', 'ToastService',\n function ($rootScope, $q, $interval, $timeout, AssetService, ToastService) {\n\n var service = {};\n\n var _parseWidgetType = function (type) {\n\n switch (type) {\n case 'stockweb/asset':\n return 'asset';\n\n case 'stockweb/external':\n return 'external';\n\n case 'stockmob/asset':\n return 'asset';\n\n case 'stockmob/logo':\n return 'ui:logo';\n\n case 'stockmob/ui/settings':\n return 'ui:settings';\n\n case 'stockmob/ui/favorites':\n return 'ui:favorites';\n\n case 'stockmob/ui/search':\n return 'ui:search';\n\n case 'stockmob/ui/epg':\n return 'ui:epg';\n\n case 'stockmob/ui/rdvr':\n return 'ui:rdvr';\n\n case 'stockmob/back':\n return 'ui:back';\n\n case 'stockmob/ui/showcase':\n return 'ui:showcase';\n\n case 'stockmob/ui/recent':\n return 'ui:recent';\n\n case 'stockmob/ui/asset/collection':\n return 'asset:collection';\n\n case 'stockmob/external/app':\n return 'external:mobapp';\n\n case 'stockmob/nop':\n return 'nop';\n\n case 'stockmob/external':\n return 'external:url';\n\n default:\n return type;\n }\n };\n\n service._getWidgetIcon = function (type) {\n switch (type) {\n case 'stockweb/asset':\n return 'mdi-filmstrip';\n\n case 'stockweb/external':\n return 'mdi-link-variant';\n\n case 'stockmob/asset':\n return 'mdi-filmstrip';\n\n case 'stockmob/logo':\n return 'mdi-file-image-box';\n\n case 'stockmob/ui/settings':\n return 'mdi-settings';\n\n case 'stockmob/ui/favorites':\n return 'mdi-heart';\n\n case 'stockmob/ui/search':\n return 'mdi-magnify';\n\n case 'stockmob/ui/epg':\n return 'mdi-view-list';\n\n case 'stockmob/ui/rdvr':\n return 'mdi-play-circle';\n\n case 'stockmob/back':\n return 'mdi-keyboard-backspace';\n\n case 'stockmob/ui/showcase':\n return 'mdi-view-dashboard';\n\n case 'stockmob/ui/asset/collection':\n return 'mdi-layers';\n\n case 'stockmob/external/app':\n return 'mdi-exit-to-app';\n\n case 'stockmob/ui/recent':\n return 'mdi-history';\n\n case 'stockmob/external':\n return 'mdi-open-in-app';\n\n case 'stockmob/nop':\n return 'mdi-image-area';\n\n default:\n return type;\n }\n };\n\n service._getWidgetName = function (type) {\n switch (type) {\n case 'stockweb/asset':\n return 'Content';\n\n case 'stockweb/external':\n return 'External Link';\n\n case 'stockmob/asset':\n return 'Content';\n\n case 'stockmob/logo':\n return 'Logo';\n\n case 'stockmob/ui/settings':\n return 'Settings';\n\n case 'stockmob/ui/favorites':\n return 'Favorites';\n\n case 'stockmob/ui/search':\n return 'Search';\n\n case 'stockmob/ui/epg':\n return 'TV-Guide';\n\n case 'stockmob/ui/rdvr':\n return 'RDVR';\n\n case 'stockmob/ui/recent':\n return 'Recent';\n\n case 'stockmob/external':\n return 'External URL';\n\n case 'stockmob/back':\n return 'Back';\n\n case 'stockmob/ui/showcase':\n return 'Showcase';\n\n case 'stockmob/ui/asset/collection':\n return 'Collection';\n\n case 'stockmob/external/app':\n return 'External App';\n\n case 'stockmob/nop':\n return 'Picture';\n\n default:\n return type;\n }\n };\n\n var _parseResource = function (resource) {\n var parsed = {};\n var args = resource.split('?');\n\n if (args.length < 2) return parsed;\n\n args = args[1].split('&');\n\n if (args.length < 1) return parsed;\n\n args.forEach(function (arg) {\n parsed[arg.split('=')[0]] = arg.split('=')[1];\n });\n\n return parsed;\n };\n\n service._AllShowGenresValues = [\n {\n title: 'Disabled',\n desc: 'Disabled',\n id: 'disabled'\n }, {\n title: 'Screen',\n desc: 'Full screen genres table',\n id: 'screen'\n }, {\n title: 'Switchers',\n desc: 'Use switchers',\n id: 'switchers'\n }\n ];\n\n service._AllAndroidAppValues = [\n {\n title: 'Google Play Movies',\n desc: 'Google Play Movies',\n id: 'google play movies'\n }\n ];\n\n service._AlliOSAppValues = [\n {\n title: 'iTunes',\n desc: 'iTunes',\n id: 'itunes movies'\n }\n ];\n\n service._AllAppValues = [\n {\n title: 'Google Play Movies',\n desc: 'Google Play Movies',\n id: 'google play movies'\n },\n {\n title: 'iTunes',\n desc: 'iTunes',\n id: 'itunes movies'\n }\n ];\n\n service._AllSortValues = [\n {\n title: 'By channel LCN',\n desc: 'Sort by LCN',\n id: 'er_lcn'\n }, {\n title: 'New',\n desc: 'Sort by update date',\n id: 'new'\n }\n ];\n\n service._AllViews = [{\n id: 'live',\n title: 'Live'\n }, {\n id: 'vod',\n title: 'VOD'\n }];\n\n var _getValues = function (value, type) {\n if (type === 'genres_filter_show_mode') {\n return _.find(service._AllShowGenresValues, {id: value});\n }\n\n if (type === 'sort') {\n return _.find(service._AllSortValues, {id: value});\n }\n\n if (type === 'view') {\n return _.find(service._AllViews, {id: value});\n }\n };\n\n service._ParseWidget = function (item) {\n if (!item) return;\n\n item._PrivateData = {};\n\n if (!item.widget_attrs) {\n console.warn('Wrong tile scheme. Breaking parse.');\n return;\n }\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n item._PrivateData.icon = service._getWidgetIcon(item.widget_type);\n\n if (item.isDefaultDefined) {\n item._PrivateData.picture = item.picture;\n item._PrivateData.originPicture = item.picture;\n } else if (item.picture) {\n lh.common.resources.getPictureByCategory([\n {\n url: item.picture[0][1].split('?')[0],\n resource_group_id: parseInt(_parseResource(item.picture[0][1])['resource_group_id'], 10),\n type: 'picture'\n }\n ])\n .then(function (response) {\n $timeout(function () {\n item._PrivateData.picture = response;\n item._PrivateData.originPicture = response;\n });\n }, function (reason) {\n item._PrivateData.picture = '';\n item._PrivateData.originPicture = '';\n });\n } else {\n item._PrivateData.picture = '';\n item._PrivateData.originPicture = '';\n }\n\n switch (item._PrivateData.widget_type) {\n case 'asset':\n AssetService.GetAssetByExtId(item.widget_attrs.asset)\n .then(function (collection) {\n if (collection.length) {\n item._PrivateData.asset = collection[0];\n item._PrivateData.asset.genres = collection[0].genres.map(function (genre) {\n return genre.title;\n });\n\n item._PrivateData.asset.duration /= 60;\n } else {\n item._PrivateData.asset = {};\n }\n })\n .catch(function () {\n item._PrivateData.asset = {};\n });\n\n item._PrivateData.text = item.widget_attrs.text || '';\n item._PrivateData.uiTitle = item.widget_attrs.title || '';\n item._PrivateData.searchResult = [];\n item._PrivateData.keyword = '';\n item._PrivateData.selectedAsset = {};\n break;\n\n case 'external':\n item._PrivateData.url = item.widget_attrs.url || '';\n item._PrivateData.text = item.widget_attrs.text || '';\n break;\n\n case 'external:url':\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.url = item.widget_attrs.url || '';\n item._PrivateData.uiTitle = item.widget_attrs.title || '';\n break;\n\n case 'external:mobapp':\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n item._PrivateData.allApps = $rootScope.currentPlatform && ($rootScope.currentPlatform.name === 'android' || $rootScope.currentPlatform.platform_extid === 'android') ? service._AllAndroidAppValues : service._AlliOSAppValues;\n\n for (var i = 0; i < service._AllAndroidAppValues.length; i++) {\n var app = _.find(service._AllAndroidAppValues, {id: item.widget_attrs.app_name});\n if (app) {\n item._PrivateData.selectedApp = app;\n } else {\n item._PrivateData.selectedApp = {\n title: '',\n id: null\n }\n }\n }\n break;\n\n case 'asset:collection':\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n item._PrivateData.filters = {\n 'Type': [],\n 'Categories': []\n };\n if (item.widget_attrs.view) {\n item._PrivateData.filters['Type'] = item.widget_attrs.view.split(',').map(function (view) {\n return _getValues(view, 'view') || {};\n });\n }\n if (item.widget_attrs.category) {\n AssetService.GetCategoryCollection({extids: item.widget_attrs.category.split(',')})\n .then(function (collection) {\n item._PrivateData.filters['Categories'] = collection.map(function (category) {\n return {\n id: category.extid,\n title: category.title\n }\n });\n })\n .catch(function (reason) {\n item._PrivateData.filters['Categories'] = item.widget_attrs.category\n .split(',')\n .map(function (category) {\n return {\n id: category,\n title: category\n }\n });\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n }\n\n item._PrivateData.showGenres = _getValues(item.widget_attrs.genres_filter_show_mode, 'genres_filter_show_mode');\n\n if (item._PrivateData.showGenres) {\n item._PrivateData.showGenres = item._PrivateData.showGenres.id;\n }\n\n item._PrivateData.sort = _getValues(item.widget_attrs.sort, 'sort');\n\n if (item._PrivateData.sort) {\n item._PrivateData.sort = item._PrivateData.sort.id;\n }\n\n break;\n\n case 'ui:showcase':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n\n case 'ui:recent':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n\n case 'ui:favorites':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n case 'ui:search':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n case 'ui:settings':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n case 'ui:back':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n case 'ui:logo':\n item._PrivateData.isRequeared = true;\n item._PrivateData.isLocked = true;\n\n break;\n\n case 'nop':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n\n case 'ui:epg':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n case 'ui:rdvr':\n item._PrivateData.isRequeared = true;\n\n item._PrivateData.title = item.title;\n item._PrivateData.widget_type = _parseWidgetType(item.widget_type);\n\n item._PrivateData.uiTitle = item.widget_attrs.title;\n\n break;\n }\n\n return item;\n };\n\n service._ParseTile = function (tile) {\n if (!tile) return;\n\n tile._PrivateData = {};\n\n if (!tile.banner) return tile;\n\n switch (true) {\n case tile.type === 'vod':\n tile._PrivateData.type = 'VOD';\n tile._PrivateData.searchResult = [];\n\n tile._PrivateData.title = tile.asset_title;\n tile._PrivateData.description = tile.asset_description;\n tile._PrivateData.year = tile.asset_movie_year;\n tile._PrivateData.asset_id = tile.asset_id;\n tile._PrivateData.duration = (tile.asset_movie_duration / 3600).toString().substring(0, 3);\n\n if (tile.asset_genres) {\n tile._PrivateData.genres = tile.asset_genres.map(function (genre) {\n return genre.title;\n });\n }\n\n if (tile.asset_country) {\n tile._PrivateData.country = tile.asset_country.title;\n }\n\n lh.common.resources.getPictureByCategory(tile.asset_tile_resources, 'poster_blueprint')\n .then(function (response) {\n tile._PrivateData.picture = response;\n }, function (reason) {\n tile._PrivateData.picture = '';\n });\n\n break;\n case tile.type === 'banner' && tile.banner.type === 'widget':\n tile._PrivateData.type = 'BANNER';\n\n tile.banner = service._ParseWidget(tile.banner);\n break;\n case tile.type === 'banner' && tile.banner.type === 'slider':\n tile._PrivateData.type = 'SLIDER';\n tile.slider = tile.banner;\n tile.slider._PrivateData = {};\n tile.slider._PrivateData.hasNewTile = false;\n tile.slider._PrivateData.delay = tile.slider.slider_delay;\n tile.slider._PrivateData.icon = 'mdi-view-carousel';\n tile.slider.slider_items.forEach(function (item) {\n item.banner = service._ParseWidget(item);\n item._PrivateData.isExpand = true;\n item._PrivateData.isSliderInner = true;\n });\n\n break;\n }\n\n if (tile.banner && tile.banner._PrivateData.isLocked) {\n tile._PrivateData.isLocked = true;\n }\n\n return tile;\n };\n\n service.GetAvailableTiles = function () {\n var deferred = $q.defer();\n var url = 'collection/banner.widget.descriptor/query';\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetScreens = function (platform_id) {\n var deferred = $q.defer();\n var url = 'collection/showcase.screen/query';\n\n if (platform_id) url += '/dimension/platform_id/eq/' + platform_id;\n\n url += '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetShowcasesByScreenId = function (screen_id) {\n var deferred = $q.defer();\n var url = 'collection/showcase/query/dimension/screen_id/in/' + screen_id + '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CreateScreen = function (showcase, platform_id) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/create';\n\n var platform = _.find($rootScope.platforms, {id: platform_id});\n\n var data = {\n ext_id: (platform ? platform.extid : platform_id) + ':' + showcase.title,\n title: showcase.title,\n platform_id: platform_id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateScreenVariant = function (showcase, platform_id, screen) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/create';\n\n var platform = _.find($rootScope.platforms, {id: platform_id});\n\n var data = {\n ext_id: (platform ? platform.extid : platform_id) + ':' + showcase.title,\n title: showcase.title,\n platform_id: platform_id,\n priority: showcase.priority,\n screen_id: screen.id\n };\n\n if (showcase.group_id.length) {\n data.group_id = showcase.group_id.join(',');\n } else {\n data.group_id = '0';\n }\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetShowcases = function (platform_id) {\n var deferred = $q.defer();\n var url = 'collection/showcase/query';\n\n if (platform_id) url += '/dimension/platform_id/eq/' + platform_id;\n\n url += '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetShowcasesById = function (showcase_id) {\n var deferred = $q.defer();\n var url = 'collection/showcase/query/dimension/id/in/' + showcase_id + '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetShowcasesByLabel = function (label) {\n var deferred = $q.defer();\n var url = 'collection/showcase/query/dimension/labels/eq/' + label;\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetTileByShowcaseId = function (showcase_id) {\n var deferred = $q.defer();\n var url = 'collection/showcase.tile/query/dimension/showcase_id/eq/' + showcase_id + '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.data = 'GET';\n reason.url = url;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UpdateShowcase = function (showcase) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/update';\n\n var data = {\n showcase_id: showcase.id,\n title: showcase.title,\n priority: showcase.priority\n };\n\n data.group_id = showcase.group_id.join(',') ? showcase.group_id.join(',') : 0;\n\n if (showcase._PrivateData.background && showcase._PrivateData.background.banner_id) {\n data.background_banner_id = showcase._PrivateData.background.banner_id;\n }\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.RemoveShowcase = function (showcase) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/remove';\n\n var data = {\n showcase_id: showcase.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateTilePosition = function (tile) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/tile/update';\n\n var data = {\n tile_id: tile.id,\n x0: tile.x0,\n x1: tile.x1,\n y0: tile.y0,\n y1: tile.y1\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n\n service.DeleteTile = function (tile) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/tile/remove';\n\n var data = {\n tile_id: tile.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateSliderTile = function (showcase, tile, slider) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/tile/slider/create';\n\n var data = {\n showcase_id: showcase.id,\n slider_id: slider.id,\n x0: tile.x0,\n x1: tile.x1,\n y0: tile.y0,\n y1: tile.y1\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateWidgetTile = function (showcase, tile, widget) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/tile/widget/create';\n\n var data = {\n showcase_id: showcase.id,\n widget_id: widget.id,\n x0: tile.x0,\n x1: tile.x1,\n y0: tile.y0,\n y1: tile.y1\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateSlider = function (slider, ids) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/slider/create';\n\n var data = {\n slider_items: ids.join(','),\n title: slider.title || 'slider_title_' + Date.now()\n };\n\n if (slider._PrivateData.slider_delay) data._PrivateData.slider_delay = slider.delay;\n if (slider.ext_id) data.ext_id = slider.ext_id;\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateSlider = function (slider, ids) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/slider/update';\n\n var data = {\n banner_id: slider.id,\n slider_items: ids.join(',')\n };\n\n if (slider.title) data.title = slider.title;\n if (slider._PrivateData.slider_delay) data._PrivateData.slider_delay = slider.delay;\n if (slider.ext_id) data.ext_id = slider.ext_id;\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateAssetWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n widget_type: namespace + '/asset',\n title: widget._PrivateData.title || (widget._PrivateData.asset.title + ':' + Date.now()),\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.text) attributes.text = widget._PrivateData.text;\n if (widget._PrivateData.asset) attributes.asset = widget._PrivateData.asset.extid;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateAssetWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n title: widget._PrivateData.title || '',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.text) attributes.text = widget._PrivateData.text;\n if (widget._PrivateData.asset) attributes.asset = widget._PrivateData.asset.extid;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateExternalWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n widget_type: namespace + '/external',\n title: widget._PrivateData.title || '',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.text) attributes.text = widget._PrivateData.text;\n if (widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateExternalWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n title: widget._PrivateData.title || '',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.text) attributes.text = widget._PrivateData.text;\n if (widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateLogoWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: 'logo' + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/logo',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateLogoWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateAssetCollectionWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: widget._PrivateData.uiTitle + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/ui/asset/collection',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.filters['Categories'].length) attributes.category = _.map(widget._PrivateData.filters['Categories'], 'id').join(',');\n if (widget._PrivateData.filters['Type'].length) attributes.view = _.map(widget._PrivateData.filters['Type'], 'id').join(',');\n if (widget._PrivateData.showGenres) attributes.genres_filter_show_mode = widget._PrivateData.showGenres;\n if (widget._PrivateData.sort) attributes.sort = widget._PrivateData.sort;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateAssetCollectionWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.filters['Categories'].length) attributes.category = _.map(widget._PrivateData.filters['Categories'], 'id').join(',');\n if (widget._PrivateData.filters['Type'].length) attributes.view = _.map(widget._PrivateData.filters['Type'], 'id').join(',');\n if (widget._PrivateData.showGenres) attributes.genres_filter_show_mode = widget._PrivateData.showGenres;\n if (widget._PrivateData.sort) attributes.sort = widget._PrivateData.sort;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n\n service.UpdateUiWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget.widget_type === 'stockmob/external' && widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateUiWidget = function (widget, namespace, type) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: widget._PrivateData.uiTitle || widget._PrivateData.title + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/' + type,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (type === 'external' && widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n\n service.UpdateExternalWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateExternalWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: widget._PrivateData.uiTitle || widget._PrivateData.title + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/external',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (widget._PrivateData.url) attributes.url = widget._PrivateData.url;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n\n service.UpdateShowcaseWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (!_.isEmpty(widget._PrivateData.selectedShowcase)) attributes.showcase = widget._PrivateData.selectedShowcase.id;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateShowcaseWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: widget._PrivateData.uiTitle + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/ui/showcase',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n if (!_.isEmpty(widget._PrivateData.selectedShowcase)) attributes.showcase = widget._PrivateData.selectedShowcase.id;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.UpdateExternalAppWidget = function (widget) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/update';\n\n var data = {\n banner_id: widget.id,\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.selectedApp.id) attributes.app_name = widget._PrivateData.selectedApp.id;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.CreateExternalAppWidget = function (widget, namespace) {\n var deferred = $q.defer();\n var url = 'banner/mgmt/widget/create';\n\n var data = {\n title: widget._PrivateData.uiTitle + ':' + namespace + ':' + Date.now(),\n widget_type: namespace + '/external/app',\n widget_attrs: ''\n };\n\n var attributes = {};\n\n if (widget._PrivateData.picture !== widget._PrivateData.originPicture) data.picture_url = widget._PrivateData.picture;\n if (widget._PrivateData.selectedApp.id) attributes.app_name = widget._PrivateData.selectedApp.id;\n if (widget._PrivateData.uiTitle) attributes.title = widget._PrivateData.uiTitle;\n\n data.widget_attrs = JSON.stringify(attributes);\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.SetShowcaseLabels = function (showcase) {\n var deferred = $q.defer();\n var url = 'showcase/mgmt/label/set';\n\n var data = {\n showcase_id: showcase.id,\n labels: showcase.extid\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .controller('OverviewController', ['$scope', '$rootScope', '$q', '$timeout', '$http', 'StatisticsService', 'AssetService', 'SubscriberService',\n function ($scope, $rootScope, $q, $timeout, $http, StatisticsService, AssetService, SubscriberService) {\n $scope.reportData = {};\n $scope.loading = false;\n\n $scope.getReportData = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#reportsLoader');\n\n var stat = {};\n\n stat.top = StatisticsService.GetTopContent();\n\n stat.history = StatisticsService.GetHistory({offset: 0, limit: 20});\n\n $q.all(stat)\n .then(function (responses) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (responses.top.length) {\n $scope.reportData.vodTop = _.last(responses.top).top.movie;\n $scope.reportData.liveTop = _.last(responses.top).top.channel;\n }\n\n if (responses.history.length) {\n $scope.reportData.history = responses.history.map(function (data) {\n data.time = moment(data.timestamp * 1000).format('MMM Do YYYY, h:mm:ss a');\n\n AssetService.GetAssetById(data.asset_id)\n .then(function (collection) {\n if (collection.length) {\n data.asset = collection[0];\n }\n });\n\n SubscriberService.GetSubscribers(data.subscriber_id)\n .then(function (collcetion) {\n if (collcetion.length) {\n data.subscriber = collcetion[0];\n }\n });\n\n return data;\n });\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n\n };\n\n $scope.setMapsPoints = function () {\n $scope.mapLoading = true;\n $rootScope.showLinearProgress('#mapLoader');\n\n StatisticsService.GetHistory({start: moment.utc().startOf('month')})\n .then(function (collection) {\n\n window.initialize = function () {\n var MY_MAPTYPE_ID = 'SotalCloud';\n\n var featureOpts = [\n {\n \"featureType\": \"water\",\n \"stylers\": [\n {\"weight\": 0.1},\n {\"color\": \"#A5BFDD\"}\n ]\n }, {\n \"featureType\": \"landscape\",\n \"stylers\": [\n {\"color\": \"#ffffff\"}\n ]\n }, {\n \"featureType\": \"road\",\n \"stylers\": [\n {\"visibility\": \"off\"}\n ]\n }, {\n \"featureType\": \"poi\",\n \"stylers\": [\n {\"visibility\": \"off\"}\n ]\n }\n ];\n\n $scope.geocoder = new google.maps.Geocoder();\n var country = config[$rootScope.globals.currentUser.project] ? config[$rootScope.globals.currentUser.project].location : 'North America';\n\n $scope.geocoder.geocode({'address': country}, function (results, status) {\n if (status == google.maps.GeocoderStatus.OK) {\n $scope.mapOptions = {\n zoom: country !== 'North America' ? 8 : 4,\n mapTypeControlOptions: {\n mapTypeIds: [google.maps.MapTypeId.ROADMAP, MY_MAPTYPE_ID]\n },\n mapTypeId: MY_MAPTYPE_ID,\n mapTypeControl: false,\n scaleControl: false,\n streetViewControl: false\n };\n\n $scope.map = new google.maps.Map(document.getElementById('map'), $scope.mapOptions);\n\n var customMapType = new google.maps.StyledMapType(featureOpts, {name: 'SotalCloud'});\n\n $scope.map.mapTypes.set(MY_MAPTYPE_ID, customMapType);\n\n $scope.map.setCenter(results[0].geometry.location);\n }\n });\n\n $scope.heatmapData = [];\n var allQ = {};\n\n for (var i = 0; i < collection.length; i++) {\n var item = collection[i];\n\n if (item.ip && item.ip !== '127.0.0.1' && item.ip.indexOf('172.') !== 0) {\n allQ[i] = $http.get('http://www.freegeoip.net/json/' + item.ip)\n .then(function (res) {\n var data = res.data;\n var status = res.status;\n\n $scope.status = status;\n $scope.data = data;\n\n $scope.heatmapData.push(\n new google.maps.LatLng(data.latitude, data.longitude)\n );\n return $q.when();\n }, function (res) {\n var data = res.data;\n var status = res.status;\n\n $scope.data = data || \"Request failed\";\n $scope.status = status;\n return $q.when();\n });\n }\n }\n\n $q.all(allQ)\n .then(function () {\n $scope.mapLoading = false;\n $rootScope.hideLinearProgress('#mapLoader');\n $scope.heatmap = new google.maps.visualization.HeatmapLayer({\n data: $scope.heatmapData\n });\n $scope.heatmap.setMap($scope.map);\n $scope.heatmap.set('radius', 20);\n var gradient = [\n 'rgba(0, 255, 255, 0)',\n 'rgba(0, 255, 255, 1)',\n 'rgba(0, 191, 255, 1)',\n 'rgba(0, 127, 255, 1)',\n 'rgba(0, 63, 255, 1)',\n 'rgba(0, 0, 255, 1)',\n 'rgba(0, 0, 223, 1)',\n 'rgba(0, 0, 191, 1)',\n 'rgba(0, 0, 159, 1)',\n 'rgba(0, 0, 127, 1)'\n ];\n $scope.heatmap.set('gradient', $scope.heatmap.get('gradient') ? null : gradient);\n })\n .catch(function () {\n $scope.mapLoading = false;\n $rootScope.hideLinearProgress('#mapLoader');\n });\n };\n\n if (!angular.element('#google_maps').length) {\n var script = document.createElement('script');\n script.id = 'google_maps';\n script.type = 'text/javascript';\n script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=visualization&callback=initialize&key=AIzaSyA0IUlaOotw8UDNkqLRFXkTH37kPBmVrJg';\n\n document.body.appendChild(script);\n } else {\n window.initialize();\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n\n };\n\n $scope.getReportData();\n\n //$scope.setMapsPoints();\n\n window.initialize = function () {\n var MY_MAPTYPE_ID = 'SotalCloud';\n\n var featureOpts = [\n {\n \"featureType\": \"water\",\n \"stylers\": [\n {\"weight\": 0.1},\n {\"color\": \"#A5BFDD\"}\n ]\n }, {\n \"featureType\": \"landscape\",\n \"stylers\": [\n {\"color\": \"#ffffff\"}\n ]\n }, {\n \"featureType\": \"road\",\n \"stylers\": [\n {\"visibility\": \"off\"}\n ]\n }, {\n \"featureType\": \"poi\",\n \"stylers\": [\n {\"visibility\": \"off\"}\n ]\n }\n ];\n\n $scope.geocoder = new google.maps.Geocoder();\n var country = config[$rootScope.globals.currentUser.project] ? config[$rootScope.globals.currentUser.project].location : 'North America';\n\n $scope.geocoder.geocode({'address': country}, function (results, status) {\n if (status == google.maps.GeocoderStatus.OK) {\n $scope.mapOptions = {\n zoom: country !== 'North America' ? 8 : 4,\n mapTypeControlOptions: {\n mapTypeIds: [google.maps.MapTypeId.ROADMAP, MY_MAPTYPE_ID]\n },\n mapTypeId: MY_MAPTYPE_ID,\n mapTypeControl: false,\n scaleControl: false,\n streetViewControl: false\n };\n\n $scope.map = new google.maps.Map(document.getElementById('map'), $scope.mapOptions);\n\n var customMapType = new google.maps.StyledMapType(featureOpts, {name: 'SotalCloud'});\n\n $scope.map.mapTypes.set(MY_MAPTYPE_ID, customMapType);\n\n $scope.map.setCenter(results[0].geometry.location);\n }\n });\n };\n\n if (!angular.element('#google_maps').length) {\n var script = document.createElement('script');\n script.id = 'google_maps';\n script.type = 'text/javascript';\n script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=visualization&callback=initialize&key=AIzaSyA0IUlaOotw8UDNkqLRFXkTH37kPBmVrJg';\n\n document.body.appendChild(script);\n } else {\n window.initialize();\n }\n }]);\n","lmApp\n .controller('ReportsController', ['$scope', '$rootScope', '$q', '$timeout', '$templateCache', '$compile', 'StatisticsService', 'ToastService', 'MetadataService', 'ModalWindowService', 'AssetResource',\n function ($scope, $rootScope, $q, $timeout, $templateCache, $compile, StatisticsService, ToastService, MetadataService, ModalWindowService, AssetResource) {\n\n var PseudeRandomColor = [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722',\n '#795548',\n '#ff8a80',\n '#ff80ab',\n '#ea80fc',\n '#b388ff',\n '#8c9eff',\n '#82b1ff',\n '#b388ff',\n '#8c9eff',\n '#82b1ff',\n '#80d8ff',\n '#84ffff',\n '#a7ffeb',\n '#b9f6ca',\n '#ccff90',\n '#f4ff81'\n ];\n\n $scope.getPseudoRandomColor = function (a, index) {\n\n //return PseudeRandomColor[index - PseudeRandomColor.length * Math.floor(index / PseudeRandomColor.length)];\n return PseudeRandomColor[_.random(0, PseudeRandomColor.length)];\n };\n\n $scope.reportsData = {};\n $scope.reportsList = {};\n $scope.loading = false;\n $scope.statistic = {};\n $scope.currentReportType = null;\n\n $scope.totalVOD = {\n totalMovies: -1,\n totalActiveMovies: -1,\n totalSeries: -1,\n totalActiveSeries: -1,\n totalEpisodes: -1\n };\n\n Chart.pluginService.register({\n beforeDraw: function (chartInst) {\n var type = chartInst.config.options.report;\n var ctx;\n var controller;\n\n if (type === 'active-subscriber-stat') {\n ctx = chartInst.chart.ctx;\n controller = chartInst.chart.controller;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n chartInst.data.datasets.forEach(function (dataset, index) {\n if (index !== 1) return;\n\n for (var i = 0; i < dataset.data.length; i++) {\n\n if (dataset.data[i]) {\n var model = controller.getDatasetMeta(index).data[i]._model;\n\n ctx.font = \"bold 15px Courier\";\n ctx.fillStyle = \"#212121\";\n ctx.fillText(\n _calculateValueOnTop(type, i),\n model.x,\n model.y - 10);\n }\n }\n });\n } else if (type === 'devices-total-bars') {\n ctx = chartInst.chart.ctx;\n controller = chartInst.chart.controller;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n chartInst.data.datasets.forEach(function (dataset, index) {\n for (var i = 0; i < dataset.data.length; i++) {\n\n if (dataset.data[i]) {\n var model = controller.getDatasetMeta(index).data[i]._model;\n\n ctx.font = \"bold 15px Courier\";\n ctx.fillStyle = \"#212121\";\n ctx.fillText(\n dataset.data[i],\n model.x,\n model.y - 10);\n }\n }\n });\n }\n },\n afterDraw: function (chartInst) {\n var type = chartInst.config.options.report;\n var ctx;\n var controller;\n\n if (type === 'devices-total-pie1') {\n ctx = chartInst.chart.ctx;\n controller = chartInst.chart.controller;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n var labelxy = [];\n var lastend = 0;\n var offset = Math.PI / 2;\n\n chartInst.data.datasets.forEach(function (dataset, index) {\n for (var i = 0; i < dataset.data.length; i++) {\n\n if (dataset.data[i]) {\n var model = controller.getDatasetMeta(index).data[i]._model;\n var radius = model.outerRadius - model.innerRadius;\n var centerx = model.x;\n var centery = model.y + 10;\n\n var total = _.sum(dataset.data);\n var thispart = dataset.data[i];\n\n var arcsector = Math.PI * (2 * thispart / total);\n\n var lradius = radius * 1.5;\n\n var langle = lastend + arcsector / 2 + Math.PI + offset;\n\n var dx = centerx + lradius * Math.cos(langle);\n var dy = centery + lradius * Math.sin(langle);\n\n ctx.font = \"bold 15px Courier\";\n ctx.fillStyle = \"#fff\";\n ctx.fillText(\n dataset.data[i],\n dx,\n dy);\n\n lastend += arcsector;\n }\n }\n });\n }\n }\n });\n\n var _calculateValueOnTop = function (type, i) {\n if (type === 'active-subscriber-stat') {\n return $scope.statistic[type].data[0][i] + $scope.statistic[type].data[1][i] + $scope.statistic[type].data[2][i] + '(' + ($scope.statistic[type].data[1][i] + $scope.statistic[type].data[2][i]) + ')';\n }\n\n return '';\n };\n\n var _clearObject = function (object, ignore) {\n if (!ignore) ignore = [];\n\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n if (typeof object[property] == \"object\") {\n if (ignore.indexOf(property) === -1) {\n _clearObject(object[property]);\n } else {\n object[property] = {}\n }\n } else {\n object[property] = 0;\n }\n }\n }\n };\n\n var _spreadData = function (collection, calendar, opt) {\n if (!opt) opt = {};\n\n var statisticItem = _.cloneDeep(collection[0]);\n\n _clearObject(statisticItem, opt.ignore);\n\n return calendar.map(function (period) {\n var data = _.find(collection, function (o) {\n return period.isSame(o._date, 'month');\n });\n\n if (!data) data = {};\n data._date = period;\n\n return _.merge(_.cloneDeep(statisticItem), data);\n });\n };\n\n $scope.getFormattedDate = function (date, format) {\n\n return date ? date.format(format) : '';\n };\n\n $scope.getReportsList = function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#reportsLoader');\n\n StatisticsService.GetReportsList()\n .then(function (list) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $scope.reportsList = list.map(function (report) {\n report.startFrom = moment.utc();\n\n return report;\n });\n });\n };\n\n $scope.prevPeriod = function (report) {\n report.startFrom = $scope.statistic[report.type].calendar[0];\n\n $scope.generateReport(report);\n };\n\n $scope.nextPeriod = function (report) {\n report.startFrom = _.last($scope.statistic[report.type].calendar).clone().add(5, 'month');\n\n $scope.generateReport(report);\n };\n\n $scope.generateReport = function (report) {\n\n var opt;\n var parsedData;\n $scope.loading = true;\n $rootScope.showLinearProgress('#reportsLoader');\n $scope.currentReportType = report.type;\n\n $scope.statistic[report.type] = {};\n $scope.statistic[report.type].calendar = [];\n\n for (var i = -5; i < 1; i++) {\n $scope.statistic[report.type].calendar.push(report.startFrom.clone().add(i, 'month').startOf('month'));\n }\n\n switch (report.type) {\n //deprecate\n case 'subs-total':\n\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix()\n };\n\n StatisticsService.GetSubscriberStat(opt)\n .then(function (collection) {\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n collection = collection.map(function (item) {\n item._date = moment.unix(item.date);\n\n return item;\n });\n\n var parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar\n );\n\n $scope.statistic[report.type].collection = parsedData;\n\n $scope.statistic[report.type].labels = _.map(parsedData, function (item) {\n\n return item._date.format('MMMM YYYY');\n });\n\n $scope.statistic[report.type].data = [\n parsedData.map(function (value) {\n\n return value.total - value.new;\n }),\n _.map(parsedData, 'new')\n ];\n\n $scope.statistic[report.type].colors = ['#2196f3', '#4caf50'];\n\n $scope.statistic[report.type].series = ['Total', 'New'];\n\n var maxed = _.maxBy(parsedData, function (o) {\n return o.total;\n });\n\n $scope.statistic[report.type].options = {\n responsive: true,\n legend: {\n display: true,\n position: 'right'\n },\n scales: {\n xAxes: [{\n stacked: true\n }],\n yAxes: [{\n stacked: true,\n ticks: {\n suggestedMax: (maxed) ? maxed.total + 20 : 100\n }\n }]\n },\n report: report.type\n };\n\n });\n break;\n\n\n case 'active-subscriber-stat':\n\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix()\n };\n\n StatisticsService.GetActiveSubscriberStat(opt)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n collection = collection.map(function (item) {\n item._date = moment.unix(item.date);\n\n return item;\n });\n\n var parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar\n );\n\n $scope.statistic[report.type].collection = parsedData;\n\n $scope.statistic[report.type].labels = _.map(parsedData, function (item) {\n\n return item._date.format('MMMM YYYY');\n });\n\n $scope.statistic[report.type].data = [\n _.map(parsedData, 'total_on_beginning_of_month'),\n _.map(parsedData, 'joined'),\n _.map(parsedData, 'unsubscribed').map(function (value) {\n\n return -(value);\n })\n ];\n\n $scope.statistic[report.type].colors = ['#2196f3', '#4caf50', '#f44336'];\n\n $scope.statistic[report.type].series = ['Total On Beginning Of Month', 'Joined', 'Unsubscribed'];\n\n var maxed = _.maxBy(parsedData, function (o) {\n return o.total_on_beginning_of_month + o.joined;\n });\n $scope.statistic[report.type].options = {\n responsive: true,\n legend: {\n display: true,\n position: 'right'\n },\n scales: {\n xAxes: [{\n stacked: true\n }],\n yAxes: [{\n stacked: true,\n ticks: {\n suggestedMax: (maxed) ? maxed.total_on_beginning_of_month + maxed.joined + 20 : 100\n }\n }]\n },\n report: report.type\n };\n\n });\n\n break;\n\n case 'devices-total':\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix()\n };\n\n StatisticsService.GetDeviceStat(opt)\n .then(function (collection) {\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n //Distribution of devices monthly\n $scope.statistic[report.type].devices = {};\n\n $scope.statistic[report.type].devices.collection = [];\n\n collection = collection.map(function (item) {\n item._date = moment.unix(item.date);\n\n return item;\n });\n\n var devices = _.keys(collection[0].devices);\n\n parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar\n );\n\n $scope.statistic[report.type].devices.collection = parsedData;\n\n $scope.statistic[report.type].devices.labels = _.map(parsedData, function (item) {\n\n return item._date.format('MMMM YYYY');\n });\n\n $scope.statistic[report.type].devices.data = [];\n devices.forEach(function (device) {\n\n $scope.statistic[report.type].devices.data.push(\n _.map(parsedData, 'devices.' + device + '.total')\n );\n });\n\n $scope.statistic[report.type].devices.colors = devices.map(function (device) {\n\n return MetadataService.GetPlatformColor({extid: device});\n });\n\n $scope.statistic[report.type].devices.series = devices.map(function (device) {\n\n return MetadataService.GetPlatformName({extid: device});\n });\n\n var maxed = _.max(_.flatten($scope.statistic[report.type].devices.data));\n $scope.statistic[report.type].devices.options = {\n responsive: true,\n legend: {\n display: true,\n position: 'right'\n },\n scales: {\n yAxes: [{\n ticks: {\n suggestedMax: (maxed) ? maxed + 20 : 100\n }\n }]\n },\n report: report.type + '-bars'\n };\n\n $scope.statistic[report.type].total = {};\n $scope.statistic[report.type].total.selectPeriod = function (index) {\n $scope.statistic[report.type].total.period = $scope.statistic[report.type].devices.collection[index]._date;\n $scope.statistic[report.type].total.data = _.map($scope.statistic[report.type].devices.collection[index].devices, 'total');\n };\n\n $scope.statistic[report.type].total.selectPeriod($scope.statistic[report.type].devices.collection.length - 1);\n\n $scope.statistic[report.type].total.labels = devices.map(function (device) {\n return MetadataService.GetPlatformName({extid: device});\n });\n $scope.statistic[report.type].total.colors = devices.map(function (device) {\n\n return MetadataService.GetPlatformColor({extid: device});\n });\n\n $scope.statistic[report.type].total.options = {\n responsive: true,\n legend: {\n display: true,\n position: 'right',\n labels: {\n generateLabels: function (chartInst) {\n\n return chartInst.data.datasets[0].data.map(function (dataset, i) {\n return {\n text: $scope.statistic[report.type].total.labels[i] + ': ' + dataset,\n fillStyle: chartInst.data.datasets[0].backgroundColor[i],\n hidden: false\n };\n });\n }\n }\n },\n tooltips: {\n enabled: true\n },\n report: report.type + '-pie'\n };\n\n });\n break;\n\n case 'packages-purchases':\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix()\n };\n\n StatisticsService.GetPackagesUsage(opt)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n $scope.statistic[report.type].packages = {};\n $scope.statistic[report.type].packages.collection = [];\n\n $scope.statistic[report.type].packages.allPackages = _.map(_.values(_.keyBy(collection, 'package.id')), 'package');\n\n collection = _.values(_.mapValues(_.keyBy(collection, 'date'), function (o, key) {\n return {\n date: key,\n packages: _.keyBy(collection, 'package.id')\n };\n\n }));\n\n collection.forEach(function (item) {\n\n item._date = moment.unix(item.date);\n });\n\n parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar,\n {ignore: ['packages']}\n );\n\n $scope.statistic[report.type].packages.collection = parsedData;\n\n $scope.statistic[report.type].total = {};\n $scope.statistic[report.type].total.selectPeriod = function (index) {\n $scope.statistic[report.type].total.period = $scope.statistic[report.type].packages.collection[index]._date;\n $scope.statistic[report.type].total.data = _.map($scope.statistic[report.type].packages.collection[index].packages, 'usage_count');\n\n $scope.statistic[report.type].total.labels = _.values($scope.statistic[report.type].packages.collection[index].packages).map(function (pckg) {\n return pckg.package.title;\n });\n\n $scope.statistic[report.type].total.colors = _.values($scope.statistic[report.type].packages.collection[index].packages).map($scope.getPseudoRandomColor);\n };\n\n $scope.statistic[report.type].total.selectPeriod($scope.statistic[report.type].packages.collection.length - 1);\n\n $scope.statistic[report.type].total.options = {\n responsive: true,\n legend: {\n display: true,\n position: 'right'\n },\n tooltips: {\n enabled: true\n },\n report: report.type + '-pie'\n };\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n break;\n\n case 'content-usage':\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix()\n };\n\n StatisticsService.GetTopContent()\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n $scope.statistic[report.type].vodTop = _.last(collection).top.movie;\n $scope.statistic[report.type].liveTop = _.last(collection).top.channel;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n break;\n\n case 'total-vod':\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix(),\n type: 'movie'\n };\n\n AssetResource.count({'type[eq]': 'movie'}).$promise\n .then(function (response) {\n $scope.totalVOD.totalMovies = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $scope.totalVOD.totalMovies = 0;\n $rootScope.debugInfo(reason);\n });\n\n AssetResource.count({'type[eq]': 'movie', 'status[eq]': 'active'}).$promise\n .then(function (response) {\n $scope.totalVOD.totalActiveMovies = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $scope.totalVOD.totalActiveMovies = 0;\n $rootScope.debugInfo(reason);\n });\n\n AssetResource.count({'type[eq]': 'series'}).$promise\n .then(function (response) {\n $scope.totalVOD.totalSeries = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $scope.totalVOD.totalSeries = 0;\n $rootScope.debugInfo(reason);\n });\n\n AssetResource.count({'type[eq]': 'series', 'status[eq]': 'active'}).$promise\n .then(function (response) {\n $scope.totalVOD.totalActiveSeries = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $scope.totalVOD.totalActiveSeries = 0;\n $rootScope.debugInfo(reason);\n });\n\n AssetResource.count({'type[eq]': 'episode'}).$promise\n .then(function (response) {\n $scope.totalVOD.totalEpisodes = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $scope.totalVOD.totalEpisodes = 0;\n $rootScope.debugInfo(reason);\n });\n\n StatisticsService.ActiveAssetStat(opt)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n $scope.statistic[report.type].collection = [];\n\n collection = collection.map(function (item) {\n item._date = moment.unix(item.date);\n\n return item;\n });\n\n parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar\n );\n\n $scope.statistic[report.type].collection = parsedData;\n\n $scope.statistic[report.type].showDetails = function (period, type) {\n\n switch (type) {\n case 'active_total':\n $scope.statistic[report.type].details = {\n data: period.active_details,\n title: 'Active'\n };\n\n break;\n\n case 'inactive':\n $scope.statistic[report.type].details = {\n data: period.inactive_details,\n title: 'Inactive'\n };\n\n break;\n\n case 'new':\n $scope.statistic[report.type].details = {\n data: period.new_details,\n title: 'New'\n };\n\n break;\n\n default:\n $scope.statistic[report.type].details = {\n data: [],\n title: type\n };\n\n break;\n }\n\n\n var window = ModalWindowService.Open({\n content: $compile($templateCache.get('statistics/reports/total-vod-details.html'))($scope),\n keyboard: true,\n isFixed: true,\n actions: [\n {\n title: 'Close',\n color: 'lm',\n fn: function () {\n }\n }\n ]\n });\n };\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n\n break;\n\n case 'total-live':\n opt = {\n start: $scope.statistic[report.type].calendar[0].unix(),\n end: $scope.statistic[report.type].calendar[$scope.statistic[report.type].calendar.length - 1].clone().add(1, 'month').unix(),\n type: 'channel'\n };\n\n StatisticsService.ActiveAssetStat(opt)\n .then(function (collection) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n if (!collection.length) {\n ToastService.Small({\n title: 'No data for this period',\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n\n return;\n }\n\n $scope.statistic[report.type].collection = [];\n\n collection = collection.map(function (item) {\n item._date = moment.unix(item.date);\n\n return item;\n });\n\n parsedData = _spreadData(\n collection,\n $scope.statistic[report.type].calendar\n );\n\n $scope.statistic[report.type].collection = parsedData;\n\n $scope.statistic[report.type].showDetails = function (period, type) {\n\n switch (type) {\n case 'active_total':\n $scope.statistic[report.type].details = {\n data: period.active_details,\n title: 'Active'\n };\n\n break;\n\n case 'inactive':\n $scope.statistic[report.type].details = {\n data: period.inactive_details,\n title: 'Inactive'\n };\n\n break;\n\n case 'new':\n $scope.statistic[report.type].details = {\n data: period.new_details,\n title: 'New'\n };\n\n break;\n\n default:\n $scope.statistic[report.type].details = {\n data: [],\n title: type\n };\n\n break;\n }\n\n\n var window = ModalWindowService.Open({\n content: $compile($templateCache.get('statistics/reports/total-live-details.html'))($scope),\n keyboard: true,\n isFixed: true,\n actions: [\n {\n title: 'Close',\n color: 'lm',\n fn: function () {\n }\n }\n ]\n });\n };\n\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n $rootScope.debugInfo(reason);\n });\n\n break;\n\n default:\n report.isShown = false;\n\n $timeout(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#reportsLoader');\n\n ToastService.Big({\n title: 'Sorry',\n text: report.error,\n color: 'yellow',\n icon: 'chart-line',\n blocked: true\n }, 1000 * 5);\n }, 1200);\n break;\n }\n };\n\n $scope.toggleReport = function (report) {\n if (!report.isShown) {\n $scope.generateReport(report);\n }\n\n report.isShown = !report.isShown;\n };\n\n $scope.getReportsList();\n }]);\n","lmApp\n .service('StatisticsService', ['$q', '$timeout',\n function ($q, $timeout) {\n var service = {};\n\n service.GetReportsList = function () {\n var deferred = $q.defer();\n\n $timeout(function () {\n deferred.resolve([\n {\n title: 'Active subscribers',\n type: 'active-subscriber-stat',\n error: 'Waiting for OSS/BSS gateway setup transaction'\n },\n {\n title: 'Total subscribers',\n type: 'subs-total',\n error: 'Waiting for OSS/BSS gateway setup transaction'\n },\n {\n title: 'Total devices',\n type: 'devices-total',\n error: 'Waiting for OSS/BSS gateway setup transaction'\n },\n {\n title: 'Packages purchase',\n type: 'packages-purchases',\n error: 'Insufficient data for report'\n },\n //{\n // title: 'Content purchase (TVOD, SVOD)',\n // type: 'content-purchases',\n // error: 'Insufficient data for report'\n //},\n {\n title: 'Content usage (last month)',\n type: 'content-usage',\n error: 'Insufficient data for report'\n },\n {\n title: 'Total active VOD items',\n type: 'total-vod',\n error: 'Insufficient data for report'\n },\n {\n title: 'Total active Channels items',\n type: 'total-live',\n error: 'Insufficient data for report'\n },\n {\n title: 'Subscribers segmentation by tariff plans',\n error: 'Insufficient data for report'\n },\n {\n title: 'Subscribers segmentation by usage',\n error: 'Insufficient data for report'\n },\n {\n title: 'Churn and related events (new users, cancelled, suspended, y/q/m)',\n error: 'Insufficient data for report'\n },\n {\n title: 'Revenue by services (live, VOD, VAS)',\n error: 'Insufficient data for report'\n },\n {\n title: 'ARPU Segmentation per tariff package',\n error: 'Insufficient data for report'\n },\n {\n title: 'Average revenue per LivePackage',\n error: 'Insufficient data for report'\n },\n {\n title: 'Average revenue per LiveChannel',\n error: 'Insufficient data for report'\n },\n {\n title: 'Coverage of service (towns, population, consumption patterns)',\n error: 'Insufficient data for report'\n },\n {\n title: 'QOS (average bitrates, channel change, errors, DoS)',\n error: 'Insufficient data for report'\n },\n {\n title: 'Advertising efficiency (CTR, revenue, click volumes)',\n error: 'Insufficient data for report'\n }\n ]);\n }, 1000);\n\n return deferred.promise;\n };\n\n service.GetTopContent = function (options) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.view.month.stat/query';\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetHistory = function (options) {\n var deferred = $q.defer();\n\n var url = 'collection/history.record/query';\n\n if (options.start && options.end) url += '/dimension/timestamp/span/' + options.start.unix() + ',' + options.end.unix();\n if (options.start && !options.end) url += '/dimension/timestamp/span/' + options.start.unix();\n if (_.isFinite(options.offset) && options.limit) url += '/enum/' + options.offset + ',' + options.limit;\n if (options.subscriber) url += '/dimension/subscriber_id/eq/' + options.subscriber;\n if (options.enum) url += '/enum/' + options.enum.join(',');\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetDeviceStat = function (options) {\n var deferred = $q.defer();\n\n var url = 'collection/subscriber.device.stat/query';\n\n if (options.start && options.end) url += '/dimension/date/span/' + options.start + ',' + options.end;\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n //Deprecate\n service.GetSubscriberStat = function (opt) {\n var deferred = $q.defer();\n\n var url = 'collection/subscriber.stat/query';\n\n if (!_.isEmpty(opt)) {\n url += '/dimension/date/span/' + opt.start + ',' + opt.end\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetActiveSubscriberStat = function (opt) {\n if (!opt) opt = {};\n\n var deferred = $q.defer();\n\n var url = 'collection/active.subscriber.stat/query';\n\n if (!_.isEmpty(opt)) {\n url += '/dimension/date/span/' + opt.start + ',' + opt.end\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetPackagesUsage = function (opt) {\n if (!opt) opt = {};\n\n var deferred = $q.defer();\n\n var url = '/collection/packages.usage.stat/query';\n\n if (!_.isEmpty(opt)) {\n url += '/dimension/date/span/' + opt.start + ',' + opt.end\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.ActiveAssetStat = function (opt) {\n if (!opt) opt = {};\n\n var deferred = $q.defer();\n\n var url = 'collection/active.asset.stat/query';\n\n if (!_.isEmpty(opt)) {\n if (opt.type) {\n url += '/dimension/type/eq/' + opt.type;\n }\n\n url += '/dimension/date/span/' + opt.start + ',' + opt.end\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n })\n .catch(function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }\n ]);\n","lmApp\n .service('SubscriberService', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n\n var service = {};\n\n service.GetSubscribers = function (id) {\n var deferred = $q.defer();\n var url = 'collection/principal.subscriber/query';\n\n if (id) url += '/dimension/id/eq/' + id;\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscriberPurchases = function (subscriber, offset, limit) {\n var deferred = $q.defer();\n var url = 'collection/purchase/query/dimension/subscriber_id/eq/' + subscriber.id\n + '/enum/' + offset + ',' + limit + '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection.filter(function (o) {\n\n return o.offer.type === 'transactional';\n }));\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscriberSubscriptions = function (subscriber, offset, limit) {\n var deferred = $q.defer();\n var url = 'collection/purchase/query/dimension/subscriber_id/eq/' + subscriber.id\n + '/enum/' + offset + ',' + limit + '?t=' + Date.now();\n\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response.collection.filter(function (o) {\n\n return o.offer.type === 'subscription';\n }));\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.ResetPassword = function (subscriber) {\n var deferred = $q.defer();\n var url = 'cloud/operator/subscriber/password/reset';\n\n var data = {\n email: subscriber.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.ResetRCPassword = function (subscriber) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n transformRequest: function (obj) {\n var str = [];\n for (var p in obj)\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]));\n return str.join(\"&\");\n }\n };\n\n request.url = '/realchoice:80/auth/1/subscriber/password/generate/random';\n request.data = {\n subscriber_ext_id: subscriber.extid\n };\n\n request.headers['X-Auth-Token'] = $rootScope.globals.currentUser.token;\n\n request.method = 'POST';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n if (answer.result) {\n deferred.resolve(answer);\n } else {\n answer.data = request.data;\n answer.url = request.url;\n deferred.reject(answer.error);\n }\n }, function (response) {\n var reason = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n reason.url = request.url;\n reason.data = request.data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscriberReport = function () {\n var deferred = $q.defer();\n var request = {\n headers: {\n 'X-Auth-Token': $rootScope.globals.currentUser.token\n }\n };\n request.url = '/discovery:80/sdp/v2/subscriber-report';\n request.method = 'GET';\n request.responseType = 'arraybuffer';\n $http(request)\n .then(function (response) {\n var headers = response.headers;\n var type = headers('Content-Type');\n var blob = new Blob([response.data], { type : type});\n var objectUrl = (window.URL || window.webkitURL).createObjectURL(blob);\n var link = angular.element('
    ');\n link.attr({\n href : objectUrl,\n download : \"subscriber-report.xlsx\"\n })[0].click();\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n return deferred.promise;\n };\n\n service.GetNARSubscriberReport = function () {\n var deferred = $q.defer();\n var request = {\n headers: {\n 'X-Auth-Token': $rootScope.globals.currentUser.token\n }\n };\n request.url = '/discovery:80/nar/v1/subscriber-report';\n request.method = 'GET';\n request.responseType = 'arraybuffer';\n $http(request)\n .then(function (response) {\n var headers = response.headers;\n var type = headers('Content-Type');\n var blob = new Blob([response.data], { type : type});\n var objectUrl = (window.URL || window.webkitURL).createObjectURL(blob);\n var link = angular.element('');\n link.attr({\n href : objectUrl,\n download : \"subscriber-report.xlsx\"\n })[0].click();\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n return deferred.promise;\n };\n\n service.GetCSVSubscriberReport = function () {\n var deferred = $q.defer();\n var request = {\n headers: {\n 'X-Auth-Token': $rootScope.globals.currentUser.token,\n 'Accept': 'text/csv'\n }\n };\n request.url = '/discovery:80/sdp/v2/subscriber-report';\n request.method = 'GET';\n $http(request)\n .then(function (response) {\n var link = angular.element('');\n link.attr({\n href: 'data:attachment/csv,' + encodeURI(response.data),\n target: '_blank',\n download : \"subscriber-report.csv\"\n })[0].click();\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n return deferred.promise;\n };\n\n service.ResetPin = function (subscriber) {\n var deferred = $q.defer();\n var url = 'parental_control/pin/reset';\n\n var data = {\n subscriber_id: subscriber.id,\n type: 'random'\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscriberInfo = function (subscriber) {\n var deferred = $q.defer();\n var url = 'cloud/operator/subscribers';\n\n var data = {\n ext_id: subscriber.extid\n };\n\n lh.common.request.get(url, data)\n .then(function (response) {\n deferred.resolve(response.subscribers);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscribersByGroup = function (ids) {\n var deferred = $q.defer();\n var url = 'collection/principal.subscriber/query/dimension/group_id/in/' + ids.join(',') + '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetSubscriberMsg = function (subscriber, limit) {\n var deferred = $q.defer();\n var url = 'notification/inapp/list'\n\n var data = {\n subscriber_id: subscriber.id,\n limit: limit\n };\n\n lh.common.request.get(url, data)\n .then(function (response) {\n deferred.resolve(response.notifications);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.SendSubscriberMsg = function (subscriber, msg) {\n var deferred = $q.defer();\n var url = 'notification/inapp/create/mail/raw';\n\n var data = {\n subscriber_id: subscriber.id,\n title: msg.title,\n body: msg.body\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n\nlmApp.factory('SubscriberDevices', ['$resource', function($resource) {\n return $resource('/discovery:80/sdp/v2/devices?subscriber.id[eq]=:id&$expand=*',\n {id: '@id'},\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n }\n }\n }\n );\n}]);\n","lmApp\n .controller('SubscribersController', ['$routeParams', '$location', '$scope', '$rootScope', '$filter', '$q', '$templateCache', '$compile', '$timeout', 'OperatorRsc', 'MetadataService', 'SubscriberService', 'SubscriptionResource', 'DeviceResource', 'AssetViewingEventResource', 'ModalWindowService', 'ToastService', 'GroupService', 'ValidatorService', 'SubscriberResource', 'ImportService', 'STBModelResource', 'ManagerResource', 'TimezoneService', 'SubscriptionPlanResource', 'SessionResource', 'AssetResource',\n function ($routeParams, $location, $scope, $rootScope, $filter, $q, $templateCache, $compile, $timeout, OperatorRsc, MetadataService, SubscriberService, SubscriptionResource, DeviceResource, AssetViewingEventResource, ModalWindowService, ToastService, GroupService, ValidatorService, SubscriberResource, ImportService, STBModelResource, ManagerResource, TimezoneService, SubscriptionPlanResource, SessionResource, AssetResource) {\n $scope.permissions = $rootScope.permissions;\n\n $scope.loading = false;\n $scope.searchField = '';\n $scope.subscribers = [];\n $scope.stbModels = {};\n $scope.userCount = -1;\n\n $scope.collectionData = {\n orderBy: '-create_time',\n limit: 15,\n offset: 0,\n groupFilter: [],\n isStart: function () {\n return $scope.routePage === 1;\n },\n isEnd: false,\n nextPage: function () {\n if (this.isEnd || $scope.loading) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n this.offset += $scope.collectionData.limit;\n $scope.getSubscribers();\n },\n prevPage: function () {\n if (this.isStart()) return;\n if (this.offset >= this.limit) {\n this.offset -= this.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n this.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n }\n $scope.getSubscribers();\n }\n };\n\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n\n OperatorRsc.getCurrentOperator().$promise\n .then(function (result) {\n $scope.operator = result.data;\n if (!$scope.operator) throw result;\n $scope.operator.playback_session_limit = $scope.operator.playback_session_limit || 3;\n return\n })\n .then(function () {\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n var tz = manager.ui_timezone || 'UTC';\n timezone = _.find(TimezoneService.Timezones, {title: tz});\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n $scope.nextPage = function () {\n if ($scope.collectionData.offset + $scope.collectionData.limit < $scope.subscribers.length) {\n $scope.collectionData.offset = $scope.collectionData.offset + $scope.collectionData.limit;\n }\n };\n\n $scope.prevPage = function () {\n $scope.collectionData.offset = Math.max($scope.collectionData.offset - $scope.collectionData.limit, 0);\n };\n\n $scope.setOrder = function (field) {\n if (field === $scope.collectionData.orderBy) {\n $scope.collectionData.orderBy = '-' + $scope.collectionData.orderBy;\n } else {\n $scope.collectionData.orderBy = field\n }\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getSubscribers();\n };\n\n $scope.isCurrentTab = function (user, tab) {\n return user._tab === tab;\n };\n\n $scope.setCurrentTab = function (user, tab) {\n user._tab = tab;\n };\n\n var prevParams = {'groups.id[in]': -1, '$match': ''};\n var getSubscribersCount = function(params) {\n var newParams = {\n 'groups.id[in]': params['groups.id[in]'],\n '$match': params['$match']\n };\n if ((prevParams['groups.id[in]'] === params['groups.id[in]']) && prevParams['$match'] === params['$match']) {\n return;\n }\n\n $scope.userCount = -1;\n var offset = 0;\n var limit = 3000;\n var newOffset = limit;\n\n newParams['$limit'] = 1;\n var findCeilingOffset = function () {\n newParams['$offset'] = newOffset;\n\n SubscriberResource.get(newParams).$promise\n .then(function (result) {\n var subscribers = (result.data || []);\n if (subscribers.length > 0) {\n offset = newOffset;\n newOffset += limit;\n findCeilingOffset();\n } else {\n getFinalCount(offset, limit);\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n var getFinalCount = function(offset, limit) {\n newParams['$limit'] = limit;\n newParams['$offset'] = offset;\n SubscriberResource.get(newParams).$promise\n .then(function (result) {\n var subscribers = (result.data || []);\n $scope.userCount = subscribers.length + offset;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n findCeilingOffset();\n prevParams = newParams;\n };\n\n $scope.getSubscribers = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscribersLoader');\n\n $scope.collectionData.isEnd = false;\n\n var params = {};\n params['$limit'] = $scope.collectionData.limit + 1;\n params['$offset'] = $scope.collectionData.offset;\n params['$orderby'] = $scope.collectionData.orderBy;\n\n if ($scope.searchField !== '') {\n params['$match'] = _.trim($scope.searchField)\n }\n\n if ($scope.collectionData.groupFilter.length > 0) {\n var ids = [];\n for(var i = 0; i < $scope.collectionData.groupFilter.length; i++) {\n ids.push($scope.collectionData.groupFilter[i].id);\n }\n params['groups.id[in]'] = ids.join(',')\n }\n\n getSubscribersCount(params);\n\n\n\n SubscriberResource.get(params).$promise\n .then(function (result) {\n var users = (result.data || []);\n if (users.length < $scope.collectionData.limit + 1) {\n $scope.collectionData.isEnd = true;\n } else {\n users.pop();\n }\n\n $scope.subscribers = users\n .map(function (user, i) {\n user._tab = 'info';\n user._tabLastActivityVersion = 2;\n user._devices = [];\n user._subscriptions = [];\n user._subscriptionOffset = 0;\n user._subscriptionLimit = 10;\n user._lastActivity = [];\n user._sessions = [];\n user.playback_session_limit = user.playback_session_limit || 0;\n user.pc_pin = user.pc_pin || \"0000\";\n user.npvr_limit = user.npvr_limit || 0;\n user._name = _.trim((user.first_name || '' ) + ' ' + (user.last_name || '')) || 'N/A';\n user._groups = [];\n if (user.groups && user.groups.length > 0) {\n user._groups = user.groups.map(function (group) {\n return {\n id: group.id,\n title: group.name\n }\n });\n }\n return user;\n });\n\n if ($scope.subscribers.length === 0 && $scope.routePage !== 1) {\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.loading = false;\n $scope.getSubscribers();\n }\n\n return $scope.subscribers\n })\n .then(function () {\n GroupService.GetGroups()\n .then(function (collection) {\n $rootScope.hideLinearProgress('#subscribersLoader');\n\n $scope.groupList = collection.map(function (group) {\n return {\n id: group.id,\n title: group.name\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n return\n })\n .then(function () {\n $scope.loading = false;\n STBModelResource.get().$promise\n .then(function (result) {\n result.forEach(function (model) { $scope.stbModels[model.name] = model.id });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n })\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n };\n\n var SUBSCRIPTION_STATUS_COLOR = {\n 'unpaid': 'amber',\n 'cancelled': 'red',\n 'trialing': 'green',\n 'active': 'green'\n };\n\n var SUBSCRIPTION_PERIOD = {\n 'day': 'Daily',\n 'week': 'Weekly',\n 'month': 'Monthly',\n 'year': 'Annually'\n };\n\n $scope.getUserSubscriptions = function (user) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n return SubscriptionResource.get({'subscriber.id[eq]': user.id}).$promise\n .then(function (result) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n user._subscriptionOffset = 0;\n user._subscriptionLimit = 10;\n user._subscriptions = (result.data || [])\n .sort(function (x, y) { return y.id - x.id; })\n .map(function (subscription, i) {\n subscription._isCanceled = !!subscription.cancel_at_period_end;\n subscription._statusColor = SUBSCRIPTION_STATUS_COLOR[subscription.state];\n subscription._periodUnit = SUBSCRIPTION_PERIOD[subscription.plan.period_unit];\n subscription._state = subscription.state.toUpperCase();\n return subscription;\n });\n return user;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.isSubscriptionActive = function (subscription) {\n return ((subscription.state === 'active' || subscription.state === 'trialing') && !subscription._isCanceled)\n };\n\n $scope.cancelSubscription = function (user, subscription) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'You are about to cancel the active subscription of the user \"' + user.ext_id +'\"? Are you sure you want to continue? ';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n return SubscriptionResource.cancelSubscription(subscription).$promise\n .then(function (result) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n var updatedSubscription = result.data.subscription;\n subscription.state = updatedSubscription.state;\n subscription._isCanceled = !!updatedSubscription.cancel_at_period_end;\n subscription._statusColor = SUBSCRIPTION_STATUS_COLOR[updatedSubscription.state];\n subscription._state = updatedSubscription.state.toUpperCase();\n ToastService.Small({\n title: 'The subscription of the user ' + user.ext_id +' was canceled',\n color: 'green',\n icon: 'delete'\n });\n return subscription;\n })\n .catch(function (reason) {\n var updated = {\n id: subscription.id,\n state: 'cancelled',\n }\n SubscriptionResource.update(updated).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n subscription.state = updated.state;\n subscription._statusColor = SUBSCRIPTION_STATUS_COLOR[updated.state];\n subscription._state = updated.state.toUpperCase();\n\n ToastService.Small({\n title: 'The subscription of the user ' + user.ext_id +' was canceled',\n color: 'green',\n icon: 'delete'\n });\n\n return subscription;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to cancel subscription',\n color: 'red',\n icon: 'delete'\n });\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.getUserLastActivity = function (user) {\n $scope.getUserLastActivityV1(user);\n $scope.getUserLastActivityV2(user);\n };\n\n $scope.getUserLastActivityV1 = function (user) {\n if (user._tabLastActivityVersion !== 1) {\n return;\n }\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n return AssetViewingEventResource.get({'subscriber.id[eq]': user.id}).$promise\n .then(function (result) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n user._lastActivity = (result.data || [])\n .map(function (event, i) {\n return event;\n });\n return user;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n var assetResourceTypes = {\n 'dvr': 'TV catch-up',\n 'hls-catchup': 'TV catch-up',\n 'hls-live': 'TV live',\n 'hls': 'Video on demand'\n };\n\n $scope.getUserLastActivityV2 = function (user) {\n if (user._tabLastActivityVersion !== 2) {\n return;\n }\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n var params = {\n 'subscriber.id[eq]': user.id,\n '$expand': 'ticket(resource,device)',\n '$orderby': '-last_use_time',\n '$limit': 20\n };\n\n var currentTime = moment();\n\n return SessionResource.get(params).$promise\n .then(function (sessions) {\n user._sessions = [];\n if (sessions.length === 0) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n return;\n }\n var resourceIDs = [];\n for (var i = 0; i < sessions.length; i++) {\n if (sessions[i].ticket && sessions[i].ticket.resource) {\n resourceIDs.push(sessions[i].ticket.resource.id);\n }\n }\n\n if (!resourceIDs.length) return\n var params = {\n 'resources.id[in]': resourceIDs.join(','),\n '$expand': 'resources'\n };\n AssetResource.get(params).$promise\n .then(function (assets) {\n var resourceIDtoAssetTitle = {};\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n for (var j = 0; j < asset.resources.length; j++) {\n resourceIDtoAssetTitle[asset.resources[j].id] = asset.name;\n }\n }\n for (var i = 0; i < sessions.length; i++) {\n var session = sessions[i];\n user._sessions.push({\n contentType: assetResourceTypes[session.ticket.resource.type] || 'N/A',\n contentTitle: resourceIDtoAssetTitle[session.ticket.resource.id] || 'N/A',\n sessionStart: session.ticket.create_time,\n sessionEnd: session.last_use_time,\n closed: !(!session.ticket.closed && currentTime.diff(moment(session.last_use_time), 'hours') < 3),\n duration: moment.utc(moment(session.last_use_time).diff(moment(session.ticket.create_time), 'seconds') * 1000).format('HH:mm:ss'),\n IP: session.ip,\n deviceOS: session.ticket.device.os,\n deviceModel: session.ticket.device.model,\n userAgent: session.ua\n });\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n return;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n return;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getUserInfo = function (user) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n return SubscriberResource.get({'id[eq]': user.id}).$promise\n .then(function (result) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n if (result.data.length === 1) {\n var respUser = result.data[0];\n user = _.extend(user, respUser);\n user.contact_email = respUser.contact_email;\n user.pc_pin = respUser.pc_pin || \"0000\";\n user.registration_code = respUser.registration_code;\n user.password_reset_code = respUser.password_reset_code;\n user.playback_session_limit = respUser.playback_session_limit || 0;\n user.npvr_limit = respUser.npvr_limit || 0;\n user.groups = respUser.groups || [];\n user._name = _.trim((user.first_name || '' ) + ' ' + (user.last_name || '')) || 'N/A';\n user._groups = [];\n if (user.groups && user.groups.length > 0) {\n user._groups = user.groups.map(function (group) {\n return {\n id: group.id,\n title: group.name\n }\n });\n }\n }\n return user;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n var isSTBFromSupportedDevicesList = function(device) {\n if (device.model === undefined) {\n return false\n }\n return $scope.stbModels.hasOwnProperty(device.model.toLowerCase());\n };\n\n $scope.getUserDevices = function (user) {\n return DeviceResource.get({'subscriber.id[eq]': user.id}).$promise\n .then(function (result) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n user._devices = (result.data || [])\n .sort(function (x, y) { return Boolean(y.stb) - Boolean(x.stb); })\n .map(function (device, i) {\n device._icon = MetadataService.GetPlatformIcon(device.platform);\n device._isSTBFromSupportedDevicesList = isSTBFromSupportedDevicesList(device);\n return device;\n });\n\n return user;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.addAsSTB = function(user, device) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure that you want to add the \"' + device.model +'\" model to the list of supported devices?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n STBModelResource.add({name: device.model}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n $scope.stbModels[device.model.toLowerCase()] = 11111;\n for(var i = 0; i < user._devices.length; i++) {\n user._devices[i]._isSTBFromSupportedDevicesList = isSTBFromSupportedDevicesList(user._devices[i]);\n }\n\n ToastService.Small({\n title: 'The ' + device.model + ' model successfully added',\n color: 'green',\n icon: 'email-outline'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'The operation failed',\n color: 'red',\n icon: 'email-outline'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.userSubscriptionsNextPage = function (user) {\n if (user._subscriptionOffset + user._subscriptionLimit < user._subscriptions.length) {\n user._subscriptionOffset = user._subscriptionOffset + user._subscriptionLimit;\n }\n };\n\n $scope.userSubscriptionsPrevPage = function(user) {\n user._subscriptionOffset = Math.max(user._subscriptionOffset - user._subscriptionLimit, 0);\n };\n\n $scope.setActiveSubscriber = function (user) {\n if (user.isActive) {\n user.isActive = false;\n } else {\n user.isActive = true;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.getUserInfo(user);\n $scope.getUserDevices(user);\n $scope.getUserSubscriptions(user);\n $scope.getUserLastActivity(user);\n }\n };\n\n $scope.unsetActiveSubscriber = function (user) {\n user.isActive = false;\n };\n\n $scope.isActiveSubscriber = function (user) {\n return user.isActive;\n };\n\n $scope.updateSubscriber = function (user) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n user.validateErrors = {};\n if (!ValidatorService.Pin(user.pc_pin)) {\n user.validateErrors.pc_pin = true;\n user.validateErrors.pinText = 'Invalid PIN format. Allow 4 digits.';\n return\n }\n if (!ValidatorService.Numerical(user.playback_session_limit) || user.playback_session_limit < 0 || user.playback_session_limit > 100) {\n user.validateErrors.playback_session_limit = true;\n user.validateErrors.sessionLimitText = 'Invalid value. Must be >= 0 and <= 100';\n return;\n }\n if (!ValidatorService.Numerical(user.npvr_limit) || user.npvr_limit < 0 || user.npvr_limit > 60) {\n user.validateErrors.npvr_limit = true;\n user.validateErrors.npvrLimitText = 'Invalid limit. Must be >= 0 and <= 60';\n return;\n }\n if (user.contact_email && !ValidatorService.Email(user.contact_email)) {\n user.validateErrors.contact_email = true;\n user.validateErrors.contactEmailText = 'Invalid email';\n return;\n }\n\n SubscriberResource.update(user).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n ToastService.Small({\n title: user.ext_id + ' successfully saved',\n color: 'green',\n icon: 'account-box-outline'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: user.ext_id + ' save failed',\n color: 'red',\n icon: 'account-box-outline'\n });\n });\n };\n\n $scope.SwitchUserBlock = function (user) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.modalWindowScope = $scope.$new();\n var action = user.blocked ? 'unblock' : 'block';\n var inner = 'Are you sure you want to ' + action + ' the user \"' + user.ext_id +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n SubscriberResource.update({id: user.id, blocked: !user.blocked}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n\n user.blocked = !user.blocked;\n ToastService.Small({\n title: user.ext_id + ' successfully saved',\n color: 'green',\n icon: 'email-outline'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: user.ext_id + ' save failed',\n color: 'red',\n icon: 'email-outline'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.setSubscriberPassword = function(user) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.modalWindowScope = $scope.$new();\n $scope.modalWindowScope.username = user.ext_id;\n $scope.modalWindowScope.newPassword = '';\n $scope.modalWindowScope.errors = {\n newPassword: ''\n };\n var inner = $compile($templateCache.get('set-subscriber-password.html'))($scope.modalWindowScope);\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n check: function () {\n $scope.modalWindowScope.errors.newPassword = '';\n if (!$scope.modalWindowScope.newPassword) {\n $scope.modalWindowScope.errors.newPassword = 'Password field cannot be empty';\n } else if (!ValidatorService.Password($scope.modalWindowScope.newPassword)) {\n $scope.modalWindowScope.errors.newPassword = 'Invalid password format. Min 6 symbols. a-z 0-9 _ -.';\n }\n return !$scope.modalWindowScope.errors.newPassword;\n },\n fn: function () {\n SubscriberResource.setPassword({id: user.id, password: $scope.modalWindowScope.newPassword}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n ToastService.Small({\n title: 'Password successfully changed',\n color: 'green',\n icon: 'email-outline'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to set user password',\n color: 'red',\n icon: 'email-outline'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.removeUser = function (user) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscriberLoader' + user.id);\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the user \"' + user.ext_id +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n SubscriberResource.remove({id: user.id}).$promise\n .then(function () {\n user.deleted = true;\n ToastService.Small({\n title: 'The user ' + user.ext_id + ' was deleted',\n color: 'green',\n icon: 'delete'\n });\n var isEmpty = true;\n for (var i = 0, len = $scope.subscribers.length; i < len; i++) {\n if (!$scope.subscribers[i].deleted) {\n isEmpty = false;\n break;\n }\n }\n if (isEmpty) {\n $scope.searchField = '';\n }\n $scope.loading = false;\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove user',\n color: 'red',\n icon: 'delete'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.importPerform = function () {\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope.importInProgress = true;\n $scope.loading = true;\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope._progress_.css({ 'display': 'block' });\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, $scope._progress_)\n .then(function (response) {\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n ImportService.CreatePerformImport(response.Location)\n .then(function () {\n $scope.importInProgress = false;\n\n ToastService.Big({\n title: 'Import will continue in background. Check this page later.',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n })\n .then(function () {\n $scope.loading = false;\n });\n }, function (reason) {\n $scope.importInProgress = false;\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n var searchWatcher = $scope.$watch('searchField', function (newValue, oldValue) {\n if (newValue != oldValue) {\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getSubscribers();\n }\n });\n\n $scope.FilterByGroups = function () {\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getSubscribers();\n };\n\n $scope.getXLSXReport = function () {\n if ($scope.operator.ext_id === \"nar\") {\n return SubscriberService.GetNARSubscriberReport().catch(function (reason) {\n ToastService.Small({\n title: 'Error Exporting Data',\n color: 'red',\n icon: 'server-off'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n });\n }\n return SubscriberService.GetSubscriberReport().catch(function (reason) {\n ToastService.Small({\n title: 'Error Exporting Data',\n color: 'red',\n icon: 'server-off'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.getCSVReport = function () {\n return SubscriberService.GetCSVSubscriberReport().catch(function (reason) {\n ToastService.Small({\n title: 'Error Exporting Data',\n color: 'red',\n icon: 'server-off'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n });\n };\n\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.collectionData.offset = ($scope.routePage - 1) * $scope.collectionData.limit;\n } else {\n $scope.routePage = 1;\n }\n\n $scope.getSubscribers();\n\n $scope.isCreationAllowed = function () {\n if ($scope.permissions.sections && $scope.permissions.sections.hasOwnProperty('subscribers') && $scope.permissions.sections.subscribers.creation) {\n return true\n }\n return false\n };\n\n $scope.plans = []\n\n SubscriptionPlanResource.get({'$expand': ''}).$promise\n .then(function (plans) {\n var planList = [];\n for (var i = 0; i < plans.length; i++) {\n var p = plans[i];\n if (p.state !== 'active') continue\n var processed = {\n id: p.id,\n title: p.name,\n period: p.period_unit,\n periodCount: p.period,\n };\n planList.push(processed);\n }\n $scope.plans = planList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.addSubscription = function (user) {\n if ($scope.loading) return;\n\n $scope.newSubscription = {\n user: user,\n username: user.username || user.ext_id,\n plan: {},\n existed: false,\n }\n $scope.newSubscription.plans = angular.copy($scope.plans);\n $scope.newSubscription.rotation_start = moment().utc().startOf('day');\n $scope.newSubscription.rotation_end = moment().utc();\n\n $scope.subscriptionErrors = {plan: ''};\n\n var inner = $templateCache.get('new-subscription.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Create',\n color: 'green',\n check: function () {\n var valid = true\n $scope.subscriptionErrors.plan = '';\n if (!$scope.newSubscription.plan.id) {\n $scope.subscriptionErrors.plan = 'Plan field cannot be empty';\n valid = false\n }\n if ($scope.newSubscription.existed) {\n valid = false\n }\n return valid;\n },\n fn: function () {\n $scope.loading = true;\n\n var newSubscription = {\n subscriber: {id: user.id},\n plan: {id: $scope.newSubscription.plan.id},\n state: 'active',\n period_start_time: $scope.newSubscription.rotation_start.format(),\n period_end_time: $scope.newSubscription.rotation_end.format(),\n }\n\n SubscriptionResource.create(newSubscription).$promise\n .then(function (response) {\n $scope.getUserSubscriptions(user)\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n ToastService.Small({\n title: 'The subscription has been created',\n color: 'green',\n icon: 'refresh'\n }, 20 * 1000);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n ToastService.Small({\n title: 'Failed to create subscription: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscriberLoader' + user.id);\n }\n }\n ],\n size: {\n s: 7,\n l: 5\n }\n });\n };\n\n $scope.changeSubscriptionPeriod = function (option) {\n $scope.newSubscription.rotation_start = moment().utc().startOf('day');\n $scope.newSubscription.rotation_end = moment().utc().add(option.periodCount, option.period + 's');\n $scope.newSubscription.existed = false\n\n for (var i = 0, len = $scope.newSubscription.user._subscriptions.length; i < len; i++) {\n var s = $scope.newSubscription.user._subscriptions[i]\n if (s.plan.id === option.id && (s.state === 'trialing' || s.state === 'active')) {\n $scope.newSubscription.existed = true\n }\n }\n }\n\n $scope.addSubscriber = function () {\n $scope.newSubscriber = {\n email: '',\n password: '',\n firstName: '',\n lastName: '',\n _errors: {},\n }\n\n var inner = $templateCache.get('add-subscriber.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Create',\n color: 'green',\n check: function () {\n $scope.newSubscriber._errors = {};\n\n if (!$scope.newSubscriber.email) {\n $scope.newSubscriber._errors.email = 'Required filed';\n }\n if ($scope.newSubscriber.email && !ValidatorService.Email($scope.newSubscriber.email)) {\n $scope.newSubscriber._errors.email = 'Wrong email format';\n }\n if (!$scope.newSubscriber.password) {\n $scope.newSubscriber._errors.password = 'Password field cannot be empty';\n\n } else if (!ValidatorService.Password($scope.newSubscriber.password)) {\n $scope.newSubscriber._errors.password = 'Invalid password format. Min 6 symbols. a-z 0-9 _ -.';\n }\n\n return _.isEmpty($scope.newSubscriber._errors);\n },\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#subscribersLoader');\n\n var newSubscriber = {\n ext_id: $scope.newSubscriber.email,\n username: $scope.newSubscriber.email,\n first_name: $scope.newSubscriber.firstName,\n last_name: $scope.newSubscriber.lastName,\n }\n\n SubscriberResource.create(newSubscriber).$promise\n .then(function (response) {\n var user = response.data;\n\n SubscriberResource.setPassword({id: user.id, password: $scope.newSubscriber.password}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscribersLoader');\n\n $scope.collectionData.offset = 0;\n $scope.routePage = 1;\n $location.search('page', 1);\n $scope.getSubscribers();\n\n ToastService.Small({\n title: 'The subscriber has been created',\n color: 'green',\n icon: 'refresh'\n }, 20 * 1000);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscribersLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to set user password',\n color: 'red',\n icon: 'email-outline'\n });\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscribersLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to create subscriber: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#subscribersLoader');\n }\n }\n ],\n size: {\n s: 7,\n l: 5\n }\n });\n }\n\n $scope.$on('$destroy', function () {\n if (searchWatcher) searchWatcher();\n });\n }]);\n","/**\n * Created by Pavel Vorobev on 01.04.15.\n */\n\nlmApp\n .controller('SuperuserController', ['$kookies', '$q', '$scope', '$rootScope', '$timeout', '$templateCache', '$compile', 'SuperuserSrv', 'ProfileService',\n function ($kookies, $q, $scope, $rootScope, $timeout, $templateCache, $compile, SuperuserSrv, ProfileService) {\n $scope.operators = [];\n $scope.currentId = $rootScope.currentOperator.id;\n $scope.loading = false;\n $scope.search = {};\n\n $scope.isOperatorSelected = function () {\n return $rootScope.globals && $rootScope.globals.currentUser && !!$rootScope.globals.currentUser.operatorToken;\n };\n\n //Set up original admin token to get access to admin features.\n $scope.returnToGod = function () {\n if ($scope.loading) {\n return;\n }\n\n $scope.currentId = '';\n $rootScope.currentOperator.id = '';\n $rootScope.currentOperator.title = '';\n $rootScope.currentOperator.company_name = '';\n $rootScope.currentOperator.accounts = [];\n $rootScope.currentOperator.projectName = '';\n\n $rootScope.globals.currentUser.company_name = '';\n $rootScope.globals.currentUser.accounts = [];\n $rootScope.globals.currentUser.operatorId = '';\n $rootScope.globals.currentUser.operatorName = '';\n $rootScope.globals.currentUser.projectName = '';\n $rootScope.globals.currentUser.operatorToken = null;\n $kookies.set('globals', JSON.stringify($rootScope.globals), {path: '/', expires: 7});\n\n $rootScope.showLinearProgress('#adminLoader');\n $scope.loading = true;\n\n lh.common.config.set({authToken: $rootScope.globals.currentUser.supervisorToken});\n\n SuperuserSrv.GetOperators()\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#adminLoader');\n $scope.operators = _.get(response, 'data.data', []);\n }, function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#adminLoader');\n });\n };\n\n $scope.viewOperator = function (operator) {\n SuperuserSrv.GetAccessToken(operator)\n .then(function (response) {\n $rootScope.globals.currentUser.operatorToken = _.get(response, 'data.data');\n\n lh.common.config.set({authToken: _.get(response, 'data.data')});\n lh.system.init();\n\n ProfileService.GetOperatorData()\n .then(function (data) {\n var operator = _.get(data, 'operator');\n\n if (!operator) {\n throw '';\n }\n\n $rootScope.currentOperator.id = operator.id;\n\n $rootScope.globals.currentUser.operatorId = operator.id;\n $rootScope.globals.currentUser.project = operator.name;\n\n localStorage['accounts'] = JSON.stringify(operator.accounts || []);\n\n $rootScope.globals.currentUser.company_name = operator.company_name;\n $rootScope.globals.currentUser.operatorName = operator.name;\n $rootScope.globals.currentUser.projectName = '';\n\n $rootScope.currentOperator.title = operator.name;\n $rootScope.currentOperator.accounts = operator.accounts;\n $rootScope.currentOperator.company_name = operator.company_name;\n $rootScope.currentOperator.projectName = '';\n\n $rootScope.globals.currentUser.projectName = operator.title;\n $rootScope.currentOperator.projectName = operator.title;\n\n $kookies.set('globals', JSON.stringify($rootScope.globals), {path: '/', expires: 7});\n\n $rootScope._self = operator;\n $timeout(function () {\n $rootScope.$broadcast('self:update', operator)\n }, 350);\n\n $rootScope.go('/profile');\n }, function (reason) {\n\n $kookies.set('globals', JSON.stringify($rootScope.globals), {path: '/', expires: 7});\n\n $rootScope.go('/profile');\n });\n });\n };\n\n if (!$scope.isOperatorSelected()) {\n SuperuserSrv.GetOperators()\n .then(function (response) {\n $rootScope.hideLinearProgress('#adminLoader');\n\n $scope.operators = _.get(response, 'data.data', []);\n });\n }\n }]);\n","lmApp.service('SuperuserSrv', ['$http', function ($http) {\n var service = {};\n\n service.GetOperators = function () {\n var url = '/discovery:80' + '/sdp/v2/operators';\n var request = {};\n request.method = 'GET';\n request.url = url;\n request.headers = {};\n request.headers['X-Auth-Token'] = lh.common.config.get('authToken');\n\n return $http(request);\n };\n\n service.GetAccessToken = function (operator) {\n var url = '/discovery:80' + '/sdp/v2/access-tokens';\n var request = {};\n request.method = 'POST';\n request.url = url;\n request.data = {\n 'usertype': 'operator',\n 'userid': operator.id,\n 'lifetime': 3600\n };\n request.headers = {};\n request.headers['X-Auth-Token'] = lh.common.config.get('authToken');\n\n return $http(request);\n };\n\n return service;\n}]);","/**\n * @ngdoc function\n * @name lmApp.controller:VodController\n * @description\n * # VodController\n * Controller of the lmApp\n */\n\nlmApp\n .controller('VodController2', ['$routeParams', '$location', '$q', '$scope', '$templateCache', '$compile', '$rootScope', '$timeout', 'AssetService', 'MetadataService', 'ModalWindowService', 'ToastService', 'ValidatorService', 'ModalConfirmService', 'ImportService',\n function ($routeParams, $location, $q, $scope, $templateCache, $compile, $rootScope, $timeout, AssetService, MetadataService, ModalWindowService, ToastService, ValidatorService, ModalConfirmService, ImportService) {\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, { UPDATE_VOD_COLLECTION: 'update.vod.collection' });\n $scope.permissions = $rootScope.permissions;\n\n $scope.collection = [];\n $scope.loading = false;\n $scope.importInProgress = false;\n\n $scope.parseAsset = function (asset) {\n asset._PrivateData = {};\n\n asset.type = $scope.getAssetType(asset);\n asset._rotation_start = new Date(asset.rotation_start*1000);\n asset._rotation_end = new Date(asset.rotation_finish*1000);\n\n asset.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.stream_type.indexOf('youtube') !== -1) {\n asset._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n });\n\n return asset;\n };\n\n var deepSearch = function (search, collection) {\n if (!collection) {\n collection = $scope.collection;\n }\n\n var foundEpisode;\n var foundEpisodeIndex;\n\n for (var i = 0; i < collection.length; i++) {\n var item = collection[i];\n\n if (item.type === 'tv_series' && _.size(item._Seasons)) {\n\n for (var j = 0; j < item._Seasons.length; j++) {\n var season = item._Seasons[j];\n\n if (_.size(season.episodes)) {\n foundEpisodeIndex = _.findIndex(season.episodes, { id: search.id });\n\n if (foundEpisodeIndex !== -1) {\n\n if (search.season.oldIndex !== search.season.newIndex) {\n foundEpisode = _.pullAt(season.episodes, [foundEpisodeIndex])[0];\n } else {\n foundEpisode = season.episodes[foundEpisodeIndex];\n }\n\n break;\n }\n }\n }\n }\n\n if (foundEpisode && search.season.oldIndex !== search.season.newIndex) {\n var seasonPushTo = _.find(item._Seasons, { id: search.season.newIndex });\n\n seasonPushTo && seasonPushTo.episodes.push(foundEpisode);\n break;\n }\n }\n\n return foundEpisode;\n };\n\n $scope.getAssetType = function (asset) {\n\n switch (true) {\n case asset.type === 'channel' && asset.channel_type !== 'playlist':\n return 'channel';\n break;\n\n case asset.type === 'channel' && asset.channel_type === 'playlist':\n return 'virtual-channel';\n break;\n\n case asset.type === 'package' && asset.package_type === 'tv_series':\n return 'tv_series';\n break;\n\n case asset.type === 'movie' && !!asset.tv_series_episode:\n return 'tv_episode';\n break;\n\n case asset.type === 'movie':\n return 'movie';\n break;\n }\n\n };\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.sortOptions = [\n {title: \"ID Asc\", field: \"-id\"},\n {title: \"ID Desc\", field: \"id\"},\n {title: \"Name A-Z\", field: \"title\"},\n {title: \"Name Z-A\", field: \"-title\"},\n {title: \"Rental Start Asc\", field: \"rotation_start\"},\n {title: \"Rental Start Desc\", field: \"\"},\n {title: \"Create Time Asc\", field: \"create_time\"},\n {title: \"Create Time Desc\", field: \"-create_time\"},\n {title: \"Update Time Asc\", field: \"update_time\"},\n {title: \"Update Time Desc\", field: \"-update_time\"},\n {title: \"Year Asc\", field: \"year\"},\n {title: \"Year Desc\", field: \"-year\"}\n ];\n\n $scope.collectionData = {\n empty: false,\n error: '',\n filters: {\n genres: [],\n categories: [],\n keyword: ''\n },\n sortBy: {title: 'Rental Start Desc', field: \"\"},\n offset: 0,\n limit: 20,\n isStart: false,\n isEnd: false,\n isEmpty: function () {\n return !$scope.loading && !$scope.collection.length;\n },\n update: function (who) {\n if (!who.isSilentUpdate) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n }\n\n $scope.collectionData.empty = false;\n $scope.collectionData.error = false;\n\n var allQ = {};\n\n if (ValidatorService.Numerical(who.id)) {\n allQ.byId = AssetService.GetAssetById(who.id);\n }\n\n if (who.id === 'all') {\n $scope.collection = [];\n this.isEnd = false;\n this.isStart = false;\n\n this.isStart = this.offset < this.limit;\n\n if ($scope.collectionData.filters.keyword ||\n $scope.collectionData.filters.genres.length ||\n $scope.collectionData.filters.categories.length) {\n\n allQ.allVod = AssetService.SearchByKeyword($scope.collectionData.filters.keyword, {\n genres: _.map($scope.collectionData.filters.genres, 'id'),\n categories: _.map($scope.collectionData.filters.categories, 'id'),\n view: 'vod',\n sort: _.get($scope.collectionData.sortBy, 'field', '')\n }, this.offset, this.limit + 1)\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n\n } else {\n allQ.allVod = AssetService.GetAllAvailableVod(this.offset, this.limit + 1, _.get($scope.collectionData.sortBy, 'field', ''))\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n }\n }\n\n return $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n\n if (response.byId) {\n if (!response.byId.length) {\n this.update({ id: 'all' });\n return;\n }\n\n var tmpAsset = response.byId[0];\n\n tmpAsset = $scope.parseAsset(tmpAsset);\n\n var found;\n if (who.isSearch) {\n $scope.collection = [tmpAsset];\n this.isEnd = true;\n\n } else if (who.collection) {\n console.log('Check this: ', location && location.href);\n\n if (who.isEpisode) {\n found = deepSearch(who, who.collection);\n\n } else {\n\n found = _.find(who.collection, { id: tmpAsset.id });\n }\n } else {\n\n if (who.isEpisode) {\n found = deepSearch(who);\n\n } else {\n\n found = _.find($scope.collection, { id: tmpAsset.id });\n }\n\n }\n\n tmpAsset._PrivateData.seasonsShow = _.get(found, '_PrivateData.seasonsShow', false);\n\n if (tmpAsset.type === 'tv_series') {\n tmpAsset._Seasons = angular.copy(tmpAsset.tv_series_seasons).map(function (season, index) {\n season.isShowen = false;\n season._Parent = {};\n season._Parent.id = tmpAsset.id;\n season._Parent.seasons = tmpAsset.tv_series_seasons;\n season._Parent.title = tmpAsset.title;\n\n return season;\n });\n\n tmpAsset._Seasons.sort(function (x, y) { return x.index - y.index; })\n\n }\n\n _.assign(found, tmpAsset);\n\n return $q.when(found);\n }\n\n if (response.allVod) {\n\n if (!response.allVod.length && $scope.collectionData.offset > 0) {\n $scope.collectionData.offset = 0;\n $scope.collectionData.limit = 20;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: 'all'\n });\n\n $location.search('page', 1);\n\n return;\n }\n\n response.allVod.forEach($scope.parseAsset);\n\n response.allVod\n .filter(function (asset) {\n\n return asset.type === 'tv_series';\n })\n .forEach(function (asset) {\n asset._Seasons = angular.copy(asset.tv_series_seasons).map(function (season) {\n season.isShowen = false;\n season._Parent = {};\n season._Parent.seasons = asset.tv_series_seasons;\n season._Parent.title = asset.title;\n season._Parent.id = asset.id;\n season._Parent.index = asset.index;\n return season;\n });\n\n asset._Seasons.sort(function (x, y) { return x.index - y.index; })\n });\n\n if (!response.allVod.length) {\n $scope.collectionData.empty = true;\n }\n\n $scope.collection = response.allVod;\n\n if ($scope.routeVodId) {\n var currentVodIndex = _.findIndex($scope.collection, { id: $scope.routeVodId });\n\n if (currentVodIndex !== -1) {\n $scope.openModal($scope.collection[currentVodIndex], currentVodIndex, $scope.collection, null, false);\n } else {\n $location.search('vod_id', null);\n }\n }\n\n return $q.when($scope.collection);\n }\n }.bind(this))\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $rootScope.debugInfo(reason, 'silent');\n return false;\n });\n },\n nextPage: function () {\n if (this.isEnd) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n this.offset += $scope.collectionData.limit;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n },\n prevPage: function () {\n if (this.isStart) return;\n\n if (this.offset >= this.limit) {\n this.offset -= this.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n this.offset = 0;\n $location.search('page', 1);\n }\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n }\n };\n\n $scope.applyFilters = function (filters) {\n if ($scope.loading || _.isEmpty(filters)) return;\n\n if (filters.keyword ||\n filters.genres.length ||\n filters.categories.length) {\n $scope.collectionData.offset = 0;\n }\n\n if (ValidatorService.Numerical(filters.keyword)) {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: filters.keyword,\n isSearch: true\n });\n } else {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' })\n }\n };\n\n $scope.showSeasons = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n asset._PrivateData.seasonsShow = !asset._PrivateData.seasonsShow\n };\n\n $scope.deleteAsset = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n ModalConfirmService.Open({\n content: '

    Delete

    This action will delete content permanently. ' +\n 'Are You sure?

    ',\n action: {\n title: 'Delete',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n\n AssetService.DeleteAsset(asset)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n ToastService.Small({\n title: 'VOD: ' + asset.title + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: 'all'\n });\n })\n .catch(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'VOD: ' + asset.title + ' delete failed',\n color: 'red',\n icon: 'delete'\n }, 1000 * 3);\n });\n }\n }\n });\n };\n\n //When modal window open = save Data for edit\n $scope.openModal = function (assetData, index, collection, e, isNewType) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n var modalScope = $rootScope.$new();\n\n modalScope.currentFocused = index;\n modalScope.localCollection = collection;\n modalScope.isNewType = isNewType;\n\n if (isNewType) {\n switch (isNewType) {\n case 'movie':\n var originAssetData = {\n genres: [],\n platform_id: [],\n categories: [],\n operator_id: [],\n persons: [],\n ratings: [],\n traits: [],\n resources: [],\n views: [],\n offers: [],\n group_id: [],\n package_id: [],\n tags: []\n };\n originAssetData._PrivateData = {};\n originAssetData._PrivateData.isNew = true;\n originAssetData.type = isNewType;\n _.defaults(originAssetData, assetData);\n break;\n\n case 'tv_series':\n var originAssetData = {\n genres: [],\n platform_id: [],\n categories: [],\n operator_id: [],\n traits: [],\n ratings: [],\n tv_series_seasons: [],\n views: [],\n assets: [],\n offers: [],\n group_id: [],\n package_id: [],\n resources: [],\n tags: []\n };\n\n originAssetData._PrivateData = {};\n originAssetData._PrivateData.isNew = true;\n originAssetData.type = isNewType;\n _.defaults(originAssetData, assetData);\n break;\n\n case 'tv_episode':\n var originAssetData = {\n platform_id: [],\n persons: [],\n categories: [],\n genres: [],\n operator_id: [],\n ratings: [],\n tv_series_episode: {},\n resources: [],\n views: [],\n offers: [],\n group_id: [],\n package_id: []\n };\n originAssetData = _.extend(originAssetData, assetData);\n if (!originAssetData._PrivateData) originAssetData._PrivateData = {};\n originAssetData._PrivateData.isNew = true;\n originAssetData.type = isNewType;\n break;\n }\n\n modalScope.asset = originAssetData;\n } else {\n modalScope.asset = angular.copy(assetData);\n modalScope.asset._PrivateData = {};\n $location.search('vod_id', modalScope.asset.id);\n }\n\n modalScope.loading = false;\n\n modalScope.processAsset = function (asset) {\n if (modalScope.loading) return;\n\n if (asset._PrivateData.isNew) {\n modalScope.createFn(asset);\n } else {\n modalScope.updateFn(asset, modalScope.currentFocused);\n }\n };\n\n modalScope.setCurrentQuality = function (asset, value) {\n MetadataService.Quality.SetValue(asset, value);\n };\n\n modalScope.isFirst = function () {\n return !modalScope.currentFocused;\n };\n\n modalScope.isLast = function () {\n return modalScope.localCollection && modalScope.currentFocused === modalScope.localCollection.length - 1;\n };\n\n modalScope.close = function () {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n ModalWindowService.Close($scope.window, false);\n $location.search('vod_id', null);\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope._modalWindow_ = $templateCache.get('lm-assets-edit/edit-window.tpl.html');\n\n modalScope._modalWindow_ = $compile(modalScope._modalWindow_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-assets-edit/navigation-buttons.tpl.html'))(modalScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n }\n });\n\n modalScope._modalWindow_.on('$destroy', function () {\n modalScope.$destroy();\n })\n };\n\n $scope.createEpisode = function (parent, index) {\n var episode = {};\n episode._PrivateData = {};\n episode._PrivateData.seasonIndexNew = index + 1;\n episode._Parent = {};\n episode._Parent.seasons = parent.tv_series_seasons;\n episode._Parent.title = parent.title;\n episode._Parent.id = parent.id;\n episode.tv_series_episode = {\n season_id: parent.tv_series_seasons[index].id,\n season_index: index + 1\n };\n\n return episode;\n };\n\n $scope.importPerform = function () {\n\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope.importInProgress = true;\n $scope._progress_.css({ 'display': 'block' });\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, $scope._progress_)\n .then(function (response) {\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n ImportService.CreatePerformImport(response.Location)\n .then(function () {\n $scope.importInProgress = false;\n\n ToastService.Big({\n title: 'Import will continue in background. Check this page later.',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.importInProgress = false;\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n\n $scope.broadcastListener = $rootScope.$on($rootScope.EVENTS.UPDATE_VOD_COLLECTION, function (event, data) {\n $scope.collectionData.update(data);\n });\n\n /**\n * Init collection on controller add\n */\n $scope.routePage = 1;\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n $scope.collectionData.offset = ($scope.routePage - 1) * $scope.collectionData.limit;\n $scope.collectionData.limit = 20;\n } else {\n $location.search('page', 1);\n }\n\n $scope.routeVodId = null;\n if (!_.isUndefined($routeParams.vod_id)) {\n $scope.routeVodId = Number($routeParams.vod_id);\n } else {\n $location.search('vod_id', null);\n }\n\n $scope.routeKeyword = '';\n if (!_.isUndefined($routeParams.keyword)) {\n $scope.routeKeyword = $routeParams.keyword;\n $scope.collectionData.filters.keyword = $routeParams.keyword;\n } else {\n $location.search('keyword', null);\n }\n\n $scope.watcherFiler = $scope.$watchCollection('collectionData.filters', function (newValue, oldValue) {\n if (oldValue && newValue) {\n\n //TODO: Check this logic\n if (!newValue.keyword && !newValue.genres.length && !newValue.categories.length\n && (oldValue.keyword || oldValue.genres.length || oldValue.categories.length)) {\n $scope.collectionData.offset = 0;\n $location.search('page', 1);\n $scope.applyFilters(newValue);\n $location.search('keyword', null);\n }\n\n //if (!oldValue.keyword && !oldValue.genres.length && !oldValue.categories.length) {\n // $scope.collectionData.offset = 0;\n //}\n\n if (newValue.keyword || newValue.genres.length || newValue.categories.length) {\n $location.search('page', 1);\n if (newValue.keyword) $location.search('keyword', newValue.keyword);\n $scope.applyFilters(newValue);\n }\n }\n });\n\n $scope.sortWatcher = $scope.$watchCollection('collectionData.sortBy', function (newValue, oldValue) {\n if (oldValue && newValue) {\n if (newValue.title !== oldValue.title) {\n $scope.collectionData.offset = 0;\n $location.search('page', 1);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' })\n }\n }\n });\n\n $scope.$on('$routeUpdate', function () {\n $scope.routePage = $routeParams.page || 1;\n\n if ($scope.routeVodId && !$routeParams.vod_id) {\n ModalWindowService.Close($scope.window, false);\n }\n $scope.routeVodId = Number($routeParams.vod_id) || null;\n\n if ($scope.routeKeyword && !$routeParams.keyword) {\n $scope.collectionData.filters.keyword = '';\n $scope.routeKeyword = '';\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n }\n $scope.routeKeyword = $routeParams.keyword || '';\n });\n\n $scope.applyFilters($scope.collectionData.filters);\n\n AssetService.GetPlatforms()\n .then(function (data) {\n $rootScope.platforms = data;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n $scope.$on('$destroy', function () {\n $scope.watcherFiler();\n $scope.sortWatcher();\n $scope.broadcastListener();\n\n angular.element('#import_xml').off('change');\n });\n\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:VodController\n * @description\n * # VodController\n * Controller of the lmApp\n */\n\nlmApp\n .controller('VodController', ['$routeParams', '$location', '$q', '$scope', '$templateCache', '$compile', '$rootScope', '$timeout', '$interval', 'AssetService', 'MetadataService', 'ModalWindowService', 'ToastService', 'ValidatorService', 'ModalConfirmService', 'ImportService', 'AssetResource', 'TimezoneService', 'ManagerResource', 'GenreResource', 'CategoryResource', 'SubscriberResource', 'SubscriberV2Service', 'AssetV2Service',\n function ($routeParams, $location, $q, $scope, $templateCache, $compile, $rootScope, $timeout, $interval, AssetService, MetadataService, ModalWindowService, ToastService, ValidatorService, ModalConfirmService, ImportService, AssetResource, TimezoneService, ManagerResource, GenreResource, CategoryResource, SubscriberResource, SubscriberV2Service, AssetV2Service) {\n // Timezone\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.tz = timezone.title;\n ManagerResource.get().$promise\n .then(function (result) {\n if (result.length !== 0) {\n var manager = _.find(result, {username: $rootScope.globals.currentUser.username});\n if (manager) {\n timezone = _.find(TimezoneService.Timezones, {title: manager.ui_timezone || 'UTC'});\n $scope.tz = timezone.title;\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n /////////////\n $scope.assets = [];\n $scope.limit = 20;\n $scope.offset = 0;\n $scope.total = 0;\n $scope.categories = [];\n $scope.genres = [];\n $scope.packages = [];\n\n $scope.filters = {\n name: '',\n type: {\n movie: true,\n series: true,\n episode: false\n },\n categories: [],\n genres: [],\n packages: []\n };\n ///\n $scope.findSubscriberLoading = false;\n $scope.subscribers = []\n $scope.selectedSubscriber = {}\n $scope.selectedResource = {\n id: 0,\n loading: false,\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n wvLicenseURL: '',\n fpsLicenseURL: '',\n fpsCertURL: '',\n type: '',\n }\n //\n\n var getFilterData = function () {\n GenreResource.get().$promise\n .then(function (genres) {\n var genreList = [];\n for (var i = 0; i < genres.length; i++) {\n var genre = genres[i];\n genreList.push({\n id: genre.id,\n title: genre.name\n });\n }\n $scope.genres = genreList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CategoryResource.get().$promise\n .then(function (categories) {\n var categoryList = [];\n for (var i = 0; i < categories.length; i++) {\n var category = categories[i];\n categoryList.push({\n id: category.id,\n title: category.name\n });\n }\n $scope.categories = categoryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n AssetResource.get({'type[in]': 'package'}).$promise\n .then(function (packages) {\n var packageList = [];\n for (var i = 0; i < packages.length; i++) {\n var p = packages[i];\n packageList.push({\n id: p.id,\n title: p.name\n });\n }\n $scope.packages = packageList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n\n getFilterData();\n\n var processAsset = function(asset) {\n var processed = {\n id: asset.id,\n extid: asset.ext_id,\n createTime: asset.create_time,\n updateTime: asset.update_time,\n status: asset.status,\n type: asset.type,\n name: asset.name,\n description: asset.description,\n rotationStart: asset.rotation_start,\n rotationFinish: asset.rotation_finish,\n year: asset.year,\n imdb: asset.imdb,\n imdbVoteCount: asset.imdb_vote_count,\n kinopoisk: asset.kinopoisk,\n kinopoiskVoteCount: asset.kinopoisk_vote_count,\n country: asset.country ? asset.country.name : '',\n provider: asset.provider ? asset.provider.name : '',\n studio: asset.studio ? asset.studio.name : '',\n persons: asset.persons || [],\n adult: asset.adult ? 'Yes' : 'No',\n ageLimit: asset.age_limit || 0,\n categories: asset.categories || [],\n genres: asset.genres || [],\n mpaa: asset.mpaa || '',\n vastId: asset.vast_id || '',\n durationMin: Math.round((asset.duration || 0)/60),\n duration: moment.utc((asset.duration || 0) * 1000).format('HH:mm:ss'),\n poster: {\n state: '',\n url: '',\n source: ''\n },\n landscapePoster: {\n state: '',\n url: '',\n source: ''\n },\n streamResources: [],\n packages: asset.packages || [],\n streams: [],\n rotationPeriodOK: true,\n seasons: asset.series_seasons || [],\n seriesId: 0,\n seriesName: '',\n seriesStatus: '',\n seasonId: asset.episode_season_id || 0,\n seasonName: '',\n episodeIndex: asset.episode_index || 0,\n free: asset.free || false,\n conditions: {\n ready: processCondition({})\n }\n };\n\n for (var i = 0; i < processed.seasons.length; i++) {\n processed.seasons[i].episodes = [];\n }\n\n if (moment(asset.rotation_start).diff(moment()) > 0 || moment(asset.rotation_finish).diff(moment()) < 0) {\n processed.rotationPeriodOK = false;\n }\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n if (r.category === 'poster_blueprint') {\n processed.poster.state = r.state;\n processed.poster.url = r.url;\n processed.poster.source = r.source;\n }\n if (r.category === 'landscape') {\n processed.landscapePoster.state = r.state;\n processed.landscapePoster.url = r.url;\n processed.landscapePoster.source = r.source;\n }\n continue\n }\n var pr = {\n id: r.id,\n type: r.type.toUpperCase(),\n state: r.state,\n deployer: r.deployer,\n preparer: r.preparer,\n added: r.create_time,\n private: r.private || false,\n URL: r.source,\n category: r.category,\n tags: '',\n depth: parseInt(r.catchup_depth) || 0\n }\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n pr.tags = r.deployer_args.cdn_tag;\n }\n if (r.type === 'dash' || r.type === 'hls' || r.type === 'hls-protected' || r.type === 'dash-protected') {\n processed.streams.push(pr)\n }\n processed.streamResources.push(pr)\n }\n }\n\n if (asset.conditions) {\n var ready = asset.conditions.filter(function(c) {\n if (c.type === 'ready') return c;\n });\n if (ready.length) {\n processed.conditions.ready = processCondition(ready[0]);\n }\n }\n\n return processed;\n };\n\n var processCondition = function (condition) {\n return {\n id: condition.id || 0,\n required: condition.required || false,\n type: condition.type || '',\n state: condition.state || ''\n }\n };\n\n var getTotal = function(params) {\n if (params === undefined) {\n params = {};\n var types = [];\n if ($scope.filters.type.movie) types.push('movie');\n if ($scope.filters.type.series) types.push('series');\n if ($scope.filters.type.episode) types.push('episode');\n params['type[in]'] = types.join(',');\n }\n\n if (params.hasOwnProperty('$match') && params['$match'] !== '') {\n AssetResource.get(params).$promise\n .then(function (assets) {\n $scope.total = assets.length;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n AssetResource.count(params).$promise\n .then(function (response) {\n $scope.total = response.data ? response.data : 0;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }\n };\n\n getTotal();\n\n $scope.getAssets = function (silent) {\n if ($scope.loading) return;\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n }\n\n var params = {};\n var types = [];\n if ($scope.filters.type.movie) types.push('movie');\n if ($scope.filters.type.series) types.push('series');\n if ($scope.filters.type.episode) types.push('episode');\n params['type[in]'] = types.join(',');\n\n if ($scope.filters.name.trim() !== '') {\n/* var searchByName = '';\n var parts = $scope.filters.name.split(' ');\n for (var i = 0; i < parts.length; i++) {\n if (parts[i].trim() !== '') {\n searchByName += parts[i].trim() + \"* \"\n }\n }\n if (searchByName) {\n params['$match'] = searchByName;\n }*/\n params['$match'] = $scope.filters.name.trim();\n }\n\n if ($scope.filters.genres.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.genres.length; i++) {\n ids.push($scope.filters.genres[i].id);\n }\n params['genres.id[in]'] = ids.join(',');\n }\n\n if ($scope.filters.categories.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.categories.length; i++) {\n ids.push($scope.filters.categories[i].id);\n }\n params['categories.id[in]'] = ids.join(',');\n }\n\n if ($scope.filters.packages.length > 0) {\n var ids = [];\n for (var i = 0; i < $scope.filters.packages.length; i++) {\n ids.push($scope.filters.packages[i].id);\n }\n params['packages.id[in]'] = ids.join(',');\n }\n\n getTotal(params);\n\n params['$limit'] = $scope.limit;\n params['$offset'] = $scope.offset;\n params['$expand'] = 'resources(url),categories,genres,packages,provider,persons,country,studio,series_seasons,conditions';\n params['$orderby'] = _.get($scope.collectionData.sortBy, 'field', '');\n\n AssetResource.get(params).$promise\n .then(function (assets) {\n if (assets.length === 0 && $scope.routePage != 1) {\n $scope.routePage = 1;\n $scope.offset = 0;\n $scope.loading = false;\n $location.search('page', $scope.routePage);\n } else {\n var processed = [];\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n processed.push(processAsset(asset));\n }\n $scope.assets = processed;\n $scope.loading = false;\n }\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n if (silent !== true) {\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n }\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.filter = function(keyEvent) {\n/* if (keyEvent && keyEvent.which !== 13) {\n return;\n }*/\n $scope.offset = 0;\n if ($scope.routePage === 1) {\n $scope.getAssets();\n } else {\n $scope.routePage = 1;\n $location.search('page', $scope.routePage);\n }\n };\n\n $scope.nextPage = function () {\n if ($scope.offset + $scope.limit < $scope.total) {\n $scope.offset = $scope.offset + $scope.limit;\n $scope.routePage = Number($scope.routePage) + 1;\n $location.search('page', $scope.routePage);\n }\n };\n\n $scope.prevPage = function () {\n if ($scope.offset - $scope.limit >= 0) {\n $scope.offset = $scope.offset - $scope.limit;\n $scope.routePage = Number($scope.routePage) - 1;\n } else {\n $scope.offset = 0;\n $scope.routePage = 1;\n }\n $location.search('page', $scope.routePage);\n };\n\n\n $scope.clearSelectedVOD = function () {\n $scope.selectedVOD = {};\n $scope.selectedResource = {\n id: 0,\n loading: false,\n url: '',\n urlEsc: '',\n error: '',\n subscriber: {},\n }\n $location.search('asset_id', null);\n };\n\n $scope.isAssetSelected = function () {\n return !_.isEmpty($scope.selectedVOD);\n };\n\n $scope.selectVOD = function(asset) {\n $location.search('asset_id', asset.id);\n };\n\n $scope.selectAsset = function (asset, silent) {\n if (!asset.type) {\n if (silent !== true) {\n $scope.selectedVOD = {};\n }\n var selectedParams = {};\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n }\n selectedParams['id[eq]'] = asset.id;\n selectedParams['type[in]'] = 'movie,series,episode';\n selectedParams['$expand'] = 'resources(url),categories,genres,packages,provider,persons,country,studio,series_seasons,conditions';\n AssetResource.get(selectedParams).$promise\n .then(function (result) {\n if (result.length) {\n $scope.selectAsset(processAsset(result[0]), silent);\n } else {\n $location.search('asset_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n }\n })\n .catch(function (reason) {\n $location.search('asset_id', null);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n $rootScope.debugInfo(reason, 'silent');\n });\n return;\n }\n\n $scope.selectedVOD = asset;\n if (silent !== true) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n }\n\n if (asset.streams.length > 0) {\n $scope.selectedResource.id = asset.streams[0].id + ''\n }\n\n var ids = [];\n ids.push(asset.id);\n for (var i = 0; i < asset.packages.length; i++) {\n ids.push(asset.packages[i].id);\n }\n\n $scope.selectedVOD.purchaseOptions = {};\n $scope.selectedVOD.packagePurchaseOptions = [];\n\n AssetService.GetAssetInId(ids)\n .then(function (assets) {\n for (var i = 0; i < assets.length; i++) {\n var a = assets[i];\n var purchaseOptions = {\n package: a.title,\n free: false,\n plans: []\n };\n for (var j = 0; j < a.offers.length; j++) {\n var offer = a.offers[j];\n if (offer.type === 'free') {\n purchaseOptions.free = true;\n } else {\n purchaseOptions.plans.push(offer.name);\n }\n }\n if (a.id === asset.id) {\n if (asset.free) purchaseOptions.free = true;\n $scope.selectedVOD.purchaseOptions = purchaseOptions;\n } else {\n $scope.selectedVOD.packagePurchaseOptions.push(purchaseOptions);\n }\n }\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n });\n\n\n ids = [];\n for (var i = 0; i < asset.packages.length; i++) {\n ids.push(asset.packages[i].id);\n }\n if (ids.length) {\n var params = {};\n params['id[in]'] = ids.join(',');\n params['$expand'] = 'groups';\n AssetResource.get(params).$promise\n .then(function (assets) {\n var groups = {};\n for (var i = 0; i < assets.length; i++) {\n var asset = assets[i];\n if (asset.groups) {\n for (var j = 0; j < asset.groups.length; j++) {\n if (!groups.hasOwnProperty(asset.groups[j].name)) {\n groups[asset.groups[j].name] = {\n group: asset.groups[j].name,\n packages: {}\n }\n }\n groups[asset.groups[j].name].packages[asset.name] = true;\n }\n }\n }\n $scope.selectedVOD.groups = [];\n for (var groupName in groups) {\n if (!groups.hasOwnProperty(groupName)) {\n continue\n }\n var packages = [];\n for (var packageName in groups[groupName].packages) {\n if (!groups[groupName].packages.hasOwnProperty(packageName)) {\n continue\n }\n packages.push(packageName);\n }\n $scope.selectedVOD.groups.push({\n name: groupName,\n packages: packages\n })\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n\n if (asset.type === 'series' && asset.seasons.length) {\n var seriesParams = {};\n var seasonIds = [];\n for (var i = 0; i < asset.seasons.length; i++) {\n seasonIds.push(asset.seasons[i].id);\n }\n seriesParams['season.id[in]'] = seasonIds.join(',');\n seriesParams['$expand'] = 'resources(url)';\n AssetResource.get(seriesParams).$promise\n .then(function (episodes) {\n var seasonMap = {};\n for (var i = 0; i < episodes.length; i++) {\n var episode = episodes[i];\n if (!seasonMap.hasOwnProperty(episode.episode_season_id)) {\n seasonMap[episode.episode_season_id] = [];\n }\n seasonMap[episode.episode_season_id].push(episode);\n }\n for (var i = 0; i < $scope.selectedVOD.seasons.length; i++) {\n if (seasonMap.hasOwnProperty($scope.selectedVOD.seasons[i].id)) {\n $scope.selectedVOD.seasons[i].episodes = seasonMap[$scope.selectedVOD.seasons[i].id];\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n\n if (asset.type === 'episode') {\n AssetService.GetAssetById(asset.id)\n .then(function (assets) {\n if (assets.length) {\n var a = assets[0];\n if (a.tv_series_episode) {\n AssetResource.get({'id[eq]': a.tv_series_episode.series_id, '$expand': 'series_seasons,conditions'}).$promise\n .then(function (series) {\n if (series.length) {\n $scope.selectedVOD.seriesId = a.tv_series_episode.series_id;\n $scope.selectedVOD.seriesName = series[0].name;\n $scope.selectedVOD.seriesStatus = '';\n if (series[0].conditions) {\n var ready = series[0].conditions.filter(function(c) {\n if (c.type === 'ready') return c;\n });\n if (ready.length) {\n $scope.selectedVOD.seriesStatus = processCondition(ready[0]).state;\n }\n }\n for (var i = 0; i < series[0].series_seasons.length; i++) {\n var season = series[0].series_seasons[i];\n if (season.id === asset.seasonId) {\n if (season.season_index) {\n $scope.selectedVOD.seasonName = season.season_index + '. ' + season.name;\n } else {\n $scope.selectedVOD.seasonName = season.name;\n }\n break;\n }\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n };\n\n $scope.reloadAsset = function (asset) {\n var selectedParams = {};\n selectedParams['id[eq]'] = asset.id;\n selectedParams['type[in]'] = 'movie,series,episode';\n selectedParams['$expand'] = 'resources(url),categories,genres,packages,provider,persons,country,studio,series_seasons,conditions';\n AssetResource.get(selectedParams).$promise\n .then(function (result) {\n if (result.length) {\n var processed = processAsset(result[0]);\n $scope.selectedVOD.updateTime = processed.updateTime;\n $scope.selectedVOD.poster = processed.poster;\n $scope.selectedVOD.streamResources = processed.streamResources;\n $scope.selectedVOD.streams = processed.streams;\n $scope.selectedVOD.conditions = processed.conditions;\n } else {\n $location.search('asset_id', null);\n }\n })\n .catch(function (reason) {\n $location.search('asset_id', null);\n $rootScope.debugInfo(reason, 'silent');\n });\n\n /* if (asset.type === 'episode') {\n AssetService.GetAssetById(asset.id)\n .then(function (assets) {\n if (assets.length) {\n var a = assets[0];\n if (a.tv_series_episode) {\n AssetResource.get({'id[eq]': a.tv_series_episode.series_id, '$expand': 'series_seasons,conditions'}).$promise\n .then(function (series) {\n if (series.length) {\n $scope.selectedVOD.seriesId = a.tv_series_episode.series_id;\n $scope.selectedVOD.seriesName = series[0].name;\n $scope.selectedVOD.seriesStatus = '';\n if (series[0].conditions) {\n var ready = series[0].conditions.filter(function(c) {\n if (c.type === 'ready') return c;\n });\n if (ready.length) {\n $scope.selectedVOD.seriesStatus = processCondition(ready[0]).state;\n }\n }\n for (var i = 0; i < series[0].series_seasons.length; i++) {\n var season = series[0].series_seasons[i];\n if (season.id === asset.seasonId) {\n $scope.selectedVOD.seasonName = season.season_index + '. ' + season.name;\n break;\n }\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n })\n .catch(function () {\n $rootScope.debugInfo(reason, 'silent');\n });\n }*/\n };\n /////////////\n\n $rootScope.EVENTS = _.extend($rootScope.EVENTS, { UPDATE_VOD_COLLECTION: 'update.vod.collection' });\n $scope.permissions = $rootScope.permissions;\n\n $scope.collection = [];\n $scope.loading = false;\n $scope.importInProgress = false;\n\n ////\n/* $scope.categories = [\n { title: 'Movies' },\n { title: 'Series' },\n { title: 'Cartoons' }\n ];*/\n\n ///\n\n $scope.parseAsset = function (asset) {\n asset._PrivateData = {};\n\n asset.type = $scope.getAssetType(asset);\n asset._rotation_start = new Date(asset.rotation_start*1000);\n asset._rotation_end = new Date(asset.rotation_finish*1000);\n\n asset.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.stream_type.indexOf('youtube') !== -1) {\n asset._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n });\n\n return asset;\n };\n\n var deepSearch = function (search, collection) {\n if (!collection) {\n collection = $scope.collection;\n }\n\n var foundEpisode;\n var foundEpisodeIndex;\n\n for (var i = 0; i < collection.length; i++) {\n var item = collection[i];\n\n if (item.type === 'tv_series' && _.size(item._Seasons)) {\n\n for (var j = 0; j < item._Seasons.length; j++) {\n var season = item._Seasons[j];\n\n if (_.size(season.episodes)) {\n foundEpisodeIndex = _.findIndex(season.episodes, { id: search.id });\n\n if (foundEpisodeIndex !== -1) {\n\n if (search.season.oldIndex !== search.season.newIndex) {\n foundEpisode = _.pullAt(season.episodes, [foundEpisodeIndex])[0];\n } else {\n foundEpisode = season.episodes[foundEpisodeIndex];\n }\n\n break;\n }\n }\n }\n }\n\n if (foundEpisode && search.season.oldIndex !== search.season.newIndex) {\n var seasonPushTo = _.find(item._Seasons, { id: search.season.newIndex });\n\n seasonPushTo && seasonPushTo.episodes.push(foundEpisode);\n break;\n }\n }\n\n return foundEpisode;\n };\n\n $scope.getAssetType = function (asset) {\n\n switch (true) {\n case asset.type === 'channel' && asset.channel_type !== 'playlist':\n return 'channel';\n break;\n\n case asset.type === 'channel' && asset.channel_type === 'playlist':\n return 'virtual-channel';\n break;\n\n case asset.type === 'package' && asset.package_type === 'tv_series':\n return 'tv_series';\n break;\n\n case asset.type === 'movie' && !!asset.tv_series_episode:\n return 'tv_episode';\n break;\n\n case asset.type === 'movie':\n return 'movie';\n break;\n }\n\n };\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.sortOptions = [\n {title: \"ID Asc\", field: \"id\"},\n {title: \"ID Desc\", field: \"-id\"},\n {title: \"Name A-Z\", field: \"name\"},\n {title: \"Name Z-A\", field: \"-name\"},\n {title: \"Rental Start Asc\", field: \"rotation_start\"},\n {title: \"Rental Start Desc\", field: \"-rotation_start\"},\n {title: \"Create Time Asc\", field: \"create_time\"},\n {title: \"Create Time Desc\", field: \"-create_time\"},\n {title: \"Update Time Asc\", field: \"update_time\"},\n {title: \"Update Time Desc\", field: \"-update_time\"},\n {title: \"Year Asc\", field: \"year\"},\n {title: \"Year Desc\", field: \"-year\"}\n ];\n\n $scope.collectionData = {\n empty: false,\n error: '',\n filters: {\n genres: [],\n categories: [],\n keyword: ''\n },\n sortBy: {title: \"ID Desc\", field: \"-id\"},\n offset: 0,\n limit: 20,\n isStart: false,\n isEnd: false,\n/* isEmpty: function () {\n return !$scope.loading && !$scope.collection.length;\n },*/\n/*\n update: function (who) {\n if (!who.isSilentUpdate) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#vodCollectionLoader');\n }\n\n $scope.collectionData.empty = false;\n $scope.collectionData.error = false;\n\n var allQ = {};\n\n if (ValidatorService.Numerical(who.id)) {\n allQ.byId = AssetService.GetAssetById(who.id);\n }\n\n if (who.id === 'all') {\n $scope.collection = [];\n this.isEnd = false;\n this.isStart = false;\n\n this.isStart = this.offset < this.limit;\n\n if ($scope.collectionData.filters.keyword ||\n $scope.collectionData.filters.genres.length ||\n $scope.collectionData.filters.categories.length) {\n\n allQ.allVod = AssetService.SearchByKeyword($scope.collectionData.filters.keyword, {\n genres: _.map($scope.collectionData.filters.genres, 'id'),\n categories: _.map($scope.collectionData.filters.categories, 'id'),\n view: 'vod',\n sort: _.get($scope.collectionData.sortBy, 'field', '')\n }, this.offset, this.limit + 1)\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n\n } else {\n allQ.allVod = AssetService.GetAllAvailableVod(this.offset, this.limit + 1, _.get($scope.collectionData.sortBy, 'field', ''))\n .then(function (collection) {\n if (collection.length < this.limit + 1) {\n this.isEnd = true;\n } else {\n collection.pop();\n }\n return collection;\n }.bind(this));\n }\n }\n\n return $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n\n if (response.byId) {\n if (!response.byId.length) {\n this.update({ id: 'all' });\n return;\n }\n\n var tmpAsset = response.byId[0];\n\n tmpAsset = $scope.parseAsset(tmpAsset);\n\n var found;\n if (who.isSearch) {\n $scope.collection = [tmpAsset];\n this.isEnd = true;\n\n } else if (who.collection) {\n console.log('Check this: ', location && location.href);\n\n if (who.isEpisode) {\n found = deepSearch(who, who.collection);\n\n } else {\n\n found = _.find(who.collection, { id: tmpAsset.id });\n }\n } else {\n\n if (who.isEpisode) {\n found = deepSearch(who);\n\n } else {\n\n found = _.find($scope.collection, { id: tmpAsset.id });\n }\n\n }\n\n tmpAsset._PrivateData.seasonsShow = _.get(found, '_PrivateData.seasonsShow', false);\n\n if (tmpAsset.type === 'tv_series') {\n tmpAsset._Seasons = angular.copy(tmpAsset.tv_series_seasons).map(function (season, index) {\n season.isShowen = false;\n season._Parent = {};\n season._Parent.id = tmpAsset.id;\n season._Parent.seasons = tmpAsset.tv_series_seasons;\n season._Parent.title = tmpAsset.title;\n return season;\n });\n }\n\n _.assign(found, tmpAsset);\n\n return $q.when(found);\n }\n\n if (response.allVod) {\n\n if (!response.allVod.length && $scope.collectionData.offset > 0) {\n $scope.collectionData.offset = 0;\n $scope.collectionData.limit = 20;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: 'all'\n });\n\n $location.search('page', 1);\n\n return;\n }\n\n response.allVod.forEach($scope.parseAsset);\n\n response.allVod\n .filter(function (asset) {\n\n return asset.type === 'tv_series';\n })\n .forEach(function (asset) {\n asset._Seasons = angular.copy(asset.tv_series_seasons).map(function (season) {\n season.isShowen = false;\n season._Parent = {};\n season._Parent.seasons = asset.tv_series_seasons;\n season._Parent.title = asset.title;\n season._Parent.id = asset.id;\n season._Parent.index = asset.index;\n return season;\n });\n\n });\n\n if (!response.allVod.length) {\n $scope.collectionData.empty = true;\n }\n\n $scope.collection = response.allVod;\n\n if ($scope.routeVodId) {\n var currentVodIndex = _.findIndex($scope.collection, { id: $scope.routeVodId });\n\n if (currentVodIndex !== -1) {\n $scope.openModal($scope.collection[currentVodIndex], currentVodIndex, $scope.collection, null, false);\n } else {\n $location.search('vod_id', null);\n }\n }\n\n return $q.when($scope.collection);\n }\n }.bind(this))\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $rootScope.debugInfo(reason, 'silent');\n return false;\n });\n },\n*/\n/* nextPage: function () {\n if (this.isEnd) return;\n $scope.routePage = $scope.routePage + 1;\n $location.search('page', $scope.routePage);\n this.offset += $scope.collectionData.limit;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n },\n prevPage: function () {\n if (this.isStart) return;\n\n if (this.offset >= this.limit) {\n this.offset -= this.limit;\n $scope.routePage = $scope.routePage - 1;\n $location.search('page', $scope.routePage);\n } else {\n this.offset = 0;\n $location.search('page', 1);\n }\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n }*/\n };\n\n var sortBy = window.localStorage['vod_sortby'];\n if (sortBy && sortBy !== 'undefined') {\n try {\n $scope.collectionData.sortBy = JSON.parse(sortBy);\n } catch (e) {\n }\n }\n\n\n/* $scope.applyFilters = function (filters) {\n if ($scope.loading || _.isEmpty(filters)) return;\n\n if (filters.keyword ||\n filters.genres.length ||\n filters.categories.length) {\n $scope.collectionData.offset = 0;\n }\n\n if (ValidatorService.Numerical(filters.keyword)) {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: filters.keyword,\n isSearch: true\n });\n } else {\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' })\n }\n };*/\n\n/* $scope.showSeasons = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n asset._PrivateData.seasonsShow = !asset._PrivateData.seasonsShow\n };*/\n\n $scope.deleteAsset = function (asset, event, isSubAsset) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the ' + asset.type + ' \"' + asset.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n AssetResource.remove({id: asset.id}).$promise\n .then(function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n ToastService.Small({\n title: 'VOD: ' + asset.name + ' successfully deleted',\n color: 'green',\n icon: 'delete'\n },1000 * 3);\n if (isSubAsset === true) {\n if (asset.type === 'season') {\n for (var i = 0; i < $scope.selectedVOD.seasons.length; i++) {\n if (asset.id === $scope.selectedVOD.seasons[i].id) {\n $scope.selectedVOD.seasons.splice(i, 1);\n break;\n }\n }\n AssetResource.update({id: $scope.selectedVOD.id}, { name: $scope.selectedVOD.name }).$promise\n .then(function (response) {\n })\n .catch(function (reason) {\n });\n }\n if (asset.type === 'episode') {\n for (var i = 0; i < $scope.selectedVOD.seasons.length; i++) {\n for (var j = 0; j < $scope.selectedVOD.seasons[i].episodes.length; j++) {\n if (asset.id === $scope.selectedVOD.seasons[i].episodes[j].id) {\n $scope.selectedVOD.seasons[i].episodes.splice(j, 1);\n break;\n }\n }\n }\n }\n } else {\n $scope.getAssets();\n if ($routeParams.asset_id) {\n $scope.clearSelectedVOD();\n }\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#vodCollectionLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'VOD: ' + asset.name + ' delete failed',\n color: 'red',\n icon: 'delete'\n },1000 * 3);\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {}\n }\n ],\n onComplete: function () {\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n //When modal window open = save Data for edit\n $scope.openModal = function (asset, e, isNewType, id) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n var modalScope = $rootScope.$new();\n\n if (isNewType) {\n modalScope.asset = {type: isNewType};\n if (isNewType === 'season') {\n modalScope.asset.seriesId = asset.id;\n if (id > 0) {\n modalScope.asset.id = id;\n }\n }\n if (isNewType === 'episode') {\n modalScope.asset.seriesId = asset.id;\n modalScope.asset.seriesName = asset.name;\n if (id > 0) {\n modalScope.asset.id = id;\n }\n }\n } else {\n modalScope.asset = angular.copy(asset);\n }\n\n modalScope.loading = false;\n\n modalScope.processAsset = function (asset) {\n if (modalScope.loading) return;\n\n if (isNewType && !id) {\n modalScope.createFn();\n } else {\n modalScope.updateFn(asset);\n }\n };\n\n modalScope.close = function (id) {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n ModalWindowService.Close($scope.window, false);\n if (id === -1) {\n AssetResource.update({id: asset.id}, { name: asset.name }).$promise\n .then(function (response) {\n $scope.selectAsset({id: asset.id});\n })\n .catch(function (reason) {\n });\n return;\n }\n if (id) {\n if ($routeParams.asset_id == id) {\n $scope.selectAsset({id: id});\n } else {\n $location.search('asset_id', id);\n }\n }\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope._modalWindow_ = $templateCache.get('lm-asset-edit/edit-window.tpl.html');\n\n modalScope._modalWindow_ = $compile(modalScope._modalWindow_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-asset-edit/navigation-buttons.tpl.html'))(modalScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n }\n });\n\n modalScope._modalWindow_.on('$destroy', function () {\n modalScope.$destroy();\n })\n };\n\n $scope.createEpisode = function (parent, index) {\n var episode = {};\n episode._PrivateData = {};\n episode._PrivateData.seasonIndexNew = index + 1;\n episode._Parent = {};\n episode._Parent.seasons = parent.tv_series_seasons;\n episode._Parent.title = parent.title;\n episode._Parent.id = parent.id;\n episode.tv_series_episode = {\n season_id: parent.tv_series_seasons[index].id,\n season_index: index + 1\n };\n\n return episode;\n };\n\n $scope.importPerform = function () {\n\n $timeout(function () {\n angular.element('#import_xml').trigger('click');\n });\n };\n\n $timeout(function () {\n angular.element('#import_xml')\n .on('change', function () {\n $scope._progress_ = angular.element('#importProgress');\n $scope._bar_ = $scope._progress_.find('.determinate');\n\n $scope.error = '';\n if (!this.files || !this.files.length) {\n ToastService.Small({\n title: 'Please, choose at least one file',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n var file = this.files[0];\n\n if (file.type !== 'text/xml') {\n ToastService.Small({\n title: 'File should be in XML format',\n color: 'red',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n\n return;\n }\n\n $scope.importInProgress = true;\n $scope._progress_.css({ 'display': 'block' });\n\n angular.element('#import_xml').innerHTML = angular.element('#import_xml').innerHTML;\n\n ImportService.UploadToCloud(file, $scope._progress_)\n .then(function (response) {\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n ImportService.CreatePerformImport(response.Location)\n .then(function () {\n $scope.importInProgress = false;\n\n ToastService.Big({\n title: 'Import will continue in background. Check this page later.',\n color: 'green',\n icon: 'arrow-down-bold-hexagon-outline'\n }, 1000 * 60);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n }, function (reason) {\n $scope.importInProgress = false;\n $scope._progress_.css({ 'display': 'none' });\n $scope._bar_.css({ width: 0 });\n\n $rootScope.debugInfo(reason);\n });\n });\n }, 600);\n\n // Stream Check\n var searchTimeout;\n $scope.findSubscriber = function(text) {\n if (!text) return;\n text = text.trim();\n if (text === '') return;\n if (searchTimeout) $timeout.cancel(searchTimeout);\n $scope.findSubscriberLoading = true;\n searchTimeout = $timeout(function () {\n var params = {};\n params['$limit'] = 1000;\n params['$match'] = text\n SubscriberResource.get(params).$promise\n .then(function (result) {\n var users = (result.data || []);\n var userList = [];\n for (var i = 0; i < users.length; i++) {\n const subscriber = users[i];\n userList.push({\n id: subscriber.id,\n title: subscriber.username,\n });\n }\n $scope.subscribers = userList;\n $scope.findSubscriberLoading = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n }, 650);\n };\n\n $scope.getSubscriberStreamURL = function(subscriber) {\n $scope.selectedResource.loading = true;\n $scope.selectedResource.subscriber = subscriber;\n $scope.refreshURL();\n };\n\n $scope.copyURL = function() {\n var url = '';\n if ($scope.selectedResource.type === 'hls') {\n url = $rootScope.getHLSPlayerURL($scope.selectedResource.urlEsc);\n\n } else if ($scope.selectedResource.type === 'hls-protected') {\n url = 'https://vtb.axinom.com/fairplay_streaming_sample_player.html?url=' + $scope.selectedResource.urlEsc + '&license=' + $scope.selectedResource.fpsLicenseURL + '&token=&certUrl=' + $scope.selectedResource.fpsCertURL;\n }\n if ($scope.selectedResource.type === 'dash' || $scope.selectedResource.type === 'dash-protected') {\n url = 'https://shaka-player-demo.appspot.com/demo/#asset=' + $scope.selectedResource.url + ';license=' + $scope.selectedResource.wvLicenseURL;\n }\n $scope.copy(url)\n }\n\n $scope.copy = function(value) {\n const tempInput = document.createElement('input')\n tempInput.style = 'position: absolute; left: -1000px; top: -1000px'\n tempInput.value = value\n document.body.appendChild(tempInput)\n tempInput.select()\n document.execCommand('copy')\n document.body.removeChild(tempInput)\n }\n\n $scope.refreshURL = function() {\n if (!$scope.selectedResource.subscriber.title) {\n return\n }\n $scope.selectedResource.loading = true;\n\n for (var i = 0; i < $scope.selectedVOD.streams.length; i++) {\n if ($scope.selectedVOD.streams[i].id == $scope.selectedResource.id) {\n $scope.selectedResource.type = $scope.selectedVOD.streams[i].type.toLowerCase();\n break;\n }\n }\n\n var clientId = '';\n for (var i=0; i < $rootScope._self.services.length; i++) {\n var service = $rootScope._self.services[i];\n if (service.instance && service.instance.platform && service.instance.platform.client_id) {\n clientId = service.instance.platform.client_id;\n break;\n }\n }\n if (clientId === '') {\n return;\n }\n\n return SubscriberV2Service.GetUserDeviceToken($scope.selectedResource.subscriber.title, clientId)\n .then(function (result) {\n if (result.data) {\n var token = result.data;\n\n if ($scope.selectedResource.type === 'hls-protected' || $scope.selectedResource.type === 'dash-protected' || $scope.selectedResource.type === 'dash') {\n AssetV2Service.GetProtectedStream($scope.selectedVOD.id, $scope.selectedResource.id, token)\n .then(function (response) {\n var streamInfo = response.data;\n $scope.selectedResource.url = streamInfo.playback_url;\n $scope.selectedResource.urlEsc = escape(streamInfo.playback_url);\n $scope.selectedResource.loading = false;\n $scope.selectedResource.error = '';\n $scope.selectedResource.wvLicenseURL = streamInfo.wv_license_url;\n $scope.selectedResource.fpsLicenseURL = escape(streamInfo.fps_license_url);\n $scope.selectedResource.fpsCertURL = escape(streamInfo.fps_cert_url);\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n if (reason.data.error) {\n $scope.selectedResource.error = reason.data.error.message;\n }\n $scope.selectedResource.url = '';\n $scope.selectedResource.urlEsc = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n } else {\n AssetV2Service.GetStream($scope.selectedVOD.id, $scope.selectedResource.id, token)\n .then(function (response) {\n var streamURL = response.data;\n $scope.selectedResource.url = streamURL;\n $scope.selectedResource.urlEsc = escape(streamURL);\n $scope.selectedResource.loading = false;\n $scope.selectedResource.error = '';\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n if (reason.data.error) {\n $scope.selectedResource.error = reason.data.error.message;\n }\n $scope.selectedResource.url = '';\n $scope.selectedResource.urlEsc = '';\n $rootScope.debugInfo(reason, 'silent');\n })\n }\n } else {\n $scope.selectedResource.loading = false;\n }\n })\n .catch(function (reason) {\n $scope.selectedResource.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n\n/*\n $scope.broadcastListener = $rootScope.$on($rootScope.EVENTS.UPDATE_VOD_COLLECTION, function (event, data) {\n $scope.collectionData.update(data);\n });\n*/\n\n /**\n * Init collection on controller add\n */\n $scope.routePage = 1;\n if (!_.isUndefined($routeParams.page) && $routeParams.page > 0) {\n $scope.routePage = Number($routeParams.page);\n // $scope.collectionData.offset = ($scope.routePage - 1) * $scope.collectionData.limit;\n //$scope.collectionData.limit = 20;\n\n $scope.offset = ($scope.routePage - 1) * $scope.limit;\n //$scope.offset = offset + $scope.limit >= $scope.total ? 0 : offset;\n //$scope.getAssets();\n $scope.getAssets();\n } else {\n $location.search('page', 1);\n }\n\n $scope.routeAssetId = null;\n if ($routeParams.asset_id) {\n $scope.routeAssetId = Number($routeParams.asset_id);\n $scope.selectAsset({id: $scope.routeAssetId})\n } else {\n $location.search('asset_id', null);\n }\n\n/* //$scope.routeVodId = null;\n if (!_.isUndefined($routeParams.asset_id)) {\n $scope.routeVodId = Number($routeParams.vod_id);\n } else {\n $location.search('vod_id', null);\n }*/\n\n $scope.routeKeyword = '';\n if (!_.isUndefined($routeParams.keyword)) {\n $scope.routeKeyword = $routeParams.keyword;\n $scope.collectionData.filters.keyword = $routeParams.keyword;\n } else {\n $location.search('keyword', null);\n }\n\n ///\n $scope.watcherFiler = $scope.$watchCollection('collectionData.filters', function (newValue, oldValue) {\n if (oldValue && newValue) {\n\n/* //TODO: Check this logic\n if (!newValue.keyword && !newValue.genres.length && !newValue.categories.length\n && (oldValue.keyword || oldValue.genres.length || oldValue.categories.length)) {\n $scope.collectionData.offset = 0;\n $location.search('page', 1);\n $scope.applyFilters(newValue);\n $location.search('keyword', null);\n }\n\n //if (!oldValue.keyword && !oldValue.genres.length && !oldValue.categories.length) {\n // $scope.collectionData.offset = 0;\n //}\n\n if (newValue.keyword || newValue.genres.length || newValue.categories.length) {\n $location.search('page', 1);\n if (newValue.keyword) $location.search('keyword', newValue.keyword);\n $scope.applyFilters(newValue);\n }*/\n }\n });\n\n ////\n $scope.sortWatcher = $scope.$watchCollection('collectionData.sortBy', function (newValue, oldValue) {\n if (oldValue && newValue) {\n if (newValue.title !== oldValue.title) {\n $scope.getAssets();\n window.localStorage['vod_sortby'] = JSON.stringify($scope.collectionData.sortBy);\n //$scope.collectionData.offset = 0;\n // $location.search('page', 1);\n //$rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' })\n }\n }\n });\n\n /////\n $scope.$on('$routeUpdate', function () {\n //console.log(\"$routeUpdate\");\n //console.log(\"$routeParams.page\", $routeParams.page);\n //console.log(\"$scope.routePage\", $scope.routePage);\n //console.log(\"$scope.routeAssetId\", $scope.routeAssetId);\n //console.log(\"$routeParams.asset_id\", $routeParams.asset_id);\n\n $scope.routePage = $routeParams.page || 1;\n\n if ($scope.routeAssetId && !$routeParams.asset_id) {\n ModalWindowService.Close($scope.window, false);\n }\n\n $scope.routeAssetId = Number($routeParams.asset_id) || null;\n if ($scope.routeAssetId) {\n $scope.selectAsset({id: $scope.routeAssetId})\n } else {\n $scope.clearSelectedVOD()\n }\n\n $scope.getAssets();\n\n\n /* if ($scope.routeKeyword && !$routeParams.keyword) {\n $scope.collectionData.filters.keyword = '';\n $scope.routeKeyword = '';\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, { id: 'all' });\n }\n $scope.routeKeyword = $routeParams.keyword || '';*/\n });\n\n // $scope.applyFilters($scope.collectionData.filters);\n\n $scope.updateIntreval = $interval(function () {\n $scope.routeAssetId = Number($routeParams.asset_id) || null;\n if ($scope.routeAssetId) {\n var silent = false;\n if ($scope.isAssetSelected()) {\n silent = true;\n }\n $scope.reloadAsset({id: $scope.routeAssetId})\n } else {\n $scope.clearSelectedVOD();\n $scope.getAssets(true);\n }\n }, 15 * 1000);\n\n $scope.$on('$destroy', function () {\n $scope.watcherFiler();\n $scope.sortWatcher();\n $interval.cancel($scope.updateIntreval);\n //$scope.broadcastListener();\n\n angular.element('#import_xml').off('change');\n });\n\n }]);\n","/**\n * @ngdoc function\n * @name lmApp.controller:MainCtrl\n * @description\n * # MainCtrl\n * Controller of the lmApp\n */\n\nlmApp\n .controller('WelcomeController', ['$scope', '$rootScope', '$location', '$timeout', 'AuthenticationService', 'ApiService',\n function ($scope, $rootScope, $location, $timeout, AuthenticationService, ApiService) {\n //reset login status\n AuthenticationService.ClearCredentials();\n\n $scope.loginFormData = {\n location: window.location.origin,\n inputs: {\n email: '',\n pswd: '',\n },\n\n validate: {\n email: function () {\n //TODO: Validate EMAIL\n },\n pswd: function () {\n //TODO: Validate PASSWORD\n }\n },\n\n loading: false,\n error: '',\n\n login: function () {\n if (this.loading) return;\n\n this.error = '';\n this.loading = true;\n\n $rootScope.showLinearProgress('#welcomeLoader');\n AuthenticationService.Login($scope.loginFormData.inputs.email, $scope.loginFormData.inputs.pswd)\n .then(function(response) {\n ApiService.SetToken(response.access_token);\n $rootScope._self = response.self.operator;\n return AuthenticationService.SetCredentials(\n $scope.loginFormData.inputs.email,\n response.self,\n response.access_token\n );\n })\n .then(function () {\n\n $timeout(function () {\n $scope.loginFormData.loading = false;\n $rootScope.hideLinearProgress('#welcomeLoader');\n\n $rootScope.$broadcast('self:update', $rootScope._self);\n if ($rootScope.globals.currentUser.isSuperuser) {\n $location.path($rootScope.defaultAdminRoute);\n } else {\n $location.path($rootScope.defaultRoute);\n }\n\n }, 1000);\n }, function (reason) {\n $scope.loginFormData.inputs.pswd = '';\n $scope.loginFormData.loading = false;\n if (reason.message && (reason.message === 'invalid credentials' || reason.message === 'invalid client' || reason.message === 'invalid signature')) {\n $scope.loginFormData.error = 'Username and/or Password Invalid';\n } else {\n $rootScope.debugInfo(reason, true);\n }\n $rootScope.hideLinearProgress('#welcomeLoader');\n });\n },\n\n register: function () {\n if (this.loading) return;\n\n $location.path('/register');\n }\n };\n }]);\n","lmApp\n .service('AuthenticationService',\n ['$q', '$kookies', '$rootScope', '$timeout', 'ApiService', 'ToastService',\n function ($q, $kookies, $rootScope, $timeout, ApiService, ToastService) {\n\n /**\n * Get signature from login data\n * @param data\n * @param clientSecret\n * @returns {*}\n */\n function getSignature(data, clientSecret) {\n var signature = Object.keys(data)\n .sort()\n .reduce(function (mem, key) {\n return mem + key + data[key];\n }, '');\n\n if (clientSecret) signature = signature + clientSecret;\n\n return CryptoJS.MD5(signature).toString(CryptoJS.enc.Hex);\n }\n\n var service = {};\n\n service.CheckAdmin = function () {\n var deferred = $q.defer();\n\n lh.common.request.get('/token/check/admin', {})\n .then(function (response) {\n deferred.resolve(response.is_admin);\n }, function (reason) {\n reason.url = '/token/check/admin';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Login service\n * @param username\n * @param clientSecret\n * @returns {*}\n * @constructor\n */\n service.Login = function (username, clientSecret) {\n\n var deferred = $q.defer();\n\n var data = {\n email: username.toLowerCase(),\n password: clientSecret\n };\n\n ApiService.Request('1/auth', 'POST', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Set Credential to cookies\n * TODO: Change to Session\n * @param username\n * @param self\n * @param token\n * @constructor\n */\n service.SetCredentials = function (username, self, token) {\n var lhSrv = _.find(self.operator.services, {name: \"lighthouse\"});\n\n $rootScope.globals = {\n currentUser: {\n project: self.operator.name,\n company_name: self.operator.company_name,\n supervisorToken: token,\n username: self.account.email,\n token: lhSrv ? lhSrv.instance.token : null,\n isSuperuser: self.operator.type === 'mgmt',\n operatorToken: null,\n name: self.operator.name,\n account: self.account,\n operatorId: self.operator.id,\n operatorExtId: self.operator.ext_id,\n }\n };\n\n $kookies.set('globals', JSON.stringify($rootScope.globals), {path: '/', expires: 7});\n\n if (lhSrv) {\n if (self.account.type !== 'mgmt') {\n hostname = window.location.host + '/discovery:80';\n protocol = window.location.protocol.replace(':', '');\n\n lh.common.config.set({authToken: lhSrv.instance.token});\n lh.system.init();\n }\n } else {\n ToastService.Big({\n color: 'amber',\n title: 'Access denied',\n text: 'This service not available for this account',\n icon: 'alert'\n }, 60 * 1000);\n\n throw {\n result: 0,\n message: 'Service not available'\n };\n }\n\n return true;\n };\n\n /**\n * Clear all credential data from cookies\n * @constructor\n */\n service.ClearCredentials = function () {\n $rootScope._self = {};\n $rootScope.globals = {};\n $timeout(function () {\n $kookies.remove('globals', {path: '/'});\n });\n };\n\n return service;\n }]);\n","lmApp\n .controller('NGBannerController', ['$scope', '$rootScope', '$q', '$templateCache', '$compile', 'CategoryService', 'GenreService', 'AdsResource', 'AdsService', 'ModalWindowService', 'ToastService', 'ManageAssetsWindow', 'GenreResource', 'CategoryResource', 'AssetResource',\n function ($scope, $rootScope, $q, $templateCache, $compile, CategoryService, GenreService, AdsResource, AdsService, ModalWindowService, ToastService, ManageAssetsWindow, GenreResource, CategoryResource, AssetResource) {\n $scope.loading = false;\n\n var newBannerDefaults = {\n name: '',\n pictures: [{source: ''}],\n _selectedTags: {\n Screens: [],\n Categories: [],\n Genres: []\n },\n _link_info: {\n type: 'asset',\n asset: {},\n link: ''\n },\n _rotation_start: moment.utc(),\n _rotation_end: moment.utc().add(1, 'year'),\n _error: {}\n };\n\n $scope.tagSelector = {\n Screens: [{\n id: 'home',\n title: 'Home'\n }],\n Categories: [],\n Genres: []\n };\n\n $scope.ads = [];\n\n var genreList = [];\n var categoryList = {};\n\n var capitalizeFirstLetter = function(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n };\n\n var parseTags = function (tags) {\n var result = {\n CustomTags: {\n Screens: [],\n Categories: [],\n Genres: []\n },\n AutoTags: []\n };\n if (!tags) {\n return result\n }\n for(var i = 0; i < tags.length; i++) {\n var parts = tags[i].split(':');\n if (parts.length !== 2) {\n continue\n }\n var tag = parts[0];\n var elemId = parts[1];\n if (tag[0] === \"!\") {\n switch (tag) {\n case '!category_id':\n result.AutoTags.push({id: Number(elemId), type: \"Category\"});\n break;\n case '!genre_id':\n result.AutoTags.push({id: Number(elemId), type: \"Genre\"});\n }\n } else {\n switch (tag) {\n case 'screen':\n result.CustomTags.Screens.push({id: elemId, type: \"Screen\", title: capitalizeFirstLetter(elemId) });\n break;\n case 'category_id':\n result.CustomTags.Categories.push({id: Number(elemId), type: \"Category\"});\n break;\n case 'genre_id':\n result.CustomTags.Genres.push({id: Number(elemId), type: \"Genre\"});\n }\n }\n }\n return result;\n };\n\n var updateTags = function (ad) {\n if (genreList.length) {\n for(var i = 0; i < ad._selectedTags.Genres.length; i++) {\n ad._selectedTags.Genres[i].title = _.get(_.find(genreList, {id: ad._selectedTags.Genres[i].id}), 'title', '');\n }\n for(i = 0; i < ad._autoTags.length; i++) {\n if (ad._autoTags[i].type === \"Genre\") {\n ad._autoTags[i].title = _.get(_.find(genreList, {id: ad._autoTags[i].id}), 'title', '');\n }\n }\n }\n if (categoryList.length) {\n for(i = 0; i < ad._selectedTags.Categories.length; i++) {\n ad._selectedTags.Categories[i].title = _.get(_.find(categoryList, {id: ad._selectedTags.Categories[i].id}), 'title', '');\n }\n for(i = 0; i < ad._autoTags.length; i++) {\n if (ad._autoTags[i].type === \"Category\") {\n ad._autoTags[i].title = _.get(_.find(categoryList, {id: ad._autoTags[i].id}), 'title', '');\n }\n }\n }\n return ad\n };\n\n var parseAdLink = function (link) {\n var result = {\n type: '',\n asset: {},\n link: ''\n };\n if (link.startsWith(\"asset://\")) {\n result.type = 'asset';\n result.asset = {id: Number(link.split('://')[1])}\n } else if (link !== '') {\n result.type = 'external';\n result.link = link\n } else {\n result.type = 'nourl';\n }\n return result\n };\n\n $scope.getAds = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#bannerLoader');\n\n var params = {\n '$orderby': 'order',\n '$expand': 'pictures(url),tags',\n };\n\n AdsResource.get(params).$promise\n .then(function (data) {\n var assetIDs = [];\n $scope.ads = data.map(function (ad, i) {\n var parsedTags = parseTags(ad.tags);\n ad._selectedTags = parsedTags.CustomTags;\n ad._autoTags = parsedTags.AutoTags;\n ad._rotation_start = new Date(ad.rotation_start);\n ad._rotation_end = new Date(ad.rotation_end);\n ad._link_info = parseAdLink(ad.url);\n if (!ad.pictures) {\n ad.pictures = [{source: ''}]\n }\n if (ad._link_info.type === 'asset') {\n assetIDs.push(ad._link_info.asset.id)\n }\n if (ad.condition_in_rotation === \"ok\" && ad.condition_pictures_available === \"ok\") {\n ad._status = \"active\"\n } else {\n ad._status = \"inactive\"\n }\n return ad;\n });\n for (var i = 0; i < $scope.ads.length; i += 1) {\n $scope.ads[i].order = i + 1\n }\n return assetIDs\n })\n .then(function (assetIDs) {\n if (assetIDs.length) {\n AssetResource.get({'id[in]': assetIDs.join(',')}).$promise\n .then(function (data) {\n var assetMap = {};\n data.forEach(function (asset) {\n assetMap[asset.id] = asset;\n });\n angular.forEach($scope.ads, function(ad) {\n if (ad._link_info.type === 'asset') {\n if (assetMap.hasOwnProperty(ad._link_info.asset.id)) {\n ad._link_info.asset.title = assetMap[ad._link_info.asset.id].name;\n ad._link_info.asset.type = assetMap[ad._link_info.asset.id].type\n }\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n return\n })\n .then(function () {\n GenreResource.get().$promise\n .then(function (data) {\n genreList = data\n .filter(function (genre) {\n return !genre.ext_id.startsWith(\"epg:\");\n })\n .map(function (genre) {\n return {\n id: genre.id,\n title: genre.name\n }\n });\n angular.forEach($scope.ads, function(ad) {\n ad = updateTags(ad);\n });\n $scope.tagSelector.Genres = genreList\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n })\n .then(function () {\n CategoryResource.get().$promise\n .then(function (data) {\n categoryList = data.map(function (category) {\n return {\n id: category.id,\n title: category.name\n }\n });\n angular.forEach($scope.ads, function(ad) {\n ad = updateTags(ad);\n });\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $scope.tagSelector.Categories = categoryList\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n };\n\n var convertAd = function (ad) {\n var adRepresentation = {\n name: ad.name,\n rotation_start: ad._rotation_start.format(),\n rotation_end: ad._rotation_end.format(),\n ext_id: 'local:' + translit(ad.name) + moment.utc(),\n pictures: [\n {\n type: \"picture\",\n category: ad.pictures[0].category || '2x1',\n group_id: \"picture\",\n source: ad.pictures[0].source,\n deployer: ad.pictures[0].deployer || 'origin'\n }\n ],\n tags: []\n };\n if (ad._link_info.type === 'external') {\n adRepresentation.url = ad._link_info.link\n }\n if (ad._link_info.type === 'asset') {\n adRepresentation.url = \"asset://\" + ad._link_info.asset.id\n }\n if (ad._link_info.type === 'nourl') {\n adRepresentation.url = ''\n }\n if (ad._selectedTags.Screens && ad._selectedTags.Screens.length) {\n ad._selectedTags.Screens.forEach(function (value) {\n adRepresentation.tags.push('screen:' + value.id);\n });\n }\n if (ad._selectedTags.Genres && ad._selectedTags.Genres.length) {\n ad._selectedTags.Genres.forEach(function (value) {\n adRepresentation.tags.push('genre_id:' + value.id);\n });\n }\n if (ad._selectedTags.Categories && ad._selectedTags.Categories.length) {\n ad._selectedTags.Categories.forEach(function (value) {\n adRepresentation.tags.push('category_id:' + value.id);\n });\n }\n return adRepresentation\n };\n\n $scope.createBanner = function () {\n if ($scope.loading) return;\n\n $scope.newBanner = new AdsResource(angular.copy(newBannerDefaults));\n\n var inner = $templateCache.get('new-banner.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Create',\n color: 'green',\n check: function () {\n var validate = AdsService.ValidateAd($scope.newBanner);\n if (!validate) {\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled',\n icon: 'alert'\n }, 30 * 1000);\n }\n return validate;\n },\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#bannerLoader');\n\n AdsResource.add(convertAd($scope.newBanner)).$promise\n .then(function (response) {\n var newAd = angular.copy($scope.newBanner);\n var parsedTags = parseTags(response.data.tags);\n newAd.id = response.data.id;\n newAd._autoTags = parsedTags.AutoTags;\n newAd._selectedTags = parsedTags.CustomTags;\n newAd = updateTags(newAd);\n newAd._rotation_start = new Date(response.data.rotation_start);\n newAd._rotation_end = new Date(response.data.rotation_end);\n newAd.condition_in_rotation = response.data.condition_in_rotation;\n newAd.condition_pictures_available = response.data.condition_pictures_available;\n if (response.data.condition_in_rotation === \"ok\" && response.data.condition_pictures_available === \"ok\") {\n newAd._status = \"active\"\n } else {\n newAd._status = \"inactive\"\n }\n newAd.pictures[0].state = response.data.pictures[0].state;\n\n $scope.ads.push(newAd);\n\n ToastService.Small({\n title: 'The banner has been added',\n color: 'green',\n icon: 'plus'\n }, 20 * 1000);\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n return response\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n ToastService.Small({\n title: 'Failed to add banner: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n $scope.editBanner = function (ad) {\n if ($scope.loading) return;\n\n\n $scope.newBanner = new AdsResource(angular.copy(ad));\n $scope.newBanner._rotation_start = moment(ad._rotation_start).utc();\n $scope.newBanner._rotation_end = moment(ad._rotation_end).utc();\n\n var inner = $templateCache.get('new-banner.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Update',\n color: 'green',\n check: function () {\n var validate = AdsService.ValidateAd($scope.newBanner);\n if (!validate) {\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled',\n icon: 'alert'\n }, 30 * 1000);\n }\n\n return validate;\n },\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#bannerLoader');\n\n var patchedAd = convertAd($scope.newBanner);\n delete patchedAd.ext_id;\n if ($scope.newBanner.pictures[0].source === ad.pictures[0].source) {\n delete patchedAd.pictures;\n }\n\n AdsResource.update({id: ad.id}, patchedAd).$promise\n .then(function (response) {\n var updatedAd = angular.copy($scope.newBanner);\n\n var index = $scope.ads.indexOf(ad);\n $scope.ads[index].name = updatedAd.name;\n $scope.ads[index]._link_info = updatedAd._link_info;\n\n var parsedTags = parseTags(response.data.tags);\n $scope.ads[index]._autoTags = parsedTags.AutoTags;\n $scope.ads[index]._selectedTags = parsedTags.CustomTags;\n $scope.ads[index] = updateTags($scope.ads[index]);\n $scope.ads[index]._rotation_start = new Date(response.data.rotation_start);\n $scope.ads[index]._rotation_end = new Date(response.data.rotation_end);\n $scope.ads[index].condition_in_rotation = response.data.condition_in_rotation;\n $scope.ads[index].condition_pictures_available = response.data.condition_pictures_available;\n\n if (response.data.condition_in_rotation === \"ok\" && response.data.condition_pictures_available === \"ok\") {\n $scope.ads[index]._status = \"active\"\n } else {\n $scope.ads[index]._status = \"inactive\"\n }\n if (response.data.pictures.length && response.data.pictures[0].source !== $scope.ads[index].pictures[0].source) {\n $scope.ads[index].pictures[0].state = response.data.pictures[0].state;\n $scope.ads[index].pictures[0].url = response.data.pictures[0].url;\n }\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n ToastService.Small({\n title: 'The banner has been updated',\n color: 'green',\n icon: 'refresh'\n }, 20 * 1000);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n ToastService.Small({\n title: 'Failed to update banner: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n }\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n $scope.deleteAd = function (ad) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#bannerLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the banner \"' + ad.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n AdsResource.remove({id: ad.id}).$promise\n .then(function () {\n var index = $scope.ads.indexOf(ad);\n $scope.ads.splice(index, 1);\n ToastService.Small({\n title: 'The banner was deleted',\n color: 'green',\n icon: 'delete'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove banner: ' + + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'alert'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.openAssetSearch = function (banner) {\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: function (asset, toThis) {\n if (asset.id) {\n banner._link_info.asset = {\n id: asset.id,\n title: asset.title,\n type: asset.type\n };\n }\n return true;\n },\n type: 'single',\n title: 'selecting movie or channel for banner',\n view: 'vod,live',\n currentCollection: [banner._link_info.type === 'asset' ? banner._link_info.asset.id : null],\n filter: {}\n });\n };\n\n $scope.changeBannerOrder = function (banner, index, direction) {\n for (var i = 0; i < $scope.ads.length; i += 1) {\n if (!$scope.ads[i].order) {\n $scope.ads[i].order = i + 1\n }\n }\n\n if (direction === 'up') {\n var curr = _.find($scope.ads, {order: index + 1});\n var prev = _.find($scope.ads, {order: index});\n\n curr.order -= 1\n prev.order += 1\n }\n\n if (direction === 'down') {\n var curr = _.find($scope.ads, {order: index + 1});\n var next = _.find($scope.ads, {order: index + 2});\n\n curr.order += 1\n next.order -= 1\n }\n\n var reqList = [];\n for (var i = 0; i < $scope.ads.length; i += 1) {\n reqList.push(AdsResource.update($scope.ads[i]).$promise)\n }\n\n $scope.loading = true;\n\n $q.all(reqList)\n .then(function(values) {\n $scope.getAds();\n ToastService.Small({\n title: 'The banner order has been updated',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n })\n .catch(function(reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#bannerLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to update banners',\n color: 'red',\n icon: 'server-minus'\n });\n });\n\n }\n\n $scope.getAds();\n }\n ]);\n","lmApp\n .controller('RailsController', ['$scope', '$rootScope', '$q', '$templateCache', '$compile', '$routeParams', '$location', 'MetadataService', 'RailResource', 'TimezoneService', 'CategoryService', 'GenreService', 'AdsResource', 'AdsService', 'ModalWindowService', 'ToastService', 'ManageAssetsWindow', 'OperatorResource', 'GenreResource', 'CategoryResource', 'AssetResource',\n function ($scope, $rootScope, $q, $templateCache, $compile, $routeParams, $location, MetadataService, RailResource, TimezoneService, CategoryService, GenreService, AdsResource, AdsService, ModalWindowService, ToastService, ManageAssetsWindow, OperatorResource, GenreResource, CategoryResource, AssetResource) {\n $scope.loading = false;\n $scope.selectedTab = 'screens';\n\n $scope.setTab = function (tab) {\n $scope.selectedTab = tab;\n $scope.clearActiveRail();\n $scope.clearActiveScreen();\n };\n\n $scope.screens = []\n $scope.rails = []\n $scope.ads = []\n\n $scope.screen = {}\n $scope.banners = {\n firstElement: 0,\n _CSS: {\n left: 0,\n },\n sliderItems: []\n }\n $scope.rail = {}\n\n $scope.moreVariants = [\n {\n id: '',\n title: 'Default'\n },\n {\n id: 'ui://tv',\n title: 'TV section'\n },\n {\n id: 'ui://vod',\n title: 'VOD section'\n },\n ];\n\n $scope.menu = []\n $scope.menuLogo = {\n url: '',\n }\n\n $scope.locLangs = angular.copy(MetadataService.languages.list);\n var langCodeToTitle = {};\n for (var i = 0; i < $scope.locLangs.length; i++) {\n var lang = $scope.locLangs[i];\n langCodeToTitle[lang.id] = lang;\n }\n\n $scope.menuIcons = [\n {\n id: 'home',\n title: 'home'\n },\n {\n id: 'tv',\n title: 'tv'\n },\n {\n id: 'vod',\n title: 'vod'\n },\n {\n id: 'mylist',\n title: 'mylist'\n }\n ]\n\n $scope.menuTitles = [\n {\n id: 'custom',\n title: 'Custom'\n },\n {\n id: 'menu_home',\n title: 'menu_home'\n },\n {\n id: 'menu_myList',\n title: 'menu_myList'\n },\n {\n id: 'menu_tv',\n title: 'menu_tv'\n },\n {\n id: 'menu_video',\n title: 'menu_video'\n },\n ]\n\n $scope.menuOptions = [\n {\n id: 'home',\n title: 'Default screen \"Home\"',\n scheme: 'ui',\n path: 'homepage',\n icon: 'home',\n menu_title: 'menu_home',\n default: true,\n },\n {\n id: 'mylist',\n title: 'Default screen \"My List\"',\n scheme: 'ui',\n path: 'mylist',\n icon: 'mylist',\n menu_title: 'menu_myList',\n default: true,\n },\n {\n id: 'tv',\n title: 'Default screen \"TV\"',\n scheme: 'ui',\n path: 'tv',\n icon: 'tv',\n menu_title: 'menu_tv',\n default: true,\n },\n {\n id: 'vod',\n title: 'Default screen \"Video\"',\n scheme: 'ui',\n path: 'vod',\n icon: 'vod',\n menu_title: 'menu_video',\n default: true,\n }\n ]\n\n var convertEditedMenuToJsonAPI = function () {\n var processed = {\n scheme: $scope.editedMenu.option.scheme,\n path: $scope.editedMenu.option.path,\n icon: $scope.editedMenu.icon.id,\n title: $scope.editedMenu.title.id || '',\n }\n if ($scope.editedMenu.title.id === 'custom') {\n processed.title = $scope.editedMenu.customTitle;\n }\n if ($scope.editedMenu.localization.length) {\n processed.l10n = {};\n for (var i = 0; i < $scope.editedMenu.localization.length; i += 1) {\n var loc = $scope.editedMenu.localization[i];\n processed.l10n[loc.lang.id.toLowerCase()] = {title: loc.title}\n }\n }\n return processed\n }\n\n var convertMenuToJsonAPI = function (m) {\n var processed = {\n url: m.scheme + '://' + m.path,\n icon: m.icon,\n title: m.title,\n }\n if (m.l10n) {\n processed.l10n = m.l10n;\n }\n return processed\n }\n\n var normMenuObj = function (m) {\n var processed = {\n scheme:'',\n path: '',\n icon: m.icon || '',\n title: m.title || '',\n localization: [],\n }\n var url = m.url || '';\n var parts = url.split('://')\n if (parts.length === 2) {\n processed.scheme = parts[0]\n processed.path = parts[1]\n }\n if (m.l10n) {\n for (var langCode in m.l10n) {\n var code = langCode.toUpperCase()\n if (langCodeToTitle.hasOwnProperty(code))\n processed.localization.push({\n lang: langCodeToTitle[code],\n title: m.l10n[langCode].title || '',\n })\n }\n }\n return processed\n }\n\n $scope.getScreens = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var params = {};\n params['$expand'] = 'rails';\n\n $scope.ads = [];\n\n RailResource.getScreens(params).$promise\n .then(function (data) {\n var screens = data || []\n for (var i = 0; i < screens.length; i += 1) {\n if (!screens[i].rails) {\n screens[i].rails = []\n }\n screens[i].createTime = new Date(screens[i].create_time);\n $scope.moreVariants.push({\n id: 'screen://' + screens[i].ext_id,\n title: 'Screen \"' + screens[i].name +'\"'\n })\n $scope.menuOptions.push({\n id: 'screen' + screens[i].id,\n title: 'Custom screen \"' + screens[i].name +'\"',\n scheme: 'screen',\n path: screens[i].ext_id,\n icon: '',\n menu_title: '',\n default: false,\n })\n }\n $scope.screens = screens\n\n params['$expand'] = 'preview(asset(conditions,resources(url))),content_n';\n RailResource.get(params).$promise\n .then(function (data) {\n var rails = data || []\n for (var i = 0; i < rails.length; i += 1) {\n rails[i].selected = false\n if (!rails[i].preview) rails[i].preview = []\n for (var k = 0; k < rails[i].preview.length; k += 1) {\n rails[i].preview[k].asset = processAsset(rails[i].preview[k].asset)\n }\n }\n $scope.rails = rails\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n\n AdsResource.get().$promise\n .then(function (data) {\n var assetIDs = [];\n $scope.ads = data.map(function (ad, i) {\n ad.picture = {\n url: '',\n state: '',\n }\n if (ad.pictures && ad.pictures.length > 0) {\n ad.picture.url = ad.pictures[0].url;\n ad.picture.state = ad.pictures[0].state;\n }\n if (ad.condition_in_rotation === \"ok\" && ad.condition_pictures_available === \"ok\") {\n ad._status = \"active\"\n } else {\n ad._status = \"inactive\"\n }\n ad.valid = true\n if (ad.url && ad.url.startsWith(\"asset://\")) {\n var id = Number(ad.url.split('://')[1])\n if (id) assetIDs.push(id)\n }\n return ad;\n });\n return assetIDs\n })\n .then(function (assetIDs) {\n if (assetIDs.length) {\n AssetResource.get({'id[in]': assetIDs.join(',')}).$promise\n .then(function (data) {\n var assetMap = {};\n data.forEach(function (asset) {\n assetMap[asset.id] = asset;\n });\n angular.forEach($scope.ads, function(ad) {\n if (ad.url && ad.url.startsWith(\"asset://\")) {\n var id = Number(ad.url.split('://')[1])\n if (id && !assetMap.hasOwnProperty(id)) {\n ad.valid = false\n }\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n }\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n OperatorResource.getConfigHootko().$promise\n .then(function (data) {\n if (data.data.menu && data.data.menu.length) {\n for (var i = 0; i < data.data.menu.length; i += 1) {\n var m = data.data.menu[i];\n $scope.menu.push(normMenuObj(m));\n }\n }\n if (data.data.design && data.data.design.logo_url) {\n $scope.menuLogo.url = data.data.design.logo_url;\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n })\n\n var processCondition = function (condition) {\n return {\n id: condition.id || 0,\n required: condition.required || false,\n type: condition.type || '',\n state: condition.state || ''\n }\n };\n\n var processAsset = function(asset) {\n var processed = {\n id: asset.id,\n extid: asset.ext_id,\n type: asset.type,\n name: asset.name,\n description: asset.description,\n lcn: asset.lcn,\n rotationStart: asset.rotation_start,\n rotationFinish: asset.rotation_finish,\n provider: asset.provider ? asset.provider.name : '',\n categories: asset.categories || [],\n genres: asset.genres || [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n rotationPeriodOK: true,\n conditions: {\n ready: processCondition({})\n },\n order: 0,\n };\n\n if (moment(asset.rotation_start).diff(moment()) > 0 || moment(asset.rotation_finish).diff(moment()) < 0) {\n processed.rotationPeriodOK = false;\n }\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n processed.poster.state = r.state;\n processed.poster.url = r.url;\n processed.poster.source = r.source;\n }\n }\n }\n\n if (asset.conditions) {\n var ready = asset.conditions.filter(function(c) {\n if (c.type === 'ready') return c;\n });\n if (ready.length) {\n processed.conditions.ready = processCondition(ready[0]);\n }\n }\n\n return processed;\n };\n\n $scope.getScreen = function (id) {\n $scope.selectedTab = 'screens';\n\n $scope.screen.id = id\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var params = {};\n params['id[eq]'] = id;\n params['$expand'] = 'rails(preview(thumbnail_url,asset(conditions,resources(url))),content_n),carousel(tags,pictures)';\n\n $scope.banners.sliderItems = [{},{}];\n $scope.banners.firstElement = 0;\n $scope.banners._CSS.left = 0;\n\n RailResource.getScreens(params).$promise\n .then(function (data) {\n var screens = data || []\n for (var i = 0; i < screens.length; i += 1) {\n if (!screens[i].rails) {\n screens[i].rails = []\n }\n if (!screens[i].carousel) {\n screens[i].carousel = []\n }\n screens[i].createTime = new Date(screens[i].create_time);\n\n for (var j = 0; j < screens[i].rails.length; j += 1) {\n screens[i].rails[j].order = j + 1\n if (!screens[i].rails[j].preview) screens[i].rails[j].preview = []\n for (var k = 0; k < screens[i].rails[j].preview.length; k += 1) {\n screens[i].rails[j].preview[k].asset = processAsset(screens[i].rails[j].preview[k].asset)\n }\n }\n }\n\n if (screens.length > 0) {\n $scope.screen = screens[0]\n if ($scope.screen.carousel && $scope.screen.carousel.length) {\n $scope.banners.sliderItems = [];\n for (var j = 0; j < $scope.screen.carousel.length; j += 1) {\n var newSlide = {};\n var ad = $scope.screen.carousel[j];\n if (ad.pictures && ad.pictures.length > 0) {\n newSlide.picture = ad.pictures[0].url;\n newSlide.state = ad.pictures[0].state;\n }\n newSlide.name = ad.name;\n $scope.banners.sliderItems.push(newSlide);\n }\n }\n } else {\n $scope.clearActiveScreen()\n }\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n $scope.getRail = function (id) {\n $scope.selectedTab = 'rails';\n $scope.rail.id = id\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var params = {};\n params['id[eq]'] = id;\n params['$expand'] = 'preview(thumbnail_url,asset)';\n\n RailResource.get(params).$promise\n .then(function (data) {\n var rails = data || []\n for (var i = 0; i < rails.length; i += 1) {\n rails[i].assets = [];\n rails[i].type = 'live';\n }\n if (rails.length > 0) {\n if (!rails[0].more) {\n rails[0].more = '';\n }\n for (var i = 0; i < $scope.moreVariants.length; i += 1) {\n if ($scope.moreVariants[i].id === rails[0].more) {\n rails[0].more = $scope.moreVariants[i];\n break;\n }\n }\n $scope.rail = rails[0]\n } else {\n $scope.clearActiveRail()\n }\n\n params = {};\n params['$expand'] = 'asset(resources(url),genres,conditions)';\n RailResource.getRailContent({id: id}, params).$promise\n .then(function (data) {\n var assets = data || []\n for (var i = 0; i < assets.length; i += 1) {\n var asset = processAsset(assets[i].asset);\n asset.order = i + 1;\n $scope.rail.assets.push(asset);\n }\n if (assets.length && assets[0].asset.type !== 'channel') {\n $scope.rail.type = 'vod';\n }\n\n var found = false\n for (var i = 0; i < $scope.rails.length; i += 1) {\n if ($scope.rails[i].id == $scope.rail.id) {\n found = true\n break\n }\n }\n if (!found) {\n $scope.rails.push($scope.rail)\n }\n\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n })\n }\n\n $scope.getScreens()\n\n var timezone = _.find(TimezoneService.Timezones, {title: 'UTC'});\n $scope.convertTime = function (dt) {\n return TimezoneService.addTimezoneToDate(dt, timezone)\n };\n\n $scope.isActiveScreenSet = function () {\n return !_.isEmpty($scope.screen);\n };\n\n $scope.isActiveRailSet = function () {\n return !_.isEmpty($scope.rail);\n };\n\n $scope.setActiveScreen = function (screen) {\n //$scope.screen = screen\n $scope.clearActiveRail();\n $location.search('screen_id', screen.id);\n }\n\n $scope.setActiveRail = function (rail) {\n $scope.clearActiveScreen();\n $location.search('rail_id', rail.id);\n }\n\n $scope.clearActiveScreen = function () {\n $scope.screen = {};\n $location.search('screen_id', null);\n };\n\n $scope.clearActiveRail = function () {\n $scope.rail = {};\n $location.search('rail_id', null);\n };\n\n if ($routeParams.screen_id) {\n $scope.getScreen($routeParams.screen_id)\n $scope.clearActiveRail()\n } else if ($routeParams.rail_id) {\n $scope.getRail($routeParams.rail_id)\n $scope.clearActiveScreen()\n }\n\n $scope.$on('$routeUpdate', function () {\n if (!$routeParams.screen_id) {\n $scope.clearActiveScreen();\n }\n if (!$routeParams.rail_id) {\n $scope.clearActiveRail();\n }\n if ($routeParams.screen_id) {\n $scope.getScreen($routeParams.screen_id)\n } else if ($routeParams.rail_id) {\n $scope.getRail($routeParams.rail_id)\n }\n\n });\n\n $scope.changeContent = function() {\n $scope.railList = angular.copy($scope.rails);\n\n var selectedRails = {}\n for (var i = 0; i < $scope.screen.rails.length; i += 1) {\n selectedRails[$scope.screen.rails[i].id] = i\n }\n\n for (var i = 0; i < $scope.railList.length; i += 1) {\n if (selectedRails.hasOwnProperty($scope.railList[i].id)) {\n $scope.railList[i].selected = true\n $scope.railList[i].order = selectedRails[$scope.railList[i].id]\n }\n }\n\n var inner = $templateCache.get('rails-change-content.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Save',\n color: 'green',\n fn: function () {\n //var newRailList = []\n $scope.screen.rails = []\n var list = _.sortBy($scope.railList, 'order');\n for (var i = 0; i < list.length; i += 1) {\n if (list[i].selected) {\n $scope.screen.rails.push(list[i])\n }\n }\n for (var i = 0; i < $scope.screen.rails.length; i += 1) {\n $scope.screen.rails[i].order = i + 1;\n }\n $scope.$apply();\n\n //$scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#modalLoader');\n }\n }\n ],\n size: {\n s: 12,\n l: 8\n }\n });\n };\n\n $scope.addScreen = function () {\n $scope.screen = {\n id: 0,\n name: '',\n ext_id: '',\n rails: [],\n }\n }\n\n var isScreenValid = function() {\n $scope.validateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.screen.name)) {\n $scope.validateErrors.name = true;\n valid = false;\n }\n if (!_.trim($scope.screen.ext_id)) {\n $scope.validateErrors.ext_id = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.saveScreen = function () {\n if (!isScreenValid()) {\n return\n }\n\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var saved = {\n ext_id: $scope.screen.ext_id,\n name: $scope.screen.name,\n rails: [],\n }\n\n for (var i = 0; i < $scope.screen.rails.length; i += 1) {\n saved.rails.push({ id: $scope.screen.rails[i].id })\n }\n\n if ($scope.screen.id > 0) {\n RailResource.patchScreen({id: $scope.screen.id}, saved).$promise\n .then(function () {\n ToastService.Small({\n title: 'The screen has been updated',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to save: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n });\n } else {\n RailResource.createScreen(saved).$promise\n .then(function (result) {\n $scope.screen.id = result.data.id\n $scope.screen.create_time = result.data.create_time\n $scope.screens.push($scope.screen)\n $scope.getScreen($scope.screen.id)\n ToastService.Small({\n title: 'The screen has been created',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to create screen: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n });\n }\n }\n\n $scope.addRail = function () {\n $scope.rail = {\n id: 0,\n name: '',\n type: 'vod',\n ext_id: '',\n assets: [],\n }\n }\n\n var isRailValid = function() {\n $scope.railValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.rail.name)) {\n $scope.railValidateErrors.name = true;\n valid = false;\n }\n/* if (!_.trim($scope.rail.ext_id)) {\n $scope.railValidateErrors.ext_id = true;\n valid = false;\n }*/\n return valid;\n };\n\n $scope.saveRail = function () {\n if (!isRailValid()) {\n return\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var updated = {\n ext_id: $scope.rail.ext_id,\n name: $scope.rail.name,\n more: $scope.rail.more.id,\n content: [],\n }\n\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n updated.content.push({asset_id: $scope.rail.assets[i].id})\n }\n\n if ($scope.rail.id > 0) {\n RailResource.patch({id: $scope.rail.id}, updated).$promise\n .then(function () {\n ToastService.Small({\n title: 'The rail has been updated',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to save: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n });\n } else {\n var created = {\n ext_id: $scope.rail.ext_id,\n name: $scope.rail.name,\n more: $scope.rail.more.id,\n content: [],\n }\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n created.content.push({asset_id: $scope.rail.assets[i].id})\n }\n\n RailResource.createRail(created).$promise\n .then(function (result) {\n $scope.getRail(result.data.id)\n ToastService.Small({\n title: 'The rail has been created',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to create rail: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n });\n }\n }\n\n $scope.deleteScreen = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var screen = $scope.screen;\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the screen \"' + screen.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n RailResource.removeScreen({id: screen.id}).$promise\n .then(function () {\n var index = $scope.screens.indexOf(screen);\n $scope.screens.splice(index, 1);\n ToastService.Small({\n title: 'The screen has been removed',\n color: 'green',\n icon: 'delete'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $scope.clearActiveScreen();\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove screen: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'alert'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n $scope.deleteRail = function (rail) {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n $scope.modalWindowScope = $scope.$new();\n var inner = 'Are you sure you want to delete the rail \"' + rail.name +'\"?';\n\n ModalWindowService.Open({\n content: inner,\n actions: [\n {\n title: 'I understand. Do it',\n color: 'green',\n fn: function () {\n RailResource.remove({id: rail.id}).$promise\n .then(function () {\n var index = $scope.rails.indexOf(rail);\n $scope.rails.splice(index, 1);\n ToastService.Small({\n title: 'The rail has been removed',\n color: 'green',\n icon: 'delete'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to remove rail: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'alert'\n });\n });\n }\n },\n {\n title: 'cancel',\n color: 'red',\n fn: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n }\n }\n ],\n onComplete: function () {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n $scope.modalWindowScope.$destroy();\n }\n });\n };\n\n var convertAsset = function(asset) {\n var processed = {\n id: asset.id,\n extid: asset.extid,\n type: asset.type,\n name: asset.title,\n genres: asset.genres || [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n conditions: {\n ready: {\n state: asset.is_available ? 'ok' : 'error'\n }\n }\n };\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n processed.poster.state = r.is_deployed ? 'deployed' : 'deployment-error';\n processed.poster.url = r.source;\n processed.poster.source = r.source;\n }\n }\n }\n\n return processed;\n };\n\n $scope.manageAssets = function (toAdd, toRemove, toThis) {\n var removed = {}\n for (var i = 0; i < toRemove.length; i += 1) {\n removed[toRemove[i].id] = true\n }\n\n var newList = []\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n if (!removed.hasOwnProperty($scope.rail.assets[i].id)) {\n newList.push($scope.rail.assets[i])\n }\n }\n\n for (var i = 0; i < toAdd.length; i += 1) {\n newList.push(convertAsset(toAdd[i]))\n }\n\n $scope.rail.assets = newList\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n $scope.rail.assets[i].order = i + 1;\n }\n };\n\n $scope.changeRailContent = function () {\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: $scope.manageAssets,\n title: 'selecting content for the rail ' + $scope.rail.name,\n view: $scope.rail.type,\n currentCollection: _.map($scope.rail.assets, 'id'),\n filter: {}\n });\n };\n\n $scope.slideLeft = function () {\n $scope.banners.firstElement -= 1;\n if ($scope.banners.firstElement < 0) {\n $scope.banners.firstElement = 0;\n }\n $scope.banners._CSS.left = '-' + (33.333 * $scope.banners.firstElement) + '%';\n };\n\n $scope.slideRight = function () {\n if ($scope.banners.firstElement !== $scope.banners.sliderItems.length - 2) {\n $scope.banners.firstElement += 1;\n $scope.banners._CSS.left = '-' + (33.333 * $scope.banners.firstElement) + '%';\n }\n };\n\n $scope.editSlider = function () {\n $scope.bannerList = [];\n for (var i = 0; i < $scope.ads.length; i += 1) {\n if (!$scope.ads[i].valid) continue\n $scope.bannerList.push($scope.ads[i])\n }\n\n var selected = {}\n for (var i = 0; i < $scope.screen.carousel.length; i += 1) {\n selected[$scope.screen.carousel[i].id] = i\n }\n\n for (var i = 0; i < $scope.bannerList.length; i += 1) {\n if (selected.hasOwnProperty($scope.bannerList[i].id)) {\n $scope.bannerList[i].selected = true\n //$scope.bannerList[i].order = selectedRails[$scope.railList[i].id]\n }\n }\n\n var inner = $templateCache.get('screen-change-banners.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Save',\n color: 'green',\n fn: function () {\n var reqList = [];\n var screenTag = 'screen:' + $scope.screen.id;\n for (var i = 0; i < $scope.bannerList.length; i += 1) {\n var tags = [];\n var tagFound = false;\n if ($scope.bannerList[i].tags && $scope.bannerList[i].tags.length) {\n for (var j = 0; j < $scope.bannerList[i].tags.length; j += 1) {\n var tag = $scope.bannerList[i].tags[j];\n if (tag === screenTag && $scope.bannerList[i].selected) {\n tagFound = true;\n }\n if (tag === screenTag && !$scope.bannerList[i].selected) {\n continue\n }\n tags.push(tag);\n }\n }\n if (!tagFound && $scope.bannerList[i].selected) {\n tags.push(screenTag);\n }\n\n var patchedAd = {\n tags: tags,\n }\n reqList.push(AdsResource.update({id: $scope.bannerList[i].id}, patchedAd).$promise)\n }\n if (reqList.length) {\n var patchedScreen = {\n carousel_tag: screenTag,\n }\n reqList.push(RailResource.patchScreen({id: $scope.screen.id}, patchedScreen).$promise)\n }\n\n $q.all(reqList)\n .then(function(values) {\n $scope.getScreen($scope.screen.id)\n ToastService.Small({\n title: 'The screen has been updated',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n })\n .catch(function(reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Failed to update screen: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'alert'\n });\n });\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#modalLoader');\n }\n }\n ],\n size: {\n s: 12,\n l: 8\n }\n });\n }\n\n $scope.setMenu = function (menu) {\n if (menu) {\n for (var i = 0; i < $scope.menuOptions.length; i += 1) {\n if ($scope.menuOptions[i].scheme === menu.scheme && $scope.menuOptions[i].path === menu.path) {\n $scope.editedMenu.option = $scope.menuOptions[i];\n break;\n }\n }\n for (var i = 0; i < $scope.menuIcons.length; i += 1) {\n if ($scope.menuIcons[i].id === menu.icon) {\n $scope.editedMenu.icon = $scope.menuIcons[i];\n break;\n }\n }\n for (var i = 0; i < $scope.menuTitles.length; i += 1) {\n if ($scope.menuTitles[i].id === menu.title) {\n $scope.editedMenu.title = $scope.menuTitles[i];\n break;\n }\n }\n if (!$scope.editedMenu.title.id) {\n $scope.editedMenu.title = $scope.menuTitles[0]\n $scope.editedMenu.customTitle = menu.title;\n }\n if (menu.localization.length) {\n $scope.editedMenu.localization = angular.copy(menu.localization);\n }\n }\n if (!$scope.editedMenu.icon.id) {\n for (var i = 0; i < $scope.menuIcons.length; i += 1) {\n if ($scope.menuIcons[i].id === $scope.editedMenu.option.icon) {\n $scope.editedMenu.icon = $scope.menuIcons[i];\n break;\n }\n }\n }\n if (!$scope.editedMenu.icon.id) {\n $scope.editedMenu.icon = $scope.menuIcons[0]\n }\n if (!$scope.editedMenu.title.id) {\n for (var i = 0; i < $scope.menuTitles.length; i += 1) {\n if ($scope.menuTitles[i].id === $scope.editedMenu.option.menu_title) {\n $scope.editedMenu.title = $scope.menuTitles[i];\n break;\n }\n }\n }\n if (!$scope.editedMenu.title.id) {\n $scope.editedMenu.title = $scope.menuTitles[0]\n }\n }\n\n $scope.changeMenuOption = function (option) {\n $scope.editedMenu = {\n option: option,\n icon: {},\n menu: {},\n title: {},\n customTitle: '',\n localization: [],\n }\n $scope.setMenu()\n }\n\n $scope.saveMenu = function () {\n if ($scope.loading) return;\n $scope.loading = true;\n $rootScope.showLinearProgress('#screenLoader');\n\n var data = {\n menu: [],\n design: {},\n }\n for (var i = 0; i < $scope.menu.length; i += 1) {\n data.menu.push(convertMenuToJsonAPI($scope.menu[i]))\n }\n\n if ($scope.menuLogo.url) {\n data.design.logo_url = $scope.menuLogo.url;\n }\n\n OperatorResource.updateConfigHootko(data).$promise\n .then(function (result) {\n ToastService.Small({\n title: 'The menu has been updated',\n color: 'green',\n icon: 'check'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to update menu: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'server-minus'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#screenLoader');\n });\n }\n\n $scope.addLocalization = function() {\n $scope.editedMenu.localization.push({\n lang: $scope.locLangs[0],\n title: '',\n })\n }\n\n $scope.addEditMenu = function (menu, index) {\n $scope.editedMenu = {\n option: $scope.menuOptions[0],\n icon: {},\n title: {},\n customTitle: '',\n localization: [],\n new: true,\n }\n if (menu) {\n $scope.editedMenu.new = false;\n }\n $scope.setMenu(menu)\n\n var inner = $templateCache.get('ui-add-edit-menu.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.menuValidateErrors = {\n customTitle: false,\n };\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: $scope.editedMenu.new ? 'Add' : 'Save',\n color: 'green',\n check: function () {\n var valid = true;\n $scope.editedMenu.customTitle = $scope.editedMenu.customTitle.trim()\n if ($scope.editedMenu.title.id === 'custom' && !$scope.editedMenu.customTitle) {\n $scope.menuValidateErrors.customTitle = true;\n valid = false;\n }\n return valid;\n },\n fn: function () {\n var processed = convertEditedMenuToJsonAPI()\n if (menu) {\n $scope.menu[index] = processed\n } else {\n $scope.menu.push(processed)\n }\n $rootScope.$digest();\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $rootScope.hideLinearProgress('#modalLoader');\n }\n }\n ],\n size: {\n s: 12,\n l: 4\n }\n });\n }\n\n $scope.assetOrderChanged = function (asset, index) {\n var newOrder = Number(asset.order)\n if (newOrder <= 0 || newOrder > $scope.rail.assets.length) {\n $scope.rail.assets[index].order = index + 1;\n return;\n }\n\n if (index === newOrder - 1) {\n return\n }\n\n $scope.rail.assets.splice(index, 1)\n\n $scope.rail.assets.splice(newOrder-1, 0, asset);\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n $scope.rail.assets[i].order = i + 1;\n }\n }\n\n $scope.assetMoved = function(index) {\n $scope.rail.assets.splice(index, 1);\n for (var i = 0; i < $scope.rail.assets.length; i += 1) {\n $scope.rail.assets[i].order = i + 1;\n }\n }\n\n $scope.railMoved = function(index) {\n $scope.screen.rails.splice(index, 1);\n for (var i = 0; i < $scope.screen.rails.length; i += 1) {\n $scope.screen.rails[i].order = i + 1;\n }\n }\n\n $scope.railOrderChanged = function (rail, index) {\n var newOrder = Number(rail.order)\n if (newOrder <= 0 || newOrder > $scope.screen.rails.length) {\n $scope.screen.rails[index].order = index + 1;\n return;\n }\n\n if (index === newOrder - 1) {\n return\n }\n\n $scope.screen.rails.splice(index, 1)\n\n $scope.screen.rails.splice(newOrder-1, 0, rail);\n for (var i = 0; i < $scope.screen.rails.length; i += 1) {\n $scope.screen.rails[i].order = i + 1;\n }\n }\n\n }\n ]);\n","lmApp\n .service('IMDbService', ['$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'AssetService', 'MetadataService', 'ModalWindowService', 'ToastService',\n function ($rootScope, $templateCache, $compile, $q, $timeout, AssetService, MetadataService, ModalWindowService, ToastService) {\n var service = {};\n /**\n * Fetch data from IMDB\n * @param title\n * @param $scope\n * @param type\n */\n service.FetchFromIMDB = function (title, $scope, type, season, episode) {\n if (!title) return;\n\n $scope.$parent.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n\n var titleToShow = title;\n if (season) {\n titleToShow = title + ' s' + season + 'e' + episode\n }\n\n ToastService.Big({\n title: 'Searching for \"' + titleToShow + '\"',\n text: 'We are searching related data on IMDb. Please, be patient',\n color: 'amber',\n icon: 'magnify'\n }, 600 * 1000);\n\n AssetService.GetIMDBCollection(encodeURIComponent(title), type, season, episode)\n .then(function (collection) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.HideBig();\n\n var imdbInnerScope = $scope.$new(true);\n /**\n * @param {{title_popular:Array,\n * title_exact:Array,\n * title_substring:Array}} collection\n */\n\n if (!collection) {\n throw null;\n }\n\n imdbInnerScope.imdbCollection = collection;\n\n imdbInnerScope.selected = {\n asset: {},\n index: -1\n };\n\n imdbInnerScope.isSelected = function (index) {\n return index === imdbInnerScope.selected.index;\n };\n\n imdbInnerScope.selectItem = function (index) {\n return imdbInnerScope.selected.index = index;\n };\n\n var inner = $templateCache.get('imdb-import.html');\n\n inner = $compile(inner)(imdbInnerScope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Import Selected',\n color: 'green',\n fn: function () {\n if (imdbInnerScope.selected.index !== -1) {\n $scope.$parent.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n\n AssetService.GetIMDBItem(imdbInnerScope.imdbCollection[imdbInnerScope.selected.index].imdbID)\n .then(function (response) {\n var movie = _.pickBy(response, function (field) {\n return field !== 'N/A'\n });\n service.AutoFill($scope.assetData, movie, $scope);\n });\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n size: {\n s: 10,\n l: 6\n }\n });\n }, function () {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Searching for \"' + title + '\"',\n text: 'We can\\'t reach IMDb. Sorry, for disappointment You.',\n color: 'deep-orange',\n icon: 'emoticon-sad'\n }, 60 * 1000);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n\n /**\n * Autofill data to asset\n */\n service.AutoFill = function (asset, data, $scope) {\n $scope.$parent.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Import',\n text: 'We a doing import from IMDb. Please, be patient.',\n color: 'amber',\n icon: 'clock-fast'\n }, 60 * 1000);\n if (data.imdbID) {\n var deferred = $q.defer();\n asset.title = _.unescape(data.Title);\n asset.year = data.Year;\n\n var duration;\n if (data.Runtime) {\n duration = parseInt(data.Runtime.split(' ')[0], 10);\n }\n if (duration) {\n asset._PrivateData.durationNew = duration * 60;\n }\n\n var description = data.Plot;\n if (description) {\n asset.description = description;\n }\n\n if (data.imdbRating) {\n var imdb = _.find(asset._PrivateData.ratingsNew, {type: 'imdb'});\n\n if (imdb) {\n imdb.value = data.imdbRating;\n imdb.votes_count = data.imdbVotes.replace(',', '') || 0\n } else {\n asset._PrivateData.ratingsNew.push({\n type: 'imdb',\n value: data.imdbRating,\n votes_count: data.imdbVotes.replace(',', '') || 0,\n label: 'IMDb'\n });\n }\n }\n\n if (data.Metascore) {\n\n var metascore = _.find(asset._PrivateData.ratingsNew, {type: 'metascore'});\n\n if (metascore) {\n metascore.value = data.Metascore;\n metascore.votes_count = 0;\n } else {\n asset._PrivateData.ratingsNew.push({\n type: 'metascore',\n value: data.Metascore,\n votes_count: 0,\n label: 'Metascore'\n });\n }\n }\n\n if (data.Rated) {\n\n var mpaa = _.find(asset._PrivateData.ratingsNew, {type: 'mpaa'});\n\n if (mpaa) {\n mpaa.value = _.find(MetadataService.Rating.mpaaValues, {id: data.Rated});\n } else {\n asset._PrivateData.ratingsNew.push({\n type: 'mpaa',\n value: _.find(MetadataService.Rating.mpaaValues, {id: data.Rated}),\n label: 'MPAA'\n });\n }\n }\n\n var allQ = {};\n\n if (asset.type === 'tv_episode') {\n asset._PrivateData.posterNew = data.Poster;\n } else {\n asset._PrivateData.posterNew = 'http://admin-ams.sotalcloud.com/imdb/find/poster/' + data.imdbID;\n }\n\n //asset._PrivateData.posterNew = 'http://lm.local:5555/imdb/find/poster/' + data.imdbID;\n asset._PrivateData.posterUrl = asset._PrivateData.posterNew;\n\n allQ.genres = (function () {\n var parseGenres = _.get(data, 'Genre', '')\n .split(',')\n .map(function (item) {\n return {\n title: item.trim()\n };\n });\n\n var newGenres = _.filter($scope.genreSearch, function (genre) {\n return _.find(parseGenres, {title: genre.title});\n });\n\n if (newGenres.length) asset._PrivateData.genresNew = newGenres;\n })();\n\n allQ.persons = (function () {\n var deferred = $q.defer();\n\n if (data.Director) var parseDirectors = data.Director.split(',').map(function (item) {\n return {role: 'director', name: item.replace('(screenplay)', '').replace('(story)', '').trim()};\n });\n if (data.Writer) var parseWriters = data.Writer.split(',').map(function (item) {\n return {role: 'scenario', name: item.replace('(screenplay)', '').replace('(story)', '').trim()};\n });\n if (data.Actors) var parseActors = data.Actors.split(',').map(function (item) {\n return {role: 'actor', name: item.replace('(screenplay)', '').replace('(story)', '').trim()};\n });\n\n var persons = _.union(parseDirectors, parseWriters, parseActors);\n\n var personSearchResult = [];\n\n var requestQ = persons.map(function (person) {\n return AssetService.SearchPerson(person.name, person.role)\n .then(function (response) {\n if (response.length) personSearchResult.push(response[0])\n });\n });\n\n if (data.Type === 'movie' && $scope.categorySearch) {\n asset._PrivateData.categoriesNew = [];\n asset._PrivateData.categoriesNew = $scope.categorySearch.filter(function (category) {\n return category.title === 'Movies';\n });\n }\n\n if (data.Type === 'series' && $scope.categorySearch) {\n asset._PrivateData.categoriesNew = [];\n asset._PrivateData.categoriesNew = $scope.categorySearch.filter(function (category) {\n return category.title === 'TV Series';\n });\n }\n\n if (data.Country && $scope.countrySearch) {\n data.Country = data.Country.split(',')[0].trim();\n if (data.Country === 'USA') data.Country = 'United States';\n if (data.Country === 'UK') data.Country = 'United Kingdom of Great Britain and Northern Ireland';\n\n var country = $scope.countrySearch.filter(function (country) {\n return country.title === data.Country.split(',')[0];\n });\n\n if (country.length) {\n asset._PrivateData.countriesNew = country[0];\n }\n }\n\n $q.all(requestQ)\n .then(function () {\n if (personSearchResult.length) {\n asset._PrivateData.personsNew = personSearchResult;\n asset._PrivateData.roles = MetadataService.Persons.Prepare(personSearchResult);\n }\n deferred.resolve();\n })\n .catch(function (errors) {\n deferred.reject(errors);\n });\n\n return deferred.promise;\n })();\n\n $q.all(allQ)\n .then(function (response) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Import',\n text: 'Import from IMDb successfully finished. Check all fields before saving',\n color: 'green',\n icon: 'emoticon-happy'\n }, 10 * 60 * 1000);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Import',\n text: 'Import from IMDb was\\'t finished correctly. Check all fields before saving',\n color: 'deep-orange',\n icon: 'emoticon-sad'\n }, 10 * 60 * 1000);\n });\n\n return deferred.promise;\n } else {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Import',\n text: 'Import from IMDb was\\'t finished correctly. Check all fields before saving',\n color: 'deep-orange',\n icon: 'emoticon-sad'\n }, 10 * 60 * 1000);\n }\n };\n return service;\n }]);\n","lmApp.service('CategoryService', ['$rootScope', 'AssetService',\n function ($rootScope, AssetService) {\n var service = {};\n var data = [];\n var NAMESPACE = 'categories:update';\n\n service.fetchCategories = function () {\n AssetService.GetCategoryCollection()\n .then(function (collection) {\n data = collection\n .map(function (category) {\n return Object.assign({}, category, {type: 'category'});\n })\n .filter(function (category) {\n return category.id;\n });\n\n $rootScope.$broadcast(NAMESPACE, data);\n });\n };\n\n service.getCategories = function () {\n return angular.copy(data);\n };\n\n service.subscribeOnUpdate = function (scope, callback) {\n scope.$on(NAMESPACE, callback);\n };\n\n service.fetchCategories();\n\n return service;\n }\n]);\n","/**\n * @ngdoc service\n * @name lmApp.service:AssetService\n * @description\n * A service for manipulate assets on LH\n */\n\nlmApp\n .service('AssetService', ['$rootScope', '$q', '$http', 'ValidatorService',\n function ($rootScope, $q, $http, ValidatorService) {\n\n var service = {};\n\n /**\n * @ngdoc method\n * @name CreateNewVod\n * @methodOf lmApp.AssetService\n * @description\n * Create new asset from data\n *\n * @param {Number} ext_id\n * @param {*} asset\n * @returns {Deferred.promise}\n */\n service.CreateNewVod = function (ext_id, asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n\n var data = {\n ext_id: ext_id,\n year: asset.year ? asset.year : 1900,\n duration: asset.duration || 0,\n metadata: {},\n definition: asset.definition || 'SD'\n };\n\n if (asset.country_id) data.country_id = asset.country_id;\n if (asset.studio) data.studio_id = asset.studio;\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/movie/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/movie/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name CreateNewTVSeries\n * @methodOf lmApp.AssetService\n * @description\n * Create new TV SERIES\n *\n * @param ext_id\n * @param asset\n * @returns {Deferred.promise}\n */\n service.CreateNewTVSeries = function (ext_id, asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n ext_id: ext_id,\n year: asset.year ? asset.year : 1900,\n metadata: {}\n };\n\n if (asset.country_id) data.country_id = asset.country_id;\n if (asset.studio) data.studio_id = asset.studio;\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name CreateNewTVSeason\n * @methodOf lmApp.AssetService\n * @description\n * Create new TV Season\n *\n * @param ext_id\n * @param asset\n * @param tv_series\n * @returns {Deferred.promise}\n */\n service.CreateNewTVSeason = function (ext_id, asset, tv_series) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n ext_id: ext_id,\n tv_series_id: tv_series.id,\n index: tv_series.season_index,\n metadata: {}\n };\n\n data.metadata[language] = {\n 'title': asset.title\n };\n\n data.metadata['_'] = {\n 'title': asset.title\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/season/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/season/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name CreateNewTVEpisode\n * @methodOf lmApp.AssetService\n * @description\n * Create new TV Episode\n *\n * @param ext_id\n * @param asset\n * @param tv_series\n * @returns {Deferred.promise}\n */\n service.CreateNewTVEpisode = function (ext_id, asset, tv_series) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n tv_series_id: tv_series.id,\n ext_id: ext_id,\n season_id: tv_series.season_id,\n index: tv_series.episode_index || 0,\n metadata: {},\n duration: asset.duration || 0\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/episode/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/episode/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name CreateNewLive\n * @methodOf lmApp.AssetService\n * @description\n * Create new LIVE\n *\n * @param ext_id\n * @param {{er_lcn: String}} metadata\n * @returns {Deferred.promise}\n */\n service.CreateNewLive = function (ext_id, metadata) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n ext_id: ext_id,\n is_epg_available: +metadata.is_epg_available,\n metadata: {}\n };\n\n if (metadata.is_epg_available) {\n if (metadata.epg_channel_id) data.epg_channel_id = metadata.epg_channel_id;\n }\n\n if (metadata.lcn) {\n data.lcn = metadata.lcn;\n } else if (metadata.er_lcn) {\n data.lcn = metadata.er_lcn;\n } else {\n data.lcn = 0;\n }\n\n data.metadata[language] = {\n 'title': metadata.title,\n 'description': metadata.description\n };\n\n data.metadata['_'] = {\n 'title': metadata.title,\n 'description': metadata.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/live/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/live/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name CreateNewLive\n * @methodOf lmApp.AssetService\n * @description\n * Create new LIVE\n *\n * @param ext_id\n * @param {{er_lcn: String}} metadata\n * @returns {Deferred.promise}\n */\n service.CreateNewVirtualLive = function (ext_id, metadata) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n ext_id: ext_id,\n metadata: {}\n };\n\n if (metadata.lcn) {\n data.lcn = metadata.lcn;\n } else if (metadata.er_lcn) {\n data.lcn = metadata.er_lcn;\n } else {\n data.lcn = 0;\n }\n\n data.metadata[language] = {\n 'title': metadata.title,\n 'description': metadata.description\n };\n\n data.metadata['_'] = {\n 'title': metadata.title,\n 'description': metadata.description\n };\n\n data.type = 'playlist';\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/live/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/live/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name DeleteAsset\n * @methodOf lmApp.AssetService\n * @description\n * Create new asset from data\n *\n * @param {*} asset\n * @returns {Deferred.promise}\n */\n service.DeleteAsset = function (asset) {\n var deferred = $q.defer();\n\n var url = 'asset/mgmt/remove';\n var data = {\n asset_id: asset.id\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateCommonAssetMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update common asset metadata\n *\n * @param data\n * @returns {Deferred.promise}\n */\n service.UpdateCommonAssetMetadata = function (data) {\n var deferred = $q.defer();\n\n lh.common.request.post('asset/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateCommonAssetMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update Vod Metadata\n *\n * @param asset\n * @returns {Deferred.promise}\n *\n */\n service.UpdateVodMetadata = function (asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n asset_id: asset.id,\n year: asset.year ? asset.year : 1900,\n duration: asset.duration || 0,\n metadata: {},\n definition: asset.definition || 'SD'\n };\n\n if (asset.country_id) data.country_id = asset.country_id;\n if (asset.studio) data.studio_id = asset.studio;\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/movie/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/movie/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateTVSeriesMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update TV SERIES Metadata\n *\n * @param asset\n * @returns {Deferred.promise}\n *\n */\n service.UpdateTVSeriesMetadata = function (asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n tv_series_id: asset.id,\n year: asset.year ? asset.year : 1900,\n metadata: {}\n };\n\n if (asset.country_id) data.country_id = asset.country_id;\n if (asset.studio) data.studio_id = asset.studio;\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateTVSeriesMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update TV Season Metadata\n *\n * @param asset\n * @param tv_series\n * @returns {Deferred.promise}\n *\n */\n service.UpdateTVSeasonMetadata = function (asset, tv_series) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n season_id: tv_series.season_id,\n tv_series_id: tv_series.id,\n index: tv_series.season_index || 0,\n metadata: {}\n };\n\n data.metadata['_'] = {\n 'title': asset.title\n };\n\n data.metadata[language] = {\n 'title': asset.title\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/season/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/season/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateTVSeriesMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update TV Episode Metadata\n *\n * @param asset\n * @param tv_series\n * @returns {Deferred.promise}\n *\n */\n service.UpdateTVEpisodeMetadata = function (asset, tv_series) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n asset_id: asset.id,\n duration: asset.duration || 0,\n index: tv_series.episode_index || 0,\n season_id: tv_series.season_id,\n metadata: {}\n };\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/tv_series/episode/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/tv_series/episode/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateTVSeriesMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update Live Metadata\n *\n * @param asset\n * @returns {Deferred.promise}\n *\n */\n service.UpdateLiveMetadata = function (asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n asset_id: asset.id,\n is_epg_available: +asset.is_epg_available,\n metadata: {},\n definition: asset.definition || 'SD'\n };\n\n if (asset.is_epg_available) {\n if (asset.epg_channel_id) data.epg_channel_id = asset.epg_channel_id;\n } else {\n data.epg_channel_id = 0;\n }\n\n if (asset.lcn) {\n data.lcn = asset.lcn;\n } else if (asset.er_lcn) {\n data.lcn = asset.er_lcn;\n } else {\n data.lcn = 0;\n }\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('asset/mgmt/live/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/live/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc method\n * @name UpdateTVSeriesMetadata\n * @methodOf lmApp.AssetService\n * @description\n * Update Live Metadata\n *\n * @param asset\n * @returns {Deferred.promise}\n *\n */\n service.UpdateVirtualLiveMetadata = function (asset) {\n var deferred = $q.defer();\n\n var language = $rootScope.locale;\n var data = {\n asset_id: asset.id,\n metadata: {}\n };\n\n if (asset.lcn) {\n data.lcn = asset.lcn;\n } else if (asset.er_lcn) {\n data.lcn = asset.er_lcn;\n } else {\n data.lcn = 0;\n }\n\n data.metadata['_'] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata[language] = {\n 'title': asset.title,\n 'description': asset.description\n };\n\n data.metadata = JSON.stringify(data.metadata);\n\n data.type = 'playlist';\n\n lh.common.request.post('asset/mgmt/live/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/live/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc function\n * @name SetAdult\n * @description\n * Process adult flag\n *\n * @param asset_id\n * @param value\n * @returns {*}\n */\n service.SetAdult = function (asset_id, value) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n has_adult_content: +!!value\n };\n\n lh.common.request.post('asset/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * Set tags to asset\n * @param tags\n * @param asset_id\n * @returns {*}\n */\n service.tagsSet = function (tags, asset_id) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n tags: tags.join(',')\n };\n\n lh.common.request.post('/asset/mgmt/tag/set', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n /**\n * @ngdoc function\n * @name processGenres\n * @description\n * Process genres with assoc or deassoc\n *\n * @param genres\n * @param asset_id\n * @param url\n * @returns {*}\n */\n function processGenres(genres, asset_id, url) {\n var deferred = $q.defer();\n\n var idList = [];\n genres.map(function (genre) {\n idList.push(genre.id);\n });\n\n var data = {\n asset_id: asset_id,\n genre_id: idList.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n\n /**\n * @ngdoc method\n * @name AddGenres\n * @methodOf lmApp.AssetService\n * @description\n * Add genres list to asset\n *\n * @param genres\n * @param asset_id\n * @returns {*}\n */\n service.AddGenres = function (genres, asset_id) {\n return processGenres(genres, asset_id, 'asset/mgmt/genre/assoc');\n };\n\n service.RemoveGenres = function (genres, asset_id) {\n return processGenres(genres, asset_id, 'asset/mgmt/genre/deassoc');\n };\n\n function processPlatforms(platforms, asset_id, url) {\n var deferred = $q.defer();\n var idList = [];\n platforms.map(function (platform) {\n idList.push(platform.extid);\n });\n\n var data = {\n asset_id: asset_id,\n platform_extid: idList.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n\n service.AddPlatforms = function (platforms, asset_id) {\n return processPlatforms(platforms, asset_id, 'asset/mgmt/platform/assoc');\n };\n\n service.RemovePlatforms = function (platforms, asset_id) {\n return processPlatforms(platforms, asset_id, 'asset/mgmt/platform/deassoc');\n };\n\n function processCategories(categories, asset_id, url) {\n var deferred = $q.defer();\n var idList = [];\n categories.map(function (category) {\n idList.push(category.id);\n });\n\n var data = {\n asset_id: asset_id,\n category_id: idList.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n\n service.AddCategory = function (categories, asset_id) {\n return processCategories(categories, asset_id, 'asset/mgmt/category/assoc');\n };\n\n service.RemoveCategory = function (categories, asset_id) {\n return processCategories(categories, asset_id, 'asset/mgmt/category/deassoc');\n };\n\n service.CreatePerson = function (person) {\n var deferred = $q.defer();\n\n var data = {\n role: person.role,\n metadata: {}\n };\n\n var metadata = {\n first_name: person.first_name,\n middle_name: person.middle_name,\n second_name: person.second_name\n };\n\n if ($rootScope.locale) data.metadata[$rootScope.locale] = metadata;\n\n data.metadata['_'] = metadata;\n\n data.metadata = JSON.stringify(data.metadata);\n\n lh.common.request.post('metadata/mgmt/person/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/person/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n function processPersons(persons, asset_id, url) {\n var deferred = $q.defer();\n var idList = [];\n persons.map(function (person) {\n idList.push(person.id);\n });\n\n var data = {\n asset_id: asset_id,\n person_id: idList.join(',')\n };\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n\n service.AddPerson = function (persons, asset_id) {\n return processPersons(persons, asset_id, 'asset/mgmt/person/assoc');\n };\n\n service.RemovePerson = function (persons, asset_id) {\n return processPersons(persons, asset_id, 'asset/mgmt/person/deassoc');\n };\n\n service.UpdateRentalRotation = function (asset, asset_id) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n rotation_start: asset.rotation_start.unix(),\n rotation_finish: asset.rotation_finish.unix()\n };\n\n if (asset.license_start) data.license_start = asset.license_start.unix();\n if (asset.license_finish) data.license_finish = asset.license_finish.unix();\n\n lh.common.request.post('asset/mgmt/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetPoster = function (asset) {\n var deferred = $q.defer();\n\n lh.models.vodAsset.methods.getPosterUrl(asset)\n .then(function (url) {\n deferred.resolve(url);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UploadImageToCloud = function (image, progress) {\n var deferred = $q.defer();\n if (progress) {\n var progressBar = progress.find('.determinate');\n progress.css({display: 'block'});\n }\n\n var params = {\n Key: Date.now() + '_' + image.name,\n ContentType: image.type,\n ContentLength: image.size,\n Body: image,\n ACL: 'public-read'\n };\n\n $rootScope.aws\n .upload(params, function (err, data) {\n if (err) {\n err.url = 'AWS3 CloudServer';\n err.data = image;\n deferred.reject(err);\n return;\n }\n\n if (progress) progress.css({display: 'none'});\n deferred.resolve(data);\n })\n .on('httpUploadProgress', function (progress) {\n if (progress && progressBar) progressBar.css({width: Math.round(progress.loaded / progress.total * 100)});\n }\n );\n\n return deferred.promise;\n };\n\n service.UpdateVodPoster = function (asset_id, poster_url, resource_id) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n resource_id: resource_id,\n url: poster_url\n };\n\n lh.common.request.post('asset/mgmt/picture/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/picture/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddVodPoster = function (poster_url, asset_id) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n url: poster_url,\n category: 'poster_blueprint'\n };\n\n lh.common.request.post('asset/mgmt/picture/create', data)\n .then(function (url) {\n deferred.resolve(url);\n }, function (reason) {\n reason.url = 'asset/mgmt/picture/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetStream = function (asset, type, category) {\n var deferred = $q.defer();\n\n lh.models.viewAsset.methods.getMediaUrl(asset, category, {stream_type: type})\n .then(function (url) {\n deferred.resolve(url);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.ProcessVodStreams = function (streams, asset_id, category) {\n\n var deferred = $q.defer();\n\n var streamsQ = {};\n _.forIn(streams, function (stream, type) {\n if (type === 'youtube') {\n var channelId = '';\n var channelType = '';\n if (stream.youtube) {\n channelId = stream.youtube.id;\n channelType = stream.youtube.type;\n } else {\n\n var channelParse = stream.source.split('/');\n for (var i = 0; i < channelParse.length; i++) {\n if (channelParse[i] === 'user') {\n channelId = channelParse[i + 1];\n channelType = 'user';\n break;\n }\n\n if (channelParse[i] === 'channel') {\n channelId = channelParse[i + 1];\n channelType = 'channel';\n break;\n }\n\n if (channelParse[i].indexOf('watch?v=') !== -1) {\n channelId = stream.source.match(ValidatorService.youtubeVideoRegExp)[1];\n channelType = 'video';\n break;\n }\n }\n }\n\n if (channelId) {\n stream.source = 'youtube+' + channelType + '://' + channelId;\n } else {\n stream.source = '';\n }\n }\n\n if (!stream.streamOld && !stream.doneWithError && stream.source && !stream.toDelete) {\n\n streamsQ[type] = service.AddVodStream(stream, asset_id, type, category, stream.deploymentStrategy);\n } else if (stream.toDelete) {\n\n streamsQ[type] = service.RemoveVodStream(stream, asset_id);\n }\n });\n\n $q.all(streamsQ)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (errors) {\n deferred.reject(errors);\n });\n\n return deferred.promise;\n };\n\n service.AddVodStream = function (stream, asset_id, type, category) {\n var deferred = $q.defer();\n\n if (!stream.type) {\n return;\n }\n\n var data = {\n asset_id: asset_id,\n url: stream.source,\n source_type: stream.type.indexOf('raw') !== -1 ? 'raw' : 'stream'\n };\n\n if (type === 'shoutcast') {\n data.stream_type = 'shoutcast';\n }\n\n if (stream.type !== 'youtube_stream') {\n data.deployment_strategy = stream.deploymentStrategy || 'origin';\n if (data.deployment_strategy === 'origin' && stream.overrideDeliveryMethod) data.override_delivery_method = 'cdn';\n }\n\n if (stream.file) data.override_original_source = stream.file.name;\n if (category) data.category = category;\n\n lh.common.request.post('asset/mgmt/stream/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/stream/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.RemoveVodStream = function (stream, asset_id, type) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n resource_id: stream.streamResourceId\n };\n\n lh.common.request.post('asset/mgmt/stream/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/stream/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.UpdateVodStream = function (stream, asset_id) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset_id,\n url: stream.streamNew,\n resource_id: stream.streamResourceId\n };\n\n lh.common.request.post('asset/mgmt/stream/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/stream/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAssetById = function (id) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/id/eq/' + id;\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAssetByExtId = function (extId) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/extid/in/' + extId;\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n\n service.GetAssetInId = function (ids) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/id/in/' + ids.join(',');\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAssetsByGroup = function (ids) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.asset/query/dimension/group_id/in/' + ids.join(',');\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetReportData = function () {\n var deferred = $q.defer();\n\n var countsQ = {};\n\n var data = {\n select: 'id,title,description'\n };\n\n\n countsQ.vod = (function () {\n var deferred = $q.defer();\n\n lh.common.request.get('collection/vod.asset/query/dimension/view/eq/vod', data)\n .then(function (response) {\n deferred.resolve(response.collection.length);\n }, function (reason) {\n reason.url = 'collection/vod.asset/query/dimension/view/eq/vod';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n })();\n\n countsQ.live = (function () {\n var deferred = $q.defer();\n\n lh.common.request.get('collection/vod.asset/query/dimension/view/eq/live', data)\n .then(function (response) {\n deferred.resolve(response.collection.length);\n }, function (reason) {\n reason.url = 'collection/vod.asset/query/dimension/view/eq/live';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n })();\n\n $q.all(countsQ)\n .then(function (response) {\n deferred.resolve(response);\n })\n .catch(function (errors) {\n deferred.reject(errors);\n });\n\n return deferred.promise;\n };\n\n service.GetAllAvailableVod = function (offset, limit, sort) {\n var deferred = $q.defer();\n\n var data = {\n offset: offset,\n limit: limit\n };\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/view/eq/vod' +\n '/enum/' + data.offset + ',' + data.limit;\n\n var reqParams = {};\n if (sort) {\n reqParams.sort = sort;\n }\n\n lh.common.request.get(url, reqParams).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAllAvailableMovies = function (offset, limit) {\n var deferred = $q.defer();\n\n var data = {\n offset: offset,\n limit: limit\n };\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/type/eq/movie/dimension/is_episode/eq/0' +\n '/enum/' + data.offset + ',' + data.limit;\n\n lh.common.request(url).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAllAvailableSeries = function (offset, limit) {\n var deferred = $q.defer();\n\n var data = {\n offset: offset,\n limit: limit\n };\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/type/eq/package/dimension/package_type/eq/tv_series' +\n '/enum/' + data.offset + ',' + data.limit;\n\n lh.common.request(url).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAllAvailableChannels = function (offset, limit) {\n var deferred = $q.defer();\n\n var data = {\n offset: offset,\n limit: limit\n };\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/view/eq/live' +\n '/enum/' + data.offset + ',' + data.limit;\n\n lh.common.request(url).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetAllAvailableCatchupChannels = function (offset, limit) {\n var deferred = $q.defer();\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/view/eq/live/dimension/is_catchup_available/eq/1';\n\n lh.common.request(url).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.SearchByKeyword = function (text, opt_params, limit, offset) {\n var deferred = $q.defer();\n\n var data = {\n offset: limit || 0,\n limit: offset || 20\n };\n\n var url = 'collection/vod.asset/query';\n\n if (text) url += '/dimension/title/match/' + text;\n\n if (opt_params) {\n if (opt_params.genres && opt_params.genres.length) url += '/dimension/genre_id/in/' + opt_params.genres.join(',');\n if (opt_params.categories && opt_params.categories.length) url += '/dimension/category_id/in/' + opt_params.categories.join(',');\n if (opt_params.view) {\n url += '/dimension/view/eq/' + opt_params.view;\n } else {\n url += '/dimension/is_episode/eq/0';\n }\n if (opt_params.filter && opt_params.filter.live) {\n url += '/dimension/type/neq/channel';\n }\n if (opt_params.filter && opt_params.filter.packages) {\n url += '/dimension/type/neq/package';\n }\n if (opt_params.onlyPackages === true) {\n url += '/dimension/package_type/eq/generic';\n }\n if (opt_params.groups && opt_params.groups.length) {\n url += '/dimension/group_id/in/' + opt_params.groups.join(',');\n }\n }\n\n url += '/enum/' + data.offset + ',' + data.limit;\n\n var reqParams = {};\n if (opt_params.sort) {\n reqParams.sort = opt_params.sort;\n }\n\n lh.common.request.get(url, reqParams)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = opt_params;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.Search = function (text, opt_params, limit, offset) {\n var deferred = $q.defer();\n\n var url = 'asset/search/query';\n var reqParams = {\n offset: limit || 0,\n limit: offset || 20\n };\n if (opt_params.sort) {\n reqParams.sort = opt_params.sort;\n }\n\n if (text) {\n reqParams.text = text;\n }\n if (opt_params.genres && opt_params.genres.length) {\n reqParams.genre_id = opt_params.genres.join(',');\n }\n if (opt_params.categories && opt_params.categories.length) {\n reqParams.category_id = opt_params.categories.join(',');\n }\n if (opt_params.view && opt_params.view === 'live') {\n reqParams.type = 'channel';\n }\n\n lh.common.request.get(url, reqParams)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = opt_params;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetGenresCollection = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/vod.genre/query' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection.filter(function (genre) {\n return genre.namespace !== 'epg';\n }));\n }, function (reason) {\n reason.url = 'collection/vod.genre/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetProvidersCollection = function () {\n var deferred = $q.defer();\n lh.common.request('collection/vod.provider/query' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection.filter(function (genre) {\n return genre.namespace !== 'epg';\n }));\n }, function (reason) {\n reason.url = 'collection/vod.provider/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n return deferred.promise;\n };\n\n service.GetCountriesCollection = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/vod.country/query/dimension/namespace/neq/epg' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'collection/vod.country/query/dimension/namespace/neq/epg';\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetCategoryCollection = function (opt_options) {\n var deferred = $q.defer();\n var url;\n\n if (!opt_options) {\n\n url = 'collection/vod.category/query' + '?t=' + Date.now();\n\n } else {\n if (opt_options.ids) {\n url = 'collection/vod.category/query/dimension/id/in/' + opt_options.ids.join(',');\n }\n if (opt_options.extids) {\n url = 'collection/vod.category/query/dimension/extid/in/' + opt_options.extids.join(',') + '?t=' + Date.now();\n }\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetEpgIDCollection = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/epg.channel/query' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'collection/epg.channel/query' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetStudiosCollection = function () {\n var deferred = $q.defer();\n\n lh.common.request('collection/vod.studio/query/dimension/namespace/neq/epg' + '?t=' + Date.now())\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = 'collection/vod.studio/query/dimension/namespace/neq/epg' + '?t=' + Date.now();\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n\n service.GetPlatforms = function (extid) {\n var deferred = $q.defer();\n\n var url = 'collection/platform/query';\n\n if (extid) {\n url += '/dimension/extid/eq/' + extid;\n }\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CatchupDisable = function (asset) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset.id\n };\n\n lh.common.request.post('asset/mgmt/catchup/disable', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/catchup/disable';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.CatchupEnable = function (asset, catchup_source, catchup_depth) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset.id,\n stream_url: catchup_source,\n depth: catchup_depth\n };\n\n lh.common.request.post('asset/mgmt/catchup/enable', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/catchup/enable';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.NpvrDisable = function (asset) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset.id\n };\n\n lh.common.request.post('asset/mgmt/npvr/disable', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/npvr/disable';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.NpvrEnable = function (asset, npvr_source) {\n var deferred = $q.defer();\n\n var data = {\n asset_id: asset.id,\n stream_url: npvr_source\n };\n\n lh.common.request.post('asset/mgmt/npvr/enable', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/npvr/enable';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.SearchPerson = function (text, role) {\n var deferred = $q.defer();\n\n var url = 'collection/vod.person/query/dimension/name/match/' + text;\n\n if (role) url += '/dimension/role/eq/' + role;\n\n url += '?t=' + Date.now();\n\n lh.common.request(url)\n .then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = 'GET';\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetIMDBCollection = function (title, type, season, episode) {\n var deferred = $q.defer();\n\n var url = '';\n if (type === 'episode' && season && episode) {\n url = '/imdb/find/tvseries?title=' + title + '&season=' + season + '&episode=' + episode;\n } else {\n url = '/imdb/find/movie?title=' + title;\n\n if (type) url += '&type=' + type;\n }\n\n $http.get(url)\n .then(function (res) {\n var response = res.data;\n\n if (type === 'episode') {\n if (response.Response === 'False') {\n deferred.resolve([]);\n } else {\n deferred.resolve([response]);\n }\n } else {\n if (response.Response === 'False') {\n deferred.resolve([]);\n } else {\n deferred.resolve(response.Search);\n }\n }\n }, function (res) {\n var reason = res.data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n\n service.GetIMDBItem = function (imdbId) {\n var deferred = $q.defer();\n\n var url = '/imdb/find/id/' + imdbId;\n\n $http.get(url)\n .then(function (res) {\n var response = res.data;\n deferred.resolve(response);\n }, function (res) {\n var reason = res.data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.GetIMDBPoster = function (imdbId) {\n var deferred = $q.defer();\n\n var url = '/imdb/find/poster/' + imdbId;\n\n $http.get(url)\n .then(function (res) {\n var response = res.data;\n deferred.resolve(response);\n }, function (res) {\n var reason = res.data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.AddRating = function (ratings, asset_id) {\n var deferred = $q.defer();\n\n var errors = [];\n\n var requestQ = ratings.map(function (rating) {\n var data = {\n asset_id: asset_id,\n type: rating.type,\n value: rating.value\n };\n\n if (rating.votes_count) data.votes_count = rating.votes_count;\n\n lh.common.request.post('asset/mgmt/rating/assoc', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/rating/assoc';\n reason.data = data;\n deferred.reject(reason);\n });\n });\n\n $q.all(requestQ)\n .then(function () {\n deferred.resolve();\n })\n .catch(function (errors) {\n deferred.reject(errors);\n });\n\n return deferred.promise;\n };\n\n service.RemoveRating = function (ratings, asset_id) {\n var deferred = $q.defer();\n\n var errors = [];\n\n var requestQ = ratings.map(function (rating) {\n var data = {\n asset_id: asset_id,\n type: rating.type\n };\n\n lh.common.request.post('asset/mgmt/rating/deassoc', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/rating/deassoc';\n reason.data = data;\n deferred.reject(reason);\n });\n });\n\n $q.all(requestQ)\n .then(function () {\n deferred.resolve();\n })\n .catch(function (errors) {\n deferred.reject(errors);\n });\n\n return deferred.promise;\n };\n\n service.UpdateRating = function (rating) {\n var deferred = $q.defer();\n\n var data = {\n type: rating.type,\n value: rating.avg_value,\n votes_count: rating.votes_count,\n rating_id: rating.id\n };\n\n lh.common.request.post('metadata/mgmt/rating/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/rating/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.getChannelByLcn = function (lcn) {\n if (!lcn) return $q.when([]);\n\n var deferred = $q.defer();\n\n //TODO: Use LH SDK API\n var url = 'collection/vod.asset/query/dimension/view/eq/live' +\n '/dimension/er_lcn/eq/' + lcn;\n\n lh.common.request(url).then(function (response) {\n deferred.resolve(response.collection);\n }, function (reason) {\n reason.url = url;\n reason.data = \"GET\";\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n return service;\n }\n ])\n;\n","/**\n * @ngdoc service\n * @name CountriesService\n *\n */\nlmApp\n .service('CountriesService', [function () {\n var service = {};\n\n /**\n * List of country codes\n * @type {*}\n */\n service.Countries = [\n {code: 'AD', title: 'Andorra'},\n {code: 'AE', title: 'United Arab Emirates'},\n {code: 'AF', title: 'Afghanistan'},\n {code: 'AG', title: 'Antigua and Barbuda'},\n {code: 'AI', title: 'Anguilla'},\n {code: 'AL', title: 'Albania'},\n {code: 'AM', title: 'Armenia'},\n {code: 'AO', title: 'Angola'},\n {code: 'AQ', title: 'Antarctica'},\n {code: 'AR', title: 'Argentina'},\n {code: 'AS', title: 'American Samoa'},\n {code: 'AT', title: 'Austria'},\n {code: 'AU', title: 'Australia'},\n {code: 'AW', title: 'Aruba'},\n {code: 'AX', title: 'Aland Islands'},\n {code: 'AZ', title: 'Azerbaijan'},\n {code: 'BA', title: 'Bosnia and Herzegovina'},\n {code: 'BB', title: 'Barbados'},\n {code: 'BD', title: 'Bangladesh'},\n {code: 'BE', title: 'Belgium'},\n {code: 'BF', title: 'Burkina Faso'},\n {code: 'BG', title: 'Bulgaria'},\n {code: 'BH', title: 'Bahrain'},\n {code: 'BI', title: 'Burundi'},\n {code: 'BJ', title: 'Benin'},\n {code: 'BL', title: 'Saint Barthelemy'},\n {code: 'BM', title: 'Bermuda'},\n {code: 'BN', title: 'Brunei Darussalam'},\n {code: 'BO', title: 'Bolivia (Plurinational State of)'},\n {code: 'BQ', title: 'Bonaire\\, Sint Eustatius and Saba'},\n {code: 'BR', title: 'Brazil'},\n {code: 'BS', title: 'Bahamas'},\n {code: 'BT', title: 'Bhutan'},\n {code: 'BV', title: 'Bouvet Island'},\n {code: 'BW', title: 'Botswana'},\n {code: 'BY', title: 'Belarus'},\n {code: 'BZ', title: 'Belize'},\n {code: 'CA', title: 'Canada'},\n {code: 'CC', title: 'Cocos (Keeling) Islands'},\n {code: 'CD', title: 'Congo\\, Democratic Republic of the'},\n {code: 'CF', title: 'Central African Republic'},\n {code: 'CG', title: 'Congo'},\n {code: 'CH', title: 'Switzerland'},\n {code: 'CI', title: 'Cote d\\'Ivoire'},\n {code: 'CK', title: 'Cook Islands'},\n {code: 'CL', title: 'Chile'},\n {code: 'CM', title: 'Cameroon'},\n {code: 'CN', title: 'China'},\n {code: 'CO', title: 'Colombia'},\n {code: 'CR', title: 'Costa Rica'},\n {code: 'CU', title: 'Cuba'},\n {code: 'CV', title: 'Cabo Verde'},\n {code: 'CW', title: 'Curacao'},\n {code: 'CX', title: 'Christmas Island'},\n {code: 'CY', title: 'Cyprus'},\n {code: 'CZ', title: 'Czechia'},\n {code: 'DE', title: 'Germany'},\n {code: 'DJ', title: 'Djibouti'},\n {code: 'DK', title: 'Denmark'},\n {code: 'DM', title: 'Dominica'},\n {code: 'DO', title: 'Dominican Republic'},\n {code: 'DZ', title: 'Algeria'},\n {code: 'EC', title: 'Ecuador'},\n {code: 'EE', title: 'Estonia'},\n {code: 'EG', title: 'Egypt'},\n {code: 'EH', title: 'Western Sahara'},\n {code: 'ER', title: 'Eritrea'},\n {code: 'ES', title: 'Spain'},\n {code: 'ET', title: 'Ethiopia'},\n {code: 'FI', title: 'Finland'},\n {code: 'FJ', title: 'Fiji'},\n {code: 'FK', title: 'Falkland Islands (Malvinas)'},\n {code: 'FM', title: 'Micronesia (Federated States of)'},\n {code: 'FO', title: 'Faroe Islands'},\n {code: 'FR', title: 'France'},\n {code: 'GA', title: 'Gabon'},\n {code: 'GB', title: 'United Kingdom of Great Britain and Northern Ireland'},\n {code: 'GD', title: 'Grenada'},\n {code: 'GE', title: 'Georgia'},\n {code: 'GF', title: 'French Guiana'},\n {code: 'GG', title: 'Guernsey'},\n {code: 'GH', title: 'Ghana'},\n {code: 'GI', title: 'Gibraltar'},\n {code: 'GL', title: 'Greenland'},\n {code: 'GM', title: 'Gambia'},\n {code: 'GN', title: 'Guinea'},\n {code: 'GP', title: 'Guadeloupe'},\n {code: 'GQ', title: 'Equatorial Guinea'},\n {code: 'GR', title: 'Greece'},\n {code: 'GS', title: 'South Georgia and the South Sandwich Islands'},\n {code: 'GT', title: 'Guatemala'},\n {code: 'GU', title: 'Guam'},\n {code: 'GW', title: 'Guinea-Bissau'},\n {code: 'GY', title: 'Guyana'},\n {code: 'HK', title: 'Hong Kong'},\n {code: 'HM', title: 'Heard Island and McDonald Islands'},\n {code: 'HN', title: 'Honduras'},\n {code: 'HR', title: 'Croatia'},\n {code: 'HT', title: 'Haiti'},\n {code: 'HU', title: 'Hungary'},\n {code: 'ID', title: 'Indonesia'},\n {code: 'IE', title: 'Ireland'},\n {code: 'IL', title: 'Israel'},\n {code: 'IM', title: 'Isle of Man'},\n {code: 'IN', title: 'India'},\n {code: 'IO', title: 'British Indian Ocean Territory'},\n {code: 'IQ', title: 'Iraq'},\n {code: 'IR', title: 'Iran (Islamic Republic of)'},\n {code: 'IS', title: 'Iceland'},\n {code: 'IT', title: 'Italy'},\n {code: 'JE', title: 'Jersey'},\n {code: 'JM', title: 'Jamaica'},\n {code: 'JO', title: 'Jordan'},\n {code: 'JP', title: 'Japan'},\n {code: 'KE', title: 'Kenya'},\n {code: 'KG', title: 'Kyrgyzstan'},\n {code: 'KH', title: 'Cambodia'},\n {code: 'KI', title: 'Kiribati'},\n {code: 'KM', title: 'Comoros'},\n {code: 'KN', title: 'Saint Kitts and Nevis'},\n {code: 'KP', title: 'Korea (Democratic People\\'s Republic of)'},\n {code: 'KR', title: 'Korea\\, Republic of'},\n {code: 'KW', title: 'Kuwait'},\n {code: 'KY', title: 'Cayman Islands'},\n {code: 'KZ', title: 'Kazakhstan'},\n {code: 'LA', title: 'Lao People\\'s Democratic Republic'},\n {code: 'LB', title: 'Lebanon'},\n {code: 'LC', title: 'Saint Lucia'},\n {code: 'LI', title: 'Liechtenstein'},\n {code: 'LK', title: 'Sri Lanka'},\n {code: 'LR', title: 'Liberia'},\n {code: 'LS', title: 'Lesotho'},\n {code: 'LT', title: 'Lithuania'},\n {code: 'LU', title: 'Luxembourg'},\n {code: 'LV', title: 'Latvia'},\n {code: 'LY', title: 'Libya'},\n {code: 'MA', title: 'Morocco'},\n {code: 'MC', title: 'Monaco'},\n {code: 'MD', title: 'Moldova\\, Republic of'},\n {code: 'ME', title: 'Montenegro'},\n {code: 'MF', title: 'Saint Martin (French part)'},\n {code: 'MG', title: 'Madagascar'},\n {code: 'MH', title: 'Marshall Islands'},\n {code: 'MK', title: 'North Macedonia'},\n {code: 'ML', title: 'Mali'},\n {code: 'MM', title: 'Myanmar'},\n {code: 'MN', title: 'Mongolia'},\n {code: 'MO', title: 'Macao'},\n {code: 'MP', title: 'Northern Mariana Islands'},\n {code: 'MQ', title: 'Martinique'},\n {code: 'MR', title: 'Mauritania'},\n {code: 'MS', title: 'Montserrat'},\n {code: 'MT', title: 'Malta'},\n {code: 'MU', title: 'Mauritius'},\n {code: 'MV', title: 'Maldives'},\n {code: 'MW', title: 'Malawi'},\n {code: 'MX', title: 'Mexico'},\n {code: 'MY', title: 'Malaysia'},\n {code: 'MZ', title: 'Mozambique'},\n {code: 'NA', title: 'Namibia'},\n {code: 'NC', title: 'New Caledonia'},\n {code: 'NE', title: 'Niger'},\n {code: 'NF', title: 'Norfolk Island'},\n {code: 'NG', title: 'Nigeria'},\n {code: 'NI', title: 'Nicaragua'},\n {code: 'NL', title: 'Netherlands'},\n {code: 'NO', title: 'Norway'},\n {code: 'NP', title: 'Nepal'},\n {code: 'NR', title: 'Nauru'},\n {code: 'NU', title: 'Niue'},\n {code: 'NZ', title: 'New Zealand'},\n {code: 'OM', title: 'Oman'},\n {code: 'PA', title: 'Panama'},\n {code: 'PE', title: 'Peru'},\n {code: 'PF', title: 'French Polynesia'},\n {code: 'PG', title: 'Papua New Guinea'},\n {code: 'PH', title: 'Philippines'},\n {code: 'PK', title: 'Pakistan'},\n {code: 'PL', title: 'Poland'},\n {code: 'PM', title: 'Saint Pierre and Miquelon'},\n {code: 'PN', title: 'Pitcairn'},\n {code: 'PR', title: 'Puerto Rico'},\n {code: 'PS', title: 'Palestine\\, State of'},\n {code: 'PT', title: 'Portugal'},\n {code: 'PW', title: 'Palau'},\n {code: 'PY', title: 'Paraguay'},\n {code: 'QA', title: 'Qatar'},\n {code: 'RE', title: 'Reunion'},\n {code: 'RO', title: 'Romania'},\n {code: 'RS', title: 'Serbia'},\n {code: 'RU', title: 'Russian Federation'},\n {code: 'RW', title: 'Rwanda'},\n {code: 'SA', title: 'Saudi Arabia'},\n {code: 'SB', title: 'Solomon Islands'},\n {code: 'SC', title: 'Seychelles'},\n {code: 'SD', title: 'Sudan'},\n {code: 'SE', title: 'Sweden'},\n {code: 'SG', title: 'Singapore'},\n {code: 'SH', title: 'Saint Helena\\, Ascension and Tristan da Cunha'},\n {code: 'SI', title: 'Slovenia'},\n {code: 'SJ', title: 'Svalbard and Jan Mayen'},\n {code: 'SK', title: 'Slovakia'},\n {code: 'SL', title: 'Sierra Leone'},\n {code: 'SM', title: 'San Marino'},\n {code: 'SN', title: 'Senegal'},\n {code: 'SO', title: 'Somalia'},\n {code: 'SR', title: 'Suriname'},\n {code: 'SS', title: 'South Sudan'},\n {code: 'ST', title: 'Sao Tome and Principe'},\n {code: 'SV', title: 'El Salvador'},\n {code: 'SX', title: 'Sint Maarten (Dutch part)'},\n {code: 'SY', title: 'Syrian Arab Republic'},\n {code: 'SZ', title: 'Eswatini'},\n {code: 'TC', title: 'Turks and Caicos Islands'},\n {code: 'TD', title: 'Chad'},\n {code: 'TF', title: 'French Southern Territories'},\n {code: 'TG', title: 'Togo'},\n {code: 'TH', title: 'Thailand'},\n {code: 'TJ', title: 'Tajikistan'},\n {code: 'TK', title: 'Tokelau'},\n {code: 'TL', title: 'Timor-Leste'},\n {code: 'TM', title: 'Turkmenistan'},\n {code: 'TN', title: 'Tunisia'},\n {code: 'TO', title: 'Tonga'},\n {code: 'TR', title: 'Turkey'},\n {code: 'TT', title: 'Trinidad and Tobago'},\n {code: 'TV', title: 'Tuvalu'},\n {code: 'TW', title: 'Taiwan\\, Province of China'},\n {code: 'TZ', title: 'Tanzania\\, United Republic of'},\n {code: 'UA', title: 'Ukraine'},\n {code: 'UG', title: 'Uganda'},\n {code: 'UM', title: 'United States Minor Outlying Islands'},\n {code: 'US', title: 'United States of America'},\n {code: 'UY', title: 'Uruguay'},\n {code: 'UZ', title: 'Uzbekistan'},\n {code: 'VA', title: 'Holy See'},\n {code: 'VC', title: 'Saint Vincent and the Grenadines'},\n {code: 'VE', title: 'Venezuela (Bolivarian Republic of)'},\n {code: 'VG', title: 'Virgin Islands (British)'},\n {code: 'VI', title: 'Virgin Islands (U.S.)'},\n {code: 'VN', title: 'Viet Nam'},\n {code: 'VU', title: 'Vanuatu'},\n {code: 'WF', title: 'Wallis and Futuna'},\n {code: 'WS', title: 'Samoa'},\n {code: 'XK', title: 'Kosovo'},\n {code: 'YE', title: 'Yemen'},\n {code: 'YT', title: 'Mayotte'},\n {code: 'ZA', title: 'South Africa'},\n {code: 'ZM', title: 'Zambia'},\n {code: 'ZW', title: 'Zimbabwe'}\n ];\n\n return service;\n }]);\n","lmApp\n .service('CronService', [\n function () {\n var service = {};\n\n var days = {\n 0: 'Sunday',\n 1: 'Monday',\n 2: 'Tuesday',\n 3: 'Wednesday',\n 4: 'Thursday',\n 5: 'Friday',\n 6: 'Saturday'\n };\n\n var months = {\n 1: 'January',\n 2: 'February',\n 3: 'March',\n 4: 'April',\n 5: 'May',\n 6: 'June',\n 7: 'July',\n 8: 'August',\n 9: 'September',\n 10: 'October',\n 11: 'November',\n 12: 'December'\n };\n\n var monthSuffix = function(input) {\n switch (input) {\n case 1:\n return '1st';\n case 2:\n return '2nd';\n case 3:\n return '3rd';\n case null:\n return null;\n default:\n return input + 'th';\n }\n };\n\n Number.prototype.pad = function(size) {\n var s = String(this);\n while (s.length < (size || 2)) {s = \"0\" + s;}\n return s;\n };\n\n service.cronTimeToText = function(cronTime) {\n var fr = getCronFreq(cronTime);\n if (fr.base === 1) {\n return \"Every minute\";\n }\n if (fr.base === 2) {\n return \"Every hour at \" + fr.minuteValue;\n }\n if (fr.base === 3) {\n return \"Every day at \" + (fr.hourValue).pad() + ':' + (fr.minuteValue).pad();\n }\n if (fr.base === 4) {\n return \"Every week on \" + days[fr.dayValue] + \" at \" + (fr.hourValue).pad() + ':' + (fr.minuteValue).pad();\n }\n if (fr.base === 5) {\n return \"Every month on the \" + monthSuffix(fr.dayOfMonthValue) + \" at \" + (fr.hourValue).pad() + ':' + (fr.minuteValue).pad();\n }\n if (fr.base === 6) {\n return \"Every year on the \" + monthSuffix(fr.dayOfMonthValue) + \" of \" + months[fr.monthValue] + \" at \" + (fr.hourValue).pad() + ':' + (fr.minuteValue).pad();\n }\n return \"N/A\";\n };\n\n var getCronFreq = function(value) {\n var cron = value.replace(/\\s+/g, ' ').split(' ');\n var frequency = {base: '1'}; // default: every minute\n\n if(cron[0] === '*' && cron[1] === '*' && cron[2] === '*' && cron[3] === '*' && cron[4] === '*') {\n frequency.base = 1; // every minute\n } else if(cron[1] === '*' && cron[2] === '*' && cron[3] === '*' && cron[4] === '*') {\n frequency.base = 2; // every hour\n } else if(cron[2] === '*' && cron[3] === '*' && cron[4] === '*') {\n frequency.base = 3; // every day\n } else if(cron[2] === '*' && cron[3] === '*') {\n frequency.base = 4; // every week\n } else if(cron[3] === '*' && cron[4] === '*') {\n frequency.base = 5; // every month\n } else if(cron[4] === '*') {\n frequency.base = 6; // every year\n }\n if (cron[0] !== '*') {\n frequency.minuteValue = parseInt(cron[0]);\n }\n if (cron[1] !== '*') {\n frequency.hourValue = parseInt(cron[1]);\n }\n if (cron[2] !== '*') {\n frequency.dayOfMonthValue = parseInt(cron[2]);\n }\n if (cron[3] !== '*') {\n frequency.monthValue = parseInt(cron[3]);\n }\n if (cron[4] !== '*') {\n frequency.dayValue = parseInt(cron[4]);\n }\n return frequency;\n };\n\n return service;\n }]);\n","lmApp.service('GenreService', ['$rootScope', 'AssetService',\n function ($rootScope, AssetService) {\n var service = {};\n var data = [];\n var NAMESPACE = 'genres:update';\n\n service.fetchGenres = function () {\n AssetService.GetGenresCollection()\n .then(function (collection) {\n data = collection\n .map(function (genre) {\n return Object.assign({}, genre, {type: 'genre'});\n })\n .filter(function (genre) {\n return genre.id;\n });\n\n $rootScope.$broadcast(NAMESPACE, data);\n });\n };\n\n service.getGenres = function () {\n return angular.copy(data);\n };\n\n service.subscribeOnUpdate = function (scope, callback) {\n scope.$on(NAMESPACE, callback);\n };\n\n service.fetchGenres();\n\n return service;\n }\n]);\n","/**\n * @ngdoc service\n * @name KeyService\n *\n */\nlmApp\n .service('KeyService', [function () {\n var service = {};\n\n /**\n * Fixed virtual key codes\n * @type {*}\n */\n service.Keys = {\n 'BACKSPACE': 8,\n 'TAB': 9,\n 'ENTER': 13,\n 'SHIFT': 16,\n 'CTRL': 17,\n 'ALT': 18,\n 'CAPS_LOCK': 20,\n 'ESCAPE': 27 ,\n 'SPACE': 32 ,\n 'PAGE_UP': 33,\n 'PAG_DOWN': 34,\n 'END': 35,\n 'HOME': 36,\n 'ARROW_LEFT': 37,\n 'ARROW_UP': 38,\n 'ARROW_RIGHT': 39,\n 'ARROW_DOWN': 40,\n 'DELETE': 46\n };\n\n return service;\n }]);\n","/**\n * Created by\n * @author Art Yunishev\n * on 07.03.2015\n */\n\nlmApp\n .service('MetadataService', ['$templateCache', '$rootScope', '$q', '$compile', '$timeout', '$http', 'AssetService', 'ModalWindowService', 'ValidatorService', 'ImportService',\n function ($templateCache, $rootScope, $q, $compile, $timeout, $http, AssetService, ModalWindowService, ValidatorService, ImportService) {\n var service = {};\n\n service.GetPlatformIcon = function (platform) {\n var iconName;\n var extid = platform.extid || platform.ext_id || platform.type;\n\n switch (extid) {\n case 'smarttv':\n iconName = 'monitor-multiple';\n break;\n\n case 'fire tv':\n iconName = 'monitor-multiple';\n break;\n\n case 'roku':\n iconName = 'monitor-multiple';\n break;\n\n case 'tvos':\n iconName = 'monitor-multiple';\n break;\n\n case 'android':\n iconName = 'android';\n break;\n\n case 'ios':\n iconName = 'apple';\n break;\n\n case 'stb':\n iconName = 'nest-protect';\n break;\n\n case 'dune':\n iconName = 'nest-protect';\n break;\n\n case 'ottweb':\n iconName = 'web';\n break;\n\n default:\n iconName = '';\n break;\n }\n\n return iconName;\n };\n\n service.GetPlatformName = function (platform) {\n var title;\n\n var extid = platform.extid || platform.ext_id || platform.type;\n\n switch (extid) {\n case 'dune':\n title = 'DuneHD-102 (DVB Hybrid)';\n break;\n\n case 'android':\n title = 'Android';\n break;\n\n case 'ios':\n title = 'iOS';\n break;\n\n case 'stb':\n title = 'STB ';\n break;\n\n case 'smarttv':\n title = 'SmartTV';\n break;\n\n case 'ottweb':\n title = 'PC/MAC';\n break;\n\n default:\n title = platform.title || platform.name;\n break;\n }\n\n return title;\n };\n\n service.GetPlatformColor = function (platform) {\n var extid = platform.extid || platform.ext_id;\n\n switch (extid) {\n case 'android':\n return '#f44336';\n\n case 'ios':\n return '#2196f3';\n\n case 'ottweb':\n return '#4caf50';\n\n case 'smarttv':\n return '#ffeb3b';\n\n default:\n\n return randomColor();\n }\n };\n\n service.GetPlatformApp = function (platform) {\n var app;\n\n var extid = platform.extid || platform.ext_id;\n\n switch (extid) {\n case 'smarttv':\n app = 'stocksmart';\n break;\n\n case 'android':\n app = 'stockand';\n break;\n\n case 'ios':\n app = 'stockios';\n break;\n\n case 'stb':\n app = 'stockstb';\n break;\n\n case 'ottweb':\n app = 'stockweb';\n break;\n\n default:\n app = '';\n break;\n }\n\n return app;\n };\n\n\n service._STREAM_TYPES_ATTRS = {\n 'dash': {\n title: 'DASH',\n placeholder: 'Example: http://transcoder.net/content/output.mpd'\n },\n 'hls': {\n title: 'HLS',\n placeholder: 'Example: http://transcoder.net/content/playlist.m3u8'\n },\n 'dash_live': {\n title: 'DASH Live',\n placeholder: 'Example: http://transcoder.net/content/output.mpd'\n },\n 'hls_live': {\n title: 'HLS Live',\n placeholder: 'Example: http://transcoder.net/content/playlist.m3u8'\n },\n 'shoutcast': {\n title: 'Shoutcast',\n placeholder: 'Example: http://transcoder.net/content/shoutcast-playlist.pls'\n },\n 'youtube': {\n title: 'Youtube',\n placeholder: 'Example: https://www.youtube.com/user/ChannelName'\n },\n 'dvb': {\n title: 'DVB',\n placeholder: 'Example: dvb:///name:freq:symbol_rate:.ts'\n }\n };\n\n service.getStreamTypeAttrs = function (type) {\n\n return service._STREAM_TYPES_ATTRS[type] || {\n title: type,\n placeholder: 'Unknown format'\n };\n };\n\n service.getOperator = function () {\n var deferred = $q.defer();\n\n lh.common.request.get('collection/operator/query')\n .then(function (response) {\n deferred.resolve(response.collection[0] || {});\n }, function (reason) {\n reason.url = 'collection/operator/query';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.LocalizationManager = function (asset, scope) {\n\n var inner = $templateCache.get('asset-localization.html');\n inner = $compile(inner)(scope);\n\n ModalWindowService.Open({\n content: inner,\n isFixed: true,\n keyboard: true,\n size: {\n s: 12,\n l: 10\n },\n actions: [\n {\n title: 'Close',\n color: 'red'\n }\n ]\n });\n\n\n };\n\n service.Rental = {\n GetValues: function (asset) {\n if (asset._PrivateData && asset._PrivateData.isNew) {\n\n return {\n license_start: moment.utc().add(-1, 'day'),\n license_finish: moment.utc().add(1, 'year'),\n rotation_start: moment.utc().add(-1, 'day'),\n rotation_finish: moment.utc().add(1, 'year')\n }\n } else {\n\n return {\n license_start: asset.license_start ? (moment.isMoment(asset.license_start) ? asset.license_start : (moment.utc(asset.license_start * 1000))) : moment.utc(),\n license_finish: asset.license_finish ? (moment.isMoment(asset.license_finish) ? asset.license_finish : (moment.utc(asset.license_finish * 1000))) : moment.utc(),\n rotation_start: asset.rotation_start ? (moment.isMoment(asset.rotation_start) ? asset.rotation_start : (moment.utc(asset.rotation_start * 1000))) : moment.utc(),\n rotation_finish: asset.rotation_finish ? (moment.isMoment(asset.rotation_finish) ? asset.rotation_finish : (moment.utc(asset.rotation_finish * 1000))) : moment.utc()\n }\n }\n },\n Check: function (asset) {\n if (asset.rotation_finish > moment.utc().format('X')\n && asset.rotation_start <= moment.utc().format('X')) {\n return {\n inProgress: true,\n text: 'In Progress'\n };\n }\n\n if (asset.rotation_finish < moment.utc().format('X')) {\n return {\n inProgress: false,\n text: 'Rotation window is expired'\n };\n }\n\n if (asset.rotation_start >= moment.utc().format('X')) {\n return {\n inProgress: false,\n text: 'Rotation window is not started'\n };\n }\n\n return {\n inProgress: false,\n text: 'Check Rotation and License window'\n };\n }\n };\n\n service.Countries = {\n DeleteCountry: function (id) {\n var deferred = $q.defer();\n\n var data = {\n country_id: id\n };\n\n lh.common.request.post('metadata/mgmt/country/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/country/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n UpdateCountry: function (id, title) {\n var deferred = $q.defer();\n\n var data = {\n country_id: id,\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n lh.common.request.post('metadata/mgmt/country/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/country/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n CreateCountry: function (title, ext_id) {\n var deferred = $q.defer();\n\n var data = {\n ext_id: ext_id ? ext_id : 'local:' + translit(title),\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n lh.common.request.post('metadata/mgmt/country/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/country/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n };\n\n service.Providers = {\n DeleteProvider: function (id) {\n var deferred = $q.defer();\n var data = {\n provider_id: id\n };\n lh.common.request.post('asset/mgmt/provider/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/provider/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n return deferred.promise;\n },\n UpdateProvider: function (id, title) {\n var deferred = $q.defer();\n var data = {\n provider_id: id,\n title: title\n };\n lh.common.request.post('asset/mgmt/provider/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/provider/update';\n reason.data = data;\n deferred.reject(reason);\n });\n return deferred.promise;\n },\n CreateProvider: function (title, ext_id) {\n var deferred = $q.defer();\n var data = {\n ext_id: ext_id ? translit(ext_id) : translit(title),\n title: title\n };\n lh.common.request.post('asset/mgmt/provider/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'asset/mgmt/provider/create';\n reason.data = data;\n deferred.reject(reason);\n });\n return deferred.promise;\n }\n };\n\n service.Studios = {\n DeleteStudio: function (id) {\n var deferred = $q.defer();\n\n var data = {\n studio_id: id\n };\n\n lh.common.request.post('metadata/mgmt/studio/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/studio/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n UpdateStudio: function (id, title) {\n var deferred = $q.defer();\n\n var data = {\n studio_id: id,\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n lh.common.request.post('metadata/mgmt/studio/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/studio/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n CreateStudio: function (title, ext_id) {\n var deferred = $q.defer();\n\n var data = {\n ext_id: ext_id ? ext_id : 'local:' + translit(title),\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n lh.common.request.post('metadata/mgmt/studio/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/studio/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n };\n\n service.Genres = {\n DeleteGenre: function (id) {\n var deferred = $q.defer();\n\n var data = {\n genre_id: id\n };\n\n lh.common.request.post('metadata/mgmt/genre/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/genre/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n UpdateGenre: function (id, title, order) {\n var deferred = $q.defer();\n\n var data = {\n genre_id: id,\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n if (_.isNumber(order)) {\n data.order = order;\n }\n\n lh.common.request.post('metadata/mgmt/genre/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/genre/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n CreateGenre: function (title, ext_id) {\n var deferred = $q.defer();\n\n var data = {\n ext_id: ext_id ? ext_id : 'local:' + translit(title),\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n lh.common.request.post('metadata/mgmt/genre/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/genre/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n Update: function (oldGenres, newGenres, assetId) {\n var deferred = $q.defer();\n\n var all = {};\n\n var diffToRemove = _.filter(oldGenres, function (obj) {\n return obj && !_.find(newGenres, {id: obj.id});\n });\n var diffToAdd = _.filter(newGenres, function (obj) {\n return obj && !_.find(oldGenres, {id: obj.id});\n });\n\n if (diffToRemove.length) {\n all.remove = AssetService.RemoveGenres.bind(this, diffToRemove, assetId);\n }\n\n if (diffToAdd.length) {\n all.add = AssetService.AddGenres.bind(this, diffToAdd, assetId);\n }\n\n $q.seqAll(all)\n .then(function (responses) {\n deferred.resolve(responses);\n })\n .catch(function (reasons) {\n deferred.reject(reasons);\n });\n\n return deferred.promise;\n }\n };\n\n service.Categories = {\n DeleteCategory: function (id) {\n var deferred = $q.defer();\n\n var data = {\n category_id: id\n };\n\n lh.common.request.post('metadata/mgmt/category/remove', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/category/remove';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n UpdateCategory: function (id, title, order) {\n var deferred = $q.defer();\n\n var data = {\n category_id: id,\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n if (_.isNumber(order)) {\n data.order = order;\n }\n\n lh.common.request.post('metadata/mgmt/category/update', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/category/update';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n CreateCategory: function (title, ext_id, order) {\n var deferred = $q.defer();\n\n var data = {\n ext_id: ext_id ? ext_id : 'local:' + translit(title),\n metadata: JSON.stringify({\"_\": {\"title\": title}})\n };\n\n if (_.isNumber(order)) {\n data.order = order;\n }\n\n lh.common.request.post('metadata/mgmt/category/create', data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = 'metadata/mgmt/category/create';\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n },\n\n Update: function (oldCategories, newCategories, assetId) {\n var deferred = $q.defer();\n\n var all = {};\n\n var diffToRemove = _.filter(oldCategories, function (obj) {\n return obj && !_.find(newCategories, {id: obj.id});\n });\n var diffToAdd = _.filter(newCategories, function (obj) {\n return obj && !_.find(oldCategories, {id: obj.id});\n });\n\n if (diffToRemove.length) {\n all.remove = AssetService.RemoveCategory.bind(this, diffToRemove, assetId);\n }\n\n if (diffToAdd.length) {\n all.add = AssetService.AddCategory.bind(this, diffToAdd, assetId);\n }\n\n $q.seqAll(all)\n .then(function (responses) {\n deferred.resolve(responses);\n })\n .catch(function (reasons) {\n deferred.reject(reasons);\n });\n\n return deferred.promise;\n }\n };\n\n service.Persons = {\n _personRoles: [\n {\n title: 'Operator',\n id: 'operator'\n },\n {\n title: 'Assembly',\n id: 'assembly'\n },\n {\n title: 'Actor',\n id: 'actor'\n },\n {\n title: 'Director',\n id: 'director'\n },\n {\n title: 'Scenario',\n id: 'scenario'\n },\n {\n title: 'Composer',\n id: 'composer'\n },\n {\n title: 'Presenter',\n id: 'presenter'\n },\n {\n title: 'Music Director',\n id: 'music_director'\n },\n {\n title: 'Playback Singers',\n id: 'playback_singers'\n }\n ],\n Prepare: function (persons, isSearch, list) {\n persons = persons.map(function (person, index) {\n person.index = index;\n if (isSearch) {\n person.inCollection = this.FindInCollection(list, person);\n } else {\n person.inCollection = true;\n }\n return person;\n }.bind(this));\n\n var roles = {};\n\n _.forEach(this._personRoles, function (role) {\n roles[role.id] = _.filter(persons, function (person) {\n return person.role === role.id;\n });\n });\n\n return roles;\n },\n\n FindInCollection: function (list, person) {\n return _.find(list, {id: person.id});\n },\n\n Process: function (asset, person, action) {\n if (action) {\n this.Add(asset, person, person.role);\n } else {\n this.Remove(asset, person, person.role);\n }\n },\n\n Create: function (person, asset) {\n person.role = person.role.id;\n return AssetService.CreatePerson(person)\n .then(function (response) {\n this.Add(asset, response.person, response.person.role);\n return $q.when();\n }.bind(this))\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n return $q.when();\n });\n },\n\n Add: function (asset, person, role) {\n asset._PrivateData.roles[role].unshift(person);\n asset._PrivateData.personsNew.push(person);\n person.inCollection = true;\n },\n\n Remove: function (asset, person, role) {\n\n var index = _.findIndex(asset._PrivateData.personsNew, function (pr) {\n return pr.id == person.id;\n });\n\n var indexInRoles = _.findIndex(asset._PrivateData.roles[role], function (pr) {\n return pr.id == person.id;\n });\n\n asset._PrivateData.personsNew.splice(index, 1);\n asset._PrivateData.roles[role].splice(indexInRoles, 1);\n person.inCollection = false;\n },\n\n PersonsManager: function (asset, personsToCompare, scope) {\n\n var deferred = $q.defer();\n\n var personSearchInnerScope = scope.$new(true);\n\n personSearchInnerScope.loading = false;\n\n personSearchInnerScope.rolesSearch = {};\n\n personSearchInnerScope.rolesSearch.list = [];\n personSearchInnerScope.rolesSearch.value = '';\n\n personSearchInnerScope.errors = {};\n\n personSearchInnerScope.tmpPerson = {};\n\n var unwatch = personSearchInnerScope.$watch('rolesSearch.value', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n var split = newValue.trim().split(' ');\n\n if (split.length === 1) {\n personSearchInnerScope.tmpPerson.first_name = split[0];\n personSearchInnerScope.tmpPerson.second_name = '';\n personSearchInnerScope.tmpPerson.middle_name = '';\n }\n\n if (split.length === 2) {\n personSearchInnerScope.tmpPerson.first_name = split[0];\n personSearchInnerScope.tmpPerson.second_name = split[1];\n personSearchInnerScope.tmpPerson.middle_name = '';\n }\n\n if (split.length === 3) {\n personSearchInnerScope.tmpPerson.first_name = split[0];\n personSearchInnerScope.tmpPerson.second_name = split[2];\n personSearchInnerScope.tmpPerson.middle_name = split[1];\n }\n }\n\n if (newValue && newValue !== oldValue) {\n if (searchTimeout) $timeout.cancel(searchTimeout);\n searchTimeout = $timeout(function () {\n personSearchInnerScope.loading = true;\n AssetService.SearchPerson(newValue)\n .then(function (collection) {\n personSearchInnerScope.loading = false;\n\n personSearchInnerScope.list = collection;\n personSearchInnerScope.roles = service.Persons.Prepare(personSearchInnerScope.list, true, personsToCompare);\n })\n .catch(function (reason) {\n personSearchInnerScope.loading = false;\n\n $rootScope.debugInfo(reason);\n });\n }, 650);\n } else {\n personSearchInnerScope.list = [];\n personSearchInnerScope.roles = [];\n }\n });\n\n personSearchInnerScope.processPerson = scope.processPerson;\n personSearchInnerScope.availablePersonRoles = this._personRoles.map(function (role) {\n return {\n title: role.title,\n id: role.id\n }\n });\n personSearchInnerScope.originAsset = asset;\n\n personSearchInnerScope.validate = function (person) {\n personSearchInnerScope.errors = {};\n\n if (!person.first_name) personSearchInnerScope.errors.first_name = true;\n if (!person.second_name) personSearchInnerScope.errors.second_name = true;\n if (!person.role) personSearchInnerScope.errors.role = true;\n\n return personSearchInnerScope.errors;\n };\n\n personSearchInnerScope.createPerson = function (person) {\n if (!_.isEmpty(personSearchInnerScope.validate(person))) return;\n\n this.Create(person, personSearchInnerScope.originAsset)\n .then(function () {\n personSearchInnerScope.isNewPerson = false;\n personSearchInnerScope.rolesSearch.value = '';\n personSearchInnerScope.tmpPerson = {};\n inner.find('input#person_search').focus();\n });\n }.bind(this);\n\n personSearchInnerScope.scrollbarHeight = 0;\n\n var inner = $templateCache.get('add-cast-crew.html');\n var searchTimeout;\n\n inner = $compile(inner)(personSearchInnerScope);\n\n ModalWindowService.Open({\n content: inner,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'DONE',\n color: 'green',\n fn: function () {\n unwatch();\n personSearchInnerScope.$destroy();\n deferred.resolve();\n }\n }\n ],\n size: {\n s: 10,\n l: 6\n },\n onInit: function () {\n $timeout(function () {\n inner.find('input#person_search').focus();\n }, 350);\n }\n });\n\n return deferred.promise;\n },\n\n Update: function (oldPersons, newPersons, assetId) {\n var deferred = $q.defer();\n\n var all = {};\n\n var diffToRemove = _.filter(oldPersons, function (obj) {\n return obj && !_.find(newPersons, {id: obj.id});\n });\n var diffToAdd = _.filter(newPersons, function (obj) {\n return obj && !_.find(oldPersons, {id: obj.id});\n });\n\n if (diffToRemove.length) {\n all.remove = AssetService.RemovePerson.bind(this, diffToRemove, assetId);\n }\n\n if (diffToAdd.length) {\n all.add = AssetService.AddPerson.bind(this, diffToAdd, assetId);\n }\n\n $q.seqAll(all)\n .then(function (responses) {\n deferred.resolve(responses);\n })\n .catch(function (reasons) {\n deferred.reject(reasons);\n });\n\n return deferred.promise;\n }\n };\n\n service.Platforms = {\n GetAvailablePlatforms: function (asset, platforms) {\n if (asset._PrivateData.isNew) {\n return (platforms || []).map(function (platform) {\n if (!platform.title) platform.title = service.GetPlatformName(platform);\n\n platform.enabled = true;\n return platform;\n });\n } else {\n return (platforms || []).map(function (platform) {\n if (!platform.title) platform.title = service.GetPlatformName(platform);\n\n platform.enabled = asset.platform_id && asset.platform_id.indexOf(platform.id) !== -1;\n return platform;\n });\n }\n },\n\n Update: function (oldPlatforms, newPlatforms, assetId) {\n var deferred = $q.defer();\n\n var all = {};\n\n var diffToRemove = _.filter(newPlatforms, function (obj) {\n return !obj.enabled;\n });\n\n var diffToAdd = _.filter(newPlatforms, function (obj) {\n return obj.enabled;\n });\n\n if (diffToRemove.length) {\n all.remove = AssetService.RemovePlatforms.bind(this, diffToRemove, assetId);\n }\n\n if (diffToAdd.length) {\n all.add = AssetService.AddPlatforms.bind(this, diffToAdd, assetId);\n }\n\n $q.seqAll(all)\n .then(function (responses) {\n deferred.resolve(responses);\n })\n .catch(function (reasons) {\n deferred.reject(reasons);\n });\n\n return deferred.promise;\n }\n };\n\n service.Rating = {\n _types: {'imdb': 'IMDb', 'metascore': 'Metascore', 'mpaa': 'MPAA'},\n\n mpaaValues: [\n {\n rating: 0,\n title: 'General Audiences [G]',\n id: 'G'\n },\n {\n rating: 1,\n title: 'Parental Guidance Suggested [PG]',\n id: 'PG'\n },\n {\n rating: 2,\n title: 'Parents Strongly Cautioned [PG-13]',\n id: 'PG-13'\n },\n {\n rating: 3,\n title: 'Restricted [R]',\n id: 'R'\n },\n {\n rating: 4,\n title: 'Adults Only [NC-17]',\n id: 'NC-17'\n }\n ],\n\n GetValue: function (rating) {\n if (rating.type === 'mpaa') {\n return {\n label: this._types[rating.type],\n value: _.find(this.mpaaValues, {rating: rating.avg_value}),\n votes_count: 0,\n type: rating.type\n }\n } else {\n return {\n label: this._types[rating.type],\n value: rating.avg_value,\n votes_count: rating.votes_count,\n type: rating.type\n }\n }\n },\n\n IsRating: function (asset, rating_extid) {\n return !!_.find(asset, {type: rating_extid});\n },\n\n Update: function (oldRatings, newRatings, assetId) {\n\n var deferred = $q.defer();\n\n newRatings = newRatings.filter(function (rating) {\n\n return !!rating.value || rating.value === 0;\n });\n\n AssetService.AddRating(newRatings, assetId)\n .then(function (responses) {\n deferred.resolve(responses);\n })\n .catch(function (reasons) {\n deferred.reject(reasons);\n });\n\n return deferred.promise;\n }\n };\n\n service.Quality = {\n SetValue: function (asset, value) {\n asset._PrivateData.qualityFormat = value;\n }\n };\n\n service.Catchup = {\n GetValue: function (resource) {\n return parseInt((resource.depth | 0), 10);\n },\n\n ChangeValue: function (asset, scope) {\n if (!asset._PrivateData.catchupNew.source) asset._PrivateData.catchupNew.source = asset._PrivateData.streamsResources['hls_live'].source || '';\n\n var inner = $templateCache.get('catchup-options.html');\n inner = $compile(inner)(scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: 'Done',\n color: 'green',\n fn: function () {\n if (!asset._PrivateData.catchupNew.source || !asset._PrivateData.catchupNew.depth) {\n $timeout(function () {\n asset._PrivateData.catchupNew.isEnabled = false;\n });\n } else {\n $timeout(function () {\n asset._PrivateData.catchupNew.isEnabled = true;\n });\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ],\n size: {\n s: 6,\n l: 4\n },\n onComplete: function (result) {\n if (!result) {\n $timeout(function () {\n asset._PrivateData.catchupNew.isEnabled = false\n });\n }\n }\n });\n }\n };\n\n service.Catchup2 = {\n ChangeValue: function (asset, scope) {\n var inner = $templateCache.get('add-catchup.html');\n inner = $compile(inner)(scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: 'Done',\n color: 'green',\n fn: function () {\n for (var i = 0; i < scope.channel.streamResources.length; i++) {\n var r = scope.channel.streamResources[i];\n if (r.category.toLowerCase() === 'catchup') {\n scope.channel.streamResources.splice(i, 1);\n }\n }\n scope.channel.streamResources.push({\n type: 'dvr2',\n category: 'catchup',\n group: 'catchup',\n state: 'preparing',\n URL: scope.channel.catchup.source,\n depth: parseInt(scope.channel.catchup.depth) || 0,\n preparer: 'passthrough',\n deployer: 'origin',\n private: true,\n tags: ''\n });\n $rootScope.$digest();\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n }\n }\n ],\n size: {\n s: 6,\n l: 4\n },\n onComplete: function (result) {\n }\n });\n }\n };\n\n service.Npvr = {\n ChangeValue: function (asset, scope) {\n if (!asset._PrivateData.npvrNew.isEnabled) {\n asset._PrivateData.npvrNew.isEnabled = false;\n } else {\n if (!asset._PrivateData.npvrNew.source) asset._PrivateData.npvrNew.source = asset._PrivateData.streamsResources['hls_live'].source || '';\n\n var inner = $templateCache.get('npvr-options.html');\n inner = $compile(inner)(scope);\n\n ModalWindowService.Open({\n content: inner,\n keyboard: true,\n actions: [\n {\n title: 'Done',\n color: 'green',\n fn: function () {\n if (!asset._PrivateData.npvrNew.source) {\n $timeout(function () {\n asset._PrivateData.npvrNew.isEnabled = false\n });\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red',\n fn: function () {\n $timeout(function () {\n asset._PrivateData.npvrNew.isEnabled = false\n });\n }\n }\n ],\n size: {\n s: 6,\n l: 4\n },\n onComplete: function (result) {\n if (!result) {\n $timeout(function () {\n asset._PrivateData.npvrNew.isEnabled = false\n });\n }\n }\n });\n }\n }\n };\n\n service.ImportMetadata = function (meta) {\n var deferred = $q.defer();\n\n var data = {\n url: 'https://storage-sc-ott3.s3.amazonaws.com/' + meta + '.xml'\n };\n\n var url = 'asset/import/perform';\n\n lh.common.request.post(url, data)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.ValidateMetadata = {};\n\n service.ValidateMetadata.Vod = function (asset) {\n var validateErrors = {};\n\n if (!asset.title) {\n validateErrors.title = true;\n }\n\n for (var i = 0; i < asset._PrivateData.ratingsNew.length; i++) {\n if (asset._PrivateData.ratingsNew[i].type !== 'mpaa') {\n if (asset._PrivateData.ratingsNew[i].value && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].value)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorValue = true;\n }\n if (asset._PrivateData.ratingsNew[i].votes_count && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].votes_count)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorCount = true;\n }\n }\n }\n\n if (!ValidatorService.Numerical(asset.year)) {\n validateErrors.year = true;\n }\n\n if (!asset.description) {\n validateErrors.description = true;\n }\n\n //if (!asset._PrivateData.countriesNew) {\n // validateErrors.country = true;\n //}\n\n // if (!asset._PrivateData.platformsNew.filter(function (platform) {\n // return platform.enabled;\n // }).length) {\n // validateErrors.platforms = true;\n // }\n\n asset._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.Live = function (asset) {\n var validateErrors = {};\n\n if (!asset.title) {\n validateErrors.title = true;\n }\n\n if (!ValidatorService.Numerical(asset.lcn || asset.er_lcn)) {\n validateErrors.lcn = true;\n validateErrors.lcnText = 'Should be a number';\n }\n\n //if (_.isEmpty(asset._PrivateData.epgChannelIdNew)) {\n // validateErrors.epg_channel_id = true;\n //}\n\n // if (!asset._PrivateData.platformsNew.filter(function (platform) {\n // return platform.enabled;\n // }).length) {\n // validateErrors.platforms = true;\n // }\n\n asset._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.VirtualLive = function (asset) {\n var validateErrors = {};\n\n if (!asset.title) {\n validateErrors.title = true;\n }\n\n if (!ValidatorService.Numerical(asset.lcn || asset.er_lcn)) {\n validateErrors.lcn = true;\n validateErrors.lcnText = 'Should be a number';\n }\n\n //if (_.isEmpty(asset._PrivateData.epgChannelIdNew)) {\n // validateErrors.epg_channel_id = true;\n //}\n\n // if (!asset._PrivateData.platformsNew.filter(function (platform) {\n // return platform.enabled;\n // }).length) {\n // validateErrors.platforms = true;\n // }\n\n asset._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.TVSeries = function (asset) {\n var validateErrors = {};\n\n if (!asset.title) {\n validateErrors.title = true;\n }\n\n if (!asset.description) {\n validateErrors.description = true;\n }\n\n for (var i = 0; i < asset._PrivateData.ratingsNew.length; i++) {\n if (asset._PrivateData.ratingsNew[i].type !== 'mpaa') {\n if (asset._PrivateData.ratingsNew[i].value && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].value)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorValue = true;\n }\n if (asset._PrivateData.ratingsNew[i].votes_count && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].votes_count)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorCount = true;\n }\n }\n }\n\n //if (!ValidatorService.Numerical(asset._PrivateData.durationNew)) {\n // validateErrors.duration = true;\n //}\n\n if (!ValidatorService.Numerical(asset.year)) {\n validateErrors.year = true;\n }\n\n //if (!asset._PrivateData.countriesNew) {\n // validateErrors.country = true;\n //}\n\n // if (!asset._PrivateData.platformsNew.filter(function (platform) {\n // return platform.enabled;\n // }).length) {\n // validateErrors.platforms = true;\n // }\n\n asset._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.TVEpisode = function (asset) {\n var validateErrors = {};\n\n if (!asset.title) {\n validateErrors.title = true;\n }\n\n //if (!ValidatorService.Numerical(asset._PrivateData.durationNew)) {\n // validateErrors.duration = true;\n //}\n\n for (var i = 0; i < asset._PrivateData.ratingsNew.length; i++) {\n if (asset._PrivateData.ratingsNew[i].type !== 'mpaa') {\n if (asset._PrivateData.ratingsNew[i].value && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].value)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorValue = true;\n }\n if (asset._PrivateData.ratingsNew[i].votes_count && !ValidatorService.Numerical(asset._PrivateData.ratingsNew[i].votes_count)) {\n if (!validateErrors.ratings) validateErrors.ratings = [];\n if (!validateErrors.ratings[i]) validateErrors.ratings[i] = {};\n validateErrors.ratings[i].errorCount = true;\n }\n }\n }\n\n if (!asset.description) {\n validateErrors.description = true;\n }\n\n if (!asset._PrivateData.seasonIndexNew) {\n validateErrors.season_index = true;\n }\n\n if (!ValidatorService.Numerical(asset._PrivateData.episodeIndexNew)) {\n validateErrors.episode_index = true;\n }\n\n asset._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.Offer = function (offer) {\n var validateErrors = {};\n\n if (!offer._PrivateData.name) {\n validateErrors.name = true;\n }\n\n if (!offer._PrivateData.type && !offer._PrivateData.isFree) {\n validateErrors.type = true;\n }\n\n if (!_.isFinite(parseFloat(offer._PrivateData.billing_params_price)) && parseFloat(offer._PrivateData.billing_params_price) > 0 && !offer._PrivateData.isFree) {\n validateErrors.price = true;\n }\n\n if (!offer._PrivateData.billing_params_currency && !offer._PrivateData.isFree) {\n validateErrors.currency = true;\n }\n\n if (offer._PrivateData.type !== 'transactional-own' && !offer._PrivateData.isFree) {\n if (!ValidatorService.Numerical(offer._PrivateData.right_params_duration) || offer._PrivateData.right_params_duration == 0) {\n validateErrors.duration = true;\n }\n\n if (!offer._PrivateData.right_params_duration_unit) {\n validateErrors.unit = true;\n }\n }\n\n offer._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.Plan = function (plan) {\n var validateErrors = {};\n\n if (!plan._PrivateData.name) {\n validateErrors.name = true;\n }\n\n if (!plan._PrivateData.type) {\n validateErrors.type = true;\n }\n\n if (!_.isFinite(parseFloat(plan._PrivateData.billing_params_price)) && !(parseFloat(plan._PrivateData.billing_params_price) > 0) && !plan._PrivateData.isFree) {\n validateErrors.price = true;\n }\n\n if (!plan._PrivateData.billing_params_currency && !plan._PrivateData.isFree) {\n validateErrors.currency = true;\n }\n\n if (!ValidatorService.Numerical(plan._PrivateData.right_params_duration) || plan._PrivateData.right_params_duration == 0) {\n validateErrors.duration = true;\n }\n\n if (!plan._PrivateData.right_params_duration_unit) {\n validateErrors.unit = true;\n }\n\n if (plan._PrivateData.isTrialAvailable && !plan._PrivateData.right_params_trial_duration) {\n validateErrors.trial_duration = true;\n }\n\n if (plan._PrivateData.isTrialAvailable && !plan._PrivateData.right_params_trial_duration_unit) {\n validateErrors.trial_unit = true;\n }\n\n plan._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.ValidateMetadata.Package = function (pkg) {\n var validateErrors = {};\n\n if (!pkg._PrivateData.title) {\n validateErrors.title = true;\n }\n\n return pkg._PrivateData.validateErrors = validateErrors, validateErrors;\n };\n\n service.ValidateMetadata.EpgImport = function (task) {\n var validateErrors = {};\n\n if (_.isEmpty(task._PrivateData.source)) {\n validateErrors.source = true;\n }\n\n task._PrivateData.validateErrors = validateErrors;\n\n return validateErrors;\n };\n\n service.MediaManager2 = function (asset, scope, type, oldResource, cdnTags) {\n var deferred = $q.defer();\n\n var MediaInnerScope = scope.$new(true);\n\n MediaInnerScope.resourceCategory = type;\n MediaInnerScope.error = '';\n MediaInnerScope.isLive = asset.type === 'channel';\n\n MediaInnerScope.templates = [{\n id: 'hls',\n title: 'HLS - H264 HD / AAC',\n type: 'hls'\n }];\n\n var tags = [];\n if (cdnTags) {\n for (var i = 0; i < cdnTags.length; i += 1) {\n tags.push({\n id: cdnTags[i],\n title: cdnTags[i],\n })\n }\n }\n\n // Init\n MediaInnerScope.tmpMedia = {\n type: 'media_stream', // media_raw_file, media_raw_external, media_stream, youtube_stream, shoutcast_stream\n template: MediaInnerScope.templates[0],\n tags: tags,\n url: '',\n deploymentStrategy: MediaInnerScope.isLive ? 'origin' : 'origin_proxy',\n private: '1',\n tag: {},\n drm: false,\n edit: false,\n group: 'stream',\n };\n\n if (oldResource) {\n MediaInnerScope.tmpMedia.edit = true;\n MediaInnerScope.tmpMedia.type = oldResource.type.toLowerCase() === 'shoutcast' ? 'shoutcast_stream' : 'media_stream';\n if (oldResource.type.toLowerCase().endsWith('protected')) {\n MediaInnerScope.tmpMedia.drm = true;\n }\n MediaInnerScope.tmpMedia.url = oldResource.URL.replace('http+proxy://', 'http://');\n if (oldResource.category === 'trailer') {\n type = 'trailer';\n MediaInnerScope.resourceCategory = 'trailer';\n }\n MediaInnerScope.tmpMedia.private = oldResource.private ? '1' : '0';\n if (oldResource.deployerArgs && oldResource.deployerArgs.cdn_tag) {\n MediaInnerScope.tmpMedia.tag = {\n id: oldResource.deployerArgs.cdn_tag,\n title: oldResource.deployerArgs.cdn_tag,\n }\n }\n if (oldResource.tags) {\n MediaInnerScope.tmpMedia.tag = {\n id: oldResource.tags,\n title: oldResource.tags,\n };\n }\n if (oldResource.deployer === 'passthrough') {\n MediaInnerScope.tmpMedia.deploymentStrategy = 'passthrough';\n }\n MediaInnerScope.tmpMedia.group = oldResource.group;\n }\n\n MediaInnerScope.selectType = function (type) {\n MediaInnerScope.error = '';\n //MediaInnerScope.tmpMedia.url = '';\n MediaInnerScope.tmpMedia.type = type;\n MediaInnerScope.tmpMedia.deploymentStrategy = type == 'media_stream' && !MediaInnerScope.isLive ? 'origin_proxy' : 'origin';\n };\n\n MediaInnerScope.close = function () {\n if (MediaInnerScope.loading) return;\n ModalWindowService.Close(MediaInnerScope.window, false);\n };\n\n var inner = $templateCache.get('add-video.html');\n inner = $compile(inner)(MediaInnerScope);\n\n MediaInnerScope.processMedia = function () {\n if (MediaInnerScope.tmpMedia.url) {\n var resource = {\n type: '', // VOD: dash, hls, youtube+video LIVE: dash-live, dvb, hls-live, youtube+channel\n category: '', // '' or trailer\n deployer: '', // passthrough, origin\n private: true,\n group: MediaInnerScope.tmpMedia.group,\n URL: '',\n preparer: '', // passthrough, noisypeak,\n state: 'preparing',\n tags: '',\n depth: 0,\n };\n\n if (MediaInnerScope.isLive) {\n resource.type = 'hls-live';\n resource.category = '';\n resource.deployer = MediaInnerScope.tmpMedia.deploymentStrategy;\n resource.private = MediaInnerScope.tmpMedia.deploymentStrategy === 'origin' && MediaInnerScope.tmpMedia.private === '1';\n resource.URL = MediaInnerScope.tmpMedia.url;\n resource.preparer = 'passthrough';\n resource.tags = MediaInnerScope.tmpMedia.tag.title || '';\n\n if (MediaInnerScope.tmpMedia.type === 'youtube_stream') {\n resource.type = 'youtube+channel';\n }\n if (MediaInnerScope.tmpMedia.type === 'shoutcast_stream') {\n resource.type = 'shoutcast';\n resource.deployer = 'passthrough';\n }\n if (MediaInnerScope.tmpMedia.type === 'media_stream') {\n var ext = MediaInnerScope.tmpMedia.url.split('/').pop().split('.').pop();\n if (ext === 'mpd') {\n resource.type = 'dash-live';\n\n } else if (ext === 'm3u8') {\n resource.type = 'hls-live';\n\n } else if (ext === 'ts') {\n resource.type = 'dvb';\n }\n }\n } else {\n resource.type = 'hls';\n resource.category = type === 'trailer' ? type : '';\n resource.deployer = MediaInnerScope.tmpMedia.deploymentStrategy === 'passthrough' ? 'passthrough' : 'origin';\n resource.private = MediaInnerScope.tmpMedia.deploymentStrategy !== 'passthrough' && MediaInnerScope.tmpMedia.private === '1';\n if (resource.category === 'trailer') resource.private = false;\n resource.preparer = 'passthrough';\n resource.URL = MediaInnerScope.tmpMedia.url;\n resource.tags = MediaInnerScope.tmpMedia.tag.title || '';\n\n if (MediaInnerScope.tmpMedia.type === 'media_raw_file' || MediaInnerScope.tmpMedia.type === 'media_raw_external') {\n resource.preparer = 'noisypeak';\n }\n if (MediaInnerScope.tmpMedia.type === 'youtube_stream') {\n resource.type = 'youtube+video';\n }\n if (MediaInnerScope.tmpMedia.type === 'media_stream') {\n var ext = MediaInnerScope.tmpMedia.url.split('/').pop().split('.').pop();\n if (ext === 'mpd') {\n resource.type = 'dash';\n } else if (ext === 'm3u8') {\n resource.type = 'hls';\n }\n if (MediaInnerScope.tmpMedia.deploymentStrategy === 'origin_proxy') {\n resource.URL = resource.URL.replace('http://', 'http+proxy://');\n resource.URL = resource.URL.replace('https://', 'http+proxy://');\n }\n }\n }\n\n if (MediaInnerScope.tmpMedia.drm) {\n resource.type += '-protected';\n }\n\n if (oldResource) {\n for (var i = 0; i < asset.streamResources.length; i++) {\n var r = asset.streamResources[i];\n if (oldResource.type.toUpperCase() === r.type.toUpperCase() && oldResource.category.toUpperCase() === r.category.toUpperCase()) {\n asset.streamResources.splice(i, 1);\n break;\n }\n }\n }\n for (var i = 0; i < asset.streamResources.length; i++) {\n var r = asset.streamResources[i];\n if (r.type.toUpperCase() === resource.type.toUpperCase() && r.category.toUpperCase() === resource.category.toUpperCase()) {\n asset.streamResources.splice(i, 1);\n break;\n }\n }\n asset.streamResources.push(angular.copy(resource));\n }\n $rootScope.$digest();\n };\n\n MediaInnerScope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: MediaInnerScope.tmpMedia.edit ? 'Save' : 'Add',\n fn: MediaInnerScope.processMedia,\n check: function () {\n MediaInnerScope.error = '';\n if (MediaInnerScope.loading) return false;\n\n if (!MediaInnerScope.tmpMedia.url) {\n MediaInnerScope.error = 'Source was not found. Try again.';\n }\n\n if (MediaInnerScope.tmpMedia.url) {\n if (MediaInnerScope.tmpMedia.type === 'media_stream') {\n var urlWithoutQuery = MediaInnerScope.tmpMedia.url.split('?')[0];\n var ext = urlWithoutQuery.split('/').pop().split('.').pop();\n\n if (['m3u8', 'ts', 'mpd'].indexOf(ext) === -1) {\n MediaInnerScope.error = 'Unsupported stream format';\n }\n }\n\n if (MediaInnerScope.tmpMedia.type === 'youtube_stream') {\n if (MediaInnerScope.isLive) {\n if (!ValidatorService.YoutubeChannel(MediaInnerScope.tmpMedia.url) && !ValidatorService.YoutubeUser(MediaInnerScope.tmpMedia.url)) {\n MediaInnerScope.error = 'Wrong Youtube channel or user https://www.youtube.com/channel/xxxxxxxx or https://www.youtube.com/user/xxxxxxxx';\n }\n } else {\n if (!ValidatorService.YoutubeVideo(MediaInnerScope.tmpMedia.url)) {\n MediaInnerScope.error = 'Wrong Youtube video https://www.youtube.com/watch?v=xxxxxxx';\n }\n }\n }\n }\n return MediaInnerScope.error === '';\n }\n }\n ],\n size: {\n s: 10,\n l: 6\n }\n });\n\n inner.on('$destroy', function () {\n MediaInnerScope.$destroy();\n });\n\n return deferred.promise;\n };\n\n\n service.MediaManager = function (asset, scope, type) {\n var deferred = $q.defer();\n\n var MediaInnerScope = scope.$new(true);\n\n MediaInnerScope.errors = {};\n MediaInnerScope.success = {};\n MediaInnerScope.uploadInProgress = false;\n MediaInnerScope.isLive = asset.type === 'channel';\n\n MediaInnerScope.templates = [\n {\n id: 'hls',\n title: 'HLS - H264 HD / AAC',\n type: 'hls'\n }\n ];\n\n MediaInnerScope.tmpMedia = {\n template: MediaInnerScope.templates[0],\n type: 'media_stream',\n showAdvanced: false,\n deploymentStrategy: 'origin',\n overrideDeliveryMethod: false\n };\n\n MediaInnerScope.validate = function (person) {\n MediaInnerScope.errors = {};\n\n if (!person.first_name) MediaInnerScope.errors.first_name = true;\n if (!person.second_name) MediaInnerScope.errors.second_name = true;\n if (!person.role) MediaInnerScope.errors.role = true;\n\n return MediaInnerScope.errors;\n };\n\n MediaInnerScope.selectType = function (type) {\n MediaInnerScope.errors = {};\n MediaInnerScope.tmpMedia.source = '';\n MediaInnerScope.tmpMedia.type = type;\n };\n\n MediaInnerScope.toggleAdvanced = function () {\n MediaInnerScope.tmpMedia.showAdvanced = !MediaInnerScope.tmpMedia.showAdvanced;\n };\n\n MediaInnerScope.selectFile = function () {\n $timeout(function () {\n MediaInnerScope._fileInput_.trigger('click');\n });\n };\n\n MediaInnerScope.close = function () {\n if (MediaInnerScope.loading) return;\n\n ModalWindowService.Close(MediaInnerScope.window, false);\n };\n\n var inner = $templateCache.get('add-media.html');\n inner = $compile(inner)(MediaInnerScope);\n\n $timeout(function () {\n MediaInnerScope._fileInput_ = inner.find('input#media_file_input');\n MediaInnerScope._form_ = inner.find('form#media_form_input');\n //MediaInnerScope._dropArea_ = inner.find('img#drop_here');\n MediaInnerScope._progress_ = inner.find('#fileLoader');\n MediaInnerScope._bar_ = MediaInnerScope._progress_.find('.determinate');\n\n MediaInnerScope._fileInput_\n .on('change', function () {\n\n var files = this.files;\n\n if (!files.length) {\n $timeout(function () {\n MediaInnerScope.errors.upload = 'Choose one file';\n });\n return;\n }\n\n MediaInnerScope.errors.upload = '';\n MediaInnerScope.success.upload = '';\n\n MediaInnerScope.tmpMedia.file = files[0];\n\n if (MediaInnerScope.tmpMedia.file.size > 104857600) {\n MediaInnerScope.errors.upload = 'File size exceed 100 MB. This file size is: ' + parseInt(MediaInnerScope.tmpMedia.file.size / 1024 / 1024, 10) + ' MB';\n MediaInnerScope._form_[0].reset();\n\n return;\n }\n\n MediaInnerScope.uploadInProgress = true;\n MediaInnerScope.success.upload = false;\n\n ImportService.UploadToCloud(MediaInnerScope.tmpMedia.file, MediaInnerScope._progress_)\n .then(function (response) {\n MediaInnerScope._bar_.css({width: '0%'});\n MediaInnerScope.tmpMedia.source = response.Location;\n $timeout(function () {\n MediaInnerScope.uploadInProgress = false;\n MediaInnerScope.success.upload = 'Upload successfully done. You can save result';\n MediaInnerScope.errors.upload = false;\n });\n }, function (reason) {\n $timeout(function () {\n MediaInnerScope.errors.upload = reason.message || 'Error during upload';\n MediaInnerScope._form_[0].reset();\n MediaInnerScope.uploadInProgress = false;\n MediaInnerScope._bar_.css({width: '0%'});\n });\n\n $rootScope.debugInfo(reason, 'silent');\n })\n .then(function () {\n MediaInnerScope._fileInput_.innerHTML = MediaInnerScope._fileInput_.innerHTML;\n });\n\n MediaInnerScope._form_[0].reset();\n });\n\n/* MediaInnerScope._dropArea_.bind(\"dragenter\", dragEnter);\n MediaInnerScope._dropArea_.bind(\"dragleave\", dragLeave);\n MediaInnerScope._dropArea_.bind(\"dragover\", dragOver);\n MediaInnerScope._dropArea_.bind(\"drop\", dragDrop);\n\n MediaInnerScope._dropArea_.on('$destroy', function () {\n MediaInnerScope._dropArea_.unbind(\"dragenter\", dragEnter);\n MediaInnerScope._dropArea_.unbind(\"dragleave\", dragLeave);\n MediaInnerScope._dropArea_.unbind(\"dragover\", dragOver);\n MediaInnerScope._dropArea_.unbind(\"drop\", dragDrop);\n });*/\n }, 200);\n\n /* var dragEnter = function (evt) {\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n $timeout(function () {\n MediaInnerScope.isOver = true;\n });\n $timeout(function () {\n MediaInnerScope.errors.upload = '';\n });\n };\n\n var dragLeave = function (evt) {\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n $timeout(function () {\n MediaInnerScope.isOver = false;\n });\n $timeout(function () {\n MediaInnerScope.errors.upload = '';\n });\n };\n\n var dragOver = function (evt) {\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n $timeout(function () {\n MediaInnerScope.errors.upload = '';\n });\n\n var ok = evt.originalEvent.dataTransfer\n && evt.originalEvent.dataTransfer.types\n && evt.originalEvent.dataTransfer.types.indexOf('Files') >= 0;\n\n if (!ok) {\n $timeout(function () {\n MediaInnerScope.errors.upload = 'Your browser does not support this feature.
    please use \"Upload\"';\n });\n return;\n }\n };\n\n var dragDrop = function (evt) {\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n\n $timeout(function () {\n MediaInnerScope.errors.upload = '';\n });\n\n\n var ok = evt.originalEvent.dataTransfer\n && evt.originalEvent.dataTransfer.types\n && evt.originalEvent.dataTransfer.types.indexOf('Files') >= 0;\n\n if (!ok) {\n $timeout(function () {\n MediaInnerScope.errors.upload = 'Your browser does not support this feature.
    please use \"Upload\"';\n });\n return;\n }\n\n var files = evt.originalEvent.dataTransfer.files;\n\n if (!files.length) {\n $timeout(function () {\n MediaInnerScope.errors.upload = 'Choose one file';\n });\n return;\n }\n\n MediaInnerScope.tmpMedia.file = files[0];\n\n MediaInnerScope.uploadInProgress = true;\n MediaInnerScope.success.upload = false;\n ImportService.UploadToCloud(MediaInnerScope.tmpMedia.file, MediaInnerScope._progress_)\n .then(function (response) {\n MediaInnerScope._bar_.css({width: '0%'});\n MediaInnerScope.tmpMedia.source = response.Location;\n $timeout(function () {\n MediaInnerScope.uploadInProgress = false;\n MediaInnerScope.success.upload = 'Upload success. You can save result';\n MediaInnerScope.errors.upload = false;\n });\n }, function (reason) {\n MediaInnerScope._bar_.css({width: '0%'});\n $timeout(function () {\n MediaInnerScope.uploadInProgress = false;\n MediaInnerScope.errors.upload = 'Error during upload';\n });\n $rootScope.debugInfo(reason, 'silent');\n })\n .then(function () {\n MediaInnerScope._fileInput_.innerHTML = MediaInnerScope._fileInput_.innerHTML;\n });\n };*/\n\n MediaInnerScope.processMedia = function () {\n\n if (MediaInnerScope.tmpMedia.source) {\n if (MediaInnerScope.tmpMedia.type === 'media_stream') {\n var ext = MediaInnerScope.tmpMedia.source.split('/').pop().split('.').pop();\n\n if (ext === 'mpd') {\n MediaInnerScope.tmpMedia.template.type = MediaInnerScope.isLive ? 'dash_live' : 'dash';\n } else if (ext === 'm3u8') {\n MediaInnerScope.tmpMedia.template.type = MediaInnerScope.isLive ? 'hls_live' : 'hls';\n } else if (ext === 'ts' && MediaInnerScope.isLive) {\n MediaInnerScope.tmpMedia.template.type = 'dvb';\n } else {\n MediaInnerScope.tmpMedia.template.type = MediaInnerScope.isLive ? 'hls_live' : 'hls';\n }\n }\n if (MediaInnerScope.tmpMedia.type === 'youtube_stream') {\n MediaInnerScope.tmpMedia.template.type = 'youtube';\n }\n if (MediaInnerScope.tmpMedia.type === 'shoutcast_stream') {\n MediaInnerScope.tmpMedia.template.type = 'shoutcast';\n MediaInnerScope.tmpMedia.template.deploymentStrategy = \"passthrough\";\n MediaInnerScope.tmpMedia.deploymentStrategy = \"passthrough\";\n }\n\n MediaInnerScope.tmpMedia = _.merge(MediaInnerScope.tmpMedia, service._STREAM_TYPES_ATTRS[MediaInnerScope.tmpMedia.template.type]);\n\n if (type === 'trailer') {\n asset._PrivateData.trailersResources[MediaInnerScope.tmpMedia.template.type] = MediaInnerScope.tmpMedia;\n asset._PrivateData.trailersResources[MediaInnerScope.tmpMedia.template.type].strategy = 'NEW';\n } else {\n asset._PrivateData.streamsResources[MediaInnerScope.tmpMedia.template.type] = MediaInnerScope.tmpMedia;\n asset._PrivateData.streamsResources[MediaInnerScope.tmpMedia.template.type].strategy = 'NEW';\n }\n }\n\n $rootScope.$digest();\n };\n\n MediaInnerScope.window = ModalWindowService.Open({\n content: inner,\n clear: true,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Add',\n fn: MediaInnerScope.processMedia,\n check: function () {\n MediaInnerScope.errors = {};\n\n if (MediaInnerScope.loading) return false;\n\n if (MediaInnerScope.uploadInProgress) {\n MediaInnerScope.errors.upload = 'Wait until file upload finished';\n } else if (!MediaInnerScope.tmpMedia.source) {\n MediaInnerScope.errors.source = 'Source was not found. Try again.';\n }\n\n if (MediaInnerScope.tmpMedia.source) {\n if (MediaInnerScope.tmpMedia.type === 'media_stream') {\n var urlWithoutQuery = MediaInnerScope.tmpMedia.source.split('?')[0];\n var ext = urlWithoutQuery.split('/').pop().split('.').pop();\n\n if (['m3u8', 'ts', 'mpd'].indexOf(ext) === -1) {\n MediaInnerScope.errors.source = 'Unsupported stream format';\n }\n }\n\n if (MediaInnerScope.tmpMedia.type === 'youtube_stream') {\n if (MediaInnerScope.isLive) {\n\n if (!ValidatorService.YoutubeChannel(MediaInnerScope.tmpMedia.source) && !ValidatorService.YoutubeUser(MediaInnerScope.tmpMedia.source)) {\n MediaInnerScope.errors.source = 'Wrong Youtube channel or user: https://www.youtube.com/channel/xxxxxxxx or https://www.youtube.com/user/xxxxxxxx';\n }\n } else {\n\n if (!ValidatorService.YoutubeVideo(MediaInnerScope.tmpMedia.source)) {\n MediaInnerScope.errors.source = 'Wrong Youtube video: https://www.youtube.com/watch?v=xxxxxxx';\n }\n }\n }\n }\n\n return !_.size(MediaInnerScope.errors);\n }\n }\n ],\n size: {\n s: 10,\n l: 6\n }\n });\n\n inner.on('$destroy', function () {\n MediaInnerScope.$destroy();\n });\n\n return deferred.promise;\n };\n\n service.languages = {\n list: [\n { id: \"EN\", title: \"English\" },\n { id: \"DE\", title: \"German\" },\n { id: \"ES\", title: \"Spanish\" },\n { id: \"FR\", title: \"French\" },\n { id: \"IT\", title: \"Italian\" },\n { id: \"JA\", title: \"Japanese\" },\n { id: \"SV\", title: \"Swedish\" },\n { id: \"TR\", title: \"Turkish\" },\n // { id: \"AM\", title: \"Armenia\" },\n // { id: \"BY\", title: \"Belarus\" },\n // { id: \"EE\", title: \"Estonia\" },\n // { id: \"GE\", title: \"Georgia\" },\n //{ id: \"KG\", title: \"Kyrgyzstan\" },\n // { id: \"KZ\", title: \"Kazakhstan\" },\n // { id: \"LT\", title: \"Lithuania\" },\n // { id: \"LV\", title: \"Latvia\" },\n // { id: \"MD\", title: \"Moldova\" },\n { id: \"AZ\", title: \"Azerbaijan\" },\n { id: \"RU\", title: \"Russia\" },\n // { id: \"TJ\", title: \"Tajikistan\" },\n // { id: \"TM\", title: \"Turkmenistan\" },\n { id: \"UA\", title: \"Ukraine\" },\n { id: \"HE\", title: \"Hebrew\" },\n { id: \"HI\", title: \"Hindi\" },\n { id: \"ZH\", title: \"Chinese\" }\n // { id: \"UZ\", title: \"Uzbekistan\" }\n // { id: \"BY\", title: \"Belarus\" },\n ]\n };\n\n service.GetLocalization = function (meta, id) {\n var url = '/sdp/v2/' + meta + '/' + id + '/localizations';\n var deferred = $q.defer();\n lh.common.request.get(url)\n .then(function (response) {\n deferred.resolve(response);\n }, function (reason) {\n reason.url = url;\n reason.data = data;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n }\n\n service.PatchLocalization = function (meta, id, data) {\n var url = '/discovery:80' + '/sdp/v2/' + meta + '/' + id + '/localizations';\n var request = {};\n request.method = 'PUT';\n request.url = url;\n request.headers = {};\n request.headers['X-Auth-Token'] = lh.common.config.get('authToken');\n request.data = data;\n\n return $http(request);\n };\n\n return service;\n }]);\n","lmApp\n .service('SupervisorService', ['$q', 'ApiService',\n function ($q, ApiService) {\n var service = {};\n\n service.Self = function () {\n return ApiService.Request('1/self', 'GET');\n };\n\n service.Check = function (email, password) {\n var data = {\n email: email,\n password: password\n };\n\n return ApiService.Request('1/auth', 'POST', data)\n };\n\n return service;\n }]);\n","lmApp\n .service('ApiService', ['$q', '$http', function ($q, $http) {\n var service = {};\n\n var endpoint = '/supervisor:80/';\n\n var request = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n transformRequest: function (obj) {\n var str = [];\n for (var p in obj)\n str.push(encodeURIComponent(p) + \"=\" + encodeURIComponent(obj[p]));\n return str.join(\"&\");\n }\n };\n\n service.SetToken = function (token) {\n service.token = token;\n //$http.defaults.headers.common['X-Supervisor-Token'] = token;\n };\n\n service.Request = function (url, method, data) {\n var deferred = $q.defer();\n\n if (!url) {\n deferred.reject({\n result: 0,\n message: 'No URL found'\n });\n return;\n }\n\n request.url = endpoint + url;\n request.data = data;\n request.headers['X-Supervisor-Token'] = service.token;\n\n if (method) {\n request.method = method;\n } else {\n request.method = 'GET';\n }\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n if (answer.result) {\n deferred.resolve(answer);\n } else {\n answer.data = data;\n answer.url = url;\n deferred.reject(answer.error);\n }\n }, function (response) {\n var data = response.answer;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n console.log(data, status, headers, config);\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","/**\n * @ngdoc service\n * @name TimezoneService\n *\n */\nlmApp\n .service('TimezoneService', [function () {\n var service = {};\n\n service.addTimezoneToDate = function (dt, tz) {\n var date = new Date(dt);\n return new Date(date.getTime() + tz.offset * 60000);\n };\n\n service.Timezones = [\n {title: \"Africa/Abidjan\", offset: 0},\n {title: \"Africa/Accra\", offset: 0},\n {title: \"Africa/Addis_Ababa\", offset: 180},\n {title: \"Africa/Algiers\", offset: 60},\n {title: \"Africa/Asmara\", offset: 180},\n {title: \"Africa/Bamako\", offset: 0},\n {title: \"Africa/Bangui\", offset: 60},\n {title: \"Africa/Banjul\", offset: 0},\n {title: \"Africa/Bissau\", offset: 0},\n {title: \"Africa/Blantyre\", offset: 120},\n {title: \"Africa/Brazzaville\", offset: 60},\n {title: \"Africa/Bujumbura\", offset: 120},\n {title: \"Africa/Cairo\", offset: 120},\n {title: \"Africa/Casablanca\", offset: 60},\n {title: \"Africa/Ceuta\", offset: 60},\n {title: \"Africa/Conakry\", offset: 0},\n {title: \"Africa/Dakar\", offset: 0},\n {title: \"Africa/Dar_es_Salaam\", offset: 180},\n {title: \"Africa/Djibouti\", offset: 180},\n {title: \"Africa/Douala\", offset: 60},\n {title: \"Africa/El_Aaiun\", offset: 0},\n {title: \"Africa/Freetown\", offset: 0},\n {title: \"Africa/Gaborone\", offset: 120},\n {title: \"Africa/Harare\", offset: 120},\n {title: \"Africa/Johannesburg\", offset: 120},\n {title: \"Africa/Juba\", offset: 180},\n {title: \"Africa/Kampala\", offset: 180},\n {title: \"Africa/Khartoum\", offset: 120},\n {title: \"Africa/Kigali\", offset: 120},\n {title: \"Africa/Kinshasa\", offset: 60},\n {title: \"Africa/Lagos\", offset: 60},\n {title: \"Africa/Libreville\", offset: 60},\n {title: \"Africa/Lome\", offset: 0},\n {title: \"Africa/Luanda\", offset: 60},\n {title: \"Africa/Lubumbashi\", offset: 120},\n {title: \"Africa/Lusaka\", offset: 120},\n {title: \"Africa/Malabo\", offset: 60},\n {title: \"Africa/Maputo\", offset: 120},\n {title: \"Africa/Maseru\", offset: 120},\n {title: \"Africa/Mbabane\", offset: 120},\n {title: \"Africa/Mogadishu\", offset: 180},\n {title: \"Africa/Monrovia\", offset: 0},\n {title: \"Africa/Nairobi\", offset: 180},\n {title: \"Africa/Ndjamena\", offset: 60},\n {title: \"Africa/Niamey\", offset: 60},\n {title: \"Africa/Nouakchott\", offset: 0},\n {title: \"Africa/Ouagadougou\", offset: 0},\n {title: \"Africa/Porto-Novo\", offset: 60},\n {title: \"Africa/Sao_Tome\", offset: 0},\n {title: \"Africa/Timbuktu\", offset: 0},\n {title: \"Africa/Tripoli\", offset: 120},\n {title: \"Africa/Tunis\", offset: 60},\n {title: \"Africa/Windhoek\", offset: 120},\n {title: \"America/Adak\", offset: -600},\n {title: \"America/Anchorage\", offset: -540},\n {title: \"America/Anguilla\", offset: -240},\n {title: \"America/Antigua\", offset: -240},\n {title: \"America/Araguaina\", offset: -180},\n {title: \"America/Argentina/Buenos_Aires\", offset: -180},\n {title: \"America/Argentina/Catamarca\", offset: -180},\n {title: \"America/Argentina/ComodRivadavia\", offset: -180},\n {title: \"America/Argentina/Cordoba\", offset: -180},\n {title: \"America/Argentina/Jujuy\", offset: -180},\n {title: \"America/Argentina/La_Rioja\", offset: -180},\n {title: \"America/Argentina/Mendoza\", offset: -180},\n {title: \"America/Argentina/Rio_Gallegos\", offset: -180},\n {title: \"America/Argentina/Salta\", offset: -180},\n {title: \"America/Argentina/San_Juan\", offset: -180},\n {title: \"America/Argentina/San_Luis\", offset: -180},\n {title: \"America/Argentina/Tucuman\", offset: -180},\n {title: \"America/Argentina/Ushuaia\", offset: -180},\n {title: \"America/Aruba\", offset: -240},\n {title: \"America/Asuncion\", offset: -240},\n {title: \"America/Atikokan\", offset: -300},\n {title: \"America/Atka\", offset: -600},\n {title: \"America/Bahia\", offset: -180},\n {title: \"America/Bahia_Banderas\", offset: -360},\n {title: \"America/Barbados\", offset: -240},\n {title: \"America/Belem\", offset: -180},\n {title: \"America/Belize\", offset: -360},\n {title: \"America/Blanc-Sablon\", offset: -240},\n {title: \"America/Boa_Vista\", offset: -240},\n {title: \"America/Bogota\", offset: -300},\n {title: \"America/Boise\", offset: -420},\n {title: \"America/Buenos_Aires\", offset: -180},\n {title: \"America/Cambridge_Bay\", offset: -420},\n {title: \"America/Campo_Grande\", offset: -240},\n {title: \"America/Cancun\", offset: -300},\n {title: \"America/Caracas\", offset: -240},\n {title: \"America/Catamarca\", offset: -180},\n {title: \"America/Cayenne\", offset: -180},\n {title: \"America/Cayman\", offset: -300},\n {title: \"America/Chicago\", offset: -360},\n {title: \"America/Chihuahua\", offset: -420},\n {title: \"America/Coral_Harbour\", offset: -300},\n {title: \"America/Cordoba\", offset: -180},\n {title: \"America/Costa_Rica\", offset: -360},\n {title: \"America/Creston\", offset: -420},\n {title: \"America/Cuiaba\", offset: -240},\n {title: \"America/Curacao\", offset: -240},\n {title: \"America/Danmarkshavn\", offset: 0},\n {title: \"America/Dawson\", offset: -480},\n {title: \"America/Dawson_Creek\", offset: -420},\n {title: \"America/Denver\", offset: -420},\n {title: \"America/Detroit\", offset: -300},\n {title: \"America/Dominica\", offset: -240},\n {title: \"America/Edmonton\", offset: -420},\n {title: \"America/Eirunepe\", offset: -300},\n {title: \"America/El_Salvador\", offset: -360},\n {title: \"America/Ensenada\", offset: -480},\n {title: \"America/Fort_Nelson\", offset: -420},\n {title: \"America/Fort_Wayne\", offset: -300},\n {title: \"America/Fortaleza\", offset: -180},\n {title: \"America/Glace_Bay\", offset: -240},\n {title: \"America/Godthab\", offset: -180},\n {title: \"America/Goose_Bay\", offset: -240},\n {title: \"America/Grand_Turk\", offset: -240},\n {title: \"America/Grenada\", offset: -240},\n {title: \"America/Guadeloupe\", offset: -240},\n {title: \"America/Guatemala\", offset: -360},\n {title: \"America/Guayaquil\", offset: -300},\n {title: \"America/Guyana\", offset: -240},\n {title: \"America/Halifax\", offset: -240},\n {title: \"America/Havana\", offset: -300},\n {title: \"America/Hermosillo\", offset: -420},\n {title: \"America/Indiana/Indianapolis\", offset: -300},\n {title: \"America/Indiana/Knox\", offset: -360},\n {title: \"America/Indiana/Marengo\", offset: -300},\n {title: \"America/Indiana/Petersburg\", offset: -300},\n {title: \"America/Indiana/Tell_City\", offset: -360},\n {title: \"America/Indiana/Vevay\", offset: -300},\n {title: \"America/Indiana/Vincennes\", offset: -300},\n {title: \"America/Indiana/Winamac\", offset: -300},\n {title: \"America/Indianapolis\", offset: -300},\n {title: \"America/Inuvik\", offset: -420},\n {title: \"America/Iqaluit\", offset: -300},\n {title: \"America/Jamaica\", offset: -300},\n {title: \"America/Jujuy\", offset: -180},\n {title: \"America/Juneau\", offset: -540},\n {title: \"America/Kentucky/Louisville\", offset: -300},\n {title: \"America/Kentucky/Monticello\", offset: -300},\n {title: \"America/Knox_IN\", offset: -360},\n {title: \"America/Kralendijk\", offset: -240},\n {title: \"America/La_Paz\", offset: -240},\n {title: \"America/Lima\", offset: -300},\n {title: \"America/Los_Angeles\", offset: -480},\n {title: \"America/Louisville\", offset: -300},\n {title: \"America/Lower_Princes\", offset: -240},\n {title: \"America/Maceio\", offset: -180},\n {title: \"America/Managua\", offset: -360},\n {title: \"America/Manaus\", offset: -240},\n {title: \"America/Marigot\", offset: -240},\n {title: \"America/Martinique\", offset: -240},\n {title: \"America/Matamoros\", offset: -360},\n {title: \"America/Mazatlan\", offset: -420},\n {title: \"America/Mendoza\", offset: -180},\n {title: \"America/Menominee\", offset: -360},\n {title: \"America/Merida\", offset: -360},\n {title: \"America/Metlakatla\", offset: -540},\n {title: \"America/Mexico_City\", offset: -360},\n {title: \"America/Miquelon\", offset: -180},\n {title: \"America/Moncton\", offset: -240},\n {title: \"America/Monterrey\", offset: -360},\n {title: \"America/Montevideo\", offset: -180},\n {title: \"America/Montreal\", offset: -300},\n {title: \"America/Montserrat\", offset: -240},\n {title: \"America/Nassau\", offset: -300},\n {title: \"America/New_York\", offset: -300},\n {title: \"America/Nipigon\", offset: -300},\n {title: \"America/Nome\", offset: -540},\n {title: \"America/Noronha\", offset: -120},\n {title: \"America/North_Dakota/Beulah\", offset: -360},\n {title: \"America/North_Dakota/Center\", offset: -360},\n {title: \"America/North_Dakota/New_Salem\", offset: -360},\n {title: \"America/Ojinaga\", offset: -420},\n {title: \"America/Panama\", offset: -300},\n {title: \"America/Pangnirtung\", offset: -300},\n {title: \"America/Paramaribo\", offset: -180},\n {title: \"America/Phoenix\", offset: -420},\n {title: \"America/Port-au-Prince\", offset: -300},\n {title: \"America/Port_of_Spain\", offset: -240},\n {title: \"America/Porto_Acre\", offset: -300},\n {title: \"America/Porto_Velho\", offset: -240},\n {title: \"America/Puerto_Rico\", offset: -240},\n {title: \"America/Punta_Arenas\", offset: -180},\n {title: \"America/Rainy_River\", offset: -360},\n {title: \"America/Rankin_Inlet\", offset: -360},\n {title: \"America/Recife\", offset: -180},\n {title: \"America/Regina\", offset: -360},\n {title: \"America/Resolute\", offset: -360},\n {title: \"America/Rio_Branco\", offset: -300},\n {title: \"America/Rosario\", offset: -180},\n {title: \"America/Santa_Isabel\", offset: -480},\n {title: \"America/Santarem\", offset: -180},\n {title: \"America/Santiago\", offset: -240},\n {title: \"America/Santo_Domingo\", offset: -240},\n {title: \"America/Sao_Paulo\", offset: -180},\n {title: \"America/Scoresbysund\", offset: -60},\n {title: \"America/Shiprock\", offset: -420},\n {title: \"America/Sitka\", offset: -540},\n {title: \"America/St_Barthelemy\", offset: -240},\n {title: \"America/St_Johns\", offset: -210},\n {title: \"America/St_Kitts\", offset: -240},\n {title: \"America/St_Lucia\", offset: -240},\n {title: \"America/St_Thomas\", offset: -240},\n {title: \"America/St_Vincent\", offset: -240},\n {title: \"America/Swift_Current\", offset: -360},\n {title: \"America/Tegucigalpa\", offset: -360},\n {title: \"America/Thule\", offset: -240},\n {title: \"America/Thunder_Bay\", offset: -300},\n {title: \"America/Tijuana\", offset: -480},\n {title: \"America/Toronto\", offset: -300},\n {title: \"America/Tortola\", offset: -240},\n {title: \"America/Vancouver\", offset: -480},\n {title: \"America/Virgin\", offset: -240},\n {title: \"America/Whitehorse\", offset: -480},\n {title: \"America/Winnipeg\", offset: -360},\n {title: \"America/Yakutat\", offset: -540},\n {title: \"America/Yellowknife\", offset: -420},\n {title: \"Antarctica/Casey\", offset: 660},\n {title: \"Antarctica/Davis\", offset: 420},\n {title: \"Antarctica/DumontDUrville\", offset: 600},\n {title: \"Antarctica/Macquarie\", offset: 660},\n {title: \"Antarctica/Mawson\", offset: 300},\n {title: \"Antarctica/McMurdo\", offset: 720},\n {title: \"Antarctica/Palmer\", offset: -180},\n {title: \"Antarctica/Rothera\", offset: -180},\n {title: \"Antarctica/South_Pole\", offset: 720},\n {title: \"Antarctica/Syowa\", offset: 180},\n {title: \"Antarctica/Troll\", offset: 0},\n {title: \"Antarctica/Vostok\", offset: 360},\n {title: \"Arctic/Longyearbyen\", offset: 60},\n {title: \"Asia/Aden\", offset: 180},\n {title: \"Asia/Almaty\", offset: 360},\n {title: \"Asia/Amman\", offset: 120},\n {title: \"Asia/Anadyr\", offset: 720},\n {title: \"Asia/Aqtau\", offset: 300},\n {title: \"Asia/Aqtobe\", offset: 300},\n {title: \"Asia/Ashgabat\", offset: 300},\n {title: \"Asia/Ashkhabad\", offset: 300},\n {title: \"Asia/Atyrau\", offset: 300},\n {title: \"Asia/Baghdad\", offset: 180},\n {title: \"Asia/Bahrain\", offset: 180},\n {title: \"Asia/Baku\", offset: 240},\n {title: \"Asia/Bangkok\", offset: 420},\n {title: \"Asia/Barnaul\", offset: 420},\n {title: \"Asia/Beirut\", offset: 120},\n {title: \"Asia/Bishkek\", offset: 360},\n {title: \"Asia/Brunei\", offset: 480},\n {title: \"Asia/Calcutta\", offset: 330},\n {title: \"Asia/Chita\", offset: 540},\n {title: \"Asia/Choibalsan\", offset: 480},\n {title: \"Asia/Chongqing\", offset: 480},\n {title: \"Asia/Chungking\", offset: 480},\n {title: \"Asia/Colombo\", offset: 330},\n {title: \"Asia/Dacca\", offset: 360},\n {title: \"Asia/Damascus\", offset: 120},\n {title: \"Asia/Dhaka\", offset: 360},\n {title: \"Asia/Dili\", offset: 540},\n {title: \"Asia/Dubai\", offset: 240},\n {title: \"Asia/Dushanbe\", offset: 300},\n {title: \"Asia/Famagusta\", offset: 120},\n {title: \"Asia/Gaza\", offset: 120},\n {title: \"Asia/Harbin\", offset: 480},\n {title: \"Asia/Hebron\", offset: 120},\n {title: \"Asia/Ho_Chi_Minh\", offset: 420},\n {title: \"Asia/Hong_Kong\", offset: 480},\n {title: \"Asia/Hovd\", offset: 420},\n {title: \"Asia/Irkutsk\", offset: 480},\n {title: \"Asia/Istanbul\", offset: 180},\n {title: \"Asia/Jakarta\", offset: 420},\n {title: \"Asia/Jayapura\", offset: 540},\n {title: \"Asia/Jerusalem\", offset: 120},\n {title: \"Asia/Kabul\", offset: 270},\n {title: \"Asia/Kamchatka\", offset: 720},\n {title: \"Asia/Karachi\", offset: 300},\n {title: \"Asia/Kashgar\", offset: 360},\n {title: \"Asia/Kathmandu\", offset: 345},\n {title: \"Asia/Katmandu\", offset: 345},\n {title: \"Asia/Khandyga\", offset: 540},\n {title: \"Asia/Kolkata\", offset: 330},\n {title: \"Asia/Krasnoyarsk\", offset: 420},\n {title: \"Asia/Kuala_Lumpur\", offset: 480},\n {title: \"Asia/Kuching\", offset: 480},\n {title: \"Asia/Kuwait\", offset: 180},\n {title: \"Asia/Macao\", offset: 480},\n {title: \"Asia/Macau\", offset: 480},\n {title: \"Asia/Magadan\", offset: 660},\n {title: \"Asia/Makassar\", offset: 480},\n {title: \"Asia/Manila\", offset: 480},\n {title: \"Asia/Muscat\", offset: 240},\n {title: \"Asia/Novokuznetsk\", offset: 420},\n {title: \"Asia/Novosibirsk\", offset: 420},\n {title: \"Asia/Omsk\", offset: 360},\n {title: \"Asia/Oral\", offset: 300},\n {title: \"Asia/Phnom_Penh\", offset: 420},\n {title: \"Asia/Pontianak\", offset: 420},\n {title: \"Asia/Pyongyang\", offset: 540},\n {title: \"Asia/Qatar\", offset: 180},\n {title: \"Asia/Qyzylorda\", offset: 300},\n {title: \"Asia/Rangoon\", offset: 390},\n {title: \"Asia/Riyadh\", offset: 180},\n {title: \"Asia/Saigon\", offset: 420},\n {title: \"Asia/Sakhalin\", offset: 660},\n {title: \"Asia/Samarkand\", offset: 300},\n {title: \"Asia/Seoul\", offset: 540},\n {title: \"Asia/Shanghai\", offset: 480},\n {title: \"Asia/Singapore\", offset: 480},\n {title: \"Asia/Srednekolymsk\", offset: 660},\n {title: \"Asia/Taipei\", offset: 480},\n {title: \"Asia/Tashkent\", offset: 300},\n {title: \"Asia/Tbilisi\", offset: 240},\n {title: \"Asia/Tehran\", offset: 210},\n {title: \"Asia/Tel_Aviv\", offset: 120},\n {title: \"Asia/Thimbu\", offset: 360},\n {title: \"Asia/Thimphu\", offset: 360},\n {title: \"Asia/Tokyo\", offset: 540},\n {title: \"Asia/Tomsk\", offset: 420},\n {title: \"Asia/Ujung_Pandang\", offset: 480},\n {title: \"Asia/Ulaanbaatar\", offset: 480},\n {title: \"Asia/Ulan_Bator\", offset: 480},\n {title: \"Asia/Urumqi\", offset: 360},\n {title: \"Asia/Ust-Nera\", offset: 600},\n {title: \"Asia/Vientiane\", offset: 420},\n {title: \"Asia/Vladivostok\", offset: 600},\n {title: \"Asia/Yakutsk\", offset: 540},\n {title: \"Asia/Yangon\", offset: 390},\n {title: \"Asia/Yekaterinburg\", offset: 300},\n {title: \"Asia/Yerevan\", offset: 240},\n {title: \"Atlantic/Azores\", offset: -60},\n {title: \"Atlantic/Bermuda\", offset: -240},\n {title: \"Atlantic/Canary\", offset: 0},\n {title: \"Atlantic/Cape_Verde\", offset: -60},\n {title: \"Atlantic/Faeroe\", offset: 0},\n {title: \"Atlantic/Faroe\", offset: 0},\n {title: \"Atlantic/Jan_Mayen\", offset: 60},\n {title: \"Atlantic/Madeira\", offset: 0},\n {title: \"Atlantic/Reykjavik\", offset: 0},\n {title: \"Atlantic/South_Georgia\", offset: -120},\n {title: \"Atlantic/St_Helena\", offset: 0},\n {title: \"Atlantic/Stanley\", offset: -180},\n {title: \"Australia/ACT\", offset: 600},\n {title: \"Australia/Adelaide\", offset: 570},\n {title: \"Australia/Brisbane\", offset: 600},\n {title: \"Australia/Broken_Hill\", offset: 570},\n {title: \"Australia/Canberra\", offset: 600},\n {title: \"Australia/Currie\", offset: 600},\n {title: \"Australia/Darwin\", offset: 570},\n {title: \"Australia/Eucla\", offset: 525},\n {title: \"Australia/Hobart\", offset: 600},\n {title: \"Australia/LHI\", offset: 630},\n {title: \"Australia/Lindeman\", offset: 600},\n {title: \"Australia/Lord_Howe\", offset: 630},\n {title: \"Australia/Melbourne\", offset: 600},\n {title: \"Australia/North\", offset: 570},\n {title: \"Australia/NSW\", offset: 600},\n {title: \"Australia/Perth\", offset: 480},\n {title: \"Australia/Queensland\", offset: 600},\n {title: \"Australia/South\", offset: 570},\n {title: \"Australia/Sydney\", offset: 600},\n {title: \"Australia/Tasmania\", offset: 600},\n {title: \"Australia/Victoria\", offset: 600},\n {title: \"Australia/West\", offset: 480},\n {title: \"Australia/Yancowinna\", offset: 570},\n {title: \"Brazil/Acre\", offset: -300},\n {title: \"Brazil/DeNoronha\", offset: -120},\n {title: \"Brazil/East\", offset: -180},\n {title: \"Brazil/West\", offset: -240},\n {title: \"Canada/Atlantic\", offset: -240},\n {title: \"Canada/Central\", offset: -360},\n {title: \"Canada/Eastern\", offset: -300},\n {title: \"Canada/Mountain\", offset: -420},\n {title: \"Canada/Newfoundland\", offset: -210},\n {title: \"Canada/Pacific\", offset: -480},\n {title: \"Canada/Saskatchewan\", offset: -360},\n {title: \"Canada/Yukon\", offset: -480},\n {title: \"CET\", offset: 60},\n {title: \"Chile/Continental\", offset: -240},\n {title: \"Chile/EasterIsland\", offset: -360},\n {title: \"CST6CDT\", offset: -360},\n {title: \"Cuba\", offset: -300},\n {title: \"EET\", offset: 120},\n {title: \"Egypt\", offset: 120},\n {title: \"Eire\", offset: 0},\n {title: \"EST\", offset: -300},\n {title: \"EST5EDT\", offset: -300},\n {title: \"Etc/GMT\", offset: 0},\n {title: \"Etc/GMT+0\", offset: 0},\n {title: \"Etc/GMT+1\", offset: -60},\n {title: \"Etc/GMT+10\", offset: -600},\n {title: \"Etc/GMT+11\", offset: -660},\n {title: \"Etc/GMT+12\", offset: -720},\n {title: \"Etc/GMT+2\", offset: -120},\n {title: \"Etc/GMT+3\", offset: -180},\n {title: \"Etc/GMT+4\", offset: -240},\n {title: \"Etc/GMT+5\", offset: -300},\n {title: \"Etc/GMT+6\", offset: -360},\n {title: \"Etc/GMT+7\", offset: -420},\n {title: \"Etc/GMT+8\", offset: -480},\n {title: \"Etc/GMT+9\", offset: -540},\n {title: \"Etc/GMT-0\", offset: 0},\n {title: \"Etc/GMT-1\", offset: 60},\n {title: \"Etc/GMT-10\", offset: 600},\n {title: \"Etc/GMT-11\", offset: 660},\n {title: \"Etc/GMT-12\", offset: 720},\n {title: \"Etc/GMT-13\", offset: 780},\n {title: \"Etc/GMT-14\", offset: 840},\n {title: \"Etc/GMT-2\", offset: 120},\n {title: \"Etc/GMT-3\", offset: 180},\n {title: \"Etc/GMT-4\", offset: 240},\n {title: \"Etc/GMT-5\", offset: 300},\n {title: \"Etc/GMT-6\", offset: 360},\n {title: \"Etc/GMT-7\", offset: 420},\n {title: \"Etc/GMT-8\", offset: 480},\n {title: \"Etc/GMT-9\", offset: 540},\n {title: \"Etc/GMT0\", offset: 0},\n {title: \"Etc/Greenwich\", offset: 0},\n {title: \"Etc/UCT\", offset: 0},\n {title: \"Etc/Universal\", offset: 0},\n {title: \"Etc/UTC\", offset: 0},\n {title: \"Etc/Zulu\", offset: 0},\n {title: \"Europe/Amsterdam\", offset: 60},\n {title: \"Europe/Andorra\", offset: 60},\n {title: \"Europe/Astrakhan\", offset: 240},\n {title: \"Europe/Athens\", offset: 120},\n {title: \"Europe/Belfast\", offset: 0},\n {title: \"Europe/Belgrade\", offset: 60},\n {title: \"Europe/Berlin\", offset: 60},\n {title: \"Europe/Bratislava\", offset: 60},\n {title: \"Europe/Brussels\", offset: 60},\n {title: \"Europe/Bucharest\", offset: 120},\n {title: \"Europe/Budapest\", offset: 60},\n {title: \"Europe/Busingen\", offset: 60},\n {title: \"Europe/Chisinau\", offset: 120},\n {title: \"Europe/Copenhagen\", offset: 60},\n {title: \"Europe/Dublin\", offset: 0},\n {title: \"Europe/Gibraltar\", offset: 60},\n {title: \"Europe/Guernsey\", offset: 0},\n {title: \"Europe/Helsinki\", offset: 120},\n {title: \"Europe/Isle_of_Man\", offset: 0},\n {title: \"Europe/Istanbul\", offset: 180},\n {title: \"Europe/Jersey\", offset: 0},\n {title: \"Europe/Kaliningrad\", offset: 120},\n {title: \"Europe/Kiev\", offset: 120},\n {title: \"Europe/Kirov\", offset: 180},\n {title: \"Europe/Lisbon\", offset: 0},\n {title: \"Europe/Ljubljana\", offset: 60},\n {title: \"Europe/London\", offset: 0},\n {title: \"Europe/Luxembourg\", offset: 60},\n {title: \"Europe/Madrid\", offset: 60},\n {title: \"Europe/Malta\", offset: 60},\n {title: \"Europe/Mariehamn\", offset: 120},\n {title: \"Europe/Minsk\", offset: 180},\n {title: \"Europe/Monaco\", offset: 60},\n {title: \"Europe/Moscow\", offset: 180},\n {title: \"Europe/Nicosia\", offset: 120},\n {title: \"Europe/Oslo\", offset: 60},\n {title: \"Europe/Paris\", offset: 60},\n {title: \"Europe/Podgorica\", offset: 60},\n {title: \"Europe/Prague\", offset: 60},\n {title: \"Europe/Riga\", offset: 120},\n {title: \"Europe/Rome\", offset: 60},\n {title: \"Europe/Samara\", offset: 240},\n {title: \"Europe/San_Marino\", offset: 60},\n {title: \"Europe/Sarajevo\", offset: 60},\n {title: \"Europe/Saratov\", offset: 240},\n {title: \"Europe/Simferopol\", offset: 180},\n {title: \"Europe/Skopje\", offset: 60},\n {title: \"Europe/Sofia\", offset: 120},\n {title: \"Europe/Stockholm\", offset: 60},\n {title: \"Europe/Tallinn\", offset: 120},\n {title: \"Europe/Tirane\", offset: 60},\n {title: \"Europe/Tiraspol\", offset: 120},\n {title: \"Europe/Ulyanovsk\", offset: 240},\n {title: \"Europe/Uzhgorod\", offset: 120},\n {title: \"Europe/Vaduz\", offset: 60},\n {title: \"Europe/Vatican\", offset: 60},\n {title: \"Europe/Vienna\", offset: 60},\n {title: \"Europe/Vilnius\", offset: 120},\n {title: \"Europe/Volgograd\", offset: 240},\n {title: \"Europe/Warsaw\", offset: 60},\n {title: \"Europe/Zagreb\", offset: 60},\n {title: \"Europe/Zaporozhye\", offset: 120},\n {title: \"Europe/Zurich\", offset: 60},\n {title: \"GB\", offset: 0},\n {title: \"GB-Eire\", offset: 0},\n {title: \"GMT\", offset: 0},\n {title: \"GMT+0\", offset: 0},\n {title: \"GMT0\", offset: 0},\n {title: \"GMT-0\", offset: 0},\n {title: \"Greenwich\", offset: 0},\n {title: \"Hongkong\", offset: 480},\n {title: \"HST\", offset: -600},\n {title: \"Iceland\", offset: 0},\n {title: \"Indian/Antananarivo\", offset: 180},\n {title: \"Indian/Chagos\", offset: 360},\n {title: \"Indian/Christmas\", offset: 420},\n {title: \"Indian/Cocos\", offset: 390},\n {title: \"Indian/Comoro\", offset: 180},\n {title: \"Indian/Kerguelen\", offset: 300},\n {title: \"Indian/Mahe\", offset: 240},\n {title: \"Indian/Maldives\", offset: 300},\n {title: \"Indian/Mauritius\", offset: 240},\n {title: \"Indian/Mayotte\", offset: 180},\n {title: \"Indian/Reunion\", offset: 240},\n {title: \"Iran\", offset: 210},\n {title: \"Israel\", offset: 120},\n {title: \"Jamaica\", offset: -300},\n {title: \"Japan\", offset: 540},\n {title: \"Kwajalein\", offset: 720},\n {title: \"Libya\", offset: 120},\n {title: \"MET\", offset: 60},\n {title: \"Mexico/BajaNorte\", offset: -480},\n {title: \"Mexico/BajaSur\", offset: -420},\n {title: \"Mexico/General\", offset: -360},\n {title: \"MST\", offset: -420},\n {title: \"MST7MDT\", offset: -420},\n {title: \"Navajo\", offset: -420},\n {title: \"NZ\", offset: 720},\n {title: \"NZ-CHAT\", offset: 765},\n {title: \"Pacific/Apia\", offset: 780},\n {title: \"Pacific/Auckland\", offset: 720},\n {title: \"Pacific/Bougainville\", offset: 660},\n {title: \"Pacific/Chatham\", offset: 765},\n {title: \"Pacific/Chuuk\", offset: 600},\n {title: \"Pacific/Easter\", offset: -360},\n {title: \"Pacific/Efate\", offset: 660},\n {title: \"Pacific/Enderbury\", offset: 780},\n {title: \"Pacific/Fakaofo\", offset: 780},\n {title: \"Pacific/Fiji\", offset: 720},\n {title: \"Pacific/Funafuti\", offset: 720},\n {title: \"Pacific/Galapagos\", offset: -360},\n {title: \"Pacific/Gambier\", offset: -540},\n {title: \"Pacific/Guadalcanal\", offset: 660},\n {title: \"Pacific/Guam\", offset: 600},\n {title: \"Pacific/Honolulu\", offset: -600},\n {title: \"Pacific/Johnston\", offset: -600},\n {title: \"Pacific/Kiritimati\", offset: 840},\n {title: \"Pacific/Kosrae\", offset: 660},\n {title: \"Pacific/Kwajalein\", offset: 720},\n {title: \"Pacific/Majuro\", offset: 720},\n {title: \"Pacific/Marquesas\", offset: -570},\n {title: \"Pacific/Midway\", offset: -660},\n {title: \"Pacific/Nauru\", offset: 720},\n {title: \"Pacific/Niue\", offset: -660},\n {title: \"Pacific/Norfolk\", offset: 660},\n {title: \"Pacific/Noumea\", offset: 660},\n {title: \"Pacific/Pago_Pago\", offset: -660},\n {title: \"Pacific/Palau\", offset: 540},\n {title: \"Pacific/Pitcairn\", offset: -480},\n {title: \"Pacific/Pohnpei\", offset: 660},\n {title: \"Pacific/Ponape\", offset: 660},\n {title: \"Pacific/Port_Moresby\", offset: 600},\n {title: \"Pacific/Rarotonga\", offset: -600},\n {title: \"Pacific/Saipan\", offset: 600},\n {title: \"Pacific/Samoa\", offset: -660},\n {title: \"Pacific/Tahiti\", offset: -600},\n {title: \"Pacific/Tarawa\", offset: 720},\n {title: \"Pacific/Tongatapu\", offset: 780},\n {title: \"Pacific/Truk\", offset: 600},\n {title: \"Pacific/Wake\", offset: 720},\n {title: \"Pacific/Wallis\", offset: 720},\n {title: \"Pacific/Yap\", offset: 600},\n {title: \"Poland\", offset: 60},\n {title: \"Portugal\", offset: 0},\n {title: \"PRC\", offset: 480},\n {title: \"PST8PDT\", offset: -480},\n {title: \"ROC\", offset: 480},\n {title: \"ROK\", offset: 540},\n {title: \"Singapore\", offset: 480},\n {title: \"Turkey\", offset: 180},\n {title: \"UCT\", offset: 0},\n {title: \"Universal\", offset: 0},\n {title: \"US/Alaska\", offset: -540},\n {title: \"US/Aleutian\", offset: -600},\n {title: \"US/Arizona\", offset: -420},\n {title: \"US/Central\", offset: -360},\n {title: \"US/East-Indiana\", offset: -300},\n {title: \"US/Eastern\", offset: -300},\n {title: \"US/Hawaii\", offset: -600},\n {title: \"US/Indiana-Starke\", offset: -360},\n {title: \"US/Michigan\", offset: -300},\n {title: \"US/Mountain\", offset: -420},\n {title: \"US/Pacific\", offset: -480},\n {title: \"US/Pacific-New\", offset: -480},\n {title: \"US/Samoa\", offset: -660},\n {title: \"UTC\", offset: 0},\n {title: \"W-SU\", offset: 180},\n {title: \"WET\", offset: 0},\n {title: \"Zulu\", offset: 0}\n ];\n\n return service;\n }]);\n","lmApp\n .service('ValidatorService', [\n function () {\n var service = {};\n\n var usernameRegExp = /^[a-z0-9_-]{3,16}$/;\n var emailRegExp = /^[а-яА-ЯёЁA-Za-z0-9\\.\\+_-]+@[а-яА-ЯёЁA-Za-z0-9\\._-]+\\.[а-яА-ЯёЁa-zA-Z]{2,4}$/;\n var urlRegExp = /^([a-z][a-z0-9\\*\\-\\.]*):\\/\\/(?:(?:(?:[\\w\\.\\-\\+!$&'\\(\\)*\\+,;=]|%[0-9a-f]{2})+:)*(?:[\\w\\.\\-\\+%!$&'\\(\\)*\\+,;=]|%[0-9a-f]{2})+@)?(?:(?:[a-z0-9\\-\\.]|%[0-9a-f]{2})+|(?:\\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\\]))(?::[0-9]+)?(?:[\\/|\\?](?:[\\w#!:\\.\\?\\+=&@!$'~*,;\\/\\(\\)\\[\\]\\-]|%[0-9a-f]{2})*)?$/;\n var passwordRegExp = /^[a-zA-Z0-9_-]{6,18}$/;\n var youtubeChannelRegExp = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com)\\/channel\\/(.*)$/;\n var youtubeUserRegExp = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com)\\/user\\/(.*)$/;\n var youtubeVideoRegExp = /^(?:https?:\\/\\/)?(?:m\\.|www\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))(.*)$/;\n var lettersReplace = /\\D+/g;\n var numerical = /^[0-9]+$/;\n var pinRegExp = /^[0-9]{4}$/;\n var ipAddressWithMaskRegExp = /^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}\\/\\d{1,2}$/;\n var ipAddressRegExp = /^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$/;\n\n service.youtubeChannelRegExp = youtubeChannelRegExp;\n service.youtubeUserRegExp = youtubeUserRegExp;\n service.youtubeVideoRegExp = youtubeVideoRegExp;\n\n service.Username = function (value) {\n return usernameRegExp.test(value.toString());\n };\n\n service.Email = function (value) {\n return emailRegExp.test(value.toString());\n };\n\n service.Url = function (value) {\n return urlRegExp.test(value.toString());\n };\n\n service.Password = function (value) {\n return passwordRegExp.test(value.toString());\n };\n\n service.YoutubeChannel = function (value) {\n return youtubeChannelRegExp.test(value.toString());\n };\n\n service.YoutubeUser = function (value) {\n return youtubeUserRegExp.test(value.toString());\n };\n\n service.YoutubeVideo = function (value) {\n return youtubeVideoRegExp.test(value.toString());\n };\n\n service.Numerical = function (value) {\n return !_.isArray(value) && (value - parseFloat(value) + 1) >= 0;\n };\n\n service.Undefined = function (value) {\n return _.isUndefined(value);\n };\n\n service.Logical = function (value) {\n return _.isBoolean(value);\n };\n\n service.Pin = function (value) {\n return pinRegExp.test(value.toString());\n };\n\n service.IPWithMask = function(value) {\n return ipAddressWithMaskRegExp.test(value.toString());\n };\n\n service.IP = function(value) {\n return ipAddressRegExp.test(value.toString());\n };\n\n return service;\n }]);\n","lmApp\n .service('URLService', [\n function () {\n var service = {};\n\n service.parseURL = function(url) {\n var q = url ? url.indexOf(\"?\") : -1;\n if (q === -1)\n return {\n url: url,\n params: []\n };\n\n var search = url.substr(q+1);\n var h = search.lastIndexOf(\"#\");\n if (h !== -1)\n search = search.substr(0, h);\n\n if (!search)\n return {\n url: url,\n params: []\n };\n\n return {\n url: url.substring(0, q),\n params: this.parseURLEncodedTextArray(search)\n };\n };\n\n service.parseURLEncodedTextArray = function(text) {\n var params = [];\n\n text = text.replace(/\\+/g, \" \");\n\n var args = text.split(\"&\");\n for (var i = 0; i < args.length; ++i) {\n try {\n var parts = args[i].split(\"=\");\n if (parts.length === 2) {\n params.push({name: decodeURIComponent(parts[0]), value: [decodeURIComponent(parts[1])]});\n }\n else\n params.push({name: decodeURIComponent(parts[0]), value: [\"\"]});\n }\n catch (e) {\n console.log(\"parseURLEncodedTextArray exception \", e);\n }\n }\n\n params.sort(function(a, b) { return a.name <= b.name ? -1 : 1; });\n return params;\n };\n\n service.joinURLParams = function(params) {\n var args = [];\n for (var i = 0; i < params.length; ++i) {\n var name = encodeURIComponent(params[i].name);\n var value = encodeURIComponent(params[i].value);\n args.push(name + '=' + value);\n }\n var text = args.join(\"&\");\n return text.replace(\" \", \"+\");\n };\n\n return service;\n }]);\n","lmApp\n .service('VirtualLiveApiService', ['$q', '$http', function ($q, $http) {\n var service = {};\n\n var endpoint = '/discovery:80/vlive';\n\n service.SetToken = function (token) {\n service.token = token;\n //$http.defaults.headers.common['X-Supervisor-Token'] = token;\n };\n\n var JSONRequest = {\n headers: {\n 'Content-Type': 'application/json'\n }\n };\n\n var PlainRequest = {\n headers: {\n 'Content-Type': 'text/plain'\n }\n };\n\n service.GetPlaylist = function (asset_id) {\n var deferred = $q.defer();\n\n lh.common.request.get('/vlive/playlists/' + asset_id)\n .then(function (response) {\n deferred.resolve(response.playlist);\n\n }, function (reason) {\n reason.url = '/vlive/playlists/' + asset_id;\n deferred.reject(reason);\n });\n\n return deferred.promise;\n };\n\n service.SetPlaylist = function (asset_id, playlist) {\n var deferred = $q.defer();\n\n var request = JSONRequest;\n\n request.url = endpoint + '/playlists/'+ asset_id + '/groups';\n request.data = (playlist || []).map(function (item) {\n var data;\n\n data = {\n type: item.type,\n items: item.items.map(function (item) {\n return {\n id: item.id,\n ads: item.ads\n }\n })\n };\n\n if (item.name) data.name = item.name;\n if (item.description) data.description = item.description;\n if (item.poster) data.poster = item.poster;\n\n return data;\n });\n\n request.headers['X-Auth-Token'] = lh.common.config.get('authToken');\n\n request.method = 'PUT';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n if (answer.result) {\n deferred.resolve(answer);\n } else {\n answer.data = request.data;\n answer.url = endpoint + '/v1/playlists/'+ asset_id + '/groups';\n deferred.reject(answer.error);\n }\n }, function (response) {\n var data = response.answer;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n service.SetStartTime = function (asset_id, startTime) {\n var deferred = $q.defer();\n\n var request = PlainRequest;\n\n request.url = endpoint + '/playlists/'+ asset_id + '/start-time';\n request.data = startTime || moment.utc();\n\n request.headers['X-Auth-Token'] = lh.common.config.get('authToken');\n\n request.method = 'PUT';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n if (answer.result) {\n deferred.resolve(answer);\n } else {\n answer.data = request.data;\n answer.url = endpoint + '/playlists/'+ asset_id + '/start-time';\n deferred.reject(answer.error);\n }\n }, function (response) {\n var data = response.answer;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n service.Request = function (url, method, data) {\n var deferred = $q.defer();\n\n if (!url) {\n deferred.reject({\n result: 0,\n message: 'No URL found'\n });\n return;\n }\n\n request.url = endpoint + url;\n request.data = data;\n request.headers['X-Supervisor-Token'] = service.token;\n\n if (method) {\n request.method = method;\n } else {\n request.method = 'GET';\n }\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n if (answer.result) {\n deferred.resolve(answer);\n } else {\n answer.data = data;\n answer.url = url;\n deferred.reject(answer.error);\n }\n }, function (response) {\n var data = response.answer;\n var status = response.status;\n var headers = response.headers;\n var config = response.config;\n\n console.log(data, status, headers, config);\n deferred.reject(data);\n });\n\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp\n .service('YoutubeService', ['$rootScope', '$templateCache', '$compile', '$q', '$timeout', '$http', 'AssetService', 'MetadataService', 'ModalWindowService', 'ToastService', 'ValidatorService',\n function ($rootScope, $templateCache, $compile, $q, $timeout, $http, AssetService, MetadataService, ModalWindowService, ToastService, ValidatorService) {\n var service = {};\n /**\n * Fetch data from IMDB\n * @param stream\n * @param assetType\n * @param $scope\n */\n service.FetchFromYoutube = function ($scope, stream, assetType) {\n var youtubeInnerScope = $scope.$new(true);\n\n youtubeInnerScope.searchField = stream.streamNew || stream.source || '';\n youtubeInnerScope.youtubeCollection = [];\n\n youtubeInnerScope.isSelected = function (index) {\n return index === youtubeInnerScope.selected.index;\n };\n\n youtubeInnerScope.selectItem = function (channel, index) {\n youtubeInnerScope.selected = channel;\n youtubeInnerScope.selected.index = index;\n };\n\n youtubeInnerScope.searchFromYoutube = function (channel) {\n if (!channel) return;\n youtubeInnerScope.youtubeCollection = [];\n\n var url;\n var isYoutube = false;\n var type = '';\n var userlId = null;\n var channelId = null;\n var videoId = null;\n\n if (assetType === 'channel') {\n\n if (ValidatorService.youtubeChannelRegExp.test(channel)) {\n type = 'channel';\n channelId = channel.match(ValidatorService.youtubeChannelRegExp)[1];\n isYoutube = true;\n }\n if (ValidatorService.youtubeUserRegExp.test(channel)) {\n type = 'user';\n userlId = channel.match(ValidatorService.youtubeUserRegExp)[1];\n isYoutube = true;\n }\n } else {\n\n if (ValidatorService.youtubeVideoRegExp.test(channel)) {\n type = 'video';\n videoId = channel.match(ValidatorService.youtubeVideoRegExp)[1];\n isYoutube = true;\n }\n }\n\n if (isYoutube) {\n youtubeInnerScope.loading = true;\n\n $rootScope.showLinearProgress('#fetcherLoader');\n\n if (type === 'user') {\n url = 'https://www.googleapis.com/youtube/v3/channels?part=id,snippet&forUsername= ' + userlId + '&key=AIzaSyA0IUlaOotw8UDNkqLRFXkTH37kPBmVrJg';\n }\n\n if (type === 'channel') {\n url = 'https://www.googleapis.com/youtube/v3/channels?part=id,snippet&id= ' + channelId + '&key=AIzaSyA0IUlaOotw8UDNkqLRFXkTH37kPBmVrJg';\n }\n\n if (type === 'video') {\n url = 'https://www.googleapis.com/youtube/v3/videos?part=id,snippet&id= ' + videoId + '&key=AIzaSyA0IUlaOotw8UDNkqLRFXkTH37kPBmVrJg';\n }\n\n $http.get(url)\n .then(function (res) {\n var response = res.data;\n\n youtubeInnerScope.loading = false;\n $rootScope.hideLinearProgress('#fetcherLoader');\n if (!response.items.length) {\n ToastService.Big({\n title: 'Searching for \"' + channel + '\"',\n text: 'No result for this URL',\n color: 'amber',\n icon: 'emoticon-sad'\n }, 60 * 1000);\n return;\n }\n\n if (response.items.length) {\n youtubeInnerScope.youtubeCollection = response.items.map(function (channel) {\n return {\n title: channel.snippet.title,\n description: channel.snippet.description,\n logo: channel.snippet.thumbnails.high.url,\n stream: youtubeInnerScope.searchField,\n id: channelId || userlId || videoId,\n date: moment(channel.snippet.publishedAt),\n type: type\n }\n });\n\n service.AutoFill($scope.assetData, youtubeInnerScope.youtubeCollection[0], $scope);\n }\n }, function (reason) {\n youtubeInnerScope.loading = false;\n $rootScope.hideLinearProgress('#fetcherLoader');\n youtubeInnerScope.youtubeCollection = [];\n });\n } else {\n\n var errorMsg = channel + '
    Wrong Youtube link.
    ' + (assetType === 'channel' ? 'Example #1: https://www.youtube.com/user/xxxxxxx
    Example #2: https://www.youtube.com/channel/xxxxxxxx'\n : 'Example: https://www.youtube.com/watch?v=xxxxxxx');\n\n ToastService.Big({\n title: 'Searching for',\n text: errorMsg,\n color: 'amber',\n icon: 'emoticon-sad'\n }, 60 * 1000);\n }\n\n };\n\n var inner = $templateCache.get('youtube-import.html');\n\n inner = $compile(inner)(youtubeInnerScope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n keyboard: true,\n actions: [\n {\n title: 'Import Selected',\n color: 'green',\n fn: function () {\n return youtubeInnerScope.searchFromYoutube(youtubeInnerScope.searchField);\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n size: {\n s: 10,\n l: 6\n }\n });\n };\n\n /**\n * Autofill data to asset\n */\n service.AutoFill = function (asset, data, $scope) {\n $scope.$parent.loading = true;\n $rootScope.showLinearProgress('#modalLoader');\n\n if (data) {\n\n var description = data.description;\n if (description) {\n asset.description = asset.description || description;\n }\n\n var title = data.title;\n if (title) {\n asset.title = asset.title || title;\n }\n\n if (!asset._PrivateData.posterNew) {\n asset._PrivateData.posterNew = data.logo;\n asset._PrivateData.posterUrl = data.logo;\n }\n\n if (asset._PrivateData.streamsResources['youtube']) {\n asset._PrivateData.posterNew = data.logo;\n asset._PrivateData.posterUrl = data.logo;\n\n if (title) {\n asset.title = title;\n }\n\n if (description) {\n asset.description = description;\n }\n }\n\n asset._PrivateData.categoriesNew = [];\n if ($scope.categorySearch && asset.type === 'channel') asset._PrivateData.categoriesNew = $scope.categorySearch.filter(function (category) {\n return category.title === 'TV';\n });\n\n if (asset.type !== 'channel') {\n asset.year = data.date.format('YYYY');\n }\n\n asset._PrivateData.streamsResources['youtube'] = {\n streamUrl: '',\n streamResourceId: null,\n title: MetadataService._STREAM_TYPES_ATTRS['youtube'].title || 'Unknown',\n placeholder: MetadataService._STREAM_TYPES_ATTRS['youtube'].placeholder || 'Unknown format',\n streamOld: '',\n streamNew: '',\n toDelete: false,\n stream_type: 'youtube',\n type: 'youtube_stream'\n };\n\n asset._PrivateData.streamsResources['youtube'].source = data.stream;\n\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n title: 'Import',\n text: 'Import from Youtube successfully finished. Check all fields before saving',\n color: 'green',\n icon: 'emoticon-happy'\n }, 10 * 60 * 1000);\n }\n };\n return service;\n }]);\n","lmApp.service('AdsResource', ['$resource', function ($resource) {\n\n return $resource('/discovery:80/sdp/v2/ads',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/ads?$expand=pictures(url),tags',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || []);\n }\n },\n add: {\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/ads/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/ads/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n }\n );\n}\n]);\n","lmApp.service('AdsService', [\n function () {\n var service = {};\n\n service.ValidateAd = function (ad) {\n ad._error = {};\n if (!ad.name) {\n ad._error.name = 'Required';\n }\n if (ad.pictures.filter(function (value) { return !value.source; }).length) {\n ad._error.pictures = 'Empty image';\n }\n if (ad._link_info.type === 'asset' && !ad._link_info.asset.id) {\n ad._error.assetLink = 'Required';\n }\n if (ad._link_info.type === 'external' && !ad._link_info.link) {\n ad._error.externalLink = 'Required';\n }\n return _.isEmpty(ad._error);\n };\n\n return service;\n }\n]);\n","lmApp.service('AssetResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/assets',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n if (result && result.data) return result.data;\n return [];\n }\n },\n count: {\n url: '/discovery:80/sdp/v2/assets/$count',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getStream: {\n url: '/discovery:80/sdp/v2/assets/:id/resources/:resourceId/url',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'X-Instance-Check': ''\n },\n params: {\n id: '@id',\n resourceId: '@resourceId'\n }\n },\n create: {\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/assets/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/assets/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getPackageAssets: {\n params: {\n id: '@id'\n },\n url: '/discovery:80/sdp/v2/assets/:id/package-assets',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n if (result && result.data) return result.data;\n return [];\n }\n },\n setPackageAssets: {\n url: '/discovery:80/sdp/v2/assets/:id/package-assets',\n method: 'PUT',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n createSeason: {\n url: '/discovery:80/sdp/v2/assets/:id/series-seasons',\n method: 'POST',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n createEpisode: {\n url: '/discovery:80/sdp/v2/assets/:id/season-episodes',\n method: 'POST',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n }\n );\n}]);\n","lmApp\n .service('AssetV2Service', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n var service = {};\n\n service.GetStream = function(assetId, resourceId, token) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Auth-Token': token,\n 'X-Instance-Check': ''\n }\n };\n request.url = '/discovery:80/sdp/v2/assets/' + assetId + '/resources/' + resourceId + '/url';\n request.method = 'GET';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = response.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n service.GetProtectedStream = function(assetId, resourceId, token) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Auth-Token': token,\n 'X-Instance-Check': ''\n }\n };\n request.url = '/discovery:80/sdp/v2/assets/' + assetId + '/resources/' + resourceId + '/playback-sessions';\n request.method = 'POST';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = response.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.service('AssetViewingEventResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/asset-viewing-events',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/asset-viewing-events?$expand=asset&$orderby=-id&$limit=:limit&$offset=:offset',\n params: {\n limit: 20,\n offset: 0\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n }\n );\n}]);","lmApp.service('CategoryResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/categories',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);","lmApp.service('ContentNodeResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/operators/me/content-nodes?$expand=node',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return result.data || [];\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/operators/me/content-nodes/:id',\n method: 'PUT',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n }\n );\n}]);\n","lmApp.service('CountryResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/countries',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);\n","lmApp.service('DeviceResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/devices',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/devices?$expand=platform',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n }\n );\n}]);","lmApp.service('DVRTasksResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/dvr-tasks',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/dvr-tasks?$expand=subscriber,live(resources),program',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n list: {\n url: '/discovery:80/sdp/v2/dvr-tasks',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/dvr-tasks/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n count: {\n url: '/discovery:80/sdp/v2/dvr-tasks/$count',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getHLSStream: {\n url: '/discovery:80/sdp/v2/dvr-tasks/:id/url',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'X-Instance-Check': ''\n },\n params: {\n id: '@id'\n }\n },\n getDashStream: {\n url: '/discovery:80/sdp/v2/dvr-tasks/:id/url?stream_format=dash',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'X-Instance-Check': ''\n },\n params: {\n id: '@id'\n }\n }\n });\n}]);\n","lmApp\n .service('DVRTaskService', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n var service = {};\n\n service.GetStream = function(id, token, streamFormat) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Auth-Token': token,\n 'X-Instance-Check': ''\n }\n };\n request.url = '/discovery:80/sdp/v2/dvr-tasks/' + id + '/url';\n if (streamFormat) {\n request.url += '?stream_format=' + streamFormat;\n }\n request.method = 'GET';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = request.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.service('EPGChannelResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/epg-channels',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);","lmApp.service('FavouritesResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/collection/subscriber.favorites.asset/query',\n null,\n {\n get: {\n url: '/discovery:80/collection/subscriber.favorites.asset/query',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp.service('GenreResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/genres',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);","lmApp.service('GeoIPRules', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/geoip-rules',\n null,\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n create: {\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/geoip-rules/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/geoip-rules/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp.service('GroupResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/groups',\n null,\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/groups/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp.service('LiveEventResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/live-events',\n null,\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n count: {\n url: '/discovery:80/sdp/v2/live-events/$count',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getHLSStream: {\n url: '/discovery:80/sdp/v2/live-events/:id/catchup-url',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'X-Instance-Check': ''\n },\n params: {\n id: '@id'\n }\n },\n getDashStream: {\n url: '/discovery:80/sdp/v2/live-events/:id/catchup-url?stream_format=dash',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'X-Instance-Check': ''\n },\n params: {\n id: '@id'\n }\n }\n });\n}]);\n","lmApp\n .service('LiveEventService', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n var service = {};\n\n service.GetStream = function(liveEventId, type, token) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Auth-Token': token,\n 'X-Instance-Check': ''\n }\n };\n\n request.url = '/discovery:80/sdp/v2/live-events/' + liveEventId + '/catchup-url?stream_format=' + type;\n request.method = 'GET';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = response.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n return service;\n }]);\n","lmApp.service('ManagerResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/managers',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return result.data || []\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/managers/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n transformRequest: function (data) {\n var body = _.pick(data, [\n 'first_name',\n 'last_name',\n 'ui_timezone'\n ]);\n return angular.toJson(body);\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n setPassword: {\n url: '/discovery:80/sdp/v2/managers/:id/commands/change-password',\n method: 'POST',\n params: {\n id: '@id'\n },\n transformRequest: function (data) {\n var params = [];\n for (var v in data)\n params.push(encodeURIComponent(v) + \"=\" + encodeURIComponent(data[v]));\n return params.join(\"&\")\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }\n }\n );\n}]);\n","lmApp.service('NPVRNodeResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/operators/me/npvr-nodes?$expand=node',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return result.data || [];\n }\n }\n }\n );\n}]);\n","/**\n * Created by\n * @author Art Yunishev\n * on 06.06.2016.\n */\n\nlmApp.service('OperatorRsc', ['$resource', function ($resource) {\n\n return $resource('/discovery:80/v2/sotalcloud-operator-registry/2/operators/me/:id',\n null,\n {\n query: {\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n method: 'PATCH',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getCurrentOperator: {\n url: '/discovery:80/sdp/v2/operators/me',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);","lmApp\n .service('OperatorService', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n var service = {};\n\n service.CheckToken = function (token) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Auth-Token': token,\n 'X-Instance-Check': ''\n }\n };\n request.url = '/discovery:80/sdp/v2/operators/me';\n request.method = 'GET';\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = request.data;\n deferred.reject(reason)\n });\n\n return deferred.promise;\n };\n\n service.GetToken = function(login, password) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Instance-Check': '',\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n };\n request.url = '/supervisor:80/1/auth';\n request.method = 'POST';\n request.data = transformRequest({\n 'email': login,\n 'password': password\n });\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = request.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n var transformRequest = function (data) {\n var params = [];\n for (var v in data)\n params.push(encodeURIComponent(v) + \"=\" + encodeURIComponent(data[v]));\n return params.join(\"&\")\n };\n\n return service;\n }]);\n","lmApp.service('OperatorResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/operators/me',\n null,\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getConfigHootko: {\n url: '/discovery:80/sdp/v2/operators/me/config/hootko',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n updateConfigHootko: {\n url: '/discovery:80/sdp/v2/operators/me/config/hootko',\n method: 'PUT',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp.service('PersonResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/persons',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n create: {\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n }\n );\n}]);\n","lmApp.service('Platforms', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/platforms',\n null,\n {\n get: {\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/platforms/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n });\n}]);\n","lmApp.service('ProviderResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/providers',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);\n","lmApp.service('RailResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/rails',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n if (result && result.data) return result.data;\n return [];\n }\n },\n getScreens: {\n url: '/discovery:80/sdp/v2/screens',\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n if (result && result.data) return result.data;\n return [];\n }\n },\n patchScreen: {\n url: '/discovery:80/sdp/v2/screens/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n createScreen: {\n url: '/discovery:80/sdp/v2/screens',\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n createRail: {\n url: '/discovery:80/sdp/v2/rails',\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n removeScreen: {\n url: '/discovery:80/sdp/v2/screens/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n patch: {\n url: '/discovery:80/sdp/v2/rails/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/rails/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n getRailContent: {\n params: {\n id: '@id'\n },\n url: '/discovery:80/sdp/v2/rails/:id/content?$expand=asset(*)',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n if (result && result.data) return result.data;\n return [];\n }\n },\n setPackageAssets: {\n url: '/discovery:80/sdp/v2/assets/:id/package-assets',\n method: 'PUT',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n }\n );\n}]);\n","lmApp.service('ReplicationResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/replications',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/replications?$expand=last_run',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n getRuns: {\n params: {\n '$limit': 100,\n '$offset': 0,\n '$orderby': '-id',\n id: '@id'\n },\n url: '/discovery:80/sdp/v2/replications/:id/runs',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n create: {\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/replications/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n syncNow: {\n url: '/discovery:80/sdp/v2/replications/:id/schedule-now',\n method: 'POST',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/replications/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n count: {\n url: '/discovery:80/sdp/v2/replications/$count',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp.service('SessionResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/sessions',\n null,\n {\n get: {\n params: {\n '$limit': 100,\n '$offset': 0\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);\n","lmApp.service('STBModelResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/stb-models',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || []).map(function (model) {\n return {\n id: model.id,\n name: model.name.toLowerCase()\n }\n })\n }\n },\n add: {\n method: 'POST',\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n transformRequest: function (data) {\n return angular.toJson(data);\n }\n }\n }\n );\n}]);","lmApp.service('StudioResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/studios',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n }\n }\n );\n}]);\n","/**\n * Created by\n * @author Art Yunishev\n * on 06.06.2016.\n */\n\nlmApp.service('SubscriberRsc', ['$resource', function ($resource) {\n\n return $resource('/discovery:80/v2/sotalcloud-authentication/2/accounts/:accountId/:action',\n null,\n {\n query: {\n method: 'GET',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n interceptor: {\n response: function(response) {\n return response.data.accounts;\n }\n }\n },\n take: {\n method: 'GET',\n params: {\n accountId : '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/subscribers/:subscriberId',\n method: 'PATCH',\n params: {\n subscriberId : '@id'\n },\n transformRequest: function (data) {\n return JSON.stringify({\n \"first_name\": data.first_name,\n \"last_name\": data.last_name,\n \"username\": data.username,\n \"address_country\": data.address.country,\n \"address_city\": data.address.city\n });\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n setPass: {\n method: 'PUT',\n params: {\n action: 'password',\n accountId : '@id'\n },\n isArray: false,\n transformRequest: function (data) {\n return data.password;\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n resetPass: {\n url: '/discovery:80/v2/sotalcloud-authentication/2/password-reset-requests',\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n setPin: {\n url: '/discovery:80/sdp/v2/subscribers/:subscriberId',\n method: 'PATCH',\n params: {\n subscriberId : '@id'\n },\n transformRequest: function (data) {\n return JSON.stringify({\n \"pc_pin\": data.pc_pin,\n });\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n });\n}]);\n","lmApp\n .service('SubscriberV2Service', ['$rootScope', '$q', '$http',\n function ($rootScope, $q, $http) {\n var service = {};\n\n service.GetUserDeviceToken = function(username, clientID) {\n var deferred = $q.defer();\n\n var request = {\n headers: {\n 'X-Instance-Check': '',\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n };\n request.url = '/discovery:80/sdp/v2/authorize';\n request.method = 'POST';\n request.data = transformRequest({\n 'username': username,\n 'client_id': clientID,\n 'grant_type': 'username',\n 'device_id': '123456789'\n });\n\n $http(request)\n .then(function (response) {\n var answer = response.data;\n deferred.resolve(answer);\n }, function (response) {\n var reason = {};\n reason.url = request.url;\n reason.data = request.data;\n deferred.reject(reason)\n });\n return deferred.promise;\n };\n\n var transformRequest = function (data) {\n var params = [];\n for (var v in data)\n params.push(encodeURIComponent(v) + \"=\" + encodeURIComponent(data[v]));\n return params.join(\"&\")\n };\n\n return service;\n }]);\n","lmApp.service('SubscriberResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/subscribers',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/subscribers?$expand=groups',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n create: {\n url: '/discovery:80/sdp/v2/subscribers',\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/subscribers/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n transformRequest: function (data) {\n var body = _.pick(data, [\n 'blocked',\n 'address_country',\n 'address_region',\n 'address_city',\n 'address_zipcode',\n 'address_line1',\n 'address_line2',\n 'first_name',\n 'last_name',\n 'contact_phone',\n 'contact_email',\n 'pc_pin',\n 'npvr_limit',\n 'playback_session_limit'\n ]);\n\n if (body.hasOwnProperty('npvr_limit')) body['npvr_limit'] = Number(body['npvr_limit']);\n if (body.hasOwnProperty('playback_session_limit')) body['playback_session_limit'] = Number(body['playback_session_limit']);\n if (data.hasOwnProperty('_groups')) body['groups'] = data['_groups'];\n\n return angular.toJson(body);\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n remove: {\n url: '/discovery:80/sdp/v2/subscribers/:id',\n method: 'DELETE',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n setPassword: {\n url: '/discovery:80/sdp/v2/subscribers/:id/commands/change-password',\n method: 'POST',\n params: {\n id: '@id'\n },\n transformRequest: function (data) {\n var params = [];\n for (var v in data)\n params.push(encodeURIComponent(v) + \"=\" + encodeURIComponent(data[v]));\n return params.join(\"&\")\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken'),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }\n });\n}]);\n","lmApp.service('SubscriptionResource', ['$resource', function ($resource) {\n return $resource('/sdp/v2/subscriptions',\n null,\n {\n get: {\n url: '/discovery:80/sdp/v2/subscriptions?$expand=plan,subscriber',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n cancelSubscription: {\n url: '/discovery:80/sdp/v2/billing-actions',\n method: 'POST',\n params: {},\n transformRequest: function (subscription) {\n return angular.toJson({\n type: \"cancel-subscription\",\n subscription: {id: subscription.id},\n plan: {id: subscription.plan.id},\n subscriber: {id: subscription.subscriber.id}\n });\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n create: {\n url: '/discovery:80/sdp/v2/subscriptions',\n method: 'POST',\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/subscriptions/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n },\n }\n );\n}]);","lmApp.service('SubscriptionPlanResource', ['$resource', function ($resource) {\n return $resource('/discovery:80/sdp/v2/subscription-plans',\n null,\n {\n get: {\n params: {},\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n },\n isArray: true,\n transformResponse: function (data) {\n var result = angular.fromJson(data);\n return (result.data || [])\n }\n },\n update: {\n url: '/discovery:80/sdp/v2/subscription-plans/:id',\n method: 'PATCH',\n params: {\n id: '@id'\n },\n headers: {\n 'X-Auth-Token': lh.common.config.get.bind(lh.common.config, 'authToken')\n }\n }\n }\n );\n}]);\n","lmApp\n .directive('lmAssetLocalization', [function () {\n return {\n restrict: 'E',\n scope: {\n asset: '='\n },\n replace: true,\n controller: 'LmAssetLocalizationController',\n templateUrl: 'lm-asset-localization/lm-asset-localization.html'\n };\n }]);\n\nlmApp\n .controller('LmAssetLocalizationController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'ModalWindowService', 'AssetService', 'IMDbService', 'ToastService', 'GroupService', 'OfferService', 'PlanService', 'PackageService', 'YoutubeService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, ModalWindowService, AssetService, IMDbService, ToastService, GroupService, OfferService, PlanService, PackageService, YoutubeService) {\n\n $scope.languages = MetadataService.languages;\n $scope.assetsLocalization = [];\n $scope.newLocalizationItem = { language: {}, title: '', description: '' };\n\n MetadataService.GetLocalization('assets', $scope.asset.id).then(function (response) {\n for (var localizationItem in response.data) {\n var language = _.find($scope.languages.list, { id: localizationItem });\n var localization = {};\n localization.language = language.title;\n localization.title = response.data[localizationItem].title;\n localization.description = response.data[localizationItem].description;\n $scope.assetsLocalization.push(localization);\n }\n });\n\n $scope.createLocalizationWindow = function (assetsLocalization, languages, newLocalizationItem) {\n $scope.freeLanguages = {};\n $scope.freeLanguages.list = [];\n languages.list.forEach(function (languageItem) {\n var localizationItem = _.find(assetsLocalization, { language: languageItem.title });\n if (!localizationItem) {\n $scope.freeLanguages.list.push(languageItem);\n }\n });\n\n $scope.newLocalizationWindow = $templateCache.get('add-asset-localization.html');\n $scope.newLocalizationWindow = $compile($scope.newLocalizationWindow)($scope);\n ModalWindowService.Open({\n content: $scope.newLocalizationWindow,\n size: {\n s: 6\n },\n actions: [\n {\n title: 'Create',\n color: 'lm',\n fn: function () {\n $scope.createNewLocalization(assetsLocalization, newLocalizationItem);\n },\n className: 'btn-ghost'\n },\n {\n title: 'Cancel',\n color: 'grey',\n className: 'btn-ghost'\n }\n ],\n keyboard: true\n });\n };\n\n $scope.createNewLocalization = function (assetsLocalization, newLocalizationItem) {\n if (newLocalizationItem.language.id && newLocalizationItem.title && newLocalizationItem.description) {\n var data = {};\n assetsLocalization.forEach(function (localizationItem) {\n var languageItem = _.find($scope.languages.list, { title: localizationItem.language });\n data[languageItem.id] = { title: localizationItem.title, description: localizationItem.description };\n });\n\n var addedLocalizationItem = {};\n addedLocalizationItem[newLocalizationItem.language.id] = { title: newLocalizationItem.title, description: newLocalizationItem.description }\n data = Object.assign(data, addedLocalizationItem);\n\n MetadataService.PatchLocalization('assets', $scope.asset.id, data).then(function () {\n var localization = {};\n localization.language = newLocalizationItem.language.title;\n localization.title = newLocalizationItem.title;\n localization.description = newLocalizationItem.description;\n assetsLocalization.push(localization);\n $scope.newLocalizationItem = { language: {}, title: '', description: '' };\n });\n }\n };\n\n $scope.deleteLocalizationItem = function (assetsLocalization, deletedIndex) {\n assetsLocalization.splice(deletedIndex, 1);\n var data = {};\n assetsLocalization.forEach(function (localizationItem) {\n var languageItem = _.find($scope.languages.list, { title: localizationItem.language });\n data[languageItem.id] = { title: localizationItem.title, description: localizationItem.description };\n });\n MetadataService.PatchLocalization('assets', $scope.asset.id, data);\n }\n\n }]);\n","\nlmApp\n .directive('lmCatchupPlayer', ['$rootScope', '$timeout', 'CatchupService',\n function ($rootScope, $timeout, CatchupService) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n event: '=',\n preview: '=',\n references: '=',\n playerData: '=?',\n correction: '=?'\n },\n link: function (scope, element, attrs) {\n scope.permissions = {\n allow: $rootScope.permissions.allow\n };\n scope._player_ = element.find('video#catchup_player');\n scope._frame_ = element.find('img#frame_image');\n scope._frame_.css({height: scope._player_.height()});\n scope._player_.on('resize', function () {\n scope._frame_.css({height: scope._player_.height()});\n });\n\n scope.player = scope._player_[0];\n\n scope.player.volume = 0.15;\n\n scope._CSS = {\n progressPrefix: {\n width: 0\n },\n progressPostfix: {\n width: 0\n },\n progressPlayed: {\n width: 0\n },\n progressBuffer: {\n width: 0\n },\n progressHr: {\n left: 0,\n 'padding-top': '.2em'\n },\n progressDetect: {\n left: 0,\n 'padding-top': '.2em'\n }\n };\n\n scope.playerData = {};\n scope.thumbnailGridWidth = 0;\n\n var toHHMMSS = function (input) {\n var sec_num = Math.abs(parseInt(input, 10));\n var hours = Math.floor(sec_num / 3600);\n var minutes = Math.floor((sec_num - (hours * 3600)) / 60);\n var seconds = sec_num - (hours * 3600) - (minutes * 60);\n\n if (hours < 10) {\n hours = '0' + hours;\n }\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n\n return (input < 0 ? '-' : '') + hours + ':' + minutes + ':' + seconds;\n };\n\n var _onCanPlay = function () {\n scope._playerReady = true;\n $timeout(function () {\n scope._progress_ = element.find('.catchup-player-navigation-progress');\n }, 350);\n };\n\n var _onLoadStart = function () {\n scope._playerReady = false;\n };\n\n var _onSeeking = function () {\n scope._playerSeeking = true;\n };\n\n var _onSeeked = function () {\n scope._playerSeeking = false;\n };\n\n var _onTimeUpdate = function () {\n if (!scope.total) return;\n\n $timeout(function () {\n scope._CSS.progressPlayed.width = scope.player.currentTime / scope.total * 100 + '%';\n scope.playerData.position = parseInt(scope.player.currentTime, 10);\n scope.playerData.time = toHHMMSS(scope.player.currentTime + scope.preview.window.from);\n }, 100);\n };\n\n var _onProgress = function () {\n if (!scope.total) return;\n\n $timeout(function () {\n if (scope.player.buffered.length) scope._CSS.progressBuffer.width = scope.player.buffered.end(scope.player.buffered.length - 1) / scope.total * 100 + '%';\n }, 100);\n };\n\n var _onVolumeChange = function () {\n scope.isMuted = scope.player.muted;\n };\n\n var _onPlay = function () {\n scope.isPlaing = true;\n };\n\n var _onPause = function () {\n scope.isPlaing = false;\n };\n\n var _onDurationChange = function () {\n if (!scope.preview) return;\n scope.total = scope.preview.window.to + scope.preview.window.from * (-1);\n\n $timeout(function () {\n scope._CSS.progressPrefix.width = (-1) * scope.preview.window.from * 100 / scope.total + '%';\n scope._CSS.progressPostfix.width = scope.preview.window.to * 100 / scope.total + '%';\n scope._CSS.progressHr.left = parseInt((-1) * scope.preview.window.from * 100 / scope.total, 10) + '%';\n scope._CSS.progressDetect.left = parseInt(((-1) * scope.preview.window.from + scope.correction) * 100 / scope.total, 10) + '%';\n if (!scope.correction) scope._CSS.progressDetect.display = 'none';\n scope.player.currentTime = Math.abs(scope.preview.window.from);\n }, 100);\n };\n\n scope.isReady = function () {\n return scope._playerReady;\n };\n\n scope.previewWatcher = scope.$watchCollection('preview', function (newValue, oldValue) {\n if (!_.isEmpty(newValue) && newValue._media) {\n if ((!oldValue && newValue._media) || newValue._media !== oldValue._media) scope.player.src = newValue._media;\n\n scope._window = {\n from: parseInt(newValue.window.from / 60, 10),\n to: parseInt(newValue.window.to / 60, 10)\n };\n }\n });\n\n scope.correctionWatcher = scope.$watch('correction', function (newValue, oldValue) {\n if (newValue !== oldValue && scope.preview) {\n scope._CSS.progressDetect.left = parseInt(((-1) * scope.preview.window.from + newValue) * 100 / scope.total, 10) + '%';\n if (newValue) {\n scope._CSS.progressDetect.display = 'block';\n } else {\n scope._CSS.progressDetect.display = 'none';\n }\n }\n });\n\n scope.play = function () {\n if (scope.isPlaing) {\n scope.player.pause();\n } else {\n scope.player.play();\n }\n };\n\n scope.seek = function (event) {\n if (event) {\n scope.player.currentTime = event.offsetX / scope._progress_.width() * scope.total;\n }\n };\n\n scope.jump = function (value, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (scope.player.currentTime + value < 0) return;\n\n if (scope.isPlaing) scope.player.pause();\n scope.player.currentTime += parseInt(value, 10);\n };\n\n scope.toggleMute = function () {\n scope.player.muted = !scope.player.muted;\n };\n\n var onImgLoad = function () {\n $timeout(function () {\n scope.loadingFrame = false;\n scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + scope.event.id);\n }, 100);\n scope._frame_.unbind('load', onImgLoad);\n };\n\n scope.getIt = function (event) {\n if (scope.isPlaing) scope.player.pause();\n\n scope.loadingFrame = true;\n scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader' + event.id);\n\n scope._frame_.bind('load', onImgLoad);\n\n scope.preview._frame = '';\n $timeout(function () {\n scope.preview._frame = CatchupService.GetCatchup2ReferenceFromMedia(event, scope.preview, scope.player.currentTime || 0);\n }, 100)\n };\n\n scope.createPreview = function (event) {\n scope.loading = true;\n $rootScope.showLinearProgress('#catchupLoader' + event.id);\n\n CatchupService.CreateCatchup2Preview(event)\n .then(function (result) {\n scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n\n event._PrivateData.catchup2.preview = result.preview;\n\n scope.$parent._checkPreviewInterval(event);\n })\n .catch(function (reason) {\n scope.loading = false;\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n\n $rootScope.debugInfo(reason);\n });\n };\n\n scope.setReferenceImg = function (event) {\n if (scope.loadingFrame) return;\n\n scope.loadingFrame = true;\n $rootScope.showLinearProgress('#catchupLoader' + event.id);\n\n CatchupService.SetCatchup2References(event, scope.preview._frame.replace(\n '/discovery:80', window.protocol + ':\\/\\/' + 'admin-ams.sotalcloud.com/discovery:80'\n //'/discovery:80', window.protocol + ':\\/\\/' + window.hostname\n ))\n .then(function (result) {\n scope.loadingFrame = false;\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n\n result.reference._url = CatchupService.GetCatchup2ReferenceImg(event, result.reference);\n event._PrivateData.catchup2.references.push(result.reference);\n }).catch(function (reason) {\n scope.loadingFrame = false;\n\n $rootScope.hideLinearProgress('#catchupLoader' + event.id);\n $rootScope.debugInfo(reason);\n });\n };\n\n var index = 0;\n var position = 0;\n var thumbnailPosition = {\n x:0,\n y:0\n };\n var invisibleImg;\n scope.seekTime = function (event) {\n if (event) {\n position = parseInt(event.offsetX, 10) / parseInt(scope._progress_.width(), 10) * scope.total;\n scope.playerData.overTime = toHHMMSS(position + scope.preview.window.from);\n\n scope.playerData.thumbnail = CatchupService.GetCatchup2ThumbnailImg(scope.event, scope.preview, index);\n\n if (!invisibleImg) {\n invisibleImg = angular.element('');\n invisibleImg[0].src = scope.playerData.thumbnail;\n invisibleImg.css({\n visibility: 'hidden',\n position: 'absolute',\n top: 0,\n left: 0,\n 'z-index': -1000\n });\n\n invisibleImg.appendTo('body');\n\n invisibleImg.one('load', function () {\n scope.thumbnailGridWidth = this.width / 10;\n });\n\n element.on('$destroy', function () {\n invisibleImg.remove();\n });\n }\n\n thumbnailPosition.x = Math.floor((position % 100) / 10) * scope.thumbnailGridWidth;\n thumbnailPosition.y = Math.floor(position / 100) * 45;\n\n scope._CSS.tumbnail = {\n height: '45px',\n 'background-image': 'url(\"' + scope.playerData.thumbnail + '\")',\n 'background-position': '-' + (Math.floor((position % 100) / 10) * scope.thumbnailGridWidth) + 'px ' + '-' + (Math.floor(position / 100) * 45) + 'px'\n };\n }\n };\n\n scope._player_.bind('loadstart', _onLoadStart);\n scope._player_.bind('seeking', _onSeeking);\n scope._player_.bind('seeked', _onSeeked);\n scope._player_.bind('canplay', _onCanPlay);\n scope._player_.bind('durationchange', _onDurationChange);\n scope._player_.bind('timeupdate', _onTimeUpdate);\n scope._player_.bind('progress', _onProgress);\n scope._player_.bind('play', _onPlay);\n scope._player_.bind('pause', _onPause);\n scope._player_.bind('volumechange', _onVolumeChange);\n\n element.on('$destroy', function () {\n if (scope.previewWatcher) scope.previewWatcher();\n if (scope.correctionWatcher) scope.correctionWatcher();\n scope._player_.remove();\n scope._player_.unbind('loadstart', _onLoadStart);\n scope._player_.unbind('seeking', _onSeeking);\n scope._player_.unbind('seeked', _onSeeked);\n scope._player_.unbind('canplay', _onCanPlay);\n scope._player_.unbind('durationchange', _onDurationChange);\n scope._player_.unbind('timeupdate', _onTimeUpdate);\n scope._player_.unbind('progress', _onProgress);\n scope._player_.unbind('play', _onPlay);\n scope._player_.unbind('pause', _onPause);\n scope._player_.unbind('volumechange', _onVolumeChange);\n });\n\n\n scope.toggleMute();\n },\n templateUrl: 'lm-catchup-player/lm-catchup-player.tpl.html'\n }\n }\n ]);\n","lmApp\n .service('ModalConfirmService', ['$rootScope', '$templateCache', '$compile', 'SupervisorService', 'ToastService',\n function ($rootScope, $templateCache, $compile, SupervisorService, ToastService) {\n\n var _onKeyDown = function (event) {\n var key = event.which;\n\n if (key === 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n Close($rootScope.confirmScope, false);\n\n return;\n }\n };\n\n var _confirm = function () {\n $rootScope.confirmScope.error = false;\n $rootScope.confirmScope.loading = true;\n $rootScope.showLinearProgress('#confirmationLoader');\n\n SupervisorService.Check($rootScope.globals.currentUser.username, $rootScope.confirmScope.passCheck)\n .then(function () {\n $rootScope.confirmScope.passCheck = '';\n\n if ($rootScope.confirmScope.action.fn)\n $rootScope.confirmScope.action.fn();\n\n Close($rootScope.confirmScope, true);\n\n $rootScope.confirmScope.loading = false;\n $rootScope.hideLinearProgress('#confirmationLoader');\n })\n .catch(function () {\n $rootScope.confirmScope.passCheck = '';\n $rootScope.confirmScope.error = true;\n $rootScope.confirmScope.loading = false;\n $rootScope.hideLinearProgress('#confirmationLoader');\n ToastService.Small({\n title: 'Wrong confirmation',\n color: 'deep-orange',\n icon: 'alert-circle'\n })\n })\n };\n\n /**\n *\n * @param options {\n * content: String,\n * action: {\n * title: String,\n * color: String,\n * fn: Function,\n * show_fn: Function\n * },\n * onInit: Function\n * onComplete: Function(result),\n * size: {\n * s: Number,\n * m: Number,\n * l: Number\n * },\n * isFixed: Boolean,\n * fixedHeight: Boolean,\n * keyboard: Boolean - close on keyboard events\n * clear: Boolean - with out padding,\n * mainFn: Function\n * @returns {*} $scope\n */\n var Open = function (options) {\n var modalScope = $rootScope.$new(false);\n\n modalScope.close = function () {\n Close(modalScope, false);\n };\n\n modalScope.confirm = _confirm;\n\n $rootScope.confirmScope = modalScope;\n\n modalScope.action = options.action;\n\n modalScope._confirm_element_ = $templateCache.get('lm-confirm-window/lm-confirm-window.tpl.html');\n\n modalScope._confirm_element_ = $compile(modalScope._confirm_element_)(modalScope);\n\n modalScope.overlay = angular.element('body').find('#lean-overlay');\n\n modalScope._confirm_element_.attr('id', 'id_' + Date.now());\n angular.element('#modal_container').append(modalScope._confirm_element_);\n\n angular.element('body').bind('keydown', _onKeyDown);\n\n if (options.size) modalScope.size = options.size;\n\n modalScope._confirm_element_.find('.modal-content').css({visibility: 'hidden'});\n if (options.content) {\n if (options.clear) {\n modalScope._confirm_element_.html(options.content);\n } else {\n modalScope._confirm_element_.find('.modal-content').html(options.content);\n }\n }\n\n if (options.keyboard) modalScope.isKeyevent = true;\n\n modalScope.clear = options.clear;\n\n if (options.onComplete) {\n modalScope.FinalCallback = options.onComplete;\n } else {\n modalScope.FinalCallback = function () {\n }\n }\n\n if (options.onInit) {\n modalScope.InitCallback = options.onInit;\n } else {\n modalScope.InitCallback = function () {\n }\n }\n\n if (options.isFixed) modalScope.isFixed = true;\n\n modalScope._confirm_element_.css({\n top: 10 - modalScope.depth * 2 + '%',\n 'z-index': 1000\n });\n\n TweenMax\n .from(modalScope._confirm_element_, 0.35, {\n top: '0px',\n ease: Expo.easeInOut,\n onComplete: function () {\n\n modalScope._confirm_element_.css({\n top: 10 + '%',\n display: 'block'\n });\n\n modalScope._confirm_element_.find('.modal-content').css({visibility: 'visible'});\n\n modalScope.InitCallback();\n }\n });\n\n TweenMax\n .to(modalScope.overlay, 0.35, {\n display: 'block',\n opacity: 0.8,\n ease: Expo.easeInOut\n });\n\n modalScope.offset = window.pageYOffset;\n\n angular.element('body').css({\n position: 'fixed',\n width: '100%',\n top: -modalScope.offset + 'px'\n });\n return modalScope;\n };\n\n var Close = function (modalScope, result) {\n if (!modalScope || !modalScope._confirm_element_) return;\n\n TweenMax\n .to(modalScope._confirm_element_, 0.45, {\n top: '-10%',\n ease: Expo.easeInOut,\n onComplete: function () {\n modalScope._confirm_element_.remove();\n angular.element('body').unbind('keydown', _onKeyDown);\n }\n });\n\n TweenMax\n .to(modalScope.overlay, 0.35, {\n display: 'none',\n ease: Expo.easeInOut\n });\n\n angular.element('body').removeAttr('style');\n angular.element(window).scrollTop(modalScope.offset);\n\n modalScope.FinalCallback(!!result);\n };\n\n // Public API\n return {\n Open: Open,\n Close: Close\n }\n }]);\n","lmApp.\n directive('lmDatepicker2', ['$compile', '$templateCache', 'KeyService',\n function ($compile, $templateCache, KeyService) {\n return {\n restrict: 'E',\n replace: false,\n scope: {\n ngModel: '=',\n placeholder: '@',\n icon: '@',\n ngDisabled: '=?'\n },\n link: function (scope, element, attrs) {\n scope._data_element_ = element;\n\n var watcher = scope.$watch('ngModel', function (newValue, oldValue) {\n scope.selectedMoment = _RemoveTime(newValue ? (moment.isMoment(newValue) ? newValue : (moment.utc(newValue * 1000))) : moment.utc());\n });\n\n /**\n * [EVENT HANDLER] Keyboard action\n * @param event\n * @private\n */\n var _OnKeyDown = function (event) {\n var key = event.which;\n\n if (key === KeyService.Keys.ESCAPE) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n _ClosePicker();\n return;\n }\n };\n\n /**\n * Set 00:00:00 for day\n * @param date\n * @returns {moment}\n * @private\n */\n var _RemoveTime = function (date) {\n return date.startOf('day');\n };\n\n /**\n * Build month from data.\n * @param start - from what date start building\n * @param month - for what month\n * @private\n */\n var _BuildMonth = function (start, month) {\n var weeks = [];\n var done = false;\n var date = start.clone();\n var monthIndex = date.month();\n var count = 0;\n while (!done) {\n weeks.push({days: _BuildWeek(date.clone(), month)});\n date.add(1, \"w\");\n done = count++ > 2 && monthIndex !== date.month();\n monthIndex = date.month();\n }\n scope.weeks = weeks;\n };\n\n /**\n * Build week for month\n * @param date - from what date start building\n * @param month - need to check is day from current month or not\n * @returns {Array.}\n * @private\n */\n var _BuildWeek = function (date, month) {\n var days = [];\n for (var i = 0; i < 7; i++) {\n days.push({\n name: date.format(\"dd\").substring(0, 1),\n number: date.date(),\n isCurrentMonth: date.month() === month.month(),\n isToday: date.isSame(new Date(), \"day\"),\n date: date\n });\n date = date.clone();\n date.add(1, \"d\");\n }\n return days;\n };\n\n /**\n * [DOM] Open data picker: get template, compile, append DOM\n * @private\n */\n var _OpenPicker = function () {\n if (scope.ngDisabled) return;\n\n angular.element('body').bind('keydown', _OnKeyDown);\n\n scope._picker_ = $templateCache.get('lm-datepicker/lm-datapicker.tpl.html');\n scope._picker_ = $compile(scope._picker_)(scope);\n\n scope._picker_.appendTo('body');\n scope.selectedMoment = _RemoveTime(scope.ngModel ? moment.utc(scope.ngModel) : moment.utc());\n\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n\n scope._empty_ = scope._picker_.find('#empty.empty_date');\n\n scope.removeOne = scope.$watch('selectedYear', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectYear(newVal);\n }\n });\n\n scope.removeTwo = scope.$watch('selectedMonth', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectMonth(newVal);\n }\n });\n\n scope.selects = {\n years: [],\n months: []\n };\n\n var count = moment.utc().format(\"YYYY\");\n count = moment.utc().year(parseInt(--count, 10)).format(\"YYYY\");\n var countTo = parseInt(moment.utc().format(\"YYYY\"), 10) + 6;\n while (count < countTo) scope.selects.years.push(moment.utc().year(count++).format(\"YYYY\"));\n\n var count = 0;\n while (count < 12) scope.selects.months.push(moment.utc().month(count++).format(\"MMMM\"));\n\n var start = scope.selectedMoment.clone();\n start.date(1);\n _RemoveTime(start.day(0));\n\n _BuildMonth(start, scope.selectedMoment);\n\n/* TweenMax.from(scope._picker_, 0.35, {\n opacity: '0',\n ease: Expo.easeInOut\n });*/\n\n scope._empty_.bind('click', _ClosePicker);\n };\n\n /**\n * [DOM] Close Data Picker: remove from DOM\n * @private\n */\n var _ClosePicker = function () {\n angular.element('body').unbind('keydown', _OnKeyDown);\n scope._empty_.unbind('click', _ClosePicker);\n\n scope.removeOne();\n scope.removeTwo();\n\n scope._picker_.remove();\n scope._empty_.remove();\n\n/* TweenMax.to(scope._picker_, 0.45, {\n opacity: '0',\n ease: Expo.easeInOut,\n onComplete: function () {\n\n }\n });*/\n };\n\n /**\n * |---------- BIND EVENTS ----------|\n */\n scope._data_element_.bind('click', _OpenPicker);\n\n /**\n * [NG-CLICK] Select date\n * @param date\n */\n scope.selectDate = function (date) {\n scope.selectedMoment.date(date.number);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n };\n\n /**\n * [NG-CLICK] Select next MONTH\n */\n scope.next = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() + 1);\n if (start.month() < scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n /**\n * [NG-CLICK] Select prev MONTH\n */\n scope.previous = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() - 1);\n if (start.month() > scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n /**\n * [NG-IF] Check selected MONTH\n * @param month\n * @returns {boolean}\n */\n scope.isSelectedMonth = function (month) {\n return month === scope.selectedMonth;\n };\n\n /**\n * [NG-WATCH] Rebuild if month changed from DOM.select\n * @param month\n */\n scope.selectMonth = function (month) {\n var start = scope.selectedMoment.clone();\n start.month(month);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.month(month);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n };\n\n /**\n * [NG-IF] Check selected YAER\n * @param year\n * @returns {boolean}\n */\n scope.isSelectedYear = function (year) {\n return year === scope.selectedYear;\n };\n\n /**\n * [NG-WATCH] Rebuild if year changed from DOM.select\n * @param year\n */\n scope.selectYear = function (year) {\n var start = scope.selectedMoment.clone();\n start.year(year);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.year(year);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n };\n\n /**\n * [NG-CLICK] Cancel Action\n */\n scope.cancel = function () {\n _ClosePicker();\n };\n\n /**\n * [NG-CLICK] Set today date\n */\n scope.today = function () {\n scope.selectedMoment = moment.utc().startOf('day');\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n };\n\n /**\n * [NG-CLICK] Done Action\n */\n scope.done = function () {\n scope.ngModel = scope.selectedMoment.clone();\n _ClosePicker();\n };\n\n /**\n * Clear scope on $DESTROY\n */\n scope._data_element_.on('$destroy', function () {\n scope._data_element_.unbind('click');\n scope.$destroy();\n if (watcher) watcher();\n if (scope.removeOne) scope.removeOne();\n if (scope.removeTwo) scope.removeTwo();\n })\n },\n templateUrl: 'lm-datepicker/lm-datapicker-input.tpl.html'\n };\n }]);\n","lmApp.\n directive('lmDatepicker', ['$compile', '$templateCache', 'KeyService',\n function ($compile, $templateCache, KeyService) {\n return {\n restrict: 'E',\n replace: false,\n scope: {\n ngModel: '=',\n placeholder: '@',\n icon: '@',\n ngDisabled: '=?'\n },\n link: function (scope, element, attrs) {\n scope._data_element_ = element;\n\n scope.selects = {\n years: [],\n months: []\n };\n\n var count = parseInt(moment.utc().subtract(4, 'years').format(\"YYYY\"));\n for (var i = 0; i <= 10; i++) {\n scope.selects.years.push((count+i).toString());\n }\n // count = moment.utc().year(parseInt(--count, 10)).format(\"YYYY\");\n // var countTo = parseInt(moment.utc().format(\"YYYY\"), 10) + 6;\n // while (count < countTo) scope.selects.years.push(moment.utc().year(count++).format(\"YYYY\"));\n\n var count = 0;\n while (count < 12) scope.selects.months.push(moment.utc().month(count++).format(\"MMMM\"));\n\n\n var watcher = scope.$watch('ngModel', function (newValue, oldValue) {\n scope.selectedMoment = _RemoveTime(newValue ? (moment.isMoment(newValue) ? newValue : (moment.utc(newValue * 1000))) : moment.utc());\n });\n\n /**\n * [EVENT HANDLER] Keyboard action\n * @param event\n * @private\n */\n var _OnKeyDown = function (event) {\n var key = event.which;\n\n if (key === KeyService.Keys.ESCAPE) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n // scope.cancel();\n }\n };\n\n /**\n * Set 00:00:00 for day\n * @param date\n * @returns {moment}\n * @private\n */\n var _RemoveTime = function (date) {\n return date.startOf('day');\n };\n\n /**\n * Build month from data.\n * @param start - from what date start building\n * @param month - for what month\n * @private\n */\n var _BuildMonth = function (start, month) {\n var weeks = [];\n var done = false;\n var date = start.clone();\n var monthIndex = date.month();\n var count = 0;\n while (!done) {\n weeks.push({days: _BuildWeek(date.clone(), month)});\n date.add(1, \"w\");\n done = count++ > 2 && monthIndex !== date.month();\n monthIndex = date.month();\n }\n scope.weeks = weeks;\n };\n\n /**\n * Build week for month\n * @param date - from what date start building\n * @param month - need to check is day from current month or not\n * @returns {Array.}\n * @private\n */\n var _BuildWeek = function (date, month) {\n var days = [];\n for (var i = 0; i < 7; i++) {\n days.push({\n name: date.format(\"dd\").substring(0, 1),\n number: date.date(),\n isCurrentMonth: date.month() === month.month(),\n isToday: date.isSame(new Date(), \"day\"),\n date: date\n });\n date = date.clone();\n date.add(1, \"d\");\n }\n return days;\n };\n\n /**\n * [DOM] Open data picker: get template, compile, append DOM\n * @private\n */\n\n\n var _OpenPicker = function () {\n if (scope.ngDisabled) return;\n\n // angular.element('body').bind('keydown', _OnKeyDown);\n\n\n scope.selectedMoment = _RemoveTime(scope.ngModel ? (moment.isMoment(scope.ngModel) ? scope.ngModel : (moment.utc(scope.ngModel * 1000))) : moment.utc());\n\n scope.savedInitialTime = scope.selectedMoment.clone();\n\n scope.selected = {};\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n\n scope._picker_ = $templateCache.get('lm-datepicker2/lm-datapicker.tpl.html');\n scope._picker_ = $compile(scope._picker_)(scope);\n scope._picker_.appendTo('body');\n\n scope.removeOne = scope.$watch('selectedYear', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectYear(newVal);\n }\n });\n\n scope.removeTwo = scope.$watch('selectedMonth', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectMonth(newVal);\n }\n });\n\n\n /*\n scope._empty_ = scope._picker_.find('#empty.empty_date');\n\n*/\n\n var start = scope.selectedMoment.clone();\n start.date(1);\n _RemoveTime(start.day(0));\n\n _BuildMonth(start, scope.selectedMoment);\n\n TweenMax.from(scope._picker_, 0.35, {\n opacity: '0',\n ease: Expo.easeInOut\n });\n\n //scope._empty_.bind('click', _ClosePicker);\n };\n\n /**\n * [DOM] Close Data Picker: remove from DOM\n * @private\n */\n var _ClosePicker = function () {\n // angular.element('body').unbind('keydown', _OnKeyDown);\n //scope._empty_.unbind('click', _ClosePicker);\n\n scope.removeOne();\n scope.removeTwo();\n\n scope._picker_.remove();\n\n/* TweenMax.to(scope._picker_, 0.45, {\n opacity: '0',\n ease: Expo.easeInOut,\n onComplete: function () {\n\n // scope._empty_.remove();\n }\n });*/\n };\n\n /**\n * |---------- BIND EVENTS ----------|\n */\n scope._data_element_.bind('click', _OpenPicker);\n scope._data_element_.bind('keydown', _OnKeyDown);\n /**\n * [NG-CLICK] Select date\n * @param date\n */\n scope.selectDate = function (date) {\n scope.selectedMoment.date(date.number);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n };\n\n /**\n * [NG-CLICK] Select next MONTH\n */\n scope.next = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() + 1);\n if (start.month() < scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n /**\n * [NG-CLICK] Select prev MONTH\n */\n scope.previous = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() - 1);\n if (start.month() > scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n\n /**\n * [NG-WATCH] Rebuild if month changed from DOM.select\n * @param month\n */\n scope.selectMonth = function (month) {\n var start = scope.selectedMoment.clone();\n start.month(month);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.month(month);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n };\n\n\n /**\n * [NG-WATCH] Rebuild if year changed from DOM.select\n * @param year\n */\n scope.selectYear = function (year) {\n var start = scope.selectedMoment.clone();\n start.year(year);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.year(year);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n };\n\n /**\n * [NG-CLICK] Cancel Action\n */\n scope.cancel = function () {\n scope.selectedMoment = scope.savedInitialTime;\n _ClosePicker();\n };\n\n /**\n * [NG-CLICK] Set today date\n */\n scope.today = function () {\n scope.selectedMoment = moment.utc().startOf('day');\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n };\n\n /**\n * [NG-CLICK] Done Action\n */\n\n scope.done = function () {\n scope.ngModel = scope.selectedMoment.clone();\n _ClosePicker();\n };\n\n\n /**\n * Clear scope on $DESTROY\n */\n scope._data_element_.on('$destroy', function () {\n scope._data_element_.unbind('click');\n scope._data_element_.unbind('keydown');\n scope.$destroy();\n if (watcher) watcher();\n if (scope.removeOne) scope.removeOne();\n if (scope.removeTwo) scope.removeTwo();\n })\n },\n templateUrl: 'lm-datepicker2/lm-datapicker-input.tpl.html'\n };\n }]);\n","lmApp\n .directive('lmDuration', ['$timeout', 'KeyService', function ($timeout, KeyService) {\n return {\n restrict: 'E',\n scope: {\n ngModel: '=',\n ngDisabled: '=?'\n },\n link: function (scope, element, attrs) {\n scope.ngModel = +scope.ngModel || 0;\n scope._duration_element_ = element;\n scope._edit_ = element.find('#editable');\n scope._inputs_ = element.find('.ninja.showen');\n scope._empty_ = angular.element('
    ');\n scope.hours = parseInt(scope.ngModel / 3600, 10);\n scope.minutes = parseInt(scope.ngModel / 60 % 60, 10);\n scope.seconds = parseInt(scope.ngModel - (scope.hours * 3600 + scope.minutes * 60), 10);\n scope.active = 0;\n\n /**\n * [NG-WATCH] Watch for model change and replace with correct value\n * @type {function()}\n */\n var watch = scope.$watch('ngModel', function (newValue, oldValue) {\n $timeout(function () {\n scope.hours = parseInt(scope.ngModel / 3600, 10);\n scope.minutes = parseInt(scope.ngModel / 60 % 60, 10);\n scope.seconds = parseInt(scope.ngModel - (scope.hours * 3600 + scope.minutes * 60), 10);\n\n if (scope.hours < 10) {\n scope.hours = '0' + scope.hours;\n }\n if (scope.minutes < 10) {\n scope.minutes = '0' + scope.minutes;\n }\n if (scope.seconds < 10) {\n scope.seconds = '0' + scope.seconds;\n }\n });\n });\n\n /**\n * Add \"0\": 0..9 |-> 00 .. 09\n */\n if (scope.hours < 10) {\n scope.hours = '0' + scope.hours;\n }\n if (scope.minutes < 10) {\n scope.minutes = '0' + scope.minutes;\n }\n if (scope.seconds < 10) {\n scope.seconds = '0' + scope.seconds;\n }\n\n /**\n * Set correct value for minutes, seconds: 00..59\n * @param string\n * @param type\n * @returns {Number|*}\n * @private\n */\n var _Parse = function (string, type) {\n string = string.toString().replace(/\\D+/g, '').substring(0, 2);\n if (!string.length) string = '00';\n string = parseInt(string, 10);\n\n if (string < 10) {\n string = '0' + string;\n } else {\n switch (type) {\n case 'hours':\n //if (string > 23) string = '00';\n break;\n\n case 'minutes':\n if (string > 59) string = '00';\n break;\n\n case 'seconds':\n if (string > 59) string = '00';\n break;\n\n default:\n string = '00';\n break;\n }\n }\n\n return string;\n };\n\n /**\n * [EVENT HANDLER] Parse full model after changes, when user click on input field\n * @param event\n * @private\n */\n var _ClickInput = function (event) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n var id = event.target.attributes.id.value;\n\n $timeout(function () {\n scope.hours = _Parse(scope.hours, 'hours');\n scope.minutes = _Parse(scope.minutes, 'minutes');\n scope.seconds = _Parse(scope.seconds, 'seconds');\n });\n\n if (id === 'hours') scope.active = 0;\n if (id === 'minutes') scope.active = 1;\n if (id === 'seconds') scope.active = 2;\n\n event.target.focus();\n event.target.select();\n };\n\n /**\n * [EVENT HANDLER] Parse full model after changes, when user click on widget\n * @param event\n * @private\n */\n var _ClickElement = function (event) {\n $timeout(function () {\n scope.hours = _Parse(scope.hours, 'hours');\n scope.minutes = _Parse(scope.minutes, 'minutes');\n scope.seconds = _Parse(scope.seconds, 'seconds');\n });\n };\n\n /**\n * [EVENT HANDLER] Keyboard events\n * @param event\n * @private\n */\n var _Navigation = function (event) {\n var key = event.which;\n\n if (key === KeyService.Keys.TAB) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n $timeout(function () {\n scope.hours = _Parse(scope.hours, 'hours');\n scope.minutes = _Parse(scope.minutes, 'minutes');\n scope.seconds = _Parse(scope.seconds, 'seconds');\n });\n\n scope.active++;\n if (scope.active > 2) {\n scope.active = 0;\n scope._inputs_[scope.active].focus();\n scope._inputs_[scope.active].select();\n } else {\n scope._inputs_[scope.active].focus();\n scope._inputs_[scope.active].select();\n }\n }\n\n if (key === KeyService.Keys.ENTER) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseEdit()\n }\n\n if (key === KeyService.Keys.ESCAPE) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseEdit();\n }\n\n if (key === KeyService.Keys.ARROW_DOWN) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n $timeout(function () {\n scope.minus(scope[event.target.attributes.id.value], event.target.attributes.id.value);\n event.target.focus();\n event.target.select();\n });\n }\n\n if (key === KeyService.Keys.ARROW_UP) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n $timeout(function () {\n scope.plus(scope[event.target.attributes.id.value], event.target.attributes.id.value);\n event.target.focus();\n event.target.select();\n });\n }\n };\n\n /**\n * [EVENT HANDLER] Keyboard events\n * @param event\n * @private\n */\n var _OnKeyDown = function (event) {\n var key = event.which;\n\n if (key === KeyService.Keys.ESCAPE) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n _CloseEdit();\n return;\n }\n };\n\n /**\n * [DOM] Show input widget: [NG-IF] property change\n * @private\n */\n scope.openEdit = function () {\n if (scope.ngDisabled) return;\n\n //scope._edit_.unbind('click', _OpenEdit);\n scope._inputs_.bind('keydown', _Navigation);\n scope._inputs_.bind('click', _ClickInput);\n scope._empty_.appendTo(scope._duration_element_);\n\n $timeout(function () {\n scope._edit_.css({'z-index': 9999});\n scope._empty_.css({'z-index': 9998});\n scope.inputShowen = true;\n scope._inputs_[scope.active].focus();\n scope._inputs_[scope.active].select();\n });\n\n scope._duration_element_.bind('click', _ClickElement);\n scope._empty_.bind('click', _CloseEdit);\n angular.element('body').bind('keydown', _OnKeyDown);\n };\n\n /**\n * [DOM] Hide input widget: [NG-IF] property change\n * @private\n */\n var _CloseEdit = function () {\n $timeout(function () {\n scope.inputShowen = false;\n scope.ngModel = parseInt(scope.seconds, 10) + parseInt(scope.hours, 10) * 3600 + parseInt(scope.minutes, 10) * 60;\n });\n\n scope._inputs_[scope.active].blur();\n\n //scope._edit_.bind('click', _OpenEdit);\n scope._duration_element_.unbind('click', _ClickElement);\n scope._inputs_.unbind('keydown', _Navigation);\n scope._inputs_.unbind('click', _ClickInput);\n scope._empty_.unbind('click', _CloseEdit);\n scope._empty_.remove();\n angular.element('body').unbind('keydown', _OnKeyDown);\n };\n\n //scope._edit_.bind('click', _OpenEdit);\n\n scope.closeEdit = function () {\n $timeout(function () {\n scope.hours = _Parse(scope.hours, 'hours');\n scope.minutes = _Parse(scope.minutes, 'minutes');\n scope.seconds = _Parse(scope.seconds, 'seconds');\n });\n\n _CloseEdit();\n };\n\n /**\n * [NG-CLICK, EVENT HANDLER] Add +1\n * @param value\n * @param type\n */\n scope.plus = function (value, type) {\n scope[type] = _Parse(Number(value) + 1, type);\n };\n\n /**\n * [NG-CLICK, EVENT HANDLER] Remove -1\n * @param value\n * @param type\n */\n scope.minus = function (value, type) {\n if (Number(value) - 1 < 0) {\n scope[type] = (type === 'hours') ? _Parse(0, type) : _Parse(59, type);\n } else {\n scope[type] = _Parse(Number(value) - 1, type);\n }\n };\n\n /**\n * Clear global scope\n */\n scope._duration_element_.on('$destroy', function () {\n watch();\n scope.$destroy();\n })\n\n },\n templateUrl: 'lm-duration/lm-duration.tpl.html'\n }\n }]);\n","lmApp\n/**\n * [NG-CONTROLLER]\n */\n .controller('DropdownController', ['$scope', '$document', '$window', 'KeyService',\n function ($scope, $document, $window, KeyService) {\n\n /**\n * [EVENT HANDLER] Keyboard action\n * @param event\n * @private\n */\n $scope._OnKeyDown = function (event) {\n if (event.which == KeyService.Keys.ESCAPE) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n $scope._CloseDropdown();\n }\n };\n\n /**\n * [DOM] Open dropdown: show with animation;\n * @private\n */\n $scope._OpenDropdown = function (e) {\n if (e && e.stopPropagation) e.stopPropagation();\n $document.bind('keydown', $scope._OnKeyDown);\n $scope._empty_.appendTo('body');\n $scope._ChangePosition();\n $scope._dropmenu_.css({display: 'block'});\n\n if (!$scope.width) {\n $scope._dropmenu_.css({width: $scope._toogle_.outerWidth()});\n }\n\n TweenMax.from($scope._dropmenu_, 0.35, {\n height: 0,\n ease: Expo.easeInOut,\n onComplete: function () {\n $scope._dropmenu_.css({'overflow-y': 'auto'});\n var bodyHeight = $document[0].documentElement.clientHeight;\n var optionsHeight = $scope._dropmenu_.height();\n var optionsOffsetTop = $scope._dropmenu_.offset().top - $document.scrollTop();\n var bodyScrollTop = angular.element('body').scrollTop();\n\n if (optionsHeight + optionsOffsetTop > bodyHeight) {\n $scope._dropmenu_.css({height: bodyHeight - optionsOffsetTop + bodyScrollTop - 10});\n }\n $document.bind('click', $scope._CloseDropdown);\n $document.bind('keydown', $scope._OnKeyDown);\n }\n });\n\n $scope._dropmenu_.bind('keydown', $scope._OnKeyDown);\n angular.element($scope._container_).bind('resize', $scope._ChangePosition);\n angular.element($scope._container_).bind('resize', $scope._ChangeSize);\n angular.element($scope._container_).bind('scroll', $scope._ChangePosition);\n };\n\n $scope._ChangePosition = function () {\n $scope._dropmenu_.css({\n overflow: 'hidden',\n top: $scope._toogle_.offset().top - $document.scrollTop(),\n left: $scope._toogle_.offset().left - $document.scrollLeft()\n });\n };\n\n $scope._ChangeSize = function () {\n $scope._dropmenu_.css({width: $scope._toogle_.outerWidth()});\n\n var bodyHeight = $document[0].documentElement.clientHeight;\n var optionsHeight = $scope._dropmenu_.height();\n var optionsOffsetTop = $scope._dropmenu_.offset().top - $document.scrollTop();\n var bodyScrollTop = angular.element('body').scrollTop();\n\n if (optionsHeight + optionsOffsetTop > bodyHeight) {\n $scope._dropmenu_.css({height: bodyHeight - optionsOffsetTop + bodyScrollTop - 10});\n }\n };\n\n /**\n * [DOM] Close dropdown: hide with animation\n * @private\n */\n $scope._CloseDropdown = function () {\n $document.unbind('keydown', $scope._OnKeyDown);\n $scope._dropmenu_.css({overflow: 'hidden'});\n\n TweenMax.to($scope._dropmenu_, 0.35, {\n height: 0,\n display: 'none',\n ease: Expo.easeInOut,\n onComplete: function () {\n $scope._dropmenu_.css({'overflow-y': 'auto'});\n $scope._empty_.remove();\n },\n clearProps: 'height,width'\n });\n\n $document.unbind('click', $scope._CloseDropdown);\n $document.unbind('keydown', $scope._CloseDropdown);\n angular.element($scope._container_).unbind('resize', $scope._ChangePosition);\n angular.element($scope._container_).unbind('resize', $scope._ChangeSize);\n angular.element($scope._container_).unbind('scroll', $scope._ChangePosition);\n };\n }])\n /**\n * [NG-DIRECTIVE] Replace element with empty DIVs for transclude\n */\n .directive('lmDropdown', ['$window',\n function ($window) {\n return {\n restrict: 'E',\n templateUrl: 'lm-dropdown/lm-dropdown.tpl.html',\n controller: 'DropdownController',\n transclude: {\n toggle: 'lmDropdownToogle',\n menu: 'lmDropdownMenu'\n },\n scope: true,\n replace: true,\n link: function (scope, element, attrs) {\n scope.width = !!attrs.width;\n\n scope._container_ = attrs.container ? angular.element(attrs.container) : $window;\n scope._toogle_ = element.find('#toggle');\n scope._dropmenu_ = element.find('#dropdown');\n\n scope._dropmenu_.appendTo('body');\n scope._empty_ = angular.element('
    ');\n scope._empty_.css({'z-index': +scope._dropmenu_.css('z-index') - 1});\n\n scope.$on('$destroy', function () {\n scope._dropmenu_ && scope._dropmenu_.remove();\n });\n\n element.bind('keydown', scope._OnKeyDown);\n //element.on('$destroy', function () {});\n }\n };\n }]);\n","lmApp\n .directive('lmImageUpload', ['$timeout', '$window', '$rootScope', 'AssetService',\n function ($timeout, $window, $rootScope, AssetService) {\n return {\n restrict: 'E',\n templateUrl: 'lm-image-upload/lm-image-upload.tpl.html',\n replace: true,\n scope: {\n ngModel: '=',\n errorSrc: '@',\n showButton: '=?',\n ngDisabled: '=?',\n shadow: '@',\n transparent: '@',\n buttonPosition: '@',\n tooltip: '@',\n onUpload: '&',\n error: '=?',\n maxHeight: '@',\n maxWidth: '@'\n },\n link: function (scope, element, attrs) {\n scope.src = scope.ngModel;\n scope._image_element_ = element;\n scope._input_ = element.find('input#poster-file-input');\n scope._form_ = element.find('form#poster-file-form');\n scope._progress_ = element.find('#picture_uploader');\n scope._bar_ = scope._progress_.find('.determinate');\n\n scope.rnd = Date.now();\n\n scope.uploadTo = function (event) {\n if (scope.ngDisabled) return;\n\n $timeout(function () {\n scope._input_.trigger('click');\n });\n };\n\n var unwatch = scope.$watch('ngModel', function (newValue, oldValue) {\n scope.src = newValue;\n });\n\n $timeout(function () {\n scope._input_\n .on('change', function () {\n $timeout(function () {\n scope.error = '';\n });\n if (!this.files || !this.files.length) {\n $timeout(function () {\n scope.error = 'Please, select file';\n });\n return;\n }\n\n if (['image/png', 'image/jpeg', 'image/jpg'].indexOf(this.files[0].type) === -1) {\n $timeout(function () {\n scope.error = 'Supported format: PNG, JPEG.';\n });\n return;\n }\n\n var file = this.files[0];\n\n AssetService.UploadImageToCloud(file, scope._progress_)\n .then(function (response) {\n scope._bar_.css({width: 0});\n scope.ngModel = response.Location;\n if (scope.onUpload) {\n $timeout(function () {\n scope.onUpload();\n });\n }\n }, function (reason) {\n scope._bar_.css({width: 0});\n scope.error = reason.message || 'Error during upload';\n $rootScope.debugInfo(reason);\n });\n\n scope._form_[0].reset();\n });\n }, 200);\n\n scope.$on('$destroy', function () {\n unwatch();\n });\n }\n }\n }]);\n","lmApp.\n directive('lmInlineDatepicker', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'E',\n replace: false,\n scope: {\n ngModel: '=',\n placeholder: '@',\n icon: '@',\n ngDisabled: '=?',\n noFuture: '@?',\n noPast: '@?',\n noSelects: '@?',\n showBefore: '@?'\n },\n link: function (scope, element, attrs) {\n scope._date_element_ = element;\n scope._table_ = element.find('.inline-picker__table');\n scope._picker_ = element.find('.inline-picker');\n scope.month = [];\n scope.rnd = moment.utc().unix();\n\n /**\n * Set 00:00:00 for day\n * @param date\n * @returns {moment}\n * @private\n */\n var _RemoveTime = function (date) {\n return date.startOf('day');\n };\n\n /**\n * Build month from data.\n * @param start - from what date start building\n * @param month - for what month\n * @private\n */\n var _BuildMonth = function (start, month) {\n scope.month = [];\n var done = false;\n var date = start.clone();\n var monthIndex = date.month();\n var count = 0;\n scope.month.push({\n name: scope.selectedMoment.clone().add(-1, \"month\").format('YYYY'),\n number: scope.selectedMoment.clone().add(-1, \"month\").format('MMM'),\n isCurrentMonth: true,\n isToday: false,\n isMonth: true,\n date: scope.selectedMoment.clone().add(-1, \"month\")\n });\n while (!done) {\n scope.month = _.union(scope.month, _BuildWeek(date.clone(), month));\n date.add(1, \"w\");\n done = count++ > 2 && monthIndex !== date.month();\n monthIndex = date.month();\n }\n scope.month.push({\n name: scope.selectedMoment.clone().add(1, \"month\").format('YYYY'),\n number: scope.selectedMoment.clone().add(1, \"month\").format('MMM'),\n isCurrentMonth: true,\n isToday: false,\n isMonth: true,\n date: scope.selectedMoment.clone().add(1, \"month\")\n });\n };\n\n /**\n * Build week for month\n * @param date - from what date start building\n * @param month - need to check is day from current month or not\n * @returns {Array.}\n * @private\n */\n var _BuildWeek = function (date, month) {\n var days = [];\n for (var i = 0; i < 7; i++) {\n days.push({\n name: date.format('ddd'),\n number: date.date(),\n month: date.month(),\n isCurrentMonth: date.month() === month.month(),\n isToday: date.isSame(new Date(), \"day\"),\n isLocked: !date.isSame(new Date(), \"day\") && (scope.noFuture && moment().diff(date) < 0) || (scope.noPast && moment().diff(date) > 0),\n date: date\n });\n date = date.clone();\n date.add(1, \"d\");\n }\n return days;\n };\n\n /**\n * [NG-CLICK] Select date\n * @param date\n */\n scope.selectDate = function (date) {\n if (!date.isLocked || date.isToday) {\n if (date.isMonth) {\n scope.selectedYear = date.date.format(\"YYYY\");\n scope.selectedMonth = date.date.format(\"MMMM\");\n return;\n }\n\n scope.selectedMoment.date(date.number);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n\n scope.ngModel = scope.selectedMoment;\n }\n };\n\n /**\n * [NG-CLICK] Select next MONTH\n */\n scope.next = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() + 1);\n if (start.month() < scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n /**\n * [NG-CLICK] Select prev MONTH\n */\n scope.previous = function () {\n var start = scope.selectedMoment.clone();\n start.month(start.month() - 1);\n if (start.month() > scope.selectedMoment.month()) {\n scope.selectedYear = start.year();\n scope.selectedMoment.year(scope.selectedYear);\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n }\n scope.selectedMonth = start.format('MMMM');\n };\n\n /**\n * [NG-IF] Check selected MONTH\n * @param month\n * @returns {boolean}\n */\n scope.isSelectedMonth = function (month) {\n return month === scope.selectedMonth;\n };\n\n /**\n * [NG-WATCH] Rebuild if month changed from DOM.select\n * @param month\n */\n scope.selectMonth = function (month) {\n var start = scope.selectedMoment.clone();\n start.month(month);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.month(month);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n //scope.ngModel = scope.selectedMoment;\n if (scope.ngModel.format('MMMM YYYY') === scope.selectedMoment.format('MMMM YYYY')) {\n scope.slideToDay(scope.ngModel);\n } else {\n scope.slideToDay(scope.selectedMoment.clone().date(1));\n }\n };\n\n /**\n * [NG-IF] Check selected YAER\n * @param year\n * @returns {boolean}\n */\n scope.isSelectedYear = function (year) {\n return year === scope.selectedYear;\n };\n\n /**\n * [NG-IF] Check selected YAER\n * @param year\n * @returns {boolean}\n */\n scope.isSelectedDay = function (day) {\n return day.date.isSame(scope.selectedMoment) && (scope.ngModel.format('D MMMM YYYY') === scope.selectedMoment.format('D MMMM YYYY')) && !day.isMonth\n };\n\n /**\n * [NG-WATCH] Rebuild if year changed from DOM.select\n * @param year\n */\n scope.selectYear = function (year) {\n var start = scope.selectedMoment.clone();\n start.year(year);\n start.date(1);\n _RemoveTime(start.day(0));\n scope.selectedMoment.year(year);\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n _BuildMonth(start, scope.selectedMoment);\n if (scope.ngModel.format('MMMM YYYY') === scope.selectedMoment.format('MMMM YYYY')) {\n scope.slideToDay(scope.ngModel);\n } else {\n scope.slideToDay(scope.selectedMoment.clone().date(1));\n }\n };\n\n /**\n * [NG-CLICK] Set today date\n */\n scope.today = function () {\n scope.selectedMoment = _RemoveTime(moment.utc().startOf('day'));\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n\n scope.slideToDay(scope.selectedMoment);\n\n scope.ngModel = scope.selectedMoment;\n };\n\n //scope.ngModel = _RemoveTime(scope.ngModel ? (moment.isMoment(scope.ngModel) ? angular.copy(scope.ngModel) : (moment.utc(scope.ngModel * 1000))) : moment.utc());\n scope.selectedMoment = _RemoveTime(scope.ngModel.clone() || moment.utc());\n\n scope.selectedYear = scope.selectedMoment.format('YYYY');\n scope.selectedMonth = scope.selectedMoment.format('MMMM');\n scope.selectedDate = scope.selectedMoment.format('D');\n scope.selectedDay = scope.selectedMoment.format('dddd');\n\n scope.selects = {\n years: [],\n months: []\n };\n\n scope.removeOne = scope.$watch('selectedYear', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectYear(newVal);\n }\n });\n\n scope.removeTwo = scope.$watch('selectedMonth', function (newVal, oldVal) {\n if (newVal !== oldVal) {\n scope.selectMonth(newVal);\n }\n });\n\n scope.slideLeft = function () {\n if (scope._table_.position().left + scope._picker_.width() / 2 < 0) {\n scope._table_.css({left: '+=' + scope._picker_.width() / 2});\n } else {\n scope._table_.css({left: '0'});\n }\n };\n\n scope.slideToDay = function (day) {\n for (var i = 0; i < scope.month.length; i++) {\n if (scope.month[i].number === day.date() && scope.month[i].isCurrentMonth) {\n $timeout(function () {\n var ind = (i - parseInt(scope.showBefore || 7, 10)) < 0 ? 1 : i - parseInt(scope.showBefore || 7, 10);\n var elem = angular.element('#day_' + scope.rnd + '_' + day.month() + '_' + ind);\n scope._table_.css({left: elem.length ? -elem.position().left : 0});\n }, 350);\n break;\n }\n }\n };\n\n scope.slideRight = function () {\n if (scope._table_.find('.inline-picker__day--infocus').last().position().left +\n (scope._table_.position().left - scope._picker_.width() / 2) -\n scope._picker_.width() * 0.7 > 0) {\n scope._table_.css({left: '-=' + scope._picker_.width() / 2});\n } else {\n scope._table_.css({left: -(scope._table_.find('.inline-picker__day--infocus').last().position().left - scope._picker_.width() * 0.7)});\n }\n };\n\n var countYear = moment.utc().format(\"YYYY\");\n countYear = moment.utc().year(parseInt(--countYear, 10)).format(\"YYYY\");\n var countTo = parseInt(moment.utc().format(\"YYYY\"), 10) + 4;\n while (countYear < countTo) scope.selects.years.push(moment.utc().year(countYear++).format(\"YYYY\"));\n\n var countMonth = 0;\n while (countMonth < 12) scope.selects.months.push(moment.utc().month(countMonth++).format(\"MMMM\"));\n\n var start = scope.selectedMoment.clone();\n start.date(1);\n _RemoveTime(start.day(0));\n\n _BuildMonth(start, scope.selectedMoment);\n\n scope.slideToDay(scope.selectedMoment);\n\n var watcher = scope.$watch('ngModel', function (newValue, oldValue) {\n var value = angular.copy(newValue);\n scope.selectedMoment = _RemoveTime(value ? (moment.isMoment(value) ? angular.copy(value) : (moment.utc(value * 1000))) : moment.utc());\n });\n\n /**\n * Clear scope on $DESTROY\n */\n scope._date_element_.on('$destroy', function () {\n if (watcher) watcher();\n if (scope.removeOne) scope.removeOne();\n if (scope.removeTwo) scope.removeTwo();\n scope.$destroy();\n })\n },\n templateUrl: 'lm-inline-datepicker/lm-inline-datepicker.tpl.html'\n };\n }]);\n","/**\n * Input directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmInputField', ['$timeout', function ($timeout) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n id: '@',\n type: '@',\n icon: '@',\n endlineIcon: '@',\n label: '@',\n placeholder: '@',\n ngModel: '=',\n ngModelOptions: '=?',\n ngDisabled: '=?',\n ngReadonly: '=?',\n error: '@',\n errorFn: '=?',\n warning: '@',\n warningFn: '=?',\n success: '@',\n successFn: '=?',\n isLong: '=?',\n isBordesless: '=?',\n onKeyPress: '&',\n onFocus: '&',\n onBlur: '&',\n isFocused: '@',\n isInline: '@',\n mt0: '@'\n },\n link: function (scope, element, attrs) {\n if (!scope.id) scope.timestamp = Date.now();\n\n attrs.$observe('error', function (value) {\n scope.error = value;\n });\n attrs.$observe('warning', function (value) {\n scope.warning = value;\n });\n attrs.$observe('success', function (value) {\n scope.success = value;\n });\n\n scope._input_ = element.find('input');\n\n scope._onFocus = function () {\n $timeout(function () {\n scope.isFocused = true;\n });\n scope.onFocus();\n };\n\n scope._input_.bind('focus', scope._onFocus);\n\n scope._onBlur = function () {\n $timeout(function () {\n scope.isFocused = false\n });\n scope.onBlur();\n };\n\n scope._input_.bind('blur', scope._onBlur);\n\n scope._onKeyPress = function (event) {\n if (scope.onKeyPress) scope.onKeyPress();\n\n if (event && event.which != 9 /*TAB*/) {\n if (!_.isUndefined(scope.errorFn)) {\n scope.errorFn = false;\n }\n if (!_.isUndefined(scope.warningFn)) {\n scope.warningFn = false;\n }\n if (!_.isUndefined(scope.successFn)) {\n scope.successFn = false;\n }\n }\n };\n\n scope._input_.bind('keydown', scope._onKeyPress);\n\n if (scope.isFocused) scope.timeoutFocused = $timeout(function () {\n scope._input_.focus();\n }, 450);\n\n scope.focusMe = function () {\n scope._input_.focus();\n };\n\n scope._input_.on('$destroy', function () {\n if (scope.timeoutFocused) $timeout.cancel(scope.timeoutFocused);\n scope._input_.unbind('focus', scope._onFocus);\n scope._input_.unbind('blur', scope._onBlur);\n scope._input_.unbind('keydown', scope._onKeyPress);\n scope.$destroy();\n });\n\n },\n templateUrl: 'lm-input-field/input-field.tpl.html'\n };\n }]);\n","/**\n * JW PLayer directive for\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.directive('lmJwplayer', ['$rootScope', '$timeout', function ($rootScope, $timeout) {\n return {\n restrict: 'E',\n replace: true,\n link: function (scope, element, attrs) {\n scope.url = attrs['url'];\n scope.link = attrs['link'];\n scope.noCloseButton = attrs['noCloseButton'];\n scope.hlshtml = false;\n\n scope.isPlayableSource = function (stream) {\n\n return stream.is_deployed && ['hls', 'hls_live', 'dash', 'dash_live'].indexOf(stream.stream_type) !== -1;\n };\n\n jwplayer.key = \"BITOrqayHBu4KX9aaS5KfhRISCfjrp1g5fZTlw==\";\n\n var modes = ['uniform', 'fill', 'exactfit', 'none '];\n var current = -1;\n\n var getStretch = function () {\n return modes[current + 1] ? modes[current + 1] : modes[0];\n };\n\n var getNextStretch = function () {\n current += 1;\n\n if (!modes[current]) {\n current = 0;\n }\n\n return modes[current];\n };\n\n var init = function () {\n scope.playbackError = '';\n\n jwplayer(\"player_id\").setup({\n dash: true,\n playlist: {sources: [{file: scope.url, withCredentials: true}]},\n //file: 'http://demo.noisypeak.com/output/discoveryscience_dash/output.mpd',\n stretching: getNextStretch(),\n skin: {\n name: 'glow'\n },\n image: \"/images/sotal_cloud_big_banner.png\",\n //advertising: {\n // client: \"vast\",\n // schedule: {\"myAds\": {\"offset\": \"50\", \"tag\": \"https://servedbyadbutler.com/vast.spark?setID=2112&ID=167635&pid=22810\", type: \"nonlinear\"}}\n //},\n //logo: {\n // file: '/images/sotal_cloud_player_logo.png',\n // margin: '25',\n // position: 'top-left'\n //},\n hlshtml: scope.hlshtml,\n primary: 'html5',\n volume: '0',\n autostart: 'true',\n height: \"360\",\n width: \"640\"\n });\n\n jwplayer('player_id').on('error', function (error) {\n scope.$apply(function () {\n scope.playbackError = error.message;\n });\n jwplayer('player_id').play();\n console.log('Error: ', error);\n });\n\n jwplayer('player_id').on('ready', function () {\n scope.$apply(function () {\n scope.playbackError = '';\n });\n\n var $element = $('
    ');\n\n $element[0].id = 'banner_div';\n $element.append('');\n\n $('.jw-overlays.jw-reset').append($element);\n });\n\n jwplayer('player_id').addButton(\n //This portion is what designates the graphic used for the button\n \"/images/settings_white.png\",\n //This portion determines the text that appears as a tooltip\n 'Use \"' + (getStretch().toUpperCase()) + '\"',\n //This portion designates the functionality of the button itself\n function () {\n //With the below code, we're grabbing the file that's currently playing\n $timeout(function () {\n init();\n }, 350);\n },\n //And finally, here we set the unique ID of the button itself.\n \"stretch\"\n );\n };\n\n init();\n\n var experimentalFeatureWatcher = scope.$watch('hlshtml', function (newV, oldV) {\n if (newV !== oldV) {\n\n jwplayer(\"player_id\").remove();\n init();\n }\n });\n\n var urlWatcher = scope.$watch('url', function (newV, oldV) {\n if (newV !== oldV) {\n scope.playbackError = '';\n\n var playlist = [{sources: [{file: newV, withCredentials: true}]}];\n jwplayer(\"player_id\").load(playlist);\n }\n });\n\n var linkWatcher = scope.$watchCollection('link', function (newValue) {\n if (newValue === undefined) return;\n scope.playbackError = '';\n scope.url = newValue;\n var playlist = [{sources: [{file: newValue, withCredentials: true}]}];\n jwplayer(\"player_id\").load(playlist);\n init();\n });\n\n\n element.on('$destroy', function () {\n jwplayer(\"player_id\").remove();\n experimentalFeatureWatcher();\n urlWatcher();\n linkWatcher();\n });\n },\n templateUrl: 'lm-jwplayer/jw-player.tpl.html'\n };\n}]);\n","lmApp\n .service('ManageEPGChannelsWindow', ['$rootScope', '$q', '$templateCache', '$compile', '$filter', 'ModalWindowService', 'ToastService',\n function ($rootScope, $q, $templateCache, $compile, $filter, ModalWindowService, ToastService) {\n var service = {};\n\n service.Open = function (options) {\n var windowScope = $rootScope.$new();\n\n windowScope.loading = false;\n windowScope.fullscreen = false;\n windowScope.keyword = '';\n windowScope.filters = {};\n windowScope.offset = 0;\n windowScope.limit = 20;\n\n windowScope.searchResult = [];\n windowScope.title = options.title;\n windowScope.collection = options.collection || [];\n windowScope.currentCollection = options.currentCollection || [];\n\n windowScope.$watch('filters', function (newValue, oldValue) {\n if (oldValue && !_.isEmpty(newValue)) {\n windowScope.applyFilters(newValue);\n }\n });\n\n windowScope.nextPage = function () {\n if ((windowScope.offset + windowScope.limit) >= windowScope.collection.length) {\n return\n }\n windowScope.offset += windowScope.limit;\n };\n\n windowScope.prevPage = function () {\n if (windowScope.offset >= windowScope.limit) {\n windowScope.offset -= windowScope.limit;\n } else {\n windowScope.offset = 0;\n }\n };\n\n windowScope.applyFilters = function (filters) {\n filters.keyword = _.trim(filters.keyword);\n windowScope.searchResult = $filter('filter')(windowScope.collection, filters.keyword);\n };\n\n windowScope.manageChannels = {\n add: [],\n remove: []\n };\n\n windowScope.close = function () {\n if (windowScope.loading) return;\n windowScope.fullscreenToggle(false);\n ModalWindowService.Close(windowScope.window, false);\n };\n\n windowScope.fullscreenToggle = function (state) {\n if (typeof state !== 'undefined') {\n windowScope.fullscreen = state;\n } else {\n windowScope.fullscreen = !windowScope.fullscreen;\n }\n ModalWindowService.Fullscreen(windowScope.window, state);\n };\n\n windowScope.addChannelTo = function (channel) {\n channel._PrivateData.inCurrent = true;\n\n windowScope.manageChannels.remove.forEach(function (item, index, collection) {\n if (item.id === channel.id) {\n collection.splice(index, 1);\n }\n });\n\n var item = _.find(windowScope.manageChannels.add, {id: channel.id});\n if (!item) windowScope.manageChannels.add.push(channel);\n };\n\n windowScope.removeChannelFrom = function (channel) {\n channel._PrivateData.inCurrent = false;\n\n windowScope.manageChannels.add.forEach(function (item, index, collection) {\n if (item.id === channel.id) {\n collection.splice(index, 1);\n }\n });\n\n var item = _.find(windowScope.manageChannels.remove, {id: channel.id});\n if (!item) windowScope.manageChannels.remove.push(channel);\n };\n\n windowScope.manageChannelsFor = function () {\n $rootScope.showLinearProgress('#mgmtWindowLoader');\n windowScope.loading = true;\n\n var allQ = options.manageChannelsFn(windowScope.manageChannels.add, windowScope.manageChannels.remove, options.obj);\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n ToastService.Small({\n title: 'EPG channels added/removed. Don\\'t forget to save changes',\n color: 'green',\n icon: 'package-down'\n }, 1000 * 3);\n windowScope.close();\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error happened. Try again',\n color: 'red',\n icon: 'package-down'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n });\n };\n\n\n windowScope.$watch('searchResult', function (newValue, oldValue) {\n windowScope.searchResult.forEach(function (channel) {\n if (!channel._PrivateData) channel._PrivateData = {};\n channel._PrivateData.inCurrent = _.includes(windowScope.currentCollection, channel.id);\n return channel;\n });\n });\n\n windowScope.selectAll = function () {\n if (!windowScope.isSelectedAll()) {\n windowScope.searchResult.forEach(function (channel) {\n windowScope.addChannelTo(channel);\n });\n } else {\n windowScope.searchResult.forEach(function (channel) {\n windowScope.removeChannelFrom(channel);\n });\n }\n };\n\n windowScope.isSelectedAll = function () {\n return windowScope.searchResult.filter(function (channel) {\n return channel._PrivateData.inCurrent;\n }).length === windowScope.searchResult.length;\n };\n\n windowScope._modalWindow_ = $templateCache.get('lm-manage-epg-channels-window/lm-manage-window.tpl.html');\n windowScope._modalWindow_ = $compile(windowScope._modalWindow_)(windowScope);\n\n windowScope.window = ModalWindowService.Open({\n content: windowScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-manage-epg-channels-window/lm-manage-window-nav.tpl.html'))(windowScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n },\n onComplete: function () {\n windowScope.$destroy();\n }\n });\n\n windowScope.applyFilters({keyword: ''});\n };\n\n return service;\n }]);\n","lmApp\n .service('ManageSubscribersWindow', ['$rootScope', '$q', '$templateCache', '$compile', 'ValidatorService', 'SubscriberResource', 'ModalWindowService', 'ToastService',\n function ($rootScope, $q, $templateCache, $compile, ValidatorService, SubscriberResource, ModalWindowService, ToastService) {\n var service = {};\n\n service.Open = function (options) {\n var windowScope = $rootScope.$new();\n\n windowScope.loading = false;\n windowScope.fullscreen = false;\n windowScope.keyword = '';\n windowScope.filters = {};\n windowScope.offset = 0;\n windowScope.limit = 20;\n windowScope.isEnd = false;\n windowScope.isStart = windowScope.offset === 0;\n\n windowScope.searchResult = [];\n windowScope.title = options.title;\n windowScope.isSingle = options.type === 'single';\n windowScope.currentCollection = options.currentCollection || [];\n\n windowScope.$watch('filters', function (newValue, oldValue) {\n if (oldValue && !_.isEmpty(newValue)) {\n windowScope.applyFilters(newValue);\n }\n });\n\n windowScope.nextPage = function () {\n if (windowScope.isEnd) return;\n windowScope.offset += windowScope.limit;\n windowScope.isStart = windowScope.offset === 0;\n windowScope.applyFilters(windowScope.filters, true);\n };\n\n windowScope.prevPage = function () {\n if (windowScope.isStart) return;\n\n if (windowScope.offset >= windowScope.limit) {\n windowScope.offset -= windowScope.limit;\n windowScope.isStart = windowScope.offset === 0;\n } else {\n windowScope.offset = 0;\n windowScope.isStart = true;\n }\n windowScope.applyFilters(windowScope.filters, true);\n };\n\n windowScope.applyFilters = function (filters, is_force) {\n if (!is_force && (windowScope.loading || _.isEmpty(filters))) return;\n\n windowScope.isEnd = false;\n\n $rootScope.showLinearProgress('#mgmtWindowLoader');\n windowScope.loading = true;\n\n filters.keyword = _.trim(filters.keyword);\n\n var params = {};\n if (filters.keyword !== '') {\n windowScope.offset = 0;\n windowScope.limit = 20;\n params['username[in]'] = filters.keyword\n }\n params['$limit'] = windowScope.limit + 1;\n params['$offset'] = windowScope.offset;\n\n return SubscriberResource.get(params).$promise\n .then(function (result) {\n var collection = result.data;\n if (collection.length !== windowScope.limit + 1) {\n windowScope.isEnd = true;\n } else {\n collection.splice(windowScope.limit + 1, 1);\n }\n\n windowScope.searchResult = collection;\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n return collection;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n });\n };\n\n windowScope.manageSubscribers = {\n add: [],\n remove: [],\n single: {}\n };\n\n windowScope.close = function () {\n if (windowScope.loading) return;\n\n windowScope.fullscreenToogle(false);\n ModalWindowService.Close(windowScope.window, false);\n };\n\n windowScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n windowScope.fullscreen = state;\n } else {\n windowScope.fullscreen = !windowScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen(windowScope.window, state);\n };\n\n windowScope.addSubscriberTo = function (subscriber) {\n if (windowScope.isSingle) {\n windowScope.manageSubscribers.single = subscriber;\n\n windowScope.searchResult.forEach(function (subscriber) {\n subscriber._PrivateData.inCurrent = false;\n });\n\n subscriber._PrivateData.inCurrent = true;\n } else {\n subscriber._PrivateData.inCurrent = true;\n\n var inNew = false;\n windowScope.manageSubscribers.remove.forEach(function (item, index, collection) {\n if (item.id === subscriber.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) windowScope.manageSubscribers.add.push(subscriber);\n }\n };\n\n windowScope.removeSubscriberFrom = function (subscriber) {\n if (windowScope.isSingle) {\n windowScope.manageSubscribers.single = {};\n\n windowScope.searchResult.forEach(function (subscriber) {\n subscriber._PrivateData.inCurrent = false;\n });\n } else {\n subscriber._PrivateData.inCurrent = false;\n\n var inNew = false;\n windowScope.manageSubscribers.add.forEach(function (item, index, collection) {\n if (item.id === subscriber.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) windowScope.manageSubscribers.remove.push(subscriber);\n }\n };\n\n windowScope.manageSubscribersFor = function () {\n $rootScope.showLinearProgress('#mgmtWindowLoader');\n windowScope.loading = true;\n\n var allQ;\n if (windowScope.isSingle) {\n allQ = options.manageSubscribersFn(windowScope.manageSubscribers.single, options.obj);\n } else {\n allQ = options.manageSubscribersFn(windowScope.manageSubscribers.add, windowScope.manageSubscribers.remove, options.obj);\n }\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n ToastService.Small({\n title: 'Subscribers successfully added/removed',\n color: 'green',\n icon: 'package-down'\n }, 1000 * 3);\n windowScope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_GROUP_COLLECTION);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error happened. Try again',\n color: 'red',\n icon: 'package-down'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n windowScope.loading = false;\n });\n };\n\n\n windowScope.$watch('searchResult', function (newValue, oldValue) {\n windowScope.searchResult.forEach(function (subscriber) {\n if (!subscriber._PrivateData) subscriber._PrivateData = {};\n subscriber._PrivateData.inCurrent = _.includes(windowScope.currentCollection, subscriber.id);\n return subscriber;\n });\n });\n\n windowScope.selectAll = function () {\n if (!windowScope.isSelectedAll()) {\n windowScope.searchResult.forEach(function (subscriber) {\n windowScope.addSubscriberTo(subscriber);\n });\n } else {\n windowScope.searchResult.forEach(function (subscriber) {\n windowScope.removeSubscriberFrom(subscriber);\n });\n }\n };\n\n windowScope.isSelectedAll = function () {\n return windowScope.searchResult.filter(function (subscriber) {\n return subscriber._PrivateData.inCurrent;\n }).length === windowScope.searchResult.length;\n };\n\n windowScope._modalWindow_ = $templateCache.get('lm-manage-subscribers-window/lm-manage-window.tpl.html');\n windowScope._modalWindow_ = $compile(windowScope._modalWindow_)(windowScope);\n\n windowScope.window = ModalWindowService.Open({\n content: windowScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-manage-subscribers-window/lm-manage-window-nav.tpl.html'))(windowScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n },\n onComplete: function () {\n windowScope.$destroy();\n }\n });\n\n windowScope.applyFilters({keyword: ''});\n };\n\n return service;\n }]);\n","lmApp\n .service('ManageAssetsWindow', ['$rootScope', '$q', '$templateCache', '$compile', 'ValidatorService', 'AssetService', 'ModalWindowService', 'ToastService',\n function ($rootScope, $q, $templateCache, $compile, ValidatorService, AssetService, ModalWindowService, ToastService) {\n var service = {};\n\n service.OpenManageAssetsWindow = function (options) {\n\n var packageAssetManageScope = $rootScope.$new();\n\n packageAssetManageScope.loading = false;\n\n packageAssetManageScope.fullscreen = false;\n\n packageAssetManageScope.keyword = '';\n packageAssetManageScope.filters = {};\n packageAssetManageScope.offset = 0;\n packageAssetManageScope.limit = 20;\n packageAssetManageScope.isEnd = false;\n packageAssetManageScope.isStart = packageAssetManageScope.offset === 0;\n\n packageAssetManageScope.searchResult = [];\n packageAssetManageScope.title = options.title;\n packageAssetManageScope.isSingle = options.type === 'single';\n packageAssetManageScope.currentCollection = options.currentCollection || [];\n\n packageAssetManageScope.$watch('filters', function (newValue, oldValue) {\n if (oldValue && !_.isEmpty(newValue)) {\n packageAssetManageScope.applyFilters(newValue);\n }\n });\n\n packageAssetManageScope.nextPage = function () {\n if (packageAssetManageScope.isEnd) return;\n\n packageAssetManageScope.offset += packageAssetManageScope.limit;\n packageAssetManageScope.isStart = packageAssetManageScope.offset === 0;\n packageAssetManageScope.applyFilters(packageAssetManageScope.filters, true);\n };\n\n packageAssetManageScope.prevPage = function () {\n if (packageAssetManageScope.isStart) return;\n\n if (packageAssetManageScope.offset >= packageAssetManageScope.limit) {\n packageAssetManageScope.offset -= packageAssetManageScope.limit;\n packageAssetManageScope.isStart = packageAssetManageScope.offset === 0;\n } else {\n packageAssetManageScope.offset = 0;\n packageAssetManageScope.isStart = true;\n }\n packageAssetManageScope.applyFilters(packageAssetManageScope.filters, true);\n };\n\n packageAssetManageScope.applyFilters = function (filters, is_force) {\n if (!is_force && (packageAssetManageScope.loading || _.isEmpty(filters))) return;\n\n packageAssetManageScope.isEnd = false;\n\n $rootScope.showLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = true;\n\n if (!ValidatorService.Numerical(filters.keyword)) {\n AssetService.SearchByKeyword(filters.keyword, {\n genres: _.map(filters.genres, 'id'),\n categories: _.map(filters.categories, 'id'),\n filter: options.filter,\n view: options.view,\n onlyPackages: options.onlyPackages\n }, packageAssetManageScope.offset, packageAssetManageScope.limit + 1)\n .then(function (collection) {\n if (collection.length !== packageAssetManageScope.limit + 1) {\n packageAssetManageScope.isEnd = true;\n } else {\n collection.splice(packageAssetManageScope.limit + 1, 1);\n }\n\n packageAssetManageScope.searchResult = collection;\n\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n });\n } else {\n AssetService.GetAssetById(filters.keyword)\n .then(function (collection) {\n packageAssetManageScope.searchResult = collection;\n\n AssetService.SearchByKeyword(filters.keyword, {\n genres: _.map(filters.genres, 'id'),\n categories: _.map(filters.categories, 'id'),\n filter: options.filter,\n view: options.view\n })\n .then(function (collection) {\n packageAssetManageScope.searchResult = packageAssetManageScope.searchResult.concat(collection);\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n });\n }\n\n };\n\n packageAssetManageScope.manageAssets = {\n add: [],\n remove: [],\n single: {}\n };\n\n packageAssetManageScope.close = function () {\n if (packageAssetManageScope.loading) return;\n\n packageAssetManageScope.fullscreenToogle(false);\n ModalWindowService.Close(packageAssetManageScope.window, false);\n };\n\n packageAssetManageScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n packageAssetManageScope.fullscreen = state;\n } else {\n packageAssetManageScope.fullscreen = !packageAssetManageScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen(packageAssetManageScope.window, state);\n };\n\n packageAssetManageScope.addAssetTo = function (asset) {\n if (packageAssetManageScope.isSingle) {\n packageAssetManageScope.manageAssets.single = asset;\n\n packageAssetManageScope.searchResult.forEach(function (asset) {\n asset._PrivateData.inCurrent = false;\n });\n\n asset._PrivateData.inCurrent = true;\n } else {\n asset._PrivateData.inCurrent = true;\n\n var inNew = false;\n packageAssetManageScope.manageAssets.remove.forEach(function (item, index, collection) {\n if (item.id === asset.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) packageAssetManageScope.manageAssets.add.push(asset);\n }\n };\n\n packageAssetManageScope.removeAssetFrom = function (asset) {\n if (packageAssetManageScope.isSingle) {\n packageAssetManageScope.manageAssets.single = {};\n\n packageAssetManageScope.searchResult.forEach(function (asset) {\n asset._PrivateData.inCurrent = false;\n });\n } else {\n asset._PrivateData.inCurrent = false;\n\n var inNew = false;\n packageAssetManageScope.manageAssets.add.forEach(function (item, index, collection) {\n if (item.id === asset.id) {\n collection.splice(index, 1);\n inNew = true;\n }\n });\n\n if (!inNew) packageAssetManageScope.manageAssets.remove.push(asset);\n }\n };\n\n packageAssetManageScope.manageAssetsFor = function () {\n $rootScope.showLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = true;\n\n var allQ;\n if (packageAssetManageScope.isSingle) {\n allQ = options.manageAssetsFn(packageAssetManageScope.manageAssets.single, options.obj);\n } else {\n allQ = options.manageAssetsFn(packageAssetManageScope.manageAssets.add, packageAssetManageScope.manageAssets.remove, options.obj);\n }\n\n $q.all(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n ToastService.Small({\n title: 'Assets successfully added/removed',\n color: 'green',\n icon: 'package-down'\n }, 1000 * 3);\n if (options.data) $rootScope.$broadcast($rootScope.EVENTS['UPDATE_' + options.data.toUpperCase() + '_COLLECTION'], {\n id: options.obj.id,\n index: options.index\n });\n packageAssetManageScope.close();\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error happened. Try again',\n color: 'red',\n icon: 'package-down'\n }, 1000 * 3);\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#mgmtWindowLoader');\n packageAssetManageScope.loading = false;\n });\n };\n\n\n packageAssetManageScope.$watch('searchResult', function (newValue, oldValue) {\n packageAssetManageScope.searchResult.forEach(function (asset) {\n if (!asset._PrivateData) asset._PrivateData = {};\n asset._PrivateData.inCurrent = _.includes(packageAssetManageScope.currentCollection, asset.id);\n return asset;\n });\n });\n\n packageAssetManageScope.selectAll = function () {\n if (!packageAssetManageScope.isSelectedAll()) {\n packageAssetManageScope.searchResult.forEach(function (asset) {\n packageAssetManageScope.addAssetTo(asset);\n });\n } else {\n packageAssetManageScope.searchResult.forEach(function (asset) {\n packageAssetManageScope.removeAssetFrom(asset);\n });\n }\n };\n\n packageAssetManageScope.isSelectedAll = function () {\n return packageAssetManageScope.searchResult.filter(function (asset) {\n return asset._PrivateData.inCurrent;\n }).length === packageAssetManageScope.searchResult.length;\n };\n\n packageAssetManageScope._modalWindow_ = $templateCache.get('lm-manage-window/lm-manage-window.tpl.html');\n packageAssetManageScope._modalWindow_ = $compile(packageAssetManageScope._modalWindow_)(packageAssetManageScope);\n\n packageAssetManageScope.window = ModalWindowService.Open({\n content: packageAssetManageScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-manage-window/lm-manage-window-nav.tpl.html'))(packageAssetManageScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n },\n onComplete: function () {\n packageAssetManageScope.$destroy();\n }\n });\n\n packageAssetManageScope.applyFilters({keyword: ''});\n };\n\n return service;\n }]);\n","lmApp\n .service('ModalWindowService', ['$rootScope', '$templateCache', '$compile', '$location',\n function ($rootScope, $templateCache, $compile, $location) {\n\n //\n // PRIVATE MEMBERS\n //\n var ScopesList = [];\n var windowContainer;\n var overlay;\n var _window_ = angular.element(window);\n\n windowContainer = angular.element('
    ' +\n '
    ');\n overlay = windowContainer.find('#lean-overlay');\n overlay.css({opacity: 0.8});\n angular.element('body').append(windowContainer);\n\n var _CreateAction = function (action, modalScope) {\n\n var elem = angular.element('' +\n ' ' +\n (action.title || 'Action') + ' ');\n\n elem = $compile(elem)(modalScope);\n\n elem.bind('click', function () {\n if (action.check && !action.check()) {\n return;\n }\n\n if (action.fn) {\n action.fn();\n }\n\n Close(modalScope, true);\n });\n\n elem.bind('$destroy', function () {\n elem.unbind('click');\n });\n\n return elem;\n };\n\n var _onKeyDown = function (event) {\n var key = event.which;\n\n if (key === 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n\n if (ScopesList.length) {\n Close(_.pullAt(ScopesList, ScopesList.length - 1)[0], false);\n }\n\n return false;\n\n }\n };\n\n _window_.bind('keydown', _onKeyDown);\n\n /**\n *\n * @param options {\n * content: DOMNode,\n * navigation: DOMNode,\n * actions: Array.{\n * className: String - Additional class\n * title: String,\n * color: String,\n * fn: Function,\n * check: Function -> return Boolean if passed\n * },\n * onInit: Function\n * onComplete: Function(result),\n * size: {\n * s: Number,\n * m: Number,\n * l: Number\n * },\n * isFixed: Boolean,\n * keyboard: Boolean - close on keyboard events\n * clear: Boolean - with out padding,\n * clearRoute: Array - clear route after close\n * @returns {*} $scope\n */\n var Open = function (options) {\n var modalScope = $rootScope.$new(false);\n modalScope.depth = ScopesList.length;\n\n modalScope._id = 'modal_' + Date.now() + parseInt(Math.random() / 1000, 10);\n\n modalScope._modal_element_ = $templateCache.get('lm-modal-window/lm-modal-window.tpl.html');\n\n modalScope._modal_element_ = $compile(modalScope._modal_element_)(modalScope);\n modalScope._modal_element_.attr('id', modalScope._id);\n windowContainer.append(modalScope._modal_element_);\n\n modalScope._navigation_element_ = modalScope._modal_element_.find('.modal-navigation');\n modalScope._content_element_ = modalScope._modal_element_.find('.modal-content');\n modalScope._fotter_element_ = modalScope._modal_element_.find('.modal-footer');\n\n if (modalScope.depth) {\n modalScope._empty_ = angular.element('
    ');\n windowContainer.append(modalScope._empty_);\n }\n\n if (options.size) modalScope.size = options.size;\n\n modalScope._content_element_.css({visibility: 'hidden'});\n\n if (options.content) {\n if (options.clear) {\n modalScope._content_element_.addClass('p0');\n }\n modalScope._content_element_.html(options.content);\n }\n\n if (options.navigation) {\n modalScope._navigation_element_.html(options.navigation);\n }\n\n if (options.keyboard) modalScope.isKeyevent = true;\n\n modalScope.clear = options.clear;\n modalScope.clearRoute = options.clearRoute;\n\n modalScope.withActions = options.actions && options.actions.length;\n\n if (options.actions) {\n options.actions.forEach(function (action) {\n modalScope._fotter_element_.append(_CreateAction(action, modalScope));\n });\n }\n\n if (options.onComplete) {\n modalScope.FinalCallback = options.onComplete;\n } else {\n modalScope.FinalCallback = function () {\n }\n }\n\n if (options.onInit) {\n modalScope.InitCallback = options.onInit;\n } else {\n modalScope.InitCallback = function () {\n }\n }\n\n if (options.isFixed) modalScope.isFixed = true;\n\n modalScope._CSS = {\n display: 'block'\n };\n\n modalScope._modal_element_.css({\n top: 5 - modalScope.depth * 2 + '%',\n 'z-index': _.size(ScopesList) + 1000\n });\n\n TweenMax\n .from(modalScope._modal_element_, 0.35, {\n top: '0px',\n ease: Expo.easeInOut,\n onComplete: function () {\n\n modalScope._modal_element_.css({\n top: 5 - modalScope.depth * 2 + '%',\n display: 'block'\n });\n\n modalScope._content_element_.css({\n visibility: 'visible',\n maxHeight: _window_.height() * 0.9\n });\n\n\n if (modalScope._empty_) modalScope._empty_.css({\n 'z-index': (Number(modalScope._modal_element_.css('z-index')) - 1)\n });\n\n modalScope.InitCallback();\n }\n });\n\n TweenMax\n .to(overlay, 0.35, {\n display: 'block',\n opacity: 0.5,\n ease: Expo.easeInOut\n });\n\n modalScope.offset = window.pageYOffset;\n\n angular.element('body').css({\n top: -modalScope.offset + 'px'\n });\n\n angular.element('body').addClass('modal-is-open');\n\n modalScope.onResize = function () {\n\n if (modalScope.fullscreen) {\n modalScope._modal_element_.find('.modal-content').css({maxHeight: _window_.height(), height: '100%'});\n } else {\n modalScope._modal_element_.find('.modal-content').css({maxHeight: _window_.height() * 0.9});\n }\n };\n\n _window_.bind('resize', modalScope.onResize);\n\n ScopesList.push(modalScope);\n\n return modalScope;\n };\n\n var Close = function (modalScope, result) {\n if (!modalScope || !modalScope._modal_element_) return;\n\n TweenMax\n .to(modalScope._modal_element_, 0.45, {\n top: '-200px',\n ease: Expo.easeInOut,\n onComplete: function () {\n //delete ScopesList[modalScope._id];\n angular.element('body').unbind('resize', modalScope.onResize);\n\n modalScope._modal_element_.remove();\n\n if (ScopesList.indexOf(modalScope) !== -1) {\n ScopesList.splice(ScopesList.indexOf(modalScope), 1);\n }\n\n if (ScopesList.length < 1) {\n overlay.css({display: 'none'});\n angular.element('body').removeAttr('style');\n angular.element('body').removeClass('modal-is-open');\n\n _window_.scrollTop(modalScope.offset);\n }\n\n if (modalScope._empty_) modalScope._empty_.remove();\n\n if (modalScope.clearRoute && modalScope.clearRoute.length) {\n modalScope.clearRoute.forEach(function (route) {\n $location.search(route, null);\n });\n }\n\n modalScope.$destroy();\n }\n });\n\n modalScope.FinalCallback(!!result);\n };\n\n var Fullscreen = function (modalScope, state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n modalScope.onResize();\n };\n\n // Public API\n return {\n Open: Open,\n Close: Close,\n Fullscreen: Fullscreen\n }\n }]);\n","lmApp\n .controller('MonitoringWidgetController', ['$scope', '$rootScope', '$timeout', 'InfrastructureService', function ($scope, $rootScope, $timeout, InfrastructureService) {\n $scope.controls = {\n range: '1h',\n stepDiv: 720,\n end: 0,\n endDate: null,\n endTime: moment().diff(moment().startOf('day'), 'seconds')\n };\n\n $scope.widgetData = {\n widgetReloading: false,\n showControls: false\n };\n\n $scope.colors = ['#4caf50', '#f44336', '#2196f3', '#ff9800', '#6a1b9a', '#283593', '#e64a19', '#37474f'];\n\n $scope.getColor = function (index) {\n return $scope.colors[index - $scope.colors.length * Math.floor(index / $scope.colors.length)];\n };\n\n $scope.parseRange = function (string) {\n var tokens = {\n m: 60,\n h: 60 * 60,\n d: 60 * 60 * 24,\n w: 60 * 60 * 64 * 7,\n y: 60 * 60 * 64 * 7 * 52\n };\n\n var seconds = 0;\n\n var y = string.match(/(\\d+)*y/);\n var w = string.match(/(\\d+)*w/);\n var d = string.match(/(\\d+)*d/);\n var h = string.match(/(\\d+)*h/);\n var m = string.match(/(\\d+)*m/);\n if (y) seconds += parseInt(y[1]) * tokens.y;\n if (w) seconds += parseInt(w[1]) * tokens.w;\n if (d) seconds += parseInt(d[1]) * tokens.d;\n if (h) seconds += parseInt(h[1]) * tokens.h;\n if (m) seconds += parseInt(m[1]) * tokens.m;\n\n return seconds;\n };\n\n /**\n * Make X Axis depends on Data\n */\n var make_x_axis = function (xRange) {\n return d3.svg.axis()\n .scale(xRange)\n .orient('bottom')\n .ticks(5);\n };\n\n /**\n * Make Y Axis depends on Data\n */\n var make_y_axis = function (yRange) {\n return d3.svg.axis()\n .scale(yRange)\n .orient('left')\n .ticks(5)\n };\n\n var bisectDate = d3.bisector(function (d) {\n return d.x;\n }).left;\n\n $scope.getInitData = function () {\n\n $rootScope.showLinearProgress('#monitoringWidgetLoader_' + $scope.id);\n InfrastructureService.monitoringRequest($scope.expr, $scope.parseRange($scope.controls.range), Math.floor($scope.parseRange($scope.controls.range) / $scope.controls.stepDiv), $scope.controls.end)\n .then(function (response) {\n console.log(response);\n\n if (response.type === 'matrix') {\n var metrics = _.map(response.value, 'metric.' + $scope.label);\n\n $scope.series = {};\n\n _.forEach(response.value, function (series, index) {\n $scope.series[_.get(series, 'metric.' + $scope.label)] = {\n color: $scope.getColor(index),\n label: metrics[index] || ''\n }\n });\n\n $scope.data = _.map(_.map(response.value, 'values'), function (datas, index) {\n return _.map(datas, function (data) {\n return {\n x: data[0] * 1000,\n y: +data[1] * 2,\n humanX: moment.utc(data[0] * 1000),\n series: metrics[index]\n };\n }).sort(function (a, b) {\n return a.x - b.x;\n });\n });\n\n //$scope.labels = _.map(_.map(response.value, 'values')[0], function (label) {\n // return moment(label[0] * 1000).format('MMMM Do YYYY, h:mm:ss a');\n //});\n\n }\n\n $rootScope.hideLinearProgress('#monitoringWidgetLoader_' + $scope.id);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#monitoringWidgetLoader_' + $scope.id);\n\n console.error(reason);\n });\n };\n\n $scope.updateData = function () {\n\n InfrastructureService.monitoringRequest($scope.expr, $scope.parseRange($scope.controls.range), Math.floor($scope.parseRange($scope.controls.range) / $scope.controls.stepDiv), $scope.controls.end)\n .then(function (response) {\n\n if (response.type === 'matrix') {\n var metrics = _.map(response.value, 'metric.' + $scope.label);\n\n $scope.series = {};\n\n _.forEach(response.value, function (series, index) {\n $scope.series[_.get(series, 'metric.' + $scope.label)] = {\n color: $scope.getColor(index),\n label: metrics[index] || ''\n }\n });\n\n $scope.data = _.map(_.map(response.value, 'values'), function (datas, index) {\n return _.map(datas, function (data) {\n return {\n x: data[0] * 1000,\n y: +data[1],\n humanX: moment.utc(data[0] * 1000),\n series: metrics[index]\n };\n });\n });\n }\n\n })\n .catch(function (reason) {\n console.error(reason);\n });\n };\n\n /**\n *\n * @type {*|(function(newValue: Array, oldValue: Array))|Function}\n */\n $scope.watcherControl = $scope.$watchCollection('controls', function (newValue /** Array **/, oldValue) {\n if (_.isEqual(oldValue, newValue)) return;\n\n if (newValue.endDate) {\n $scope.controls.end = newValue.endDate.unix() + newValue.endTime;\n }\n });\n\n /**\n *\n * @type {*|(function(newValue: Array, oldValue: Array))|Function}\n */\n $scope.watcherData = $scope.$watch('data', function (newValue /** Array **/, oldValue) {\n\n if (!newValue) return;\n\n d3.selectAll('#monitoring_widget_' + $scope.id + ' > svg > *').remove();\n\n $scope.noData = !newValue.length;\n\n $timeout(function () {\n $scope.widgetData.widgetReloading = true;\n });\n\n var realHeight = $scope.sizes.HEIGHT - $scope.sizes.MARGINS.top - $scope.sizes.MARGINS.bottom;\n\n var realWidth = $scope.sizes.WIDTH - $scope.sizes.MARGINS.left - $scope.sizes.MARGINS.right;\n\n\n var lineFunc = d3.svg.line()\n .x(function (d) {\n return xRange(d.x);\n })\n .y(function (d) {\n return yRange(d.y);\n })\n .interpolate('linear');\n\n var xRange = d3.time.scale().range([$scope.sizes.MARGINS.left, $scope.sizes.WIDTH - $scope.sizes.MARGINS.right]);\n\n var yRange;\n if ($scope.logY) {\n yRange = d3.scale.log().clamp(true).range([$scope.sizes.HEIGHT - $scope.sizes.MARGINS.top, $scope.sizes.MARGINS.bottom]);\n\n } else {\n yRange = d3.scale.linear().range([$scope.sizes.HEIGHT - $scope.sizes.MARGINS.top, $scope.sizes.MARGINS.bottom]);\n }\n\n var minX = d3.min(newValue, function (kv) {\n return d3.min(kv, function (d) {\n return d.x;\n });\n });\n var maxX = d3.max(newValue, function (kv) {\n return d3.max(kv, function (d) {\n return d.x;\n });\n });\n var minY = d3.min(newValue, function (kv) {\n return d3.min(kv, function (d) {\n return d.y;\n });\n });\n var maxY = d3.max(newValue, function (kv) {\n return d3.max(kv, function (d) {\n return d.y;\n });\n });\n\n xRange.domain([minX, maxX]);\n yRange.domain([0.000001, maxY]).nice();\n\n /**\n * AXIS\n */\n var xAxis = d3.svg.axis()\n .scale(xRange)\n .tickSize(1);\n\n var yAxis = d3.svg.axis()\n .scale(yRange)\n .tickSize(1)\n .orient('left');\n\n if ($scope.logY) {\n yAxis.ticks(0, \"e\")\n .tickFormat(function (d) {\n var log = Math.log(d) / Math.LN10;\n return Math.abs(Math.round(log) - log) < 1e-6 ? d : '';\n });\n }\n\n /**\n * DRAW GRID\n */\n $scope.canvas.append('g')\n .attr('class', 'grid')\n .attr('height', realHeight)\n .attr('width', realWidth)\n .attr('transform', 'translate(0,' + ($scope.sizes.HEIGHT - $scope.sizes.MARGINS.bottom) + ')')\n .call(make_x_axis(xRange)\n .tickSize(-realHeight, 0, 0)\n .tickFormat('')\n );\n\n $scope.canvas.append('g')\n .attr('class', 'grid')\n .attr('height', realHeight)\n .attr('width', realWidth)\n .attr('transform', 'translate(' + ($scope.sizes.MARGINS.left) + ',0)')\n .call(make_y_axis(yRange)\n .tickSize(-$scope.sizes.WIDTH, 0, 0)\n .tickFormat('')\n );\n\n $scope.canvas.append('svg:rect') // Grid lines Bakcground\n .attr('x', 0)\n .attr('y', 0)\n .attr('transform', 'translate(' + ($scope.sizes.MARGINS.left) + ',' + ($scope.sizes.MARGINS.top) + ')')\n .attr('height', realHeight)\n .attr('width', $scope.sizes.WIDTH)\n .attr('fill', '#E6E6E6')\n .style('opacity', '0.2');\n\n /**\n * DRAW AXIS\n */\n $scope.canvas.append('svg:g')\n .attr('class', 'x axis')\n .attr('transform', 'translate(0,' + ($scope.sizes.HEIGHT - $scope.sizes.MARGINS.bottom) + ')')\n .call(xAxis);\n\n $scope.canvas.append('svg:g')\n .attr('class', 'y axis')\n .attr('transform', 'translate(' + ($scope.sizes.MARGINS.left) + ',0)')\n .call(yAxis);\n\n $scope.container\n .on('mouseover', function (d) {\n $scope.tooltip\n .style('left', 0)\n .style('top', $scope.sizes.MARGINS.top + 'px')\n .style('opacity', 1)\n .style('height', realHeight + 'px');\n\n $scope.tooltip_dot\n .style('display', 'block');\n\n $scope.tooltip_item\n .style('opacity', 1);\n })\n .on('mousemove', function (e) {\n var coords = d3.mouse(this);\n var x0 = xRange.invert(coords[0]);\n var y0 = yRange.invert(coords[1]);\n\n var ds = $scope.data.map(function (e) {\n var i = bisectDate(e, x0, 1);\n var d0 = e[i - 1];\n var d1 = e[i];\n return x0 - d0.x > d1.x - x0 ? d1 : d0;\n });\n\n var distanceOld, distanceNew, d;\n if (ds.length) {\n distanceOld = Math.sqrt((ds[0].x - x0.getTime()) * (ds[0].x - x0.getTime()) + (ds[0].y - y0) * (ds[0].y - y0));\n d = [ds[0]];\n }\n\n for (var i = 0; i < ds.length; i++) {\n\n distanceNew = Math.sqrt((ds[i].x - x0.getTime()) * (ds[i].x - x0.getTime()) + (ds[i].y - y0) * (ds[i].y - y0));\n if (distanceNew < distanceOld) {\n d = [ds[i]];\n distanceOld = distanceNew;\n }\n }\n\n for (var i = 0; i < ds.length; i++) {\n\n if (ds[i].y === d[0].y && ds[i].series !== d[0].series) {\n d.push(ds[i]);\n }\n }\n\n $scope.tooltip\n .style('left', (xRange(x0)) + 'px');\n\n $scope.tooltip_text.style('right', '').style('left', '');\n if (xRange(x0) > $scope.canvas.node().getBoundingClientRect().width - $scope.tooltip_text.node().offsetWidth) {\n $scope.tooltip_text.style('left', -$scope.tooltip_text.node().offsetWidth + 'px');\n }\n\n $scope.tooltip_text\n .text(moment.utc(x0).format('ddd, MMMM Do YYYY, h:mm:ss a'));\n\n if (d) {\n $scope.tooltip_dot\n .style('display', 'block')\n .style('border-color', $scope.series[d[0].series].color)\n .style('top', (yRange(d[0].y) - $scope.sizes.MARGINS.top) + 'px');\n\n var tooltipItemText = d.map(function (item) {\n return '
    ' + item.series + '
    ' + item.y + '
    ';\n });\n\n $scope.tooltip_item\n .style('top', (yRange(d[0].y) - $scope.tooltip_item.node().offsetHeight / 2) + 'px')\n .html(tooltipItemText.join(''));\n\n $scope.tooltip_item.style('right', '').style('left', '');\n if (xRange(x0) > $scope.canvas.node().getBoundingClientRect().width - $scope.tooltip_item.node().offsetWidth) {\n $scope.tooltip_item.style('left', -$scope.tooltip_item.node().offsetWidth - 10 + 'px');\n } else {\n $scope.tooltip_item.style('left', 10 + 'px');\n }\n\n //$scope.tooltip_item.style('top', $scope.tooltip_item.node().offsetHeight / 2 + 'px');\n\n /* Check if tooltip is overlap Date on top */\n var extraMargin = 18 + 6; // 12px (line height) + 6px (to create some extra distance)\n if (($scope.tooltip_text.node().offsetHeight + extraMargin) > parseFloat($scope.tooltip_item.node().style.top)) {\n $scope.tooltip_item.style('top', $scope.tooltip_text.node().offsetHeight + extraMargin + 'px');\n }\n }\n })\n .on('mouseout', function (d) {\n $scope.tooltip\n .style('opacity', 0);\n\n $scope.tooltip_dot\n .style('display', 'none');\n\n $scope.tooltip_item\n .style('opacity', 0);\n });\n\n newValue.forEach(function (partData, index) {\n\n $scope.canvas.append('svg:path')\n .attr('d', lineFunc(partData))\n .attr('stroke', $scope.getColor(index))\n .attr('stroke-width', 1.5)\n .attr('fill', 'none');\n\n });\n\n $timeout(function () {\n $scope.widgetData.widgetReloading = false;\n })\n\n })\n\n }]);\n\nlmApp\n .directive('lmMonitoringWidget', ['$timeout', '$interval', '$window', function ($timeout, $interval, $window) {\n return {\n restrict: 'E',\n scope: {\n id: '@',\n title: '@',\n type: '@',\n expr: '@',\n label: '@',\n isLive: '@',\n zeroY: '=',\n logY: '='\n },\n controller: 'MonitoringWidgetController',\n link: function (scope, element) {\n scope.expr = scope.expr.replace(/'/g, '\"');\n\n scope._resizeWidget = function () {\n scope.sizes = {\n WIDTH: element.find('div#monitoring_widget_' + scope.id).outerWidth(),\n HEIGHT: 500,\n MARGINS: {\n top: 20,\n right: 0,\n bottom: 20,\n left: 50\n }\n };\n\n scope.canvas\n .attr('height', scope.sizes.HEIGHT)\n .attr('width', scope.sizes.WIDTH);\n\n scope.updateData();\n };\n\n\n $timeout(function () {\n scope.sizes = {\n WIDTH: element.find('div#monitoring_widget_' + scope.id).outerWidth(),\n HEIGHT: 500,\n MARGINS: {\n top: 20,\n right: 0,\n bottom: 20,\n left: 50\n }\n };\n\n scope.container = d3.select('div#monitoring_widget_' + scope.id);\n\n scope.canvas = scope.container.append('svg')\n .attr('height', scope.sizes.HEIGHT)\n .attr('width', scope.sizes.WIDTH);\n\n /**\n * Details Line\n **/\n scope.tooltip = scope.container.select('#details');\n\n /**\n * Details Text\n **/\n scope.tooltip_text = scope.tooltip.select('#x_details');\n scope.tooltip_dot = scope.tooltip.select('#dot_details');\n scope.tooltip_item = scope.tooltip.select('#item_details');\n\n scope.getInitData();\n });\n\n if (+scope.isLive) scope.reload = $interval(function () {\n scope.updateData();\n }, +scope.isLive);\n\n angular.element($window).bind('resize', scope._resizeWidget);\n\n element.on('$destroy', function () {\n if (scope.isLive && scope.reload) $interval.cancel(scope.reload);\n scope.watcherData();\n scope.watcherControl();\n angular.element($window).unbind('resize', scope._resizeWidget);\n });\n },\n templateUrl: 'lm-monitoring-widget/monitoring-widget.tpl.html'\n };\n }]);\n","/**\n * Pagination directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmPagination', [function () {\n return {\n restrict: 'E',\n scope: {\n offset: '=?',\n limit: '=?',\n nextFn: '&',\n prevFn: '&',\n isStart: '=?',\n isEnd: '=?',\n maxLength: '=?'\n },\n link: function (scope, element, attrs, ngModel) {\n scope.page = parseInt(scope.offset / scope.limit, 10) + 1;\n if (scope.maxLength) {\n scope.maxPage = parseInt(scope.maxLength / scope.limit, 10) + 1;\n }\n\n scope.offsetWatcher = scope.$watchCollection('offset', function (newValue) {\n scope.page = parseInt(newValue / scope.limit, 10) + 1;\n });\n\n scope.maxLengthtWatcher = scope.$watchCollection('maxLength', function (newValue) {\n scope.maxPage = parseInt(newValue / scope.limit, 10) + 1;\n });\n\n scope.$on('$destroy', function () {\n scope.offsetWatcher();\n scope.maxLengthtWatcher();\n });\n },\n templateUrl: 'lm-pagination/pagination.tpl.html'\n };\n }]);\n","lmApp\n .directive('lmWaves', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n var waveMe = function (event) {\n var ripple = element.find('.ripple');\n\n if (ripple.length === 0) {\n ripple = angular.element('', {\n class: 'ripple'\n });\n\n if (attrs.lmWaves) {\n ripple.addClass('bgc-' + attrs.lmWaves);\n }\n\n element.prepend(ripple);\n }\n\n ripple.removeClass('ripple--is-animated');\n\n if (!ripple.height() && !ripple.width()) {\n var diameter = Math.max(element.outerWidth(), element.outerHeight());\n\n ripple.css({height: diameter, width: diameter});\n }\n\n var x = event.pageX - element.offset().left - ripple.width() / 2;\n var y = event.pageY - element.offset().top - ripple.height() / 2;\n\n ripple.css({top: y + 'px', left: x + 'px'}).addClass('ripple--is-animated');\n\n scope.rippleTimeout = $timeout(function () {\n ripple.removeClass('ripple--is-animated');\n }, 850);\n };\n\n element\n .css({\n position: 'relative',\n overflow: 'hidden'\n })\n .bind('mousedown', waveMe);\n\n element.on('$destroy', function () {\n element.unbind('mousedown', waveMe);\n $timeout.cancel(scope.rippleTimeout);\n });\n }\n };\n }]);\n","lmApp\n .directive('lmSearchTokens', ['$templateCache', '$compile', '$timeout', '$window',\n function ($templateCache, $compile, $timeout, $window) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n filters: '=?',\n placeholder: '@',\n search: '=',\n progress: '@',\n block: '@',\n loading: '=?',\n notEmpty: '@?'\n },\n controller: 'LmSearchTokensController',\n link: function (scope, elem, attrs, controller) {\n scope._token_element_ = elem;\n\n var setDropdownCss = function (e) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n scope._dropdown_.css({\n position: 'fixed',\n top: scope._token_element_.offset().top - angular.element(window).scrollTop(),\n left: scope._token_element_.offset().left - angular.element(window).scrollLeft(),\n width: scope._token_element_.width()\n });\n\n TweenMax.to(scope._dropdown_, 0.350,\n {\n opacity: 1,\n ease: Expo.easeInOut\n });\n\n $timeout(function () {\n scope._searchField_ = scope._dropdown_.find('input#asset_search');\n\n scope._searchField_.bind('keydown', function (keyEvent) {\n var key = keyEvent.which;\n\n if (key === 13) {\n scope.buildFilters();\n scope.removeSearchDropdown();\n }\n\n if (key === 27) {\n scope.buildFilters();\n scope.removeSearchDropdown();\n }\n });\n\n scope._searchField_.focus();\n }, 350);\n };\n\n scope.showSearchDropdown = function (e) {\n e.stopPropagation();\n e.preventDefault();\n\n if (scope.loading) return;\n\n scope.offset = window.pageYOffset;\n scope.keyword = '';\n\n if (scope.block) angular.element('body').css({\n position: 'fixed',\n width: '100%',\n top: (-1) * scope.offset + 'px'\n });\n\n scope._token_element_.css({\n opacity: 0\n });\n\n scope._dropdown_ = $templateCache.get('lm-search-tokens/search-token.dropdown.tpl.html');\n scope._dropdown_ = $compile(scope._dropdown_)(scope);\n\n scope._dropdown_.appendTo('body');\n\n scope.$emptyDiv = scope._dropdown_.find('#empty');\n\n setDropdownCss(e);\n\n angular.element($window).bind('resize', setDropdownCss);\n\n scope.$emptyDiv.bind('click', function (data) {\n scope.buildFilters();\n scope.removeSearchDropdown();\n });\n\n return false;\n };\n\n scope.removeSearchDropdown = function () {\n scope.isDropped = false;\n\n if (scope.block) angular.element('body').removeAttr('style');\n angular.element($window).scrollTop(scope.offset);\n\n angular.element($window).unbind('resize');\n scope.$emptyDiv.unbind('click');\n\n scope._dropdown_.remove();\n scope._token_element_.css({\n opacity: 1\n });\n };\n \n if (scope.notEmpty) {\n scope.buildFilters();\n }\n\n scope._token_element_.bind('click', scope.showSearchDropdown);\n\n scope._token_element_.on('$destroy', function () {\n scope._token_element_.unbind('click', scope.showSearchDropdown);\n });\n },\n templateUrl: 'lm-search-tokens/search-tokens.tpl.html'\n };\n }]);\n\nlmApp\n .controller('LmSearchTokensController', ['$scope', '$rootScope', 'AssetService', '$templateCache', '$compile', '$timeout', '$window', 'ValidatorService',\n function ($scope, $rootScope, AssetService, $templateCache, $compile, $timeout, $window, ValidatorService) {\n\n $scope.registeredNavigated = [];\n $scope.currentFocused = {};\n\n var arrayObjectIndexOf = function (arr, obj) {\n for (var i = 0; i < arr.length; i++) {\n if (angular.equals(arr[i], obj)) {\n return i;\n }\n }\n return -1;\n };\n\n $scope.isDropped = false;\n\n $scope.searchData = {\n filters: [\n {\n title: 'Categories',\n type: 'category'\n },\n {\n title: 'Genres',\n type: 'genre'\n },\n {\n title: 'Keyword',\n type: 'keyword'\n }\n ],\n loading: false,\n filterGroups: [],\n genres: [],\n categories: [],\n\n addToSelected: function (token) {\n if (token.type === 'keyword') {\n var prevText = _.find($scope.searchData.filterGroups, {type: 'keyword'});\n\n if (prevText) {\n $scope.searchData.filterGroups.splice($scope.searchData.filterGroups.indexOf(prevText), 1);\n }\n }\n\n this.filterGroups.push(token);\n\n $scope._searchField_.focus();\n $scope.keyword = '';\n //clearNavigated();\n },\n\n removeFromSelected: function (token) {\n var index = arrayObjectIndexOf($scope.searchData.filterGroups, token);\n if (index !== -1) {\n $scope.searchData.filterGroups.splice(index, 1);\n }\n }\n };\n\n $scope.isTokens = function (type) {\n return !!$scope.searchData.filterGroups.filter(function (token) {\n return token.type === type;\n }).length;\n };\n\n $scope.clearFilters = function () {\n $scope.searchData.filterGroups = [];\n $scope.keyword = '';\n };\n\n $scope.filerCollection = function () {\n return function (value) {\n return $scope.keyword\n && value.title.toLowerCase().match(new RegExp($scope.keyword.toLowerCase(), 'g'))\n && $scope.searchData.filterGroups.indexOf(value) === -1;\n }\n };\n\n $scope.applyFilters = function (filters) {\n if ($scope.loading || _.isEmpty(filters)) return;\n\n $rootScope.showLinearProgress($scope.progress);\n $scope.loading = true;\n\n if (!ValidatorService.Numerical(filters.keyword)) {\n AssetService.SearchByKeyword(filters.keyword, {\n genres: _.map(filters.genres, 'id'),\n categories: _.map(filters.categories, 'id')\n })\n .then(function (collection) {\n $scope.search = collection;\n $rootScope.hideLinearProgress($scope.progress);\n $scope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress($scope.progress);\n $scope.loading = false;\n });\n } else {\n AssetService.GetAssetById(filters.keyword)\n .then(function (collection) {\n $scope.search = collection;\n $rootScope.hideLinearProgress($scope.progress);\n $scope.loading = false;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress($scope.progress);\n $scope.loading = false;\n });\n }\n };\n\n $scope.buildFilters = function () {\n\n var prevText = _.find($scope.searchData.filterGroups, {type: 'keyword'});\n\n if (prevText && $scope.keyword) {\n $scope.searchData.filterGroups.splice($scope.searchData.filterGroups.indexOf(prevText), 1);\n }\n\n if ($scope.keyword) {\n $scope.searchData.filterGroups.push({\n type: 'keyword',\n title: $scope.keyword\n });\n }\n\n var genres = $scope.searchData.filterGroups.filter(function (token) {\n return token.type === 'genre';\n });\n\n var categories = $scope.searchData.filterGroups.filter(function (token) {\n return token.type === 'category';\n });\n\n var text = '';\n if ($scope.keyword) {\n text = $scope.keyword;\n } else {\n text = (prevText) ? prevText.title : '';\n }\n\n $timeout(function () {\n $scope.filters = {\n keyword: text,\n genres: genres,\n categories: categories\n };\n\n if ($scope.search) $scope.applyFilters($scope.filters);\n })\n };\n\n AssetService.GetGenresCollection()\n .then(function (collection) {\n $scope.searchData.genres = collection.filter(function (genre) {\n genre.type = 'genre';\n return genre.title !== 'Undefined'\n });\n });\n\n AssetService.GetCategoryCollection()\n .then(function (collection) {\n $scope.searchData.categories = collection.filter(function (category) {\n category.type = 'category';\n return category.title !== 'Undefined'\n });\n });\n\n $scope.watcherFilter = $scope.$watchCollection('filters', function (newValue, oldValue) {\n if (newValue && newValue.keyword) {\n var prevText = _.find($scope.searchData.filterGroups, {type: 'keyword'});\n\n if (prevText) {\n $scope.searchData.filterGroups.splice($scope.searchData.filterGroups.indexOf(prevText), 1);\n }\n\n $scope.searchData.filterGroups.push({\n type: 'keyword',\n title: newValue.keyword\n });\n }\n\n if (!newValue.keyword && oldValue.keyword) {\n var prevText = _.find($scope.searchData.filterGroups, {type: 'keyword'});\n\n if (prevText) {\n $scope.searchData.filterGroups.splice($scope.searchData.filterGroups.indexOf(prevText), 1);\n }\n }\n });\n \n $scope.$on('$destroy', function () {\n $scope.watcherFilter();\n });\n }\n ]);\n","lmApp.\n directive('lmSelectMultiple', ['$window', '$document', '$timeout', '$rootScope',\n function ($window, $document, $timeout, $rootScope) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n ngModel: '=',\n options: '=',\n placeholder: '@',\n limit: '@',\n withSearch: '@',\n error: '@',\n errorFn: '&',\n warning: '@',\n warningFn: '&',\n success: '@',\n successFn: '&',\n ngDisabled: '=?',\n optionSection: '@',\n optionType: '@',\n onFocus: '&',\n onBlur: '&'\n },\n link: function (scope, element, attrs) {\n var makeid = function(length) {\n var result = '';\n var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var charactersLength = characters.length;\n for ( var i = 0; i < length; i++ ) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n };\n\n scope._multi_element_ = element;\n scope._input_ = element.find('.tag-container');\n scope._arrow_ = element.find('.mdi-chevron-down');\n scope._options_ = element.find('ul');\n scope._uniqId = makeid(10);\n scope._search_ = element.find('#search' + scope._uniqId);\n scope._body_ = angular.element('body');\n scope._empty_ = angular.element('
    ');\n scope._empty_.css({'z-index': +scope._options_.css('z-index') - 1});\n\n if (typeof scope.errorFn !== 'function') {\n scope.errorFn = function () {\n return scope.errorFn;\n }\n }\n if (typeof scope.warningFn !== 'function') {\n scope.warningFn = function () {\n return scope.warningFn;\n }\n }\n if (typeof scope.successFn !== 'function') {\n scope.successFn = function () {\n return scope.successFn;\n }\n }\n\n if (!angular.isArray(scope.options)) {\n scope.localOptions = [];\n }\n\n if (!angular.isArray(scope.ngModel)) scope.ngModel = [];\n\n scope.optWatcher = scope.$watch('options', function (newValue, oldValue) {\n if (newValue) {\n scope.localOptions = angular.copy(newValue).map(function (item) {\n item.selected = !!_.find(scope.ngModel, {id: item.id});\n return item;\n });\n }\n });\n\n scope.modelWatcher = scope.$watch('ngModel', function (newValue, oldValue) {\n if (scope.options) {\n scope.localOptions = angular.copy(scope.options).map(function (item) {\n item.selected = !!_.find(scope.ngModel, {id: item.id});\n return item;\n });\n }\n });\n\n var _OpenMultipleSelect = function () {\n if (scope.ngDisabled) return;\n\n if (scope.onFocus) scope.onFocus();\n\n scope._empty_.appendTo('body');\n scope._options_.appendTo('body');\n scope._options_.css({overflow: 'hidden'});\n scope._options_.css({display: 'block'});\n scope._ChangePosition();\n\n scope._options_.css({width: scope._multi_element_.width()});\n\n TweenMax.from(scope._options_, 0.35, {\n height: 0,\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n if (scope.withSearch) scope._search_.focus();\n scope._ChangeSize();\n\n scope._empty_.bind('click', _CloseMultipleSelect);\n },\n clearProps: 'height'\n });\n\n scope._input_.trigger('focus');\n angular.element('body').bind('keydown', _OnKeyDown);\n angular.element($window).bind('resize', scope._ChangePosition);\n angular.element($window).bind('resize', scope._ChangeSize);\n angular.element($window).bind('scroll', scope._ChangePosition);\n };\n\n var _CloseMultipleSelect = function (event) {\n scope._options_.css({overflow: 'hidden'});\n\n TweenMax.to(scope._options_, 0.35, {\n height: 0,\n display: 'none',\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n scope._empty_.remove();\n },\n clearProps: 'height,width'\n });\n\n scope._empty_.unbind('click', _CloseMultipleSelect);\n angular.element('body').unbind('keydown', _OnKeyDown);\n angular.element($window).unbind('resize', scope._ChangePosition);\n angular.element($window).unbind('resize', scope._ChangeSize);\n angular.element($window).unbind('scroll', scope._ChangePosition);\n if (scope.onBlur) scope.onBlur();\n };\n\n scope._ChangePosition = function () {\n scope._options_.css({\n overflow: 'hidden',\n top: scope._input_.offset().top - $document.scrollTop(),\n left: scope._input_.offset().left - $document.scrollLeft()\n });\n };\n\n scope._ChangeSize = function () {\n scope._options_.css({width: scope._multi_element_.width()});\n\n var bodyHeight = $document[0].documentElement.clientHeight;\n var optionsHeight = scope._options_.height();\n var optionsOffsetTop = scope._input_.offset().top - $document.scrollTop();\n var bodyScrollTop = angular.element('body').scrollTop();\n\n if (optionsHeight + optionsOffsetTop > bodyHeight) {\n scope._options_.css({height: bodyHeight - optionsOffsetTop + bodyScrollTop - 10});\n }\n };\n\n scope._ActivateOption = function (options, newOption) {\n scope._options_.find('li.active').removeClass('active');\n angular.element(newOption).addClass('active');\n\n if (_isOutOfScroll(newOption)) {\n scope._options_.scrollTop(scope._options_.scrollTop() + angular.element(newOption).position().top);\n }\n };\n\n scope._SelectOption = function (option) {\n angular.element(option).trigger('click');\n };\n\n var _isOutOfScroll = function (li, partial) {\n var contHeight = scope._options_.height();\n var contTop = scope._options_.scrollTop();\n var contBottom = contTop + contHeight;\n\n var elemTop = angular.element(li).offset().top - scope._options_.offset().top;\n var elemBottom = elemTop + angular.element(li).height();\n\n var isTotal = (elemTop >= 0 && elemBottom <= contHeight);\n var isPart = ((elemTop < 0 && elemBottom > 0 ) || (elemTop > 0 && elemTop <= scope._options_.height())) && partial;\n\n return !isTotal && !isPart;\n };\n\n var activeOption;\n var newOption;\n var _OnKeyDown = function (event) {\n\n // TAB - switch to another input\n if (event.which == 9) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseMultipleSelect(event);\n return\n }\n\n // ENTER - select option and close when select options are opened\n if (event.which == 13) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n activeOption = _.head(scope._options_.find('li.active:not(.disabled)'));\n if (activeOption) {\n scope._SelectOption(activeOption);\n }\n }\n\n //ARROW DOWN - move to next not disabled option\n if (event.which == 40) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n newOption = _.head(scope._options_.find('li.active').next('li:not(.disabled)'));\n if (newOption) {\n scope._ActivateOption(scope.localOptions, newOption);\n } else if (scope._options_.find('li:not(.disabled)').length) {\n scope._ActivateOption(scope.localOptions, _.head(scope._options_.find('li:not(.disabled)')));\n }\n }\n\n // ESC - close options\n if (event.which == 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseMultipleSelect();\n }\n\n // ARROW UP - move to previous not disabled option\n if (event.which == 38) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n newOption = _.head(scope._options_.find('li.active').prev('li:not(.disabled)'));\n if (newOption) {\n scope._ActivateOption(scope.localOptions, newOption);\n } else if (scope._options_.find('li:not(.disabled)').length) {\n scope._ActivateOption(scope.localOptions, _.last(scope._options_.find('li:not(.disabled)')));\n }\n }\n };\n\n scope._input_.bind('click', _OpenMultipleSelect);\n scope._arrow_.bind('click', _OpenMultipleSelect);\n\n scope.selectOption = function (option) {\n var index = _.find(scope.ngModel, {id: option.id});\n\n if (!index) {\n option.selected = true;\n scope.ngModel.push(option);\n } else {\n scope.removeFromSelection(option);\n }\n\n scope._ChangeSize();\n };\n\n scope.clearSearch = function () {\n scope.search = '';\n scope._search_.focus();\n };\n\n scope.removeTag = function (tag) {\n var option = _.find(scope.localOptions, {id: tag.id});\n\n if (option) {\n scope.removeFromSelection(option);\n } else {\n scope.removeFromSelection(tag);\n }\n };\n\n scope.removeFromSelection = function (option) {\n scope.ngModel.forEach(function (item, index) {\n if (option.id === item.id) {\n $timeout(function () {\n option.selected = false;\n scope.ngModel.splice(index, 1);\n })\n }\n });\n };\n\n scope.toCreate = function (path) {\n if (path) window.location.href = path;\n };\n\n scope.limitWatcher = scope.$watch('limit', function (newValue, oldValue) {\n if (newValue) {\n scope._ChangeSize();\n }\n\n if (scope.withSearch) {\n scope._search_.focus();\n } else {\n scope._options_.focus();\n }\n });\n\n scope._multi_element_.on('$destroy', function () {\n scope._input_.unbind('click', _OpenMultipleSelect);\n scope._arrow_.unbind('click', _OpenMultipleSelect);\n scope.optWatcher();\n scope.modelWatcher();\n scope.limitWatcher();\n });\n },\n templateUrl: 'lm-select-multiple/lm-select-multiple.tpl.html'\n };\n }]);\n\n","lmApp.\n directive('lmSelectMultipleGroup', ['$window', '$document', '$timeout', '$rootScope',\n function ($window, $document, $timeout, $rootScope) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n ngModel: '=',\n options: '=',\n placeholder: '@',\n limit: '@',\n withSearch: '@',\n error: '@',\n errorFn: '&',\n warning: '@',\n warningFn: '&',\n success: '@',\n successFn: '&',\n ngDisabled: '=?',\n optionSection: '@',\n optionType: '@',\n isSwitcher: '@',\n onFocus: '&',\n onBlur: '&'\n },\n link: function (scope, element, attrs) {\n scope._group_element_ = element;\n scope._input_ = element.find('.tag-container');\n scope._arrow_ = element.find('.mdi-chevron-down');\n scope._options_ = element.find('.select-dropdown');\n scope._search_ = element.find('#search');\n scope._body_ = angular.element('body');\n scope._empty_ = angular.element('
    ');\n scope._empty_.css({'z-index': +scope._options_.css('z-index') - 1});\n\n if (typeof scope.errorFn !== 'function') {\n scope.errorFn = function () {\n return scope.errorFn;\n }\n }\n if (typeof scope.warningFn !== 'function') {\n scope.warningFn = function () {\n return scope.warningFn;\n }\n }\n if (typeof scope.successFn !== 'function') {\n scope.successFn = function () {\n return scope.successFn;\n }\n }\n\n if (!angular.isObject(scope.ngModel)) scope.ngModel = {};\n\n scope.localOptions = angular.copy(scope.options);\n scope.optWatcher = scope.$watchCollection('options', function (newValue, oldValue) {\n if (newValue) {\n scope.localOptions = {};\n\n _.forEach(angular.copy(newValue), function (n, key) {\n scope.localOptions[key] = n.map(function (item) {\n item.selected = !!_.find(scope.ngModel[key], {id: item.id});\n return item;\n });\n });\n }\n });\n\n var _OpenMultipleSelect = function () {\n if (scope.ngDisabled) return;\n\n if (scope.onFocus) scope.onFocus();\n\n scope._empty_.appendTo('body');\n scope._options_.appendTo('body');\n scope._options_.css({overflow: 'hidden'});\n scope._options_.css({display: 'block'});\n scope._ChangePosition();\n\n scope._options_.css({width: scope._group_element_.width()});\n\n TweenMax.from(scope._options_, 0.35, {\n height: 0,\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n if (scope.withSearch) scope._search_.focus();\n scope._ChangeSize();\n\n scope._empty_.bind('click', _CloseMultipleSelect);\n },\n clearProps: 'height'\n });\n\n scope._input_.trigger('focus');\n angular.element('body').bind('keydown', _OnKeyDown);\n angular.element($window).bind('resize', scope._ChangePosition);\n angular.element($window).bind('resize', scope._ChangeSize);\n angular.element($window).bind('scroll', scope._ChangePosition);\n };\n\n var _CloseMultipleSelect = function (event) {\n scope._options_.css({overflow: 'hidden'});\n\n TweenMax.to(scope._options_, 0.35, {\n height: 0,\n display: 'none',\n ease: Expo.easeInOut,\n onComplete: function () {\n scope._options_.css({'overflow-y': 'auto'});\n scope._empty_.remove();\n },\n clearProps: 'height,width'\n });\n\n scope._empty_.unbind('click', _CloseMultipleSelect);\n angular.element('body').unbind('keydown', _OnKeyDown);\n angular.element($window).unbind('resize', scope._ChangePosition);\n angular.element($window).unbind('resize', scope._ChangeSize);\n angular.element($window).unbind('scroll', scope._ChangePosition);\n if (scope.onBlur) scope.onBlur();\n };\n\n scope._ChangePosition = function () {\n scope._options_.css({\n overflow: 'hidden',\n top: scope._input_.offset().top - $document.scrollTop(),\n left: scope._input_.offset().left - $document.scrollLeft()\n });\n };\n\n scope._ChangeSize = function () {\n scope._options_.css({width: scope._group_element_.width()});\n\n var bodyHeight = $document[0].documentElement.clientHeight;\n var optionsHeight = scope._options_.height();\n var optionsOffsetTop = scope._input_.offset().top - $document.scrollTop();\n var bodyScrollTop = angular.element('body').scrollTop();\n\n if (optionsHeight + optionsOffsetTop > bodyHeight) {\n scope._options_.css({height: bodyHeight - optionsOffsetTop + bodyScrollTop - 10});\n }\n };\n\n var _OnKeyDown = function (event) {\n\n // TAB - switch to another input\n if (event.which == 9) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseMultipleSelect(event);\n return\n }\n\n // ESC - close options\n if (event.which == 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n _CloseMultipleSelect();\n }\n };\n\n scope._input_.bind('click', _OpenMultipleSelect);\n scope._arrow_.bind('click', _OpenMultipleSelect);\n\n scope.selectOption = function (key, option) {\n var index = _.find(scope.ngModel[key], {id: option.id});\n\n if (scope.isSwitcher) {\n if (!index) {\n scope.localOptions[key].forEach(function (item) {\n item.selected = false;\n });\n option.selected = true;\n\n scope.ngModel[key] = [option];\n } else {\n scope.removeFromSelection(key, option);\n }\n } else {\n if (!index) {\n option.selected = true;\n scope.ngModel[key].push(option);\n } else {\n scope.removeFromSelection(key, option);\n }\n }\n\n scope._ChangeSize();\n };\n\n scope.clearSearch = function () {\n scope.search = '';\n scope._search_.focus();\n };\n\n scope.removeTag = function (key, tag) {\n var option = _.find(scope.localOptions[key], {id: tag.id});\n\n if (option) {\n scope.removeFromSelection(key, option);\n } else {\n scope.removeFromSelection(key, tag);\n }\n };\n\n scope.removeFromSelection = function (key, option) {\n scope.ngModel[key].forEach(function (item, index) {\n if (option.id === item.id) {\n $timeout(function () {\n option.selected = false;\n scope.ngModel[key].splice(index, 1);\n })\n }\n });\n };\n\n scope.toCreate = function (path) {\n if (path) window.location.href = path;\n };\n\n scope.isEmpty = function (object) {\n return _.isEmpty(object) || _.reduce(object, function (result, n, key) {\n return result && !n.length;\n }, true);\n };\n\n scope.limitWatcher = scope.$watch('limit', function (newValue, oldValue) {\n if (newValue) {\n scope._ChangeSize();\n }\n });\n\n scope._group_element_.on('$destroy', function () {\n scope._input_.unbind('click', _OpenMultipleSelect);\n scope._arrow_.unbind('click', _OpenMultipleSelect);\n scope.optWatcher();\n scope.limitWatcher();\n });\n },\n templateUrl: 'lm-select-multiple-group/lm-select-multiple-group.tpl.html'\n };\n }]);\n","/**\n * Tab directive\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-14:41\n */\n\nlmApp.\n directive('lmShowcase', ['AssetService', 'ShowcaseService', '$timeout', '$interval', '$rootScope', '$compile', '$window', '$templateCache', 'ToastService', 'ModalWindowService',\n function (AssetService, ShowcaseService, $timeout, $interval, $rootScope, $compile, $window, $templateCache, ToastService, ModalWindowService) {\n return {\n templateUrl: 'lm-showcase/lm-showcase.tpl.html',\n restrict: 'E',\n replace: true,\n scope: {\n applicationType: '@',\n showcase: '=',\n isFast: '=?'\n },\n controller: ['$scope', function ($scope) {\n\n $scope.showcase.isFast = $scope.isFast;\n $scope.rnd = Date.now();\n\n $scope.showcase._PrivateData = {};\n ShowcaseService.GetAvailableTiles()\n .then(function (collection) {\n $scope.tileTypes = [];\n\n $scope.tileTypes = collection\n .filter(function (item) {\n return item.type.indexOf($scope.applicationType) !== -1;\n })\n .map(function (item) {\n return {\n type: 'banner',\n banner: {\n isNew: true,\n type: 'widget',\n isDefaultDefined: true,\n widget_type: item.type,\n picture: item.picture.default,\n bannerName: ShowcaseService._getWidgetName(item.type),\n widget_attrs: {\n title: _.find(item.attributes, {id: 'title'}) ? _.find(item.attributes, {id: 'title'}).default : 'Title'\n }\n },\n isNew: true\n }\n });\n\n $scope.tileTypes.push({\n type: 'banner',\n banner: {\n _PrivateData: {\n icon: 'mdi-view-carousel'\n },\n isNew: true,\n slider_delay: null,\n type: 'slider',\n bannerName: 'Slider',\n isDefaultDefined: true,\n slider_items: [],\n widget_type: 'slider'\n }\n });\n\n $scope.tileTypes = $scope.tileTypes.map(ShowcaseService._ParseTile);\n });\n\n $scope.preventAction = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n };\n\n $scope._getBackground = function (showcase) {\n if (showcase.banner) {\n $scope.showcase._PrivateData.background = {};\n $scope.showcase._PrivateData.background = showcase.banner;\n $scope.showcase._PrivateData.background._PrivateData = {};\n $scope.showcase._PrivateData.background._PrivateData.hasNewTile = false;\n $scope.showcase._PrivateData.background._PrivateData.delay = showcase.banner.slider_delay;\n $scope.showcase._PrivateData.background._PrivateData.currentItem = 0;\n\n $scope.showcase._PrivateData.background.slider_items.forEach(function (item) {\n item.banner = ShowcaseService._ParseWidget(item);\n item._PrivateData.isExpand = true;\n item._PrivateData.isSliderInner = true;\n });\n\n $scope.showcase._PrivateData.background._PrivateData.showcase_id = showcase.id;\n\n $scope.bgSlider = $interval(function () {\n if (!$scope.showcase._PrivateData.background._PrivateData.isEdit) {\n var len = $scope.showcase._PrivateData.background.slider_items.length;\n var next = $scope.showcase._PrivateData.background._PrivateData.currentItem + 1;\n $scope.showcase._PrivateData.background._PrivateData.currentItem = (next < len) ? next : 0;\n }\n }, 10000);\n } else {\n $scope.showcase._PrivateData.background = {};\n $scope.showcase._PrivateData.background._PrivateData = {};\n $scope.showcase._PrivateData.background._PrivateData.hasNewTile = false;\n $scope.showcase._PrivateData.background._PrivateData.delay = '';\n $scope.showcase._PrivateData.background._PrivateData.currentItem = 0;\n $scope.showcase._PrivateData.background.slider_items = [];\n $scope.showcase._PrivateData.background._PrivateData.showcase_id = showcase.id;\n }\n };\n\n $scope._getBackground($scope.showcase);\n\n if (!$scope.isFast) {\n\n /**\n *\n * @param tile\n * @param sizes\n * @param event\n */\n $scope.expandTile = function (tile, sizes, event) {\n if (tile._PrivateData.isLocked) {\n return;\n }\n\n if (tile._PrivateData.isExpand) {\n return;\n }\n\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n if ($scope.showcase._PrivateData.isLayoutChanged) {\n\n ToastService.Big({\n title: 'WARNING',\n text: '

    You need to SAVE current layout first!

    ',\n color: 'amber',\n icon: 'view-dashboard'\n });\n\n return;\n }\n\n var coords = tile._PrivateData.coords;\n if (tile._PrivateData.isExpand) return;\n tile._PrivateData.isExpand = true;\n\n var $tile = tile.$tile;\n\n $tile.toggleClass('expand');\n if (!tile.isSupportTile) $tile.toggleClass('tile-hover');\n $tile.css({\n padding: 0,\n bottom: 0,\n left: 0,\n width: sizes.containerWidth,\n height: sizes.containerHeigth,\n 'z-index': 1000\n });\n\n $rootScope.tileExpand = true;\n };\n\n $scope.collapseTile = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n var $tile = tile.$tile;\n var coords = tile._PrivateData.coords;\n tile._PrivateData.isExpand = false;\n\n $tile.toggleClass('expand');\n if (!tile.isSupportTile) $tile.toggleClass('tile-hover');\n $tile.css({\n padding: $scope.showcase._Size.margin,\n bottom: $scope.showcase._Size.width * coords.y,\n left: $scope.showcase._Size.width * coords.x,\n width: $scope.showcase._Size.width * coords.span_x,\n height: $scope.showcase._Size.width * coords.span_y,\n 'z-index': 10 + coords.index\n });\n\n $rootScope.tileExpand = false;\n };\n\n /**\n *\n * @param tile\n */\n $scope.deleteTile = function (tile, event) {\n if ($scope.loading) return;\n\n if (event && event.stopPropagation) event.stopPropagation();\n\n if (tile.isNew) {\n var index = $scope.showcase._Grid.indexOf(tile);\n\n if (index !== -1) {\n tile.$tile.remove();\n $scope.showcase._Grid.splice(index, 1);\n $scope.rebuildGrid();\n }\n\n return;\n }\n\n ModalWindowService.Open({\n content: '

    DELETE TILE

    This action will delete tile permanently. Are You sure?

    ',\n size: {\n s: 4\n },\n actions: [\n {\n title: 'Delete',\n icon: 'delete',\n color: 'green',\n fn: function () {\n if (tile.isNew) {\n var index = $scope.showcase._Grid.indexOf(tile);\n\n if (index !== -1) {\n tile.$tile.remove();\n $scope.showcase._Grid.splice(index, 1);\n $scope.rebuildGrid();\n }\n\n return;\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n ShowcaseService.DeleteTile(tile)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Tile successfully deleted',\n color: 'green',\n icon: 'delete'\n });\n var index = $scope.showcase._Grid.indexOf(tile);\n tile.$tile.remove();\n $scope.showcase._Grid.splice(index, 1);\n $scope.rebuildGrid();\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n }\n },\n {\n title: 'Cancel'\n }\n ]\n });\n };\n\n /**\n *\n * @param tile\n */\n $scope.createNewTile = function (tile) {\n if ($scope.loading) return;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n if (tile._PrivateData.type === 'BANNER') {\n ShowcaseService.CreateWidgetTile($scope.showcase, tile, tile.banner)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Tile successfully created',\n color: 'green',\n icon: 'panorama'\n });\n tile.isNew = false;\n tile.id = response.tile.id;\n $scope.collapseTile(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Tile creation failed',\n color: 'red',\n icon: 'panorama'\n });\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n }\n\n if (tile._PrivateData.type === 'SLIDER') {\n ShowcaseService.CreateSliderTile($scope.showcase, tile, tile.banner)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Tile successfully created',\n color: 'green',\n icon: 'panorama'\n });\n tile.isNew = false;\n tile.id = response.tile.id;\n $scope.collapseTile(tile);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION, $scope.showcase);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Tile creation failed',\n color: 'red',\n icon: 'panorama'\n });\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n }\n };\n\n $scope.editBgSlider = function (slider, currentItem) {\n if (!slider) return;\n\n var modalScope = $scope.$new();\n\n slider._PrivateData.isEdit = true;\n\n slider._PrivateData.widgetsVariants = $scope.tileTypes.filter(function (widget) {\n return ['asset', 'nop'].indexOf(widget.banner._PrivateData.widget_type) !== -1;\n });\n\n if (!_.isUndefined(currentItem) && currentItem > -1) slider._PrivateData.currentItem = currentItem;\n\n modalScope.isFirst = function () {\n return slider._PrivateData.currentItem === 0;\n };\n\n modalScope.isLast = function () {\n return !(slider._PrivateData.currentItem < slider.slider_items.length - 1);\n };\n\n modalScope.prevSlider = function (slider) {\n var prev = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (prev >= 0) ? prev : 0;\n };\n\n modalScope.nextSlider = function (slider) {\n var len = slider.slider_items.length;\n var next = slider._PrivateData.currentItem + 1;\n slider._PrivateData.currentItem = (next < len) ? next : next - 1;\n };\n\n modalScope.isSelectedAsset = function (item, asset) {\n return item._PrivateData.selectedAsset === asset;\n };\n\n modalScope.close = function (slider) {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n slider._PrivateData.isEdit = false;\n ModalWindowService.Close($scope.window, false);\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope.addSliderItem = function (slider, item) {\n var currentItem = angular.copy(item);\n\n slider._PrivateData.hasNewTile = true;\n\n currentItem._PrivateData.isExpand = true;\n currentItem._PrivateData.isSliderInner = true;\n\n slider.slider_items.push(currentItem);\n slider._PrivateData.currentItem = slider.slider_items.length - 1;\n\n return slider;\n };\n\n modalScope.removeSliderItem = function (slider, index) {\n if (modalScope.loading) return;\n\n if (slider.slider_items[index].banner.isNew) {\n slider._PrivateData.hasNewTile = false;\n\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex < 0 ) ? 0 : newIndex;\n\n return;\n }\n\n modalScope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var _ids = slider.slider_items\n .filter(function (item, i) {\n return i !== index;\n })\n .map(function (item) {\n return item.id;\n });\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n modalScope.loading = false;\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex > 0 ) ? newIndex : 0;\n ToastService.Small({\n title: 'Slider item successfully deleted',\n color: 'green',\n icon: 'delete'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider item delete failed',\n color: 'red',\n icon: 'delete'\n });\n modalScope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n modalScope.createNewSliderItem = function (item) {\n if (modalScope.loading) return;\n\n var promise;\n\n modalScope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n\n var slider = $scope.showcase._PrivateData.background;\n\n var _ids = slider.slider_items\n .map(function (item) {\n return item.banner.id;\n });\n\n if (slider.slider_items.length > 1) {\n promise = ShowcaseService.UpdateSlider(slider, _ids);\n } else {\n promise = ShowcaseService.CreateSlider(slider, _ids)\n .then(function (response) {\n slider.banner_id = response.slider.id;\n return ShowcaseService.UpdateShowcase($scope.showcase);\n });\n }\n\n promise\n .then(function (response) {\n slider._PrivateData.hasNewTile = false;\n item.isNew = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n modalScope.loading = false;\n ToastService.Small({\n title: 'Slider item successfully created',\n color: 'green',\n icon: 'view-carousel'\n });\n if (item._PrivateData.text) item.text = item._PrivateData.text;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Slider item creation failed',\n color: 'red',\n icon: 'view-carousel'\n });\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n modalScope.slideReorder = function (slider, item, direction) {\n if (modalScope.loading) return;\n\n var index = slider.slider_items.indexOf(item);\n var swap = null;\n\n if (index !== -1 && index + direction >= 0 && index + direction < slider.slider_items.length) {\n $rootScope.showLinearProgress('#showcasesLoader');\n modalScope.loading = true;\n\n swap = slider.slider_items[index + direction];\n slider.slider_items[index + direction] = item;\n slider.slider_items[index] = swap;\n\n slider._PrivateData.currentItem += direction;\n\n var _ids = _.map(slider.slider_items, 'id');\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n modalScope.loading = false;\n\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider\\'s items successfully reordered',\n color: 'green',\n icon: 'view-carousel'\n });\n })\n .catch(function (reason) {\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n\n throw reason;\n });\n }\n };\n\n modalScope.slider = slider;\n modalScope._tpl_ = $templateCache.get('lm-showcase/application-android/edit-slider.tpl.html');\n\n modalScope._tpl_ = $compile(modalScope._tpl_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._tpl_,\n clear: true,\n size: {\n s: 10\n },\n onInit: function () {\n if (currentItem === -1) modalScope.addSliderItem(slider);\n },\n onComplete: function () {\n slider.slider_items.forEach(function (item, index) {\n if (item.isNew && slider.slider_items.length > 1) {\n slider.slider_items.splice(index, 1);\n }\n });\n\n slider._PrivateData.currentItem = 0;\n }\n });\n };\n }\n\n /**\n *\n * @param showcase_id\n * @returns {*}\n */\n $scope.getTiles = function (showcase_id) {\n if (!showcase_id) return;\n\n $rootScope.showLinearProgress('#appLoader');\n $scope.loading = true;\n\n $scope.showcase._Grid = [];\n\n return ShowcaseService.GetTileByShowcaseId(showcase_id)\n .then(function (tiles) {\n $rootScope.hideLinearProgress('#appLoader');\n $scope.loading = false;\n $scope.showcase._Grid = _.map(tiles, function (tile) {\n return ShowcaseService._ParseTile(tile);\n });\n return true;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#appLoader');\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n }],\n\n /**\n *\n * @param scope\n * @param element\n * @param attrs\n */\n link: function (scope, element, attrs) {\n scope.watchRegister = scope.$watch('showcase', function (newValue, oldValue) {\n if (!_.isEqual(newValue, oldValue) && !_.isEmpty(newValue)) {\n $interval.cancel(scope.bgSlider);\n newValue._PrivateData = {};\n newValue.isFast = scope.isFast;\n scope.getTiles(newValue.id)\n .then(buildGrid);\n scope._getBackground(newValue);\n }\n });\n\n if (!scope.showcase) return;\n\n /**\n *\n * @param tile\n */\n function bindDragNDrop(tile) {\n\n if (!tile.isSupportTile) {\n tile.$tile.bind('dragstart', function (event) {\n $rootScope.$emit(\"LVL-DRAG-START\");\n scope.dragElem = tile;\n tile.isDrag = true;\n if (typeof event.originalEvent.dataTransfer.setDragImage === \"function\") {\n event.originalEvent.dataTransfer.setDragImage(angular.element(tile.$tile)[0], 0, tile.$tile.height());\n }\n //console.log('DRAG_START: ', tile);\n });\n\n tile.$tile.bind('dragend', function (event) {\n $rootScope.$emit(\"LVL-DRAG-END\");\n scope.dragElem = null;\n tile.isDrag = false;\n //console.log('DRAG_END: ', tile);\n });\n }\n\n tile.$tile.bind('drop', function (event) {\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n\n if (!scope.dragElem || _.isEqual(scope.dragElem._PrivateData.coords, scope.targetElem._PrivateData.coords)) {\n return;\n } else {\n scope.showcase._PrivateData.isLayoutChanged = true;\n }\n\n var coords_elem = _.cloneWith(scope.dragElem._PrivateData.coords);\n\n var coords_target = _.cloneWith(scope.targetElem._PrivateData.coords);\n\n coords_elem.x = scope.targetElem._PrivateData.coords.x;\n coords_elem.y = scope.targetElem._PrivateData.coords.y;\n\n coords_target.x = scope.dragElem._PrivateData.coords.x;\n coords_target.y = scope.dragElem._PrivateData.coords.y;\n\n scope.targetElem._PrivateData.coords = coords_target;\n scope.dragElem._PrivateData.coords = coords_elem;\n\n scope.targetElem.x0 = coords_target.x;\n scope.targetElem.y0 = coords_target.y;\n scope.targetElem.x1 = coords_target.x + coords_target.span_x;\n scope.targetElem.y1 = coords_target.y + coords_target.span_y;\n\n scope.dragElem.x0 = coords_elem.x;\n scope.dragElem.y0 = coords_elem.y;\n scope.dragElem.x1 = coords_elem.x + coords_elem.span_x;\n scope.dragElem.y1 = coords_elem.y + coords_elem.span_y;\n\n scope.dragElem._PrivateData.isMoved = true;\n if (!scope.targetElem.isSupportTile) scope.targetElem._PrivateData.isMoved = true;\n\n reBuildGrid();\n });\n\n tile.$tile.bind('dragover', function (event) {\n if (event.stopPropagation) event.stopPropagation();\n if (event.preventDefault) event.preventDefault();\n tile.isTarget = true;\n\n scope.$digest();\n });\n\n tile.$tile.bind('dragenter', function (event) {\n scope.targetElem = tile;\n });\n\n tile.$tile.bind('dragleave', function (event) {\n tile.isTarget = false;\n });\n }\n\n /**\n *\n * @param tile\n * @param type\n */\n function createNewTile(tile, type) {\n var newTile = scope.tileTypes.filter(function (tile) {\n return tile.banner._PrivateData.widget_type === type;\n })[0];\n\n var size = scope.showcase._Size.newSize;\n\n if (!newTile || !size) {\n ToastService.Small({\n title: 'Failed create new tile. Contact us for more information.',\n color: 'red',\n icon: 'view-carousel'\n });\n return;\n }\n\n newTile = angular.copy(newTile);\n var sizes = scope.showcase._Size;\n var $container = scope.showcase.$container;\n\n scope.collapseTile(tile, sizes);\n\n newTile.x0 = tile._PrivateData.coords.x;\n newTile.y0 = tile._PrivateData.coords.y;\n newTile.x1 = tile._PrivateData.coords.x + (+size.span_x);\n newTile.y1 = tile._PrivateData.coords.y + (+size.span_y);\n\n var coords = {\n x: newTile.x0,\n y: newTile.y0,\n span_x: newTile.x1 - newTile.x0,\n span_y: newTile.y1 - newTile.y0,\n index: 10 * newTile.x0 + newTile.y0\n };\n\n newTile._PrivateData.coords = coords;\n\n newTile.isNew = true;\n\n var showcase_tile = $templateCache.get('lm-showcase/tile.tpl.html');\n\n var tileScope = scope.$new();\n tileScope.tile = newTile;\n\n showcase_tile = $compile(showcase_tile)(tileScope);\n newTile.$tile = showcase_tile;\n\n scope.showcase._Grid.push(newTile);\n\n setCSS(showcase_tile, sizes, coords);\n\n bindDragNDrop(newTile);\n\n showcase_tile.appendTo($container);\n\n reBuildGrid();\n\n if (newTile.banner._PrivateData.widget_type !== 'ui:logo') {\n scope.expandTile(newTile, scope.showcase._Size);\n } else {\n ShowcaseService.CreateLogoWidget(newTile.banner, 'stockmob')\n .then(function (response) {\n newTile.banner.id = response.widget.id;\n\n scope.createNewTile(newTile);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo create failed',\n color: 'red',\n icon: 'image-area'\n });\n $rootScope.debugInfo(reason);\n });\n }\n }\n\n /**\n * Build new Grid from showcase data\n */\n function buildGrid() {\n var $container = element.find('.grid');\n $container.html('');\n scope.showcase.$container = $container;\n\n scope.showcase._Size = {\n margin: 5,\n max_x: _.get(_.maxBy(scope.showcase._Grid, 'x1'), 'x1') || 0,\n max_y: _.get(_.maxBy(scope.showcase._Grid, 'y1'), 'y1') || 0,\n containerWidth: $container.width()\n };\n\n if (scope.showcase._Size.max_x < 12) {\n scope.showcase._Size.width = $container.width() / 12;\n } else {\n scope.showcase._Size.width = $container.width() / (scope.showcase._Size.max_x + 1);\n }\n\n if (scope.showcase._Size.max_y < 6) {\n $container.css({\n height: scope.showcase._Size.width * (6) + scope.showcase._Size.margin * (6 + 1)\n });\n } else {\n $container.css({\n height: scope.showcase._Size.width * (scope.showcase._Size.max_y + 2) + scope.showcase._Size.margin * (scope.showcase._Size.max_y + 1)\n });\n }\n\n scope.showcase._Size.containerHeigth = $container.height();\n\n scope.showcase._Size.sizeTmp = {\n width: $container.width() / 10\n };\n\n scope.showcase._Size.newSize = {\n span_x: 2,\n span_y: 2\n };\n\n scope.showcase._Size.newTileTypeCss = {\n height: scope.showcase._Size.sizeTmp.width,\n width: scope.showcase._Size.sizeTmp.width,\n margin: 'auto'\n };\n\n scope.showcase._Grid.forEach(function (tile, index) {\n\n var coords = {\n x: tile.x0,\n y: tile.y0,\n span_x: tile.x1 - tile.x0,\n span_y: tile.y1 - tile.y0,\n index: index\n };\n\n tile._PrivateData.coords = coords;\n\n var showcase_tile = $templateCache.get('lm-showcase/tile.tpl.html');\n\n var tileScope = scope.$new();\n tileScope.tile = tile;\n\n showcase_tile = $compile(showcase_tile)(tileScope);\n tile.$tile = showcase_tile;\n\n setCSS(showcase_tile, scope.showcase._Size, coords);\n\n if (!scope.isFast) bindDragNDrop(tile);\n\n showcase_tile.appendTo($container);\n });\n\n scope.showcaseBackgroudBanner = {};\n\n if (!scope.isFast) buildSupportGrid();\n }\n\n /**\n * Rebuild current showcase build\n */\n function reBuildGrid() {\n var $container = scope.showcase.$container;\n\n scope.showcase._Size = {\n margin: 5,\n max_x: _.get(_.maxBy(scope.showcase._Grid, 'x1'), 'x1') || 0,\n max_y: _.get(_.maxBy(scope.showcase._Grid, 'y1'), 'y1') || 0,\n containerWidth: $container.width()\n };\n\n if (scope.showcase._Size.max_x < 12) {\n scope.showcase._Size.width = $container.width() / 12;\n } else {\n scope.showcase._Size.width = $container.width() / (scope.showcase._Size.max_x + 1);\n }\n\n if (scope.showcase._Size.max_y < 6) {\n $container.css({\n height: scope.showcase._Size.width * (6) + scope.showcase._Size.margin * (6 + 1)\n });\n } else {\n $container.css({\n height: scope.showcase._Size.width * (scope.showcase._Size.max_y + 2) + scope.showcase._Size.margin * (scope.showcase._Size.max_y + 1)\n });\n }\n\n scope.showcase._Size.containerHeigth = $container.height();\n\n scope.showcase._Size.sizeTmp = {\n width: $container.width() / 10\n };\n\n scope.showcase._Size.newSize = {\n span_x: 2,\n span_y: 2\n };\n\n scope.showcase._Size.newTileTypeCss = {\n height: scope.showcase._Size.sizeTmp.width,\n width: scope.showcase._Size.sizeTmp.width,\n margin: 'auto'\n };\n\n scope.showcase._Grid.forEach(function (tile, index) {\n\n if (tile._PrivateData.isExpand) {\n scope.collapseTile(tile, null);\n }\n\n var coords = {\n x: tile.x0,\n y: tile.y0,\n span_x: tile.x1 - tile.x0,\n span_y: tile.y1 - tile.y0,\n index: index\n };\n\n tile._PrivateData.coords = coords;\n\n setCSS(tile.$tile, scope.showcase._Size, coords);\n });\n\n if (!scope.isFast) buildSupportGrid();\n }\n\n scope.rebuildGrid = reBuildGrid;\n\n function setCSS(tile, sizes, coords) {\n tile.css({\n bottom: sizes.width * coords.y,\n left: sizes.width * coords.x,\n padding: sizes.margin,\n width: sizes.width * coords.span_x,\n height: sizes.width * coords.span_y,\n 'z-index': 10 * coords.x + coords.y\n });\n }\n\n /**\n * Build support grid\n */\n function buildSupportGrid() {\n scope.showcase.$container.find('.support-tiles').remove();\n\n var sizeX = scope.showcase._Size.max_x;\n var sizeY = scope.showcase._Size.max_y;\n var width = scope.showcase._Size.width;\n var margin = scope.showcase._Size.margin;\n var $container = scope.showcase.$container;\n\n for (var i = 0; i < sizeX + 1; i++) {\n for (var j = 0; j < sizeY + 1; j++) {\n var coords = {\n x: i,\n y: j,\n span_x: 1,\n span_y: 1,\n index: 10 * i + j\n };\n\n var isEmptyPlace = true;\n\n for (var k = 0; k < scope.showcase._Grid.length; k++) {\n var tile = scope.showcase._Grid[k]._PrivateData.coords;\n\n if (coords.x >= tile.x && coords.x < tile.x + tile.span_x && coords.y >= tile.y && coords.y < tile.y + tile.span_y) {\n isEmptyPlace = false;\n break;\n }\n }\n\n if (isEmptyPlace) {\n var showcase_tile = $templateCache.get('lm-showcase/tile-support/tile-support.tpl.html');\n\n var tileScope = scope.$new();\n tileScope.tile = {\n isSupportTile: true,\n x0: i,\n x1: i + 1,\n y0: j,\n y1: j + 1,\n _PrivateData: {\n coords: coords\n }\n };\n\n showcase_tile = $compile(showcase_tile)(tileScope);\n tileScope.tile.$tile = showcase_tile;\n tileScope.step = 'type';\n\n tileScope.setStep = function (type) {\n $timeout(function () {\n tileScope.step = type;\n });\n };\n\n tileScope.isStep = function (type) {\n return tileScope.step === type;\n };\n\n tileScope.newType = 'ui:back';\n tileScope.typeSelect = function (tile) {\n tileScope.newType = tile.banner._PrivateData.widget_type;\n };\n\n tileScope.confirmNew = function (tile) {\n createNewTile(tile, tileScope.newType);\n };\n\n tileScope.isThisTypeSelected = function (tile) {\n return tileScope.newType === tile.banner._PrivateData.widget_type;\n };\n\n setCSS(tileScope.tile.$tile, {width: width, margin: margin}, coords);\n\n if (!scope.isFast) bindDragNDrop(tileScope.tile);\n\n showcase_tile.appendTo($container);\n }\n }\n }\n }\n\n var _onResize = function () {\n if (scope.resizeTimeout) {\n $timeout.cancel(scope.resizeTimeout);\n scope.resizeTimeout = null;\n }\n\n scope.resizeTimeout = $timeout(function () {\n reBuildGrid();\n }, 350);\n };\n\n angular.element($window).bind('resize', _onResize);\n\n if (scope.showcase.id) {\n scope.getTiles(scope.showcase.id)\n .then(buildGrid);\n }\n\n scope.$on('$destroy', function () {\n angular.element($window).unbind('resize', _onResize);\n scope.watchRegister();\n $interval.cancel(scope.bgSlider);\n })\n }\n };\n }]);\n","/**\n * Tab directive\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-14:41\n */\n\nlmApp.\n directive('lmTabs', ['$timeout', '$location', '$rootScope', 'AdministrationService',\n function ($timeout, $location, $rootScope, AdministrationService) {\n return {\n templateUrl: 'lm-tabs/tabs.tpl.html',\n restrict: 'E',\n replace: true,\n link: function (scope, element, attrs) {\n scope.tabsData = {};\n scope._tab_element_ = element;\n scope._window_ = angular.element(window);\n\n var _onResize = function() {\n if (!$rootScope.isMenuManual) {\n if (scope._window_.width() < 988 && scope.isOpen()) {\n $timeout(function () {\n $rootScope.isMenuOpen = false;\n });\n } else if (scope._window_.width() >= 988 && !scope.isOpen()) {\n $timeout(function () {\n $rootScope.isMenuOpen = true;\n });\n }\n }\n\n\n };\n\n var _buildServices = function (services) {\n var services = services || [];\n var apps = services.filter(function (service) {\n return service.name.indexOf('app.stockweb') !== -1;\n });\n\n if ('sections' in scope.tabsData.tabs['application'] === false) {\n scope.tabsData.tabs['application'].sections = {};\n }\n\n _.forEach(apps, function (service) {\n scope.tabsData.tabs['application'].sections[service.name.replace('app.', '')] = {\n title: $rootScope._getServiceName(service),\n route: '/application/' + service.name.replace('app.', ''),\n mode: scope.tabsData.tabs['application'].mode,\n icon: $rootScope._getServiceIcon(service)\n };\n });\n\n //if (apps && apps.length) {\n scope.tabsData.tabs['application'].sections['banners-ng'] = {\n title: 'Banners',\n route: '/application/banners-ng',\n mode: scope.tabsData.tabs['application'].mode,\n icon: 'panorama'\n }\n scope.tabsData.tabs['application'].sections['rails'] = {\n title: 'UI Editor',\n route: '/application/rails',\n mode: scope.tabsData.tabs['application'].mode,\n icon: 'view-quilt'\n }\n //}\n };\n\n scope.getStyle = function () {\n\n return {\n height: element.find('.menu-wrapper').height()\n }\n };\n\n angular.element(window).bind('resize', _onResize);\n\n scope.tabsData = {\n isOver: false,\n tabs: {},\n init: function () {\n var locationPath = $location.path();\n var path = locationPath.split('/');\n\n var tab = _.find(scope.tabsData.tabs, {route: '/' + path[1]});\n\n if (tab) {\n scope.tabsData.activeTab = tab;\n\n if (tab.sections) {\n var subTab = _.find(tab.sections, function (item) {\n return locationPath.indexOf(item.route) !== -1;\n });\n\n if (subTab) {\n scope.tabsData.activeSubTab = subTab;\n $rootScope.currentRoute = subTab.title;\n } else {\n scope.tabsData.activeSubTab = tab.sections[0];\n $rootScope.currentRoute = tab.title;\n }\n }\n } else {\n scope.tabsData.activeTab = {};\n scope.tabsData.activeSubTab = {};\n }\n },\n setActiveTab: function (tab) {\n if (tab.sections) {\n tab.isExpand = !tab.isExpand;\n } else {\n scope.tabsData.activeTab = tab;\n scope.tabsData.activeSubTab = {};\n $rootScope.go(tab.route);\n }\n },\n setActiveSubTab: function (tab) {\n scope.tabsData.activeSubTab = tab;\n\n $rootScope.go(tab.route);\n },\n activeTabIndex: -1,\n activeTab: {}\n };\n\n scope.isOpen = function () {\n return !!$rootScope.isMenuOpen;\n };\n\n scope.close = function () {\n $timeout(function () {\n $rootScope.isMenuOpen = false;\n });\n };\n\n scope.tabsData.tabs = AdministrationService.GetParseAccountPermissions();\n\n if ($rootScope._self && $rootScope._self.services) {\n if (scope.tabsData.tabs['application'].mode !== 'none') {\n _buildServices($rootScope._self.services);\n }\n\n/* if (!_.find($rootScope._self.services, {name: 'catchup2'})) {\n scope.tabsData.tabs['epg'].sections['catchup-2-0'].mode = 'none';\n }*/\n }\n\n scope.$on('location:change', function (event, data) {\n var tab = _.find(scope.tabsData.tabs, {route: '/' + data.split('/')[1]});\n if (tab) {\n scope.tabsData.activeTab = tab;\n\n if (tab.sections) {\n var subTab = _.find(tab.sections, {route: data});\n\n if (subTab) {\n scope.tabsData.activeSubTab = subTab;\n $rootScope.currentRoute = subTab.title;\n } else {\n scope.tabsData.activeSubTab = {};\n $rootScope.currentRoute = tab.title;\n }\n }\n } else {\n scope.tabsData.activeTab = {};\n scope.tabsData.activeSubTab = {};\n $rootScope.currentRoute = '';\n }\n });\n\n scope.$on('self:update', function (event, data) {\n\n $timeout(function () {\n scope.tabsData.tabs = AdministrationService.GetParseAccountPermissions();\n\n if (scope.tabsData.tabs['application'].mode !== 'none') {\n _buildServices(data.services);\n }\n\n if (_.find(data.services, {name: 'catchup2'})) {\n scope.tabsData.tabs['epg'].sections['catchup-2-0'] = {\n title: 'Catchup 2.0',\n route: '/epg/catchup-2-0',\n mode: 'rw',\n icon: 'video-switch'\n }\n } else {\n //scope.tabsData.tabs['epg'].sections['catchup-2-0'].mode = 'none';\n }\n });\n\n\n });\n\n\n $timeout(function () {\n scope.tabsData.init();\n _onResize();\n });\n\n scope.$on('$destroy', function () {\n angular.element(window).unbind('resize', _onResize);\n });\n }\n };\n }]);\n","lmApp.\n directive('lmTags', ['$window', '$document', '$timeout',\n function ($window, $document, $timeout) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n ngModel: '=',\n placeholder: '@',\n error: '@',\n errorFn: '&',\n warning: '@',\n warningFn: '&',\n success: '@',\n successFn: '&',\n ngDisabled: '=?',\n onFocus: '&',\n onBlur: '&'\n },\n link: function (scope, element, attrs) {\n scope._multi_element_ = element;\n scope._input_ = element.find('#tag_input');\n scope.newTag = '';\n\n if (typeof scope.errorFn !== 'function') {\n scope.errorFn = function () {\n return scope.errorFn;\n }\n }\n if (typeof scope.warningFn !== 'function') {\n scope.warningFn = function () {\n return scope.warningFn;\n }\n }\n if (typeof scope.successFn !== 'function') {\n scope.successFn = function () {\n return scope.successFn;\n }\n }\n\n if (!angular.isArray(scope.ngModel)) scope.ngModel = [];\n\n var _OnKeyDown = function (event) {\n\n // TAB - switch to another input\n if (event.which == 9) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n scope.clearTagInput();\n scope._input_.blur();\n return;\n }\n\n // ENTER - select option and close when select options are opened\n if (event.which == 13) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n scope.addTag(scope.newTag);\n scope._input_.focus();\n return;\n }\n\n // ESC - close options\n if (event.which == 27) {\n if (event.preventDefault) event.preventDefault();\n if (event.stopPropagation) event.stopPropagation();\n scope.clearTagInput();\n scope._input_.blur();\n return;\n }\n };\n\n var _onFocus = function () {\n angular.element('body').bind('keydown', _OnKeyDown);\n };\n\n var _onBlur = function () {\n $timeout(function () {\n scope.addTag(scope.newTag);\n }, 150);\n angular.element('body').unbind('keydown', _OnKeyDown);\n };\n\n scope.clearTagInput = function () {\n scope.newTag = '';\n $timeout(function () {\n scope._input_.focus();\n });\n };\n\n scope.focusInput = function () {\n $timeout(function () {\n scope._input_.focus();\n });\n };\n\n scope.addTag = function (input) {\n var tags = input.split(',');\n\n tags.forEach(function (tag) {\n var index = scope.ngModel.indexOf(tag);\n\n if (index === -1 && tag) {\n scope.ngModel.push(tag);\n }\n });\n\n $timeout(function () {\n scope.newTag = '';\n });\n };\n\n scope.removeTag = function (tag) {\n var index = scope.ngModel.indexOf(tag);\n\n if (index !== -1) {\n scope.ngModel.splice(index, 1);\n }\n };\n\n scope._input_.bind('focus', _onFocus);\n scope._input_.bind('blur', _onBlur);\n\n scope._multi_element_.on('$destroy', function () {\n scope._input_.unbind('focus', _onFocus);\n scope._input_.unbind('blur', _onBlur);\n });\n },\n templateUrl: 'lm-tags/lm-tags.tpl.html'\n };\n }]);\n","/**\n * Textaria directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmTextareaField', ['$timeout', function ($timeout) {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n id: '@',\n icon: '@',\n label: '@',\n placeholder: '@',\n ngModel: '=',\n ngDisabled: '=?',\n error: '@',\n errorFn: '=?',\n warning: '@',\n warningFn: '=?',\n success: '@',\n successFn: '=?',\n isLong: '=?',\n isBordesless: '=?',\n onKeyPress: '&',\n onFocus: '&',\n onBlur: '&',\n isFocused: '@'\n },\n link: function (scope, element, attrs) {\n if (!scope.id) scope.timestamp = Date.now();\n\n attrs.$observe('error', function (value) {\n scope.error = value;\n });\n attrs.$observe('warning', function (value) {\n scope.warning = value;\n });\n attrs.$observe('success', function (value) {\n scope.success = value;\n });\n\n scope._textarea_ = element.find('textarea');\n\n scope._onFocus = function () {\n $timeout(function () {\n scope.isFocused = true;\n });\n scope.onFocus();\n };\n\n scope._textarea_.bind('focus', scope._onFocus);\n\n scope._onBlur = function () {\n $timeout(function () {\n scope.isFocused = false\n });\n scope.onBlur();\n };\n\n scope._textarea_.bind('blur', scope._onBlur);\n\n scope._onKeyPress = function (event) {\n if (scope.onKeyPress) scope.onKeyPress();\n\n if (event && event.which != 9 /*TAB*/) {\n if (!_.isUndefined(scope.errorFn)) {\n scope.errorFn = false;\n }\n if (!_.isUndefined(scope.warningFn)) {\n scope.warningFn = false;\n }\n if (!_.isUndefined(scope.successFn)) {\n scope.successFn = false;\n }\n }\n };\n\n scope._textarea_.bind('keydown', scope._onKeyPress);\n\n if (scope.isFocused) scope.timeoutFocused = $timeout(function () {\n scope._textarea_.focus();\n }, 450);\n\n scope.focusMe = function () {\n scope._textarea_.focus();\n };\n\n scope._textarea_.on('$destroy', function () {\n if (scope.timeoutFocused) $timeout.cancel(scope.timeoutFocused);\n scope._textarea_.unbind('focus', scope._onFocus);\n scope._textarea_.unbind('blur', scope._onBlur);\n scope._textarea_.unbind('keydown', scope._onKeyPress);\n scope.$destroy();\n })\n },\n templateUrl: 'lm-textarea-field/textarea.tpl.html'\n };\n }]);\n","lmApp\n .service('ToastService', ['$rootScope', '$templateCache', '$compile', '$timeout',\n function ($rootScope, $templateCache, $compile, $timeout) {\n\n var toastScope = $rootScope.$new(true);\n\n toastScope._bigToast_ = $templateCache.get('lm-toast/lm-big-toast.tpl.html');\n toastScope._bigToast_ = $compile(toastScope._bigToast_)(toastScope);\n toastScope._smallToast_ = $templateCache.get('lm-toast/lm-small-toast.tpl.html');\n toastScope._smallToast_ = $compile(toastScope._smallToast_)(toastScope);\n\n toastScope.bigToast = {};\n toastScope.smallToast = {};\n\n angular.element('body').append(toastScope._bigToast_);\n angular.element('body').append(toastScope._smallToast_);\n\n var _ShowBigToast = function (data, delay) {\n if (toastScope.bigToast.timeout) {\n _HideBigToast();\n }\n\n toastScope._bigToast_.css({\n 'display': 'inline-block'\n });\n\n $timeout(function () {\n toastScope.bigToast = {\n color: data.color,\n title: data.title || '',\n icon: data.icon,\n show: true\n }\n });\n\n toastScope._bigToast_.find('#toast-text').html(data.text || '');\n\n toastScope.bigToast.timeout = $timeout(function () {\n $timeout(function () {\n toastScope.bigToast.show = false;\n });\n }, delay || 60 * 1000);\n };\n\n var _HideBigToast = function () {\n $timeout.cancel(toastScope.bigToast.timeout);\n $timeout(function () {\n toastScope.bigToast.show = false;\n });\n };\n\n toastScope.hideBigToast = function () {\n if (!toastScope.bigToast.blocked) _HideBigToast();\n };\n\n var _ShowSmallToast = function (data, delay) {\n if (toastScope.smallToast.timeout) {\n _HideSmallToast();\n }\n\n toastScope._smallToast_.css({\n 'display': 'inline-block'\n });\n\n $timeout(function () {\n toastScope.smallToast = {\n color: data.color,\n title: data.title || '',\n icon: data.icon,\n blocked: data.blocked,\n show: true\n }\n });\n\n toastScope.smallToast.timeout = $timeout(function () {\n $timeout(function () {\n toastScope.smallToast.show = false;\n });\n }, delay || 10 * 1000);\n };\n\n var _HideSmallToast = function () {\n $timeout.cancel(toastScope.smallToast.timeout);\n $timeout(function () {\n toastScope.smallToast.show = false;\n });\n };\n\n toastScope.hideSmallToast = function () {\n _HideSmallToast();\n };\n\n return {\n Big: _ShowBigToast,\n Small: _ShowSmallToast,\n HideBig: _HideBigToast,\n HideSmall: _HideSmallToast\n }\n }]);\n","/**\n * Tooltip directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmTooltip', ['$templateCache', '$compile', '$timeout', '$window',\n function ($templateCache, $compile, $timeout, $window) {\n return {\n restrict: 'A',\n replace: false,\n scope: true,\n link: function (scope, element, attrs) {\n scope._tooltip_element_ = element;\n scope.event = {};\n\n var setTooltipCss = function () {\n var bottom = $window.innerHeight - scope.event.clientY + 10;\n\n if (bottom + scope._tooltip_.outerHeight() > $window.outerHeight) {\n delete scope.tooltipCSS.bottom;\n scope.tooltipCSS.top = 0;\n } else {\n delete scope.tooltipCSS.top;\n scope.tooltipCSS.bottom = (bottom < 0) ? 10 : bottom;\n }\n\n if (scope.event.pageX + scope._tooltip_.outerWidth() > $window.document.body.offsetWidth) {\n delete scope.tooltipCSS.left;\n scope.tooltipCSS.right = 10;\n } else {\n var left = scope.event.clientX - scope._tooltip_.outerWidth() / 2;\n delete scope.tooltipCSS.right;\n scope.tooltipCSS.left = (left < 0) ? 10 : left;\n }\n\n if (scope.eventInProgress) scope.eventInProgress = false;\n };\n\n scope.getEvent = function (event) {\n if (scope.eventInProgress) return;\n scope.event = event;\n\n scope.eventInProgress = true;\n\n $timeout(setTooltipCss, 50);\n };\n\n if (attrs.lmTooltip.indexOf('.html') !== -1) {\n scope.tooltipContent = $templateCache.get(attrs.lmTooltip);\n } else {\n scope.watcher = attrs.$observe('lmTooltip', function (value) {\n $timeout(function () {\n scope.tooltipContent = value;\n if (scope._tooltip_) {\n scope._tooltip_.html(scope.tooltipContent);\n }\n });\n });\n }\n\n scope.tooltipCSS = {};\n\n var showTooltip = function (event) {\n scope.event = event;\n\n if (!attrs.lmTooltip) return;\n\n angular.element(document).bind('mousemove', scope.getEvent);\n\n scope.tooltipCSS = {};\n\n scope._tooltip_ = $templateCache.get('lm-tooltip/tooltip.tpl.html');\n scope._tooltip_ = $compile(scope._tooltip_)(scope);\n scope._tooltip_.html(scope.tooltipContent);\n $compile(scope._tooltip_.contents())(scope.$parent);\n\n angular.element('body').append(scope._tooltip_);\n setTooltipCss();\n\n $timeout(function (event) {\n scope.tooltipCSS.bottom -= 20;\n scope.tooltipCSS.display = 'block';\n TweenMax.to(scope._tooltip_, 0.35, {\n opacity: 1,\n ease: Expo.easeInOut\n });\n }, 50);\n };\n\n var hideTooltip = function () {\n angular.element(document).unbind('mousemove', scope.getEvent);\n if (!scope._tooltip_) return;\n\n scope.tooltipCSS.display = 'none';\n scope._tooltip_.remove();\n };\n\n scope._tooltip_element_.bind('mouseenter', showTooltip);\n\n scope._tooltip_element_.bind('mouseleave', hideTooltip);\n\n scope._tooltip_element_.on('$destroy', function () {\n if (scope.watcher) scope.watcher();\n scope._tooltip_element_.unbind('mouseenter', showTooltip);\n scope._tooltip_element_.unbind('mouseleave', hideTooltip);\n if (scope._tooltip_) scope._tooltip_.remove();\n\n scope.$destroy();\n });\n }\n };\n }]);\n","lmApp\n .directive('lmVideoUpload', ['$timeout', '$window', '$rootScope', 'AssetService', 'ImportService',\n function ($timeout, $window, $rootScope, AssetService, ImportService) {\n return {\n restrict: 'E',\n templateUrl: 'lm-video-upload/lm-video-upload.tpl.html',\n replace: true,\n scope: {\n ngModel: '=',\n ngDisabled: '=?',\n onUpload: '&',\n error: '=?'\n },\n link: function (scope, element, attrs) {\n scope.src = scope.ngModel;\n scope._image_element_ = element;\n scope._input_ = element.find('input#video-file-input');\n scope._form_ = element.find('form#video-file-form');\n scope._progress_ = element.find('#video_uploader');\n scope._bar_ = scope._progress_.find('.determinate');\n\n scope.uploadTo = function (event) {\n if (scope.ngDisabled) return;\n\n $timeout(function () {\n scope._input_.trigger('click');\n });\n };\n\n var unwatch = scope.$watch('ngModel', function (newValue, oldValue) {\n if (newValue) {\n scope.src = newValue;\n }\n });\n\n $timeout(function () {\n scope._input_\n .on('change', function () {\n $timeout(function () {\n scope.error = '';\n });\n if (!this.files || !this.files.length) {\n $timeout(function () {\n scope.error = 'Please, select file';\n });\n return;\n }\n\n var file = this.files[0];\n\n if (file.size > 104857600) {\n $timeout(function () {\n scope.error = 'File size exceed 100 MB. This file size is: ' + parseInt(file.size / 1024 / 1024, 10) + ' MB';\n });\n return;\n }\n\n ImportService.UploadToCloud(file, scope._progress_)\n .then(function (response) {\n scope._bar_.css({width: 0});\n scope.ngModel = response.Location;\n if (scope.onUpload) {\n $timeout(function () {\n scope.onUpload();\n });\n }\n }, function (reason) {\n scope._bar_.css({width: 0});\n scope.error = reason.message || 'Error during upload';\n $rootScope.debugInfo(reason);\n });\n\n scope._form_[0].reset();\n });\n }, 200);\n\n scope.$on('$destroy', function () {\n unwatch();\n });\n }\n }\n }]);\n","/**\n * Virtual Live directive\n * Created by\n * @author Art Yunishev\n * on 25.02.2016-15:11\n */\n\nlmApp\n .controller('VirtualPlaylistController', ['$scope', '$templateCache', '$compile', '$q', 'AssetService', 'ManageAssetsWindow', 'ModalWindowService',\n function ($scope, $templateCache, $compile, $q, AssetService, ManageAssetsWindow, ModalWindowService) {\n\n $scope.playlistData = {\n isApproxDuration: false,\n totalDuration: ''\n };\n\n var _parseDuration = function (duration) {\n\n var hours = parseInt(duration / 3600, 10);\n var minutes = parseInt(duration / 60 % 60, 10);\n var seconds = parseInt(duration - (hours * 3600 + minutes * 60), 10);\n\n if (hours < 10) {\n hours = '0' + hours;\n }\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n\n return hours + ':' + minutes + ':' + seconds;\n };\n\n $scope.parsePlaylist = function () {\n if (!$scope.playlist) return;\n\n $scope.playlist.forEach(function (group) {\n if (!group._PrivateData) group._PrivateData = {};\n group._PrivateData.isOver = false;\n\n if (group.type === 'multiple') {\n group._PrivateData.isMultipleOpen = !!group._PrivateData.isMultipleOpen;\n group._PrivateData.isApproxDuration = false;\n group._PrivateData.totalDuration = $scope.getGroupDuration(group);\n }\n\n group.items.forEach(function (item) {\n if (!item._PrivateData) item._PrivateData = {};\n\n item._PrivateData.isOver = false;\n item.real_duration = parseInt(item.real_duration, 10);\n if (!item.real_duration) {\n item._PrivateData.isApproxDuration = true;\n } else {\n item._PrivateData.isApproxDuration = false;\n }\n\n item._PrivateData.duration = _parseDuration(item.real_duration || item.duration || 0);\n });\n });\n };\n\n $scope.getGroupDuration = function (group) {\n\n return _parseDuration(_.reduce(group.items, function (memo, item) {\n if (_.isNumber(item.real_duration) && item.real_duration) {\n memo += item.real_duration;\n } else if (_.isNumber(item.duration) && item.duration) {\n memo += item.duration;\n\n group._PrivateData.isApproxDuration = true;\n }\n\n return memo;\n }, 0));\n };\n\n $scope.getPlaylistDuration = function (playlist) {\n\n return _parseDuration(_.reduce(playlist, function (memo, group) {\n\n return memo + _.reduce(group.items, function (memo, item) {\n if (_.isNumber(item.real_duration) && item.real_duration) {\n memo += item.real_duration;\n } else if (_.isNumber(item.duration) && item.duration) {\n memo += item.duration;\n\n $scope.playlistData.isApproxDuration = true;\n }\n\n return memo;\n }, 0);\n }, 0));\n };\n\n $scope.toggleMultiplePlaylist = function (item) {\n item._PrivateData.isMultipleOpen = !item._PrivateData.isMultipleOpen;\n };\n\n $scope.changeCollectionPriority = function (playlist, index, direction) {\n var t;\n switch (direction) {\n case 'up':\n if (index > 0) {\n t = playlist[index];\n playlist[index] = playlist[index - 1];\n playlist[index - 1] = t;\n }\n\n break;\n\n case 'down':\n if (index < playlist.length - 1) {\n t = playlist[index];\n playlist[index] = playlist[index + 1];\n playlist[index + 1] = t;\n }\n\n break;\n }\n };\n\n $scope.changeAssetPriority = function (items, index, direction) {\n var t;\n switch (direction) {\n case 'up':\n if (index > 0) {\n t = items[index];\n items[index] = items[index - 1];\n items[index - 1] = t;\n }\n\n break;\n\n case 'down':\n if (index < items.length - 1) {\n t = items[index];\n items[index] = items[index + 1];\n items[index + 1] = t;\n }\n\n break;\n }\n };\n\n $scope.deleteAssetFromCollection = function (playlist, index) {\n if (playlist[index]) playlist = playlist.splice(index, 1);\n };\n\n $scope.deleteCollectionFromPlaylist = function (playlist, index) {\n if (playlist[index]) playlist = playlist.splice(index, 1);\n };\n\n $scope.multipleGroupManage = function (item) {\n if ($scope.loading) return;\n\n if (!item) {\n item = {\n name: '',\n description: '',\n poster: '',\n items: [],\n type: 'multiple',\n isNew: true\n };\n }\n\n $scope.innerScope = $scope.$new();\n\n $scope.innerScope.item = item;\n\n $scope._createInner_ = $templateCache.get('edit-playlist-multiple.html');\n $scope._createInner_ = $compile($scope._createInner_)($scope.innerScope);\n\n ModalWindowService.Open({\n content: $scope._createInner_,\n isFixed: true,\n actions: [\n {\n title: item.isNew ? 'Add' : 'Save',\n color: 'green',\n fn: function () {\n if ($scope.innerScope.item.isNew) {\n $scope.playlist.push($scope.innerScope.item)\n }\n }\n },\n {\n title: 'Cancel',\n color: 'red'\n }\n ],\n keyboard: true\n });\n\n $scope._createInner_.on('$destroy', function () {\n $scope.innerScope.$destroy();\n });\n };\n\n $scope.addSingleAsset = function () {\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: function (asset, toThis) {\n if ($scope.loading) return;\n\n if (asset.id) {\n\n $scope.playlist.push({\n type: 'single',\n items: [{\n id: asset.id,\n title: asset.title,\n duration: asset.duration,\n hls_deployment_status: _.get(_.find(asset.resources, {type: 'stream', stream_type: 'hls'}), 'is_deployed', false)\n }]\n });\n }\n\n return $q.when(true);\n },\n type: 'single',\n title: 'single asset in Playlist',\n view: 'vod',\n filter: {\n packages: true\n }\n });\n };\n\n $scope.addAssetToMultiplePlaylist = function (item) {\n if ($scope.loading) return;\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n item.items = _.chain(item.items)\n .difference(_.map(toRemove, function (asset) {\n return {\n id: asset.id,\n title: asset.title,\n duration: asset.duration,\n real_duration: 0,\n hls_deployment_status: _.get(_.find(asset.resources, {type: 'stream', stream_type: 'hls'}), 'is_deployed', false)\n };\n }))\n .concat(_.map(toAdd, function (asset) {\n return {\n id: asset.id,\n title: asset.title,\n duration: asset.duration,\n real_duration: 0,\n hls_deployment_status: _.get(_.find(asset.resources, {type: 'stream', stream_type: 'hls'}), 'is_deployed', false)\n };\n }))\n .value();\n\n $scope.parsePlaylist();\n\n return $q.when(true);\n },\n title: 'assets in Multiple Playlist',\n view: 'vod',\n currentCollection: [],\n filter: {\n packages: true\n }\n })\n };\n\n $scope.parsePlaylist();\n\n $scope.playlistWatcher = $scope.$watchCollection('playlist', function (newValue, oldValue) {\n if (_.size(newValue)) {\n $scope.parsePlaylist();\n $scope.playlistData.totalDuration = $scope.getPlaylistDuration(newValue);\n }\n });\n\n $scope.$on('$destroy', function () {\n $scope.playlistWatcher();\n });\n }\n ])\n;\n\nlmApp\n .directive('lmVirtualPlaylist', [function () {\n return {\n restrict: 'E',\n replace: true,\n scope: {\n playlist: '=',\n loading: '=',\n start: '='\n },\n controller: 'VirtualPlaylistController',\n link: function (scope, element, attrs) {\n\n },\n templateUrl: 'lm-virtual-playlist/lm-virtual-playlist.tpl.html'\n }\n }]);\n","/**\n * if Img.src not loaded, then use placeholder from ngSrc\n */\nlmApp\n .directive('errSrc', [function () {\n return {\n link: function (scope, element, attrs) {\n element.bind('error', function () {\n if (attrs.src != attrs.errSrc) {\n attrs.$set('src', attrs.errSrc);\n }\n });\n attrs.$observe('ngSrc', function (value) {\n if (!value && attrs.errSrc) {\n attrs.$set('src', attrs.errSrc);\n }\n });\n }\n };\n }]);\n","lmApp\n .directive('lmEditLive', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmEditLiveController',\n templateUrl: 'lm-asset-edit/live/edit-live.tpl.html'\n };\n }]);\n\nlmApp\n .controller('LmEditLiveController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'GenreResource', 'CategoryResource', 'EPGChannelResource', 'ProviderResource', 'AssetResource', 'SubscriptionPlanResource', 'ContentNodeResource', 'ValidatorService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, GenreResource, CategoryResource, EPGChannelResource, ProviderResource, AssetResource, SubscriptionPlanResource, ContentNodeResource, ValidatorService) {\n $scope.channel = {\n id: 0,\n extid: '',\n type: 'channel',\n name: '',\n description: '',\n rotationStart: moment.utc().subtract(1, 'day'),\n rotationFinish: moment.utc().add(1, 'year'),\n lcn: '',\n epg: {\n id: 0,\n title: '',\n },\n provider: {},\n adult: false,\n categories: [],\n genres: [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n streams: [],\n catchup: {\n id: 0,\n source: '',\n depth: 0,\n },\n streamResources: [],\n packages: [],\n free: false,\n billingType: 'packages', // packages, free, plans\n plans: [],\n vastId: '',\n };\n\n $scope.genres = [];\n $scope.categories = [];\n $scope.providers = [];\n $scope.epgChannels = [];\n $scope.packages = [];\n $scope.plans = [];\n\n var saved = {};\n var savedPlans = {};\n\n if ($scope.asset.id && $scope.asset.id > 0) {\n $scope.channel.id = $scope.asset.id;\n $scope.channel.free = $scope.asset.free || false;\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var params = {};\n params['id[eq]'] = $scope.asset.id;\n params['$expand'] = 'resources(url),categories,genres,packages,provider,epg';\n AssetResource.get(params).$promise\n .then(function (result) {\n if (result.length) {\n processAsset(result[0]);\n saved = angular.copy(result[0]);\n } else {\n ToastService.Small({\n title: 'Error getting channel',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n }\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n })\n .catch(function (reason) {\n console.log('error', reason)\n ToastService.Small({\n title: 'Error getting channel',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $scope.close();\n });\n }\n\n var processProvider = function(provider) {\n if (!provider) return {};\n return {\n id: provider.id,\n title: provider.name\n }\n };\n\n var processCategory = function(category) {\n return {\n id: category.id,\n title: category.name\n };\n };\n\n var processGenre = function(genre) {\n return {\n id: genre.id,\n title: genre.name\n };\n };\n\n var processPackage = function(pack) {\n return {\n id: pack.id,\n title: pack.name\n };\n };\n\n var processAsset = function(asset) {\n $scope.channel.extid = asset.ext_id;\n $scope.channel.name = asset.name;\n $scope.channel.description = asset.description;\n $scope.channel.rotationStart = moment(asset.rotation_start);\n $scope.channel.rotationFinish = moment(asset.rotation_finish);\n $scope.channel.lcn = parseInt(asset.lcn);\n $scope.channel.provider = processProvider(asset.provider);\n $scope.channel.adult = asset.adult || false;\n $scope.channel.vastId = asset.vast_id || '';\n var categories = asset.categories || [];\n $scope.channel.categories = categories.map(processCategory);\n var genres = asset.genres || [];\n $scope.channel.genres = genres.map(processGenre);\n var packages = asset.packages || [];\n $scope.channel.packages = packages.map(processPackage);\n\n if (asset.epg) {\n $scope.channel.epg.id = asset.epg.id\n $scope.channel.epg.title = asset.epg.ext_id\n }\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n $scope.channel.poster.state = r.state;\n $scope.channel.poster.url = r.url;\n $scope.channel.poster.source = r.source;\n continue\n }\n if (r.category === 'catchup') {\n $scope.channel.catchup.id = r.id;\n $scope.channel.catchup.source = r.source;\n $scope.channel.catchup.depth = parseInt(r.catchup_depth) || 0;\n }\n var pr = {\n id: r.id,\n type: r.type.toUpperCase(),\n group: r.group_id,\n state: r.state,\n deployer: r.deployer,\n preparer: r.preparer,\n added: r.create_time,\n private: r.private || false,\n URL: r.source,\n category: r.category,\n tags: '',\n depth: parseInt(r.catchup_depth) || 0\n }\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n pr.tags = r.deployer_args.cdn_tag;\n }\n if (r.type === 'dash-live' || r.type === 'hls-live' || r.type === 'shoutcast' || r.type === 'hls-live-protected' || r.type === 'dash-live-protected') {\n $scope.channel.streams.push(pr)\n }\n $scope.channel.streamResources.push(pr)\n }\n }\n if (asset.free) {\n $scope.channel.free = true;\n $scope.channel.billingType = 'free';\n }\n };\n\n\n var getMeta = function() {\n EPGChannelResource.get().$promise\n .then(function (epgChannels) {\n var epgChannelList = [];\n for (var i = 0; i < epgChannels.length; i++) {\n var epgChannel = epgChannels[i];\n epgChannelList.push({\n id: epgChannel.id,\n title: epgChannel.ext_id\n });\n }\n $scope.epgChannels = epgChannelList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n GenreResource.get().$promise\n .then(function (genres) {\n var genreList = [];\n for (var i = 0; i < genres.length; i++) {\n var genre = genres[i];\n genreList.push({\n id: genre.id,\n title: genre.name\n });\n }\n $scope.genres = genreList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CategoryResource.get().$promise\n .then(function (categories) {\n var categoryList = [];\n for (var i = 0; i < categories.length; i++) {\n var category = categories[i];\n var processed = {\n id: category.id,\n title: category.name\n };\n categoryList.push(processed);\n if ($scope.channel.id === 0 && category.ext_id === 'tv') {\n $scope.channel.categories.push(processed);\n }\n }\n $scope.categories = categoryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n ProviderResource.get().$promise\n .then(function (providers) {\n var providerList = [];\n for (var i = 0; i < providers.length; i++) {\n var provider = providers[i];\n providerList.push({\n id: provider.id,\n title: provider.name\n });\n }\n $scope.providers = providerList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n AssetResource.get({'type[in]': 'package'}).$promise\n .then(function (packages) {\n var packageList = [];\n for (var i = 0; i < packages.length; i++) {\n var p = packages[i];\n packageList.push({\n id: p.id,\n title: p.name\n });\n }\n $scope.packages = packageList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n\n SubscriptionPlanResource.get({'$expand': 'assets'}).$promise\n .then(function (plans) {\n var planList = [];\n for (var i = 0; i < plans.length; i++) {\n var p = plans[i];\n var assets = p.assets || [];\n var processed = {\n id: p.id,\n title: p.name,\n assets: assets\n };\n planList.push(processed);\n if ($scope.channel.id > 0) {\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id === $scope.channel.id) {\n $scope.channel.plans.push(processed);\n break;\n }\n }\n savedPlans = angular.copy($scope.channel.plans);\n }\n }\n\n if ($scope.channel.id > 0 && !$scope.channelfree && $scope.channel.plans.length) {\n $scope.channel.billingType = 'plans';\n }\n $scope.plans = planList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n getMeta();\n\n $scope.setCatchupOptions = function () {\n var hlsFound = false\n for (var i = 0; i < $scope.channel.streamResources.length; i++) {\n var r = $scope.channel.streamResources[i]\n if (r.type.toLowerCase() === 'hls-live') {\n hlsFound = true\n if (!$scope.channel.catchup.source) {\n $scope.channel.catchup.source = r.URL\n }\n break\n }\n }\n\n // if (!hlsFound) return;\n\n MetadataService.Catchup2.ChangeValue($scope.channel, $scope);\n };\n\n $scope.cdnTags = [];\n $scope.getCDNTags = function () {\n return ContentNodeResource.get().$promise\n .then(function (origins) {\n for (var i = 0; i < origins.length; i++) {\n var origin = origins[i];\n if (!origin.cdn) {\n continue\n }\n for (var j = 0; j < origin.cdn.length; j += 1) {\n if (!origin.cdn[j].tag) continue;\n $scope.cdnTags.push(origin.cdn[j].tag)\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n $scope.getCDNTags();\n\n $scope.openMediaManager = function (type, resource) {\n if ($scope.loading) return;\n MetadataService.MediaManager2($scope.channel, $scope, type, resource, $scope.cdnTags);\n };\n\n $scope.deleteStream = function($index) {\n $scope.channel.streamResources.splice($index, 1);\n };\n\n var normStreamResourceToJson = function (stream) {\n var resource = {\n type: stream.type.toLowerCase(), // dash-live , hls-live, shoutcast\n category: stream.category,\n group_id: stream.group,\n source: stream.URL,\n preparer: stream.preparer,\n private: stream.private,\n deployer: stream.deployer,\n deployer_args: {},\n catchup_depth: parseInt(stream.depth) || 0\n };\n if (stream.tags) {\n resource.deployer_args.cdn_tag = stream.tags\n }\n return resource\n };\n\n var normChannelToJson = function(channel) {\n var processed = {\n ext_id: 'personal:' + translit(channel.name) + (channel.lcn || '') + ':' + CryptoJS.MD5(channel.name + (channel.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid(),\n type: 'channel',\n name: _.trim(channel.name),\n description: _.trim(channel.description),\n lcn: parseInt(channel.lcn) || 0,\n categories: channel.categories,\n genres: channel.genres,\n packages: channel.packages,\n adult: channel.adult,\n rotation_start: channel.rotationStart.format(),\n rotation_finish: channel.rotationFinish.format(),\n resources: [],\n free: false,\n plans: [],\n vast_id: channel.vastId,\n provider: channel.provider,\n epg: channel.epg,\n };\n if (channel.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: channel.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n for (var i = 0; i < channel.streamResources.length; i++) {\n processed.resources.push(normStreamResourceToJson(channel.streamResources[i]));\n }\n if (channel.billingType === 'free') {\n processed.free = true;\n processed.plans = [];\n }\n if (channel.billingType === 'plans') {\n processed.plans = channel.plans;\n }\n return processed;\n };\n\n var isAssetValid = function() {\n $scope.channelValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.channel.name)) {\n $scope.channelValidateErrors.name = true;\n valid = false;\n }\n if ($scope.channel.lcn && (!ValidatorService.Numerical($scope.channel.lcn) || $scope.channel.lcn < 0)) {\n $scope.channelValidateErrors.lcn = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.$parent.createFn = function () {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var newChannel = normChannelToJson($scope.channel);\n if (!newChannel.provider.id) {\n delete newChannel.provider;\n }\n if (!newChannel.epg.id) {\n delete newChannel.epg;\n }\n\n AssetResource.create(newChannel).$promise\n .then(function (response) {\n if ($scope.channel.plans.length > 0) {\n for (var i = 0; i < $scope.channel.plans.length; i++) {\n var assets = $scope.channel.plans[i].assets;\n assets.push({id: response.data.id});\n SubscriptionPlanResource.update({id: $scope.channel.plans[i].id}, {assets: assets}).$promise\n .then(function (response) {\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'Channel: ' + $scope.channel.name + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n $scope.close();\n ToastService.Small({\n title: 'Failed to create channel: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var compareResources = function(updated) {\n var sourceResourceMap = {};\n if (saved.resources) {\n for (var i = 0; i < saved.resources.length; i++) {\n var r = saved.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n var depth = 0\n if (r.catchup_depth) {\n depth = r.catchup_depth\n }\n if (!r.private) r.private = false;\n var key = (r.type + r.category + r.private + r.deployer + tags + depth).toLowerCase();\n sourceResourceMap[key] = r;\n }\n }\n\n var newResources = [];\n for (var i = 0; i < updated.resources.length; i++) {\n var r = updated.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n var depth = 0\n if (r.catchup_depth) {\n depth = r.catchup_depth\n }\n if (!r.private) r.private = false;\n var key = (r.type + r.category + r.private + r.deployer + tags + depth).toLowerCase();\n if (!sourceResourceMap.hasOwnProperty(key)) {\n newResources.push(r);\n } else {\n if (r.source === sourceResourceMap[key].source\n && r.private === sourceResourceMap[key].private\n && r.deployer === sourceResourceMap[key].deployer\n && sourceResourceMap[key].state !== 'deployment-error') {\n newResources.push(sourceResourceMap[key]);\n } else {\n newResources.push(r);\n }\n }\n }\n return newResources;\n };\n\n var comparePlans = function(updated) {\n var diff = {\n add: {},\n delete: {}\n };\n\n var sourcePlanMap = {};\n for (var i = 0; i < savedPlans.length; i++) {\n sourcePlanMap[savedPlans[i].id] = true;\n }\n\n for (var i = 0; i < updated.plans.length; i++) {\n var key = updated.plans[i].id;\n if (sourcePlanMap.hasOwnProperty(key)) {\n delete sourcePlanMap[key];\n } else {\n diff.add[key] = true;\n }\n }\n for (var key in sourcePlanMap) {\n diff.delete[key] = true;\n }\n return diff;\n };\n\n $scope.$parent.updateFn = function (asset) {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var updated = normChannelToJson($scope.channel);\n updated.resources = compareResources(updated);\n\n AssetResource.update({id: $scope.channel.id}, updated).$promise\n .then(function (response) {\n var planDiff = comparePlans(updated);\n\n for (var i = 0; i < $scope.plans.length; i++) {\n var plan = $scope.plans[i];\n var assets = angular.copy(plan.assets);\n if (planDiff.add.hasOwnProperty(plan.id)) {\n assets.push({id: $scope.channel.id});\n SubscriptionPlanResource.update({id: plan.id}, {assets: assets}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n if (planDiff.delete.hasOwnProperty(plan.id)) {\n var newList = [];\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id !== $scope.channel.id) {\n newList.push({id: assets[j].id});\n }\n }\n SubscriptionPlanResource.update({id: plan.id}, {assets: newList}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'Channel ' + $scope.channel.name + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n ToastService.Small({\n title: 'Failed to update channel: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'cloud-outline-off'\n }, 30 * 1000);\n $rootScope.debugInfo(reason);\n });\n }\n\n }]);\n","lmApp\n .directive('lmEditMovie', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmEditMovieController',\n templateUrl: 'lm-asset-edit/movie/edit-movie.tpl.html'\n };\n }]);\n\nlmApp\n .controller('LmEditMovieController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'GenreResource', 'CategoryResource', 'CountryResource', 'ProviderResource', 'StudioResource', 'PersonResource', 'AssetResource', 'SubscriptionPlanResource', 'ContentNodeResource', 'ValidatorService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, GenreResource, CategoryResource, CountryResource, ProviderResource, StudioResource, PersonResource, AssetResource, SubscriptionPlanResource, ContentNodeResource, ValidatorService) {\n $scope.movie = {\n id: 0,\n extid: '',\n type: 'movie',\n name: '',\n description: '',\n rotationStart: moment.utc().subtract(1, 'day'),\n rotationFinish: moment.utc().add(1, 'year'),\n year: '',\n duration: 0,\n imdb: '',\n imdbVoteCount: '',\n kinopoisk: '',\n kinopoiskVoteCount: '',\n country: {},\n provider: {},\n studio: {},\n adult: false,\n ageLimit: '',\n categories: [],\n genres: [],\n person: {},\n persons: [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n landscapePoster: {\n state: '',\n url: '',\n source: '',\n },\n streamResources: [],\n packages: [],\n free: false,\n billingType: 'packages', // packages, free, plans\n plans: [],\n mpaa: '',\n vastId: '',\n };\n\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n $scope.showPersonForm = false;\n\n $scope.genres = [];\n $scope.categories = [];\n $scope.countries = [];\n $scope.providers = [];\n $scope.studios = [];\n $scope.packages = [];\n $scope.plans = [];\n\n $scope.persons = [];\n $scope.roles = [\n {\n title: 'Actor',\n id: 'actor'\n },\n {\n title: 'Composer',\n id: 'composer'\n },\n {\n title: 'Director',\n id: 'director'\n },\n {\n title: 'Operator',\n id: 'operator'\n },\n {\n title: 'Producer',\n id: 'producer'\n },\n {\n title: 'Presenter',\n id: 'presenter'\n },\n {\n title: 'Scenario',\n id: 'scenario'\n },\n {\n title: 'Editor',\n id: 'editor'\n },\n {\n title: 'Writer',\n id: 'writer'\n },\n {\n title: 'Guest',\n id: 'guest'\n },\n {\n title: 'Assembly',\n id: 'assembly'\n },\n {\n title: 'Artist',\n id: 'artist'\n },\n {\n title: 'Music Director',\n id: 'music_director'\n },\n {\n title: 'Playback Singers',\n id: 'playback_singers'\n }\n ];\n\n\n var saved = {};\n var savedPlans = {};\n\n if ($scope.asset.id && $scope.asset.id > 0) {\n $scope.movie.id = $scope.asset.id;\n $scope.movie.free = $scope.asset.free || false;\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var params = {};\n params['id[eq]'] = $scope.asset.id;\n params['$expand'] = 'resources(url),categories,genres,packages,provider,persons,country,studio';\n AssetResource.get(params).$promise\n .then(function (result) {\n if (result.length) {\n processAsset(result[0]);\n saved = angular.copy(result[0]);\n } else {\n ToastService.Small({\n title: 'Error getting movie',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n }\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error getting movie',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $scope.close();\n });\n }\n\n var processProvider = function(provider) {\n if (!provider) return {};\n return {\n id: provider.id,\n title: provider.name\n }\n };\n\n var processStudio = function(studio) {\n if (!studio) return {};\n return {\n id: studio.id,\n title: studio.name\n };\n };\n\n var processCountry = function(country) {\n if (!country) return {};\n return {\n id: country.id,\n title: country.name\n };\n };\n\n\n var processCategory = function(category) {\n return {\n id: category.id,\n title: category.name\n };\n };\n\n var processGenre = function(genre) {\n return {\n id: genre.id,\n title: genre.name\n };\n };\n\n var processPackage = function(pack) {\n return {\n id: pack.id,\n title: pack.name\n };\n };\n\n var processAsset = function(asset) {\n $scope.movie.extid = asset.ext_id;\n $scope.movie.name = asset.name;\n $scope.movie.description = asset.description;\n $scope.movie.rotationStart = moment(asset.rotation_start);\n $scope.movie.rotationFinish = moment(asset.rotation_finish);\n $scope.movie.year = asset.year;\n $scope.movie.duration = asset.duration || 0;\n $scope.movie.imdb = asset.imdb || '';\n $scope.movie.imdbVoteCount = asset.imdb_vote_count || '';\n $scope.movie.kinopoisk = asset.kinopoisk || '';\n $scope.movie.kinopoiskVoteCount = asset.kinopoisk_vote_count || '';\n $scope.movie.country = processCountry(asset.country);\n $scope.movie.provider = processProvider(asset.provider);\n $scope.movie.studio = processStudio(asset.studio);\n $scope.movie.adult = asset.adult || false;\n $scope.movie.ageLimit = asset.age_limit || '';\n $scope.movie.mpaa = asset.mpaa || '';\n $scope.movie.vastId = asset.vast_id || '';\n var categories = asset.categories || [];\n $scope.movie.categories = categories.map(processCategory);\n var genres = asset.genres || [];\n $scope.movie.genres = genres.map(processGenre);\n var persons = asset.persons || [];\n $scope.movie.persons = persons.map(jsonPersonToNorm);\n var packages = asset.packages || [];\n $scope.movie.packages = packages.map(processPackage);\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n if (r.category === 'poster_blueprint') {\n $scope.movie.poster.state = r.state;\n $scope.movie.poster.url = r.url;\n $scope.movie.poster.source = r.source;\n }\n if (r.category === 'landscape') {\n $scope.movie.landscapePoster.state = r.state;\n $scope.movie.landscapePoster.url = r.url;\n $scope.movie.landscapePoster.source = r.source;\n }\n continue\n }\n var pr = {\n id: r.id,\n type: r.type,\n state: r.state,\n deployer: r.deployer,\n preparer: r.preparer,\n added: r.create_time,\n private: r.private || false,\n URL: r.source,\n category: r.category,\n tags: '',\n group: r.group_id,\n deployerArgs: r.deployer_args,\n }\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n pr.tags = r.deployer_args.cdn_tag;\n }\n $scope.movie.streamResources.push(pr)\n }\n }\n if (asset.free) {\n $scope.movie.free = true;\n $scope.movie.billingType = 'free';\n }\n };\n\n\n var getMeta = function() {\n GenreResource.get().$promise\n .then(function (genres) {\n var genreList = [];\n for (var i = 0; i < genres.length; i++) {\n var genre = genres[i];\n genreList.push({\n id: genre.id,\n title: genre.name\n });\n }\n $scope.genres = genreList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CategoryResource.get().$promise\n .then(function (categories) {\n var categoryList = [];\n for (var i = 0; i < categories.length; i++) {\n var category = categories[i];\n var processed = {\n id: category.id,\n title: category.name\n };\n categoryList.push(processed);\n if ($scope.movie.id === 0 && category.ext_id === 'movies') {\n $scope.movie.categories.push(processed);\n }\n }\n $scope.categories = categoryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CountryResource.get().$promise\n .then(function (countries) {\n var countryList = [];\n for (var i = 0; i < countries.length; i++) {\n var country = countries[i];\n countryList.push({\n id: country.id,\n title: country.name\n });\n }\n $scope.countries = countryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n ProviderResource.get().$promise\n .then(function (providers) {\n var providerList = [];\n for (var i = 0; i < providers.length; i++) {\n var provider = providers[i];\n providerList.push({\n id: provider.id,\n title: provider.name\n });\n }\n $scope.providers = providerList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n StudioResource.get().$promise\n .then(function (studios) {\n var studioList = [];\n for (var i = 0; i < studios.length; i++) {\n var studio = studios[i];\n studioList.push({\n id: studio.id,\n title: studio.name\n });\n }\n $scope.studios = studioList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n AssetResource.get({'type[in]': 'package'}).$promise\n .then(function (packages) {\n var packageList = [];\n for (var i = 0; i < packages.length; i++) {\n var p = packages[i];\n packageList.push({\n id: p.id,\n title: p.name\n });\n }\n $scope.packages = packageList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n\n SubscriptionPlanResource.get({'$expand': 'assets'}).$promise\n .then(function (plans) {\n var planList = [];\n for (var i = 0; i < plans.length; i++) {\n var p = plans[i];\n var assets = p.assets || [];\n var processed = {\n id: p.id,\n title: p.name,\n assets: assets\n };\n planList.push(processed);\n if ($scope.movie.id > 0) {\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id === $scope.movie.id) {\n $scope.movie.plans.push(processed);\n break;\n }\n }\n savedPlans = angular.copy($scope.movie.plans);\n }\n }\n\n if ($scope.movie.id > 0 && !$scope.movie.free && $scope.movie.plans.length) {\n $scope.movie.billingType = 'plans';\n }\n $scope.plans = planList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n getMeta();\n\n $scope.clearStudio = function() {\n $scope.movie.studio = {}\n }\n\n var searchTimeout;\n $scope.findPersonLoading = false;\n $scope.findPerson = function(text) {\n if (!text) return;\n text = text.trim();\n if (text === '') return;\n if (searchTimeout) $timeout.cancel(searchTimeout);\n $scope.findPersonLoading = true;\n searchTimeout = $timeout(function () {\n AssetService.SearchPerson(text)\n .then(function (persons) {\n var personList = [];\n for (var i = 0; i < persons.length; i++) {\n var person = persons[i];\n personList.push({\n id: person.id,\n title: person.first_name + ' ' + person.second_name + ' (' + person.role + ')',\n firstName: person.first_name,\n lastName: person.second_name,\n role: person.role\n });\n }\n $scope.persons = personList;\n $scope.findPersonLoading = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }, 650);\n };\n\n $scope.addPersonToList = function(person) {\n $scope.movie.person = {};\n for (var i = 0; i < $scope.movie.persons.length; i++) {\n if ($scope.movie.persons[i].id === person.id) return;\n }\n $scope.movie.persons.push(person);\n };\n\n $scope.cdnTags = [];\n $scope.getCDNTags = function () {\n return ContentNodeResource.get().$promise\n .then(function (origins) {\n for (var i = 0; i < origins.length; i++) {\n var origin = origins[i];\n if (!origin.cdn) {\n continue\n }\n for (var j = 0; j < origin.cdn.length; j += 1) {\n if (!origin.cdn[j].tag) continue;\n $scope.cdnTags.push(origin.cdn[j].tag)\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n $scope.getCDNTags();\n\n $scope.openMediaManager = function (type, resource) {\n if ($scope.loading) return;\n MetadataService.MediaManager2($scope.movie, $scope, type, resource, $scope.cdnTags);\n };\n\n $scope.deletePerson = function(person) {\n for (var i = 0; i < $scope.movie.persons.length; i++) {\n if (person.id === $scope.movie.persons[i].id) {\n $scope.movie.persons.splice(i, 1);\n return;\n }\n }\n };\n\n $scope.deleteStream = function($index) {\n $scope.movie.streamResources.splice($index, 1);\n };\n\n $scope.togglePersonForm = function() {\n $scope.showPersonForm = !$scope.showPersonForm;\n };\n\n $scope.createPerson = function() {\n $scope.personValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.newPerson.firstName)) {\n $scope.personValidateErrors.firstName = true;\n valid = false;\n }\n if (!_.trim($scope.newPerson.lastName)) {\n $scope.personValidateErrors.lastName = true;\n valid = false;\n }\n if (!$scope.newPerson.role.id) {\n $scope.personValidateErrors.role = true;\n valid = false;\n }\n if (!valid) return;\n\n PersonResource.create(normPersonToJson($scope.newPerson)).$promise\n .then(function (response) {\n $scope.addPersonToList(jsonPersonToNorm(response.data));\n $scope.togglePersonForm();\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to create person: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n\n var normPersonToJson = function(person) {\n return {\n first_name: person.firstName,\n last_name: person.lastName,\n role: person.role.id\n }\n };\n\n var jsonPersonToNorm = function(person) {\n return {\n id: person.id,\n firstName: person.first_name,\n lastName: person.last_name,\n role: person.role\n }\n };\n\n var normStreamResourceToJson = function (stream) {\n var resource = {\n type: stream.type, // dash, hls, youtube+video, megogo\n category: stream.category,\n group_id: stream.group,\n source: stream.URL,\n preparer: stream.preparer,\n private: stream.private,\n deployer: stream.deployer\n };\n if (stream.deployerArgs) {\n resource.deployer_args = stream.deployerArgs;\n }\n if (stream.tags) {\n if (!resource.deployer_args) resource.deployer_args = {}\n resource.deployer_args.cdn_tag = stream.tags\n }\n return resource\n };\n\n var normMovieToJson = function(movie) {\n var processed = {\n ext_id: 'personal:' + translit(movie.name) + (movie.year || '') + ':' + CryptoJS.MD5(movie.name + (movie.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid(),\n type: 'movie',\n name: _.trim(movie.name),\n description: _.trim(movie.description),\n year: parseInt(movie.year),\n duration: parseInt(movie.duration),\n categories: movie.categories,\n genres: movie.genres,\n persons: movie.persons,\n packages: movie.packages,\n adult: movie.adult,\n age_limit: parseInt(movie.ageLimit || 0),\n imdb: parseFloat(movie.imdb || 0),\n imdb_vote_count: parseInt(movie.imdbVoteCount || 0),\n kinopoisk: parseFloat(movie.kinopoisk || 0),\n kinopoisk_vote_count: parseInt(movie.kinopoiskVoteCount || 0),\n rotation_start: movie.rotationStart.format(),\n rotation_finish: movie.rotationFinish.format(),\n resources: [],\n free: false,\n plans: [],\n mpaa: movie.mpaa,\n vast_id: movie.vastId,\n studio: movie.studio,\n provider: movie.provider,\n country: movie.country,\n };\n if (!processed.year) {\n processed.year = 0;\n }\n if (movie.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: movie.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n if (movie.landscapePoster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'landscape',\n group_id: 'picture',\n source: movie.landscapePoster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n for (var i = 0; i < movie.streamResources.length; i++) {\n processed.resources.push(normStreamResourceToJson(movie.streamResources[i]));\n }\n if (movie.billingType === 'free') {\n processed.free = true;\n processed.plans = [];\n }\n if (movie.billingType === 'plans') {\n processed.plans = movie.plans;\n }\n return processed;\n };\n\n var isAssetValid = function() {\n $scope.movieValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.movie.name)) {\n $scope.movieValidateErrors.name = true;\n valid = false;\n }\n if ($scope.movie.year && (!ValidatorService.Numerical($scope.movie.year) || $scope.movie.year < 1900)) {\n $scope.movieValidateErrors.year = true;\n valid = false;\n }\n if ($scope.movie.ageLimit && (!ValidatorService.Numerical($scope.movie.ageLimit) || $scope.movie.ageLimit < 0 || $scope.movie.ageLimit > 18)) {\n $scope.movieValidateErrors.ageLimit = true;\n valid = false;\n }\n if ($scope.movie.imdb && (!ValidatorService.Numerical($scope.movie.imdb) || $scope.movie.imdb < 0 || $scope.movie.imdb > 10)) {\n $scope.movieValidateErrors.imdb = true;\n valid = false;\n }\n if ($scope.movie.imdbVoteCount && (!ValidatorService.Numerical($scope.movie.imdbVoteCount) || $scope.movie.imdbVoteCount < 0)) {\n $scope.movieValidateErrors.imdbVoteCount = true;\n valid = false;\n }\n if ($scope.movie.kinopoisk && (!ValidatorService.Numerical($scope.movie.kinopoisk) || $scope.movie.kinopoisk < 0 || $scope.movie.kinopoisk > 10)) {\n $scope.movieValidateErrors.kinopoisk = true;\n valid = false;\n }\n if ($scope.movie.kinopoiskVoteCount && (!ValidatorService.Numerical($scope.movie.kinopoiskVoteCount) || $scope.movie.kinopoiskVoteCount < 0)) {\n $scope.movieValidateErrors.kinopoiskVoteCount = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.$parent.createFn = function () {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var newMovie = normMovieToJson($scope.movie);\n if (!newMovie.studio.id) {\n delete newMovie.studio;\n }\n if (!newMovie.provider.id) {\n delete newMovie.provider;\n }\n if (!newMovie.country.id) {\n delete newMovie.country;\n }\n\n AssetResource.create(newMovie).$promise\n .then(function (response) {\n if ($scope.movie.plans.length > 0) {\n for (var i = 0; i < $scope.movie.plans.length; i++) {\n var assets = $scope.movie.plans[i].assets;\n assets.push({id: response.data.id});\n SubscriptionPlanResource.update({id: $scope.movie.plans[i].id}, {assets: assets}).$promise\n .then(function (response) {\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'VOD: ' + $scope.movie.name + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n $scope.close();\n ToastService.Small({\n title: 'Failed to create asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var compareResources = function(updated) {\n var sourceResourceMap = {};\n if (saved.resources) {\n for (var i = 0; i < saved.resources.length; i++) {\n var r = saved.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n if (!r.private) r.private = false;\n var key = r.type + r.category + r.private + tags;\n sourceResourceMap[key] = r;\n }\n }\n\n var newResources = [];\n for (var i = 0; i < updated.resources.length; i++) {\n var r = updated.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n if (!r.private) r.private = false;\n var key = r.type + r.category + r.private + tags;\n if (!sourceResourceMap.hasOwnProperty(key)) {\n newResources.push(r);\n } else {\n if (r.source === sourceResourceMap[key].source\n && r.private === sourceResourceMap[key].private\n && r.deployer === sourceResourceMap[key].deployer\n && sourceResourceMap[key].state !== 'deployment-error') {\n newResources.push(sourceResourceMap[key]);\n } else {\n newResources.push(r);\n }\n }\n }\n return newResources;\n };\n\n var comparePlans = function(updated) {\n var diff = {\n add: {},\n delete: {}\n };\n\n var sourcePlanMap = {};\n for (var i = 0; i < savedPlans.length; i++) {\n sourcePlanMap[savedPlans[i].id] = true;\n }\n\n for (var i = 0; i < updated.plans.length; i++) {\n var key = updated.plans[i].id;\n if (sourcePlanMap.hasOwnProperty(key)) {\n delete sourcePlanMap[key];\n } else {\n diff.add[key] = true;\n }\n }\n for (var key in sourcePlanMap) {\n diff.delete[key] = true;\n }\n return diff;\n };\n\n $scope.$parent.updateFn = function (asset) {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var updated = normMovieToJson($scope.movie);\n updated.resources = compareResources(updated);\n\n AssetResource.update({id: $scope.movie.id}, updated).$promise\n .then(function (response) {\n var planDiff = comparePlans(updated);\n\n for (var i = 0; i < $scope.plans.length; i++) {\n var plan = $scope.plans[i];\n var assets = angular.copy(plan.assets);\n if (planDiff.add.hasOwnProperty(plan.id)) {\n assets.push({id: $scope.movie.id});\n SubscriptionPlanResource.update({id: plan.id}, {assets: assets}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n if (planDiff.delete.hasOwnProperty(plan.id)) {\n var newList = [];\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id !== $scope.movie.id) {\n newList.push({id: assets[j].id});\n }\n }\n SubscriptionPlanResource.update({id: plan.id}, {assets: newList}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'VOD: ' + $scope.movie.name + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n ToastService.Small({\n title: 'Failed to update asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'cloud-outline-off'\n }, 30 * 1000);\n $rootScope.debugInfo(reason);\n });\n }\n\n }]);\n","/**\n * Modal window directive for Edit Live\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:23\n */\n\nlmApp.directive('lmEditLive2', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmEditLiveController2',\n templateUrl: 'lm-assets-edit/live/edit-live.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmEditLiveController2', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', '$interval', 'MetadataService', 'AssetService', 'ToastService', 'GroupService', 'OfferService', 'PlanService', 'PackageService', 'YoutubeService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, $interval, MetadataService, AssetService, ToastService, GroupService, OfferService, PlanService, PackageService, YoutubeService) {\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n $scope.getStreamTypeAttrs = MetadataService.getStreamTypeAttrs;\n\n /**\n * Process media in asset.\n * @param asset\n */\n $scope.mediaManager = function (asset) {\n if ($scope.loading) return;\n\n MetadataService.MediaManager(asset, $scope);\n };\n\n $scope.deleteStream = function (stream) {\n stream.toDelete = true;\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.qualityFormats = [\n {\n title: 'HD',\n isSelected: false\n },\n {\n title: 'SD',\n isSelected: false\n }\n ];\n\n assetData._PrivateData.adultContent = assetData.has_adult_content;\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n assetData._PrivateData.tagsOld = assetData.tags ? assetData.tags : [];\n assetData._PrivateData.tagsNew = angular.copy(assetData._PrivateData.tagsOld);\n\n assetData._PrivateData.genresOld = assetData.genres.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n\n assetData._PrivateData.genresNew = angular.copy(assetData._PrivateData.genresOld);\n AssetService.GetGenresCollection()\n .then(function (answer) {\n $scope.genreSearch = answer.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n })\n .catch(function (reason) {\n $scope.genreSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n $scope.epg = {};\n AssetService.GetEpgIDCollection()\n .then(function (answer) {\n answer.forEach(function (epg) {\n\n if (!epg.title) epg.title = epg.extid;\n });\n\n $scope.epg.epgIDSearch = answer.map(function (epg) {\n return {\n title: epg.title + '
    [' + epg.extid + '] ',\n smallTitle: epg.title,\n id: epg.id\n }\n });\n\n assetData._PrivateData.epgChannelIdOld = _.find(answer, {id: assetData.epg_channel_id});\n assetData._PrivateData.epgChannelIdNew = angular.copy(assetData._PrivateData.epgChannelIdOld);\n\n }, function (reason) {\n $scope.epg.epgIDSearch = [];\n $rootScope.debugInfo(reason);\n });\n\n assetData._PrivateData.categoriesOld = assetData.categories.map(function (item) {\n return {\n title: item.title,\n id: item.id\n };\n });\n assetData._PrivateData.categoriesNew = angular.copy(assetData._PrivateData.categoriesOld);\n AssetService.GetCategoryCollection()\n .then(function (answer) {\n $scope.categorySearch = answer.map(function (category) {\n return {\n title: category.title,\n id: category.id\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n AssetService.GetProvidersCollection()\n .then(function (answer) {\n $scope.providerSearch = answer.map(function (provider) {\n return {\n title: provider.title,\n id: provider.id\n }\n });\n if (assetData.provider) {\n assetData._PrivateData.providersOld = _.find(answer, {title: assetData.provider.title});\n assetData._PrivateData.providersNew = angular.copy(assetData._PrivateData.providersOld);\n }\n })\n .catch(function (reason) {\n $scope.providerSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n assetData._PrivateData.groupsOld = collection\n .filter(function (group) {\n return _.includes(assetData.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n assetData._PrivateData.groupsNew = angular.copy(assetData._PrivateData.groupsOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n OfferService.GetOffers()\n .then(function (collection) {\n $scope.offerSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.offersOld = collection\n .filter(function (offer) {\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n assetData._PrivateData.offersNew = angular.copy(assetData._PrivateData.offersOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PlanService.GetPlans()\n .then(function (collection) {\n $scope.planSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansOld = collection\n .filter(function (offer) {\n return _.includes(offer.assets, assetData.id);\n })\n .map(function (offer) {\n\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansNew = angular.copy(assetData._PrivateData.plansOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.packageSearch = collection.map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesOld = collection\n .filter(function (pkg) {\n return _.includes(assetData.package_id, pkg.id);\n })\n .map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n assetData._PrivateData.packagesNew = angular.copy(assetData._PrivateData.packagesOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = '';\n assetData._PrivateData.posterNew = '';\n }\n\n var streamsResources = {};\n\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && !resource.category) {\n streamsResources[resource.stream_type] = {};\n streamsResources[resource.stream_type].streamUrl = '';\n streamsResources[resource.stream_type].streamResourceId = null;\n streamsResources[resource.stream_type].title = $scope.getStreamTypeAttrs(resource.stream_type).title;\n streamsResources[resource.stream_type].placeholder = $scope.getStreamTypeAttrs(resource.stream_type).placeholder;\n streamsResources[resource.stream_type].streamOld = '';\n streamsResources[resource.stream_type].streamNew = '';\n streamsResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n streamsResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n streamsResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/');\n streamsResources[resource.stream_type].source = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n } else {\n streamsResources[resource.stream_type].streamOld = resource.source;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].source = resource.original_source || resource.source;\n streamsResources[resource.stream_type].doneWithError = resource.noisypeak_job_is_complete && resource.noisypeak_job_error ? resource.noisypeak_job_error : '';\n streamsResources[resource.stream_type].transcoding = !resource.noisypeak_job_is_complete && !resource.noisypeak_job_error ? resource.noisypeak_job_progress : '';\n\n streamsResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n streamsResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n streamsResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n streamsResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n assetData._PrivateData.streamsResources = streamsResources;\n\n var catchupResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'catchup';\n });\n\n if (catchupResources && catchupResources.length) {\n assetData._PrivateData.catchupOld = {\n isEnabled: assetData.is_catchup_available,\n depth: MetadataService.Catchup.GetValue(catchupResources[0]),\n source: catchupResources[0].source\n };\n\n assetData._PrivateData.catchupNew = angular.copy(assetData._PrivateData.catchupOld);\n } else {\n assetData._PrivateData.catchupOld = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n\n assetData._PrivateData.catchupNew = angular.copy(assetData._PrivateData.catchupOld);\n }\n\n assetData._PrivateData.qualityFormat = assetData.traits[0];\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.Live;\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset.title) + ':' + CryptoJS.MD5(newAsset.title).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n if (newAsset._PrivateData.epgChannelIdNew) newAsset.epg_channel_id = newAsset._PrivateData.epgChannelIdNew ? newAsset._PrivateData.epgChannelIdNew.id : undefined;\n if (newAsset._PrivateData.providersNew) newAsset.provider = newAsset._PrivateData.providersNew.id;\n\n AssetService.CreateNewLive(ext_id, newAsset)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n newAsset.definition = newAsset._PrivateData.qualityFormat || 'SD';\n allQ.commonMetadata = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: newAsset.id, definition: newAsset.definition, provider_id: newAsset.provider});\n\n allQ.adult = AssetService.SetAdult.bind(this, newAsset.id, newAsset._PrivateData.adultContent);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.streamsResources, newAsset.id);\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-channel-logo.png', newAsset.id);\n }\n\n var TvCategory = $scope.categorySearch.filter(function (category) {\n return category.title === 'TV';\n });\n\n if (TvCategory.length) newAsset._PrivateData.categoriesNew = newAsset._PrivateData.categoriesNew.concat(TvCategory);\n\n allQ.tags = AssetService.tagsSet.bind(this, newAsset._PrivateData.tagsNew, newAsset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, [], newAsset._PrivateData.genresNew, newAsset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, [], newAsset._PrivateData.categoriesNew, newAsset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, [], newAsset._PrivateData.platformsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n if (!_.isEqual(newAsset._PrivateData.catchupNew, newAsset._PrivateData.catchupOld)) {\n\n if (!newAsset._PrivateData.catchupNew.isEnabled) {\n allQ.catchup = AssetService.CatchupDisable.bind(this, newAsset);\n } else {\n allQ.catchup = AssetService.CatchupEnable.bind(this, newAsset, newAsset._PrivateData.catchupNew.source, newAsset._PrivateData.catchupNew.depth);\n }\n }\n\n var groupToRemove = _.difference(_.map(newAsset._PrivateData.groupsOld, 'id'), _.map(newAsset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(newAsset._PrivateData.groupsNew, 'id'), _.map(newAsset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [response.asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [response.asset.id]);\n\n var concatOffersOld = _.concat([],newAsset._PrivateData.offersOld, newAsset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],newAsset._PrivateData.offersNew, newAsset._PrivateData.plansNew);\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [response.asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [response.asset.id]);\n\n var packageToRemove = _.difference(_.map(newAsset._PrivateData.packagesOld, 'id'), _.map(newAsset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(newAsset._PrivateData.packagesNew, 'id'), _.map(newAsset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [response.asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [response.asset.id]);\n\n $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'});\n\n return true;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during creation',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $scope.$parent.loading = false;\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n\n if (reason.message === 'item with this ext_id already exist') {\n ToastService.Small({\n title: 'TV Channel with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n } else {\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n }\n return false;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n if (asset._PrivateData.epgChannelIdNew) asset.epg_channel_id = asset._PrivateData.epgChannelIdNew ? asset._PrivateData.epgChannelIdNew.id : undefined;\n if (asset._PrivateData.catchupNew.isEnabled) asset.is_catchup_available = asset._PrivateData.catchupNew.isEnabled;\n\n if (asset._PrivateData.providersNew) {\n asset.provider = asset._PrivateData.providersNew.id;\n } else {\n asset.provider = 0;\n }\n\n allQ.adult = AssetService.SetAdult.bind(this, asset.id, asset._PrivateData.adultContent);\n\n asset.definition = asset._PrivateData.qualityFormat || 'SD';\n allQ.metadata = AssetService.UpdateLiveMetadata.bind(this, asset);\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: asset.id, definition: asset.definition, provider_id: asset.provider});\n\n allQ.tags = AssetService.tagsSet.bind(this, asset._PrivateData.tagsNew, asset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, asset._PrivateData.genresOld, asset._PrivateData.genresNew, asset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, asset._PrivateData.categoriesOld, asset._PrivateData.categoriesNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.streamsResources, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n if (!_.isEqual(asset._PrivateData.catchupNew, asset._PrivateData.catchupOld)) {\n if (!asset._PrivateData.catchupNew.isEnabled) {\n allQ.catchup = AssetService.CatchupDisable.bind(this, asset);\n } else {\n allQ.catchup = AssetService.CatchupEnable.bind(this, asset, asset._PrivateData.catchupNew.source, asset._PrivateData.catchupNew.depth);\n }\n }\n\n var groupToRemove = _.difference(_.map(asset._PrivateData.groupsOld, 'id'), _.map(asset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(asset._PrivateData.groupsNew, 'id'), _.map(asset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [asset.id]);\n\n var concatOffersOld = _.concat([],asset._PrivateData.offersOld, asset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],asset._PrivateData.offersNew, asset._PrivateData.plansNew);\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [asset.id]);\n\n var packageToRemove = _.difference(_.map(asset._PrivateData.packagesOld, 'id'), _.map(asset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(asset._PrivateData.packagesNew, 'id'), _.map(asset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [asset.id]);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: asset.id\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' update failed',\n color: 'orange',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'orange',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n };\n\n /**\n * Define Function on Select EDG id\n * @param data\n * @constructor\n */\n $scope.EpgSelectedChange = function (data) {\n if (!data.selected.length) {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n } else {\n $scope.assetData.title = ($scope.assetData.title) ? $scope.assetData.title : data.selected[0].title;\n $scope.assetData.is_epg_available = true;\n }\n };\n\n var streamWatch = $scope.$watch('assetData._PrivateData.streamNew', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n }\n });\n\n var epgIdWatch = $scope.$watch('assetData._PrivateData.epgChannelIdNew', function (newValue, oldValue) {\n if (!_.isEqual(newValue, oldValue)) {\n if (!_.isEmpty(newValue)) {\n $timeout(function () {\n //TODO: fix html\n $scope.assetData.title = ($scope.assetData.title) ? $scope.assetData.title : newValue.smallTitle;\n $scope.assetData.is_epg_available = true;\n });\n } else {\n $scope.assetData.is_epg_available = false;\n }\n }\n });\n\n var epgWatch = $scope.$watch('assetData.is_epg_available', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n if (!newValue) $timeout(function () {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n $scope.assetData._PrivateData.epgChannelIdNew = {}\n });\n }\n });\n\n /**\n * Open window with catchup options\n * @param asset\n */\n $scope.setCatchupOptions = function (asset) {\n if (!(asset._PrivateData.streamsResources['hls_live'].streamNew || asset._PrivateData.streamsResources['hls_live'].source)) return;\n\n MetadataService.Catchup.ChangeValue(asset, $scope);\n };\n\n $scope.checkLcn = function (asset) {\n if ($scope.IntLcn) $timeout.cancel($scope.IntLcn);\n\n $scope.IntLcn = $timeout(function () {\n\n AssetService.getChannelByLcn(asset.er_lcn)\n .then(function (collection) {\n asset._PrivateData.validateWarning = {};\n if (collection.length && !_.find(collection, {id: asset.id})) {\n asset._PrivateData.validateWarning.lcn = true;\n asset._PrivateData.validateWarning.lcnText = 'Already exist';\n }\n })\n }, 150);\n };\n\n $scope.$on('$destroy', function () {\n epgWatch();\n epgIdWatch();\n streamWatch();\n });\n\n /**\n * Fetch data from IMDB\n * @param stream\n */\n $scope.fetchFromYoutube = function (stream) {\n return YoutubeService.FetchFromYoutube($scope, stream || {}, 'channel');\n };\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","/**\n * Modal window directive for Edit TV Series\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:21\n */\n\nlmApp.directive('lmEditSeries', [function () {\n return {\n restrict: 'E',\n controller: 'LmEditSeriesController',\n replace: true,\n templateUrl: 'lm-asset-edit/tv-series/edit-tv-series.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmEditSeriesController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'PackageService', 'AssetResource', 'GenreResource', 'CategoryResource', 'CountryResource', 'ProviderResource', 'StudioResource', 'PersonResource', 'SubscriptionPlanResource', 'ValidatorService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, PackageService, AssetResource, GenreResource, CategoryResource, CountryResource, ProviderResource, StudioResource, PersonResource, SubscriptionPlanResource, ValidatorService) {\n $scope.series = {\n id: 0,\n extid: '',\n type: 'series',\n name: '',\n description: '',\n rotationStart: moment.utc().subtract(1, 'day'),\n rotationFinish: moment.utc().add(1, 'year'),\n year: '',\n imdb: '',\n imdbVoteCount: '',\n kinopoisk: '',\n kinopoiskVoteCount: '',\n country: {},\n provider: {},\n studio: {},\n adult: false,\n ageLimit: '',\n categories: [],\n genres: [],\n person: {},\n persons: [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n landscapePoster: {\n state: '',\n url: '',\n source: '',\n },\n streamResources: [],\n packages: [],\n free: false,\n billingType: 'packages', // packages, free, plans\n plans: [],\n mpaa: '',\n };\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n $scope.showPersonForm = false;\n\n $scope.genres = [];\n $scope.categories = [];\n $scope.countries = [];\n $scope.providers = [];\n $scope.studios = [];\n $scope.packages = [];\n $scope.plans = [];\n\n $scope.persons = [];\n $scope.roles = [\n {\n title: 'Actor',\n id: 'actor'\n },\n {\n title: 'Composer',\n id: 'composer'\n },\n {\n title: 'Director',\n id: 'director'\n },\n {\n title: 'Operator',\n id: 'operator'\n },\n {\n title: 'Producer',\n id: 'producer'\n },\n {\n title: 'Presenter',\n id: 'presenter'\n },\n {\n title: 'Scenario',\n id: 'scenario'\n },\n {\n title: 'Editor',\n id: 'editor'\n },\n {\n title: 'Writer',\n id: 'writer'\n },\n {\n title: 'Guest',\n id: 'guest'\n },\n {\n title: 'Assembly',\n id: 'assembly'\n },\n {\n title: 'Artist',\n id: 'artist'\n },\n {\n title: 'Music Director',\n id: 'music_director'\n },\n {\n title: 'Playback Singers',\n id: 'playback_singers'\n }\n ];\n\n\n var saved = {};\n var savedPlans = {};\n\n if ($scope.asset.id && $scope.asset.id > 0) {\n $scope.series.id = $scope.asset.id;\n $scope.series.free = $scope.asset.free || false;\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var params = {};\n params['id[eq]'] = $scope.asset.id;\n params['$expand'] = 'resources(url),categories,genres,packages,provider,persons,country,studio';\n AssetResource.get(params).$promise\n .then(function (result) {\n if (result.length) {\n processAsset(result[0]);\n saved = angular.copy(result[0]);\n } else {\n ToastService.Small({\n title: 'Error getting series',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n }\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error getting series',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $scope.close();\n });\n }\n\n var processProvider = function(provider) {\n if (!provider) return {};\n return {\n id: provider.id,\n title: provider.name\n }\n };\n\n var processStudio = function(studio) {\n if (!studio) return {};\n return {\n id: studio.id,\n title: studio.name\n };\n };\n\n var processCountry = function(country) {\n if (!country) return {};\n return {\n id: country.id,\n title: country.name\n };\n };\n\n var processCategory = function(category) {\n return {\n id: category.id,\n title: category.name\n };\n };\n\n var processGenre = function(genre) {\n return {\n id: genre.id,\n title: genre.name\n };\n };\n\n var processPackage = function(pack) {\n return {\n id: pack.id,\n title: pack.name\n };\n };\n\n var processPerson = function(person) {\n return {\n id: person.id,\n firstName: person.first_name,\n lastName: person.last_name,\n role: person.role\n }\n };\n\n var processAsset = function(asset) {\n $scope.series.extid = asset.ext_id;\n $scope.series.name = asset.name;\n $scope.series.description = asset.description;\n $scope.series.rotationStart = moment(asset.rotation_start);\n $scope.series.rotationFinish = moment(asset.rotation_finish);\n $scope.series.year = asset.year;\n $scope.series.imdb = asset.imdb || '';\n $scope.series.imdbVoteCount = asset.imdb_vote_count || '';\n $scope.series.kinopoisk = asset.kinopoisk || '';\n $scope.series.kinopoiskVoteCount = asset.kinopoisk_vote_count || '';\n $scope.series.country = processCountry(asset.country);\n $scope.series.provider = processProvider(asset.provider);\n $scope.series.studio = processStudio(asset.studio);\n $scope.series.adult = asset.adult || false;\n $scope.series.ageLimit = asset.age_limit || '';\n var categories = asset.categories || [];\n $scope.series.categories = categories.map(processCategory);\n var genres = asset.genres || [];\n $scope.series.genres = genres.map(processGenre);\n var persons = asset.persons || [];\n $scope.series.persons = persons.map(processPerson);\n var packages = asset.packages || [];\n $scope.series.packages = packages.map(processPackage);\n $scope.series.mpaa = asset.mpaa || '';\n\n if (asset.resources) {\n // find poster\n var posters = asset.resources.filter(function (resource) {\n return resource.type === 'picture';\n });\n for (var i = 0; i < posters.length; i++) {\n var poster = posters[i];\n if (poster.category === 'poster_blueprint') {\n $scope.series.poster.state = poster.state;\n $scope.series.poster.url = poster.url;\n $scope.series.poster.source = poster.source;\n continue\n }\n if (poster.category === 'landscape') {\n $scope.series.landscapePoster.state = poster.state;\n $scope.series.landscapePoster.url = poster.url;\n $scope.series.landscapePoster.source = poster.source;\n }\n }\n // all streams\n var streams = asset.resources.filter(function (resource) {\n return resource.group_id === 'stream';\n });\n for (var i = 0; i < streams.length; i += 1) {\n var stream = streams[i];\n $scope.series.streamResources.push({\n type: stream.type,\n category: stream.category,\n state: stream.state,\n deployer: stream.deployer,\n group: stream.group_id,\n URL: stream.source,\n preparer: stream.preparer,\n private: stream.private || false,\n deployerArgs: stream.deployer_args\n })\n }\n }\n if (asset.free) {\n $scope.series.free = true;\n $scope.series.billingType = 'free';\n }\n };\n\n var getMeta = function() {\n GenreResource.get().$promise\n .then(function (genres) {\n var genreList = [];\n for (var i = 0; i < genres.length; i++) {\n var genre = genres[i];\n genreList.push({\n id: genre.id,\n title: genre.name\n });\n }\n $scope.genres = genreList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CategoryResource.get().$promise\n .then(function (categories) {\n var categoryList = [];\n for (var i = 0; i < categories.length; i++) {\n var category = categories[i];\n var processed = {\n id: category.id,\n title: category.name\n };\n categoryList.push(processed);\n if ($scope.series.id === 0 && category.ext_id === 'series') {\n $scope.series.categories.push(processed);\n }\n }\n $scope.categories = categoryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n CountryResource.get().$promise\n .then(function (countries) {\n var countryList = [];\n for (var i = 0; i < countries.length; i++) {\n var country = countries[i];\n countryList.push({\n id: country.id,\n title: country.name\n });\n }\n $scope.countries = countryList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n ProviderResource.get().$promise\n .then(function (providers) {\n var providerList = [];\n for (var i = 0; i < providers.length; i++) {\n var provider = providers[i];\n providerList.push({\n id: provider.id,\n title: provider.name\n });\n }\n $scope.providers = providerList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n StudioResource.get().$promise\n .then(function (studios) {\n var studioList = [];\n for (var i = 0; i < studios.length; i++) {\n var studio = studios[i];\n studioList.push({\n id: studio.id,\n title: studio.name\n });\n }\n $scope.studios = studioList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n AssetResource.get({'type[in]': 'package'}).$promise\n .then(function (packages) {\n var packageList = [];\n for (var i = 0; i < packages.length; i++) {\n var p = packages[i];\n packageList.push({\n id: p.id,\n title: p.name\n });\n }\n $scope.packages = packageList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n SubscriptionPlanResource.get({'$expand': 'assets'}).$promise\n .then(function (plans) {\n var planList = [];\n for (var i = 0; i < plans.length; i++) {\n var p = plans[i];\n var assets = p.assets || [];\n var processed = {\n id: p.id,\n title: p.name,\n assets: assets\n };\n planList.push(processed);\n if ($scope.series.id > 0) {\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id === $scope.series.id) {\n $scope.series.plans.push(processed);\n break;\n }\n }\n savedPlans = angular.copy($scope.series.plans);\n }\n }\n\n if ($scope.series.id > 0 && !$scope.series.free && $scope.series.plans.length) {\n $scope.series.billingType = 'plans';\n }\n $scope.plans = planList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n };\n\n getMeta();\n\n var searchTimeout;\n $scope.findPersonLoading = false;\n $scope.findPerson = function(text) {\n if (!text) return;\n text = text.trim();\n if (text === '') return;\n if (searchTimeout) $timeout.cancel(searchTimeout);\n $scope.findPersonLoading = true;\n searchTimeout = $timeout(function () {\n AssetService.SearchPerson(text)\n .then(function (persons) {\n var personList = [];\n for (var i = 0; i < persons.length; i++) {\n var person = persons[i];\n personList.push({\n id: person.id,\n title: person.first_name + ' ' + person.second_name + ' (' + person.role + ')',\n firstName: person.first_name,\n lastName: person.second_name,\n role: person.role\n });\n }\n $scope.persons = personList;\n $scope.findPersonLoading = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }, 650);\n };\n\n $scope.addPersonToList = function(person) {\n $scope.series.person = {};\n for (var i = 0; i < $scope.series.persons.length; i++) {\n if ($scope.series.persons[i].id === person.id) return;\n }\n $scope.series.persons.push(person);\n };\n\n $scope.openMediaManager = function (type) {\n if ($scope.loading) return;\n MetadataService.MediaManager2($scope.series, $scope, type);\n };\n\n $scope.deletePerson = function(person) {\n for (var i = 0; i < $scope.series.persons.length; i++) {\n if (person.id === $scope.series.persons[i].id) {\n $scope.series.persons.splice(i, 1);\n return;\n }\n }\n };\n\n $scope.deleteStream = function($index) {\n $scope.series.streamResources.splice($index, 1);\n };\n\n $scope.togglePersonForm = function() {\n $scope.showPersonForm = !$scope.showPersonForm;\n };\n\n $scope.createPerson = function() {\n $scope.personValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.newPerson.firstName)) {\n $scope.personValidateErrors.firstName = true;\n valid = false;\n }\n if (!_.trim($scope.newPerson.lastName)) {\n $scope.personValidateErrors.lastName = true;\n valid = false;\n }\n if (!$scope.newPerson.role.id) {\n $scope.personValidateErrors.role = true;\n valid = false;\n }\n if (!valid) return;\n\n PersonResource.create(normPersonToJson($scope.newPerson)).$promise\n .then(function (response) {\n $scope.addPersonToList(jsonPersonToNorm(response.data));\n $scope.togglePersonForm();\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to create person: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var normPersonToJson = function(person) {\n return {\n first_name: person.firstName,\n last_name: person.lastName,\n role: person.role.id\n }\n };\n\n var jsonPersonToNorm = function(person) {\n return {\n id: person.id,\n firstName: person.first_name,\n lastName: person.last_name,\n role: person.role\n }\n };\n\n var normStreamResourceToJson = function (stream) {\n var resource = {\n type: stream.type,\n category: stream.category,\n group_id: stream.group,\n source: stream.URL,\n preparer: stream.preparer,\n private: stream.private,\n deployer: stream.deployer\n };\n if (stream.deployerArgs) {\n resource.deployer_args = stream.deployerArgs;\n }\n return resource\n };\n\n var normSeriesToJson = function(series) {\n var processed = {\n ext_id: 'personal:' + translit(series.name) + (series.year || '') + ':' + CryptoJS.MD5(series.name + (series.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid(),\n type: 'series',\n name: _.trim(series.name),\n description: _.trim(series.description),\n year: parseInt(series.year),\n categories: series.categories,\n genres: series.genres,\n persons: series.persons,\n packages: series.packages,\n adult: series.adult,\n age_limit: parseInt(series.ageLimit || 0),\n imdb: parseFloat(series.imdb || 0),\n imdb_vote_count: parseInt(series.imdbVoteCount || 0),\n kinopoisk: parseFloat(series.kinopoisk || 0),\n kinopoisk_vote_count: parseInt(series.kinopoiskVoteCount || 0),\n rotation_start: series.rotationStart.format(),\n rotation_finish: series.rotationFinish.format(),\n resources: [],\n free: false,\n plans: [],\n mpaa: series.mpaa,\n };\n if (!processed.year) {\n processed.year = 0;\n }\n if (series.provider.id) {\n processed.provider = series.provider;\n }\n if (series.studio.id) {\n processed.studio = series.studio;\n }\n if (series.country.id) {\n processed.country = series.country;\n }\n\n if (series.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: series.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n if (series.landscapePoster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'landscape',\n group_id: 'picture',\n source: series.landscapePoster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n for (var i = 0; i < series.streamResources.length; i++) {\n processed.resources.push(normStreamResourceToJson(series.streamResources[i]));\n }\n if (series.billingType === 'free') {\n processed.free = true;\n processed.plans = [];\n }\n if (series.billingType === 'plans') {\n processed.plans = series.plans;\n }\n return processed;\n };\n\n var isAssetValid = function() {\n $scope.seriesValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.series.name)) {\n $scope.seriesValidateErrors.name = true;\n valid = false;\n }\n if ($scope.series.year && (!ValidatorService.Numerical($scope.series.year) || $scope.series.year < 1900)) {\n $scope.seriesValidateErrors.year = true;\n valid = false;\n }\n if ($scope.series.ageLimit && (!ValidatorService.Numerical($scope.series.ageLimit) || $scope.series.ageLimit < 0 || $scope.series.ageLimit > 18)) {\n $scope.seriesValidateErrors.ageLimit = true;\n valid = false;\n }\n if ($scope.series.imdb && (!ValidatorService.Numerical($scope.series.imdb) || $scope.series.imdb < 0 || $scope.series.imdb > 10)) {\n $scope.seriesValidateErrors.imdb = true;\n valid = false;\n }\n if ($scope.series.imdbVoteCount && (!ValidatorService.Numerical($scope.series.imdbVoteCount) || $scope.series.imdbVoteCount < 0)) {\n $scope.seriesValidateErrors.imdbVoteCount = true;\n valid = false;\n }\n if ($scope.series.kinopoisk && (!ValidatorService.Numerical($scope.series.kinopoisk) || $scope.series.kinopoisk < 0 || $scope.series.kinopoisk > 10)) {\n $scope.seriesValidateErrors.kinopoisk = true;\n valid = false;\n }\n if ($scope.series.kinopoiskVoteCount && (!ValidatorService.Numerical($scope.series.kinopoiskVoteCount) || $scope.series.kinopoiskVoteCount < 0)) {\n $scope.seriesValidateErrors.kinopoiskVoteCount = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.$parent.createFn = function () {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n AssetResource.create(normSeriesToJson($scope.series)).$promise\n .then(function (response) {\n if ($scope.series.plans.length > 0) {\n for (var i = 0; i < $scope.series.plans.length; i++) {\n var assets = $scope.series.plans[i].assets;\n assets.push({id: response.data.id});\n SubscriptionPlanResource.update({id: $scope.series.plans[i].id}, {assets: assets}).$promise\n .then(function (response) {\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'VOD: ' + $scope.series.name + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n $scope.close();\n ToastService.Small({\n title: 'Failed to create asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var compareResources = function(updated) {\n var sourceResourceMap = {};\n if (saved.resources) {\n for (var i = 0; i < saved.resources.length; i++) {\n var r = saved.resources[i];\n var key = r.type + r.category;\n sourceResourceMap[key] = r;\n }\n }\n\n var newResources = [];\n for (var i = 0; i < updated.resources.length; i++) {\n var r = updated.resources[i];\n var key = r.type + r.category;\n if (!sourceResourceMap.hasOwnProperty(key)) {\n newResources.push(r);\n } else {\n if (r.source === sourceResourceMap[key].source\n && r.private === sourceResourceMap[key].private\n && r.deployer === sourceResourceMap[key].deployer\n && sourceResourceMap[key].state !== 'deployment-error') {\n newResources.push(sourceResourceMap[key]);\n } else {\n newResources.push(r);\n }\n }\n }\n return newResources;\n };\n\n var comparePlans = function(updated) {\n var diff = {\n add: {},\n delete: {}\n };\n\n var sourcePlanMap = {};\n for (var i = 0; i < savedPlans.length; i++) {\n sourcePlanMap[savedPlans[i].id] = true;\n }\n\n for (var i = 0; i < updated.plans.length; i++) {\n var key = updated.plans[i].id;\n if (sourcePlanMap.hasOwnProperty(key)) {\n delete sourcePlanMap[key];\n } else {\n diff.add[key] = true;\n }\n }\n for (var key in sourcePlanMap) {\n diff.delete[key] = true;\n }\n return diff;\n };\n\n $scope.$parent.updateFn = function (asset) {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var updated = normSeriesToJson($scope.series);\n updated.resources = compareResources(updated);\n\n AssetResource.update({id: $scope.series.id}, updated).$promise\n .then(function (response) {\n var planDiff = comparePlans(updated);\n\n for (var i = 0; i < $scope.plans.length; i++) {\n var plan = $scope.plans[i];\n var assets = angular.copy(plan.assets);\n if (planDiff.add.hasOwnProperty(plan.id)) {\n assets.push({id: $scope.series.id});\n SubscriptionPlanResource.update({id: plan.id}, {assets: assets}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n if (planDiff.delete.hasOwnProperty(plan.id)) {\n var newList = [];\n for (var j = 0; j < assets.length; j++) {\n if (assets[j].id !== $scope.series.id) {\n newList.push({id: assets[j].id});\n }\n }\n SubscriptionPlanResource.update({id: plan.id}, {assets: newList}).$promise\n .then(function (response) {})\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n\n ToastService.Small({\n title: 'VOD: ' + $scope.series.name + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n ToastService.Small({\n title: 'Failed to update asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'cloud-outline-off'\n }, 30 * 1000);\n $rootScope.debugInfo(reason);\n });\n }\n\n }]);\n","lmApp.directive('lmEditEpisode', [function () {\n return {\n restrict: 'E',\n controller: 'LmEditEpisodeController',\n replace: true,\n templateUrl: 'lm-asset-edit/tv-episode/edit-tv-episode.tpl.html'\n };\n}]);\nlmApp\n .controller('LmEditEpisodeController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'AssetResource', 'GenreResource', 'PersonResource', 'ContentNodeResource', 'ValidatorService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, AssetResource, GenreResource, PersonResource, ContentNodeResource, ValidatorService) {\n $scope.episode = {\n id: 0,\n extid: '',\n type: 'episode',\n rotationStart: moment.utc().subtract(1, 'day'),\n rotationFinish: moment.utc().add(1, 'year'),\n name: '',\n description: '',\n year: '',\n duration: 0,\n imdb: '',\n imdbVoteCount: '',\n kinopoisk: '',\n kinopoiskVoteCount: '',\n adult: false,\n ageLimit: '',\n genres: [],\n person: {},\n persons: [],\n poster: {\n state: '',\n url: '',\n source: ''\n },\n landscapePoster: {\n state: '',\n url: '',\n source: '',\n },\n streamResources: [],\n seriesId: 0,\n seriesName: '',\n season: {\n id: 0\n },\n index: 0,\n mpaa: '',\n vastId: '',\n };\n\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n $scope.showPersonForm = false;\n\n $scope.genres = [];\n $scope.persons = [];\n $scope.seasons = [];\n $scope.roles = [\n {\n title: 'Actor',\n id: 'actor'\n },\n {\n title: 'Composer',\n id: 'composer'\n },\n {\n title: 'Director',\n id: 'director'\n },\n {\n title: 'Operator',\n id: 'operator'\n },\n {\n title: 'Producer',\n id: 'producer'\n },\n {\n title: 'Presenter',\n id: 'presenter'\n },\n {\n title: 'Scenario',\n id: 'scenario'\n },\n {\n title: 'Editor',\n id: 'editor'\n },\n {\n title: 'Writer',\n id: 'writer'\n },\n {\n title: 'Guest',\n id: 'guest'\n },\n {\n title: 'Assembly',\n id: 'assembly'\n },\n {\n title: 'Artist',\n id: 'artist'\n },\n {\n title: 'Music Director',\n id: 'music_director'\n },\n {\n title: 'Playback Singers',\n id: 'playback_singers'\n }\n ];\n\n var saved = {};\n\n $scope.episode.seriesId = $scope.asset.seriesId || 0;\n $scope.episode.seriesName = $scope.asset.seriesName || '';\n\n if ($scope.asset.id && $scope.asset.id > 0) {\n $scope.episode.id = $scope.asset.id;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var params = {};\n params['id[eq]'] = $scope.asset.id;\n params['$expand'] = 'resources(url),genres,persons';\n AssetResource.get(params).$promise\n .then(function (result) {\n if (result.length) {\n processAsset(result[0]);\n saved = angular.copy(result[0]);\n\n AssetService.GetAssetById($scope.asset.id)\n .then(function (assets) {\n if (assets.length) {\n var a = assets[0];\n if (a.tv_series_episode) {\n AssetResource.get({'id[eq]': a.tv_series_episode.series_id, '$expand': 'series_seasons,conditions'}).$promise\n .then(function (series) {\n if (series.length) {\n $scope.episode.seriesId = a.tv_series_episode.series_id;\n $scope.episode.seriesName = series[0].name;\n //$scope.episode.rotationStart = moment(series[0].rotation_start);\n //$scope.episode.rotationFinish = moment(series[0].rotation_finish);\n for (var i = 0; i < series[0].series_seasons.length; i++) {\n var season = series[0].series_seasons[i];\n if (season.id === $scope.episode.season.id) {\n $scope.episode.season = processSeason(season);\n }\n $scope.seasons.push(processSeason(season));\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n\n\n } else {\n ToastService.Small({\n title: 'Error getting episode',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n }\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error getting episode',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $scope.close();\n });\n } else {\n AssetResource.get({'id[eq]': $scope.episode.seriesId, '$expand': 'series_seasons,conditions'}).$promise\n .then(function (series) {\n if (series.length) {\n $scope.episode.seriesName = series[0].name;\n // $scope.episode.rotationStart = moment(series[0].rotation_start);\n // $scope.episode.rotationFinish = moment(series[0].rotation_finish);\n for (var i = 0; i < series[0].series_seasons.length; i++) {\n var season = series[0].series_seasons[i];\n if (season.id === $scope.episode.season.id) {\n $scope.episode.season = processSeason(season);\n }\n $scope.seasons.push(processSeason(season));\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }\n\n var processGenre = function(genre) {\n return {\n id: genre.id,\n title: genre.name\n };\n };\n\n var processSeason = function(season) {\n return {\n id: season.id,\n title: season.name\n };\n };\n\n var processPerson = function(person) {\n return {\n id: person.id,\n firstName: person.first_name,\n lastName: person.last_name,\n role: person.role\n }\n };\n\n var processAsset = function(asset) {\n $scope.episode.extid = asset.ext_id;\n $scope.episode.name = asset.name;\n $scope.episode.description = asset.description;\n $scope.episode.year = asset.year;\n $scope.episode.duration = asset.duration || 0;\n $scope.episode.imdb = asset.imdb || '';\n $scope.episode.imdbVoteCount = asset.imdb_vote_count || '';\n $scope.episode.kinopoisk = asset.kinopoisk || '';\n $scope.episode.kinopoiskVoteCount = asset.kinopoisk_vote_count || '';\n $scope.episode.adult = asset.adult || false;\n $scope.episode.ageLimit = asset.age_limit || '';\n var genres = asset.genres || [];\n $scope.episode.genres = genres.map(processGenre);\n var persons = asset.persons || [];\n $scope.episode.persons = persons.map(processPerson);\n $scope.episode.season.id = asset.episode_season_id;\n $scope.episode.index = asset.episode_index;\n $scope.episode.mpaa = asset.mpaa || '';\n $scope.episode.vastId = asset.vast_id || '';\n\n $scope.episode.rotationStart = moment(asset.rotation_start);\n $scope.episode.rotationFinish = moment(asset.rotation_finish);\n\n if (asset.resources) {\n for (var i = 0; i < asset.resources.length; i++) {\n var r = asset.resources[i]\n if (r.type === 'picture') {\n if (r.category === 'poster_blueprint') {\n $scope.episode.poster.state = r.state;\n $scope.episode.poster.url = r.url;\n $scope.episode.poster.source = r.source;\n }\n if (r.category === 'landscape') {\n $scope.episode.landscapePoster.state = r.state;\n $scope.episode.landscapePoster.url = r.url;\n $scope.episode.landscapePoster.source = r.source;\n }\n continue\n }\n var pr = {\n id: r.id,\n type: r.type,\n state: r.state,\n deployer: r.deployer,\n preparer: r.preparer,\n added: r.create_time,\n private: r.private || false,\n URL: r.source,\n category: r.category,\n tags: '',\n group: r.group_id,\n deployerArgs: r.deployer_args,\n }\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n pr.tags = r.deployer_args.cdn_tag;\n }\n $scope.episode.streamResources.push(pr)\n }\n }\n };\n\n var getMeta = function() {\n GenreResource.get().$promise\n .then(function (genres) {\n var genreList = [];\n for (var i = 0; i < genres.length; i++) {\n var genre = genres[i];\n genreList.push({\n id: genre.id,\n title: genre.name\n });\n }\n $scope.genres = genreList;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n\n getMeta();\n\n var searchTimeout;\n $scope.findPersonLoading = false;\n $scope.findPerson = function(text) {\n if (!text) return;\n text = text.trim();\n if (text === '') return;\n if (searchTimeout) $timeout.cancel(searchTimeout);\n $scope.findPersonLoading = true;\n searchTimeout = $timeout(function () {\n AssetService.SearchPerson(text)\n .then(function (persons) {\n var personList = [];\n for (var i = 0; i < persons.length; i++) {\n var person = persons[i];\n personList.push({\n id: person.id,\n title: person.first_name + ' ' + person.second_name + ' (' + person.role + ')',\n firstName: person.first_name,\n lastName: person.second_name,\n role: person.role\n });\n }\n $scope.persons = personList;\n $scope.findPersonLoading = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n });\n }, 650);\n };\n\n $scope.addPersonToList = function(person) {\n $scope.episode.person = {};\n for (var i = 0; i < $scope.episode.persons.length; i++) {\n if ($scope.episode.persons[i].id === person.id) return;\n }\n $scope.episode.persons.push(person);\n };\n\n $scope.cdnTags = [];\n $scope.getCDNTags = function () {\n return ContentNodeResource.get().$promise\n .then(function (origins) {\n for (var i = 0; i < origins.length; i++) {\n var origin = origins[i];\n if (!origin.cdn) {\n continue\n }\n for (var j = 0; j < origin.cdn.length; j += 1) {\n if (!origin.cdn[j].tag) continue;\n $scope.cdnTags.push(origin.cdn[j].tag)\n }\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n };\n $scope.getCDNTags();\n\n $scope.openMediaManager = function (type, resource) {\n if ($scope.loading) return;\n MetadataService.MediaManager2($scope.episode, $scope, type, resource, $scope.cdnTags);\n };\n\n $scope.deletePerson = function(person) {\n for (var i = 0; i < $scope.episode.persons.length; i++) {\n if (person.id === $scope.episode.persons[i].id) {\n $scope.episode.persons.splice(i, 1);\n return;\n }\n }\n };\n\n $scope.deleteStream = function($index) {\n $scope.episode.streamResources.splice($index, 1);\n };\n\n $scope.togglePersonForm = function() {\n $scope.showPersonForm = !$scope.showPersonForm;\n };\n\n $scope.createPerson = function() {\n $scope.personValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.newPerson.firstName)) {\n $scope.personValidateErrors.firstName = true;\n valid = false;\n }\n if (!_.trim($scope.newPerson.lastName)) {\n $scope.personValidateErrors.lastName = true;\n valid = false;\n }\n if (!$scope.newPerson.role.id) {\n $scope.personValidateErrors.role = true;\n valid = false;\n }\n if (!valid) return;\n\n PersonResource.create(normPersonToJson($scope.newPerson)).$promise\n .then(function (response) {\n $scope.addPersonToList(processPerson(response.data));\n $scope.togglePersonForm();\n $scope.newPerson = {\n firstName: '',\n lastName: '',\n role: ''\n };\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Failed to create person: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var normPersonToJson = function(person) {\n return {\n first_name: person.firstName,\n last_name: person.lastName,\n role: person.role.id\n }\n };\n\n var normStreamResourceToJson = function (stream) {\n var resource = {\n type: stream.type, // dash, hls, youtube+video, megogo\n category: stream.category,\n group_id: stream.group,\n source: stream.URL,\n preparer: stream.preparer,\n private: stream.private,\n deployer: stream.deployer\n };\n if (stream.deployerArgs) {\n resource.deployer_args = stream.deployerArgs;\n }\n if (stream.tags) {\n if (!resource.deployer_args) resource.deployer_args = {}\n resource.deployer_args.cdn_tag = stream.tags\n }\n return resource\n };\n\n var normEpisodeToJson = function(episode) {\n var processed = {\n ext_id: 'personal:' + translit(episode.name) + (episode.year || '') + ':' + CryptoJS.MD5(episode.name + (episode.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid(),\n type: 'episode',\n name: _.trim(episode.name),\n description: _.trim(episode.description),\n year: parseInt(episode.year),\n duration: parseInt(episode.duration),\n genres: episode.genres,\n persons: episode.persons,\n adult: episode.adult,\n age_limit: parseInt(episode.ageLimit || 0),\n imdb: parseFloat(episode.imdb || 0),\n imdb_vote_count: parseInt(episode.imdbVoteCount || 0),\n kinopoisk: parseFloat(episode.kinopoisk || 0),\n kinopoisk_vote_count: parseInt(episode.kinopoiskVoteCount || 0),\n resources: [],\n episode_season_id: episode.season.id,\n episode_index: parseInt(episode.index),\n rotation_start: episode.rotationStart.format(),\n rotation_finish: episode.rotationFinish.format(),\n mpaa: episode.mpaa,\n vast_id: episode.vastId,\n };\n if (!processed.year) {\n processed.year = 0;\n }\n if (episode.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: episode.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n if (episode.landscapePoster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'landscape',\n group_id: 'picture',\n source: episode.landscapePoster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n for (var i = 0; i < episode.streamResources.length; i++) {\n processed.resources.push(normStreamResourceToJson(episode.streamResources[i]));\n }\n return processed;\n };\n\n var isAssetValid = function() {\n $scope.episodeValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.episode.name)) {\n $scope.episodeValidateErrors.name = true;\n valid = false;\n }\n if ($scope.episode.season.id === 0) {\n $scope.episodeValidateErrors.seasonId = true;\n valid = false;\n }\n if ($scope.episode.year && (!ValidatorService.Numerical($scope.episode.year) || $scope.episode.year < 1900)) {\n $scope.episodeValidateErrors.year = true;\n valid = false;\n }\n if ($scope.episode.ageLimit && (!ValidatorService.Numerical($scope.episode.ageLimit) || $scope.episode.ageLimit < 0 || $scope.episode.ageLimit > 18)) {\n $scope.episodeValidateErrors.ageLimit = true;\n valid = false;\n }\n if ($scope.episode.imdb && (!ValidatorService.Numerical($scope.episode.imdb) || $scope.episode.imdb < 0 || $scope.episode.imdb > 10)) {\n $scope.episodeValidateErrors.imdb = true;\n valid = false;\n }\n if ($scope.episode.imdbVoteCount && (!ValidatorService.Numerical($scope.episode.imdbVoteCount) || $scope.episode.imdbVoteCount < 0)) {\n $scope.episodeValidateErrors.imdbVoteCount = true;\n valid = false;\n }\n if ($scope.episode.kinopoisk && (!ValidatorService.Numerical($scope.episode.kinopoisk) || $scope.episode.kinopoisk < 0 || $scope.episode.kinopoisk > 10)) {\n $scope.episodeValidateErrors.kinopoisk = true;\n valid = false;\n }\n if ($scope.episode.kinopoiskVoteCount && (!ValidatorService.Numerical($scope.episode.kinopoiskVoteCount) || $scope.episode.kinopoiskVoteCount < 0)) {\n $scope.episodeValidateErrors.kinopoiskVoteCount = true;\n valid = false;\n }\n if (!ValidatorService.Numerical($scope.episode.index) || $scope.episode.index <= 0) {\n $scope.episodeValidateErrors.index = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.$parent.createFn = function () {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n AssetResource.createEpisode({id: $scope.episode.season.id}, normEpisodeToJson($scope.episode)).$promise\n .then(function (response) {\n ToastService.Small({\n title: 'VOD: ' + $scope.episode.name + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n $scope.close();\n ToastService.Small({\n title: 'Failed to create asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var compareResources = function(updated) {\n var sourceResourceMap = {};\n if (saved.resources) {\n for (var i = 0; i < saved.resources.length; i++) {\n var r = saved.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n if (!r.private) r.private = false;\n var key = (r.type + r.category + r.private + tags).toLowerCase();\n sourceResourceMap[key] = r;\n }\n }\n\n var newResources = [];\n for (var i = 0; i < updated.resources.length; i++) {\n var r = updated.resources[i];\n var tags = ''\n if (r.deployer_args && r.deployer_args.cdn_tag) {\n tags = r.deployer_args.cdn_tag;\n }\n if (!r.private) r.private = false;\n var key = (r.type + r.category + r.private + tags).toLowerCase();\n if (!sourceResourceMap.hasOwnProperty(key)) {\n newResources.push(r);\n } else {\n if (r.source === sourceResourceMap[key].source\n && r.private === sourceResourceMap[key].private\n && r.deployer === sourceResourceMap[key].deployer\n && sourceResourceMap[key].state !== 'deployment-error') {\n newResources.push(sourceResourceMap[key]);\n } else {\n newResources.push(r);\n }\n }\n }\n return newResources;\n };\n\n $scope.$parent.updateFn = function (asset) {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var updated = normEpisodeToJson($scope.episode);\n updated.resources = compareResources(updated);\n\n AssetResource.update({id: $scope.episode.id}, updated).$promise\n .then(function (response) {\n ToastService.Small({\n title: 'VOD: ' + $scope.episode.name + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(response.data.id);\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n ToastService.Small({\n title: 'Failed to update asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'cloud-outline-off'\n }, 30 * 1000);\n $rootScope.debugInfo(reason);\n });\n }\n\n }]);\n","lmApp.directive('lmEditSeason', [function () {\n return {\n restrict: 'E',\n controller: 'LmEditSeasonController',\n replace: true,\n templateUrl: 'lm-asset-edit/season/edit-season.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmEditSeasonController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'AssetResource', 'ValidatorService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, AssetResource, ValidatorService) {\n $scope.season = {\n id: 0,\n extid: '',\n type: 'season',\n name: '',\n description: '',\n poster: {\n state: '',\n url: '',\n source: ''\n },\n seriesId: 0,\n index: 0\n };\n\n var saved = {};\n\n $scope.season.seriesId = $scope.asset.seriesId;\n if ($scope.asset.id && $scope.asset.id > 0) {\n $scope.season.id = $scope.asset.id;\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var params = {};\n params['id[eq]'] = $scope.asset.id;\n params['$expand'] = 'resources(url)';\n AssetResource.get(params).$promise\n .then(function (result) {\n if (result.length) {\n processAsset(result[0]);\n saved = angular.copy(result[0]);\n } else {\n ToastService.Small({\n title: 'Error getting season',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n }\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Error getting season',\n color: 'red',\n icon: 'cloud-check'\n }, 1000 * 6);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $scope.close();\n });\n }\n\n var processAsset = function(asset) {\n $scope.season.extid = asset.ext_id;\n $scope.season.name = asset.name;\n $scope.season.description = asset.description;\n $scope.season.index = asset.season_index;\n if (asset.resources) {\n // find poster\n var posters = asset.resources.filter(function (resource) {\n return resource.type === 'picture';\n });\n if (posters.length > 0) {\n $scope.season.poster.state = posters[0].state;\n $scope.season.poster.url = posters[0].url;\n $scope.season.poster.source = posters[0].source;\n }\n }\n };\n\n var normSeasonToJson = function(season) {\n var processed = {\n ext_id: 'personal:' + translit(season.name) + (season.index || '') + ':' + CryptoJS.MD5(season.name + (season.index || '')).toString(CryptoJS.enc.Hex) + ':' + guid(),\n type: 'season',\n name: _.trim(season.name),\n description: _.trim(season.description),\n season_index: parseInt(season.index),\n resources: []\n };\n if (season.poster.source) {\n processed.resources.push({\n type: 'picture',\n category: 'poster_blueprint',\n group_id: 'picture',\n source: season.poster.source,\n preparer: 'passthrough',\n deployer: 'origin'\n });\n }\n return processed;\n };\n\n var isAssetValid = function() {\n $scope.seasonValidateErrors = {};\n\n var valid = true;\n if (!_.trim($scope.season.name)) {\n $scope.seasonValidateErrors.name = true;\n valid = false;\n }\n if (!ValidatorService.Numerical($scope.season.index) || $scope.season.index < 0) {\n $scope.seasonValidateErrors.index = true;\n valid = false;\n }\n return valid;\n };\n\n $scope.$parent.createFn = function () {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n AssetResource.createSeason({id: $scope.season.seriesId}, normSeasonToJson($scope.season)).$promise\n .then(function (response) {\n ToastService.Small({\n title: 'VOD: ' + $scope.season.name + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(-1);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n $scope.close();\n ToastService.Small({\n title: 'Failed to create asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'delete'\n }, 30 * 1000);\n });\n };\n\n var compareResources = function(updated) {\n var sourceResourceMap = {};\n if (saved.resources) {\n for (var i = 0; i < saved.resources.length; i++) {\n var r = saved.resources[i];\n var key = r.type + r.category;\n sourceResourceMap[key] = r;\n }\n }\n\n var newResources = [];\n for (var i = 0; i < updated.resources.length; i++) {\n var r = updated.resources[i];\n var key = r.type + r.category;\n if (!sourceResourceMap.hasOwnProperty(key)) {\n newResources.push(r);\n } else {\n if (r.source === sourceResourceMap[key].source\n && r.private === sourceResourceMap[key].private\n && r.deployer === sourceResourceMap[key].deployer\n && sourceResourceMap[key].state !== 'deployment-error') {\n newResources.push(sourceResourceMap[key]);\n } else {\n newResources.push(r);\n }\n }\n }\n return newResources;\n };\n\n $scope.$parent.updateFn = function (asset) {\n if (!isAssetValid()) return;\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var updated = normSeasonToJson($scope.season);\n updated.resources = compareResources(updated);\n\n AssetResource.update({id: $scope.season.id}, updated).$promise\n .then(function (response) {\n ToastService.Small({\n title: 'VOD: ' + $scope.season.name + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n $scope.close(-1);\n\n })\n .catch(function (reason) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n ToastService.Small({\n title: 'Failed to update asset: ' + _.get(reason, 'data.error.message', 'server error'),\n color: 'red',\n icon: 'cloud-outline-off'\n }, 30 * 1000);\n $rootScope.debugInfo(reason);\n });\n }\n\n }]);\n","/**\n * Modal window directive for Edit Live\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:23\n */\n\nlmApp.directive('lmLiveEdit', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmTVChannelController',\n templateUrl: 'lm-assets-edit/live/edit-live.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmTVChannelController2', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', '$interval', 'MetadataService', 'AssetService', 'ToastService', 'GroupService', 'OfferService', 'PlanService', 'PackageService', 'YoutubeService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, $interval, MetadataService, AssetService, ToastService, GroupService, OfferService, PlanService, PackageService, YoutubeService) {\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n $scope.getStreamTypeAttrs = MetadataService.getStreamTypeAttrs;\n\n /**\n * Process media in asset.\n * @param asset\n */\n $scope.mediaManager = function (asset) {\n if ($scope.loading) return;\n\n MetadataService.MediaManager(asset, $scope);\n };\n\n $scope.deleteStream = function (stream) {\n stream.toDelete = true;\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.qualityFormats = [\n {\n title: 'HD',\n isSelected: false\n },\n {\n title: 'SD',\n isSelected: false\n }\n ];\n\n assetData._PrivateData.adultContent = assetData.has_adult_content;\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n assetData._PrivateData.tagsOld = assetData.tags ? assetData.tags : [];\n assetData._PrivateData.tagsNew = angular.copy(assetData._PrivateData.tagsOld);\n\n assetData._PrivateData.genresOld = assetData.genres.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n\n assetData._PrivateData.genresNew = angular.copy(assetData._PrivateData.genresOld);\n AssetService.GetGenresCollection()\n .then(function (answer) {\n $scope.genreSearch = answer.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n })\n .catch(function (reason) {\n $scope.genreSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n $scope.epg = {};\n AssetService.GetEpgIDCollection()\n .then(function (answer) {\n answer.forEach(function (epg) {\n\n if (!epg.title) epg.title = epg.extid;\n });\n\n $scope.epg.epgIDSearch = answer.map(function (epg) {\n return {\n title: epg.title + '
    [' + epg.extid + '] ',\n smallTitle: epg.title,\n id: epg.id\n }\n });\n\n assetData._PrivateData.epgChannelIdOld = _.find(answer, {id: assetData.epg_channel_id});\n assetData._PrivateData.epgChannelIdNew = angular.copy(assetData._PrivateData.epgChannelIdOld);\n\n }, function (reason) {\n $scope.epg.epgIDSearch = [];\n $rootScope.debugInfo(reason);\n });\n\n assetData._PrivateData.categoriesOld = assetData.categories.map(function (item) {\n return {\n title: item.title,\n id: item.id\n };\n });\n assetData._PrivateData.categoriesNew = angular.copy(assetData._PrivateData.categoriesOld);\n AssetService.GetCategoryCollection()\n .then(function (answer) {\n $scope.categorySearch = answer.map(function (category) {\n return {\n title: category.title,\n id: category.id\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n AssetService.GetProvidersCollection()\n .then(function (answer) {\n $scope.providerSearch = answer.map(function (provider) {\n return {\n title: provider.title,\n id: provider.id\n }\n });\n if (assetData.provider) {\n assetData._PrivateData.providersOld = _.find(answer, {title: assetData.provider.title});\n assetData._PrivateData.providersNew = angular.copy(assetData._PrivateData.providersOld);\n }\n })\n .catch(function (reason) {\n $scope.providerSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n assetData._PrivateData.groupsOld = collection\n .filter(function (group) {\n return _.includes(assetData.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n assetData._PrivateData.groupsNew = angular.copy(assetData._PrivateData.groupsOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n OfferService.GetOffers()\n .then(function (collection) {\n $scope.offerSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.offersOld = collection\n .filter(function (offer) {\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n assetData._PrivateData.offersNew = angular.copy(assetData._PrivateData.offersOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PlanService.GetPlans()\n .then(function (collection) {\n $scope.planSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansOld = collection\n .filter(function (offer) {\n return _.includes(offer.assets, assetData.id);\n })\n .map(function (offer) {\n\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansNew = angular.copy(assetData._PrivateData.plansOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.packageSearch = collection.map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesOld = collection\n .filter(function (pkg) {\n return _.includes(assetData.package_id, pkg.id);\n })\n .map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n assetData._PrivateData.packagesNew = angular.copy(assetData._PrivateData.packagesOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = '';\n assetData._PrivateData.posterNew = '';\n }\n\n var streamsResources = {};\n\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && !resource.category) {\n streamsResources[resource.stream_type] = {};\n streamsResources[resource.stream_type].streamUrl = '';\n streamsResources[resource.stream_type].streamResourceId = null;\n streamsResources[resource.stream_type].title = $scope.getStreamTypeAttrs(resource.stream_type).title;\n streamsResources[resource.stream_type].placeholder = $scope.getStreamTypeAttrs(resource.stream_type).placeholder;\n streamsResources[resource.stream_type].streamOld = '';\n streamsResources[resource.stream_type].streamNew = '';\n streamsResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n streamsResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n streamsResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/');\n streamsResources[resource.stream_type].source = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n } else {\n streamsResources[resource.stream_type].streamOld = resource.source;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].source = resource.original_source || resource.source;\n streamsResources[resource.stream_type].doneWithError = resource.noisypeak_job_is_complete && resource.noisypeak_job_error ? resource.noisypeak_job_error : '';\n streamsResources[resource.stream_type].transcoding = !resource.noisypeak_job_is_complete && !resource.noisypeak_job_error ? resource.noisypeak_job_progress : '';\n\n streamsResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n streamsResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n streamsResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n streamsResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n assetData._PrivateData.streamsResources = streamsResources;\n\n var catchupResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'catchup';\n });\n\n if (catchupResources && catchupResources.length) {\n assetData._PrivateData.catchupOld = {\n isEnabled: assetData.is_catchup_available,\n depth: MetadataService.Catchup.GetValue(catchupResources[0]),\n source: catchupResources[0].source\n };\n\n assetData._PrivateData.catchupNew = angular.copy(assetData._PrivateData.catchupOld);\n } else {\n assetData._PrivateData.catchupOld = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n\n assetData._PrivateData.catchupNew = angular.copy(assetData._PrivateData.catchupOld);\n }\n\n assetData._PrivateData.qualityFormat = assetData.traits[0];\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.Live;\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset.title) + ':' + CryptoJS.MD5(newAsset.title).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n if (newAsset._PrivateData.epgChannelIdNew) newAsset.epg_channel_id = newAsset._PrivateData.epgChannelIdNew ? newAsset._PrivateData.epgChannelIdNew.id : undefined;\n if (newAsset._PrivateData.providersNew) newAsset.provider = newAsset._PrivateData.providersNew.id;\n\n AssetService.CreateNewLive(ext_id, newAsset)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n newAsset.definition = newAsset._PrivateData.qualityFormat || 'SD';\n allQ.commonMetadata = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: newAsset.id, definition: newAsset.definition, provider_id: newAsset.provider});\n\n allQ.adult = AssetService.SetAdult.bind(this, newAsset.id, newAsset._PrivateData.adultContent);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.streamsResources, newAsset.id);\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-channel-logo.png', newAsset.id);\n }\n\n var TvCategory = $scope.categorySearch.filter(function (category) {\n return category.title === 'TV';\n });\n\n if (TvCategory.length) newAsset._PrivateData.categoriesNew = newAsset._PrivateData.categoriesNew.concat(TvCategory);\n\n allQ.tags = AssetService.tagsSet.bind(this, newAsset._PrivateData.tagsNew, newAsset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, [], newAsset._PrivateData.genresNew, newAsset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, [], newAsset._PrivateData.categoriesNew, newAsset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, [], newAsset._PrivateData.platformsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n if (!_.isEqual(newAsset._PrivateData.catchupNew, newAsset._PrivateData.catchupOld)) {\n\n if (!newAsset._PrivateData.catchupNew.isEnabled) {\n allQ.catchup = AssetService.CatchupDisable.bind(this, newAsset);\n } else {\n allQ.catchup = AssetService.CatchupEnable.bind(this, newAsset, newAsset._PrivateData.catchupNew.source, newAsset._PrivateData.catchupNew.depth);\n }\n }\n\n var groupToRemove = _.difference(_.map(newAsset._PrivateData.groupsOld, 'id'), _.map(newAsset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(newAsset._PrivateData.groupsNew, 'id'), _.map(newAsset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [response.asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [response.asset.id]);\n\n var concatOffersOld = _.concat([],newAsset._PrivateData.offersOld, newAsset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],newAsset._PrivateData.offersNew, newAsset._PrivateData.plansNew);\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [response.asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [response.asset.id]);\n\n var packageToRemove = _.difference(_.map(newAsset._PrivateData.packagesOld, 'id'), _.map(newAsset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(newAsset._PrivateData.packagesNew, 'id'), _.map(newAsset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [response.asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [response.asset.id]);\n\n $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'});\n\n return true;\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during creation',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $scope.$parent.loading = false;\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n\n if (reason.message === 'item with this ext_id already exist') {\n ToastService.Small({\n title: 'TV Channel with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n } else {\n ToastService.Small({\n title: 'TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n }\n return false;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n if (asset._PrivateData.epgChannelIdNew) asset.epg_channel_id = asset._PrivateData.epgChannelIdNew ? asset._PrivateData.epgChannelIdNew.id : undefined;\n if (asset._PrivateData.catchupNew.isEnabled) asset.is_catchup_available = asset._PrivateData.catchupNew.isEnabled;\n\n if (asset._PrivateData.providersNew) {\n asset.provider = asset._PrivateData.providersNew.id;\n } else {\n asset.provider = 0;\n }\n\n allQ.adult = AssetService.SetAdult.bind(this, asset.id, asset._PrivateData.adultContent);\n\n asset.definition = asset._PrivateData.qualityFormat || 'SD';\n allQ.metadata = AssetService.UpdateLiveMetadata.bind(this, asset);\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: asset.id, definition: asset.definition, provider_id: asset.provider});\n\n allQ.tags = AssetService.tagsSet.bind(this, asset._PrivateData.tagsNew, asset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, asset._PrivateData.genresOld, asset._PrivateData.genresNew, asset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, asset._PrivateData.categoriesOld, asset._PrivateData.categoriesNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.streamsResources, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n if (!_.isEqual(asset._PrivateData.catchupNew, asset._PrivateData.catchupOld)) {\n if (!asset._PrivateData.catchupNew.isEnabled) {\n allQ.catchup = AssetService.CatchupDisable.bind(this, asset);\n } else {\n allQ.catchup = AssetService.CatchupEnable.bind(this, asset, asset._PrivateData.catchupNew.source, asset._PrivateData.catchupNew.depth);\n }\n }\n\n var groupToRemove = _.difference(_.map(asset._PrivateData.groupsOld, 'id'), _.map(asset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(asset._PrivateData.groupsNew, 'id'), _.map(asset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [asset.id]);\n\n var concatOffersOld = _.concat([],asset._PrivateData.offersOld, asset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],asset._PrivateData.offersNew, asset._PrivateData.plansNew);\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [asset.id]);\n\n var packageToRemove = _.difference(_.map(asset._PrivateData.packagesOld, 'id'), _.map(asset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(asset._PrivateData.packagesNew, 'id'), _.map(asset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [asset.id]);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: asset.id\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Channel: ' + asset.title + ' update failed',\n color: 'orange',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'orange',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n };\n\n /**\n * Define Function on Select EDG id\n * @param data\n * @constructor\n */\n $scope.EpgSelectedChange = function (data) {\n if (!data.selected.length) {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n } else {\n $scope.assetData.title = ($scope.assetData.title) ? $scope.assetData.title : data.selected[0].title;\n $scope.assetData.is_epg_available = true;\n }\n };\n\n var streamWatch = $scope.$watch('assetData._PrivateData.streamNew', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n }\n });\n\n var epgIdWatch = $scope.$watch('assetData._PrivateData.epgChannelIdNew', function (newValue, oldValue) {\n if (!_.isEqual(newValue, oldValue)) {\n if (!_.isEmpty(newValue)) {\n $timeout(function () {\n //TODO: fix html\n $scope.assetData.title = ($scope.assetData.title) ? $scope.assetData.title : newValue.smallTitle;\n $scope.assetData.is_epg_available = true;\n });\n } else {\n $scope.assetData.is_epg_available = false;\n }\n }\n });\n\n var epgWatch = $scope.$watch('assetData.is_epg_available', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n if (!newValue) $timeout(function () {\n $scope.assetData._PrivateData.catchupNew = {\n isEnabled: false,\n depth: 0,\n source: ''\n };\n $scope.assetData._PrivateData.epgChannelIdNew = {}\n });\n }\n });\n\n /**\n * Open window with catchup options\n * @param asset\n */\n $scope.setCatchupOptions = function (asset) {\n if (!(asset._PrivateData.streamsResources['hls_live'].streamNew || asset._PrivateData.streamsResources['hls_live'].source)) return;\n\n MetadataService.Catchup.ChangeValue(asset, $scope);\n };\n\n $scope.addCatchup = function (asset) {\n if (!(asset._PrivateData.streamsResources['hls_live'].streamNew || asset._PrivateData.streamsResources['hls_live'].source)) return;\n MetadataService.Catchup.ChangeValue(asset, $scope);\n };\n\n $scope.deleteCatchup = function (asset) {\n asset._PrivateData.catchupNew.isEnabled = false;\n };\n\n $scope.checkLcn = function (asset) {\n if ($scope.IntLcn) $timeout.cancel($scope.IntLcn);\n\n $scope.IntLcn = $timeout(function () {\n\n AssetService.getChannelByLcn(asset.er_lcn)\n .then(function (collection) {\n asset._PrivateData.validateWarning = {};\n if (collection.length && !_.find(collection, {id: asset.id})) {\n asset._PrivateData.validateWarning.lcn = true;\n asset._PrivateData.validateWarning.lcnText = 'Already exist';\n }\n })\n }, 150);\n };\n\n $scope.$on('$destroy', function () {\n epgWatch();\n epgIdWatch();\n streamWatch();\n });\n\n /**\n * Fetch data from IMDB\n * @param stream\n */\n $scope.fetchFromYoutube = function (stream) {\n return YoutubeService.FetchFromYoutube($scope, stream || {}, 'channel');\n };\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","/**\n * Modal window directive for Edit VOD\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:21\n */\n\nlmApp\n .directive('lmMovieEdit', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmMovieController',\n templateUrl: 'lm-assets-edit/movie/edit-movie.tpl.html'\n };\n }]);\n\nlmApp\n .controller('LmMovieController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'IMDbService', 'ToastService', 'GroupService', 'OfferService', 'PlanService', 'PackageService', 'YoutubeService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, IMDbService, ToastService, GroupService, OfferService, PlanService, PackageService, YoutubeService) {\n \n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n $scope.getStreamTypeAttrs = MetadataService.getStreamTypeAttrs;\n\n /**\n * Open CAST AND CREW manager for asset\n * @param asset\n */\n $scope.personsManager = function (asset) {\n if ($scope.loading) return;\n MetadataService.Persons.PersonsManager(asset, asset._PrivateData.personsNew, $scope);\n };\n \n /**\n * Process person in asset. Decide Add or Remove it from 'persons'\n * @param asset\n * @param person\n */\n $scope.processPerson = function (asset, person) {\n MetadataService.Persons.Process(asset, person, !person.inCollection);\n };\n\n /**\n * Process media in asset.\n * @param asset\n * @param type\n */\n $scope.mediaManager = function (asset, type) {\n if ($scope.loading) return;\n\n MetadataService.MediaManager(asset, $scope, type);\n };\n\n $scope.deleteStream = function (stream) {\n stream.toDelete = true;\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.$parent.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.qualityFormats = [\n {\n title: 'HD',\n isSelected: false\n },\n {\n title: 'SD',\n isSelected: false\n },\n {\n title: '3D',\n isSelected: false\n }\n ];\n\n assetData._PrivateData.adultContent = assetData.has_adult_content;\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n assetData._PrivateData.tagsOld = assetData.tags ? assetData.tags : [];\n assetData._PrivateData.tagsNew = angular.copy(assetData._PrivateData.tagsOld);\n\n assetData._PrivateData.genresOld = assetData.genres.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n assetData._PrivateData.genresNew = angular.copy(assetData._PrivateData.genresOld);\n AssetService.GetGenresCollection()\n .then(function (answer) {\n $scope.genreSearch = answer.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n })\n .catch(function (reason) {\n $scope.genreSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n assetData._PrivateData.categoriesOld = assetData.categories.map(function (category) {\n return {\n id: category.id,\n title: category.title\n };\n });\n\n assetData._PrivateData.categoriesNew = angular.copy(assetData._PrivateData.categoriesOld);\n AssetService.GetCategoryCollection()\n .then(function (answer) {\n $scope.categorySearch = answer.map(function (category) {\n return {\n title: category.title,\n id: category.id\n }\n });\n })\n .catch(function (reason) {\n $scope.categorySearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n AssetService.GetCountriesCollection()\n .then(function (answer) {\n $scope.countrySearch = answer.map(function (country) {\n return {\n title: country.title,\n id: country.id\n }\n });\n\n assetData._PrivateData.countriesOld = _.find(answer, {id: assetData.country_id});\n\n if (assetData._PrivateData.countriesOld) {\n assetData._PrivateData.countriesOld = {\n id: assetData._PrivateData.countriesOld.id,\n title: assetData._PrivateData.countriesOld.title\n }\n }\n\n assetData._PrivateData.countriesNew = angular.copy(assetData._PrivateData.countriesOld);\n })\n .catch(function (reason) {\n $scope.countrySearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n AssetService.GetStudiosCollection()\n .then(function (answer) {\n $scope.studioSearch = answer.map(function (studio) {\n return {\n title: studio.title,\n id: studio.id\n }\n });\n\n assetData._PrivateData.studiosOld = _.find(answer, {title: assetData.studio});\n\n if (assetData._PrivateData.studiosOld) {\n assetData._PrivateData.studiosOld = {\n id: assetData._PrivateData.studiosOld.id,\n title: assetData._PrivateData.studiosOld.title\n }\n }\n\n assetData._PrivateData.studiosNew = angular.copy(assetData._PrivateData.studiosOld);\n })\n .catch(function (reason) {\n $scope.studioSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n AssetService.GetProvidersCollection()\n .then(function (answer) {\n $scope.providerSearch = answer.map(function (provider) {\n return {\n title: provider.title,\n id: provider.id\n }\n });\n if (assetData.provider) {\n assetData._PrivateData.providersOld = _.find(answer, {title: assetData.provider.title});\n assetData._PrivateData.providersNew = angular.copy(assetData._PrivateData.providersOld);\n }\n })\n .catch(function (reason) {\n $scope.providerSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n assetData._PrivateData.groupsOld = collection\n .filter(function (group) {\n return _.includes(assetData.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n assetData._PrivateData.groupsNew = angular.copy(assetData._PrivateData.groupsOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n assetData.offer_id = assetData.offers.map(function (offer) {\n return offer.id;\n });\n\n OfferService.GetOffers()\n .then(function (collection) {\n $scope.offerSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.offersOld = collection\n .filter(function (offer) {\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n assetData._PrivateData.offersNew = angular.copy(assetData._PrivateData.offersOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PlanService.GetPlans()\n .then(function (collection) {\n $scope.planSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansOld = collection\n .filter(function (offer) {\n\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansNew = angular.copy(assetData._PrivateData.plansOld);\n })\n .catch(function (reason) {\n\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.packageSearch = collection.map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesOld = collection\n .filter(function (pkg) {\n return _.includes(assetData.package_id, pkg.id);\n })\n .map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesNew = angular.copy(assetData._PrivateData.packagesOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'imdb')) assetData.ratings.push({type: 'imdb'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'metascore')) assetData.ratings.push({type: 'metascore'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'mpaa')) assetData.ratings.push({type: 'mpaa'});\n\n assetData._PrivateData.ratingsOld = assetData.ratings.filter(function (rating) {\n return !!MetadataService.Rating._types[rating.type];\n }).map(function (rating) {\n return MetadataService.Rating.GetValue(rating);\n });\n assetData._PrivateData.ratingsNew = angular.copy(assetData._PrivateData.ratingsOld);\n assetData._PrivateData.mpaaRatingValues = MetadataService.Rating.mpaaValues;\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = '';\n assetData._PrivateData.posterNew = '';\n }\n\n var streamsResources = {};\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.category !== 'trailer') {\n streamsResources[resource.stream_type] = {};\n streamsResources[resource.stream_type].streamUrl = '';\n streamsResources[resource.stream_type].streamResourceId = null;\n streamsResources[resource.stream_type].title = $scope.getStreamTypeAttrs(resource.stream_type).title;\n streamsResources[resource.stream_type].placeholder = $scope.getStreamTypeAttrs(resource.stream_type).placeholder;\n streamsResources[resource.stream_type].streamOld = '';\n streamsResources[resource.stream_type].streamNew = '';\n streamsResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n streamsResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n streamsResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/')\n .replace('youtube+video://', 'https://www.youtube.com/watch?v=');\n streamsResources[resource.stream_type].source = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n } else {\n streamsResources[resource.stream_type].streamOld = resource.source;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].source = resource.original_source || resource.source;\n streamsResources[resource.stream_type].doneWithError = (resource.noisypeak_job_is_complete && resource.noisypeak_job_error) ? resource.noisypeak_job_error : '';\n streamsResources[resource.stream_type].transcoding = (!resource.noisypeak_job_is_complete && !resource.noisypeak_job_error && !_.isUndefined(resource.noisypeak_job_progress)) ? resource.noisypeak_job_progress.toString() : '';\n\n streamsResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n streamsResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n streamsResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n streamsResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n var trailersResources = {};\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.category === 'trailer') {\n trailersResources[resource.stream_type] = {};\n trailersResources[resource.stream_type].streamUrl = '';\n trailersResources[resource.stream_type].streamResourceId = null;\n trailersResources[resource.stream_type].title = $scope._STREAM_TYPES_ATTRS[resource.stream_type].title || 'Unknown';\n trailersResources[resource.stream_type].placeholder = $scope._STREAM_TYPES_ATTRS[resource.stream_type].placeholder || 'Unknown format';\n trailersResources[resource.stream_type].streamOld = '';\n trailersResources[resource.stream_type].streamNew = '';\n trailersResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n trailersResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n trailersResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/')\n .replace('youtube+video://', 'https://www.youtube.com/watch?v=');\n trailersResources[resource.stream_type].source = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n } else {\n trailersResources[resource.stream_type].streamOld = resource.source;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].source = resource.original_source || resource.source;\n trailersResources[resource.stream_type].doneWithError = (resource.noisypeak_job_is_complete && resource.noisypeak_job_error) ? resource.noisypeak_job_error : '';\n trailersResources[resource.stream_type].transcoding = (!resource.noisypeak_job_is_complete && !resource.noisypeak_job_error && !_.isUndefined(resource.noisypeak_job_progress)) ? resource.noisypeak_job_progress.toString() : '';\n\n trailersResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n trailersResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n trailersResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n trailersResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n assetData._PrivateData.streamsResources = streamsResources;\n assetData._PrivateData.trailersResources = trailersResources;\n\n assetData._PrivateData.personsOld = assetData.persons;\n if (assetData.persons) {\n assetData._PrivateData.roles = MetadataService.Persons.Prepare(assetData.persons);\n assetData._PrivateData.personsNew = angular.copy(assetData._PrivateData.personsOld);\n }\n\n assetData._PrivateData.rolesSearch = {};\n\n assetData._PrivateData.durationOld = assetData.duration;\n assetData._PrivateData.durationNew = angular.copy(assetData._PrivateData.durationOld);\n\n assetData._PrivateData.qualityFormat = assetData.traits[0];\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.Vod;\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset.title) + (newAsset.year || '') + ':' + CryptoJS.MD5(newAsset.title + (newAsset.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n if (newAsset._PrivateData.countriesNew) newAsset.country_id = newAsset._PrivateData.countriesNew.id;\n if (newAsset._PrivateData.studiosNew) newAsset.studio = newAsset._PrivateData.studiosNew.id;\n if (newAsset._PrivateData.providersNew) newAsset.provider = newAsset._PrivateData.providersNew.id;\n if (newAsset._PrivateData.durationNew) newAsset.duration = newAsset._PrivateData.durationNew;\n\n AssetService.CreateNewVod(ext_id, newAsset)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n newAsset.definition = newAsset._PrivateData.qualityFormat || 'SD';\n\n allQ.adult = AssetService.SetAdult.bind(this, newAsset.id, newAsset._PrivateData.adultContent);\n\n allQ.commonMetadata = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: newAsset.id, definition: newAsset.definition, provider_id: newAsset.provider});\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.streamsResources, newAsset.id, null);\n\n allQ.trailers = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.trailersResources, newAsset.id, 'trailer');\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-poster.png', newAsset.id);\n }\n\n var mpaa = _.find(newAsset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, newAsset._PrivateData.ratingsOld, newAsset._PrivateData.ratingsNew, newAsset.id);\n\n allQ.tags = AssetService.tagsSet.bind(this, newAsset._PrivateData.tagsNew, newAsset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, [], newAsset._PrivateData.genresNew, newAsset.id);\n\n allQ.persons = MetadataService.Persons.Update.bind(this, [], newAsset._PrivateData.personsNew, newAsset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, [], newAsset._PrivateData.categoriesNew, newAsset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, [], newAsset._PrivateData.platformsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n var groupToRemove = _.difference(_.map(newAsset._PrivateData.groupsOld, 'id'), _.map(newAsset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(newAsset._PrivateData.groupsNew, 'id'), _.map(newAsset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [response.asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [response.asset.id]);\n\n var concatOffersOld = _.concat([],newAsset._PrivateData.offersOld, newAsset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],newAsset._PrivateData.offersNew, newAsset._PrivateData.plansNew);\n\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [response.asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [response.asset.id]);\n\n var packageToRemove = _.difference(_.map(newAsset._PrivateData.packagesOld, 'id'), _.map(newAsset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(newAsset._PrivateData.packagesNew, 'id'), _.map(newAsset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [response.asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [response.asset.id]);\n\n $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'VOD: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {id: 'all', timestamp: Date.now()});\n\n return true;\n })\n .catch(function (reason) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n\n ToastService.Small({\n title: 'VOD: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during create',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n if (reason.message === 'item with this ext_id already exist') {\n ToastService.Small({\n title: 'VOD with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n } else {\n ToastService.Small({\n title: 'VOD: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n }\n return reason;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n if (asset._PrivateData.countriesNew) {\n asset.country_id = asset._PrivateData.countriesNew.id;\n } else {\n asset.country_id = null;\n }\n if (asset._PrivateData.studiosNew) {\n asset.studio = asset._PrivateData.studiosNew.id;\n } else {\n asset.studio = null;\n }\n if (asset._PrivateData.providersNew) {\n asset.provider = asset._PrivateData.providersNew.id;\n } else {\n asset.provider = 0;\n }\n\n if (asset._PrivateData.durationNew) asset.duration = asset._PrivateData.durationNew;\n asset.definition = asset._PrivateData.qualityFormat || 'SD';\n\n allQ.metadataVod = AssetService.UpdateVodMetadata.bind(this, asset);\n\n allQ.adult = AssetService.SetAdult.bind(this, asset.id, asset._PrivateData.adultContent);\n\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: asset.id, definition: asset.definition, provider_id: asset.provider});\n\n allQ.tags = AssetService.tagsSet.bind(this, asset._PrivateData.tagsNew, asset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, asset._PrivateData.genresOld, asset._PrivateData.genresNew, asset.id);\n\n allQ.persons = MetadataService.Persons.Update.bind(this, asset._PrivateData.personsOld, asset._PrivateData.personsNew, asset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, asset._PrivateData.categoriesOld, asset._PrivateData.categoriesNew, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.streamsResources, asset.id);\n\n allQ.trailers = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.trailersResources, asset.id, 'trailer');\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n var mpaa = _.find(asset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, asset._PrivateData.ratingsOld, asset._PrivateData.ratingsNew, asset.id);\n\n var groupToRemove = _.difference(_.map(asset._PrivateData.groupsOld, 'id'), _.map(asset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(asset._PrivateData.groupsNew, 'id'), _.map(asset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [asset.id]);\n\n var concatOffersOld = _.concat([],asset._PrivateData.offersOld, asset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],asset._PrivateData.offersNew, asset._PrivateData.plansNew);\n\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [asset.id]);\n\n var packageToRemove = _.difference(_.map(asset._PrivateData.packagesOld, 'id'), _.map(asset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(asset._PrivateData.packagesNew, 'id'), _.map(asset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [asset.id]);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'VOD: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: asset.id\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'VOD: ' + asset.title + ' update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n });\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n };\n\n /**\n * Fetch data from IMDB\n * @param title\n */\n $scope.fetchFromIMDB = function (title) {\n if ($scope.loading) return;\n\n return IMDbService.FetchFromIMDB(title, $scope, 'movie');\n };\n\n\n /**\n * Fetch data from IMDB\n * @param stream\n */\n $scope.fetchFromYoutube = function (stream) {\n return YoutubeService.FetchFromYoutube($scope, stream || {}, 'movie');\n };\n\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","/**\n * Modal window directive for Edit Episode\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:21\n */\n\nlmApp.directive('lmTvEpisodeEdit', [function () {\n return {\n restrict: 'E',\n controller: 'LmEpisodeController',\n replace: true,\n templateUrl: 'lm-assets-edit/tv-episode/edit-tv-episode.tpl.html'\n };\n}]);\nlmApp\n .controller('LmEpisodeController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'ToastService', 'IMDbService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, ToastService, IMDbService) {\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n $scope.getStreamTypeAttrs = MetadataService.getStreamTypeAttrs;\n\n /**\n * Open CAST AND CREW manager for asset\n * @param asset\n */\n $scope.personsManager = function (asset) {\n if ($scope.loading) return;\n MetadataService.Persons.PersonsManager(asset, asset._PrivateData.personsNew, $scope);\n };\n\n /**\n * Set new season number to episode\n * @param asset\n * @param season\n */\n $scope.setSeason = function (asset, season) {\n asset._PrivateData.seasonIndexNew = season.index;\n asset._PrivateData.seasonIdNew = season.id;\n };\n\n /**\n * Process person in asset. Decide Add or Remove it from 'persons'\n * @param asset\n * @param person\n */\n $scope.processPerson = function (asset, person) {\n MetadataService.Persons.Process(asset, person, !person.inCollection);\n };\n\n /**\n * Process media in asset.\n * @param asset\n * @param category\n */\n $scope.mediaManager = function (asset, category) {\n if ($scope.loading) return;\n\n MetadataService.MediaManager(asset, $scope, category);\n };\n\n $scope.deleteStream = function (stream) {\n stream.toDelete = true;\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.$parent.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'imdb')) assetData.ratings.push({type: 'imdb'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'metascore')) assetData.ratings.push({type: 'metascore'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'mpaa')) assetData.ratings.push({type: 'mpaa'});\n\n assetData._PrivateData.ratingsOld = assetData.ratings.filter(function (rating) {\n return !!MetadataService.Rating._types[rating.type];\n }).map(function (rating) {\n return MetadataService.Rating.GetValue(rating);\n });\n assetData._PrivateData.ratingsNew = angular.copy(assetData._PrivateData.ratingsOld);\n assetData._PrivateData.mpaaRatingValues = MetadataService.Rating.mpaaValues;\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = '';\n assetData._PrivateData.posterNew = '';\n }\n\n var streamsResources = {};\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.category !== 'trailer') {\n streamsResources[resource.stream_type] = {};\n streamsResources[resource.stream_type].streamUrl = '';\n streamsResources[resource.stream_type].streamResourceId = null;\n streamsResources[resource.stream_type].title = $scope.getStreamTypeAttrs(resource.stream_type).title;\n streamsResources[resource.stream_type].placeholder = $scope.getStreamTypeAttrs(resource.stream_type).placeholder;\n streamsResources[resource.stream_type].streamOld = '';\n streamsResources[resource.stream_type].streamNew = '';\n streamsResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n streamsResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n streamsResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/')\n .replace('youtube+video://', 'https://www.youtube.com/watch?v=');\n streamsResources[resource.stream_type].source = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n } else {\n streamsResources[resource.stream_type].streamOld = resource.source;\n streamsResources[resource.stream_type].streamNew = streamsResources[resource.stream_type].streamOld;\n streamsResources[resource.stream_type].source = resource.original_source || resource.source;\n streamsResources[resource.stream_type].doneWithError = (resource.noisypeak_job_is_complete && resource.noisypeak_job_error) ? resource.noisypeak_job_error : '';\n streamsResources[resource.stream_type].transcoding = (!resource.noisypeak_job_is_complete && !resource.noisypeak_job_error && !_.isUndefined(resource.noisypeak_job_progress)) ? resource.noisypeak_job_progress.toString() : '';\n\n streamsResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n streamsResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n streamsResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n streamsResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n var trailersResources = {};\n assetData.resources.forEach(function (resource) {\n\n if (resource.type === 'stream' && resource.category === 'trailer') {\n trailersResources[resource.stream_type] = {};\n trailersResources[resource.stream_type].streamUrl = '';\n trailersResources[resource.stream_type].streamResourceId = null;\n trailersResources[resource.stream_type].title = $scope._STREAM_TYPES_ATTRS[resource.stream_type].title || 'Unknown';\n trailersResources[resource.stream_type].placeholder = $scope._STREAM_TYPES_ATTRS[resource.stream_type].placeholder || 'Unknown format';\n trailersResources[resource.stream_type].streamOld = '';\n trailersResources[resource.stream_type].streamNew = '';\n trailersResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n trailersResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n trailersResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/')\n .replace('youtube+video://', 'https://www.youtube.com/watch?v=');\n trailersResources[resource.stream_type].source = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n } else {\n trailersResources[resource.stream_type].streamOld = resource.source;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].source = resource.original_source || resource.source;\n trailersResources[resource.stream_type].doneWithError = (resource.noisypeak_job_is_complete && resource.noisypeak_job_error) ? resource.noisypeak_job_error : '';\n trailersResources[resource.stream_type].transcoding = (!resource.noisypeak_job_is_complete && !resource.noisypeak_job_error && !_.isUndefined(resource.noisypeak_job_progress)) ? resource.noisypeak_job_progress.toString() : '';\n\n trailersResources[resource.stream_type].strategy = 'ORIGIN';\n\n if (resource.delivery_method === 'cdn') {\n trailersResources[resource.stream_type].strategy = 'CDN';\n } else if (resource.url === resource.source) {\n trailersResources[resource.stream_type].strategy = 'DIRECT';\n }\n }\n\n trailersResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n assetData._PrivateData.streamsResources = streamsResources;\n assetData._PrivateData.trailersResources = trailersResources;\n\n assetData._PrivateData.personsOld = assetData.persons;\n if (assetData.persons) {\n assetData._PrivateData.roles = MetadataService.Persons.Prepare(assetData.persons);\n assetData._PrivateData.personsNew = angular.copy(assetData._PrivateData.personsOld);\n }\n\n assetData._PrivateData.rolesSearch = {};\n\n assetData._PrivateData.durationOld = assetData.duration;\n assetData._PrivateData.durationNew = angular.copy(assetData._PrivateData.durationOld);\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n\n assetData._PrivateData.seasonIdOld = assetData.tv_series_episode.season_id;\n assetData._PrivateData.seasonIdNew = assetData._PrivateData.seasonIdOld;\n\n assetData._PrivateData.seasonIndexOld = _.find(assetData._Parent.seasons, {id: assetData.tv_series_episode.season_id}, {}).index;\n assetData._PrivateData.seasonIndexNew = assetData._PrivateData.seasonIndexOld;\n\n assetData._PrivateData.episodeIndexOld = assetData.tv_series_episode.index;\n assetData._PrivateData.episodeIndexNew = assetData._PrivateData.episodeIndexOld;\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n * @type {*}\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.TVEpisode;\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset._Parent.title) + '|' + translit(newAsset.title) + ':' + CryptoJS.MD5(newAsset._Parent.title + newAsset.title).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n if (newAsset._PrivateData.durationNew) newAsset.duration = newAsset._PrivateData.durationNew;\n\n var tv_series = {\n id: newAsset._Parent.id,\n episode_index: newAsset._PrivateData.episodeIndexNew,\n season_id: newAsset._PrivateData.seasonIdNew\n };\n\n AssetService.CreateNewTVEpisode(ext_id, newAsset, tv_series)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.streamsResources, newAsset.id, null);\n\n allQ.trailers = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.trailersResources, newAsset.id, 'trailer');\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-poster.png', newAsset.id);\n }\n\n var mpaa = _.find(newAsset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, newAsset._PrivateData.ratingsOld, newAsset._PrivateData.ratingsNew, newAsset.id);\n\n allQ.persons = MetadataService.Persons.Update.bind(this, [], newAsset._PrivateData.personsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Episode: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {id: newAsset._Parent.id});\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Episode: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during create',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n if (reason.message === 'item with this ext_id already exist') {\n ToastService.Small({\n title: 'TV Episode with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n } else {\n ToastService.Small({\n title: 'TV Episode: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n }\n return reason;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n if (asset._PrivateData.durationNew) asset.duration = asset._PrivateData.durationNew;\n\n var tv_series = {\n episode_index: asset._PrivateData.episodeIndexNew,\n season_id: asset._PrivateData.seasonIdNew\n };\n\n allQ.metadataVod = AssetService.UpdateTVEpisodeMetadata.bind(this, asset, tv_series);\n\n allQ.persons = MetadataService.Persons.Update.bind(this, asset._PrivateData.personsOld, asset._PrivateData.personsNew, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n allQ.streams = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.streamsResources, asset.id);\n\n allQ.trailers = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.trailersResources, asset.id, 'trailer');\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n var mpaa = _.find(asset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, asset._PrivateData.ratingsOld, asset._PrivateData.ratingsNew, asset.id);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Episode: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: asset.id,\n isEpisode: true,\n season: {\n oldIndex: asset._PrivateData.seasonIdOld,\n newIndex: asset._PrivateData.seasonIdNew\n }\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Episode: ' + asset.title + ' update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n });\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n };\n\n /**\n * Fetch data from IMDB\n * @param title\n * @param season\n * @param episode\n */\n $scope.fetchFromIMDB = function (title, season, episode) {\n if ($scope.loading) return;\n\n return IMDbService.FetchFromIMDB(title, $scope, 'episode', season || 0, episode || 0);\n };\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","/**\n * Modal window directive for Edit TV Series\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:21\n */\n\nlmApp.directive('lmTvSeriesEdit', [function () {\n return {\n restrict: 'E',\n controller: 'LmTvSeriesController',\n replace: true,\n templateUrl: 'lm-assets-edit/tv-series/edit-tv-series.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmTvSeriesController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', 'MetadataService', 'AssetService', 'IMDbService', 'ToastService', 'GroupService', 'OfferService', 'PlanService', 'PackageService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, MetadataService, AssetService, IMDbService, ToastService, GroupService, OfferService, PlanService, PackageService) {\n\n /**\n * Process media in asset.\n * @param asset\n * @param type\n */\n $scope.mediaManager = function (asset, type) {\n if ($scope.loading) return;\n\n MetadataService.MediaManager(asset, $scope, type);\n };\n\n $scope.deleteStream = function (stream) {\n stream.toDelete = true;\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.$parent.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.asset = $scope.$parent.localCollection[$scope.$parent.currentFocused];\n $scope.asset._PrivateData = {};\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.qualityFormats = [\n {\n title: 'HD',\n isSelected: false\n },\n {\n title: 'SD',\n isSelected: false\n },\n {\n title: '3D',\n isSelected: false\n }\n ];\n\n assetData._PrivateData.adultContent = assetData.has_adult_content;\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n assetData._PrivateData.tagsOld = assetData.tags ? assetData.tags : [];\n assetData._PrivateData.tagsNew = angular.copy(assetData._PrivateData.tagsOld);\n\n assetData._PrivateData.genresOld = assetData.genres.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n assetData._PrivateData.genresNew = angular.copy(assetData._PrivateData.genresOld);\n AssetService.GetGenresCollection()\n .then(function (answer) {\n $scope.genreSearch = answer.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n })\n .catch(function (reason) {\n $scope.genreSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n assetData._PrivateData.categoriesOld = assetData.categories.map(function (category) {\n return {\n id: category.id,\n title: category.title\n };\n });\n assetData._PrivateData.categoriesNew = angular.copy(assetData._PrivateData.categoriesOld);\n AssetService.GetCategoryCollection()\n .then(function (answer) {\n $scope.categorySearch = answer.map(function (category) {\n return {\n title: category.title,\n id: category.id\n }\n });\n })\n .catch(function (reason) {\n $scope.categorySearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n AssetService.GetCountriesCollection()\n .then(function (answer) {\n $scope.countrySearch = answer.map(function (country) {\n return {\n title: country.title,\n id: country.id\n }\n });\n\n assetData._PrivateData.countriesOld = _.find(answer, {id: assetData.country_id});\n\n if (assetData._PrivateData.countriesOld) {\n assetData._PrivateData.countriesOld = {\n id: assetData._PrivateData.countriesOld.id,\n title: assetData._PrivateData.countriesOld.title\n }\n }\n\n assetData._PrivateData.countriesNew = angular.copy(assetData._PrivateData.countriesOld);\n })\n .catch(function (reason) {\n $scope.countrySearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n AssetService.GetStudiosCollection()\n .then(function (answer) {\n $scope.studioSearch = answer.map(function (studio) {\n return {\n title: studio.title,\n id: studio.id\n }\n });\n\n assetData._PrivateData.studiosOld = _.find(answer, {title: assetData.studio});\n\n if (assetData._PrivateData.studiosOld) {\n assetData._PrivateData.studiosOld = {\n id: assetData._PrivateData.studiosOld.id,\n title: assetData._PrivateData.studiosOld.title\n }\n }\n\n assetData._PrivateData.studiosNew = angular.copy(assetData._PrivateData.studiosOld);\n })\n .catch(function (reason) {\n $scope.studioSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n assetData._PrivateData.groupsOld = collection\n .filter(function (group) {\n return _.includes(assetData.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n assetData._PrivateData.groupsNew = angular.copy(assetData._PrivateData.groupsOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n assetData.offer_id = assetData.offers.map(function (offer) {\n return offer.id;\n });\n\n OfferService.GetOffers()\n .then(function (collection) {\n $scope.offerSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.offersOld = collection\n .filter(function (offer) {\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n assetData._PrivateData.offersNew = angular.copy(assetData._PrivateData.offersOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PlanService.GetPlans()\n .then(function (collection) {\n $scope.planSearch = collection.map(function (offer) {\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansOld = collection\n .filter(function (offer) {\n\n return _.includes(assetData.offer_id, offer.id);\n })\n .map(function (offer) {\n\n return {\n title: offer.name,\n id: offer.id\n }\n });\n\n assetData._PrivateData.plansNew = angular.copy(assetData._PrivateData.plansOld);\n })\n .catch(function (reason) {\n\n $rootScope.debugInfo(reason, 'silent');\n\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.packageSearch = collection.map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesOld = collection\n .filter(function (pkg) {\n return _.includes(assetData.package_id, pkg.id);\n })\n .map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n assetData._PrivateData.packagesNew = angular.copy(assetData._PrivateData.packagesOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'imdb')) assetData.ratings.push({type: 'imdb'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'metascore')) assetData.ratings.push({type: 'metascore'});\n if (!MetadataService.Rating.IsRating(assetData.ratings, 'mpaa')) assetData.ratings.push({type: 'mpaa'});\n\n assetData._PrivateData.ratingsOld = assetData.ratings.filter(function (rating) {\n return !!MetadataService.Rating._types[rating.type];\n }).map(function (rating) {\n return MetadataService.Rating.GetValue(rating);\n });\n assetData._PrivateData.ratingsNew = angular.copy(assetData._PrivateData.ratingsOld);\n assetData._PrivateData.mpaaRatingValues = MetadataService.Rating.mpaaValues;\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = null;\n assetData._PrivateData.posterNew = null;\n }\n\n var trailersResources = {};\n assetData.resources.forEach(function (resource) {\n if (resource.type === 'stream' && resource.category === 'trailer') {\n trailersResources[resource.stream_type] = {};\n trailersResources[resource.stream_type].streamUrl = '';\n trailersResources[resource.stream_type].streamResourceId = null;\n trailersResources[resource.stream_type].title = $scope._STREAM_TYPES_ATTRS[resource.stream_type].title || 'Unknown';\n trailersResources[resource.stream_type].placeholder = $scope._STREAM_TYPES_ATTRS[resource.stream_type].placeholder || 'Unknown format';\n trailersResources[resource.stream_type].streamOld = '';\n trailersResources[resource.stream_type].streamNew = '';\n trailersResources[resource.stream_type].toDelete = false;\n\n AssetService.GetStream(assetData, resource.stream_type)\n .then(function (answer) {\n trailersResources[resource.stream_type].streamUrl = answer;\n });\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n resource.stream_type = 'youtube';\n }\n\n if (resource.stream_type.indexOf('youtube') !== -1) {\n trailersResources[resource.stream_type].streamOld = resource.source\n .replace('youtube+user://', 'https://www.youtube.com/user/')\n .replace('youtube+channel://', 'https://www.youtube.com/channel/');\n trailersResources[resource.stream_type].source = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n } else {\n trailersResources[resource.stream_type].streamOld = resource.source;\n trailersResources[resource.stream_type].streamNew = trailersResources[resource.stream_type].streamOld;\n trailersResources[resource.stream_type].source = resource.original_source || resource.source;\n trailersResources[resource.stream_type].doneWithError = (resource.noisypeak_job_is_complete && resource.noisypeak_job_error) ? resource.noisypeak_job_error : '';\n trailersResources[resource.stream_type].transcoding = (!resource.noisypeak_job_is_complete && !resource.noisypeak_job_error && !_.isUndefined(resource.noisypeak_job_progress)) ? resource.noisypeak_job_progress.toString() : '';\n }\n\n trailersResources[resource.stream_type].streamResourceId = resource.id;\n }\n });\n\n assetData._PrivateData.trailersResources = trailersResources;\n\n assetData._PrivateData.qualityFormat = assetData.traits[0];\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n * @type {*}\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.TVSeries;\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n $rootScope.showLinearProgress('#modalLoader');\n var errors = [];\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset.title) + (newAsset.year || '') + ':' + CryptoJS.MD5(newAsset.title + (newAsset.year || '')).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n if (newAsset._PrivateData.countriesNew) newAsset.country_id = newAsset._PrivateData.countriesNew.id;\n if (newAsset._PrivateData.studiosNew) newAsset.studio = newAsset._PrivateData.studiosNew.id;\n if (newAsset._PrivateData.durationNew) newAsset.duration = newAsset._PrivateData.durationNew;\n\n AssetService.CreateNewTVSeries(ext_id, newAsset)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n newAsset.definition = newAsset._PrivateData.qualityFormat || 'SD';\n\n allQ.adult = AssetService.SetAdult.bind(this, newAsset.id, newAsset._PrivateData.adultContent);\n\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: newAsset.id, definition: newAsset.definition});\n\n //allQ.trailers = AssetService.ProcessVodStreams.bind(this, newAsset._PrivateData.trailersResources, newAsset.id, 'trailer');\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-poster.png', newAsset.id);\n }\n\n var mpaa = _.find(newAsset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, newAsset._PrivateData.ratingsOld, newAsset._PrivateData.ratingsNew, newAsset.id);\n\n allQ.tags = AssetService.tagsSet.bind(this, newAsset._PrivateData.tagsNew, newAsset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, [], newAsset._PrivateData.genresNew, newAsset.id);\n allQ.persons = MetadataService.Persons.Update.bind(this, [], newAsset._PrivateData.personsNew, newAsset.id);\n allQ.categories = MetadataService.Categories.Update.bind(this, [], newAsset._PrivateData.categoriesNew, newAsset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, [], newAsset._PrivateData.platformsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n var groupToRemove = _.difference(_.map(newAsset._PrivateData.groupsOld, 'id'), _.map(newAsset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(newAsset._PrivateData.groupsNew, 'id'), _.map(newAsset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [response.asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [response.asset.id]);\n\n var concatOffersOld = _.concat([],newAsset._PrivateData.offersOld, newAsset._PrivateData.plansOld);\n var concatOffersNew = _.concat([],newAsset._PrivateData.offersNew, newAsset._PrivateData.plansNew);\n\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [response.asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [response.asset.id]);\n\n var packageToRemove = _.difference(_.map(newAsset._PrivateData.packagesOld, 'id'), _.map(newAsset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(newAsset._PrivateData.packagesNew, 'id'), _.map(newAsset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [response.asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [response.asset.id]);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n if (errors.length) {\n\n } else {\n ToastService.Small({\n title: 'TV Series: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 3);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {id: 'all', timestamp: Date.now()});\n }\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Series: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n\n ToastService.Big({\n title: 'Errors during creation',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 3 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n $rootScope.debugInfo(reason);\n\n if (reason.message === 'item with this ext_id already exist') {\n ToastService.Small({\n title: 'TV Series with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n } else {\n ToastService.Small({\n title: 'TV Series: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 3);\n }\n return reason;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n $rootScope.showLinearProgress('#modalLoader');\n var errors = [];\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n if (asset._PrivateData.countriesNew) {\n asset.country_id = asset._PrivateData.countriesNew.id;\n } else {\n asset.country_id = null;\n }\n if (asset._PrivateData.studiosNew) {\n asset.studio = asset._PrivateData.studiosNew.id;\n } else {\n asset.studio = null;\n }\n if (asset._PrivateData.durationNew) asset.duration = asset._PrivateData.durationNew;\n asset.definition = asset._PrivateData.qualityFormat || 'SD';\n\n allQ.metadataTvSeries = AssetService.UpdateTVSeriesMetadata.bind(this, asset);\n\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: asset.id, definition: asset.definition});\n\n allQ.adult = AssetService.SetAdult.bind(this, asset.id, asset._PrivateData.adultContent);\n\n allQ.tags = AssetService.tagsSet.bind(this, asset._PrivateData.tagsNew, asset.id);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, asset._PrivateData.genresOld, asset._PrivateData.genresNew, asset.id);\n allQ.persons = MetadataService.Persons.Update.bind(this, asset._PrivateData.personsOld, asset._PrivateData.personsNew, asset.id);\n allQ.categories = MetadataService.Categories.Update.bind(this, asset._PrivateData.categoriesOld, asset._PrivateData.categoriesNew, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n //allQ.trailers = AssetService.ProcessVodStreams.bind(this, asset._PrivateData.trailersResources, asset.id, 'trailer');\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n var mpaa = _.find(asset._PrivateData.ratingsNew, {type: 'mpaa'});\n if (mpaa.value) {\n mpaa.value = mpaa.value.rating;\n }\n\n allQ.ratings = MetadataService.Rating.Update.bind(this, asset._PrivateData.ratingsOld, asset._PrivateData.ratingsNew, asset.id);\n\n var groupToRemove = _.difference(_.map(asset._PrivateData.groupsOld, 'id'), _.map(asset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(asset._PrivateData.groupsNew, 'id'), _.map(asset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [asset.id]);\n\n var concatOffersOld = _.concat([], asset._PrivateData.offersOld, asset._PrivateData.plansOld);\n var concatOffersNew = _.concat([], asset._PrivateData.offersNew, asset._PrivateData.plansNew);\n\n var offerToRemove = _.difference(_.map(concatOffersOld, 'id'), _.map(concatOffersNew, 'id'));\n var offerToAdd = _.difference(_.map(concatOffersNew, 'id'), _.map(concatOffersOld, 'id'));\n if (offerToAdd.length) allQ.offersAdd = OfferService.AddAsset.bind(this, offerToAdd, [asset.id]);\n if (offerToRemove.length) allQ.offersRemove = OfferService.RemoveAsset.bind(this, offerToRemove, [asset.id]);\n\n var packageToRemove = _.difference(_.map(asset._PrivateData.packagesOld, 'id'), _.map(asset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(asset._PrivateData.packagesNew, 'id'), _.map(asset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [asset.id]);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Series: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: asset.id\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'TV Series: ' + asset.title + ' update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n });\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n };\n\n /**\n * Fetch data from IMDB\n * @param title\n */\n $scope.fetchFromIMDB = function (title) {\n if ($scope.loading) return;\n\n return IMDbService.FetchFromIMDB(title, $scope, 'series');\n };\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","/**\n * Modal window directive for Edit Virtual Live\n * Created by\n * @author Art Yunishev\n * on 06.03.2015-19:23\n */\n\nlmApp.directive('lmVirtualLiveEdit', [function () {\n return {\n restrict: 'E',\n replace: true,\n controller: 'LmVirtualLiveController',\n templateUrl: 'lm-assets-edit/virtual-live/edit-virtual-live.tpl.html'\n };\n}]);\n\nlmApp\n .controller('LmVirtualLiveController', ['$scope', '$rootScope', '$templateCache', '$compile', '$q', '$timeout', '$interval', 'MetadataService', 'AssetService', 'ToastService', 'GroupService', 'PackageService', 'ManageAssetsWindow', 'VirtualLiveApiService',\n function ($scope, $rootScope, $templateCache, $compile, $q, $timeout, $interval, MetadataService, AssetService, ToastService, GroupService, PackageService, ManageAssetsWindow, VirtualLiveApiService) {\n\n $scope.playlistManager = function (asset) {\n if ($scope.$parent.loading) return;\n\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: function (toAdd, toRemove, toThis) {\n if ($scope.loading) return;\n\n if (toRemove.length) {\n var index;\n for (var i = 0; i < toRemove.length; i++) {\n index = _.findIndex(toThis._PrivateData.playlist, {id: toRemove[i].id});\n\n if (index !== -1) {\n toThis._PrivateData.playlist.splice(index, 1);\n }\n }\n }\n\n if (toAdd.length) {\n toThis._PrivateData.playlist = _.union(toThis._PrivateData.playlist, toAdd);\n }\n\n return $q.when(true);\n },\n obj: asset,\n index: asset._PrivateData.index,\n data: 'playlist',\n title: asset.title,\n currentCollection: _.map(asset._PrivateData.playlist, 'id'),\n view: 'vod',\n filter: {\n packages: true\n }\n })\n };\n\n /**\n * TODO: SCOPES!!!!!\n *\n * Allow to Edit next asset in collection (if not Last)\n */\n $scope.$parent.nextAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused < $scope.localCollection.length - 1) {\n $scope.$parent.currentFocused++;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n /**\n * TODO: SCOPES!!!!\n *\n * Allow ti Edit previous asset in collection (if not First)\n */\n $scope.$parent.previousAsset = function () {\n if ($scope.$parent.loading) return;\n\n if ($scope.$parent.currentFocused > 0) {\n $scope.$parent.currentFocused--;\n $scope.localCollection[$scope.$parent.currentFocused]._PrivateData = {};\n $scope.asset = $scope.localCollection[$scope.$parent.currentFocused];\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n }\n };\n\n $scope.removeFromRotation = function (assetData) {\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().subtract(1, 'day');\n };\n\n $scope.setOneMonthRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'month');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'month');\n };\n\n $scope.setOneYearRotation = function (assetData) {\n assetData._PrivateData.rentalNew.license_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.license_finish = moment.utc().add(1, 'year');\n assetData._PrivateData.rentalNew.rotation_start = moment.utc().subtract(1, 'day');\n assetData._PrivateData.rentalNew.rotation_finish = moment.utc().add(1, 'year');\n };\n\n /**\n * Prepare asset for Edit. Add '_PrivateData' filed with parsed metadata\n * @param assetData\n * @returns {*}\n */\n $scope.prepareAssetForEdit = function (assetData) {\n\n assetData._PrivateData.qualityFormats = [\n {\n title: 'HD',\n isSelected: false\n },\n {\n title: 'SD',\n isSelected: false\n }\n ];\n\n assetData._PrivateData.adultContent = assetData.has_adult_content;\n\n assetData._PrivateData.rentalOld = MetadataService.Rental.GetValues(assetData);\n assetData._PrivateData.rentalNew = angular.copy(assetData._PrivateData.rentalOld);\n\n assetData._PrivateData.genresOld = assetData.genres.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n assetData._PrivateData.genresNew = angular.copy(assetData._PrivateData.genresOld);\n AssetService.GetGenresCollection()\n .then(function (answer) {\n $scope.genreSearch = answer.map(function (genre) {\n return {\n title: genre.title,\n id: genre.id\n }\n });\n })\n .catch(function (reason) {\n $scope.genreSearch = [];\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n assetData._PrivateData.categoriesOld = assetData.categories.map(function (item) {\n return {\n title: item.title,\n id: item.id\n };\n });\n\n assetData._PrivateData.categoriesNew = angular.copy(assetData._PrivateData.categoriesOld);\n AssetService.GetCategoryCollection()\n .then(function (answer) {\n $scope.categorySearch = answer.map(function (category) {\n return {\n title: category.title,\n id: category.id\n }\n });\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n });\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.groupSearch = collection.map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n assetData._PrivateData.groupsOld = collection\n .filter(function (group) {\n return _.includes(assetData.group_id, group.id);\n })\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n assetData._PrivateData.groupsNew = angular.copy(assetData._PrivateData.groupsOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n PackageService.GetPackages()\n .then(function (collection) {\n $scope.packageSearch = collection.map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n\n assetData._PrivateData.packagesOld = collection\n .filter(function (pkg) {\n return _.includes(assetData.package_id, pkg.id);\n })\n .map(function (pkg) {\n return {\n title: pkg.title,\n id: pkg.id\n }\n });\n assetData._PrivateData.packagesNew = angular.copy(assetData._PrivateData.packagesOld);\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 6);\n });\n\n var pictureResources = assetData.resources && assetData.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n AssetService.GetPoster(assetData)\n .then(function (answer) {\n assetData._PrivateData.posterUrl = answer;\n });\n\n assetData._PrivateData.posterResourceId = pictureResources[0].id;\n assetData._PrivateData.posterOld = pictureResources[0].source;\n assetData._PrivateData.posterNew = assetData._PrivateData.posterOld;\n } else {\n assetData._PrivateData.posterOld = '';\n assetData._PrivateData.posterNew = '';\n }\n\n assetData._PrivateData.platformsOld = MetadataService.Platforms.GetAvailablePlatforms(assetData, $rootScope.platforms);\n assetData._PrivateData.platformsNew = angular.copy(assetData._PrivateData.platformsOld);\n\n if (_.size(assetData._playlist)) {\n assetData._PrivateData.playlist = assetData._playlist;\n\n assetData._PrivateData.start = {\n date: moment.utc((assetData._playlist.start || moment().unix()) * 1000),\n time: moment.utc((assetData._playlist.start || moment().unix()) * 1000).diff(moment.utc((assetData._playlist.start || moment().unix()) * 1000).startOf('day'), 'seconds')\n };\n } else if (assetData.id) {\n VirtualLiveApiService.GetPlaylist(assetData.id)\n .then(function (playlist) {\n assetData._PrivateData.playlist = playlist || [];\n assetData._PrivateData.start = {\n date: moment.utc((playlist.start || moment().unix()) * 1000),\n time: moment.utc((playlist.start || moment().unix()) * 1000).diff(moment.utc((playlist.start || moment().unix()) * 1000).startOf('day'), 'seconds')\n };\n });\n }\n\n assetData._PrivateData.qualityFormat = assetData.traits[0];\n\n return assetData;\n };\n\n /**\n * Get current Asset data on window Open\n */\n $scope.assetData = $scope.prepareAssetForEdit($scope.asset);\n $scope.validateFields = MetadataService.ValidateMetadata.VirtualLive;\n\n\n /**\n * @define [CREATE]\n * Defines Create function for asset\n * @param newAsset\n */\n $scope.$parent.createFn = function (newAsset) {\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n if (!_.isEmpty($scope.validateFields(newAsset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n var ext_id = \"personal:\" + translit(newAsset.title) + ':' + CryptoJS.MD5(newAsset.title).toString(CryptoJS.enc.Hex) + ':' + guid();\n\n AssetService.CreateNewVirtualLive(ext_id, newAsset)\n .then(function (response) {\n\n var allQ = {};\n\n newAsset.id = response.asset.id;\n\n newAsset.definition = newAsset._PrivateData.qualityFormat || 'SD';\n allQ.commonMetadata = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: newAsset.id, definition: newAsset.definition});\n\n allQ.adult = AssetService.SetAdult.bind(this, newAsset.id, newAsset._PrivateData.adultContent);\n\n if (newAsset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, newAsset._PrivateData.posterNew, newAsset.id);\n } else {\n allQ.picture = AssetService.AddVodPoster.bind(this, 'https://storage-sc-ott3.s3.amazonaws.com/no-channel-logo.png', newAsset.id);\n }\n\n var TvCategory = $scope.categorySearch.filter(function (category) {\n return category.title === 'TV';\n });\n\n if (TvCategory.length) newAsset._PrivateData.categoriesNew = newAsset._PrivateData.categoriesNew.concat(TvCategory);\n\n allQ.genres = MetadataService.Genres.Update.bind(this, [], newAsset._PrivateData.genresNew, newAsset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, [], newAsset._PrivateData.categoriesNew, newAsset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, [], newAsset._PrivateData.platformsNew, newAsset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, newAsset._PrivateData.rentalNew, newAsset.id);\n\n var groupToRemove = _.difference(_.map(newAsset._PrivateData.groupsOld, 'id'), _.map(newAsset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(newAsset._PrivateData.groupsNew, 'id'), _.map(newAsset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [response.asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [response.asset.id]);\n\n var packageToRemove = _.difference(_.map(newAsset._PrivateData.packagesOld, 'id'), _.map(newAsset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(newAsset._PrivateData.packagesNew, 'id'), _.map(newAsset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [response.asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [response.asset.id]);\n\n //allQ.playlist = VirtualLiveApiService.SetPlaylist.bind(this, newAsset.id, newAsset._PrivateData.playlist.groups);\n //var startTime = newAsset._PrivateData.start.date.unix() + newAsset._PrivateData.start.time;\n //allQ.startTime = VirtualLiveApiService.SetStartTime.bind(this, newAsset.id, startTime);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'Virtual TV Channel: ' + newAsset.title + ' successfully created',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {id: 'all'});\n\n return true;\n\n }).catch(function (reason) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n\n ToastService.Small({\n title: 'Virtual TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during creation',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n\n return reason;\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n if (reason.message === 'item with this ext_id already exist') {\n\n ToastService.Small({\n title: 'Virtual TV Channel with this title already exist',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n } else {\n\n ToastService.Small({\n title: 'Virtual TV Channel: ' + newAsset.title + ' create failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n }\n\n $rootScope.debugInfo(reason);\n\n return reason;\n });\n };\n\n /**\n * @define [UPDATE]\n * Defines Update function for asset\n * @param asset\n */\n $scope.$parent.updateFn = function (asset) {\n\n $rootScope.showLinearProgress('#modalLoader');\n $scope.$parent.loading = true;\n\n var allQ = {};\n\n if (!_.isEmpty($scope.validateFields(asset))) {\n $scope.$parent.loading = false;\n $rootScope.hideLinearProgress('#modalLoader');\n ToastService.Big({\n color: 'amber',\n title: 'Empty fields',\n text: 'Not all required fields are filled. Check all marked fields.',\n icon: 'alert'\n }, 60 * 1000);\n return;\n }\n\n allQ.adult = AssetService.SetAdult.bind(this, asset.id, asset._PrivateData.adultContent);\n\n asset.definition = asset._PrivateData.qualityFormat || 'SD';\n allQ.metadata = AssetService.UpdateVirtualLiveMetadata.bind(this, asset);\n allQ.metadataCommon = AssetService.UpdateCommonAssetMetadata.bind(this, {asset_id: asset.id, definition: asset.definition});\n\n allQ.genres = MetadataService.Genres.Update.bind(this, asset._PrivateData.genresOld, asset._PrivateData.genresNew, asset.id);\n\n allQ.categories = MetadataService.Categories.Update.bind(this, asset._PrivateData.categoriesOld, asset._PrivateData.categoriesNew, asset.id);\n\n allQ.platforms = MetadataService.Platforms.Update.bind(this, asset._PrivateData.platformsOld, asset._PrivateData.platformsNew, asset.id);\n\n allQ.rental = AssetService.UpdateRentalRotation.bind(this, asset._PrivateData.rentalNew, asset.id);\n\n if (!asset._PrivateData.posterOld && asset._PrivateData.posterNew) {\n allQ.picture = AssetService.AddVodPoster.bind(this, asset._PrivateData.posterNew, asset.id);\n } else if (asset._PrivateData.posterNew !== asset._PrivateData.posterOld) {\n allQ.picture = AssetService.UpdateVodPoster.bind(this, asset.id, asset._PrivateData.posterNew, asset._PrivateData.posterResourceId);\n }\n\n var groupToRemove = _.difference(_.map(asset._PrivateData.groupsOld, 'id'), _.map(asset._PrivateData.groupsNew, 'id'));\n var groupToAdd = _.difference(_.map(asset._PrivateData.groupsNew, 'id'), _.map(asset._PrivateData.groupsOld, 'id'));\n if (groupToAdd.length) allQ.groupsAdd = GroupService.AddAsset.bind(this, groupToAdd, [asset.id]);\n if (groupToRemove.length) allQ.groupsRemove = GroupService.RemoveAsset.bind(this, groupToRemove, [asset.id]);\n\n var packageToRemove = _.difference(_.map(asset._PrivateData.packagesOld, 'id'), _.map(asset._PrivateData.packagesNew, 'id'));\n var packageToAdd = _.difference(_.map(asset._PrivateData.packagesNew, 'id'), _.map(asset._PrivateData.packagesOld, 'id'));\n if (packageToAdd.length) allQ.packagesAdd = PackageService.AddAsset.bind(this, packageToAdd, [asset.id]);\n if (packageToRemove.length) allQ.packagesRemove = PackageService.RemoveAsset.bind(this, packageToRemove, [asset.id]);\n\n //allQ.playlist = VirtualLiveApiService.SetPlaylist.bind(this, asset.id, asset._PrivateData.playlist.groups);\n //var startTime = asset._PrivateData.start.date.unix() + asset._PrivateData.start.time;\n //allQ.startTime = VirtualLiveApiService.SetStartTime.bind(this, asset.id, startTime);\n\n return $q.seqAll(allQ)\n .then(function () {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'Virtual TV Channel: ' + asset.title + ' successfully updated',\n color: 'green',\n icon: 'cloud-check'\n }, 1000 * 6);\n\n $scope.close();\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: asset.id\n });\n\n return true;\n }).catch(function (reason) {\n $rootScope.hideLinearProgress('#modalLoader');\n $scope.$parent.loading = false;\n\n ToastService.Small({\n title: 'Virtual TV Channel: ' + asset.title + ' update failed',\n color: 'red',\n icon: 'cloud-outline-off'\n }, 1000 * 6);\n\n ToastService.Big({\n title: 'Errors during update',\n color: 'red',\n text: reason.key + ': ' + reason.error.message,\n icon: 'cloud-outline-off'\n }, 1000 * 6 * 3);\n\n $rootScope.debugInfo(reason.error);\n return false;\n });\n };\n\n $scope.checkLcn = function (asset) {\n if ($scope.IntLcn) $timeout.cancel($scope.IntLcn);\n\n $scope.IntLcn = $timeout(function () {\n\n AssetService.getChannelByLcn(asset.er_lcn)\n .then(function (collection) {\n asset._PrivateData.validateWarning = {};\n if (collection.length && !_.find(collection, {id: asset.id})) {\n asset._PrivateData.validateWarning.lcn = true;\n asset._PrivateData.validateWarning.lcnText = 'Already exist';\n }\n })\n }, 150);\n };\n\n $scope.manageLocalizations = function () {\n MetadataService.LocalizationManager($scope.asset, $scope);\n }\n }]);\n","lmApp\n .directive('lmApplicationAndroid', [\n function () {\n return {\n templateUrl: 'lm-showcase/application-android/application-android.tpl.html',\n restrict: 'E',\n replace: true,\n scope: {\n applications: '=?',\n tab: '=?'\n },\n controller: ['$scope', '$rootScope', '$interval', '$templateCache', '$compile', '$q', '$timeout', 'ShowcaseService', 'GroupService', 'ModalWindowService', 'ToastService', 'ApplicationService', 'ModalConfirmService',\n function ($scope, $rootScope, $interval, $templateCache, $compile, $q, $timeout, ShowcaseService, GroupService, ModalWindowService, ToastService, ApplicationService, ModalConfirmService) {\n $scope.permissions = $rootScope.permissions;\n $scope.namespace = 'stockmob';\n $scope.showVariants = true;\n $scope.application = {};\n $scope.application.currentShowcase = {};\n $scope.application.currentScreen = {};\n $scope.screensCollection = [];\n $scope.showcasesCollection = [];\n $scope.availableGroups = [];\n\n var _parseShowcase = function (showcase) {\n if (!showcase._PrivateData) showcase._PrivateData = {};\n\n showcase._PrivateData.groups = $scope.availableGroups\n .filter(function (group) {\n return _.includes(showcase.group_id, group.id);\n });\n\n return showcase;\n };\n\n ShowcaseService.GetScreens($scope.applications.platform.id)\n .then(function (screensCollection) {\n $scope.screensCollection = screensCollection;\n\n if (screensCollection.length) {\n $scope.application.currentScreen = $scope.screensCollection[0];\n }\n });\n\n $scope.toggleVariants = function () {\n $scope.showVariants = !$scope.showVariants;\n };\n\n $scope.isSuperuser = function () {\n return $rootScope.isSuperuser();\n };\n\n $scope.changePriority = function (showcase, index, isDown) {\n index = index + (isDown ? 1 : index ? -1 : 0);\n showcase.priority = $scope.showcasesCollection[index].priority + (isDown ? -1 : 1);\n\n $scope.updateShowcase(showcase, index);\n $scope.showcasesCollection = _.orderBy($scope.showcasesCollection, ['priority'], ['desc']);\n };\n\n $scope.setShowcase = function (showcase) {\n $scope.application.currentShowcase = showcase;\n };\n\n $scope.createNewScreen = function () {\n $scope.newScreen = {\n title: ''\n };\n\n $scope._tpl_ = $templateCache.get('add-screen.html');\n\n $scope._tpl_ = $compile($scope._tpl_)($scope);\n\n ModalWindowService.Open({\n content: $scope._tpl_,\n size: {\n s: 4\n },\n actions: [\n {\n title: 'create',\n color: 'lm',\n fn: function () {\n if (!$scope.newScreen.title) $scope.newScreen.title = 'Showcase #' + Date.now();\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n ShowcaseService.CreateScreen($scope.newScreen, $scope.applications.platform.id)\n .then(function (response) {\n ToastService.Small({\n title: 'Screen successfully created',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n $scope.newScreen.title = '';\n $scope.screensCollection.push(response.showcase.screen);\n $scope.application.currentScreen = response.showcase.screen;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n })\n }\n },\n {\n title: 'Cancel',\n color: 'grey '\n }\n ]\n });\n };\n\n $scope.createNewVariant = function (showcase) {\n $scope.newShowcase = {\n title: '',\n groups: []\n };\n\n $scope._tpl_ = $templateCache.get('add-screen-variant.html');\n\n $scope._tpl_ = $compile($scope._tpl_)($scope);\n\n ModalWindowService.Open({\n content: $scope._tpl_,\n size: {\n s: 4\n },\n actions: [\n {\n title: 'Create',\n color: 'lm',\n fn: function () {\n if (!$scope.newShowcase.title) $scope.newShowcase.title = 'Showcase #' + Date.now();\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n $scope.newShowcase.priority = (_.last($scope.showcasesCollection) ? _.last($scope.showcasesCollection).priority : 0) - 10;\n $scope.newShowcase.group_id = _.map($scope.newShowcase.groups, 'id');\n\n ShowcaseService.CreateScreenVariant(\n $scope.newShowcase,\n $scope.applications.platform.id,\n $scope.application.currentScreen)\n .then(function (response) {\n ToastService.Small({\n title: 'Showcase successfully created',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n $scope.newShowcase.title = '';\n $scope.showcasesCollection.push(response.showcase);\n $scope.application.currentShowcase = response.showcase;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n })\n }\n },\n {\n title: 'Cancel',\n color: 'grey '\n }\n ]\n });\n };\n\n $scope.updateShowcase = function (showcase, index) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n var tmpShowcase = _.cloneDeepWith(showcase);\n\n tmpShowcase.group_id = _.map(showcase._PrivateData.groups, 'id');\n\n ShowcaseService.UpdateShowcase(tmpShowcase)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.showcasesCollection[index] = _parseShowcase(response.showcase);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n\n if (reason.message === 'everyone left without showcases') {\n ToastService.Big({\n title: 'Warning',\n text: 'You can\\'t leave screen without default variant. First set \"Everyone\" group to another representation.',\n color: 'amber',\n icon: 'view-dashboard'\n }, 1000 * 30);\n\n showcase._PrivateData.groups = $scope.availableGroups\n .filter(function (group) {\n return _.includes(showcase.group_id, group.id);\n });\n } else {\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Showcase update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 30);\n }\n });\n };\n\n $scope.updateShowcaseLayout = function (showcase) {\n var diff = showcase._Grid.filter(function (tile) {\n return tile._PrivateData.isMoved;\n });\n\n if (diff.length) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n var allQ = [];\n\n diff.forEach(function (tile) {\n allQ.push(ShowcaseService.UpdateTilePosition(tile));\n });\n\n $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase layout successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION, showcase);\n showcase._PrivateData.isLayoutChanged = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase layout update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n })\n } else {\n showcase._PrivateData.isLayoutChanged = false;\n }\n };\n\n $scope.deleteShowcase = function (showcase) {\n\n ModalConfirmService.Open({\n content: '

    Delete

    This action will delete showcase permanently. ' +\n 'Are You sure?

    ',\n action: {\n title: 'Delete',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n ShowcaseService.RemoveShowcase(showcase)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase successfully removed',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n\n var index = $scope.showcasesCollection.indexOf(showcase);\n\n if (index !== -1) $scope.showcasesCollection.splice(index, 1);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n\n if (reason.message === 'everyone left without showcases') {\n ToastService.Big({\n title: 'Warning',\n text: 'You can\\'t remove default variant. First set \"everyone\" group to another showcase.',\n color: 'amber',\n icon: 'view-dashboard'\n }, 1000 * 30);\n } else {\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Showcase removed failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n }\n });\n }\n }\n });\n };\n\n $scope.changeAppUrl = function (url) {\n ApplicationService.UpdatePlatform({app_url: url, id: $scope.applications.platform.id})\n .then(function (response) {\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'App URL successfully changed',\n color: 'green',\n icon: 'dns'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'App URL change failed',\n color: 'red',\n icon: 'dns'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.screenWatcher = $scope.$watch('application.currentScreen.id', function (newValue, oldValue) {\n if (newValue) ShowcaseService.GetShowcasesByScreenId(newValue)\n .then(function (showcaseCollection) {\n if (showcaseCollection)\n $scope.showcasesCollection = _.orderBy(showcaseCollection, ['priority'], ['desc']);\n\n $scope.application.currentShowcase = _parseShowcase(showcaseCollection[0]);\n })\n });\n\n $scope.showcaseWatcher = $scope.$watch('application.currentShowcase.id', function (newValue, oldValue) {\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.availableGroups = collection\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n $scope.showcasesCollection.forEach(_parseShowcase);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n });\n\n $scope.appWatcher = $scope.$watchCollection('applications.platform', function (newValue, oldValue) {\n\n ShowcaseService.GetScreens(newValue.id)\n .then(function (screensCollection) {\n $scope.screensCollection = screensCollection;\n\n if (screensCollection.length) {\n $scope.application.currentScreen = $scope.screensCollection[0];\n\n ShowcaseService.GetShowcasesByScreenId($scope.application.currentScreen.id)\n .then(function (showcaseCollection) {\n $scope.showcasesCollection = _.orderBy(showcaseCollection, ['priority'], ['desc']);\n\n $scope.application.currentShowcase = _parseShowcase(showcaseCollection[0]);\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.availableGroups = collection\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n $scope.showcasesCollection.forEach(_parseShowcase);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n })\n }\n });\n });\n\n\n }],\n link: function (scope, element) {\n element.on('$destroy', function () {\n if (scope.appWatcher) scope.appWatcher();\n if (scope.showcaseWatcher) scope.showcaseWatcher();\n if (scope.screenWatcher) scope.screenWatcher();\n });\n }\n }\n }\n ]);\n","lmApp\n .directive('lmApplicationIos', [\n function () {\n return {\n templateUrl: 'lm-showcase/application-ios/application-ios.tpl.html',\n restrict: 'E',\n replace: true,\n scope: {\n applications: '=?',\n tab: '=?'\n },\n controller: ['$scope', '$rootScope', '$interval', '$templateCache', '$compile', '$q', '$timeout', 'ShowcaseService', 'GroupService', 'ModalWindowService', 'ToastService', 'ApplicationService', 'ModalConfirmService',\n function ($scope, $rootScope, $interval, $templateCache, $compile, $q, $timeout, ShowcaseService, GroupService, ModalWindowService, ToastService, ApplicationService, ModalConfirmService) {\n $scope.permissions = $rootScope.permissions;\n $scope.namespace = 'stockmob';\n $scope.showVariants = true;\n $scope.application = {};\n $scope.application.currentShowcase = {};\n $scope.application.currentScreen = {};\n $scope.screensCollection = [];\n $scope.showcasesCollection = [];\n $scope.availableGroups = [];\n\n var _parseShowcase = function (showcase) {\n if (!showcase._PrivateData) showcase._PrivateData = {};\n\n showcase._PrivateData.groups = $scope.availableGroups\n .filter(function (group) {\n return _.includes(showcase.group_id, group.id);\n });\n\n return showcase;\n };\n\n ShowcaseService.GetScreens($scope.applications.platform.id)\n .then(function (screensCollection) {\n $scope.screensCollection = screensCollection;\n\n if (screensCollection.length) {\n $scope.application.currentScreen = $scope.screensCollection[0];\n }\n });\n\n $scope.toggleVariants = function () {\n $scope.showVariants = !$scope.showVariants;\n };\n\n $scope.isSuperuser = function () {\n return $rootScope.isSuperuser();\n };\n\n $scope.changePriority = function (showcase, index, isDown) {\n index = index + (isDown ? 1 : index ? -1 : 0);\n showcase.priority = $scope.showcasesCollection[index].priority + (isDown ? -1 : 1);\n\n $scope.updateShowcase(showcase, index);\n $scope.showcasesCollection = _.orderBy($scope.showcasesCollection, ['priority'], ['desc']);\n };\n\n $scope.setShowcase = function (showcase) {\n $scope.application.currentShowcase = showcase;\n console.log(showcase);\n };\n\n $scope.createNewScreen = function () {\n $scope.newScreen = {\n title: ''\n };\n\n $scope._tpl_ = $templateCache.get('add-screen.html');\n\n $scope._tpl_ = $compile($scope._tpl_)($scope);\n\n ModalWindowService.Open({\n content: $scope._tpl_,\n size: {\n s: 4\n },\n actions: [\n {\n title: 'create',\n color: 'lm',\n fn: function () {\n if (!$scope.newScreen.title) $scope.newScreen.title = 'Showcase #' + Date.now();\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n ShowcaseService.CreateScreen($scope.newScreen, $scope.applications.platform.id)\n .then(function (response) {\n ToastService.Small({\n title: 'Screen successfully created',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n $scope.newScreen.title = '';\n $scope.screensCollection.push(response.showcase.screen);\n $scope.application.currentScreen = response.showcase.screen;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n })\n }\n },\n {\n title: 'Cancel',\n color: 'grey '\n }\n ]\n });\n };\n\n $scope.createNewVariant = function (showcase) {\n $scope.newShowcase = {\n title: '',\n groups: []\n };\n\n $scope._tpl_ = $templateCache.get('add-screen-variant.html');\n\n $scope._tpl_ = $compile($scope._tpl_)($scope);\n\n ModalWindowService.Open({\n content: $scope._tpl_,\n size: {\n s: 4\n },\n actions: [\n {\n title: 'Create',\n color: 'lm',\n fn: function () {\n if (!$scope.newShowcase.title) $scope.newShowcase.title = 'Showcase #' + Date.now();\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n $scope.newShowcase.priority = (_.last($scope.showcasesCollection) ? _.last($scope.showcasesCollection).priority : 0) - 10;\n $scope.newShowcase.group_id = _.map($scope.newShowcase.groups, 'id');\n\n ShowcaseService.CreateScreenVariant(\n $scope.newShowcase,\n $scope.applications.platform.id,\n $scope.application.currentScreen)\n .then(function (response) {\n ToastService.Small({\n title: 'Showcase successfully created',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n $scope.newShowcase.title = '';\n $scope.showcasesCollection.push(response.showcase);\n $scope.application.currentShowcase = response.showcase;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n })\n }\n },\n {\n title: 'Cancel',\n color: 'grey '\n }\n ]\n });\n };\n\n $scope.updateShowcase = function (showcase, index) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n var tmpShowcase = _.cloneDeepWith(showcase);\n\n tmpShowcase.group_id = _.map(showcase._PrivateData.groups, 'id');\n\n ShowcaseService.UpdateShowcase(tmpShowcase)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $scope.showcasesCollection[index] = _parseShowcase(response.showcase);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n\n if (reason.message === 'everyone left without showcases') {\n ToastService.Big({\n title: 'Warning',\n text: 'You can\\'t leave screen without default variant. First set \"Everyone\" group to another representation.',\n color: 'amber',\n icon: 'view-dashboard'\n }, 1000 * 30);\n\n showcase._PrivateData.groups = $scope.availableGroups\n .filter(function (group) {\n return _.includes(showcase.group_id, group.id);\n });\n } else {\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Showcase update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 30);\n }\n });\n };\n\n $scope.updateShowcaseLayout = function (showcase) {\n var diff = showcase._Grid.filter(function (tile) {\n return tile._PrivateData.isMoved;\n });\n\n if (diff.length) {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n var allQ = [];\n\n diff.forEach(function (tile) {\n allQ.push(ShowcaseService.UpdateTilePosition(tile));\n });\n\n $q.all(allQ)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase layout successfully updated',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_SHOWCASE_COLLECTION, showcase);\n showcase._PrivateData.isLayoutChanged = false;\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason);\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase layout update failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n })\n } else {\n showcase._PrivateData.isLayoutChanged = false;\n }\n };\n\n $scope.deleteShowcase = function (showcase) {\n\n ModalConfirmService.Open({\n content: '

    Delete

    This action will delete showcase permanently. ' +\n 'Are You sure?

    ',\n action: {\n title: 'Delete',\n fn: function () {\n $scope.loading = true;\n $rootScope.showLinearProgress('#appLoader');\n\n ShowcaseService.RemoveShowcase(showcase)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'Showcase successfully removed',\n color: 'green',\n icon: 'view-dashboard'\n }, 1000 * 3);\n\n var index = $scope.showcasesCollection.indexOf(showcase);\n\n if (index !== -1) $scope.showcasesCollection.splice(index, 1);\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#appLoader');\n\n if (reason.message === 'everyone left without showcases') {\n ToastService.Big({\n title: 'Warning',\n text: 'You can\\'t remove default variant. First set \"everyone\" group to another showcase.',\n color: 'amber',\n icon: 'view-dashboard'\n }, 1000 * 30);\n } else {\n $rootScope.debugInfo(reason);\n ToastService.Small({\n title: 'Showcase removed failed',\n color: 'red',\n icon: 'view-dashboard'\n }, 1000 * 3);\n }\n });\n }\n }\n });\n };\n\n $scope.changeAppUrl = function (url) {\n ApplicationService.UpdatePlatform({app_url: url, id: $scope.applications.platform.id})\n .then(function (response) {\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'App URL successfully changed',\n color: 'green',\n icon: 'dns'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#appLoader');\n ToastService.Small({\n title: 'App URL change failed',\n color: 'red',\n icon: 'dns'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.screenWatcher = $scope.$watch('application.currentScreen.id', function (newValue, oldValue) {\n if (newValue) ShowcaseService.GetShowcasesByScreenId(newValue)\n .then(function (showcaseCollection) {\n if (showcaseCollection)\n $scope.showcasesCollection = _.orderBy(showcaseCollection, ['priority'], ['desc']);\n\n $scope.application.currentShowcase = _parseShowcase(showcaseCollection[0]);\n })\n });\n\n $scope.showcaseWatcher = $scope.$watch('application.currentShowcase.id', function (newValue, oldValue) {\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.availableGroups = collection\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n $scope.showcasesCollection.forEach(_parseShowcase);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n });\n\n $scope.appWatcher = $scope.$watchCollection('applications.platform', function (newValue, oldValue) {\n\n ShowcaseService.GetScreens(newValue.id)\n .then(function (screensCollection) {\n $scope.screensCollection = screensCollection;\n\n if (screensCollection.length) {\n $scope.application.currentScreen = $scope.screensCollection[0];\n\n ShowcaseService.GetShowcasesByScreenId($scope.application.currentScreen.id)\n .then(function (showcaseCollection) {\n $scope.showcasesCollection = _.orderBy(showcaseCollection, ['priority'], ['desc']);\n\n $scope.application.currentShowcase = _parseShowcase(showcaseCollection[0]);\n\n GroupService.GetGroups()\n .then(function (collection) {\n $scope.availableGroups = collection\n .map(function (group) {\n return {\n title: group.name,\n id: group.id\n }\n });\n\n $scope.showcasesCollection.forEach(_parseShowcase);\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#activePackageLoader');\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n });\n })\n }\n });\n });\n }],\n link: function (scope, element) {\n element.on('$destroy', function () {\n if (scope.appWatcher) scope.appWatcher();\n if (scope.showcaseWatcher) scope.showcaseWatcher();\n if (scope.screenWatcher) scope.screenWatcher();\n });\n }\n }\n }\n ]);\n","lmApp\n .directive('lmApplicationOttWeb', [\n function () {\n return {\n templateUrl: 'lm-showcase/application-ott-web/application-ott-web.tpl.html',\n restrict: 'E',\n replace: true,\n scope: {\n application: '=?',\n tab: '=?'\n },\n controller: ['$scope', '$rootScope', '$interval', '$templateCache', '$compile', 'ShowcaseService', 'ModalWindowService', 'ToastService', 'ApplicationService', 'ValidatorService',\n function ($scope, $rootScope, $interval, $templateCache, $compile, ShowcaseService, ModalWindowService, ToastService, ApplicationService, ValidatorService) {\n $scope.permissions = $rootScope.permissions;\n $scope.namespace = 'stockweb';\n $scope.newAlias = '';\n\n $scope.rnd = Date.now();\n\n $scope.$watch('application.background', function (newValue, oldValue) {\n if (newValue) {\n if ($scope.bgSlider) $interval.cancel($scope.bgSlider);\n\n if (!$scope.application.background) return;\n\n $scope.application.background.slider._PrivateData.currentItem = 0;\n $scope.bgSlider = $interval(function () {\n if (!$scope.application.background.slider._PrivateData.isEdit) {\n var len = $scope.application.background.slider.slider_items.length;\n var next = $scope.application.background.slider._PrivateData.currentItem + 1;\n $scope.application.background.slider._PrivateData.currentItem = (next < len) ? next : 0;\n }\n }, 5000);\n\n $scope.application.background.slider.slider_items.forEach(function (item) {\n item._PrivateData.filters = {};\n item._PrivateData.searchResult = [];\n item._PrivateData.selectedAsset = {};\n })\n }\n });\n\n $scope.$watch('application.banners', function (newValue, oldValue) {\n if (newValue) {\n if (!$scope.application.banners) return;\n\n $scope.application.banners._PrivateData._CSS = {\n left: 0\n };\n\n $scope.application.banners._PrivateData.firstElement = 0;\n\n $scope.application.banners.slider.slider_items.forEach(function (item) {\n item._PrivateData.filters = {};\n item._PrivateData.searchResult = [];\n item._PrivateData.selectedAsset = {};\n })\n }\n });\n\n $scope.$watch('application.platform.logo_url', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n ApplicationService.UpdatePlatform({logo_url: newValue, id: $scope.application.platform.id})\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo successfully updated',\n color: 'green',\n icon: 'image-area'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo update failed',\n color: 'red',\n icon: 'image-area'\n });\n $rootScope.debugInfo(reason);\n });\n }\n });\n\n $scope.isSuperuser = function () {\n return $rootScope.globals.currentUser && $rootScope.globals.currentUser.isSuperuser;\n };\n\n $scope.changeAppUrl = function (url) {\n ApplicationService.UpdatePlatform({app_url: url, id: $scope.application.platform.id})\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App URL successfully changed',\n color: 'green',\n icon: 'dns'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App URL change failed',\n color: 'red',\n icon: 'dns'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createAlias = function (alias) {\n ApplicationService.CreateCNAME(alias)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n if (!$scope.application.aliases) $scope.application.aliases = []\n $scope.application.aliases.push(alias);\n $scope.application.newAlias = '';\n ToastService.Small({\n title: 'Alias successfully created',\n color: 'green',\n icon: 'dns'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Alias create failed',\n color: 'red',\n icon: 'dns'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.deleteAlias = function (alias) {\n ApplicationService.RemoveCNAME(alias)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n for (var i = 0; i < $scope.application.aliases.length; i++) {\n if ($scope.application.aliases[i] === alias) {\n $scope.application.aliases.splice(i, 1);\n }\n }\n ToastService.Small({\n title: 'Alias successfully removed',\n color: 'green',\n icon: 'dns'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Alias remove failed',\n color: 'red',\n icon: 'dns'\n });\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.editSlider = function (slider, currentItem) {\n if (!slider) return;\n\n var modalScope = $scope.$new();\n\n slider._PrivateData.isEdit = true;\n\n if (!_.isUndefined(currentItem) && currentItem > -1) slider._PrivateData.currentItem = currentItem;\n\n modalScope.isFirst = function () {\n return slider._PrivateData.currentItem === 0;\n };\n\n modalScope.isLast = function () {\n return !(slider._PrivateData.currentItem < slider.slider_items.length - 1);\n };\n\n modalScope.validate = {\n asset: function (item) {\n var errors = {};\n\n if (!item._PrivateData.title) {\n errors.title = true;\n }\n\n if (!item._PrivateData.asset.id) {\n errors.asset = true;\n }\n\n if (!item._PrivateData.picture) {\n errors.picture = 'Required';\n }\n\n return item.errors = errors, errors;\n },\n\n external: function (item) {\n var errors = {};\n\n if (!item._PrivateData.title) {\n errors.title = true;\n }\n\n if (!item._PrivateData.url || !ValidatorService.Url(item._PrivateData.url)) {\n errors.url = 'Invalid URL format. Example: http://www.google.com';\n }\n\n if (!item._PrivateData.picture) {\n errors.picture = 'Required';\n }\n\n return item.errors = errors, errors;\n }\n };\n\n modalScope.prevSlider = function (slider) {\n var prev = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (prev >= 0) ? prev : 0;\n };\n\n modalScope.nextSlider = function (slider) {\n var len = slider.slider_items.length;\n var next = slider._PrivateData.currentItem + 1;\n slider._PrivateData.currentItem = (next < len) ? next : next - 1;\n };\n\n modalScope.isSelectedAsset = function (item, asset) {\n return item._PrivateData.selectedAsset === asset;\n };\n\n modalScope.close = function (slider) {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n slider._PrivateData.isEdit = false;\n ModalWindowService.Close($scope.window, false);\n };\n\n modalScope.openSearch = function (item) {\n item._PrivateData.isSearch = true;\n item._PrivateData.filters.keyword = '';\n };\n\n modalScope.closeSearch = function (item) {\n item._PrivateData.isSearch = false;\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope.addSliderItem = function (slider) {\n var newItem = {\n title: '',\n _PrivateData: {\n widget_type: 'asset',\n title: '',\n filters: {},\n searchResult: [],\n picture: '',\n originPicture: '',\n asset: {},\n url: '',\n text: ''\n },\n isNew: true\n };\n\n slider._PrivateData.hasNewTile = true;\n\n slider.slider_items.push(newItem);\n slider._PrivateData.currentItem = slider.slider_items.length - 1;\n\n return slider;\n };\n\n modalScope.removeSliderItem = function (slider, index) {\n if (modalScope.loading) return;\n\n if (slider.slider_items[index].isNew) {\n slider._PrivateData.hasNewTile = false;\n\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex < 0 ) ? 0 : newIndex;\n\n return;\n }\n\n modalScope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var _ids = slider.slider_items\n .filter(function (item, i) {\n return i !== index;\n })\n .map(function (item) {\n return item.id;\n });\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n modalScope.loading = false;\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex > 0) ? newIndex : 0;\n ToastService.Small({\n title: 'Slider item successfully deleted',\n color: 'green',\n icon: 'delete'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider item delete failed',\n color: 'red',\n icon: 'delete'\n });\n modalScope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n modalScope.processItem = function (data, item) {\n if (item.isNew) {\n modalScope.createNewSliderItem(slider, item);\n } else {\n modalScope.updateWidget(item);\n }\n };\n\n modalScope.createNewSliderItem = function (slider, item) {\n if (modalScope.loading) return;\n\n var promise;\n\n if (item._PrivateData.widget_type === 'asset') {\n if (!_.isEmpty(modalScope.validate.asset(item))) {\n return;\n }\n\n promise = ShowcaseService.CreateAssetWidget(item, $scope.namespace);\n } else if (item._PrivateData.widget_type === 'external') {\n if (!_.isEmpty(modalScope.validate.external(item))) {\n return;\n }\n\n promise = ShowcaseService.CreateExternalWidget(item, $scope.namespace);\n }\n\n modalScope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n promise\n .then(function (response) {\n slider.slider_items[slider._PrivateData.currentItem].id = response.widget.id;\n var _ids = slider.slider_items.map(function (item) {\n return item.id;\n });\n\n item.isNew = false;\n _.assign(item, response.widget);\n\n return ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n slider._PrivateData.hasNewTile = false;\n\n $rootScope.hideLinearProgress('#showcasesLoader');\n modalScope.loading = false;\n ToastService.Small({\n title: 'Slider item successfully created',\n color: 'green',\n icon: 'view-carousel'\n });\n if (item._PrivateData.text) item.text = item._PrivateData.text;\n })\n .catch(function (reason) {\n throw reason;\n });\n\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Slider item creation failed',\n color: 'red',\n icon: 'view-carousel'\n });\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n modalScope.updateWidget = function (item) {\n if (modalScope.loading) return;\n\n var promise;\n if (item._PrivateData.widget_type === 'asset') {\n if (!_.isEmpty(modalScope.validate.asset(item))) {\n return;\n }\n\n promise = ShowcaseService.UpdateAssetWidget(item);\n } else if (item._PrivateData.widget_type === 'external') {\n if (!_.isEmpty(modalScope.validate.external(item))) {\n return;\n }\n\n promise = ShowcaseService.UpdateExternalWidget(item);\n }\n\n promise\n .then(function (response) {\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully updated',\n color: 'green',\n icon: 'view-carousel'\n });\n if (item._PrivateData.text && item.widget_attrs) item.widget_attrs.text = item._PrivateData.text;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'view-carousel'\n });\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n modalScope.selectAsset = function (item, asset) {\n item._PrivateData.selectedAsset = asset;\n };\n\n modalScope.addAssetToTile = function (item) {\n if (!item._PrivateData.selectedAsset) return;\n\n var asset = item._PrivateData.selectedAsset;\n\n item._PrivateData.searchResult = [];\n item._PrivateData.keyword = '';\n item._PrivateData.selectedAsset = {};\n\n item._PrivateData.asset = asset;\n\n if (!item._PrivateData.picture) {\n var pictureResources = asset.resources && asset.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n item._PrivateData.picture = pictureResources[0].source;\n }\n }\n\n item._PrivateData.asset.duration = parseInt(asset.duration / 60, 10);\n\n if (asset.genres) {\n item._PrivateData.asset.genres = asset.genres.map(function (genre) {\n return genre.title;\n });\n }\n\n modalScope.closeSearch(item);\n };\n\n modalScope.data = slider;\n modalScope._tpl_ = $templateCache.get('lm-showcase/application-ott-web/edit-slider.tpl.html');\n\n modalScope._tpl_ = $compile(modalScope._tpl_)(modalScope);\n\n modalScope.slideReorder = function (slider, item, direction) {\n if (modalScope.loading) return;\n\n var index = slider.slider_items.indexOf(item);\n var swap = null;\n\n if (index !== -1 && index + direction >= 0 && index + direction < slider.slider_items.length) {\n $rootScope.showLinearProgress('#showcasesLoader');\n modalScope.loading = true;\n\n swap = slider.slider_items[index + direction];\n slider.slider_items[index + direction] = item;\n slider.slider_items[index] = swap;\n\n slider._PrivateData.currentItem += direction;\n\n var _ids = _.map(slider.slider_items, 'id');\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n modalScope.loading = false;\n\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider\\'s items successfully reordered',\n color: 'green',\n icon: 'view-carousel'\n });\n })\n .catch(function (reason) {\n modalScope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n\n throw reason;\n });\n }\n };\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._tpl_,\n clear: true,\n size: {\n s: 10\n },\n onInit: function () {\n if (currentItem === -1) modalScope.addSliderItem(slider);\n },\n onComplete: function () {\n slider.slider_items.forEach(function (item, index) {\n if (item.isNew) {\n slider.slider_items.splice(index, 1);\n }\n });\n\n slider._PrivateData.currentItem = 0;\n }\n });\n\n modalScope._tpl_.on('$destroy', function () {\n modalScope.$destroy();\n })\n };\n }],\n link: function (scope, element, attrs) {\n scope.slideLeft = function () {\n scope.application.banners._PrivateData.firstElement -= 1;\n if (scope.application.banners._PrivateData.firstElement < 0) {\n scope.application.banners._PrivateData.firstElement = 0;\n }\n scope.application.banners._PrivateData._CSS.left = '-' + (33.333 * scope.application.banners._PrivateData.firstElement) + '%';\n };\n\n scope.slideRight = function () {\n if (scope.application.banners._PrivateData.firstElement !== scope.application.banners.slider.slider_items.length - 2) {\n scope.application.banners._PrivateData.firstElement += 1;\n scope.application.banners._PrivateData._CSS.left = '-' + (33.333 * scope.application.banners._PrivateData.firstElement) + '%';\n }\n };\n }\n }\n }\n ]);\n","lmApp\n .controller('TileAssetController', ['$scope', '$rootScope', '$interval', '$q', 'ShowcaseService', 'AssetService', 'ManageAssetsWindow', 'ToastService',\n function ($scope, $rootScope, $interval, $q, ShowcaseService, AssetService, ManageAssetsWindow, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n return $scope.validateFields;\n };\n\n $scope.openSearch = function (item) {\n ManageAssetsWindow.OpenManageAssetsWindow({\n manageAssetsFn: function (asset, toThis) {\n if ($scope.loading) return;\n\n if (asset.id) {\n $scope.addAssetToTile(item, asset);\n }\n\n return $q.when(true);\n },\n type: 'single',\n title: 'slider item',\n view: 'vod,live',\n currentCollection: [item.banner._PrivateData.asset.id],\n filter: {\n packages: true\n }\n });\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateAssetWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateAssetWidget(item.banner, $scope.namespace)\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n $scope.addAssetToTile = function (tile, asset) {\n tile.banner._PrivateData.uiTitle = asset.title;\n\n if (!tile._PrivateData.isSliderInner) {\n var pictureResources = asset.resources && asset.resources.filter(function (resourse) {\n return resourse.category === 'poster_blueprint';\n });\n\n if (pictureResources && pictureResources.length) {\n tile.banner._PrivateData.picture = pictureResources[0].source;\n }\n\n }\n\n tile.banner._PrivateData.searchResult = [];\n tile.banner._PrivateData.keyword = '';\n tile.banner._PrivateData.selectedAsset = {};\n\n tile.banner._PrivateData.asset = asset;\n tile.banner._PrivateData.asset.duration = parseInt(asset.duration / 60, 10);\n\n if (asset.genres) {\n tile.banner._PrivateData.asset.genres = asset.genres.map(function (genre) {\n return genre.title;\n });\n }\n };\n\n }]);\n","lmApp\n .controller('TileAssetCollectionController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'AssetService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, AssetService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.allCategories = [];\n\n $scope.allShowGenresValues = ShowcaseService._AllShowGenresValues;\n $scope.allSortValues = ShowcaseService._AllSortValues;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n return $scope.validateFields;\n };\n\n AssetService.GetCategoryCollection()\n .then(function (collection) {\n $scope.allCategories = collection.map(function (category) {\n return {\n id: category.extid,\n title: category.title\n }\n });\n $scope.constructor = {\n 'Categories': $scope.allCategories,\n 'Type': ShowcaseService._AllViews\n };\n })\n .catch(function () {\n $scope.constructor = {\n 'Categories': $scope.allCategories,\n 'Type': ShowcaseService._AllViews\n };\n });\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateAssetCollectionWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateAssetCollectionWidget(item.banner, $scope.namespace)\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileBackController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'back')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileEpgController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/epg')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileExternalAppController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n if (!banner._PrivateData.selectedApp.id) {\n $scope.validateFields.app = 'Required filed';\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateExternalAppWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'view-carousel'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'view-carousel'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateExternalAppWidget(item.banner, $scope.namespace)\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'exit-to-app'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileExternalUrlController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ValidatorService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ValidatorService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n if (!banner._PrivateData.url || !ValidatorService.Url(banner._PrivateData.url)) {\n $scope.validateFields.url = 'Invalid URL format. Example: http://www.google.com';\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateExternalWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateExternalWidget(item.banner, $scope.namespace)\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileFavoritesController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/favorites')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileLogoController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.watcher = $scope.$watch('tile.banner._PrivateData.picture', function (newValue, oldValue) {\n if (oldValue && newValue !== oldValue) {\n if ($scope.tile.isNew) {\n ShowcaseService.CreateLogoWidget($scope.tile.banner, $scope.namespace)\n .then(function (response) {\n $scope.tile.banner.id = response.widget.id;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem($scope.tile)\n } else {\n $scope.$parent.createNewTile($scope.tile);\n }\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo create failed',\n color: 'red',\n icon: 'image-area'\n });\n $rootScope.debugInfo(reason);\n });\n } else {\n ShowcaseService.UpdateLogoWidget($scope.tile.banner)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo successfully updated',\n color: 'green',\n icon: 'image-area'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'App logo update failed',\n color: 'red',\n icon: 'image-area'\n });\n $rootScope.debugInfo(reason);\n });\n }\n }\n });\n\n $scope.$on('$destroy', function () {\n $scope.watcher();\n })\n\n }]);\n","lmApp\n .controller('TileNopController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'nop')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileRdvrController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/rdvr')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileRecentController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/recent')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileSearchController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/search')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileSettingsController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'layers'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateUiWidget(item.banner, $scope.namespace, 'ui/settings')\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item.banner.isNew) item.banner.isNew = false;\n if (item.isNew) item.isNew = false;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'layers'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileShowcaseController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n $scope.showcasesCollection = [];\n\n ShowcaseService.GetScreens($rootScope.currentPlatform.id)\n .then(function (screensCollection) {\n $scope.showcasesCollection = screensCollection.map(function (showcase) {\n return {\n title: showcase.title,\n id: showcase.extid || '',\n showcase: {\n id: showcase.id,\n title: showcase.title,\n labels: showcase.extid\n }\n }\n });\n\n if ($scope.showcasesCollection.length) {\n for (var i = 0; i < $scope.showcasesCollection.length; i++) {\n if ($scope.showcasesCollection[i].id === $scope.tile.banner.widget_attrs.showcase) {\n $scope.tile.banner._PrivateData.selectedShowcase = {\n title: $scope.showcasesCollection[i].title,\n id: $scope.showcasesCollection[i].id,\n showcase: {\n id: $scope.showcasesCollection[i].id,\n title: $scope.showcasesCollection[i].title,\n labels: $scope.showcasesCollection[i].showcase.labels\n }\n }\n }\n }\n } else {\n $scope.tile.banner._PrivateData.selectedShowcase = {\n title: '',\n id: null,\n showcase: {\n id: null,\n _PrivateData: {}\n }\n };\n }\n })\n .catch(function (reason) {\n $rootScope.debugInfo(reason, 'silent');\n ToastService.Small({\n title: 'Sorry, some services are unavailable right now. If you\\'re still having problems, try reloading the page',\n color: 'amber',\n icon: 'server-off',\n blocked: true\n }, 1000 * 3);\n $scope.showcasesCollection = [];\n });\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = 'Required filed';\n }\n\n if (!banner._PrivateData.picture) {\n $scope.validateFields.picture = 'Required filed';\n }\n\n if (!banner._PrivateData.selectedShowcase.showcase.id) {\n $scope.validateFields.showcase = 'Required filed';\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (tile) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(tile.banner))) {\n return;\n }\n\n ShowcaseService.UpdateShowcaseWidget(tile.banner)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully update',\n color: 'green',\n icon: 'view-carousel'\n });\n if (!tile._PrivateData.isSliderInner) $scope.close(tile);\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'view-carousel'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item.banner))) {\n return;\n }\n\n ShowcaseService.CreateShowcaseWidget(item.banner, $scope.namespace)\n .then(function (response) {\n item.banner.id = response.widget.id;\n\n if (item._PrivateData.isSliderInner) {\n $scope.$parent.createNewSliderItem(item)\n } else {\n $scope.$parent.createNewTile(item);\n }\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget create failed',\n color: 'red',\n icon: 'view-carousel'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","lmApp\n .controller('TileSliderController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tileWithSlider = $scope.$parent.tile;\n $scope.loading = false;\n\n ShowcaseService.GetAvailableTiles()\n .then(function (collection) {\n $scope.tileWithSliderTypes = [];\n\n $scope.tileWithSliderTypes = collection\n .filter(function (item) {\n return item.type.indexOf($scope.namespace) !== -1;\n })\n .map(function (item) {\n return {\n type: 'banner',\n banner: {\n isNew: true,\n type: 'widget',\n isDefaultDefined: true,\n widget_type: item.type,\n picture: item.picture.default,\n bannerName: ShowcaseService._getWidgetName(item.type),\n widget_attrs: {\n title: _.find(item.attributes, {id: 'title'}) ? _.find(item.attributes, {id: 'title'}).default : 'Title'\n }\n },\n isNew: true\n }\n });\n\n $scope.tileWithSliderTypes = $scope.tileWithSliderTypes\n .map(ShowcaseService._ParseTile)\n .filter(function (widget) {\n return ['asset', 'nop'].indexOf(widget.banner._PrivateData.widget_type) !== -1;\n });\n });\n\n $scope.tileWithSlider.slider._PrivateData.currentItem = 0;\n\n $scope.carusel = $interval(function () {\n if (!$scope.tileWithSlider._PrivateData.isExpand) {\n var len = $scope.tileWithSlider.slider.slider_items.length;\n var next = $scope.tileWithSlider.slider._PrivateData.currentItem + 1;\n $scope.tileWithSlider.slider._PrivateData.currentItem = (next < len) ? next : 0;\n }\n }, 5000);\n\n $scope.tileWithSlider.slider.slider_items.forEach(function (item) {\n item._PrivateData.searchResult = [];\n item._PrivateData.selectedAsset = {};\n });\n\n $scope.isFirst = function (slider) {\n return slider._PrivateData.currentItem === 0;\n };\n\n $scope.isLast = function (slider) {\n return !(slider._PrivateData.currentItem < slider.slider_items.length - 1);\n };\n\n $scope.prevSlider = function (slider) {\n var prev = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (prev >= 0) ? prev : 0;\n };\n\n $scope.nextSlider = function (slider) {\n var len = slider.slider_items.length;\n var next = slider._PrivateData.currentItem + 1;\n slider._PrivateData.currentItem = (next < len) ? next : next - 1;\n };\n\n $scope.isSelectedAsset = function (item, asset) {\n return item._PrivateData.selectedAsset === asset;\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n $scope.addSliderItem = function (slider, item) {\n var currentItem = angular.copy(item);\n\n slider._PrivateData.hasNewTile = true;\n\n currentItem._PrivateData.isExpand = true;\n currentItem._PrivateData.isSliderInner = true;\n\n slider.slider_items.push(currentItem);\n slider._PrivateData.currentItem = slider.slider_items.length - 1;\n\n return slider;\n };\n\n $scope.removeSliderItem = function (slider, index) {\n if ($scope.loading) return;\n\n if (slider.slider_items[index].isNew) {\n slider._PrivateData.hasNewTile = false;\n\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex < 0 ) ? 0 : newIndex;\n\n return;\n }\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var _ids = slider.slider_items\n .filter(function (item, i) {\n return i !== index;\n })\n .map(function (item) {\n return item.id;\n });\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n slider.slider_items.splice(index, 1);\n var newIndex = slider._PrivateData.currentItem - 1;\n slider._PrivateData.currentItem = (newIndex > 0 ) ? newIndex : 0;\n ToastService.Small({\n title: 'Slider item successfully deleted',\n color: 'green',\n icon: 'delete'\n });\n })\n .catch(function (reason) {\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider item delete failed',\n color: 'red',\n icon: 'delete'\n });\n $scope.loading = false;\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.createNewSliderItem = function (item) {\n if ($scope.loading) return;\n\n var promise;\n\n $scope.loading = true;\n $rootScope.showLinearProgress('#showcasesLoader');\n\n var slider = $scope.tileWithSlider.slider;\n\n var _ids = slider.slider_items\n .map(function (item) {\n return item.banner.id;\n });\n\n if (slider.slider_items.length > 1) {\n promise = ShowcaseService.UpdateSlider(slider, _ids);\n } else {\n promise = ShowcaseService.CreateSlider(slider, _ids)\n .then(function (response) {\n slider.id = response.slider.id;\n slider.isNew = false;\n slider._PrivateData.hasNewTile = false;\n item.isNew = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Slider successfully created',\n color: 'green',\n icon: 'view-carousel'\n });\n if (item._PrivateData.text) item.text = item._PrivateData.text;\n\n $scope.$parent.createNewTile($scope.tileWithSlider);\n });\n }\n\n promise\n .then(function (response) {\n slider._PrivateData.hasNewTile = false;\n item.isNew = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $scope.loading = false;\n ToastService.Small({\n title: 'Slider item successfully created',\n color: 'green',\n icon: 'view-carousel'\n });\n if (item._PrivateData.text) item.text = item._PrivateData.text;\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Slider item creation failed',\n color: 'red',\n icon: 'view-carousel'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.slideReorder = function (slider, item, direction) {\n if ($scope.loading) return;\n\n var index = slider.slider_items.indexOf(item);\n var swap = null;\n\n if (index !== -1 && index + direction >= 0 && index + direction < slider.slider_items.length) {\n $rootScope.showLinearProgress('#showcasesLoader');\n $scope.loading = true;\n\n swap = slider.slider_items[index + direction];\n slider.slider_items[index + direction] = item;\n slider.slider_items[index] = swap;\n\n slider._PrivateData.currentItem += direction;\n\n var _ids = _.map(slider.slider_items, 'id');\n\n ShowcaseService.UpdateSlider(slider, _ids)\n .then(function (response) {\n $scope.loading = false;\n\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Slider\\'s items successfully reordered',\n color: 'green',\n icon: 'view-carousel'\n });\n })\n .catch(function (reason) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n\n throw reason;\n });\n }\n };\n\n $scope.$on('$destroy', function () {\n $interval.cancel($scope.carusel);\n })\n }]);\n","lmApp\n .controller('TileSupportController', ['$scope', '$rootScope', '$interval', 'ShowcaseService', 'ToastService',\n function ($scope, $rootScope, $interval, ShowcaseService, ToastService) {\n\n $scope.namespace = 'stockmob';\n $scope.tile = $scope.$parent.tile;\n $scope.loading = false;\n\n $scope.validate = function (banner) {\n $scope.validateFields = {};\n\n if (!banner._PrivateData.uiTitle) {\n $scope.validateFields.uiTitle = true;\n }\n\n return $scope.validateFields;\n };\n\n $scope.updateWidget = function (item) {\n if ($scope.loading) return;\n\n if (!_.isEmpty($scope.validate(item))) {\n return;\n }\n\n ShowcaseService.UpdateUiWidget(item)\n .then(function (response) {\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n ToastService.Small({\n title: 'Widget successfully updated',\n color: 'green',\n icon: 'view-carousel'\n });\n })\n .catch(function (reason) {\n ToastService.Small({\n title: 'Widget update failed',\n color: 'red',\n icon: 'view-carousel'\n });\n $scope.loading = false;\n $rootScope.hideLinearProgress('#showcasesLoader');\n $rootScope.debugInfo(reason);\n });\n };\n\n $scope.close = function (tile, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if ($scope.loading) return;\n\n if (tile.isNew) {\n $scope.$parent.deleteTile(tile, event)\n } else {\n $scope.$parent.collapseTile(tile);\n }\n };\n\n }]);\n","/**\n * Channel Row to LIVE section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.controller('LmChannelRowController', ['$rootScope', '$scope', '$interval', '$location', '$timeout', '$compile', '$templateCache', 'AssetService', 'MetadataService', 'ModalWindowService', 'AssetResource',\n function ($rootScope, $scope, $interval, $location, $timeout, $compile, $templateCache, AssetService, MetadataService, ModalWindowService, AssetResource) {\n $scope.version = jwplayer && jwplayer.version.split('+')[0] || '';\n\n if (!$scope.asset || $scope.isHeader) {\n return;\n }\n\n $scope.actionShown = false;\n\n $scope.parseChannelAsset = function (asset) {\n\n $scope.assetData = angular.copy(asset);\n $scope.prepareChannelStatus();\n\n if (!$scope.posterData) $scope.posterData = {};\n\n var needUpdate = $scope.assetData._status.streams.filter(function (stream) {\n\n return stream._is_transcoding || !stream.is_deployed;\n });\n\n if ($scope.updateIntreval && !needUpdate.length && $scope.assetData._status.poster) {\n $interval.cancel($scope.updateIntreval);\n } else if (needUpdate.length || !$scope.assetData._status.poster) {\n\n if ($scope.updateIntreval) {\n $interval.cancel($scope.updateIntreval);\n }\n\n $scope.updateIntreval = $interval(function () {\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: $scope.assetData.id,\n isSilentUpdate: true\n });\n }, 30 * 1000);\n }\n\n AssetService.GetPoster(asset)\n .then(function (url) {\n $scope.posterData.t = _.get(_.find(asset.resources, {type: 'picture'}), 'uptime_time') || Date.now();\n $scope.posterData.url = url;\n });\n };\n\n $scope.prepareChannelStatus = function () {\n $scope.assetData._status = {\n streams: $scope.assetData.resources.filter(function (resource) {\n return resource.type === 'stream' && !resource.category;\n }).map(function (resource) {\n if (resource.stream_type.indexOf('youtube') !== -1) {\n $scope.assetData._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n\n resource._stream_type = MetadataService._STREAM_TYPES_ATTRS[resource.stream_type];\n\n return resource;\n }),\n poster: _.find($scope.assetData.resources, {category: 'poster_blueprint'}) && _.find($scope.assetData.resources, {category: 'poster_blueprint'}).is_deployed,\n rental: MetadataService.Rental.Check($scope.assetData),\n catchup: _.find($scope.assetData.resources, {\n category: 'catchup'\n })\n };\n\n };\n\n $scope.streamData = {\n isStreamReady: false,\n status: '',\n isStreamAvailable: function (asset) {\n\n var resources = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && (resource.stream_type === 'hls_live' || resource.stream_type === 'dash_live');\n });\n\n var isDeployedRes = resources && resources.filter(function (resource) {\n return resource.is_deployed;\n });\n\n this.status = '';\n\n switch (true) {\n case !resources || !resources.length:\n this.status = 'No stream data in asset';\n break;\n\n case !isDeployedRes || !isDeployedRes.length:\n this.status = 'Stream is not deployed yet';\n break;\n\n default :\n this.status = '';\n break;\n }\n\n return asset.resources && isDeployedRes && isDeployedRes.length > 0;\n },\n\n closeStream: function (event) {\n var contentTr = angular.element('#jw_player');\n\n if (contentTr.length) {\n $rootScope.watchingAssetId = '';\n contentTr.remove();\n }\n },\n\n openStream: function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (asset.id === $rootScope.watchingAssetId) return;\n\n if (!this.isStreamAvailable(asset)) return;\n\n this.closeStream();\n\n $scope.prepareChannelStatus();\n\n if (asset._status && asset._status.streams.length) {\n\n AssetService.GetStream(asset, asset._status.streams[0].stream_type, asset._status.streams[0].category)\n .then(function (url) {\n $rootScope.watchingAssetId = asset.id;\n var contentTr = angular.element('');\n contentTr.insertAfter(event.currentTarget.parentNode);\n $compile(contentTr)($scope);\n }.bind(this));\n }\n },\n\n changeStream: function (index) {\n if ($scope.assetData._status.streams && $scope.assetData._status.streams[index]) {\n\n AssetService.GetStream($scope.assetData, $scope.assetData._status.streams[index.stream_type], $scope.assetData._status.streams[index].category)\n .then(function (url) {\n $scope.url = url;\n }, function (reason) {\n $scope.playbackError = reason;\n });\n }\n }\n };\n\n $scope.watchStream = function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (asset.id === $rootScope.watchingAssetId) return;\n\n if (!$scope.streamData.isStreamAvailable(asset)) return;\n\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'hls';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n $scope.isHLSSupported = false;\n $scope.hlsResourceId = 0;\n $scope.isDASHSupported = false;\n $scope.dashResourceId = false;\n var licence = $location.protocol() + '://'+ $location.host() + '/discovery:80/sdp/v2/assets/'+asset.id+'/wv-license?auth_token='+lh.common.config.get('authToken');\n $scope.license = licence.replace(/^http:\\/\\//,\"https://\");\n\n var hlsResource = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && resource.stream_type === 'hls_live' && resource.is_deployed;\n });\n if (hlsResource.length) {\n $scope.isHLSSupported = true;\n $scope.hlsResourceId = hlsResource[0].id;\n }\n\n var dashResource = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && resource.stream_type === 'dash_live' && resource.is_deployed;\n });\n if (dashResource.length) {\n $scope.isDASHSupported = true;\n $scope.dashResourceId = dashResource[0].id;\n }\n\n $scope.getHLSStream = function () {\n if (!$scope.isHLSSupported) return;\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'hls';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n AssetResource.getStream({ id: asset.id, resourceId: $scope.hlsResourceId }).$promise\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error;\n }\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getDASHStream = function () {\n if (!$scope.isDASHSupported) return;\n $scope.selectedStream = '';\n $scope.selectedStreamEscaped = '';\n $scope.selectedStreamType = 'dash';\n $scope.selectedStreamError = '';\n $scope.streamLoading = true;\n AssetResource.getStream({ id: asset.id, resourceId: $scope.dashResourceId }).$promise\n .then(function (response) {\n $scope.selectedStream = response.data;\n $scope.selectedStreamEscaped = escape(response.data);\n $scope.selectedStreamError = '';\n $scope.streamLoading = false;\n })\n .catch(function (reason) {\n $scope.streamLoading = false;\n if (reason.data.error) {\n $scope.selectedStreamError = reason.data.error;\n }\n $rootScope.debugInfo(reason, 'silent');\n })\n };\n\n $scope.getHLSStream();\n\n var inner = $templateCache.get('live-watch-stream.tpl.html');\n inner = $compile(inner)($scope);\n\n $scope.window = ModalWindowService.Open({\n content: inner,\n isFixed: true,\n clear: true,\n keyboard: true,\n actions: [\n {\n title: 'Close',\n color: 'red',\n fn: function () {}\n }\n ],\n size: {\n s: 11,\n l: 8\n }\n });\n };\n\n $scope.deleteAsset = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.deleteFn(event);\n };\n\n $scope.parseChannelAsset($scope.asset);\n $scope.prepareChannelStatus();\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function (newValue) {\n if (!newValue) return;\n\n $scope.parseChannelAsset(newValue);\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n $interval.cancel($scope.updateIntreval);\n });\n }\n]);\n\nlmApp.directive('lmChannelRow', ['$compile', 'AssetService', function ($compile, AssetService) {\n return {\n restrict: 'E',\n scope: {\n asset: '=',\n editFn: '&',\n deleteFn: '&',\n isHeader: '='\n },\n replace: true,\n controller: 'LmChannelRowController',\n templateUrl: 'lm-table-rows/channel-row/channel-row.tpl.html'\n };\n}]);\n","/**\n * Modal window directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmCommonAssetRow', [function () {\n return {\n restrict: 'E',\n scope: {\n asset: '=?',\n isHeader: '=?',\n collection: '=?',\n index: '=?',\n isEdit: '@?'\n },\n replace: true,\n link: function (scope, element, attrs, ngModel) {\n },\n controller: 'CommonAssetRowController',\n templateUrl: 'lm-table-rows/common-asset-row/common-asset-row.tpl.html'\n };\n }]);\nlmApp\n .controller('CommonAssetRowController', ['$scope', '$rootScope', '$templateCache', '$compile', 'AssetService', 'MetadataService', 'ModalWindowService',\n function ($scope, $rootScope, $templateCache, $compile, AssetService, MetadataService, ModalWindowService) {\n if ($scope.isHeader) return;\n\n if (!$scope.collection) $scope.collection = [$scope.asset];\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.getType = function (asset) {\n\n switch (true) {\n case asset.type === 'channel':\n return 'channel';\n break;\n\n case asset.type === 'package' && asset.package_type === 'tv_series':\n return 'tv_series';\n break;\n\n case asset.type === 'movie' && !!asset.tv_series_episode:\n return 'tv_episode';\n break;\n\n case asset.type === 'movie':\n return 'movie';\n break;\n\n default:\n return asset.type;\n break\n }\n };\n\n $scope.getAssetType = function (asset) {\n switch (true) {\n case asset.type === 'channel':\n return 'Channel';\n break;\n\n case asset.type === 'package' && asset.package_type === 'tv_series':\n return 'TV Series';\n break;\n\n case asset.type === 'package':\n return 'Package';\n break;\n\n case asset.type === 'movie':\n return 'Movie';\n break;\n }\n };\n\n\n $scope.asset.uiType = $scope.getAssetType($scope.asset);\n\n $scope.asset.type = $scope.getType($scope.asset);\n\n $scope.status = {};\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function(newValue, oldValue) {\n\n $scope.asset.uiType = $scope.getAssetType($scope.asset);\n\n $scope.asset.type = $scope.getType($scope.asset);\n\n if (newValue) AssetService.GetPoster(newValue)\n .then(function (url) {\n $scope.posterData = {\n url: url,\n t: _.get(_.find(newValue.resources, {type: 'picture'}), 'uptime_time') || Date.now()\n }\n });\n\n $scope.status._deployed = {\n stream: newValue.resources.filter(function (resource) {\n return resource.type === 'stream' && resource.stream_type !== 'hls_catchup';\n }).map(function (resource) {\n if (resource.stream_type.indexOf('youtube') !== -1) {\n $scope.asset._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n\n resource._stream_type = $scope._STREAM_TYPES_ATTRS[resource.stream_type];\n\n if (resource.category) resource._stream_sub_type = resource.category[0];\n\n return resource;\n }),\n poster: _.find(newValue.resources, {category: 'poster_blueprint'}) && _.find(newValue.resources, {category: 'poster_blueprint'}).is_deployed\n };\n\n $scope.status._rentalStatus = newValue.rental_status === \"progress\";\n if (!$scope.status._rentalStatus) {\n $scope.status._rentalWindow = MetadataService.Rental.Check(newValue);\n }\n\n });\n\n if (!$scope.isEdit) return;\n\n $scope.openModal = function (assetData, e) {\n if (e && e.preventDefault) e.preventDefault();\n if (e && e.stopPropagation) e.stopPropagation();\n\n if (assetData.type === 'package') return;\n\n var modalScope = $rootScope.$new();\n\n modalScope.currentFocused = $scope.index || -1;\n modalScope.localCollection = $scope.collection || [];\n\n modalScope.asset = angular.copy(assetData);\n modalScope.asset._PrivateData = {};\n\n modalScope.loading = false;\n\n modalScope.processAsset = function (asset) {\n if (modalScope.loading) return;\n\n modalScope.updateFn(asset, modalScope.currentFocused)\n .then(function () {\n AssetService.GetAssetById($scope.asset.id)\n .then(function (collection) {\n if (collection.length) {\n var t = $scope.asset._PrivateData;\n $scope.asset = collection[0];\n $scope.asset.uiType = $scope.getAssetType($scope.asset);\n $scope.asset.type = $scope.getType($scope.asset);\n $scope.asset._PrivateData = t;\n }\n });\n });\n };\n\n modalScope.setCurrentQuality = function (asset, value) {\n MetadataService.Quality.SetValue(asset, value);\n };\n\n modalScope.isFirst = function () {\n return !modalScope.currentFocused;\n };\n\n modalScope.isLast = function () {\n return modalScope.localCollection && modalScope.currentFocused === modalScope.localCollection.length - 1;\n };\n\n modalScope.close = function () {\n if (modalScope.loading) return;\n\n modalScope.fullscreenToogle(false);\n ModalWindowService.Close($scope.window, false);\n };\n\n modalScope.fullscreenToogle = function (state) {\n if (typeof state !== 'undefined') {\n modalScope.fullscreen = state;\n } else {\n modalScope.fullscreen = !modalScope.fullscreen;\n }\n\n ModalWindowService.Fullscreen($scope.window, state);\n };\n\n modalScope._modalWindow_ = $templateCache.get('lm-assets-edit/edit-window.tpl.html');\n\n modalScope._modalWindow_ = $compile(modalScope._modalWindow_)(modalScope);\n\n $scope.window = ModalWindowService.Open({\n content: modalScope._modalWindow_,\n navigation: $compile($templateCache.get('lm-assets-edit/navigation-buttons.tpl.html'))(modalScope),\n clear: true,\n keyboard: true,\n size: {\n s: 11,\n l: 10\n }\n });\n\n modalScope._modalWindow_.on('$destroy', function () {\n modalScope.$destroy();\n });\n };\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n });\n }]);\n","/**\n * Movie Row to VOD section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.directive('lmMovieRow', function () {\n return {\n restrict: 'E',\n scope: {\n asset: '=',\n editFn: '&',\n deleteFn: '&',\n isHeader: '='\n },\n replace: true,\n controller: 'LmMovieRowController',\n templateUrl: 'lm-table-rows/movie-row/movie-row.tpl.html'\n };\n});\n\n lmApp.controller('LmMovieRowController', ['$rootScope', '$scope', '$interval', '$timeout', '$compile', 'AssetService', 'MetadataService',\n function ($rootScope, $scope, $interval, $timeout, $compile, AssetService, MetadataService) {\n\n $scope.version = jwplayer && jwplayer.version.split('+')[0] || '';\n\n if (!$scope.asset || $scope.isHeader) {\n return;\n }\n\n $scope.actionShown = false;\n\n $scope.parseMovieAsset = function (asset) {\n\n $scope.assetData = angular.copy(asset);\n $scope.prepareMovieStatus();\n\n if (!$scope.posterData) $scope.posterData = {};\n\n var needUpdate = $scope.assetData._status.streams.filter(function (stream) {\n\n return stream._is_transcoding || !stream.is_deployed;\n });\n\n if ($scope.updateIntreval && !needUpdate.length && $scope.assetData._status.poster) {\n $interval.cancel($scope.updateIntreval);\n } else if (needUpdate.length || !$scope.assetData._status.poster) {\n\n if ($scope.updateIntreval) {\n $interval.cancel($scope.updateIntreval);\n }\n\n $scope.updateIntreval = $interval(function () {\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: $scope.assetData.id,\n isSilentUpdate: true\n });\n }, 30 * 1000);\n }\n\n AssetService.GetPoster(asset)\n .then(function (url) {\n $scope.posterData.t = _.get(_.find(asset.resources, {type: 'picture'}), 'uptime_time') || Date.now();\n $scope.posterData.url = url;\n });\n };\n\n $scope.prepareMovieStatus = function () {\n $scope.assetData._status = {\n streams: $scope.assetData.resources.filter(function (resource) {\n return resource.type === 'stream';\n }).map(function (resource) {\n if (resource.stream_type.indexOf('youtube') !== -1) {\n $scope.assetData._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n\n resource._stream_type = MetadataService._STREAM_TYPES_ATTRS[resource.stream_type];\n\n if (resource.category) resource._stream_sub_type = resource.category[0];\n\n resource._is_transcoding = !!resource.noisypeak_job && (resource.noisypeak_job_error || !resource.noisypeak_job_is_complete);\n\n if (resource._is_transcoding) {\n resource._transcoding = resource.noisypeak_job_error ? resource.noisypeak_job_error : resource.noisypeak_job_progress.toString() + '% transcoding';\n }\n\n return resource;\n }),\n poster: _.find($scope.assetData.resources, {category: 'poster_blueprint'}) && _.find($scope.assetData.resources, {category: 'poster_blueprint'}).is_deployed,\n rental: MetadataService.Rental.Check($scope.assetData)\n };\n };\n\n $scope.streamData = {\n isStreamReady: false,\n status: '',\n isStreamAvailable: function (asset) {\n\n var resources = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && (resource.stream_type === 'hls' || resource.stream_type === 'dash');\n });\n\n var isDeployedRes = resources && resources.filter(function (resource) {\n return resource.is_deployed;\n });\n\n this.status = '';\n\n switch (true) {\n case !resources || !resources.length:\n this.status = 'No stream data in asset';\n break;\n\n case !isDeployedRes || !isDeployedRes.length:\n this.status = 'Stream is not deployed yet';\n break;\n\n default :\n this.status = '';\n break;\n }\n\n return asset.resources && isDeployedRes && isDeployedRes.length > 0;\n },\n\n closeStream: function (event) {\n var contentTr = angular.element('#jw_player');\n\n if (contentTr.length) {\n $rootScope.watchingAssetId = '';\n contentTr.remove();\n }\n },\n\n openStream: function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (asset.id === $rootScope.watchingAssetId) return;\n\n if (!this.isStreamAvailable(asset)) return;\n\n this.closeStream();\n\n $scope.prepareMovieStatus();\n\n if (asset._status && asset._status.streams.length) {\n\n AssetService.GetStream(asset, asset._status.streams[0].stream_type, asset._status.streams[0].category)\n .then(function (url) {\n $rootScope.watchingAssetId = asset.id;\n var contentTr = angular.element('');\n contentTr.insertAfter(event.currentTarget.parentNode);\n $compile(contentTr)($scope);\n }.bind(this));\n }\n },\n\n changeStream: function (index) {\n if ($scope.assetData._status.streams && $scope.assetData._status.streams[index]) {\n\n AssetService.GetStream($scope.assetData, $scope.assetData._status.streams[index.stream_type], $scope.assetData._status.streams[index].category)\n .then(function (url) {\n $scope.url = url;\n }, function (reason) {\n $scope.playbackError = reason;\n });\n }\n }\n };\n\n $scope.deleteAsset = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.deleteFn(event);\n };\n\n $scope.parseMovieAsset($scope.asset);\n $scope.prepareMovieStatus();\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function (newValue) {\n if (!newValue) return;\n\n $scope.parseMovieAsset(newValue);\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n $interval.cancel($scope.updateIntreval);\n });\n\n }]);\n","/**\n * Modal window directive for Edit functionality\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmPlaylistAssetRow', [function () {\n return {\n restrict: 'E',\n scope: {\n asset: '=?',\n isHeader: '=?'\n },\n replace: true,\n controller: 'PlaylistAssetRowController',\n templateUrl: 'lm-table-rows/playlist-asset-row/playlist-asset-row.tpl.html'\n };\n }]);\nlmApp\n .controller('PlaylistAssetRowController', ['$scope', '$rootScope', '$templateCache', '$compile', 'AssetService', 'MetadataService',\n function ($scope, $rootScope, $templateCache, $compile, AssetService, MetadataService) {\n if ($scope.isHeader) return;\n\n $scope._STREAM_TYPES_ATTRS = MetadataService._STREAM_TYPES_ATTRS;\n\n $scope.status = {};\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function(newValue, oldValue) {\n\n if (newValue.resources) {\n AssetService.GetPoster(newValue)\n .then(function (url) {\n $scope.posterData = {\n url: url,\n t: _.get(_.find(newValue.resources, {type: 'picture'}), 'uptime_time') || Date.now()\n }\n });\n\n $scope.status._deployed = {\n stream: newValue.resources.filter(function (resource) {\n\n return resource.type === 'stream';\n })\n };\n }\n\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n });\n }]);\n","/**\n * Tv Episode Row to VOD section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.controller('LmTvEpisodeRowController', ['$rootScope', '$scope', '$interval', '$timeout', '$compile', 'AssetService', 'MetadataService',\n function ($rootScope, $scope, $interval, $timeout, $compile, AssetService, MetadataService) {\n $scope.version = jwplayer && jwplayer.version.split('+')[0] || '';\n\n if (!$scope.asset || $scope.isHeader) {\n return;\n }\n\n $scope.actionShown = false;\n\n $scope.parseTvEpisodeRow = function (asset) {\n\n $scope.assetData = angular.copy(asset);\n $scope.prepareTvEpisodeRowStatus();\n\n if (!$scope.posterData) $scope.posterData = {};\n\n var needUpdate = $scope.assetData._status.streams.filter(function (stream) {\n\n return stream._is_transcoding || !stream.is_deployed;\n });\n\n if ($scope.updateIntreval && !needUpdate.length && $scope.assetData._status.poster) {\n $interval.cancel($scope.updateIntreval);\n } else if (needUpdate.length || !$scope.assetData._status.poster) {\n\n if ($scope.updateIntreval) {\n $interval.cancel($scope.updateIntreval);\n }\n\n $scope.updateIntreval = $interval(function () {\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: $scope.assetData.id,\n isSilentUpdate: true,\n isEpisode: true,\n season: {}\n });\n }, 30 * 1000);\n }\n\n AssetService.GetPoster(asset)\n .then(function (url) {\n $scope.posterData.t = _.get(_.find(asset.resources, {type: 'picture'}), 'uptime_time') || Date.now();\n $scope.posterData.url = url;\n });\n };\n\n $scope.prepareTvEpisodeRowStatus = function () {\n $scope.assetData._status = {\n streams: $scope.assetData.resources.filter(function (resource) {\n return resource.type === 'stream';\n }).map(function (resource) {\n if (resource.stream_type.indexOf('youtube') !== -1) {\n $scope.assetData._has_youtube = true;\n resource.stream_type = 'youtube';\n resource._stream_sub_type = 'y';\n }\n\n resource._stream_type = MetadataService._STREAM_TYPES_ATTRS[resource.stream_type];\n\n if (resource.category) resource._stream_sub_type = resource.category[0];\n\n resource._is_transcoding = !!resource.noisypeak_job && (resource.noisypeak_job_error || !resource.noisypeak_job_is_complete);\n\n if (resource._is_transcoding) {\n resource._transcoding = resource.noisypeak_job_error ? resource.noisypeak_job_error : resource.noisypeak_job_progress.toString() + '% transcoding';\n }\n\n return resource;\n }),\n poster: _.find($scope.assetData.resources, {category: 'poster_blueprint'}) && _.find($scope.assetData.resources, {category: 'poster_blueprint'}).is_deployed,\n rental: MetadataService.Rental.Check($scope.assetData)\n };\n };\n\n $scope.streamData = {\n isStreamReady: false,\n status: '',\n isStreamAvailable: function (asset) {\n\n var resources = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && resource.stream_type === 'hls';\n });\n\n var isDeployedRes = resources && resources.filter(function (resource) {\n return resource.is_deployed;\n });\n\n this.status = '';\n\n switch (true) {\n case !resources || !resources.length:\n this.status = 'No stream data in asset';\n break;\n\n case !isDeployedRes || !isDeployedRes.length:\n this.status = 'Stream is not deployed yet';\n break;\n\n default :\n this.status = '';\n break;\n }\n\n return asset.resources && isDeployedRes && isDeployedRes.length > 0;\n },\n\n closeStream: function (event) {\n var contentTr = angular.element('#jw_player');\n\n if (contentTr.length) {\n $rootScope.watchingAssetId = '';\n contentTr.remove();\n }\n },\n\n openStream: function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (asset.id === $rootScope.watchingAssetId) return;\n\n if (!this.isStreamAvailable(asset)) return;\n\n this.closeStream();\n\n $scope.prepareTvEpisodeRowStatus();\n\n if (asset._status && asset._status.streams.length) {\n\n AssetService.GetStream(asset, asset._status.streams[0].stream_type, asset._status.streams[0].category)\n .then(function (url) {\n $rootScope.watchingAssetId = asset.id;\n var contentTr = angular.element('');\n contentTr.insertAfter(event.currentTarget.parentNode);\n $compile(contentTr)($scope);\n }.bind(this));\n }\n },\n\n changeStream: function (index) {\n if ($scope.assetData._status.streams && $scope.assetData._status.streams[index]) {\n\n AssetService.GetStream($scope.assetData, $scope.assetData._status.streams[index.stream_type], $scope.assetData._status.streams[index].category)\n .then(function (url) {\n $scope.url = url;\n }, function (reason) {\n $scope.playbackError = reason;\n });\n }\n }\n };\n\n $scope.deleteAsset = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.deleteFn(event);\n };\n\n $scope.parseTvEpisodeRow($scope.asset);\n $scope.prepareTvEpisodeRowStatus();\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function (newValue) {\n if (!newValue) return;\n\n $scope.parseTvEpisodeRow(newValue);\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n $interval.cancel($scope.updateIntreval);\n });\n\n }]);\n\nlmApp.\n directive('lmTvEpisodeRow', ['$compile', 'AssetService', function ($compile, AssetService) {\n return {\n restrict: 'E',\n scope: {\n asset: '=',\n season: '=',\n editFn: '&',\n deleteFn: '&',\n isHeader: '='\n },\n replace: true,\n controller: 'LmTvEpisodeRowController',\n templateUrl: 'lm-table-rows/tv-episode-row/tv-episode-row.tpl.html'\n };\n }]);\n","/**\n * Tv Season Row to VOD section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.\n directive('lmTvSeasonRow', [function () {\n return {\n restrict: 'E',\n scope: true,\n replace: true,\n link: function (scope, element, attrs, ngModel) {\n scope.season = scope.$eval(attrs.season);\n },\n controller: 'LmSeasonEditController',\n templateUrl: 'lm-table-rows/tv-season-row/tv-season-row.tpl.html'\n };\n }]);\n\nlmApp\n .controller('LmSeasonEditController', ['$scope', '$rootScope', '$timeout', '$q', 'AssetService', 'MetadataService',\n function ($scope, $rootScope, $timeout, $q, AssetService, MetadataService) {\n\n $scope._STREAM_TYPES_ATTRS = {\n 'dash': {\n title: 'DASH',\n placeholder: 'Example: http://transcoder.net/content/playlist.m3u8'\n },\n 'hls': {\n title: 'HLS',\n placeholder: 'Example: http://transcoder.net/content/output.mpd'\n },\n 'youtube': {\n title: 'Youtube',\n placeholder: 'Example: https://www.youtube.com/user/ChannelName'\n }\n };\n\n $scope.createSeason = function (parent) {\n parent.newSeason._Parent = {};\n parent.newSeason._Parent.title = parent.title;\n parent.newSeason._Parent.id = parent.id;\n parent.newSeason.isEdit = true;\n };\n\n $scope.editSeason = function (season, parent) {\n if (season.isEdit) {\n season.isEdit = false;\n return;\n }\n season._Parent.title = parent.title;\n season._Parent.id = parent.id;\n season.isEdit = true;\n };\n\n $scope.saveSeason = function (season) {\n if (season.isNew) {\n var ext_id = \"personal:\" + CryptoJS.MD5(season.title + season._Parent.title).toString(CryptoJS.enc.Hex);\n AssetService.CreateNewTVSeason(ext_id, season, {id: season._Parent.id, season_index: season.index})\n .then(function () {\n season.isEdit = false;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {id: 'all', timestamp: Date.now()});\n });\n } else {\n AssetService.UpdateTVSeasonMetadata(season, {\n id: season._Parent.id,\n season_id: season.id,\n season_index: season.index\n })\n .then(function () {\n season.isEdit = false;\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {id: 'all', timestamp: Date.now()});\n });\n }\n };\n\n $scope.toggleEpisodes = function (season) {\n if (!season.isShowen) {\n\n var idToGet = season.episodes.filter(function (ep) {\n return typeof ep !== 'object';\n });\n\n if (season.episodes.length && !idToGet.length) {\n season.isShowen = !season.isShowen;\n } else {\n $rootScope.showLinearProgress('#seasonLoader' + season.id);\n season.episodesQ = !season.episodes.length ? $q.when([]) : AssetService.GetAssetInId(idToGet);\n season.episodesQ\n .then(function (collection) {\n\n season.episodes = season.episodes.map(function (ep) {\n if (typeof ep !== 'object') {\n return _.find(collection, {id: ep});\n } else {\n return ep\n }\n });\n\n season.episodes = season.episodes.map(function (episode, index) {\n episode._PrivateData = {};\n\n episode.type = $scope.getAssetType(episode);\n episode._Parent = season._Parent;\n episode._Parent.currentSeason = season.id;\n return episode;\n });\n\n $rootScope.hideLinearProgress('#seasonLoader' + season.id);\n season.isShowen = !season.isShowen;\n delete season.episodesQ;\n }, function (reason) {\n $rootScope.debugInfo(reason);\n });\n }\n } else {\n season.isShowen = !season.isShowen;\n }\n };\n }]);\n","/**\n * TV Series Row to VOD section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.controller('LmTvSeriesRowController', ['$rootScope', '$scope', '$interval', '$timeout', '$compile', 'AssetService', 'MetadataService',\n function ($rootScope, $scope, $interval, $timeout, $compile, AssetService, MetadataService) {\n\n if (!$scope.asset || $scope.isHeader) {\n return;\n }\n\n $scope.actionShown = false;\n\n $scope.parseTvSeriesAsset = function (asset) {\n\n $scope.assetData = angular.copy(asset);\n $scope.prepareTvSeriesStatus();\n\n if (!$scope.posterData) $scope.posterData = {};\n\n if ($scope.updateIntreval && $scope.assetData._status.poster) {\n $interval.cancel($scope.updateIntreval);\n } else if (!$scope.assetData._status.poster) {\n\n if ($scope.updateIntreval) {\n $interval.cancel($scope.updateIntreval);\n }\n\n $scope.updateIntreval = $interval(function () {\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_VOD_COLLECTION, {\n id: $scope.assetData.id,\n isSilentUpdate: true\n });\n }, 30 * 1000);\n }\n\n AssetService.GetPoster(asset)\n .then(function (url) {\n $scope.posterData.t = _.get(_.find(asset.resources, {type: 'picture'}), 'uptime_time') || Date.now();\n $scope.posterData.url = url;\n });\n };\n\n $scope.prepareTvSeriesStatus = function () {\n $scope.assetData._status = {\n poster: _.find($scope.assetData.resources, {category: 'poster_blueprint'}) && _.find($scope.assetData.resources, {category: 'poster_blueprint'}).is_deployed,\n rental: MetadataService.Rental.Check($scope.assetData)\n };\n };\n\n $scope.deleteAsset = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.deleteFn(event);\n };\n\n $scope.showSeasons= function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.assetData._PrivateData.seasonsShow = !$scope.assetData._PrivateData.seasonsShow;\n\n $scope.expandFn(event);\n };\n\n $scope.parseTvSeriesAsset($scope.asset);\n $scope.prepareTvSeriesStatus();\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function (newValue) {\n if (!newValue) return;\n\n $scope.parseTvSeriesAsset(newValue);\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n $interval.cancel($scope.updateIntreval);\n });\n}]);\n\nlmApp.\n directive('lmTvSeriesRow', function () {\n return {\n restrict: 'E',\n scope: {\n asset: '=',\n editFn: '&',\n deleteFn: '&',\n expandFn: '&',\n isHeader: '='\n },\n replace: true,\n controller: 'LmTvSeriesRowController',\n templateUrl: 'lm-table-rows/tv-series-row/tv-series-row.tpl.html'\n };\n });\n","/**\n * Virtual Channel Row to LIVE section\n * Created by\n * @author Art Yunishev\n * on 30.01.2015-19:42\n */\n\nlmApp.controller('LmVirtualChannelRowController', ['$rootScope', '$scope', '$interval', '$timeout', '$compile', 'AssetService', 'MetadataService',\n function ($rootScope, $scope, $interval, $timeout, $compile, AssetService, MetadataService) {\n\n if (!$scope.asset || $scope.isHeader) {\n return;\n }\n\n $scope.actionShown = false;\n\n $scope.parsePlaylistState = function (state) {\n if (['processing', 'penging'].indexOf(state) !== -1) {\n return 'penging';\n }\n if (['failed'].indexOf(state) !== -1) {\n return 'failed';\n }\n if (['running'].indexOf(state) !== -1) {\n return 'running';\n }\n if (['stopped'].indexOf(state) !== -1) {\n return 'stopped';\n }\n\n return 'unknown';\n };\n\n $scope.parseVirtualChannelAsset = function (asset) {\n\n $scope.assetData = angular.copy(asset);\n $scope.prepareVirtualChannelStatus();\n\n if (!$scope.posterData) $scope.posterData = {};\n\n var needUpdate = !$scope.assetData._status.playlist || $scope.assetData._status.playlist.state !== 'running';\n\n if ($scope.updateIntreval && !needUpdate && $scope.assetData._status.poster) {\n $interval.cancel($scope.updateIntreval);\n } else if (needUpdate || !$scope.assetData._status.poster) {\n\n if ($scope.updateIntreval) {\n $interval.cancel($scope.updateIntreval);\n }\n\n $scope.updateIntreval = $interval(function () {\n\n $rootScope.$broadcast($rootScope.EVENTS.UPDATE_LIVE_COLLECTION, {\n id: $scope.assetData.id,\n isSilentUpdate: true\n });\n }, 30 * 1000);\n }\n\n AssetService.GetPoster(asset)\n .then(function (url) {\n $scope.posterData.t = _.get(_.find(asset.resources, {type: 'picture'}), 'uptime_time') || Date.now();\n $scope.posterData.url = url;\n });\n };\n\n $scope.prepareVirtualChannelStatus = function () {\n $scope.assetData._status = {\n streams: $scope.assetData.resources.filter(function (resource) {\n return resource.type === 'stream' && !resource.category;\n }).map(function (resource) {\n\n resource._stream_type = MetadataService._STREAM_TYPES_ATTRS[resource.stream_type];\n\n return resource;\n }),\n poster: _.find($scope.assetData.resources, {category: 'poster_blueprint'}) && _.find($scope.assetData.resources, {category: 'poster_blueprint'}).is_deployed,\n rental: MetadataService.Rental.Check($scope.assetData)\n };\n\n if (!_.isEmpty($scope.asset._playlist)) {\n $scope.assetData._status.playlist = {\n error: $scope.asset._playlist.error,\n state: $scope.parsePlaylistState($scope.asset._playlist.status),\n warnings: _.get($scope.asset, '_playlist.warnings', []).reduce(function (result, value) {\n\n return result + value + '
    '\n }, '')\n }\n }\n };\n\n $scope.streamData = {\n isStreamReady: false,\n watchingAssetId: '',\n status: '',\n isStreamAvailable: function (asset) {\n\n var resources = asset.resources && asset.resources.filter(function (resource) {\n return resource.type === 'stream' && resource.stream_type === 'hls_live';\n });\n\n var isDeployedRes = resources && resources.filter(function (resource) {\n return resource.is_deployed;\n });\n\n this.status = '';\n\n switch (true) {\n case !resources || !resources.length:\n this.status = 'No stream data in asset';\n break;\n\n case !isDeployedRes || !isDeployedRes.length:\n this.status = 'Stream is not deployed yet';\n break;\n\n default :\n this.status = '';\n break;\n }\n\n return asset.resources && isDeployedRes && isDeployedRes.length > 0;\n },\n\n closeStream: function (event) {\n var contentTr = angular.element('#jw_player');\n\n if (contentTr.length) {\n $scope.streamData.watchingAssetId = '';\n contentTr.remove();\n }\n },\n\n openStream: function (asset, event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n if (asset.id === $scope.streamData.watchingAssetId) return;\n\n if (!this.isStreamAvailable(asset)) return;\n\n this.closeStream();\n\n $scope.prepareVirtualChannelStatus();\n\n if (asset._status && asset._status.streams.length) {\n\n AssetService.GetStream(asset, asset._status.streams[0].stream_type, asset._status.streams[0].category)\n .then(function (url) {\n $scope.streamData.watchingAssetId = asset.id;\n var contentTr = angular.element('');\n contentTr.insertAfter(event.currentTarget.parentNode);\n $compile(contentTr)($scope);\n }.bind(this));\n }\n },\n\n changeStream: function (index) {\n if ($scope.assetData._status.streams && $scope.assetData._status.streams[index]) {\n\n AssetService.GetStream($scope.assetData, $scope.assetData._status.streams[index.stream_type], $scope.assetData._status.streams[index].category)\n .then(function (url) {\n $scope.url = url;\n }, function (reason) {\n $scope.playbackError = reason;\n });\n }\n }\n };\n\n $scope.deleteAsset = function (event) {\n if (event && event.stopPropagation) event.stopPropagation();\n if (event && event.preventDefault) event.preventDefault();\n\n $scope.deleteFn(event);\n };\n\n $scope.parseVirtualChannelAsset($scope.asset);\n $scope.prepareVirtualChannelStatus();\n\n $scope.assetWatcher = $scope.$watchCollection('asset', function (newValue) {\n if (!newValue) return;\n\n $scope.parseVirtualChannelAsset(newValue);\n });\n\n\n $scope.playlistWatcher = $scope.$watchCollection('playlist', function (newValue) {\n if (!newValue) return;\n\n $scope.parseVirtualChannelAsset($scope.asset);\n });\n\n $scope.$on('$destroy', function () {\n $scope.assetWatcher();\n $scope.playlistWatcher();\n $interval.cancel($scope.updateIntreval);\n });\n }]);\n\nlmApp.directive('lmVirtualChannelRow', function () {\n return {\n restrict: 'E',\n scope: {\n asset: '=',\n playlist: '=',\n editFn: '&',\n deleteFn: '&',\n isHeader: '='\n },\n replace: true,\n controller: 'LmVirtualChannelRowController',\n templateUrl: 'lm-table-rows/virtual-channel-row/virtual-channel-row.tpl.html'\n };\n});\n","angular.element(document).ready(function () {\n angular.bootstrap(document, ['lmApp']);\n});\n"]}