newscache cleaner
authorPaul Mangan <paul@claws-mail.org>
Fri, 7 Dec 2001 12:24:47 +0000 (12:24 +0000)
committerPaul Mangan <paul@claws-mail.org>
Fri, 7 Dec 2001 12:24:47 +0000 (12:24 +0000)
tools/newscache_clean.pl [new file with mode: 0644]

diff --git a/tools/newscache_clean.pl b/tools/newscache_clean.pl
new file mode 100644 (file)
index 0000000..7ce3921
--- /dev/null
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+
+#  * Copyright 2001 Paul Mangan <claws@thewildbeast.co.uk>
+#  *
+#  * This file is free software; you can redistribute it and/or modify it
+#  * under the terms of the GNU General Public License as published by
+#  * the Free Software Foundation; either version 2 of the License, or
+#  * (at your option) any later version.
+#  *
+#  * This program is distributed in the hope that it will be useful, but
+#  * WITHOUT ANY WARRANTY; without even the implied warranty of
+#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  * General Public License for more details.
+#  *
+#  * You should have received a copy of the GNU General Public License
+#  * along with this program; if not, write to the Free Software
+#  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  *
+
+use File::Path;
+
+chdir;
+chdir '.sylpheed' || die("You don't appear to have Sylpheed installed\n");
+
+open(ACCOUNTRC, "<accountrc") || die("Can't find accountrc\n");
+       @accountrc = <ACCOUNTRC>;
+close ACCOUNTRC;
+
+foreach $accountrc (@accountrc) {
+       if ($accountrc =~ m/nntp_server=[A-Za-z0-9]/) {
+               $accountrc =~ s/nntp_server=//;
+                chomp $accountrc;
+                push(@newsserver, "$accountrc");       
+        }
+}
+
+%seen = ();
+foreach $newsserver (@newsserver) {
+        $seen{$newsserver}++;
+}
+
+opendir(NEWSCACHE, "newscache") || die("Can't open newscache\n");
+       push(@cached,(readdir(NEWSCACHE)));
+closedir(NEWSCACHE);
+splice(@cached, 0, 2);
+foreach $cached (@cached) { ## remove old newsserver directory tree
+        rmtree("./newscache/$cached") unless $seen{$cached};
+}
+
+open(FOLDERLIST, "<folderlist.xml") || die("Can't find folderlist.xml\n");
+       @folderlist = <FOLDERLIST>;
+close FOLDERLIST;
+%saw = ();
+$wegotnews = 0;
+foreach $folderlist (@folderlist) { ## remove old newsgroups directory trees
+       unless ($wegotnews) {
+               if ($folderlist =~ m/<folder type="news"/) {
+                       $wegotnews = 1;
+                        $done_grp = 0;
+                        $nntpserver = shift(@newsserver);
+               }
+        } 
+        if ($wegotnews && $folderlist =~ m/<\/folder>\n/ && !$done_grp) {
+               opendir(NEWSGCACHE, "newscache/$nntpserver") || die("Can't open newscache/$nntpserver\n");
+               push(@cachedgrp,(readdir(NEWSGCACHE)));
+               closedir(NEWSGCACHE);
+                splice(@cachedgrp, 0, 2);
+               foreach $cachedgrp (@cachedgrp) { 
+                       rmtree("./newscache/$nntpserver/$cachedgrp") unless ($saw{$cachedgrp}) || ($cachedgrp eq ".newsgroup_list");
+               }
+               $done_grp = 1;
+                $wegotnews = 0;
+                @cachedgrp = ();
+        }
+       if ($wegotnews && $folderlist !~ m/<\/folder>\n/) {
+                if ($folderlist =~ m/<folderitem type="normal"/) {
+                       $folderlist =~ s/<folderitem type="normal" name="[A-Z0-9.]+" path="//i;
+                               $folderlist =~ s/" threaded="[0-1]+" mtime="[0-9]+" new="[0-9]+" unread="[0-9]+" total="[0-9]+" \/>//;
+                        $folderlist =~ s/ +//;
+                        chomp $folderlist;
+                        $saw{$folderlist}++;
+                }        
+        }
+}
+print "Finished cleaning Sylpheed's newscache\n";
+exit;