[249] in BarnOwl Developers

home help back first fref pref prev next nref lref last post

[D-O-H] r423 - trunk/conf.asedeno/owl/modules

daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:04:06 2009

Resent-From: nelhage@mit.edu
Resent-To: barnowl-dev-mtg@charon.mit.edu
To: dirty-owl-hackers@mit.edu
From: asedeno@MIT.EDU
Reply-to: dirty-owl-hackers@MIT.EDU
Date: Sun, 29 Oct 2006 13:02:03 -0500 (EST)

Author: asedeno
Date: 2006-10-29 13:02:03 -0500 (Sun, 29 Oct 2006)
New Revision: 423

Modified:
   trunk/conf.asedeno/owl/modules/jabber.pl
Log:
More updates to jabber.pl



Modified: trunk/conf.asedeno/owl/modules/jabber.pl
===================================================================
--- trunk/conf.asedeno/owl/modules/jabber.pl	2006-10-29 16:55:30 UTC (rev 422)
+++ trunk/conf.asedeno/owl/modules/jabber.pl	2006-10-29 18:02:03 UTC (rev 423)
@@ -32,18 +32,21 @@
     return if ($client == undef);
     
     my $status = $client->Process(0);
-    if ($status == undef)
+    if ($status == 0     # No data received
+	|| $status == 1) # Data received
     {
-	#Admin message about disconnect here.
-	#Also consider getting out of @::onMainLoop.
+    }
+    else #Error
+    {
+	queue_admin_msg("Jabber disconnected.");
+	$client = undef;
 	return;
     }
     
     if ($::shutdown)
     {
-	#Admin message about disconnect here.
-	#Also consider getting out of @::onMainLoop.
 	$client->Disconect();
+	$client = undef;
 	return;
     }
 }
@@ -61,29 +64,30 @@
         jabberlogout => \&cmd_logout,
         { summary => "Log out of jabber" }
     );
-
-    #    owl::new_command(jabberreply => \&cmd_reply);
     owl::new_command(
         jwrite => \&cmd_jwrite,
         {
             description => "Send a Jabber Message",
-            usage       => "jwrite JID"
+            usage       => "jwrite JID [-t thread]"
         }
     );
-
 }
 
 sub cmd_login
 {
     if ($client != undef)
     {
-	# Admin message here.
+	queue_admin_msg("Already logged in.");
 	return;
     }
     
     # These strings should not be hard-coded here.
     $client = Net::Jabber::Client->new();
-    $client->SetMessageCallBacks(chat => \&process_incoming_chat_message);
+    $client->SetMessageCallBacks(chat => \&process_incoming_chat_message,
+				 error => \&process_incoming_error_message,
+				 groupchat => \&process_incoming_groupchat_message,
+				 headline => \&process_incoming_headline_message,
+				 normal => \&process_incoming_normal_message);
     my $status = $client->Connect(hostname => 'jabber.mit.edu',
 				  tls => 1,
 				  port => 5222,
@@ -109,6 +113,7 @@
 		 resource => 'owl');
     
     $client->PresenceSend(priority => 1);
+    queue_admin_msg("Connected to jabber as ".$jid->GetJID('full'));
 
     return "";
 }
@@ -119,28 +124,13 @@
     {
 	$client->Disconnect();
 	$client = undef;
-	# Admin message here.
+	queue_admin_msg("Jabber disconnected.");
     }
+    return "";
 }
 
-#our $repl_msg = undef;
-sub cmd_reply 
-{
-    my $repl_msg = owl::getcurmsg();
-    if (!$repl_msg->is_jabber)
-    {
-	# owl::getcurmsg() doesn't work from the callback.
-	$repl_msg = undef;
-	return;	 
-    }
-    my $to = ($repl_msg->is_incoming) 
-	? $repl_msg->sender
-	: $repl_msg->recipient;
-
-    owl::start_edit_win("jwrite ".$to, \&process_owl_jabber_reply);
-}
-
 our $jwrite_to;
+our $jwrite_thread;
 sub cmd_jwrite
 {
     if (!$client)
@@ -148,9 +138,19 @@
 	# Error here
 	return;
     }
-    $jwrite_to = $_[1];
+
+    $jwrite_to = "";
+    $jwrite_thread = "";
+    my @args = @_;
+    my $argsLen = @args;
+    for (my $i = 1; $i < $argsLen; $i++)
+    {
+	$args[$i] =~ /^-t$/ && ($jwrite_thread = $args[$i++] and next $i);
+	$jwrite_to = $args[$i];
+    }
+
     if(!$jwrite_to) {
-        owl::error("Usage: jwrite JID");
+        owl::error("Usage: jwrite JID [-t thread]");
         return;
     }
     owl::message("Type your message below.  End with a dot on a line by itself.  ^C will quit.");
@@ -162,8 +162,6 @@
 sub process_owl_jwrite
 {
     my $body = shift;
-#    my $repl_msg = shift;
-    my $repl_msg = owl::getcurmsg();
 
     my $j = new Net::XMPP::Message;
     $j->SetMessage(to => $jwrite_to,
@@ -171,6 +169,7 @@
  		   type => 'chat',
  		   body => $body
 		   );
+    $j->SetThread($jwrite_thread) if ($jwrite_thread);
 
     my $m = j2o($j, 'out');
     owl::queue_message($m);
@@ -178,35 +177,33 @@
     # Errors?
 }
 
-sub process_owl_jabber_reply
+### XMPP Callbacks
+
+sub process_incoming_chat_message
 {
-    my $reply = shift;
-#    my $repl_msg = shift;
-    my $repl_msg = owl::getcurmsg();
+    my ($session, $j) = @_;
+    owl::queue_message(j2o($j, 'in'));
+}
 
-    my $j = new Net::XMPP::Message;
-    $j->SetMessage(to => $repl_msg->is_incoming
-		   ? $repl_msg->{sender}
-		   : $repl_msg->{recipient},
-		   from => $repl_msg->is_incoming
-		   ? $repl_msg->{recipient}
-		   : $repl_msg->{sender},
- 		   type => $repl_msg->{jtype},
- 		   body => $reply
-		   );
+sub process_incoming_error_message
+{
+    my ($session, $j) = @_;
+    queue_admin_msg("Error ".$j->GetErrorCode()." sending to ".$j->GetFrom('jid')->GetJID('base'));
+}
 
-    $j->SetSubject($repl_msg->{subject}) if ($repl_msg->{subject});
-    $j->SetSubject($repl_msg->{thread}) if ($repl_msg->{thread});
-    
-    my $m = j2o($j, 'out');
-    owl::queue_message($m);
-    $client->Send($j);
-    # Errors?
+sub process_incoming_groupchat_message
+{
+    my ($session, $j) = @_;
+    owl::queue_message(j2o($j, 'in'));
 }
 
-### XMPP Callbacks
+sub process_incoming_headline_message
+{
+    my ($session, $j) = @_;
+    owl::queue_message(j2o($j, 'in'));
+}
 
-sub process_incoming_chat_message
+sub process_incoming_normal_message
 {
     my ($session, $j) = @_;
     owl::queue_message(j2o($j, 'in'));
@@ -224,32 +221,46 @@
 		 direction => $dir);
 
     my $reply_to;
-    if($dir eq 'out') {
-        $reply_to = $j->GetTo;
-    } else {
-        $reply_to = $j->GetFrom;
-    }
-    $props{replycmd} = $props{replysendercmd} = "jwrite $reply_to";
-
     if ($j->DefinedTo())
     {
 	my $jid = $j->GetTo('jid');
 	$props{recipient} = $jid->GetJID('base');
 	$props{to_jid} = $jid->GetJID('full');
+	$reply_to = $props{recipient} if ($dir eq 'out');
     }
     if ($j->DefinedFrom())
     {
 	my $jid = $j->GetFrom('jid');
 	$props{sender} = $jid->GetJID('base');
 	$props{from_jid} = $jid->GetJID('full');
+	$reply_to = $props{sender} if ($dir eq 'in');
     }
-    $props{jtype} = $j->GetType() if ($j->DefinedType());
+
+    $props{jtype} = $j->GetType();
+
+    $props{replycmd} = "jwrite";
+    $props{jtype} =~ /^(?:headline|error)/ && {$props{replycmd} = undef};
+
     $props{subject} = $j->GetSubject() if ($j->DefinedSubject());
     $props{body} = $j->GetBody() if ($j->DefinedBody());
-    $props{thread} = $j->GetThread() if ($j->DefinedThread());
+    if ($j->DefinedThread())
+    {
+	$props{thread} = $j->GetThread() if ($j->DefinedThread());
+	$props{replycmd} .= " -t $props{thread}";
+    }
     $props{error} = $j->GetError() if ($j->DefinedError());
     $props{error_code} = $j->GetErrorCode() if ($j->DefinedErrorCode());
+    $props{replycmd} .= " $reply_to";
+    $props{replysendercmd} = $props{replycmd};
 
-
     return owl::Message->new(%props);
 }
+
+sub queue_admin_msg
+{
+    my $err = shift;
+    my $m = owl::Message->new(type => 'admin',
+			      direction => 'none',
+			      body => $err);
+    owl::queue_message($m);
+}


home help back first fref pref prev next nref lref last post