Possibilité de filtrer la liste des newsgroups à afficher à partir d'une regexp
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Wed, 1 Mar 2006 20:52:18 +0000 (20:52 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 4 Jan 2008 23:34:33 +0000 (00:34 +0100)
git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@15 9869982d-c50d-0410-be91-f2a2ec7c7c7b

banana/NetNNTP.inc.php
banana/banana.inc.php.in

index 13e574a..42bb2a7 100644 (file)
@@ -305,6 +305,29 @@ class nntp
         return ($this->posting);
     }
 
+    /** retreive the group list
+     * @return ARRAY group name => (MSGNUM of first article, MSGNUM of last article, NNTP flags)
+     * @see newgroups, liste
+     */
+    function _grouplist()
+    {
+        global $banana;
+
+        if (substr($this->gline(), 0, 1)!="2") {
+            return false;
+        }
+        $result = $this->gline();
+        $array  = Array();
+        while ($result != ".") {
+            preg_match("/([^ ]+) (\d+) (\d+) (.)/", $result, $regs);
+            if (!isset($banana->grp_pattern) || preg_match('@'.$banana->grp_pattern.'@', $regs[1])) {
+                $array[$regs[1]] = array(intval($regs[2]), intval($regs[3]), intval($regs[4]));
+            }
+            $result = $this->gline();
+        }
+        return $array;                                                                                                                                        
+    }
+
     /** gets information about all active newsgroups
      * @return ARRAY group name => (MSGNUM of first article, MSGNUM of last article, NNTP flags)
      * @see newgroups
@@ -313,15 +336,7 @@ class nntp
     function liste()
     {
         $this->pline("LIST\r\n");
-        if (substr($this->gline(), 0, 1)!="2") return false;
-        $result = $this->gline();
-        $array = Array();
-        while ($result != ".") {
-            preg_match("/([^ ]+) (\d+) (\d+) (.)/", $result, $regs);
-            $array[$regs[1]] = array(intval($regs[2]), intval($regs[3]), intval($regs[4]));
-            $result          = $this->gline();
-        }
-        return $array;
+        return $this->_grouplist();
     }
 
     /** get information about recent newsgroups 
@@ -338,17 +353,7 @@ class nntp
         $distributions = preg_replace("/(\r|\n)/", "", $_distributions);
         $this->pline("NEWGROUPS ".gmdate("ymd His", $_since)
                 ." GMT $distributions\r\n");
-        if (substr($this->gline(), 0, 1)!="2") {
-            return false;
-        }
-        $result = $this->gline();
-        $array  = array();
-        while ($result != ".") {
-            preg_match("/([^ ]+) (\d+) (\d+) (.)/", $result, $regs);
-            $array[$regs[1]] = array(intval($regs[2]), intval($regs[3]), intval($regs[4]));
-            $result          = $this->gline();
-        }
-        return $array;
+        return $this->_grouplist();
     }
 
     /** gets a list of new articles
index c45d717..a1de491 100644 (file)
@@ -21,6 +21,11 @@ class Banana
      */
     var $body_mime   = array('text/plain', 'text/html', 'text/richtext');
 
+    /** Regexp for selecting newsgroups to show (if empty, match all newsgroups)
+     * ex : '^xorg\..*' for xorg.*
+     */
+    var $grp_pattern;
+
     var $tbefore     = 5;
     var $tafter      = 5;
     var $tmax        = 50;