source_GridView_GenericPresenter.bs
' GenericPresenter: Fallback presenter for library types without specialized views
'
' Used for: Collections, Boxsets, Folders, etc.
' Uses full-screen global backdrop and standard grid layout.
import "pkg:/source/GridView/GridPresenterBase.bs"
import "pkg:/source/utils/misc.bs"
class GenericPresenter extends GridPresenterBase
sub new()
super()
end sub
' Uses global full-screen backdrop
override function getBackdropMode() as string
return "fullscreen"
end function
' No presentation info for generic view
override function shouldShowPresentationInfo(_viewMode as string) as boolean
return false
end function
' Returns options customized based on parent item type
override function getOptions(parentItem as object) as object
' Check if this is a boxset
isBoxset = m.isBoxsetItem(parentItem)
if isBoxset
' Boxset-specific options with Folders sort
return {
views: [
{ "Title": translate(translationKeys.LabelDefault), "Name": "default" }
],
sort: [
{ "Title": translate(translationKeys.LabelTitle), "Name": "SortName" },
{ "Title": translate(translationKeys.LabelRandom), "Name": "Random" },
{ "Title": translate(translationKeys.LabelImdbRating), "Name": "CommunityRating" },
{ "Title": translate(translationKeys.LabelCriticRating), "Name": "CriticRating" },
{ "Title": translate(translationKeys.LabelDateAdded), "Name": "DateCreated" },
{ "Title": translate(translationKeys.LabelDatePlayed), "Name": "DatePlayed" },
{ "Title": translate(translationKeys.LabelFolders), "Name": "IsFolder,SortName" },
{ "Title": translate(translationKeys.LabelOfficialRating), "Name": "OfficialRating" },
{ "Title": translate(translationKeys.LabelPlayCount), "Name": "PlayCount" },
{ "Title": translate(translationKeys.LabelReleaseDate), "Name": "PremiereDate" },
{ "Title": translate(translationKeys.LabelRuntime), "Name": "Runtime" }
],
filter: [
{ "Title": translate(translationKeys.LabelAll), "Name": "All" },
{ "Title": translate(translationKeys.LabelFavorites), "Name": "Favorites" },
{ "Title": translate(translationKeys.LabelPlayed), "Name": "Played" },
{ "Title": translate(translationKeys.LabelUnplayed), "Name": "Unplayed" }
]
}
end if
' Default generic options
return {
views: [
{ "Title": translate(translationKeys.LabelDefault), "Name": "default" }
],
sort: [
{ "Title": translate(translationKeys.LabelTitle), "Name": "SortName" },
{ "Title": translate(translationKeys.LabelDateAdded), "Name": "DateCreated" },
{ "Title": translate(translationKeys.LabelDatePlayed), "Name": "DatePlayed" },
{ "Title": translate(translationKeys.LabelRandom), "Name": "Random" }
],
filter: [
{ "Title": translate(translationKeys.LabelAll), "Name": "All" },
{ "Title": translate(translationKeys.LabelFavorites), "Name": "Favorites" }
]
}
end function
' Check if parent item is a boxset
private function isBoxsetItem(parentItem as object) as boolean
if not isValid(parentItem) then return false
return LCase(parentItem.type) = "boxset"
end function
' Standard grid layout
override function getGridConfig(_viewMode as string) as object
return {
translation: [96, 102],
itemSize: [264, 396],
rowHeights: [396],
numRows: "3",
numColumns: "6",
imageDisplayMode: "scaleToZoom"
}
end function
override sub configureLoadTask(task as object, _parentItem as object, _viewMode as string)
' Generic presenter uses whatever item type is in the folder
task.isRecursive = false
end sub
end class