BusyBird
view release on metacpan or search on metacpan
lib/BusyBird/Config.pm view on Meta::CPAN
package BusyBird::Config;
use v5.8.0;
use strict;
use warnings;
use Carp;
use BusyBird::Log qw(bblog);
use BusyBird::SafeData qw(safed);
use BusyBird::Util qw(config_file_path);
use URI::Escape qw(uri_escape);
use Encode ();
use Tie::IxHash;
use BusyBird::StatusStorage::SQLite;
use File::ShareDir ();
my %_DEFAULTS = ();
$_DEFAULTS{timeline} = {
time_zone => sub { "local" },
time_format => sub { '%x (%a) %X %Z' },
time_locale => sub { $ENV{LC_TIME} or "C" },
post_button_url => sub { "https://twitter.com/intent/tweet" },
status_permalink_builder => sub { return sub {
my ($status) = @_;
my $ss = safed($status);
my $permalink_in_status = $ss->val(qw(busybird status_permalink));
return $permalink_in_status if defined $permalink_in_status;
my $id = $ss->val(qw(busybird original id))
|| $ss->val(qw(busybird original id_str))
|| $ss->val("id")
|| $ss->val("id_str");
my $username = $ss->val(qw(user screen_name));
if(defined($id) && defined($username) && $id =~ /^\d+$/) {
return qq{https://twitter.com/$username/status/$id};
}
return undef;
} },
urls_entity_url_builder => sub { sub { my ($text, $entity) = @_; return $entity->{url} }},
urls_entity_text_builder => sub { sub { my ($text, $entity) = @_; return $entity->{display_url} }},
media_entity_url_builder => sub { sub { my ($text, $entity) = @_; return $entity->{url} } },
media_entity_text_builder => sub { sub { my ($text, $entity) = @_; return $entity->{display_url} }},
user_mentions_entity_url_builder => sub { sub {
my ($text, $entity, $status) = @_;
my $screen_name = $entity->{screen_name};
$screen_name = "" if not defined $screen_name;
return qq{https://twitter.com/$screen_name};
}},
user_mentions_entity_text_builder => sub { sub { my $text = shift; return $text }},
hashtags_entity_url_builder => sub { sub {
my ($text, $entity, $status) = @_;
my $query_hashtag = uri_escape('#' . Encode::encode('utf8', $entity->{text}));
return qq{https://twitter.com/search?q=$query_hashtag&src=hash};
}},
hashtags_entity_text_builder => sub { sub { my $text = shift; return $text }},
timeline_web_notifications => sub { 'simple' },
hidden => sub { 0 },
attached_image_urls_builder => sub {
return sub {
my ($status) = @_;
tie my %url_set, "Tie::IxHash";
my $ss = safed($status);
my @entities = map { $ss->array($_, "media") } qw(entities extended_entities);
foreach my $entity (@entities) {
my $sentity = safed($entity);
my $url = $sentity->val("media_url");
my $type = $sentity->val("type");
if(defined($url) && (!defined($type) || lc($type) eq "photo")) {
$url_set{$url} = 1 if defined $url;
}
}
return keys %url_set;
};
},
attached_image_max_height => sub { 360 },
attached_image_show_default => sub { "hidden" },
acked_statuses_load_count => sub { 20 },
default_level_threshold => sub { 0 },
};
$_DEFAULTS{global} = {
%{$_DEFAULTS{timeline}},
default_status_storage => sub {
( run in 0.659 second using v1.01-cache-2.11-cpan-39bf76dae61 )