Skip to content

Commit ab2a89e

Browse files
committed
#5 - Handle port mismatches
1 parent 26a29e3 commit ab2a89e

5 files changed

Lines changed: 67 additions & 5 deletions

File tree

lib/service.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@
33
import threading
44
from xml.etree import ElementTree # nosec
55

6+
try:
7+
import urlparse
8+
except ImportError:
9+
import urllib.parse as urlparse
10+
611
import xbmc
712

813
from lib.entries import ENTRIES_PATH
914
from lib.httpserver import threaded_http_server
10-
from lib.kodi import ADDON_PATH, get_repository_port, set_logger
15+
from lib.kodi import ADDON_PATH, get_repository_port, set_logger, notification, translate
1116
from lib.repository import Repository
1217
from lib.routes import add_repository_routes
1318

19+
REPO_DIR_XPATH = "extension[@point='xbmc.addon.repository']/dir"
20+
REPO_INFO_XPATH = "info"
21+
REPO_CHECKSUM_XPATH = "checksum"
22+
REPO_DATADIR_XPATH = "datadir"
23+
1424
set_logger()
1525
add_repository_routes(Repository(
1626
files=(os.path.join(ADDON_PATH, "resources", "repository.json"), ENTRIES_PATH)))
@@ -19,12 +29,20 @@
1929
def update_repository_port(port, xml_path=os.path.join(ADDON_PATH, "addon.xml")):
2030
base_url = "http://127.0.0.1:{}/".format(port)
2131
tree = ElementTree.parse(xml_path)
22-
tree.find("extension[@point='xbmc.addon.repository']/dir/info").text = base_url + "addons.xml"
23-
tree.find("extension[@point='xbmc.addon.repository']/dir/checksum").text = base_url + "addons.xml.md5"
24-
tree.find("extension[@point='xbmc.addon.repository']/dir/datadir").text = base_url
32+
dir_element = tree.find(REPO_DIR_XPATH)
33+
dir_element.find(REPO_INFO_XPATH).text = base_url + "addons.xml"
34+
dir_element.find(REPO_CHECKSUM_XPATH).text = base_url + "addons.xml.md5"
35+
dir_element.find(REPO_DATADIR_XPATH).text = base_url
2536
tree.write(xml_path, encoding="UTF-8", xml_declaration=True)
2637

2738

39+
def validate_repository_port(port, xml_path=os.path.join(ADDON_PATH, "addon.xml")):
40+
dir_element = ElementTree.parse(xml_path).find(REPO_DIR_XPATH)
41+
ports = (urlparse.urlparse(dir_element.find(m).text).port for m in
42+
(REPO_DATADIR_XPATH, REPO_INFO_XPATH, REPO_CHECKSUM_XPATH))
43+
return all(port == p for p in ports)
44+
45+
2846
class ServiceMonitor(xbmc.Monitor):
2947
def __init__(self, port):
3048
super(ServiceMonitor, self).__init__()
@@ -33,6 +51,7 @@ def __init__(self, port):
3351
def onSettingsChanged(self):
3452
port = get_repository_port()
3553
if port != self._port:
54+
notification(translate(30021))
3655
update_repository_port(port)
3756
self._port = port
3857

@@ -68,5 +87,8 @@ def __exit__(self, exc_type, exc_val, exc_tb):
6887

6988
def run():
7089
port = get_repository_port()
90+
if not validate_repository_port(port):
91+
notification(translate(30020))
92+
update_repository_port(port)
7193
with HTTPServerRunner(port):
7294
ServiceMonitor(port).waitForAbort()

resources/language/resource.language.en_gb/strings.po

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ msgctxt "#30006"
4646
msgid "About"
4747
msgstr ""
4848

49+
# Entries
4950
msgctxt "#30010"
5051
msgid "No entries to delete"
5152
msgstr ""
@@ -64,4 +65,13 @@ msgstr ""
6465

6566
msgctxt "#30014"
6667
msgid "Failed updating repository"
67-
msgstr ""
68+
msgstr ""
69+
70+
# Service
71+
msgctxt "#30020"
72+
msgid "Detected repository port mismatches. Applying a fix - please restart Kodi so changes take effect."
73+
msgstr ""
74+
75+
msgctxt "#30021"
76+
msgid "Please restart Kodi so the updated port takes effect."
77+
msgstr ""

resources/language/resource.language.es_es/strings.po

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ msgctxt "#30006"
4646
msgid "About"
4747
msgstr "Sobre"
4848

49+
# Entries
4950
msgctxt "#30010"
5051
msgid "No entries to delete"
5152
msgstr "No hay entradas que eliminar"
@@ -65,3 +66,12 @@ msgstr "Repositorio actualizado"
6566
msgctxt "#30014"
6667
msgid "Failed updating repository"
6768
msgstr "Error al actualizar el repositorio"
69+
70+
# Service
71+
msgctxt "#30020"
72+
msgid "Detected repository port mismatches. Applying a fix - please restart Kodi so changes take effect."
73+
msgstr "Se detectaron incompatibilidades en los puertos del repositorio. Se está aplicando una solución - reinicie Kodi para que los cambios surtan efecto."
74+
75+
msgctxt "#30021"
76+
msgid "Please restart Kodi so the updated port takes effect."
77+
msgstr "Reinicie Kodi para que el puerto actualizado surta efecto."

resources/language/resource.language.pt_br/strings.po

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ msgctxt "#30006"
4646
msgid "About"
4747
msgstr "Sobre"
4848

49+
# Entries
4950
msgctxt "#30010"
5051
msgid "No entries to delete"
5152
msgstr "Sem entradas para apagar"
@@ -65,3 +66,12 @@ msgstr "Repositório atualizado"
6566
msgctxt "#30014"
6667
msgid "Failed updating repository"
6768
msgstr "Erro a atualizar repositório"
69+
70+
# Service
71+
msgctxt "#30020"
72+
msgid "Detected repository port mismatches. Applying a fix - please restart Kodi so changes take effect."
73+
msgstr "Detetadas incompatibilidades no porto do repositório. A corrigir - por favor reinicie o Kodi para que as alterações surtam efeito"
74+
75+
msgctxt "#30021"
76+
msgid "Please restart Kodi so the updated port takes effect."
77+
msgstr "Por favor reinicie o Kodi para que o porto atualizado surta efeito"

resources/language/resource.language.pt_pt/strings.po

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ msgctxt "#30006"
4646
msgid "About"
4747
msgstr "Sobre"
4848

49+
# Entries
4950
msgctxt "#30010"
5051
msgid "No entries to delete"
5152
msgstr "Sem entradas para apagar"
@@ -65,3 +66,12 @@ msgstr "Repositório atualizado"
6566
msgctxt "#30014"
6667
msgid "Failed updating repository"
6768
msgstr "Erro a atualizar repositório"
69+
70+
# Service
71+
msgctxt "#30020"
72+
msgid "Detected repository port mismatches. Applying a fix - please restart Kodi so changes take effect."
73+
msgstr "Detetadas incompatibilidades no porto do repositório. A corrigir - por favor reinicie o Kodi para que as alterações surtam efeito"
74+
75+
msgctxt "#30021"
76+
msgid "Please restart Kodi so the updated port takes effect."
77+
msgstr "Por favor reinicie o Kodi para que o porto atualizado surta efeito"

0 commit comments

Comments
 (0)