first commit

This commit is contained in:
2026-02-09 10:48:21 +01:00
commit 15f28c0dd6
848 changed files with 107188 additions and 0 deletions

1
tv/favorites.js Normal file
View File

@@ -0,0 +1 @@
define(["exports","./../modules/emby-apiclient/connectionmanager.js","./../modules/common/globalize.js","./../modules/layoutmanager.js","./../modules/tabbedview/basetab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/tabbedview/sectionscontroller.js"],function(_exports,_connectionmanager,_globalize,_layoutmanager,_basetab,_embyItemscontainer,_embyScroller,_sectionscontroller){function TvFavoritesTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params,this.apiClient=_connectionmanager.default.getApiClient(params.serverId)}function FavoritesTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params,this.apiClient=_connectionmanager.default.currentApiClient()}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(TvFavoritesTab.prototype,_basetab.default.prototype),Object.assign(TvFavoritesTab.prototype,_sectionscontroller.default.prototype),Object.assign(FavoritesTab.prototype,_basetab.default.prototype),Object.assign(FavoritesTab.prototype,_sectionscontroller.default.prototype),TvFavoritesTab.prototype.fetchSections=function(){var sections=[],monitor=["markfavorite"],enableFocusPreview=this.enableFocusPreview(),parentId=this.params.parentId;sections.push({Id:"Series",Name:_globalize.default.translate("HeaderFavoriteShows"),CollectionType:"tvshows",Monitor:monitor,ListOptions:{fields:enableFocusPreview?[]:["Name","ProductionYear"]},QueryOptions:{IncludeItemTypes:"Series",ParentId:parentId,Recursive:!0},LimitItems:!1}),sections.push({Id:"Episodes",Name:_globalize.default.translate("HeaderFavoriteEpisodes"),CollectionType:"tvshows",Monitor:monitor,ListOptions:{fields:enableFocusPreview?[]:["ParentName","Name"],preferThumb:!1},QueryOptions:{IncludeItemTypes:"Episode",ParentId:parentId,Recursive:!0},LimitItems:!1});for(var i=0,length=sections.length;i<length;i++)sections[i].QueryOptions.Filters="IsFavorite";return Promise.resolve(sections)},TvFavoritesTab.prototype.enablePushDownFocusPreview=function(){return _layoutmanager.default.tv&&"y"===this.scrollDirection()},TvFavoritesTab.prototype.onResume=function(options){return _basetab.default.prototype.onResume.apply(this,arguments),_sectionscontroller.default.prototype.onResume.apply(this,arguments)},TvFavoritesTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments),_sectionscontroller.default.prototype.onPause.apply(this,arguments)},TvFavoritesTab.prototype.destroy=function(){_basetab.default.prototype.destroy.apply(this,arguments),_sectionscontroller.default.prototype.destroy.apply(this,arguments)};_exports.default=TvFavoritesTab});

1
tv/studios.js Normal file
View File

@@ -0,0 +1 @@
define(["exports","./../modules/tabbedview/itemstab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/emby-elements/emby-button/emby-button.js"],function(_exports,_itemstab,_embyItemscontainer,_embyScroller,_embyButton){function StudiosTab(view,params,options){this.supportsViewSettings=!1,_itemstab.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(StudiosTab.prototype,_itemstab.default.prototype),StudiosTab.prototype.getQueryIncludeItemTypes=function(){return["Series"]},StudiosTab.prototype.getItemTypes=function(){return["Studio"]},StudiosTab.prototype.getSettingsKey=function(){return _itemstab.default.prototype.getSettingsKey.call(this)+"-studios"},StudiosTab.prototype.getApiClientQueryMethodName=function(){return"getStudios"},StudiosTab.prototype.getContext=function(){return"tvshows"},StudiosTab.prototype.getCardOptions=function(items,settings){var options=_itemstab.default.prototype.getCardOptions.apply(this,arguments);return options.preferThumb=!0,options.shape="backdrop",options},StudiosTab.prototype.getSortMenuOptions=function(){return[]},StudiosTab.prototype.loadTemplate=function(){return this.loadItemsTemplate()};_exports.default=StudiosTab});

1
tv/suggestions.js Normal file
View File

@@ -0,0 +1 @@
define(["exports","./../modules/common/globalize.js","./../modules/layoutmanager.js","./../modules/tabbedview/basetab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/tabbedview/sectionscontroller.js","./../modules/common/itemmanager/itemmanager.js","./../modules/emby-apiclient/connectionmanager.js","./../modules/approuter.js"],function(_exports,_globalize,_layoutmanager,_basetab,_embyItemscontainer,_embyScroller,_sectionscontroller,_itemmanager,_connectionmanager,_approuter){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0;function TvSuggestionsTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params}Object.assign(TvSuggestionsTab.prototype,_basetab.default.prototype),Object.assign(TvSuggestionsTab.prototype,_sectionscontroller.default.prototype),TvSuggestionsTab.prototype.onSpotlightButtonCustomAction=function(options){var _item$Id,item=options.item;if(null==(_item$Id=item.Id)||!_item$Id.startsWith("tv_"))return _sectionscontroller.default.prototype.onSpotlightButtonCustomAction.apply(this,arguments);_item$Id="/tv?serverId="+_connectionmanager.default.getApiClient(item).serverId()+"&parentId="+item.ParentId,1<(item=item.Id.split("_")).length&&(_item$Id+="&tab="+item[1]),_approuter.default.show(_item$Id)},TvSuggestionsTab.prototype.fetchSections=function(){var sections=[],enableFocusPreview=this.enableFocusPreview(),parentId=this.params.parentId,serverId=this.serverId(),serverId=("x"===this.scrollDirection()&&this.options.addCategories&&sections.push({Id:"Spotlight",Name:" ",SectionType:"spotlight",CollectionType:"tvshows",Monitor:[],ListOptions:{shape:"backdrop",multiSelect:!1,overlayText:!0,fields:["Name"],cardClass:"wideSpotlightCard",coverImage:!0},QueryOptions:{SortBy:"Random",IncludeItemTypes:"Series",Recursive:!0,ParentId:parentId,EnableImageTypes:"Backdrop,Logo",ImageTypes:"Backdrop",Fields:"Taglines",ImageTypeLimit:1,Limit:1},CommandOptions:{},RefreshInterval:3e4,SpotlightButtons:[{Name:_globalize.default.translate("Shows"),Id:"tv_shows",ParentId:parentId,ServerId:serverId,Icon:_itemmanager.default.getDefaultIcon({Type:"Series"}),Type:"AppCategory",IsFolder:!0},{Name:_globalize.default.translate("Favorites"),Id:"tv_favorites",ParentId:parentId,ServerId:serverId,Icon:"favorite",Type:"AppCategory",IsFolder:!0},{Name:_globalize.default.translate("Upcoming"),Id:"tv_upcoming",ParentId:parentId,ServerId:serverId,Icon:"dvr",Type:"AppCategory",IsFolder:!0}]}),sections.push({Name:_globalize.default.translate("HeaderContinueWatching"),SectionType:"resume",CollectionType:"tvshows",Monitor:["videoplayback","markplayed"],ListOptions:{fields:enableFocusPreview?[]:["ParentName","Name"],preferThumb:!0},QueryOptions:{IncludeItemTypes:"Episode",ParentId:parentId,Recursive:!0},CommandOptions:{removeFromResume:!0}}),sections.push({Name:_globalize.default.translate("HeaderLatestEpisodes"),SectionType:"latestmedia",CollectionType:"tvshows",Monitor:["videoplayback","markplayed"],ListOptions:{fields:enableFocusPreview?[]:["Name","ProductionYear"]},QueryOptions:{IncludeItemTypes:"Episode",ParentId:parentId,Recursive:!0}}),new Date(Date.now()));return serverId.setTime(serverId.getTime()-12096e5),sections.push({Name:_globalize.default.translate("RecentlyReleasedEpisodes"),CollectionType:"tvshows",Monitor:["videoplayback","markplayed"],ListOptions:{fields:enableFocusPreview?[]:["ParentName","Name"],preferThumb:!0},QueryOptions:{IncludeItemTypes:"Episode",Recursive:!0,SortBy:"ProductionYear,PremiereDate,SortParentIndexNumber,SortIndexNumber",SortOrder:"Descending,Descending,Ascending,Ascending",MinPremiereDate:serverId.toISOString(),IsUnaired:!1,ParentId:parentId}}),Promise.resolve(sections)},TvSuggestionsTab.prototype.enablePushDownFocusPreview=function(){return _layoutmanager.default.tv&&"y"===this.scrollDirection()},TvSuggestionsTab.prototype.enablePushDownFocusPreview=function(){return _layoutmanager.default.tv&&"y"===this.scrollDirection()},TvSuggestionsTab.prototype.onResume=function(options){return _basetab.default.prototype.onResume.apply(this,arguments),_sectionscontroller.default.prototype.onResume.apply(this,arguments)},TvSuggestionsTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments),_sectionscontroller.default.prototype.onPause.apply(this,arguments)},TvSuggestionsTab.prototype.destroy=function(){_basetab.default.prototype.destroy.apply(this,arguments),_sectionscontroller.default.prototype.destroy.apply(this,arguments)};_exports.default=TvSuggestionsTab});

41
tv/tv.html Normal file
View File

@@ -0,0 +1,41 @@
<div class="view flex flex-direction-column withTabs">
<div class="tabContent tabContent-positioned flex flex-grow" data-index="0" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="1" data-swapnode="sectionstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="2" data-swapnode="sectionstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="3" data-swapnode="sectionstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="4" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="5" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="6" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="7" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="8" data-swapnode="itemstab">
</div>
<div class="tabContent tabContent-positioned flex flex-grow" data-index="9" data-swapnode="itemstab">
</div>
</div>

1
tv/tv.js Normal file
View File

@@ -0,0 +1 @@
define(["exports","./../modules/tabbedview/tabbedview.js","./../modules/common/globalize.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-button/emby-button.js","./../modules/emby-elements/emby-scroller/emby-scroller.js"],function(_exports,_tabbedview,_globalize,_embyItemscontainer,_embyButton,_embyScroller){function TVView(view,params){_tabbedview.default.apply(this,arguments)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(TVView.prototype,_tabbedview.default.prototype),TVView.prototype.getTabs=function(){var subviews=this.item.Subviews||["series","suggestions","upcoming","favorites","genres","studios","episodes","folders"];return[{name:_globalize.default.translate("Shows"),id:"series",enabled:subviews.includes("series")},{name:_globalize.default.translate("Suggestions"),id:"suggestions"},{name:_globalize.default.translate("Upcoming"),id:"upcoming"},{name:_globalize.default.translate("Favorites"),id:"favorites"},{name:_globalize.default.translate("Collections"),id:"collections",enabled:subviews.includes("collections")},{name:_globalize.default.translate("Genres"),id:"genres",enabled:subviews.includes("genres")},{name:_globalize.default.translate("Tags"),id:"tags",enabled:subviews.includes("tags")},{name:_globalize.default.translate("Networks"),id:"studios",enabled:subviews.includes("studios")},{name:_globalize.default.translate("Episodes"),id:"episodes",enabled:subviews.includes("episodes")},{name:_globalize.default.translate("Folders"),id:"folders"}]},TVView.prototype.getAutoBackdropItemTypes=function(){return["Series"]},TVView.prototype.loadTabController=function(id){switch(id){case"series":return Emby.importModule("./modules/tabbedview/seriestab.js");case"suggestions":return Emby.importModule("./tv/suggestions.js");case"upcoming":return Emby.importModule("./tv/upcoming.js");case"favorites":return Emby.importModule("./tv/favorites.js");case"collections":return Emby.importModule("./modules/tabbedview/collectionstab.js");case"genres":return Emby.importModule("./modules/tabbedview/genrestab.js");case"studios":return Emby.importModule("./tv/studios.js");case"tags":return Emby.importModule("./modules/tabbedview/tagstab.js");case"episodes":return Emby.importModule("./modules/tabbedview/videostab.js");case"folders":return Emby.importModule("./modules/tabbedview/folderstab.js");default:throw new Error("tab not found: "+id)}},TVView.prototype.supportsHorizontalTabScroll=function(){return!0},TVView.prototype.getTabControllerOptions=function(id){var options=_tabbedview.default.prototype.getTabControllerOptions.apply(this,arguments);return"genres"===id?options.queryIncludeItemTypes=["Series"]:"episodes"===id&&(options.itemType="Episode",options.enableAlphaPicker=!1),options};_exports.default=TVView});

1
tv/upcoming.js Normal file
View File

@@ -0,0 +1 @@
define(["exports","./../modules/emby-apiclient/connectionmanager.js","./../modules/tabbedview/basetab.js","./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../modules/emby-elements/emby-scroller/emby-scroller.js","./../modules/common/globalize.js","./../modules/common/datetime.js","./../modules/tabbedview/sectionscontroller.js"],function(_exports,_connectionmanager,_basetab,_embyItemscontainer,_embyScroller,_globalize,_datetime,_sectionscontroller){function UpcomingTab(view,params){_basetab.default.apply(this,arguments),_sectionscontroller.default.apply(this,arguments),this.view=view,this.params=params,this.apiClient=_connectionmanager.default.getApiClient(params.serverId)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,Object.assign(UpcomingTab.prototype,_basetab.default.prototype),Object.assign(UpcomingTab.prototype,_sectionscontroller.default.prototype),UpcomingTab.prototype.fetchSections=function(){var instance=this,enableFocusPreview=instance.enableFocusPreview(),parentId=this.params.parentId,apiClient=this.getApiClient();return apiClient.getUpcomingEpisodes({Limit:100,UserId:apiClient.getCurrentUserId(),ImageTypeLimit:1,EnableImageTypes:"Primary,Backdrop,Thumb",EnableTotalRecordCount:!1,parentId:parentId,Fields:"Overview"}).then(function(result){for(var sections=[],currentGroupName="",currentGroup=[],items=result.Items,parentId=instance.params.parentId,i=0,length=items.length;i<length;i++){var item=items[i],dateText="";if(item.PremiereDate)try{var premiereDate=new Date(Date.parse(item.PremiereDate)),dateText=_datetime.default.isRelativeDay(premiereDate,-1)?_globalize.default.translate("Yesterday"):_datetime.default.toLocaleDateString(premiereDate,{weekday:"long",month:"short",day:"numeric"})}catch(err){dateText=item.PremiereDate}dateText!==currentGroupName?(currentGroup.length&&sections.push({Name:currentGroupName,CollectionType:"tvshows",Monitor:[],ListOptions:{fields:enableFocusPreview?[]:["ParentName","Name"],preferThumb:!0,action:"overview"},QueryOptions:{ParentId:parentId,Recursive:!0},Items:currentGroup}),currentGroupName=dateText,currentGroup=[item]):currentGroup.push(item)}return sections})},UpcomingTab.prototype.onResume=function(options){return _basetab.default.prototype.onResume.apply(this,arguments),_sectionscontroller.default.prototype.onResume.apply(this,arguments)},UpcomingTab.prototype.onPause=function(){_basetab.default.prototype.onPause.apply(this,arguments),_sectionscontroller.default.prototype.onPause.apply(this,arguments)},UpcomingTab.prototype.destroy=function(){_basetab.default.prototype.destroy.apply(this,arguments),_sectionscontroller.default.prototype.destroy.apply(this,arguments)};_exports.default=UpcomingTab});