def toAction()

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


  def toAction(
    filteredReason: FilteredReason,
    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")

    filteredReason match {
      case _ if FilteredReasonHelper.isTombstone(filteredReason) =>
        createLocalizedTombstone(filteredReason, tombstoneStatsReceiver) match {
          case tombstoneOpt @ Some(LocalizedTombstone(_, _)) => tombstoneOpt
          case _ =>
            createTombstone(Epitaph.Unavailable, tombstoneStatsReceiver, Some("emptyTombstone"))
        }

      case _
          if enableLocalizedInterstitials &&
            FilteredReasonHelper.isLocalizedSuppressedReasonInterstitial(filteredReason) =>
        FilteredReasonHelper.getLocalizedSuppressedReasonInterstitial(filteredReason) match {
          case Some(t.Interstitial(reasonOpt, Some(message))) =>
            InterstitialReasonConverter.fromThrift(reasonOpt).map { interstitialReason =>
              interstitialLocalStatsReceiver.counter("interstitial").incr()
              Interstitial(
                Reason.fromInterstitialReason(interstitialReason),
                Some(LocalizedMessageConverter.fromThrift(message)))
            }

          case _ => None
        }

      case _ if FilteredReasonHelper.containNsfwMedia(filteredReason) =>
        None

      case _ if FilteredReasonHelper.possiblyUndesirable(filteredReason) =>
        None

      case _ if FilteredReasonHelper.reportedTweet(filteredReason) =>
        filteredReason match {
          case FilteredReason.ReportedTweet(true) =>
            interstitialLegacyStatsReceiver.counter("fr_reported").incr()
            Some(Interstitial(Reason.ViewerReportedAuthor))

          case FilteredReason.SafetyResult(safetyResult: SafetyResult)
              if enableLegacyInterstitials =>
            val safetyResultReported = InterstitialReasonConverter
              .fromAction(safetyResult.action).collect {
                case InterstitialReason.ViewerReportedTweet => true
                case InterstitialReason.ViewerReportedAuthor => true
              }.getOrElse(false)

            if (safetyResultReported) {
              interstitialLegacyStatsReceiver.counter("reported_author").incr()
              Some(Interstitial(Reason.ViewerReportedAuthor))
            } else None

          case _ => None
        }

      case _ if FilteredReasonHelper.tweetMatchesViewerMutedKeyword(filteredReason) =>
        filteredReason match {
          case FilteredReason.TweetMatchesViewerMutedKeyword(_) =>
            interstitialLegacyStatsReceiver.counter("fr_muted_keyword").incr()
            Some(Interstitial(Reason.MutedKeyword))

          case FilteredReason.SafetyResult(safetyResult: SafetyResult)
              if enableLegacyInterstitials =>
            val safetyResultMutedKeyword = InterstitialReasonConverter
              .fromAction(safetyResult.action).collect {
                case _: InterstitialReason.MatchesMutedKeyword => true
              }.getOrElse(false)

            if (safetyResultMutedKeyword) {
              interstitialLegacyStatsReceiver.counter("muted_keyword").incr()
              Some(Interstitial(Reason.MutedKeyword))
            } else None

          case _ => None
        }

      case _ =>
        None
    }
  }