[251] in BarnOwl Developers
[D-O-H] r424 - trunk/conf.asedeno/owl/modules
daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:04:08 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 17:50:42 -0500 (EST)
Author: asedeno
Date: 2006-10-29 17:50:41 -0500 (Sun, 29 Oct 2006)
New Revision: 424
Modified:
trunk/conf.asedeno/owl/modules/jabber.pl
Log:
Preliminary groupchat support.
Modified: trunk/conf.asedeno/owl/modules/jabber.pl
===================================================================
--- trunk/conf.asedeno/owl/modules/jabber.pl 2006-10-29 18:02:03 UTC (rev 423)
+++ trunk/conf.asedeno/owl/modules/jabber.pl 2006-10-29 22:50:41 UTC (rev 424)
@@ -71,6 +71,27 @@
usage => "jwrite JID [-t thread]"
}
);
+ owl::new_command(
+ jchat => \&cmd_jwrite_gc,
+ {
+ description => "Send a Jabber Message",
+ usage => "jchat [room]@[server]"
+ }
+ );
+ owl::new_command(
+ jjoin => \&cmd_join_gc,
+ {
+ description => "Joins a jabber groupchat.",
+ usage => "jjoin [room]@[server]/[nick]"
+ }
+ );
+ owl::new_command(
+ jpart => \&cmd_part_gc,
+ {
+ description => "Parts a jabber groupchat.",
+ usage => "jpart [room]@[server]/[nick]"
+ }
+ );
}
sub cmd_login
@@ -131,6 +152,8 @@
our $jwrite_to;
our $jwrite_thread;
+our $jwrite_subject;
+our $jwrite_type;
sub cmd_jwrite
{
if (!$client)
@@ -141,22 +164,91 @@
$jwrite_to = "";
$jwrite_thread = "";
+ $jwrite_subject = "";
+ $jwrite_type = "chat";
my @args = @_;
my $argsLen = @args;
- for (my $i = 1; $i < $argsLen; $i++)
+
+ JW_ARG: for (my $i = 1; $i < $argsLen; $i++)
{
- $args[$i] =~ /^-t$/ && ($jwrite_thread = $args[$i++] and next $i);
+ $args[$i] =~ /^-t$/ && ($jwrite_thread = $args[++$i] && next JW_ARG);
+ $args[$i] =~ /^-s$/ && ($jwrite_subject = $args[++$i] && next JW_ARG);
+ if ($jwrite_to ne '')
+ {
+ # Too many To's
+ $jwrite_to = '';
+ last;
+ }
+ if ($jwrite_to)
+ {
+ $jwrite_to == '';
+ last;
+ }
$jwrite_to = $args[$i];
}
if(!$jwrite_to) {
- owl::error("Usage: jwrite JID [-t thread]");
+ owl::error("Usage: jwrite JID [-t thread] [-s 'subject']");
return;
}
+
owl::message("Type your message below. End with a dot on a line by itself. ^C will quit.");
- owl::start_edit_win("jwrite ".$jwrite_to, \&process_owl_jwrite);
+ owl::start_edit_win(join(' ', @args), \&process_owl_jwrite);
}
+sub cmd_join_gc
+{
+ if (!$client)
+ {
+ # Error here
+ return;
+ }
+ if(!$_[1])
+ {
+ owl::error("Usage: jchat [room]@[server]/[nick]");
+ return;
+ }
+
+ $client->PresenceSend(to=>$_[1]);
+ return "";
+}
+
+sub cmd_part_gc
+{
+ if (!$client)
+ {
+ # Error here
+ return;
+ }
+ if(!$_[1])
+ {
+ owl::error("Usage: jchat [room]@[server]/[nick]");
+ return;
+ }
+
+ $client->PresenceSend(to=>$_[1], type=>'unavailable');
+ return "";
+}
+
+sub cmd_jwrite_gc
+{
+ if (!$client)
+ {
+ # Error here
+ return;
+ }
+
+ $jwrite_to = $_[1];
+ $jwrite_thread = "";
+ $jwrite_subject = "";
+ $jwrite_type = "groupchat";
+ my @args = @_;
+ my $argsLen = @args;
+
+ owl::message("Type your message below. End with a dot on a line by itself. ^C will quit.");
+ owl::start_edit_win(join(' ', @args), \&process_owl_jwrite);
+}
+
################################################################################
### Owl Callbacks
sub process_owl_jwrite
@@ -164,17 +256,22 @@
my $body = shift;
my $j = new Net::XMPP::Message;
+ $body =~ s/\n\z//;
$j->SetMessage(to => $jwrite_to,
- from => $jid->GetJID('base'),
- type => 'chat',
+ from => $jid->GetJID('full'),
+ type => $jwrite_type,
body => $body
);
$j->SetThread($jwrite_thread) if ($jwrite_thread);
+ $j->SetSubject($jwrite_subject) if ($jwrite_subject);
my $m = j2o($j, 'out');
- owl::queue_message($m);
+ if ($jwrite_type ne 'groupchat')
+ {
+ #XXX TODO: Check for displayoutgoing.
+ owl::queue_message($m);
+ }
$client->Send($j);
- # Errors?
}
### XMPP Callbacks
@@ -220,34 +317,45 @@
my %props = (type => 'jabber',
direction => $dir);
+
+ $props{replycmd} = "jwrite";
+
+ $props{jtype} = $j->GetType();
+ $props{jtype} =~ /^(?:headline|error)$/ && {$props{replycmd} = undef};
+ $props{jtype} =~ /^groupchat$/ && {$props{replycmd} = "jchat"};
+
my $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 ($dir eq 'out')
+ {
+ $reply_to = $props{to_jid};
+ $props{jtype} =~ /^groupchat$/ && {$reply_to = $jid->GetJID('base')};
+ }
}
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');
+ $reply_to = $props{from_jid} if ($dir eq 'in');
+ if ($dir eq 'in')
+ {
+ $reply_to = $props{from_jid};
+ $props{jtype} =~ /^groupchat$/ && {$reply_to = $jid->GetJID('base')};
+ }
}
- $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());
- if ($j->DefinedThread())
- {
- $props{thread} = $j->GetThread() if ($j->DefinedThread());
- $props{replycmd} .= " -t $props{thread}";
- }
+# 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";