--- /dev/null
+#!/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;