components_ItemGrid_GridItem.bs

import "pkg:/source/constants/imageSize.bs"
import "pkg:/source/roku_modules/log/LogMixin.brs"
import "pkg:/source/utils/itemImageUrl.bs"
import "pkg:/source/utils/misc.bs"

sub init()
  m.log = log.Logger("GridItem")
  m.itemPoster = m.top.findNode("itemPoster")
  m.itemIcon = m.top.findNode("itemIcon")
  m.posterText = m.top.findNode("posterText")
  m.itemText = m.top.findNode("itemText")
  m.backdrop = m.top.findNode("backdrop")

  m.itemPoster.observeField("loadStatus", "onPosterLoadStatusChanged")

  ' Add some padding space when Item Titles are always showing
  if m.itemText.visible then m.itemText.maxWidth = 224

  ' grab data from ItemGrid node
  m.itemGrid = m.top.GetParent().GetParent() 'Parent is JRMarkupGrid and it's parent is the ItemGrid

  if isValid(m.itemGrid)
    if isValid(m.itemGrid.imageDisplayMode)
      m.itemPoster.loadDisplayMode = m.itemGrid.imageDisplayMode
    end if
    if isValid(m.itemGrid.gridTitles)
      m.gridTitles = m.itemGrid.gridTitles
    end if
  end if

  posterY = m.itemPoster.translation[1]
  m.itemText.translation = [0, posterY + m.itemPoster.height + 18]
  m.itemText.visible = m.gridTitles = "showalways"

end sub

sub itemContentChanged()
  itemData = m.top.itemContent
  if not isValid(itemData) then return

  if itemData.isWatched
    m.itemPoster.isWatched = true
  end if

  if itemData.unplayedItemCount > 0
    m.itemPoster.unplayedCount = itemData.unplayedItemCount
  end if

  itemType = LCase(itemData.type)

  if itemType = "movie" or itemType = "musicvideo"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "series"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "boxset"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "tvchannel"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "folder" or itemType = "collectionfolder" or itemType = "channelfolderitem" or itemType = "photoalbum"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
    m.itemPoster.loadDisplayMode = m.itemGrid.imageDisplayMode
  else if itemType = "genre" or itemType = "studio"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "musicgenre"
    ' Music genres use square 1:1 sizing
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
    setSquarePosterLayout()
    m.itemPoster.loadDisplayMode = "scaleToFit"
  else if itemType = "video" or itemType = "recording"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "playlist"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "photo"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else if itemType = "episode"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    if isValidAndNotEmpty(itemData.seriesName)
      m.itemText.text = itemData.seriesName + " - " + itemData.title
    else
      m.itemText.text = itemData.title
    end if
  else if itemType = "musicartist"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
    setSquarePosterLayout()
    m.itemPoster.loadDisplayMode = "limitSize"
  else if itemType = "musicalbum"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
    setSquarePosterLayout()
    m.itemPoster.loadDisplayMode = "limitSize"
  else if itemType = "audio"
    m.itemPoster.uri = getItemPosterUrl(itemData)
    m.itemText.text = itemData.title
  else
    m.log.warn("Unhandled Grid Item Type", itemData.type)
  end if

  'If Poster not loaded, ensure "blue box" is shown until loaded
  if m.itemPoster.loadStatus <> "ready"
    m.backdrop.visible = true
    m.posterText.visible = true
  end if

  m.posterText.text = m.itemText.text

end sub

' Apply square 323x323 layout for music items (artists, albums, genres)
sub setSquarePosterLayout()
  m.itemPoster.height = 323
  m.itemPoster.width = 323
  m.itemPoster.loadWidth = 323
  m.itemPoster.loadHeight = 323

  m.itemText.translation = [0, m.itemPoster.translation[1] + m.itemPoster.height + 18]
  m.itemText.maxWidth = 323

  m.backdrop.height = 323
  m.backdrop.width = 323

  m.posterText.height = 313
  m.posterText.width = 313
end sub

' Enable title scrolling based on item focus
sub focusChanged()
  if m.top.itemHasFocus = true
    m.itemText.repeatCount = -1
  else
    m.itemText.repeatCount = 0
  end if
  if m.gridTitles = "showonhover"
    m.itemText.visible = m.top.itemHasFocus
  end if
end sub

'Hide backdrop and text when poster loaded
sub onPosterLoadStatusChanged()
  if m.itemPoster.loadStatus = "ready"
    m.backdrop.visible = false
    m.posterText.visible = false
  end if
end sub