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
}
}