components_PersonDetails.bs

import "pkg:/source/api/baserequest.bs"
import "pkg:/source/api/Image.bs"
import "pkg:/source/utils/config.bs"

sub init()
  m.dscr = m.top.findNode("description")
  m.vidsList = m.top.findNode("extrasGrid")
  m.btnGrp = m.top.findNode("buttons")
  m.btnGrp.observeField("escape", "onButtonGroupEscaped")
  m.favBtn = m.top.findNode("favorite-button")
  m.extrasGrp = m.top.findNode("extrasGrp")
  m.extrasGrp.opacity = 1.0
  createDialogPallete()
  m.top.optionsAvailable = false
end sub

sub loadPerson()
  item = m.top.itemContent
  itemData = item.json
  m.top.Id = itemData.id
  name = m.top.findNode("Name")
  name.Text = itemData.Name
  name.font.size = 70
  if itemData.PremiereDate <> invalid and itemData.PremiereDate <> ""
    lifeStringLabel = createObject("rosgnode", "Label")
    lifeStringLabel.id = "premierDate"
    lifeStringLabel.font = "font:SmallestBoldSystemFont"
    lifeStringLabel.height = "100"
    lifeStringLabel.vertAlign = "bottom"
    name.vertAlign = "top"
    name.font.size = 60
    m.top.findNode("title_rectangle").appendChild(lifeStringLabel)
    birthDate = CreateObject("roDateTime")
    birthDate.FromISO8601String(itemData.PremiereDate)
    deathDate = CreateObject("roDatetime")
    lifeString = tr("Born") + ": " + birthDate.AsDateString("short-month-no-weekday")

    if itemData.EndDate <> invalid and itemData.EndDate <> ""
      deathDate.FromISO8601String(itemData.EndDate)
      lifeString = lifeString + " * " + tr("Died") + ": " + deathDate.AsDateString("short-month-no-weekday")

    end if
    ' Calculate age
    age = deathDate.getYear() - birthDate.getYear()
    if deathDate.getMonth() < birthDate.getMonth()
      age--
    else if deathDate.getMonth() = birthDate.getMonth()
      if deathDate.getDayOfMonth() < birthDate.getDayOfMonth()
        age--
      end if
    end if
    lifeString = lifeString + " * " + tr("Age") + ": " + stri(age)
    lifeStringLabel.Text = lifeString
  end if
  if itemData.Overview <> invalid and itemData.Overview <> ""
    m.dscr.text = itemData.Overview
  else
    m.dscr.text = tr("Biographical information for this person is not currently available.")
    m.dscr.horizAlign = "center"
    m.dscr.vertAlign = "center"
  end if
  if item.posterURL <> invalid and item.posterURL <> ""
    m.top.findnode("personImage").uri = item.posterURL
  else
    m.top.findnode("personImage").uri = "pkg:/images/icons/baseline_person_white_48dp.png"
  end if
  m.vidsList.callFunc("loadPersonVideos", m.top.Id)

  setFavoriteColor()
  if not m.favBtn.hasFocus() then dscrShowFocus()
end sub

sub dscrShowFocus()
  m.dscr.setFocus(true)
  m.dscr.opacity = 1.0
  m.top.findNode("dscrBorder").color = "#d0d0d0ff"
end sub

sub onButtonGroupEscaped()
  key = m.btnGrp.escape
  if key = "down"
    m.dscr.setFocus(true)
    m.dscr.opacity = 1.0
    m.top.findNode("dscrBorder").color = "#d0d0d0ff"
  end if
end sub

function onKeyEvent(key as string, press as boolean) as boolean
  if not press then return false

  if key = "OK"
    if m.dscr.hasFocus()
      createFullDscrDlg()
      return true
    end if
    return false
  end if

  if key = "back"
    m.global.sceneManager.callfunc("popScene")
    return true
  end if

  if key = "down"
    if m.dscr.hasFocus()
      m.dscr.opacity = 0.6
      m.top.findNode("dscrBorder").color = "#data202020ff"
      m.vidsList.setFocus(true)
      m.top.findNode("VertSlider").reverse = false
      m.top.findNode("pplAnime").control = "start"
      return true
    end if
  else if key = "up"
    if m.dscr.hasFocus()
      m.favBtn.setFocus(true)
      m.dscr.opacity = 0.6
      m.top.findNode("dscrBorder").color = "#data202020ff"
      return true
    else if m.vidsList.isInFocusChain() and m.vidsList.itemFocused = 0
      m.top.findNode("VertSlider").reverse = true
      m.top.findNode("pplAnime").control = "start"
      dscrShowFocus()
      return true
    end if
  end if
  return false
end function

sub setFavoriteColor()
  fave = m.top.itemContent.favorite
  fave_button = m.top.findNode("favorite-button")
  if fave <> invalid and fave
    fave_button.textColor = "#00ff00ff"
    fave_button.focusedTextColor = "#269926ff"
    fave_button.text = tr("Favorite")
  else
    fave_button.textColor = "0xddddddff"
    fave_button.focusedTextColor = "#262626ff"
    fave_button.text = tr("Set Favorite")
  end if
end sub

sub createFullDscrDlg()
  dlg = CreateObject("roSGNode", "OverviewDialog")
  dlg.Title = m.top.itemContent.json.Name
  dlg.width = 1290
  dlg.palette = m.dlgPalette
  dlg.overview = m.dscr.text
  m.fullDscrDlg = dlg
  m.top.getScene().dialog = dlg

end sub

sub createDialogPallete()
  m.dlgPalette = createObject("roSGNode", "RSGPalette")
  m.dlgPalette.colors = {
    DialogBackgroundColor: "0x262828FF",
    DialogItemColor: "0x00EF00FF",
    DialogTextColor: "0xb0b0b0FF",
    DialogFocusColor: "0xcececeFF",
    DialogFocusItemColor: "0x202020FF",
    DialogSecondaryTextColor: "0xf8f8f8ff",
    DialogSecondaryItemColor: "0xcc7ecc4D",
    DialogInputFieldColor: "0x80FF8080",
    KeyboardDialogColor: "0x80FF804D",
    DialogFootprintColor: "0x80FF804D"
  }
end sub

function shortDate(isoDate) as string
  myDate = CreateObject("roDateTime")
  myDate.FromISO8601String(isoDate)
  return myDate.AsDateString("short-month-no-weekday")
end function