changeset 940:fc30221b952d

Fix an autoaway problem This patch fixes an autoaway related issue introduced in the previous changeset. scr_GetAutoAwayTimeout() should not return a null timeout when the user status do not need auto-away (i.e. status != online,free). This patch also tries to save a few time() calls.
author Mikael Berthe <mikael@lilotux.net>
date Fri, 14 Jul 2006 19:32:23 +0200
parents 12fa2ae6445d
children 518e7c17a79e
files mcabber/src/jabglue.c mcabber/src/main.c mcabber/src/screen.c mcabber/src/screen.h
diffstat 4 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Tue Jul 11 22:50:48 2006 +0200
+++ b/mcabber/src/jabglue.c	Fri Jul 14 19:32:23 2006 +0200
@@ -191,19 +191,25 @@
   tv.tv_sec = 60;
   tv.tv_usec = 0;
 
+  time(&now);
+
   if (KeepaliveDelay) {
-    time(&now);
-    if (now > LastPingTime + (time_t)KeepaliveDelay) {
+    if (now >= LastPingTime + (time_t)KeepaliveDelay) {
       tv.tv_sec = 0;
     } else {
       tv.tv_sec = LastPingTime + (time_t)KeepaliveDelay - now;
     }
   }
 
-  autoaway_timeout = scr_GetAutoAwayTimeout();
-  if (tv.tv_sec > autoaway_timeout)
+  autoaway_timeout = scr_GetAutoAwayTimeout(now);
+  if (tv.tv_sec > autoaway_timeout) {
     tv.tv_sec = autoaway_timeout;
+  }
 
+  if (!tv.tv_sec)
+    tv.tv_usec = 350000;
+
+  scr_DoUpdate();
   if (select(jc->fd + 1, &fds, NULL, NULL, &tv) > 0) {
     if (FD_ISSET(jc->fd, &fds))
       jab_poll(jc, 0);
--- a/mcabber/src/main.c	Tue Jul 11 22:50:48 2006 +0200
+++ b/mcabber/src/main.c	Fri Jul 14 19:32:23 2006 +0200
@@ -339,7 +339,6 @@
       if (update_roster)
 	scr_DrawRoster();
 
-      scr_DoUpdate();
       jb_main();
     }
   }
--- a/mcabber/src/screen.c	Tue Jul 11 22:50:48 2006 +0200
+++ b/mcabber/src/screen.c	Fri Jul 14 19:32:23 2006 +0200
@@ -1300,16 +1300,20 @@
   }
 }
 
-unsigned int scr_GetAutoAwayTimeout()
+unsigned int scr_GetAutoAwayTimeout(time_t now)
 {
+  enum imstatus cur_st;
   unsigned int autoaway_timeout = settings_opt_get_int("autoaway");
-  time_t now;
 
   if (Autoaway || !autoaway_timeout)
-    return (unsigned)INT_MAX;
+    return 86400;
 
-  time(&now);
-  if (now > LastActivity + (time_t)autoaway_timeout)
+  cur_st = jb_getstatus();
+  // Auto-away is disabled for the following states
+  if ((cur_st != available) && (cur_st != freeforchat))
+    return 86400;
+
+  if (now >= LastActivity + (time_t)autoaway_timeout)
     return 0;
   else
     return LastActivity + (time_t)autoaway_timeout - now;
--- a/mcabber/src/screen.h	Tue Jul 11 22:50:48 2006 +0200
+++ b/mcabber/src/screen.h	Fri Jul 14 19:32:23 2006 +0200
@@ -91,7 +91,7 @@
 
 inline void scr_Beep(void);
 
-unsigned int scr_GetAutoAwayTimeout();
+unsigned int scr_GetAutoAwayTimeout(time_t now);
 void scr_CheckAutoAway(int activity);
 
 // For commands...