Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

basic twirssi_search implementation #11

Merged
5 commits merged into from
Sep 28, 2010
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 89 additions & 7 deletions twirssi.pl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@
my $first_call = 1;
my $child_pid;
my %fix_replies_index;
my %search_once;
my $update_is_running = 0;

my %irssi_to_mirc_colors = (
'%k' => '01',
Expand Down Expand Up @@ -435,6 +437,22 @@ sub gen_cmd {
}
}

sub cmd_search {
my ( $data, $server, $win ) = @_;

$data =~ s/^\s+|\s+$//g;
if ( length $data > 0 ) {
my $username = &normalize_username( $user );
if (exists $search_once{$username}->{$data}) {
&notice("Search is already queued");
}
$search_once{$username}->{$data} = Irssi::settings_get_int( "twitter_search_results" );
&get_updates;
} else {
&notice("Search query is empty");
}
}

sub cmd_switch {
my ( $data, $server, $win ) = @_;

Expand Down Expand Up @@ -1022,6 +1040,13 @@ sub get_updates {

return unless &logged_in($twit);

if ($update_is_running) {
print scalar localtime, " - get_updates aborted: already running" if &debug;
return;
} else {
$update_is_running = 1;
}

my ( $fh, $filename ) = File::Temp::tempfile();
binmode( $fh, ":" . &get_charset );
$child_pid = fork();
Expand Down Expand Up @@ -1306,6 +1331,48 @@ sub do_updates {
}
}

print scalar localtime, " - Polling for one-time searches" if &debug;
if ( $obj->can('search') and exists $search_once{$username} ) {
my $search;
foreach my $topic ( sort keys %{ $search_once{$username} } ) {
my $max_results = $search_once{$username}->{$topic};

print $fh "type:debug searching once for $topic (max $max_results)\n";
eval {
$search = $obj->search(
{
'q' => $topic
}
);
};

if ($@) {
print $fh
"type:debug Error during search_once($topic) call. Aborted.\n";
return undef;
}

unless ( $search->{max_id} ) {
print $fh "type:debug Invalid search results when searching once",
" for $topic. Aborted.\n";
return undef;
}
$topic =~ s/ /%20/g;

# TODO: consider applying ignore-settings to search results
my @results = @{ $search->{results} };
if ($max_results > 0) {
splice @results, $max_results;
}
foreach my $t ( reverse @results ) {

my $text = &get_text( $t, $obj );
printf $fh "id:%s account:%s nick:%s type:search_once topic:%s %s\n",
$t->{id}, $username, $t->{from_user}, $topic, $text;
}
}
}

print scalar localtime, " - Done" if &debug;

return 1;
Expand Down Expand Up @@ -1487,6 +1554,15 @@ sub monitor_child {
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
$meta{id};
}
} elsif ( $meta{type} eq 'search_once' ) {
push @lines,
[
( MSGLEVEL_PUBLIC | $hilight ),
$meta{type}, $account, $meta{topic},
$meta{nick}, $marker, $_
];
my $username = &normalize_username ( $meta{account} );
delete $search_once{$username}->{$meta{topic}};
} elsif ( $meta{type} eq 'dm' ) {
push @lines,
[
Expand Down Expand Up @@ -1601,6 +1677,7 @@ sub monitor_child {
}
$failwhale = 0;
$first_call = 0;
$update_is_running = 0;
return;
}
}
Expand All @@ -1616,6 +1693,8 @@ sub monitor_child {
waitpid( -1, WNOHANG );
unlink $filename unless &debug;

$update_is_running = 0;

return unless Irssi::settings_get_bool("twirssi_notify_timeouts");

my $since;
Expand Down Expand Up @@ -1898,11 +1977,12 @@ sub get_text {

Irssi::theme_register(
[
'twirssi_tweet', '[$0%B@$1%n$2] $3',
'twirssi_search', '[$0%r$1%n:%B@$2%n$3] $4',
'twirssi_reply', '[$0\--> %B@$1%n$2] $3',
'twirssi_dm', '[$0%r@$1%n (%WDM%n)] $2',
'twirssi_error', 'ERROR: $0',
'twirssi_tweet', '[$0%B@$1%n$2] $3',
'twirssi_search', '[$0%r$1%n:%B@$2%n$3] $4',
'twirssi_search_once', '[$0%r$1%n:%B@$2%n$3] $4',
'twirssi_reply', '[$0\--> %B@$1%n$2] $3',
'twirssi_dm', '[$0%r@$1%n (%WDM%n)] $2',
'twirssi_error', 'ERROR: $0',
]
);

Expand Down Expand Up @@ -1930,8 +2010,9 @@ sub get_text {
Irssi::settings_add_str( "twirssi", "twirssi_oauth_store",
Irssi::get_irssi_dir . "/scripts/twirssi.oauth" );

Irssi::settings_add_int( "twirssi", "twitter_friends_poll", 600 );
Irssi::settings_add_int( "twirssi", "twitter_timeout", 30 );
Irssi::settings_add_int( "twirssi", "twitter_friends_poll", 600 );
Irssi::settings_add_int( "twirssi", "twitter_timeout", 30 );
Irssi::settings_add_int( "twirssi", "twitter_search_results", 5 );

Irssi::settings_add_bool( "twirssi", "twirssi_upgrade_beta", 0 );
Irssi::settings_add_bool( "twirssi", "tweet_to_away", 0 );
Expand Down Expand Up @@ -1973,6 +2054,7 @@ sub get_text {
Irssi::command_bind( "twitter_reply_as", "cmd_reply_as" );
Irssi::command_bind( "twitter_login", "cmd_login" );
Irssi::command_bind( "twitter_logout", "cmd_logout" );
Irssi::command_bind( "twitter_search", "cmd_search" );
Irssi::command_bind( "twitter_switch", "cmd_switch" );
Irssi::command_bind( "twitter_subscribe", "cmd_add_search" );
Irssi::command_bind( "twitter_unsubscribe", "cmd_del_search" );
Expand Down