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 )