Changeset 85fa6e4 for perl/modules
- Timestamp:
- Dec 30, 2009, 1:59:57 PM (15 years ago)
- Branches:
- master, release-1.10, release-1.6, release-1.7, release-1.8, release-1.9
- Children:
- 814aca1
- Parents:
- 416241f (diff), 460fbe8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Location:
- perl/modules
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm
r0cfa6ee rb84feab 1229 1229 $props{xml} = $j->GetXML(); 1230 1230 1231 if ( $jtype eq 'chat' ) { 1231 if ( $jtype eq 'groupchat' ) { 1232 my $nick = $props{nick} = $from->GetResource(); 1233 my $room = $props{room} = $from->GetJID('base'); 1234 $completion_jids{$room} = 1; 1235 1236 $props{sender} = $nick || $room; 1237 $props{recipient} = $room; 1238 1239 if ( $props{subject} && !$props{body} ) { 1240 $props{body} = 1241 '[' . $nick . " has set the topic to: " . $props{subject} . "]"; 1242 } 1243 } 1244 elsif ( $jtype eq 'headline' ) { 1245 ; 1246 } 1247 elsif ( $jtype eq 'error' ) { 1248 $props{body} = "Error " 1249 . $props{error_code} 1250 . " sending to " 1251 . $props{from} . "\n" 1252 . $props{error}; 1253 } 1254 else { # chat, or normal (default) 1232 1255 $props{private} = 1; 1233 1256 … … 1256 1279 $completion_jids{ $props{recipient} } = 1; 1257 1280 } 1258 }1259 elsif ( $jtype eq 'groupchat' ) {1260 my $nick = $props{nick} = $from->GetResource();1261 my $room = $props{room} = $from->GetJID('base');1262 $completion_jids{$room} = 1;1263 1264 $props{sender} = $nick || $room;1265 $props{recipient} = $room;1266 1267 if ( $props{subject} && !$props{body} ) {1268 $props{body} =1269 '[' . $nick . " has set the topic to: " . $props{subject} . "]";1270 }1271 }1272 elsif ( $jtype eq 'normal' ) {1273 $props{private} = 1;1274 }1275 elsif ( $jtype eq 'headline' ) {1276 }1277 elsif ( $jtype eq 'error' ) {1278 $props{body} = "Error "1279 . $props{error_code}1280 . " sending to "1281 . $props{from} . "\n"1282 . $props{error};1283 1281 } 1284 1282 -
perl/modules/IRC/lib/BarnOwl/Module/IRC.pm
r618a980 r416241f 137 137 } 138 138 139 use constant OPTIONAL_CHANNEL => 1; 140 use constant REQUIRE_CHANNEL => 2; 139 =head2 mk_irc_command SUB FLAGS 140 141 Return a subroutine that can be bound as a an IRC command. The 142 subroutine will be called with arguments (COMMAND-NAME, 143 IRC-CONNECTION, [CHANNEL], ARGV...). 144 145 C<IRC-CONNECTION> and C<CHANNEL> will be inferred from arguments to 146 the command and the current message if appropriate. 147 148 The bitwise C<or> of zero or more C<FLAGS> can be passed in as a 149 second argument to alter the behavior of the returned commands: 150 151 =over 4 152 153 =item C<CHANNEL_ARG> 154 155 This command accepts the name of a channel. Pass in the C<CHANNEL> 156 argument listed above, and die if no channel argument can be found. 157 158 =item C<CHANNEL_OPTIONAL> 159 160 Pass the channel argument, but don't die if not present. Only relevant 161 with C<CHANNEL_ARG>. 162 163 =item C<ALLOW_DISCONNECTED> 164 165 C<IRC-CONNECTION> may be a disconnected connection object that is 166 currently pending a reconnect. 167 168 =back 169 170 =cut 171 172 use constant CHANNEL_ARG => 1; 173 use constant CHANNEL_OPTIONAL => 2; 174 175 use constant ALLOW_DISCONNECTED => 4; 141 176 142 177 sub register_commands { … … 167 202 168 203 BarnOwl::new_command( 169 'irc-disconnect' => \&cmd_disconnect,204 'irc-disconnect' => mk_irc_command( \&cmd_disconnect, ALLOW_DISCONNECTED ), 170 205 { 171 206 summary => 'Disconnect from an IRC server', … … 192 227 193 228 BarnOwl::new_command( 194 'irc-mode' => mk_irc_command( \&cmd_mode, OPTIONAL_CHANNEL),229 'irc-mode' => mk_irc_command( \&cmd_mode, CHANNEL_OPTIONAL|CHANNEL_ARG ), 195 230 { 196 231 summary => 'Change an IRC channel or user mode', … … 216 251 217 252 BarnOwl::new_command( 218 'irc-part' => mk_irc_command( \&cmd_part, REQUIRE_CHANNEL),253 'irc-part' => mk_irc_command( \&cmd_part, CHANNEL_ARG ), 219 254 { 220 255 summary => 'Leave an IRC channel', … … 241 276 242 277 BarnOwl::new_command( 243 'irc-names' => mk_irc_command( \&cmd_names, REQUIRE_CHANNEL),278 'irc-names' => mk_irc_command( \&cmd_names, CHANNEL_ARG ), 244 279 { 245 280 summary => 'View the list of users in a channel', … … 294 329 295 330 BarnOwl::new_command( 296 'irc-topic' => mk_irc_command( \&cmd_topic, REQUIRE_CHANNEL),331 'irc-topic' => mk_irc_command( \&cmd_topic, CHANNEL_ARG ), 297 332 { 298 333 summary => 'View or change the topic of an IRC channel', … … 391 426 392 427 sub cmd_disconnect { 393 # Such a hack 394 local *get_connection_by_alias = sub { 395 my $key = shift; 396 return $ircnets{$key} if exists $ircnets{$key}; 397 return $reconnect{$key}{conn} if exists $reconnect{$key}; 398 die("No such ircnet: $key\n"); 399 }; 400 401 mk_irc_command( 402 sub { 403 my $cmd = shift; 404 my $conn = shift; 405 if ($conn->conn->connected) { 406 $conn->conn->disconnect; 407 } elsif ($reconnect{$conn->alias}) { 408 BarnOwl::admin_message('IRC', 409 "[" . $conn->alias . "] Reconnect cancelled"); 410 delete $reconnect{$conn->alias}; 411 } 412 } 413 )->(@_); 428 my $cmd = shift; 429 my $conn = shift; 430 if ($conn->conn->connected) { 431 $conn->conn->disconnect; 432 } elsif ($reconnect{$conn->alias}) { 433 BarnOwl::admin_message('IRC', 434 "[" . $conn->alias . "] Reconnect cancelled"); 435 $conn->cancel_reconnect; 436 } 414 437 } 415 438 … … 564 587 sub mk_irc_command { 565 588 my $sub = shift; 566 my $ use_channel= shift || 0;589 my $flags = shift || 0; 567 590 return sub { 568 591 my $cmd = shift; … … 578 601 579 602 if(defined($alias)) { 580 $conn = get_connection_by_alias($alias); 581 } 582 if($use_channel) { 603 $conn = get_connection_by_alias($alias, 604 $flags & ALLOW_DISCONNECTED); 605 } 606 if($flags & CHANNEL_ARG) { 583 607 $channel = $ARGV[0]; 584 608 if(defined($channel) && $channel =~ /^#/) { … … 594 618 } 595 619 596 if(!$channel && $use_channel == REQUIRE_CHANNEL) { 620 if(!$channel && 621 ($flags & CHANNEL_ARG) && 622 !($flags & CHANNEL_OPTIONAL)) { 597 623 die("Usage: $cmd <channel>\n"); 598 624 } 599 625 if(!$conn) { 600 626 if($m && $m->type eq 'IRC') { 601 $conn = get_connection_by_alias($m->network); 627 $conn = get_connection_by_alias($m->network, 628 $flags & ALLOW_DISCONNECTED); 602 629 } 603 630 } … … 608 635 die("You must specify an IRC network using -a.\n"); 609 636 } 610 if($ use_channel) {637 if($flags & CHANNEL_ARG) { 611 638 $sub->($cmd, $conn, $channel, @ARGV); 612 639 } else { … … 618 645 sub get_connection_by_alias { 619 646 my $key = shift; 620 die("No such ircnet: $key\n") unless exists $ircnets{$key}; 621 return $ircnets{$key}; 647 my $allow_disconnected = shift; 648 649 return $ircnets{$key} if exists $ircnets{$key}; 650 return $reconnect{$key} if $allow_disconnected && exists $reconnect{$key}; 651 die("No such ircnet: $key\n") 622 652 } 623 653 -
perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm
r618a980 r416241f 23 23 24 24 use BarnOwl; 25 use Scalar::Util qw(weaken); 25 26 26 27 BEGIN { … … 315 316 my $interval = shift || 5; 316 317 delete $BarnOwl::Module::IRC::ircnets{$self->alias}; 317 $BarnOwl::Module::IRC::reconnect{$self->alias} = 318 $BarnOwl::Module::IRC::reconnect{$self->alias} = $self; 319 my $weak = $self; 320 weaken($weak); 321 $self->{reconnect_timer} = 318 322 BarnOwl::Timer->new( { 319 323 after => $interval, 320 324 cb => sub { 321 $ self->reconnect( $interval );325 $weak->reconnect( $interval ) if $weak; 322 326 }, 323 327 } ); 324 $BarnOwl::Module::IRC::reconnect{$self->alias}{conn} = $self; 328 } 329 330 sub cancel_reconnect { 331 my $self = shift; 332 delete $BarnOwl::Module::IRC::reconnect{$self->alias}; 333 delete $self->{reconnect_timer}; 325 334 } 326 335 … … 329 338 my $msg = shift; 330 339 BarnOwl::admin_message("IRC", $msg); 331 delete $BarnOwl::Module::IRC::reconnect{$self->alias};340 $self->cancel_reconnect; 332 341 $BarnOwl::Module::IRC::ircnets{$self->alias} = $self; 333 342 my $fd = $self->getSocket()->fileno();
Note: See TracChangeset
for help on using the changeset viewer.