[UI][Common] Wrap torrent comment and tracker status URLs in HTML (clickable)
Closes: https://github.com/deluge-torrent/deluge/pull/460
This commit is contained in:
parent
9d802b2a91
commit
3bceb4bfc1
|
@ -720,6 +720,16 @@ def parse_human_size(size):
|
||||||
raise InvalidSize(msg % (size, tokens))
|
raise InvalidSize(msg % (size, tokens))
|
||||||
|
|
||||||
|
|
||||||
|
def anchorify_urls(text: str) -> str:
|
||||||
|
"""
|
||||||
|
Wrap all occurrences of text URLs with HTML
|
||||||
|
"""
|
||||||
|
url_pattern = r'((htt)|(ft)|(ud))ps?://\S+'
|
||||||
|
html_href_pattern = r'<a href="\g<0>">\g<0></a>'
|
||||||
|
|
||||||
|
return re.sub(url_pattern, html_href_pattern, text)
|
||||||
|
|
||||||
|
|
||||||
def is_url(url):
|
def is_url(url):
|
||||||
"""
|
"""
|
||||||
A simple test to check if the URL is valid
|
A simple test to check if the URL is valid
|
||||||
|
|
|
@ -10,7 +10,7 @@ import logging
|
||||||
from xml.sax.saxutils import escape as xml_escape
|
from xml.sax.saxutils import escape as xml_escape
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.common import decode_bytes, fdate, fsize, is_url
|
from deluge.common import anchorify_urls, decode_bytes, fdate, fsize
|
||||||
|
|
||||||
from .tab_data_funcs import fdate_or_dash, fpieces_num_size
|
from .tab_data_funcs import fdate_or_dash, fpieces_num_size
|
||||||
from .torrentdetails import Tab
|
from .torrentdetails import Tab
|
||||||
|
@ -61,8 +61,8 @@ class DetailsTab(Tab):
|
||||||
for widget in self.tab_widgets.values():
|
for widget in self.tab_widgets.values():
|
||||||
txt = xml_escape(self.widget_status_as_fstr(widget, status))
|
txt = xml_escape(self.widget_status_as_fstr(widget, status))
|
||||||
if decode_bytes(widget.obj.get_text()) != txt:
|
if decode_bytes(widget.obj.get_text()) != txt:
|
||||||
if 'comment' in widget.status_keys and is_url(txt):
|
if 'comment' in widget.status_keys:
|
||||||
widget.obj.set_markup(f'<a href="{txt}">{txt}</a>')
|
widget.obj.set_markup(anchorify_urls(txt))
|
||||||
else:
|
else:
|
||||||
widget.obj.set_markup(txt)
|
widget.obj.set_markup(txt)
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
from deluge.common import ftime
|
from deluge.common import anchorify_urls, ftime
|
||||||
|
|
||||||
from .tab_data_funcs import fcount, ftranslate, fyes_no
|
from .tab_data_funcs import fcount, ftranslate, fyes_no
|
||||||
from .torrentdetails import Tab
|
from .torrentdetails import Tab
|
||||||
|
@ -54,6 +54,9 @@ class TrackersTab(Tab):
|
||||||
for widget in self.tab_widgets.values():
|
for widget in self.tab_widgets.values():
|
||||||
txt = self.widget_status_as_fstr(widget, status)
|
txt = self.widget_status_as_fstr(widget, status)
|
||||||
if widget.obj.get_text() != txt:
|
if widget.obj.get_text() != txt:
|
||||||
|
if 'tracker_status' in widget.status_keys:
|
||||||
|
widget.obj.set_markup(anchorify_urls(txt))
|
||||||
|
else:
|
||||||
widget.obj.set_text(txt)
|
widget.obj.set_text(txt)
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
|
|
Loading…
Reference in New Issue