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