define(['datetime', 'itemHelper', 'css!./indicators.css', 'material-icons'], function (datetime, itemHelper) { 'use strict'; function enableProgressIndicator(item) { if (item.MediaType === 'Video') { if (item.Type !== 'TvChannel') { return true; } } if (item.Type === 'AudioBook' || item.Type === 'AudioPodcast') { return true; } return false; } function getProgressHtml(pct, options) { var containerClass = 'itemProgressBar'; if (options) { if (options.containerClass) { containerClass += ' ' + options.containerClass; } } return '
'; } function getAutoTimeProgressHtml(pct, options, isRecording, start, end) { var containerClass = 'itemProgressBar'; if (options) { if (options.containerClass) { containerClass += ' ' + options.containerClass; } } var foregroundClass = 'itemProgressBarForeground'; if (isRecording) { foregroundClass += ' itemProgressBarForeground-recording'; } return '
'; } function getProgressBarHtml(item, options) { var pct; if (enableProgressIndicator(item) && item.Type !== "Recording") { var userData = options ? (options.userData || item.UserData) : item.UserData; if (userData) { pct = userData.PlayedPercentage; if (pct && pct < 100) { return getProgressHtml(pct, options); } } } if ((item.Type === 'Program' || item.Type === 'Timer' || item.Type === 'Recording') && item.StartDate && item.EndDate) { var startDate = 0; var endDate = 1; try { startDate = datetime.parseISO8601Date(item.StartDate).getTime(); endDate = datetime.parseISO8601Date(item.EndDate).getTime(); } catch (err) { console.log(err); } var now = new Date().getTime(); var total = endDate - startDate; pct = 100 * ((now - startDate) / total); if (pct > 0 && pct < 100) { var isRecording = item.Type === 'Timer' || item.Type === 'Recording' || item.TimerId; return getAutoTimeProgressHtml(pct, options, isRecording, startDate, endDate); } } return ''; } function enablePlayedIndicator(item) { return itemHelper.canMarkPlayed(item); } function getPlayedIndicator(item) { if (enablePlayedIndicator(item)) { var userData = item.UserData || {}; if (userData.UnplayedItemCount) { return '
' + userData.UnplayedItemCount + '
'; } if (userData.PlayedPercentage && userData.PlayedPercentage >= 100 || (userData.Played)) { return '
check
'; } } return ''; } function getCountIndicatorHtml(count) { return '
' + count + '
'; } function getChildCountIndicatorHtml(item, options) { var minCount = 0; if (options) { minCount = options.minCount || minCount; } if (item.ChildCount && item.ChildCount > minCount) { return getCountIndicatorHtml(item.ChildCount); } return ''; } function getTimerIndicator(item) { var status; if (item.Type === 'SeriesTimer') { return 'fiber_smart_record'; } else if (item.TimerId || item.SeriesTimerId) { status = item.Status || 'Cancelled'; } else if (item.Type === 'Timer') { status = item.Status; } else { return ''; } if (item.SeriesTimerId) { if (status !== 'Cancelled') { return 'fiber_smart_record'; } return 'fiber_smart_record'; } return 'fiber_manual_record'; } function getSyncIndicator(item) { if (item.SyncPercent === 100) { return '
file_download
'; } else if (item.SyncPercent != null) { return '
file_download
'; } return ''; } function getTypeIndicator(item) { if (item.Type === 'Video') { return '
videocam
'; } if (item.Type === 'Folder' || item.Type === 'PhotoAlbum') { return '
folder
'; } if (item.Type === 'Photo') { return '
photo
'; } return ''; } function getMissingIndicator(item) { if (item.Type === 'Episode' && item.LocationType === 'Virtual') { if (item.PremiereDate) { try { var premiereDate = datetime.parseISO8601Date(item.PremiereDate).getTime(); if (premiereDate > new Date().getTime()) { return '
Unaired
'; } } catch (err) { console.log(err); } } return '
Missing
'; } return ''; } var ProgressBarPrototype = Object.create(HTMLDivElement.prototype); function onAutoTimeProgress() { var start = parseInt(this.getAttribute('data-starttime')); var end = parseInt(this.getAttribute('data-endtime')); var now = new Date().getTime(); var total = end - start; var pct = 100 * ((now - start) / total); pct = Math.min(100, pct); pct = Math.max(0, pct); var itemProgressBarForeground = this.querySelector('.itemProgressBarForeground'); itemProgressBarForeground.style.width = pct + '%'; } ProgressBarPrototype.attachedCallback = function () { if (this.timeInterval) { clearInterval(this.timeInterval); } if (this.getAttribute('data-automode') === 'time') { this.timeInterval = setInterval(onAutoTimeProgress.bind(this), 60000); } }; ProgressBarPrototype.detachedCallback = function () { if (this.timeInterval) { clearInterval(this.timeInterval); this.timeInterval = null; } }; document.registerElement('emby-progressbar', { prototype: ProgressBarPrototype, extends: 'div' }); return { getProgressHtml: getProgressHtml, getProgressBarHtml: getProgressBarHtml, getPlayedIndicatorHtml: getPlayedIndicator, getChildCountIndicatorHtml: getChildCountIndicatorHtml, enableProgressIndicator: enableProgressIndicator, getTimerIndicator: getTimerIndicator, enablePlayedIndicator: enablePlayedIndicator, getSyncIndicator: getSyncIndicator, getTypeIndicator: getTypeIndicator, getMissingIndicator: getMissingIndicator }; });