From e70b3b24fc8ac7b54a820ae87ce8f4af4043125e Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 09 Oct 2008 02:25:43 -0400
Subject: [PATCH] - send set_unread_count() only when changing /Seen status

---
 program/include/session.inc |   55 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/program/include/session.inc b/program/include/session.inc
index 603f384..d6486a4 100644
--- a/program/include/session.inc
+++ b/program/include/session.inc
@@ -128,36 +128,40 @@
     return false;
   }
 
-  // get all expired sessions
-  $sql_result = $DB->query(
-    "SELECT sess_id
-     FROM " . get_table_name('session') . "
-     WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?",
-    $maxlifetime);
+  if ($rcmail->config->get('enable_caching')) {
+    // get all expired sessions
+    $sql_result = $DB->query(
+	"SELECT sess_id
+        FROM " . get_table_name('session') . "
+        WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?",
+	$maxlifetime);
                                    
-  $exp_sessions = array();
-  while ($sql_arr = $DB->fetch_assoc($sql_result)) {
-    $exp_sessions[] = $sql_arr['sess_id'];
-  }
-
-  $caching = $rcmail->config->get('enable_caching');
-
-  if (sizeof($exp_sessions)) {
-    // delete session cache records
-    if ($caching) {
-      $DB->query("DELETE FROM " . get_table_name('cache') . "
-                  WHERE session_id IN ('".join("','", $exp_sessions)."')");
+    $exp_sessions = array();
+    while ($sql_arr = $DB->fetch_assoc($sql_result)) {
+      $exp_sessions[] = $sql_arr['sess_id'];
     }
 
-    // delete session records
+    if (sizeof($exp_sessions)) {
+      $exp_sessions = "'" . join("','", $exp_sessions) . "'";
+      // delete session cache records
+      $DB->query("DELETE FROM " . get_table_name('cache') . "
+            WHERE session_id IN (" . $exp_sessions . ")");
+
+      // delete session records
+      $DB->query("DELETE FROM " . get_table_name('session') . "
+            WHERE sess_id IN (" . $exp_sessions . ")");
+    }
+
+    // also run message cache GC
+    rcmail_message_cache_gc();
+  
+  } else {
+    // just delete all expired sessions
     $DB->query("DELETE FROM " . get_table_name('session') . "
-                WHERE sess_id IN ('".join("','", $exp_sessions)."')");
+        WHERE " . $DB->unixtimestamp($DB->now())."-".$DB->unixtimestamp('changed') . " > ?",
+	$maxlifetime);
   }
 
-  // also run message cache GC
-  if ($caching) {
-    rcmail_message_cache_gc();
-  }
   rcmail_temp_gc();
 
   return true;
@@ -183,8 +187,7 @@
   $cookie   = session_get_cookie_params();
   $lifetime = $cookie['lifetime'] ? time() + $cookie['lifetime'] : 0;
 
-  setcookie(session_name(), '', time() - 3600);
-  setcookie(session_name(), $random, $lifetime, $cookie['path'], $cookie['domain']);
+  rcmail::setcookie(session_name(), $random, $lifetime);
 
   return true;
 }

--
Gitblit v1.9.1