def toAction()

in visibilitylib/src/main/scala/com/twitter/visibility/interfaces/conversations/TombstoneVisibilityLibrary.scala [181:283]


  def toAction(
    tfrs: TweetFieldsResultState,
    actionStatsReceiver: StatsReceiver
  ): Option[Action] = {

    val enableLocalizedInterstitials = visibilityDeciderGates.enableConvosLocalizedInterstitial()
    val enableLegacyInterstitials = visibilityDeciderGates.enableConvosLegacyInterstitial()

    val tombstoneStatsReceiver = actionStatsReceiver.scope("tombstone")
    val interstitialLocalStatsReceiver =
      actionStatsReceiver.scope("interstitial").scope("localized")
    val interstitialLegacyStatsReceiver =
      actionStatsReceiver.scope("interstitial").scope("legacy")

    tfrs match {

      case TweetFieldsResultState.NotFound(TweetFieldsResultNotFound(_, _, Some(filteredReason)))
          if FilteredReasonHelper.isTombstone(filteredReason) =>
        createLocalizedTombstone(filteredReason, tombstoneStatsReceiver)

      case TweetFieldsResultState.NotFound(tfr: TweetFieldsResultNotFound) if tfr.deleted =>
        createTombstone(Epitaph.Deleted, tombstoneStatsReceiver)

      case TweetFieldsResultState.NotFound(_: TweetFieldsResultNotFound) =>
        createTombstone(Epitaph.NotFound, tombstoneStatsReceiver)

      case TweetFieldsResultState.Failed(TweetFieldsResultFailed(_, _, _)) =>
        createTombstone(Epitaph.Unavailable, tombstoneStatsReceiver, Some("failed"))

      case TweetFieldsResultState.Filtered(TweetFieldsResultFiltered(UnspecifiedReason(true))) =>
        createTombstone(Epitaph.Unavailable, tombstoneStatsReceiver, Some("filtered"))

      case TweetFieldsResultState.Filtered(TweetFieldsResultFiltered(filteredReason)) =>
        toAction(filteredReason, actionStatsReceiver)

      case TweetFieldsResultState.Found(TweetFieldsResultFound(_, _, Some(filteredReason)))
          if enableLocalizedInterstitials &&
            FilteredReasonHelper.isSuppressedReasonPublicInterestInterstial(filteredReason) =>
        interstitialLocalStatsReceiver.counter("ipi").incr()
        FilteredReasonHelper
          .getSafetyResult(filteredReason)
          .flatMap(_.reason)
          .flatMap(PublicInterest.SafetyResultReasonToReason.get) match {
          case Some(safetyResultReason) =>
            FilteredReasonHelper
              .getSuppressedReasonPublicInterestInterstial(filteredReason)
              .map(edi => edi.localizedMessage)
              .map(tlm => LocalizedMessageConverter.fromThrift(tlm))
              .map(lm =>
                InterstitialLimitedEngagements(
                  safetyResultReason,
                  Some(LimitedEngagementReason.NonCompliant),
                  lm))
          case _ => None
        }

      case TweetFieldsResultState.Found(TweetFieldsResultFound(_, _, Some(filteredReason)))
          if enableLegacyInterstitials &&
            FilteredReasonHelper.isSuppressedReasonPublicInterestInterstial(filteredReason) =>
        interstitialLegacyStatsReceiver.counter("ipi").incr()
        FilteredReasonHelper
          .getSafetyResult(filteredReason)
          .flatMap(_.reason)
          .flatMap(PublicInterest.SafetyResultReasonToReason.get)
          .map(InterstitialLimitedEngagements(_, Some(LimitedEngagementReason.NonCompliant)))

      case TweetFieldsResultState.Found(TweetFieldsResultFound(_, _, Some(filteredReason)))
          if enableLocalizedInterstitials &&
            FilteredReasonHelper.isLocalizedSuppressedReasonEmergencyDynamicInterstitial(
              filteredReason) =>
        interstitialLocalStatsReceiver.counter("edi").incr()
        FilteredReasonHelper
          .getSuppressedReasonEmergencyDynamicInterstitial(filteredReason)
          .map(e =>
            EmergencyDynamicInterstitial(
              e.copy,
              e.link,
              LocalizedMessageConverter.fromThrift(e.localizedMessage)))

      case TweetFieldsResultState.Found(TweetFieldsResultFound(_, _, Some(filteredReason)))
          if enableLegacyInterstitials &&
            FilteredReasonHelper.isSuppressedReasonEmergencyDynamicInterstitial(filteredReason) =>
        interstitialLegacyStatsReceiver.counter("edi").incr()
        FilteredReasonHelper
          .getSuppressedReasonEmergencyDynamicInterstitial(filteredReason)
          .map(e => EmergencyDynamicInterstitial(e.copy, e.link))

      case TweetFieldsResultState.Found(TweetFieldsResultFound(tweet, _, _))
          if tweet.perspective.exists(_.reported) =>
        interstitialLegacyStatsReceiver.counter("reported").incr()
        Some(Interstitial(Reason.ViewerReportedAuthor))

      case TweetFieldsResultState.Found(
            TweetFieldsResultFound(_, _, Some(UnspecifiedReason(true)))) =>
        None

      case TweetFieldsResultState.Found(TweetFieldsResultFound(_, _, Some(filteredReason))) =>
        toAction(filteredReason, actionStatsReceiver)

      case _ =>
        None
    }
  }