[411] in BarnOwl Developers

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

[D-O-H] r543 - in trunk/owl: . perl/modules

daemon@ATHENA.MIT.EDU (asedeno@MIT.EDU)
Thu Oct 29 18:05:51 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: Mon, 22 Jan 2007 00:20:17 -0500 (EST)

Author: asedeno
Date: 2007-01-22 00:20:17 -0500 (Mon, 22 Jan 2007)
New Revision: 543

Modified:
   trunk/owl/global.c
   trunk/owl/owl.c
   trunk/owl/owl.h
   trunk/owl/perl/modules/jabber.pl
   trunk/owl/perlglue.xs
Log:
* Added idle-time tracking in C.
* Exposed idle-time tracking to perl.
* Updated jabber.pl to set away after 5 minutes, xa after 15 minutes.
* Flipped around the jabber connection manager's hash to index by jid first.



Modified: trunk/owl/global.c
===================================================================
--- trunk/owl/global.c	2007-01-21 23:30:14 UTC (rev 542)
+++ trunk/owl/global.c	2007-01-22 05:20:17 UTC (rev 543)
@@ -68,6 +68,7 @@
   g->searchactive=0;
   g->searchstring=NULL;
   g->starttime=time(NULL); /* assumes we call init only a start time */
+  g->lastinputtime=g->starttime;
   g->newmsgproc_pid=0;
   
   owl_global_set_config_format(g, 0);
@@ -437,6 +438,18 @@
   return(time(NULL)-g->starttime);
 }
 
+time_t owl_global_get_lastinputtime(owl_global *g) {
+  return(g->lastinputtime);
+}
+
+void owl_global_update_lastinputtime(owl_global *g) {
+  g->lastinputtime = time(NULL);
+}
+
+time_t owl_global_get_idletime(owl_global *g) {
+  return(time(NULL)-g->lastinputtime);
+}
+
 void owl_global_get_runtime_string(owl_global *g, char *buff) {
   time_t diff;
 

Modified: trunk/owl/owl.c
===================================================================
--- trunk/owl/owl.c	2007-01-21 23:30:14 UTC (rev 542)
+++ trunk/owl/owl.c	2007-01-22 05:20:17 UTC (rev 543)
@@ -660,6 +660,7 @@
     if (j==ERR) {
       usleep(10);
     } else {
+      owl_global_update_lastinputtime(&g);
       /* find and activate the current keymap.
        * TODO: this should really get fixed by activating
        * keymaps as we switch between windows... 

Modified: trunk/owl/owl.h
===================================================================
--- trunk/owl/owl.h	2007-01-21 23:30:14 UTC (rev 542)
+++ trunk/owl/owl.h	2007-01-22 05:20:17 UTC (rev 543)
@@ -556,7 +556,8 @@
   owl_viewwin vw;
   void *perl;
   int debug;
-  int starttime;
+  time_t starttime;
+  time_t lastinputtime;
   char *startupargs;
   int userclue;
   int nextmsgid;

Modified: trunk/owl/perl/modules/jabber.pl
===================================================================
--- trunk/owl/perl/modules/jabber.pl	2007-01-21 23:30:14 UTC (rev 542)
+++ trunk/owl/perl/modules/jabber.pl	2007-01-22 05:20:17 UTC (rev 543)
@@ -131,44 +131,44 @@
 
     my $client = BarnOwl::Jabber::Connection->new;
 
-    $self->{Client}->{$jidStr} = $client;
-    $self->{Roster}->{$jidStr} = $client->Roster();
+    $self->{$jidStr}->{Client} = $client;
+    $self->{$jidStr}->{Roster} = $client->Roster();
+    $self->{$jidStr}->{Status} = "available";
     return $client;
 }
 
 sub removeConnection {
     my $self = shift;
     my $jidStr = shift;
-    return 0 unless exists $self->{Client}->{$jidStr};
+    return 0 unless exists $self->{$jidStr}->{Client};
 
-    $self->{Client}->{$jidStr}->Disconnect();
-    delete $self->{Roster}->{$jidStr};
-    delete $self->{Client}->{$jidStr};
+    $self->{$jidStr}->{Client}->Disconnect();
+    delete $self->{$jidStr};
 
     return 1;
 }
 
 sub connected {
     my $self = shift;
-    return scalar keys %{ $self->{Client} };
+    return scalar keys %{ $self };
 }
 
 sub getJids {
     my $self = shift;
-    return keys %{ $self->{Client} };
+    return keys %{ $self };
 }
 
 sub jidExists {
     my $self = shift;
     my $jidStr = shift;
-    return exists $self->{Client}->{$jidStr};
+    return exists $self->{$jidStr};
 }
 
 sub sidExists {
     my $self = shift;
     my $sid = shift || "";
-    foreach my $j ( keys %{ $self->{Client} } ) {
-        return 1 if ($self->{Client}->{$j}->{SESSION}->{id} eq $sid);
+    foreach my $c ( values %{ $self } ) {
+        return 1 if ($c->{Client}->{SESSION}->{id} eq $sid);
     }
     return 0;
 }
@@ -176,8 +176,8 @@
 sub getConnectionFromSid {
     my $self = shift;
     my $sid = shift;
-    foreach my $c (values %{ $self->{Client} }) {
-        return $c if $c->{SESSION}->{id} eq $sid;
+    foreach my $c (values %{ $self }) {
+        return $c->{Client} if $c->{Client}->{SESSION}->{id} eq $sid;
     }
     return undef;
 }
@@ -185,15 +185,15 @@
 sub getConnectionFromJidStr {
     my $self = shift;
     my $jidStr = shift;
-    return $self->{Client}->{$jidStr};
+    return $self->{$jidStr}->{Client};
 }
 
 sub getRosterFromSid {
     my $self = shift;
     my $sid = shift;
-    foreach my $j ( $self->getJids ) {
-        return $self->{Roster}->{$j}
-          if $self->{Client}->{$j}->{SESSION}->{id} eq $sid;
+    foreach my $c (values %{ $self }) {
+        return $c->{Roster}
+          if $c->{Client}->{SESSION}->{id} eq $sid;
     }
     return undef;
 }
@@ -201,8 +201,7 @@
 sub getRosterFromJidStr {
     my $self = shift;
     my $jidStr = shift;
-    return $self->{Roster}->{$jidStr};
-    return undef;
+    return $self->{$jidStr}->{Roster};
 }
 ################################################################################
 
@@ -216,6 +215,7 @@
         register_owl_commands();
         push @::onMainLoop,     sub { BarnOwl::Jabber::onMainLoop(@_) };
         push @::onGetBuddyList, sub { BarnOwl::Jabber::onGetBuddyList(@_) };
+        $vars{show} = '';
     } else {
         # Our owl doesn't support queue_message. Unfortunately, this
         # means it probably *also* doesn't support BarnOwl::error. So just
@@ -228,6 +228,22 @@
 sub onMainLoop {
     return if ( !$conn->connected() );
 
+    $vars{status_changed} = 0;
+    my $idletime = owl::getidletime();
+    if ($idletime >= 900 && $vars{show} eq 'away') {
+        $vars{show} = 'xa';
+        $vars{status} = 'Auto extended-away after 15 minutes idle.';
+        $vars{status_changed} = 1;
+    } elsif ($idletime >= 300 && $vars{show} eq '') {
+        $vars{show} = 'away';
+        $vars{status} = 'Auto away after 5 minutes idle.';
+        $vars{status_changed} = 1;
+    } elsif ($idletime == 0 && $vars{show} ne '') {
+        $vars{show} = '';
+        $vars{status} = '';
+        $vars{status_changed} = 1;
+    }
+
     foreach my $jid ( $conn->getJids() ) {
         my $client = $conn->getConnectionFromJidStr($jid);
 
@@ -240,6 +256,12 @@
             do_logout($jid);
             return;
         }
+        if ($vars{status_changed}) {
+            my $p = new Net::XMPP::Presence;
+            $p->SetShow($vars{show}) if $vars{show};
+            $p->SetStatus($vars{status}) if $vars{status};
+            $client->Send($p);
+        }
     }
 }
 

Modified: trunk/owl/perlglue.xs
===================================================================
--- trunk/owl/perlglue.xs	2007-01-21 23:30:14 UTC (rev 542)
+++ trunk/owl/perlglue.xs	2007-01-22 05:20:17 UTC (rev 543)
@@ -38,6 +38,13 @@
 		RETVAL = owl_global_get_cols(&g);
 	OUTPUT:
 		RETVAL
+		
+time_t
+getidletime()
+	CODE:
+		RETVAL = owl_global_get_idletime(&g);
+	OUTPUT:
+		RETVAL
 
 char *
 zephyr_getrealm()


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