Skip to content

Commit 05b56cc

Browse files
dynamic tracker lists: Gtk support + refactoring
We now avoid duplicate trackers, when using multiple lists. The new Gtk text entry widget - one that supports multiple lines - has a different API, because of course it does...
1 parent e68629d commit 05b56cc

File tree

6 files changed

+32
-28
lines changed

6 files changed

+32
-28
lines changed

defaulttrackers/core.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,28 +86,36 @@ def update_trackerlist_from_url(self):
8686
now = datetime.datetime.utcnow()
8787
last_update = datetime.datetime.utcfromtimestamp(self.config["last_dynamic_trackers_update"])
8888
if now - last_update > datetime.timedelta(days=self.config["dynamic_trackers_update_interval"]):
89-
combined_trackers = []
89+
new_trackers = []
90+
seen_trackers = set()
91+
headers = {
92+
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0',
93+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
94+
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
95+
'Accept-Encoding': 'none',
96+
'Accept-Language': 'en-US,en;q=0.8',
97+
}
9098
try:
9199
for url_line in self.config["dynamic_trackerlist_url"].splitlines():
92100
url_line = url_line.strip()
93101
if not url_line:
94102
continue
95-
headers = {
96-
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0',
97-
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
98-
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
99-
'Accept-Encoding': 'none',
100-
'Accept-Language': 'en-US,en;q=0.8',
101-
}
102103
req = urllib.request.Request(url_line, headers=headers)
103104
try:
104105
page = urllib.request.urlopen(req, context=ssl._create_unverified_context()).read()
105106
except:
107+
# maybe an older Python version without a "context" argument
106108
page = urllib.request.urlopen(req).read()
107-
found = [decode_bytes(u) for u in re.findall(rb'\w+://[\w\-.:/]+', page) if is_url(decode_bytes(u))]
108-
combined_trackers.extend(found)
109-
if combined_trackers:
110-
self.config["trackers"] = [{"url": t} for t in combined_trackers]
109+
# we need to avoid duplicates here
110+
for new_tracker in [decode_bytes(u) for u in re.findall(rb'\w+://[\w\-.:/]+', page) if is_url(decode_bytes(u))]:
111+
if new_tracker not in seen_trackers:
112+
seen_trackers.add(new_tracker)
113+
new_trackers.append(new_tracker)
114+
115+
if new_trackers:
116+
# replace all existing trackers
117+
self.config["trackers"] = [{"url": t} for t in new_trackers]
118+
111119
self.config["last_dynamic_trackers_update"] = time.mktime(now.timetuple())
112120
except:
113121
traceback.print_exc()

defaulttrackers/data/config.glade

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,9 @@
4040
</packing>
4141
</child>
4242
<child>
43-
<widget class="GtkEntry" id="tracker_list_url">
43+
<widget class="GtkTextView" id="tracker_list_url">
4444
<property name="visible">True</property>
4545
<property name="can_focus">True</property>
46-
<property name="invisible_char">●</property>
47-
<property name="primary_icon_activatable">False</property>
48-
<property name="secondary_icon_activatable">False</property>
49-
<property name="primary_icon_sensitive">True</property>
50-
<property name="secondary_icon_sensitive">True</property>
5146
</widget>
5247
<packing>
5348
<property name="expand">True</property>

defaulttrackers/data/config.ui

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,9 @@
4040
</packing>
4141
</child>
4242
<child>
43-
<object class="GtkEntry" id="tracker_list_url">
43+
<object class="GtkTextView" id="tracker_list_url">
4444
<property name="visible">True</property>
4545
<property name="can_focus">True</property>
46-
<property name="invisible_char">●</property>
47-
<property name="primary_icon_activatable">False</property>
48-
<property name="secondary_icon_activatable">False</property>
49-
<property name="primary_icon_sensitive">True</property>
50-
<property name="secondary_icon_sensitive">True</property>
5146
</object>
5247
<packing>
5348
<property name="expand">True</property>

defaulttrackers/gtk3ui.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,12 @@ def on_apply_prefs(self):
181181
update_interval = int(self.builder.get_object("tracker_list_update_interval").get_text() or 1)
182182
except:
183183
update_interval = 1
184+
tracker_list_buffer = self.builder.get_object("tracker_list_url").get_buffer()
185+
start_iter, end_iter = tracker_list_buffer.get_bounds()
186+
tracker_list_text = tracker_list_buffer.get_text(start_iter, end_iter, False)
184187
self.config.update({
185188
"trackers": [{"url": str(row[0])} for row in self.store],
186-
"dynamic_trackerlist_url": self.builder.get_object("tracker_list_url").get_text(),
189+
"dynamic_trackerlist_url": tracker_list_text,
187190
"dynamic_trackers_update_interval": update_interval,
188191
})
189192
client.defaulttrackers.set_config(self.config)
@@ -196,7 +199,7 @@ def cb_get_config(self, config):
196199
self.config = config
197200
# dynamic tracker list
198201
if config["dynamic_trackerlist_url"]:
199-
self.builder.get_object("tracker_list_url").set_text(config["dynamic_trackerlist_url"])
202+
self.builder.get_object("tracker_list_url").get_buffer().set_text(config["dynamic_trackerlist_url"])
200203
self.builder.get_object("tracker_list_update_interval").set_text(str(config["dynamic_trackers_update_interval"]))
201204
# trackers
202205
self.trackers = list(config["trackers"])

defaulttrackers/gtkui.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,12 @@ def on_apply_prefs(self):
178178
update_interval = int(self.glade.get_widget("tracker_list_update_interval").get_text() or 1)
179179
except:
180180
update_interval = 1
181+
tracker_list_buffer = self.glade.get_widget("tracker_list_url").get_buffer()
182+
start_iter, end_iter = tracker_list_buffer.get_bounds()
183+
tracker_list_text = tracker_list_buffer.get_text(start_iter, end_iter, False)
181184
self.config.update({
182185
"trackers": [{"url": str(row[0])} for row in self.store],
183-
"dynamic_trackerlist_url": self.glade.get_widget("tracker_list_url").get_text(),
186+
"dynamic_trackerlist_url": tracker_list_text,
184187
"dynamic_trackers_update_interval": update_interval,
185188
})
186189
client.defaulttrackers.set_config(self.config)
@@ -193,7 +196,7 @@ def cb_get_config(self, config):
193196
self.config = config
194197
# dynamic tracker list
195198
if config["dynamic_trackerlist_url"]:
196-
self.glade.get_widget("tracker_list_url").set_text(config["dynamic_trackerlist_url"])
199+
self.glade.get_widget("tracker_list_url").get_buffer().set_text(config["dynamic_trackerlist_url"])
197200
self.glade.get_widget("tracker_list_update_interval").set_text(str(config["dynamic_trackers_update_interval"]))
198201
# trackers
199202
self.trackers = list(config["trackers"])

egg/DefaultTrackers-0.6-py3.12.egg

-39.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)