Changes in / [0948fa0f:e4e1dcb]


Ignore:
Location:
lib/BarnOwl/Module
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lib/BarnOwl/Module/Twitter.pm

    r22fce654 r22fce654  
    187187}
    188188
    189 sub poll_messages {
    190     return unless @twitter_handles;
    191 
    192     my $handle = $twitter_handles[$next_service_to_poll];
    193     $next_service_to_poll = ($next_service_to_poll + 1) % scalar(@twitter_handles);
    194    
    195     $handle->poll_twitter() if $handle->{cfg}->{poll_for_tweets};
    196     $handle->poll_direct() if $handle->{cfg}->{poll_for_dms};
    197 }
    198 
    199189sub find_account {
    200190    my $name = shift;
     
    345335}
    346336
    347 eval {
    348     $BarnOwl::Hooks::receiveMessage->add("BarnOwl::Module::Twitter::handle_message");
    349     $BarnOwl::Hooks::mainLoop->add("BarnOwl::Module::Twitter::poll_messages");
    350 };
    351 if($@) {
    352     $BarnOwl::Hooks::receiveMessage->add(\&handle_message);
    353     $BarnOwl::Hooks::mainLoop->add(\&poll_messages);
    354 }
    355 
    356337BarnOwl::filter(qw{twitter type ^twitter$});
    357338
  • lib/BarnOwl/Module/Twitter/Handle.pm

    r0948fa0f re4951ea  
    2424}
    2525use HTML::Entities;
     26
     27use Scalar::Util qw(weaken);
    2628
    2729use BarnOwl;
     
    6567        'cfg'  => $cfg,
    6668        'twitter' => undef,
    67         'last_poll' => 0,
    68         'last_direct_poll' => 0,
    6969        'last_id' => undef,
    7070        'last_direct' => undef,
     71        'timer'        => undef,
     72        'direct_timer' => undef
    7173    };
    7274
     
    100102    warn "$@\n" if $@;
    101103
     104    $self->sleep(0);
     105
    102106    return $self;
     107}
     108
     109=head2 sleep SECONDS
     110
     111Stop polling Twitter for SECONDS seconds.
     112
     113=cut
     114
     115sub sleep {
     116    my $self  = shift;
     117    my $delay = shift;
     118
     119    my $weak = $self;
     120    weaken($weak);
     121
     122    if($self->{cfg}->{poll_for_tweets}) {
     123        $self->{timer} = BarnOwl::Timer->new({
     124            after    => $delay,
     125            interval => 60,
     126            cb       => sub { $weak->poll_twitter if $weak }
     127           });
     128    }
     129
     130    if($self->{cfg}->{poll_for_dms}) {
     131        $self->{direct_timer} = BarnOwl::Timer->new({
     132            after    => $delay,
     133            interval => 120,
     134            cb       => sub { $weak->poll_direct if $weak }
     135           });
     136    }
    103137}
    104138
     
    137171    warn "$@\n" if $@;
    138172    unless(defined($ratelimit) && ref($ratelimit) eq 'HASH') {
    139         # Twitter's just sucking, sleep for 5 minutes
    140         $self->{last_direct_poll} = $self->{last_poll} = time + 60*5;
    141         # die("Twitter seems to be having problems.\n");
     173        # Twitter's probably just sucking, try again later.
     174        $self->sleep(5*60);
    142175        return;
    143176    }
     177
    144178    if(exists($ratelimit->{remaining_hits})
    145179       && $ratelimit->{remaining_hits} <= 0) {
    146         $self->{last_direct_poll} = $self->{last_poll} = $ratelimit->{reset_time_in_seconds};
     180        $self->sleep($ratelimit->{reset_time_in_seconds} - time + 60);
    147181        die("Twitter: ratelimited until " . $ratelimit->{reset_time} . "\n");
    148182    } elsif(exists($ratelimit->{error})) {
     183        $self->sleep(60*20);
    149184        die("Twitter: ". $ratelimit->{error} . "\n");
    150         $self->{last_direct_poll} = $self->{last_poll} = time + 60*20;
    151185    }
    152186}
     
    155189    my $self = shift;
    156190
    157     return unless ( time - $self->{last_poll} ) >= 60;
    158     $self->{last_poll} = time;
    159191    return unless BarnOwl::getvar('twitter:poll') eq 'on';
     192
     193    BarnOwl::debug("Polling " . $self->{cfg}->{account_nickname});
    160194
    161195    my $timeline = eval { $self->{twitter}->home_timeline( { since_id => $self->{last_id} } ) };
     
    208242    my $self = shift;
    209243
    210     return unless ( time - $self->{last_direct_poll}) >= 120;
    211     $self->{last_direct_poll} = time;
    212244    return unless BarnOwl::getvar('twitter:poll') eq 'on';
     245
     246    BarnOwl::debug("Polling direct for " . $self->{cfg}->{account_nickname});
    213247
    214248    my $direct = eval { $self->{twitter}->direct_messages( { since_id => $self->{last_direct} } ) };
Note: See TracChangeset for help on using the changeset viewer.