Index: pontomail.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/pontomail/pontomail.module,v
retrieving revision 1.32
diff -u -r1.32 pontomail.module
--- pontomail.module	5 Oct 2006 21:25:50 -0000	1.32
+++ pontomail.module	11 Oct 2006 10:46:44 -0000
@@ -534,7 +534,7 @@
  */
 function _pontomail_mailbox_view_folder($folder_name) {
   global $user;
-  
+
   $op = $_POST['op'];
   $edit = $_POST['edit'];
 
@@ -579,7 +579,7 @@
       break;
   }
   
-  $max_pages = 200;
+  $max_pages = 20;
   
   $WIDTH_LIMIT = 25;
   
@@ -595,12 +595,26 @@
     );
   $form['mail_actions']['send_action'] = array('#type' => 'submit', '#value' => 'Submit');
   
+  $header = array(
+    array('data' => t('Select')),
+    array('data' => t('Subject'), 'field' => 'subject'),
+    array('data' => t('From'), 'field' => 'from'),
+    array('data' => t('Date'), 'field' => 'date', 'sort' => 'asc'),
+    array('data' => t('Size'), 'field' => 'size')
+   );
+   $form['mail_actions']['messages']['#header'] = $header;
+   foreach($header as $v) {
+     if($_GET['order'] == $v['data']) {
+       $order = $v['field'];
+     }
+  }
+
   # Fetch the headers
-  $mail_headers = $imap->get_headers($max_pages);
+  $mail_headers = $imap->get_headers($max_pages, $order, $_GET['sort']);
   $form['mail_actions']['messages']['#tree'] = TRUE;
   $form['mail_actions']['messages']['#theme'] = 'folder_view';
   theme('add_style', drupal_get_path('module', 'pontomail') . '/pontomail.css');
-  
+
   $today =  format_date(time(), 'custom', 'm.d.y');
   foreach($mail_headers as $key => $msg) {
     $prefix = $suffix = "";
@@ -612,7 +626,27 @@
       $prefix = '<div class="mail-delete">';
       $suffix = '</div>';
     }
+    $msg_link = 'pontomail/viewmailbox/accounts/' . arg(3) . '/' . arg(4) . '/' . str_replace('>', '', str_replace('<', '',$msg->uid));
     $form['mail_actions']['messages'][$msg->uid]['mid'] = array('#type' => 'checkbox', '#default_value' => 0);
+    $subject = ($msg->subject) ? $msg->subject : '['.t('no subject').']';
+    $form['mail_actions']['messages'][$msg->uid]['subject'] = array(
+      '#value' => l(strlen($subject) > $WIDTH_LIMIT ? substr($subject, 0,$WIDTH_LIMIT - 3) . '...' : $subject,
+        $msg_link),
+      '#prefix' => $prefix, '#suffix' => $suffix
+      );
+
+    // extract the email address, full name
+    $address = $msg->from;
+    $address = preg_replace('/[<>"]/', '', $address);
+    if(preg_match('/\s/', $address)) {
+      $full_name = preg_replace('/(.*)\s+\S+/', '\1', $address);
+    } else {
+      $full_name = $address;
+    }
+    $form['mail_actions']['messages'][$msg->uid]['from'] = array(
+      '#value' => strlen($full_name) > $WIDTH_LIMIT ? substr($full_name, 0,$WIDTH_LIMIT - 3) . '...' : $full_name,
+      '#prefix' => $prefix, '#suffix' => $suffix
+      );
     if($msg->date != "") {
       
       if(format_date(strtotime($msg->date), 'custom','m.d.y') == $today) {
@@ -624,18 +658,8 @@
         $date =  format_date(strtotime($msg->date), 'custom', 'm.d.y');
       }
     }
-    $msg_link = 'pontomail/viewmailbox/accounts/' . arg(3) . '/' . arg(4) . '/' . str_replace('>', '', str_replace('<', '',$msg->uid));
     $form['mail_actions']['messages'][$msg->uid]['date'] = array(
-      '#value' => l($date, $msg_link),
-      '#prefix' => $prefix, '#suffix' => $suffix
-      );
-    $form['mail_actions']['messages'][$msg->uid]['from'] = array(
-      '#value' => l(strlen($msg->from) > $WIDTH_LIMIT ? substr($msg->from, 0,$WIDTH_LIMIT - 3) . '...' : $msg->from,
-        $msg_link),
-      '#prefix' => $prefix, '#suffix' => $suffix
-      );
-    $form['mail_actions']['messages'][$msg->uid]['subject'] = array(
-      '#value' => strlen($msg->subject) > $WIDTH_LIMIT ? substr($msg->subject, 0,$WIDTH_LIMIT - 3) . '...' : $msg->subject,
+      '#value' => $date,
       '#prefix' => $prefix, '#suffix' => $suffix
       );
     $form['mail_actions']['messages'][$msg->uid]['size'] = array(
@@ -666,6 +690,8 @@
 }
 
 function theme_folder_view($form) {
+  $header = $form['#header'];
+/*
   $output = "";
   $headers = array(
     array('data' => t('Select')), 
@@ -674,7 +700,7 @@
     array('data' => t('Subject')),
     array('data' => t('Size'))
     );
-
+*/
   foreach(element_children($form) as $key) {
     $row = array();
     foreach($form[$key] as $inner_key => $item) {
@@ -688,7 +714,7 @@
     $rows[] = $row;
   }
 
-  $output = theme('table', $headers, $rows);
+  $output = theme('table', $header, $rows);
   return $output;
 }
 
Index: IMAPService.inc
===================================================================
RCS file: /cvs/drupal/contributions/modules/pontomail/IMAPService.inc,v
retrieving revision 1.17
diff -u -r1.17 IMAPService.inc
--- IMAPService.inc	21 Aug 2006 08:58:01 -0000	1.17
+++ IMAPService.inc	11 Oct 2006 10:46:46 -0000
@@ -156,10 +156,27 @@
   }
 
 
-  function get_headers($max_pages = 50) {
+  function get_headers($max_pages = 50, $order = 'date', $sort = 'asc') {
     global $user;
-    $sorted_msgs=imap_sort($this->mbox,SORTARRIVAL,1); 
+    $order_cr = array(
+      'subject' => SORTSUBJECT,
+      'from' => SORTFROM,
+      'date' => SORTDATE,
+      'size' => SORTSIZE
+    );
+    $sort_cr = array(
+      'asc' => 0,
+      'desc' => 1
+    );
+    $sorted_msgs=imap_sort($this->mbox,$order_cr[$order],$sort_cr[$sort]); 
     # Respect Paging from Drupal
+    $page = ($_GET['page']) ? $_GET['page'] : 0;
+    $min = $page * $max_pages;
+    $max = (count($sorted_msgs) >  ($page + 1) * $max_pages) ? ($page + 1) * $max_pages - 1 : count($sorted_msgs) - 1;
+    for($i=$min; $i<=$max ;$i++) {
+      $msgs[] = $sorted_msgs[$i];
+    }
+    /*
     if($_GET['page'] != "") {
       $max = ceil($sorted_msgs[0] - (($_GET['page'] + 1) * $max_pages));
       $max = $max < 0 ? $max + $max_pages : $max;
@@ -168,7 +185,9 @@
       $max = $sorted_msgs[0];
     }
     $min = $max > $max_pages ? $max - $max_pages - 1 : $sorted_msgs[(count($sorted_msgs) - 1)];
-    $headers = imap_fetch_overview($this->mbox, $max.':'.$min);
+    */
+    //$headers = imap_fetch_overview($this->mbox, $max.':'.$min);
+    $headers = imap_fetch_overview($this->mbox, implode(',', $msgs));
     if(!$headers) {
       $erros = imap_errors();
       // TODO Place this error in the watch dog.
@@ -176,7 +195,7 @@
     }
     $headers = array_reverse($headers);
     db_query("DELETE FROM {pontomail_pager_holder} WHERE uid = %d AND id = %d", $user->uid, $this->server);
-    for($i = 0; $i < $sorted_msgs[0]; $i++) {
+    for($i = 0; $i < count($sorted_msgs); $i++) {
       db_query("INSERT INTO {pontomail_pager_holder} (uid, id) VALUES(%d, '%s')", $user->uid, $this->server);
     }
     return $headers;
