def make()

in common/app/model/PressedCard.scala [31:104]


  def make(content: fapi.FaciaContent): PressedCard = {

    def lastModifiedOption(fc: FaciaContent): Option[DateTime] = {
      fold(fc)(
        curatedContent => curatedContent.content.fields.flatMap(_.lastModified),
        supportingCuratedContent => supportingCuratedContent.content.fields.flatMap(_.lastModified),
        _ => None,
        latestSnap => latestSnap.latestContent.flatMap(_.fields.flatMap(_.lastModified)),
      ).map(_.toJodaDateTime)
    }

    def extractGalleryCount(fc: FaciaContent): Option[Int] = {
      def countImagesInGallery(content: Content): Option[Int] =
        content.elements.map(_.count(el => el.`type` == ElementType.Image && el.relation == "gallery")).filter(_ > 0)

      fold(fc)(
        curatedContent => countImagesInGallery(curatedContent.content),
        supportingCuratedContent => countImagesInGallery(supportingCuratedContent.content),
        _ => None,
        latestSnap => latestSnap.latestContent.flatMap(countImagesInGallery),
      )
    }

    def getAudioDuration(fc: FaciaContent): Option[String] = {
      def getMinutes(content: Content) =
        content.elements.map(_.flatMap(_.assets).flatMap(_.typeData.flatMap(_.durationMinutes)))
      def getSeconds(content: Content) =
        content.elements.map(_.flatMap(_.assets).flatMap(_.typeData.flatMap(_.durationSeconds)))

      def audioDurationMinutes(fc: FaciaContent) = fold(fc)(
        curatedContent => getMinutes(curatedContent.content),
        supportingCuratedContent => getMinutes(supportingCuratedContent.content),
        _ => None,
        latestSnap => latestSnap.latestContent.flatMap(getMinutes),
      )

      def audioDurationSeconds(fc: FaciaContent) = fold(fc)(
        curatedContent => getSeconds(curatedContent.content),
        supportingCuratedContent => getSeconds(supportingCuratedContent.content),
        _ => None,
        latestSnap => latestSnap.latestContent.flatMap(getSeconds),
      )

      val minutes: Option[Int] = if (audioDurationMinutes(fc).isDefined) {
        audioDurationMinutes(fc).get.headOption
      } else None
      val seconds: Option[Int] = if (audioDurationSeconds(fc).isDefined) {
        audioDurationSeconds(fc).get.headOption
      } else None
      if (minutes.isDefined || seconds.isDefined) {
        // adds a leading zero if the values are less than 10
        val formattedMinutes = f"${minutes.getOrElse(0)}%02d"
        val formattedSeconds = f"${seconds.getOrElse(0)}%02d"
        val duration = s"$formattedMinutes:$formattedSeconds"
        Some(duration)
      } else None
    }

    PressedCard(
      id = FaciaContentUtils.id(content),
      cardStyle = CardStyle.make(CardStylePicker(content)),
      isLive = FaciaContentUtils.isLive(content),
      webPublicationDateOption = FaciaContentUtils.webPublicationDateOption(content),
      lastModifiedOption = lastModifiedOption(content),
      mediaType = fapiutils.MediaType.fromFaciaContent(content).map(MediaType.make),
      shortUrl = FaciaContentUtils.shortUrl(content),
      shortUrlPath = FaciaContentUtils.shortUrlPath(content),
      group = FaciaContentUtils.group(content),
      trailText = FaciaContentUtils.trailText(content),
      starRating = FaciaContentUtils.starRating(content),
      galleryCount = extractGalleryCount(content),
      audioDuration = getAudioDuration(content),
    )
  }