From fa59965b41023095d4da710a72ce71bb230de1eb Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Mon, 18 Jul 2011 13:35:12 -0400
Subject: [PATCH] Asynchronously load contacts after page load

---
 program/steps/addressbook/func.inc |   18 ++++++------------
 program/js/app.js                  |    3 +++
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 3143236..5777167 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -338,6 +338,9 @@
 
         this.enable_command('add', 'import', this.env.writable_source);
         this.enable_command('list', 'listgroup', 'advanced-search', true);
+        
+        // load contacts of selected source
+        this.command('list', this.env.source);
         break;
 
 
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index 62c61ec..270f70f 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -84,6 +84,9 @@
     $OUTPUT->set_pagetitle(rcube_label('addressbook'));
     $_SESSION['addressbooks_count'] = count($js_list);
     $_SESSION['addressbooks_count_writeable'] = $writeable;
+    
+    if (!strlen($source))
+      $source = strval(key($js_list));
 
     $CONTACTS = rcmail_contact_source($source, true);
 }
@@ -180,8 +183,6 @@
 
     // currently selected source
     $current = get_input_value('_source', RCUBE_INPUT_GPC);
-    if (!strlen($current) || !isset($sources[$source]))
-        $current = strval(key($sources));
 
     foreach ($sources as $j => $source) {
         $id = strval($source['id'] ? $source['id'] : $j);
@@ -247,7 +248,7 @@
 }
 
 
-// return the message list as HTML table
+// return the contacts list as HTML table
 function rcmail_contacts_list($attrib)
 {
     global $CONTACTS, $OUTPUT;
@@ -255,20 +256,16 @@
     // define list of cols to be displayed
     $a_show_cols = array('name');
 
-    // count contacts for this user
-    $result = $CONTACTS->list_records($a_show_cols);
-
     // add id to message list table if not specified
     if (!strlen($attrib['id']))
         $attrib['id'] = 'rcmAddressList';
 
     // create XHTML table
-    $out = rcube_table_output($attrib, $result->records, $a_show_cols, $CONTACTS->primary_key);
+    $out = rcube_table_output($attrib, array(), $a_show_cols, $CONTACTS->primary_key);
 
     // set client env
     $OUTPUT->add_gui_object('contactslist', $attrib['id']);
     $OUTPUT->set_env('current_page', (int)$CONTACTS->list_page);
-    $OUTPUT->set_env('pagecount', ceil($result->count/$CONTACTS->page_size));
     $OUTPUT->include_script('list.js');
 
     // add some labels to client
@@ -331,7 +328,7 @@
 
     $OUTPUT->add_gui_object('countdisplay', $attrib['id']);
 
-    return html::span($attrib, rcmail_get_rowcount_text());
+    return html::span($attrib, rcube_label('loading'));
 }
 
 
@@ -342,9 +339,6 @@
     // read nr of contacts
     if (!$result) {
         $result = $CONTACTS->get_result();
-    }
-    if (!$result) {
-        $result = $CONTACTS->count();
     }
 
     if ($result->count == 0)

--
Gitblit v1.9.1