From 0e4bafafd8415d19c86b8986540c678b856ded68 Mon Sep 17 00:00:00 2001
From: Derf Null <derf@finalrewind.org>
Date: Fri, 30 Jun 2023 19:58:12 +0200
Subject: Profile: refactor visibility checks

---
 lib/Travelynx/Controller/Profile.pm | 131 ++++++++++--------------------------
 1 file changed, 35 insertions(+), 96 deletions(-)

(limited to 'lib')

diff --git a/lib/Travelynx/Controller/Profile.pm b/lib/Travelynx/Controller/Profile.pm
index a6b4a7c..3321721 100755
--- a/lib/Travelynx/Controller/Profile.pm
+++ b/lib/Travelynx/Controller/Profile.pm
@@ -95,29 +95,16 @@ sub profile {
 	}
 
 	my $status = $self->get_user_status( $user->{id} );
-	my $visibility;
 	if ( $status->{checked_in} or $status->{arr_name} ) {
-		$visibility
-		  = $self->compute_effective_visibility(
-			$user->{default_visibility_str},
-			$status->{visibility_str} );
+		my $visibility = $status->{effective_visibility};
 		if (
 			not(
-				$visibility eq 'public'
-				or (    $visibility eq 'unlisted'
-					and $self->status_token_ok($status) )
-				or (
-					$visibility eq 'travelynx'
-					and (  $my_user
-						or $is_self
-						or $self->status_token_ok($status) )
-				)
-				or (
-					$visibility eq 'followers'
-					and (  ( $relation and $relation eq 'follows' )
-						or $is_self
-						or $self->status_token_ok($status) )
-				)
+				   $visibility == 100
+				or ( $visibility >= 80 and $my_user )
+				or
+				( $visibility >= 60 and $relation and $relation eq 'follows' )
+				or ( $visibility >= 60 and $is_self )
+				or ( $visibility >= 30 and $self->status_token_ok($status) )
 			)
 		  )
 		{
@@ -281,27 +268,14 @@ sub journey_details {
 		}
 	}
 
-	my $visibility
-	  = $self->compute_effective_visibility( $user->{default_visibility_str},
-		$journey->{visibility_str} );
+	my $visibility = $journey->{effective_visibility};
 
 	if (
-		not(
-			( $visibility eq 'public' and not $is_past )
-			or (    $visibility eq 'unlisted'
-				and $self->journey_token_ok($journey) )
-			or (
-				$visibility eq 'travelynx'
-				and ( ( $my_user and not $is_past )
-					or $self->journey_token_ok($journey) )
-			)
-			or (
-				$visibility eq 'followers'
-				and (  ( $relation and $relation eq 'follows' )
-					or $is_self
-					or $self->journey_token_ok($journey) )
-			)
-		)
+		not(   ( $visibility == 100 and not $is_past )
+			or ( $visibility >= 80 and $my_user  and not $is_past )
+			or ( $visibility >= 60 and $relation and $relation eq 'follows' )
+			or ( $visibility >= 60 and $is_self )
+			or ( $visibility >= 30 and $self->journey_token_ok($journey) ) )
 	  )
 	{
 		$self->render(
@@ -420,26 +394,15 @@ sub user_status {
 			)
 		  )
 		{
-			my $visibility
-			  = $self->compute_effective_visibility(
-				$user->{default_visibility_str},
-				$journey->{visibility_str} );
+			my $visibility = $journey->{effective_visibility};
 			if (
-				$visibility eq 'public'
-				or (    $visibility eq 'unlisted'
+				   $visibility == 100
+				or ( $visibility >= 80 and $my_user )
+				or
+				( $visibility >= 60 and $relation and $relation eq 'follows' )
+				or ( $visibility >= 60 and $is_self )
+				or (    $visibility >= 30
 					and $self->journey_token_ok( $journey, $ts ) )
-				or (
-					$visibility eq 'travelynx'
-					and (  $my_user
-						or $is_self
-						or $self->journey_token_ok( $journey, $ts ) )
-				)
-				or (
-					$visibility eq 'followers'
-					and (  ( $relation and $relation eq 'follows' )
-						or $is_self
-						or $self->journey_token_ok( $journey, $ts ) )
-				)
 			  )
 			{
 				my $token = $self->param('token') // q{};
@@ -468,29 +431,17 @@ sub user_status {
 		site_name => 'travelynx',
 	);
 
-	my $visibility;
 	if ( $status->{checked_in} or $status->{arr_name} ) {
-		$visibility
-		  = $self->compute_effective_visibility(
-			$user->{default_visibility_str},
-			$status->{visibility_str} );
+		my $visibility = $status->{effective_visibility};
 		if (
 			not(
-				$visibility eq 'public'
-				or (    $visibility eq 'unlisted'
-					and $self->status_token_ok( $status, $ts ) )
-				or (
-					$visibility eq 'travelynx'
-					and (  $my_user
-						or $is_self
-						or $self->status_token_ok( $status, $ts ) )
-				)
-				or (
-					$visibility eq 'followers'
-					and (  ( $relation and $relation eq 'follows' )
-						or $is_self
-						or $self->status_token_ok( $status, $ts ) )
-				)
+				   $visibility == 100
+				or ( $visibility >= 80 and $my_user )
+				or
+				( $visibility >= 60 and $relation and $relation eq 'follows' )
+				or ( $visibility >= 60 and $is_self )
+				or
+				( $visibility >= 30 and $self->status_token_ok( $status, $ts ) )
 			)
 		  )
 		{
@@ -586,27 +537,15 @@ sub status_card {
 	my $status = $self->get_user_status( $user->{id} );
 	my $visibility;
 	if ( $status->{checked_in} or $status->{arr_name} ) {
-		$visibility
-		  = $self->compute_effective_visibility(
-			$user->{default_visibility_str},
-			$status->{visibility_str} );
+		my $visibility = $status->{effective_visibility};
 		if (
 			not(
-				$visibility eq 'public'
-				or (    $visibility eq 'unlisted'
-					and $self->status_token_ok($status) )
-				or (
-					$visibility eq 'travelynx'
-					and (  $my_user
-						or $is_self
-						or $self->status_token_ok($status) )
-				)
-				or (
-					$visibility eq 'followers'
-					and (  ( $relation and $relation eq 'follows' )
-						or $is_self
-						or $self->status_token_ok($status) )
-				)
+				   $visibility == 100
+				or ( $visibility >= 80 and $my_user )
+				or
+				( $visibility >= 60 and $relation and $relation eq 'follows' )
+				or ( $visibility >= 60 and $is_self )
+				or ( $visibility >= 30 and $self->status_token_ok($status) )
 			)
 		  )
 		{
-- 
cgit v1.2.3