88 lines
3.2 KiB
Perl
88 lines
3.2 KiB
Perl
#!/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]+//;
|
|
$folderlist =~ s/" hidereadmsgs="[0-1]+//;
|
|
$folderlist =~ s/" 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;
|