1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/components/indicators/indicators.js

178 lines
6.8 KiB
JavaScript
Raw Normal View History

2020-05-04 16:08:52 +05:30
import datetime from 'datetime';
import itemHelper from 'itemHelper';
import 'emby-progressbar';
import 'css!./indicators.css';
import 'material-icons';
export function enableProgressIndicator(item) {
if (item.MediaType === 'Video' && item.Type !== 'TvChannel') {
return true;
}
if (item.Type === 'AudioBook' || item.Type === 'AudioPodcast') {
return true;
}
return false;
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getProgressHtml(pct, options) {
var containerClass = options && options.containerClass ? 'itemProgressBar ' + options.containerClass : 'itemProgressBar';
return '<div class="' + containerClass + '"><div class="itemProgressBarForeground" style="width:' + pct + '%;"></div></div>';
2018-10-23 01:05:09 +03:00
}
function getAutoTimeProgressHtml(pct, options, isRecording, start, end) {
2020-05-04 16:08:52 +05:30
var containerClass = options && options.containerClass ? 'itemProgressBar ' + options.containerClass : 'itemProgressBar';
var foregroundClass = isRecording ? 'itemProgressBarForeground itemProgressBarForeground-recording' : 'itemProgressBarForeground';
return '<div is="emby-progressbar" data-automode="time" data-starttime="' + start + '" data-endtime="' + end + '" class="' + containerClass + '"><div class="' + foregroundClass + '" style="width:' + pct + '%;"></div></div>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getProgressBarHtml(item, options) {
2018-10-23 01:05:09 +03:00
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);
}
}
2018-10-23 01:05:09 +03:00
}
if ((item.Type === 'Program' || item.Type === 'Timer' || item.Type === 'Recording') && item.StartDate && item.EndDate) {
var startDate = 0;
var endDate = 1;
2018-10-23 01:05:09 +03:00
try {
startDate = datetime.parseISO8601Date(item.StartDate).getTime();
endDate = datetime.parseISO8601Date(item.EndDate).getTime();
} catch (err) {
2020-02-16 03:44:43 +01:00
console.error(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);
2018-10-23 01:05:09 +03:00
}
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function enablePlayedIndicator(item) {
return itemHelper.canMarkPlayed(item);
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getPlayedIndicatorHtml(item) {
2018-10-23 01:05:09 +03:00
if (enablePlayedIndicator(item)) {
var userData = item.UserData || {};
if (userData.UnplayedItemCount) {
return '<div class="countIndicator indicator">' + userData.UnplayedItemCount + '</div>';
}
if (userData.PlayedPercentage && userData.PlayedPercentage >= 100 || (userData.Played)) {
return '<div class="playedIndicator indicator"><i class="material-icons indicatorIcon">check</i></div>';
}
2018-10-23 01:05:09 +03:00
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getChildCountIndicatorHtml(item, options) {
var minCount = options ? options.minCount : 0;
if (item.ChildCount && item.ChildCount > minCount) {
2020-05-04 16:08:52 +05:30
return '<div class="countIndicator indicator">' + item.ChildCount + '</div>';
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getTimerIndicator(item) {
2018-10-23 01:05:09 +03:00
var status;
if (item.Type === 'SeriesTimer') {
return '<i class="material-icons timerIndicator indicatorIcon fiber_smart_record"></i>';
2019-05-02 16:03:52 -07:00
} else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled';
2019-05-02 16:03:52 -07:00
} else if (item.Type === 'Timer') {
status = item.Status;
2019-05-02 16:03:52 -07:00
} else {
return '';
}
if (item.SeriesTimerId) {
if (status !== 'Cancelled') {
return '<i class="material-icons timerIndicator indicatorIcon fiber_smart_record"></i>';
}
return '<i class="material-icons timerIndicator timerIndicator-inactive indicatorIcon fiber_smart_record"></i>';
2018-10-23 01:05:09 +03:00
}
return '<i class="material-icons timerIndicator indicatorIcon fiber_manual_record"></i>';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getSyncIndicator(item) {
if (item.SyncPercent === 100) {
return '<div class="syncIndicator indicator fullSyncIndicator"><i class="material-icons indicatorIcon file_download"></i></div>';
} else if (item.SyncPercent != null) {
return '<div class="syncIndicator indicator emptySyncIndicator"><i class="material-icons indicatorIcon file_download"></i></div>';
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export function getTypeIndicator(item) {
if (item.Type === 'Video') {
return '<div class="indicator videoIndicator"><i class="material-icons indicatorIcon">videocam</i></div>';
}
2020-02-16 02:34:40 +01:00
if (item.Type === 'Folder') {
return '<div class="indicator videoIndicator"><i class="material-icons indicatorIcon">folder</i></div>';
}
2020-02-16 02:34:40 +01:00
if (item.Type === 'PhotoAlbum') {
return '<div class="indicator videoIndicator"><i class="material-icons indicatorIcon photo_album"></i></div>';
}
if (item.Type === 'Photo') {
return '<div class="indicator videoIndicator"><i class="material-icons indicatorIcon">photo</i></div>';
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export 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 '<div class="unairedIndicator">Unaired</div>';
}
} catch (err) {
2020-02-16 03:44:43 +01:00
console.error(err);
}
}
return '<div class="missingIndicator">Missing</div>';
2018-10-23 01:05:09 +03:00
}
return '';
2018-10-23 01:05:09 +03:00
}
2020-05-04 16:08:52 +05:30
export default {
getProgressHtml: getProgressHtml,
2018-10-23 01:05:09 +03:00
getProgressBarHtml: getProgressBarHtml,
2020-05-04 16:08:52 +05:30
getPlayedIndicatorHtml: getPlayedIndicatorHtml,
2018-10-23 01:05:09 +03:00
getChildCountIndicatorHtml: getChildCountIndicatorHtml,
enableProgressIndicator: enableProgressIndicator,
getTimerIndicator: getTimerIndicator,
enablePlayedIndicator: enablePlayedIndicator,
getSyncIndicator: getSyncIndicator,
getTypeIndicator: getTypeIndicator,
getMissingIndicator: getMissingIndicator
};