Date info added. Client also if available. About to reorganize how things are displayed.
This commit is contained in:
+93
-1
@@ -87,7 +87,7 @@ BEGIN {
|
|||||||
# pause=auto # Auto-refresh rate (seconds, or 'auto')
|
# pause=auto # Auto-refresh rate (seconds, or 'auto')
|
||||||
# backload=30 # Number of posts to load initially
|
# backload=30 # Number of posts to load initially
|
||||||
# wrap=120 # Text wrapping width
|
# wrap=120 # Text wrapping width
|
||||||
# timestamp=0 # Show timestamps on posts
|
# timestamp=0 # Show timestamps on posts (0=off, 1=relative, 2=both)
|
||||||
# noreblogs=0 # Hide boost/reblog posts
|
# noreblogs=0 # Hide boost/reblog posts
|
||||||
|
|
||||||
# === DISPLAY SETTINGS ===
|
# === DISPLAY SETTINGS ===
|
||||||
@@ -6023,6 +6023,15 @@ sub standardpost {
|
|||||||
$post = "[$ts] $post";
|
$post = "[$ts] $post";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add relative time and client info
|
||||||
|
my $relative_time = &format_relative_time($ref->{'created_at'});
|
||||||
|
my $client_info = &format_client_info($ref);
|
||||||
|
|
||||||
|
my $metadata = '';
|
||||||
|
$metadata .= " ($relative_time)" if ($relative_time);
|
||||||
|
$metadata .= " via $client_info" if ($client_info);
|
||||||
|
$post .= $metadata if ($metadata);
|
||||||
|
|
||||||
# pull it all together
|
# pull it all together
|
||||||
$post = &wwrap($post, ($wrapseq <= 1) ? ((&$prompt(1))[1]) : 0)
|
$post = &wwrap($post, ($wrapseq <= 1) ? ((&$prompt(1))[1]) : 0)
|
||||||
if ($wrap); # remember to account for prompt length on #1
|
if ($wrap); # remember to account for prompt length on #1
|
||||||
@@ -6098,6 +6107,89 @@ sub format_poll_display {
|
|||||||
return $poll_text;
|
return $poll_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# format relative time (e.g., "5 minutes ago", "2 hours ago")
|
||||||
|
sub format_relative_time {
|
||||||
|
my $created_at = shift;
|
||||||
|
return '' unless ($created_at);
|
||||||
|
|
||||||
|
# Parse the fediverse timestamp format (ISO 8601)
|
||||||
|
# Example: "2025-07-26T12:34:56.000Z"
|
||||||
|
my ($year, $month, $day, $hour, $min, $sec);
|
||||||
|
if ($created_at =~ /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/) {
|
||||||
|
($year, $month, $day, $hour, $min, $sec) = ($1, $2, $3, $4, $5, $6);
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
# Convert to Unix timestamp
|
||||||
|
my $post_time = eval {
|
||||||
|
require Time::Local;
|
||||||
|
Time::Local::timegm($sec, $min, $hour, $day, $month - 1, $year);
|
||||||
|
};
|
||||||
|
return '' if (!defined($post_time) || $@);
|
||||||
|
|
||||||
|
my $now = time();
|
||||||
|
my $diff = $now - $post_time;
|
||||||
|
|
||||||
|
# Handle future timestamps (clock skew)
|
||||||
|
return "just now" if ($diff < 0);
|
||||||
|
|
||||||
|
# Calculate relative time
|
||||||
|
if ($diff < 60) {
|
||||||
|
return "just now";
|
||||||
|
} elsif ($diff < 3600) { # Less than 1 hour
|
||||||
|
my $minutes = int($diff / 60);
|
||||||
|
return "${minutes}m ago";
|
||||||
|
} elsif ($diff < 86400) { # Less than 1 day
|
||||||
|
my $hours = int($diff / 3600);
|
||||||
|
return "${hours}h ago";
|
||||||
|
} elsif ($diff < 604800) { # Less than 1 week
|
||||||
|
my $days = int($diff / 86400);
|
||||||
|
return "${days}d ago";
|
||||||
|
} elsif ($diff < 2629746) { # Less than 1 month (30.44 days)
|
||||||
|
my $weeks = int($diff / 604800);
|
||||||
|
return "${weeks}w ago";
|
||||||
|
} elsif ($diff < 31556952) { # Less than 1 year
|
||||||
|
my $months = int($diff / 2629746);
|
||||||
|
return "${months}mo ago";
|
||||||
|
} else {
|
||||||
|
my $years = int($diff / 31556952);
|
||||||
|
return "${years}y ago";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# format client application info
|
||||||
|
sub format_client_info {
|
||||||
|
my $ref = shift;
|
||||||
|
|
||||||
|
# For boost posts, show client of original post
|
||||||
|
my $app_data;
|
||||||
|
if (exists($ref->{'reblog'}) && $ref->{'reblog'} && exists($ref->{'reblog'}->{'application'})) {
|
||||||
|
$app_data = $ref->{'reblog'}->{'application'};
|
||||||
|
} elsif (exists($ref->{'application'})) {
|
||||||
|
$app_data = $ref->{'application'};
|
||||||
|
}
|
||||||
|
|
||||||
|
return '' unless ($app_data && ref($app_data) eq 'HASH');
|
||||||
|
|
||||||
|
my $client_name = $app_data->{'name'} || '';
|
||||||
|
return '' unless ($client_name);
|
||||||
|
|
||||||
|
# Clean up common client names for better display
|
||||||
|
if ($client_name =~ /^mastodon/i) {
|
||||||
|
return "Web" if ($client_name =~ /web/i);
|
||||||
|
return "Mobile" if ($client_name =~ /mobile|android|ios/i);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Handle common clients
|
||||||
|
$client_name = "Tusky" if ($client_name =~ /tusky/i);
|
||||||
|
$client_name = "Subway Tooter" if ($client_name =~ /subway.*tooter/i);
|
||||||
|
$client_name = "Fedilab" if ($client_name =~ /fedilab/i);
|
||||||
|
$client_name = "TTYverse" if ($client_name =~ /ttyverse/i);
|
||||||
|
|
||||||
|
return $client_name;
|
||||||
|
}
|
||||||
|
|
||||||
# format a DM based on standard user options
|
# format a DM based on standard user options
|
||||||
sub standarddm {
|
sub standarddm {
|
||||||
my $ref = shift;
|
my $ref = shift;
|
||||||
|
|||||||
Reference in New Issue
Block a user