def forLiveblog()

in common/app/model/dotcomrendering/DotcomRenderingDataModel.scala [367:432]


  def forLiveblog(
      page: LiveBlogPage,
      blocks: APIBlocks,
      request: RequestHeader,
      pageType: PageType,
      filterKeyEvents: Boolean,
      forceLive: Boolean,
      newsletter: Option[NewsletterData],
  ): DotcomRenderingDataModel = {
    val pagination = page.currentPage.pagination.map(paginationInfo => {
      Pagination(
        currentPage = page.currentPage.currentPage.pageNumber,
        totalPages = paginationInfo.numberOfPages,
        newest = paginationInfo.newest.map(_.suffix),
        newer = paginationInfo.newer.map(_.suffix),
        oldest = paginationInfo.oldest.map(_.suffix),
        older = paginationInfo.older.map(_.suffix),
      )
    })

    val bodyBlocks = blocksForLiveblogPage(page, blocks, filterKeyEvents).map(ensureSummaryTitle)

    val allTimelineBlocks = blocks.body match {
      case Some(allBlocks) if allBlocks.nonEmpty =>
        allBlocks.filter(block => block.attributes.keyEvent.contains(true) || block.attributes.summary.contains(true))
      case _ => keyEventsFallback(blocks)
    }

    val timelineBlocks =
      orderBlocks(allTimelineBlocks.toSeq).map(ensureSummaryTitle)

    val baseUrl = if (request.isAmp) Configuration.amp.baseUrl else Configuration.dotcom.baseUrl
    val linkedData = LinkedData.forLiveblog(
      liveblog = page,
      blocks = bodyBlocks,
      baseURL = baseUrl,
      fallbackLogo = Configuration.images.fallbackLogo,
    )

    val pinnedPost =
      blocks.requestedBodyBlocks
        .flatMap(_.get("body:pinned"))
        .getOrElse(blocks.body.fold(Seq.empty[APIBlock])(_.filter(_.attributes.pinned.contains(true)).toSeq))
        .headOption
        .map(ensureSummaryTitle)

    val mostRecentBlockId = getMostRecentBlockId(blocks)

    apply(
      page = page,
      request = request,
      pagination = pagination,
      linkedData = linkedData,
      mainBlock = blocks.main,
      bodyBlocks = bodyBlocks,
      pageType = pageType,
      hasStoryPackage = page.related.hasStoryPackage,
      storyPackage = getStoryPackage(page.related.faciaItems, request), // todo
      pinnedPost = pinnedPost,
      keyEvents = timelineBlocks,
      filterKeyEvents = filterKeyEvents,
      mostRecentBlockId = mostRecentBlockId,
      forceLive = forceLive,
      newsletter = newsletter,
    )
  }