Changeset 38984 for lang

Show
Ignore:
Timestamp:
09/03/11 21:11:30 (3 years ago)
Author:
topia
Message:

add experimental notifo support.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/tiarra/trunk/module/Auto/Notify.pm

    r37855 r38984  
    289289} 
    290290 
     291 
     292sub config_notifo { 
     293    my ($this, $config) = @_; 
     294 
     295    require Crypt::SSLeay; # https support 
     296    require MIME::Base64; 
     297 
     298    return # subscribe_user is not work with user account 
     299        if (!defined($config->to) || $config->user eq $config->to); 
     300    my $url = "https://api.notifo.com/v1/subscribe_user"; 
     301    my $runloop = $this->_runloop; 
     302    Tools::HTTPClient->new( 
     303        Request => POST($url, [username => $config->user], 
     304                        Authorization => 'Basic '. 
     305                            MIME::Base64::encode($config->user .':'.$config->secret, "")), 
     306       )->start( 
     307           Callback => sub { 
     308               my $stat = shift; 
     309               if (!ref($stat)) { 
     310                   $runloop->notify_warn(__PACKAGE__." notifo: verify failed: $stat"); 
     311               } elsif ($stat->{Content} !~ /"status":\s*"success"[,}]/) { 
     312                   (my $content = $stat->{Content}) =~ s/\s+/ /; 
     313                   $runloop->notify_warn(__PACKAGE__." notifo: verify failed: $content"); 
     314               } 
     315           }, 
     316          ); 
     317} 
     318 
     319sub send_notifo { 
     320    my ($this, $config, $text, $msg, $sender, $full_ch_name) = @_; 
     321 
     322    my $url = "https://api.notifo.com/v1/send_notification"; 
     323    $text = $this->strip_mirc_formatting($text); 
     324    my $title = Auto::AliasDB->stdreplace( 
     325        $msg->prefix, 
     326        $config->title_format || '#(channel):#(nick.now)', 
     327        $msg, $sender, 
     328        channel => $full_ch_name, 
     329        raw_channel => Auto::Utils::get_raw_ch_name($msg, 0), 
     330        text => $text, 
     331       ); 
     332    my $uri = Auto::AliasDB->stdreplace( 
     333        $msg->prefix, 
     334        $config->uri_format || '', 
     335        $msg, $sender, 
     336        channel => $full_ch_name, 
     337        raw_channel => Auto::Utils::get_raw_ch_name($msg, 0), 
     338        text => $text, 
     339       ); 
     340    $text = Auto::AliasDB->stdreplace( 
     341        $msg->prefix, 
     342        $config->format || $this->config->format || '#(text)', 
     343        $msg, $sender, 
     344        channel => $full_ch_name, 
     345        raw_channel => Auto::Utils::get_raw_ch_name($msg, 0), 
     346        text => $text, 
     347       ); 
     348    my $data = [label => $config->label || 'tiarra', 
     349                title => $title, 
     350                to => $config->to || $config->user, 
     351                ((defined($uri) && $uri ne "") ? (uri => $uri) : ()), 
     352                msg => $text]; 
     353    my $runloop = $this->_runloop; 
     354    Tools::HTTPClient->new( 
     355        Request => POST($url, $data, Authorization => 'Basic '. 
     356                            MIME::Base64::encode($config->user .':'.$config->secret, "")), 
     357       )->start( 
     358           Callback => sub { 
     359               my $stat = shift; 
     360               if (!ref($stat)) { 
     361                   $runloop->notify_warn(__PACKAGE__." notifo: post failed: $stat"); 
     362               } elsif ($stat->{Content} !~ /"status":\s*"success"[,}]/) { 
     363                   (my $content = $stat->{Content}) =~ s/\s+/ /; 
     364                   $runloop->notify_warn(__PACKAGE__." notifo: post failed: $content"); 
     365               } 
     366           }, 
     367          ); 
     368} 
     369 
     370 
    2913711; 
    292372 
     
    313393 
    314394# 使用するブロックを指定します 
    315 -blocks: im prowl boxcar-growl boxcar-provider 
     395-blocks: im prowl boxcar-growl boxcar-provider notifo 
    316396 
    317397im { 
     
    414494} 
    415495 
     496notifo { 
     497 
     498# 通知先のタイプを指定します。 
     499type: notifo 
     500 
     501# noifo の Settings ページにある API Username を指定します。 
     502# http://notifo.com/user/settings 
     503user: XXXXXXX 
     504 
     505# noifo の Settings ページにある API Secret を指定します。 
     506# http://notifo.com/user/settings 
     507secret: XXXXXXXXXXXXXXXXXXXXXX 
     508 
     509# ラベルを指定します。 
     510# サービスアカウントでは無視されます。 
     511label: tiarra 
     512 
     513# 通知先のユーザ名を指定します。 
     514# ユーザアカウントでは無視されます。省略した場合は user に通知します。 
     515-to: XXXXXXXXXXXXX 
     516 
     517# タイトルのフォーマットを指定できます。 
     518# デフォルト値: #(channel):#(nick.now) 
     519title-format: #(channel):#(nick.now) 
     520 
     521# URIのフォーマットを指定できます。 
     522# 省略すると通知にURIを含めません。 
     523# 現状の機構ではURIをエスケープする手段がないので、固定値以外はお勧めしません。 
     524uri-format: 
     525 
     526# 通知先ごとにフォーマットを指定できます。 
     527# この例では先頭に時刻を追加しています。 
     528format: #(date:%H:%M:%S) [#(channel):#(nick.now)] #(text) 
     529 
     530} 
     531 
    416532 
    417533=cut