BlocklistImport: Option to download new blocklist after certain numbers

of days has past.  Patch from Mark Stahler.
This commit is contained in:
Andrew Resch 2008-01-24 08:46:17 +00:00
commit b22a40de9b
2 changed files with 51 additions and 18 deletions

View file

@ -4,8 +4,8 @@
## ##
plugin_name = "Blocklist Importer" plugin_name = "Blocklist Importer"
plugin_author = "Steve 'Tarka' Smith" plugin_author = "Steve 'Tarka' Smith, updated by Mark Stahler"
plugin_version = "0.4" plugin_version = "0.45"
plugin_description = _(""" plugin_description = _("""
Download and import various IP blocklists. Download and import various IP blocklists.
@ -34,7 +34,7 @@ import urllib, deluge.common, deluge.pref
from peerguardian import PGReader, PGException from peerguardian import PGReader, PGException
from text import TextReader, GZMuleReader, PGZip from text import TextReader, GZMuleReader, PGZip
from ui import GTKConfig, GTKProgress from ui import GTKConfig, GTKProgress
import os.path import os.path, os, time
# List of formats supported. This is used to generate the UI list and # List of formats supported. This is used to generate the UI list and
# specify the reader class. The last entry is for storage by the UI. # specify the reader class. The last entry is for storage by the UI.
@ -64,14 +64,14 @@ class BlocklistImport:
self.config.load() self.config.load()
if self.config.has_key('url'): if self.config.has_key('url'):
self.loadlist(fetch=self.config.get('load_on_start')) self.loadlist(fetch=self.config.get('load_after_days'))
def _download_update(self, curr, chunksize, size): def _download_update(self, curr, chunksize, size):
incs = float(size) / float(chunksize) incs = float(size) / float(chunksize)
self.gtkprog.download_prog(curr/incs) self.gtkprog.download_prog(curr/incs)
def loadlist(self, fetch=False): def loadlist(self, fetch=-1):
# Stop all torrents # Stop all torrents
self.paused_or_not = {} self.paused_or_not = {}
for unique_ID in self.core.unique_IDs: for unique_ID in self.core.unique_IDs:
@ -80,9 +80,27 @@ class BlocklistImport:
self.core.set_user_pause(unique_ID, True, enforce_queue=False) self.core.set_user_pause(unique_ID, True, enforce_queue=False)
self.gtkprog.start() self.gtkprog.start()
# Compare modified time with load_after_days
try:
liststats = os.stat(self.blockfile)
list_timestamp = liststats.st_mtime
now_timestamp = time.time()
days_update = self.config.get('load_after_days')
# Seconds in a day = 86400
# Check to see if todays timestamp is older than the list plus days in config
if now_timestamp >= (list_timestamp + (86400 * days_update)):
fetch = -1
print 'New Blocklist required...'
# If blocklist doesnt exist
except OSError, e:
pass
# Attempt initial import # Attempt initial import
if fetch: if fetch == -1:
print "Fetching",self.config.get('url') print "Fetching",self.config.get('url')
self.gtkprog.start_download() self.gtkprog.start_download()
try: try:
@ -144,16 +162,16 @@ class BlocklistImport:
def configure(self, window): def configure(self, window):
self.gtkconf.start(self.config.get('listtype'), self.gtkconf.start(self.config.get('listtype'),
self.config.get('url'), self.config.get('url'),
self.config.get('load_on_start'), self.config.get('load_after_days'),
window) window)
def setconfig(self, url, load_on_start, listtype): def setconfig(self, url, load_after_days, listtype):
self.config.set('url', url) self.config.set('url', url)
self.config.set('load_on_start', load_on_start) self.config.set('load_after_days', load_after_days)
self.config.set('listtype', listtype) self.config.set('listtype', listtype)
self.config.save() self.config.save()
self.loadlist(fetch=True) self.loadlist()
def disable(self): def disable(self):
self.core.reset_ip_filter() self.core.reset_ip_filter()

View file

@ -41,14 +41,29 @@ class GTKConfig(gtk.Dialog):
hbox = gtk.HBox(False, 6) hbox = gtk.HBox(False, 6)
hbox.pack_start(label) hbox.pack_start(label)
hbox.pack_start(self.url) hbox.pack_end(self.url, expand=True, fill=True)
self.vbox.pack_start(self.listtype) self.vbox.pack_start(self.listtype)
self.vbox.pack_start(hbox) self.vbox.pack_start(hbox)
# Load on start # Load on start
self.load_on_start = gtk.CheckButton(_("Download on start")) # gtk.SpinButton(adjustment=None, climb_rate=0.0, digits=0)
self.vbox.pack_start(self.load_on_start) label2 = gtk.Label()
label2.set_markup('<b>' + _("Download new blocklist every") + '</b>')
self.load_after_days = gtk.SpinButton(None, 1.0, 0)
self.load_after_days.set_increments(1, 3)
self.load_after_days.set_range(-1, 14)
label3 = gtk.Label()
label3.set_markup('<b>' + _("days") + '</b>')
hbox2 = gtk.HBox(False, 6)
hbox2.pack_start(label2)
hbox2.pack_start(self.load_after_days)
hbox2.pack_start(label3)
self.vbox.pack_start(hbox2)
self.connect('response', self.ok) self.connect('response', self.ok)
self.connect('close', self.cancel) self.connect('close', self.cancel)
@ -67,9 +82,9 @@ class GTKConfig(gtk.Dialog):
ls = self.listtype.get_model() ls = self.listtype.get_model()
ltype = ls[self.listtype.get_active()][1] ltype = ls[self.listtype.get_active()][1]
url = self.url.get_text() url = self.url.get_text()
los = self.load_on_start.get_active() days = self.load_after_days.get_value()
self.plugin.setconfig(url, los, ltype) self.plugin.setconfig(url, days, ltype)
def cancel(self, dialog, signal=None): def cancel(self, dialog, signal=None):
@ -77,7 +92,7 @@ class GTKConfig(gtk.Dialog):
if signal: if signal:
return True return True
def start(self, ltype, url, load, window): def start(self, ltype, url, days, window):
self.set_transient_for(window) self.set_transient_for(window)
if ltype: if ltype:
path = BlocklistImport.readers[ltype][2] path = BlocklistImport.readers[ltype][2]
@ -87,8 +102,8 @@ class GTKConfig(gtk.Dialog):
if url: if url:
self.url.set_text(url) self.url.set_text(url)
if load: if days:
self.load_on_start.set_active(load) self.load_after_days.set_value(days)
self.show_all() self.show_all()