From f93c93f8709cbea6d65039bf29c1574dc9e2f839 Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 29 Jul 2020 10:05:16 +0100 Subject: [PATCH] Migration of itemhelper to ES6 module --- package.json | 1 + src/components/itemHelper.js | 618 ++++++++++++++++++----------------- 2 files changed, 314 insertions(+), 305 deletions(-) diff --git a/package.json b/package.json index bd199cb3e2..8930867484 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,7 @@ "src/components/imageUploader/imageUploader.js", "src/components/indicators/indicators.js", "src/components/itemContextMenu.js", + "src/components/itemHelper.js", "src/components/itemidentifier/itemidentifier.js", "src/components/itemMediaInfo/itemMediaInfo.js", "src/components/lazyLoader/lazyLoaderIntersectionObserver.js", diff --git a/src/components/itemHelper.js b/src/components/itemHelper.js index 55e9e10062..7d1ac0e110 100644 --- a/src/components/itemHelper.js +++ b/src/components/itemHelper.js @@ -1,342 +1,350 @@ -define(['apphost', 'globalize'], function (appHost, globalize) { - 'use strict'; +import appHost from 'apphost'; +import globalize from 'globalize'; - function getDisplayName(item, options = {}) { - if (!item) { - throw new Error('null item passed into getDisplayName'); +export function getDisplayName(item, options = {}) { + if (!item) { + throw new Error('null item passed into getDisplayName'); + } + + if (item.Type === 'Timer') { + item = item.ProgramInfo || item; + } + + let name = ((item.Type === 'Program' || item.Type === 'Recording') && (item.IsSeries || item.EpisodeTitle) ? item.EpisodeTitle : item.Name) || ''; + + if (item.Type === 'TvChannel') { + if (item.ChannelNumber) { + return item.ChannelNumber + ' ' + name; } - - if (item.Type === 'Timer') { - item = item.ProgramInfo || item; - } - - var name = ((item.Type === 'Program' || item.Type === 'Recording') && (item.IsSeries || item.EpisodeTitle) ? item.EpisodeTitle : item.Name) || ''; - - if (item.Type === 'TvChannel') { - if (item.ChannelNumber) { - return item.ChannelNumber + ' ' + name; - } - return name; - } - if (item.Type === 'Episode' && item.ParentIndexNumber === 0) { - name = globalize.translate('ValueSpecialEpisodeName', name); - } else if ((item.Type === 'Episode' || item.Type === 'Program') && item.IndexNumber != null && item.ParentIndexNumber != null && options.includeIndexNumber !== false) { - var displayIndexNumber = item.IndexNumber; - - var number = displayIndexNumber; - var nameSeparator = ' - '; - - if (options.includeParentInfo !== false) { - number = 'S' + item.ParentIndexNumber + ':E' + number; - } else { - nameSeparator = '. '; - } - - if (item.IndexNumberEnd) { - displayIndexNumber = item.IndexNumberEnd; - number += '-' + displayIndexNumber; - } - - if (number) { - name = name ? (number + nameSeparator + name) : number; - } - } - return name; } + if (item.Type === 'Episode' && item.ParentIndexNumber === 0) { + name = globalize.translate('ValueSpecialEpisodeName', name); + } else if ((item.Type === 'Episode' || item.Type === 'Program') && item.IndexNumber != null && item.ParentIndexNumber != null && options.includeIndexNumber !== false) { + let displayIndexNumber = item.IndexNumber; - function supportsAddingToCollection(item) { - var invalidTypes = ['Genre', 'MusicGenre', 'Studio', 'UserView', 'CollectionFolder', 'Audio', 'Program', 'Timer', 'SeriesTimer']; + let number = displayIndexNumber; + let nameSeparator = ' - '; - if (item.Type === 'Recording') { - if (item.Status !== 'Completed') { - return false; - } + if (options.includeParentInfo !== false) { + number = 'S' + item.ParentIndexNumber + ':E' + number; + } else { + nameSeparator = '. '; } - return !item.CollectionType && invalidTypes.indexOf(item.Type) === -1 && item.MediaType !== 'Photo' && !isLocalItem(item); + if (item.IndexNumberEnd) { + displayIndexNumber = item.IndexNumberEnd; + number += '-' + displayIndexNumber; + } + + if (number) { + name = name ? (number + nameSeparator + name) : number; + } } - function supportsAddingToPlaylist(item) { - if (item.Type === 'Program') { - return false; - } - if (item.Type === 'TvChannel') { - return false; - } - if (item.Type === 'Timer') { - return false; - } - if (item.Type === 'SeriesTimer') { - return false; - } - if (item.MediaType === 'Photo') { - return false; - } + return name; +} - if (item.Type === 'Recording') { - if (item.Status !== 'Completed') { - return false; - } - } +export function supportsAddingToCollection(item) { + const invalidTypes = ['Genre', 'MusicGenre', 'Studio', 'UserView', 'CollectionFolder', 'Audio', 'Program', 'Timer', 'SeriesTimer']; - if (isLocalItem(item)) { + if (item.Type === 'Recording') { + if (item.Status !== 'Completed') { return false; } - if (item.CollectionType === 'livetv') { - return false; - } - - return item.MediaType || item.IsFolder || item.Type === 'Genre' || item.Type === 'MusicGenre' || item.Type === 'MusicArtist'; } - function canEdit(user, item) { - var itemType = item.Type; + return !item.CollectionType && invalidTypes.indexOf(item.Type) === -1 && item.MediaType !== 'Photo' && !isLocalItem(item); +} - if (itemType === 'UserRootFolder' || itemType === 'UserView') { - return false; - } - - if (itemType === 'Program') { - return false; - } - - if (itemType === 'Timer') { - return false; - } - - if (itemType === 'SeriesTimer') { - return false; - } - - if (item.Type === 'Recording') { - if (item.Status !== 'Completed') { - return false; - } - } - - if (isLocalItem(item)) { - return false; - } - - return user.Policy.IsAdministrator; +export function supportsAddingToPlaylist(item) { + if (item.Type === 'Program') { + return false; + } + if (item.Type === 'TvChannel') { + return false; + } + if (item.Type === 'Timer') { + return false; + } + if (item.Type === 'SeriesTimer') { + return false; + } + if (item.MediaType === 'Photo') { + return false; } - function isLocalItem(item) { - if (item && item.Id && item.Id.indexOf('local') === 0) { + if (item.Type === 'Recording') { + if (item.Status !== 'Completed') { + return false; + } + } + + if (isLocalItem(item)) { + return false; + } + if (item.CollectionType === 'livetv') { + return false; + } + + return item.MediaType || item.IsFolder || item.Type === 'Genre' || item.Type === 'MusicGenre' || item.Type === 'MusicArtist'; +} + +export function canEdit(user, item) { + const itemType = item.Type; + + if (itemType === 'UserRootFolder' || itemType === 'UserView') { + return false; + } + + if (itemType === 'Program') { + return false; + } + + if (itemType === 'Timer') { + return false; + } + + if (itemType === 'SeriesTimer') { + return false; + } + + if (item.Type === 'Recording') { + if (item.Status !== 'Completed') { + return false; + } + } + + if (isLocalItem(item)) { + return false; + } + + return user.Policy.IsAdministrator; +} + +export function isLocalItem(item) { + if (item && item.Id && item.Id.indexOf('local') === 0) { + return true; + } + + return false; +} + +export function canIdentify (user, item) { + const itemType = item.Type; + + if (itemType === 'Movie' || + itemType === 'Trailer' || + itemType === 'Series' || + itemType === 'BoxSet' || + itemType === 'Person' || + itemType === 'Book' || + itemType === 'MusicAlbum' || + itemType === 'MusicArtist' || + itemType === 'MusicVideo') { + if (user.Policy.IsAdministrator) { + if (!isLocalItem(item)) { + return true; + } + } + } + + return false; +} + +export function canEditImages (user, item) { + const itemType = item.Type; + + if (item.MediaType === 'Photo') { + return false; + } + + if (itemType === 'UserView') { + if (user.Policy.IsAdministrator) { return true; } return false; } - return { - getDisplayName: getDisplayName, - supportsAddingToCollection: supportsAddingToCollection, - supportsAddingToPlaylist: supportsAddingToPlaylist, - isLocalItem: isLocalItem, - - canIdentify: function (user, item) { - var itemType = item.Type; - - if (itemType === 'Movie' || - itemType === 'Trailer' || - itemType === 'Series' || - itemType === 'BoxSet' || - itemType === 'Person' || - itemType === 'Book' || - itemType === 'MusicAlbum' || - itemType === 'MusicArtist' || - itemType === 'MusicVideo') { - if (user.Policy.IsAdministrator) { - if (!isLocalItem(item)) { - return true; - } - } - } - + if (item.Type === 'Recording') { + if (item.Status !== 'Completed') { return false; - }, + } + } - canEdit: canEdit, + return itemType !== 'Timer' && itemType !== 'SeriesTimer' && canEdit(user, item) && !isLocalItem(item); +} - canEditImages: function (user, item) { - var itemType = item.Type; +export function canSync (user, item) { + if (user && !user.Policy.EnableContentDownloading) { + return false; + } - if (item.MediaType === 'Photo') { - return false; - } + if (isLocalItem(item)) { + return false; + } - if (itemType === 'UserView') { - if (user.Policy.IsAdministrator) { - return true; - } - - return false; - } - - if (item.Type === 'Recording') { - if (item.Status !== 'Completed') { - return false; - } - } - - return itemType !== 'Timer' && itemType !== 'SeriesTimer' && canEdit(user, item) && !isLocalItem(item); - }, - - canSync: function (user, item) { - if (user && !user.Policy.EnableContentDownloading) { - return false; - } - - if (isLocalItem(item)) { - return false; - } - - return item.SupportsSync; - }, - - canShare: function (item, user) { - if (item.Type === 'Program') { - return false; - } - if (item.Type === 'TvChannel') { - return false; - } - if (item.Type === 'Timer') { - return false; - } - if (item.Type === 'SeriesTimer') { - return false; - } - if (item.Type === 'Recording') { - if (item.Status !== 'Completed') { - return false; - } - } - if (isLocalItem(item)) { - return false; - } - return user.Policy.EnablePublicSharing && appHost.supports('sharing'); - }, - - enableDateAddedDisplay: function (item) { - return !item.IsFolder && item.MediaType && item.Type !== 'Program' && item.Type !== 'TvChannel' && item.Type !== 'Trailer'; - }, - - canMarkPlayed: function (item) { - if (item.Type === 'Program') { - return false; - } - - if (item.MediaType === 'Video') { - if (item.Type !== 'TvChannel') { - return true; - } - } else if (item.MediaType === 'Audio') { - if (item.Type === 'AudioPodcast') { - return true; - } - if (item.Type === 'AudioBook') { - return true; - } - } - - if (item.Type === 'Series' || - item.Type === 'Season' || - item.Type === 'BoxSet' || - item.MediaType === 'Book' || - item.MediaType === 'Recording') { - return true; - } + return item.SupportsSync; +} +export function canShare (item, user) { + if (item.Type === 'Program') { + return false; + } + if (item.Type === 'TvChannel') { + return false; + } + if (item.Type === 'Timer') { + return false; + } + if (item.Type === 'SeriesTimer') { + return false; + } + if (item.Type === 'Recording') { + if (item.Status !== 'Completed') { return false; - }, + } + } + if (isLocalItem(item)) { + return false; + } + return user.Policy.EnablePublicSharing && appHost.supports('sharing'); +} - canRate: function (item) { - if (item.Type === 'Program' - || item.Type === 'Timer' - || item.Type === 'SeriesTimer' - || item.Type === 'CollectionFolder' - || item.Type === 'UserView' - || item.Type === 'Channel' - || !item.UserData) { - return false; - } +export function enableDateAddedDisplay (item) { + return !item.IsFolder && item.MediaType && item.Type !== 'Program' && item.Type !== 'TvChannel' && item.Type !== 'Trailer'; +} - return true; - }, - - canConvert: function (item, user) { - if (!user.Policy.EnableMediaConversion) { - return false; - } - - if (isLocalItem(item)) { - return false; - } - - var mediaType = item.MediaType; - if (mediaType === 'Book' || mediaType === 'Photo' || mediaType === 'Audio') { - return false; - } - - var collectionType = item.CollectionType; - if (collectionType === 'livetv') { - return false; - } - - var type = item.Type; - if (type === 'Channel' || type === 'Person' || type === 'Year' || type === 'Program' || type === 'Timer' || type === 'SeriesTimer') { - return false; - } - - if (item.LocationType === 'Virtual' && !item.IsFolder) { - return false; - } - - if (item.IsPlaceHolder) { - return false; - } - - return true; - }, - - canRefreshMetadata: function (item, user) { - if (user.Policy.IsAdministrator) { - var collectionType = item.CollectionType; - if (collectionType === 'livetv') { - return false; - } - - if (item.Type !== 'Timer' && item.Type !== 'SeriesTimer' && item.Type !== 'Program' && item.Type !== 'TvChannel' && !(item.Type === 'Recording' && item.Status !== 'Completed')) { - if (!isLocalItem(item)) { - return true; - } - } - } - - return false; - }, - - supportsMediaSourceSelection: function (item) { - if (item.MediaType !== 'Video') { - return false; - } - if (item.Type === 'TvChannel') { - return false; - } - if (!item.MediaSources || (item.MediaSources.length === 1 && item.MediaSources[0].Type === 'Placeholder')) { - return false; - } - if (item.EnableMediaSourceDisplay === false) { - return false; - } - if (item.EnableMediaSourceDisplay == null && item.SourceType && item.SourceType !== 'Library') { - return false; - } +export function canMarkPlayed (item) { + if (item.Type === 'Program') { + return false; + } + if (item.MediaType === 'Video') { + if (item.Type !== 'TvChannel') { return true; } - }; -}); + } else if (item.MediaType === 'Audio') { + if (item.Type === 'AudioPodcast') { + return true; + } + if (item.Type === 'AudioBook') { + return true; + } + } + + if (item.Type === 'Series' || + item.Type === 'Season' || + item.Type === 'BoxSet' || + item.MediaType === 'Book' || + item.MediaType === 'Recording') { + return true; + } + + return false; +} + +export function canRate (item) { + if (item.Type === 'Program' + || item.Type === 'Timer' + || item.Type === 'SeriesTimer' + || item.Type === 'CollectionFolder' + || item.Type === 'UserView' + || item.Type === 'Channel' + || !item.UserData) { + return false; + } + + return true; +} + +export function canConvert (item, user) { + if (!user.Policy.EnableMediaConversion) { + return false; + } + + if (isLocalItem(item)) { + return false; + } + + const mediaType = item.MediaType; + if (mediaType === 'Book' || mediaType === 'Photo' || mediaType === 'Audio') { + return false; + } + + const collectionType = item.CollectionType; + if (collectionType === 'livetv') { + return false; + } + + const type = item.Type; + if (type === 'Channel' || type === 'Person' || type === 'Year' || type === 'Program' || type === 'Timer' || type === 'SeriesTimer') { + return false; + } + + if (item.LocationType === 'Virtual' && !item.IsFolder) { + return false; + } + + if (item.IsPlaceHolder) { + return false; + } + + return true; +} + +export function canRefreshMetadata (item, user) { + if (user.Policy.IsAdministrator) { + const collectionType = item.CollectionType; + if (collectionType === 'livetv') { + return false; + } + + if (item.Type !== 'Timer' && item.Type !== 'SeriesTimer' && item.Type !== 'Program' && item.Type !== 'TvChannel' && !(item.Type === 'Recording' && item.Status !== 'Completed')) { + if (!isLocalItem(item)) { + return true; + } + } + } + + return false; +} + +export function supportsMediaSourceSelection (item) { + if (item.MediaType !== 'Video') { + return false; + } + if (item.Type === 'TvChannel') { + return false; + } + if (!item.MediaSources || (item.MediaSources.length === 1 && item.MediaSources[0].Type === 'Placeholder')) { + return false; + } + if (item.EnableMediaSourceDisplay === false) { + return false; + } + if (item.EnableMediaSourceDisplay == null && item.SourceType && item.SourceType !== 'Library') { + return false; + } + + return true; +} + +export default { + getDisplayName: getDisplayName, + supportsAddingToCollection: supportsAddingToCollection, + supportsAddingToPlaylist: supportsAddingToPlaylist, + isLocalItem: isLocalItem, + canIdentify: canIdentify, + canEdit: canEdit, + canEditImages: canEditImages, + canSync: canSync, + canShare: canShare, + enableDateAddedDisplay: enableDateAddedDisplay, + canMarkPlayed: canMarkPlayed, + canRate: canRate, + canConvert: canConvert, + canRefreshMetadata: canRefreshMetadata, + supportsMediaSourceSelection: supportsMediaSourceSelection +};