Skip to content

Commit

Permalink
Änderungen / Korrekturen siehe changelog.txt
Browse files Browse the repository at this point in the history
  • Loading branch information
rols1 committed Jan 11, 2025
1 parent 90977ec commit dd3d79f
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 86 deletions.
2 changes: 1 addition & 1 deletion addon.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.ardundzdf" name="ARDundZDF" version="5.1.6+matrix" provider-name="rols1 ([email protected])">
<addon id="plugin.video.ardundzdf" name="ARDundZDF" version="5.1.7+matrix" provider-name="rols1 ([email protected])">
<requires>
<import addon="xbmc.python" version="3.0.0"/>
<import addon="script.module.kodi-six" />
Expand Down
4 changes: 2 additions & 2 deletions ardundzdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@

# VERSION -> addon.xml aktualisieren
# <nr>229</nr> # Numerierung für Einzelupdate
VERSION = '5.1.6'
VDATE = '07.01.2025'
VERSION = '5.1.7'
VDATE = '11.01.2025'


# (c) 2019 by Roland Scholz, [email protected]
Expand Down
37 changes: 35 additions & 2 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,41 @@ CHANGE HISTORY
max_col 97
--------------

11.01.2025 5.1.7
SendungenAZ (Modul my3Sat): fehlerhafte Zuweisung path=DreiSat_AZ entfernt.
CoverSingle (Modul my3Sat): Notification bei fehlenden Beiträgen ergänzt.
Cache TV-Livestream-Quellen: Bedeutung Setting=0 auf "keine Aktualisierung
geändert" (bisher "sofortiger Refresh") - Aktualisierung get_ZDFstreamlinks,
get_ARDstreamlinks und get_IPTVstreamlinks. Zusätzlich default von 20 auf 60
in settings.xml geändert, Github-Wiki aktualisiert.
Bereinigung Thumbnails-Ordner: Check + Thread-Call in Haupt-PRG ergänzt,
Anpassung ClearUpThumbnails (util) für thread-Nutzung.
SendungenDatum (Modul my3Sat): unescape und repl_json_chars für title.
Github-Repo: Aktualisierung .github/workflows/codeql-analysis.yml (Wechsel
codeql-action-v1 -> codeql-action-v2), Avatar durch Foto ersetzt.
ARDHandleRecents (ARDnew): return "" statt None, um 'NoneType'-Error nach
Abbruch Suchformular zu vermeiden (network_error_main).
get_json_content (ARDnew): Plus-Zeichen aus Suchwort entfernt für korrekte
Markierung.
ZDF_PageMenu: gefiltert-Zähler fcnt vorbelegt (network_error_main bei
funk-Startseite).
AudioPodcastDeSearch: Vorbelegung path bei fehlender dest_url mit query
ergänzt.
AudioPodcastDeSingle: Quotierung für Param title ergänzt.
Audio_get_nexturl: Ausgabe-Stop für Mehr-Button bei new_offset+1 < elements.
ARDSportSliderSingle: Anpassung an Änderung der Webseite (leere Ergebnisse
für "DIE BESTEN TORSCHÜTZEN".
Modul util: doppelte Konstanten PYTHON2 und PYTHON3, Funktionen
transl_pubDate, getDirZipped entfernt (obsolet).
transl_wtag (Modul util): optimiert durch Austausch Liste -> Dict.
Modul util - Optimierungen: time_state (Ermittlung Param start),
transl_wtag (Austausch Liste -> Dict), stringextract + blockextract,
seconds_translate (Pull Request #41), repl_char (entfernt, obsolet),
my_rfind (entfernt, obsolet), dialog_fsk (entfernt, obsolet),
teilstring (Umstellung find/rfind -> index/rindex), make_mark (lesbarer).
get_IPTVstreamlinks (Modul util): neue Zeilenendekennung (\n) hinter Stream-
Url entfernt.

22.12.2024 5.1.6
Main_3Sat (Modul my3Sat): unerlaubte Zeichen aus Live-Titel entfernt,
repl_json_chars(title).
Expand All @@ -22,14 +57,12 @@ CHANGE HISTORY
SingleVideo (arte): ergänzende Param für Call von get_streams_from_link.
get_summary_pre (util): Anpassung an Ermittlung Inhaltstexte via Kontext-
Menü (ShowSumm -> EPG.py), einschl. Abfangen fehlendes maturitytRating.

SingleBeitrag (Modul my3Sat): Inhaltstext aus Webquelle ergänzt, falls
Param summ noch leer.
Search (Modul my3Sat): Abfangen von Medienlinks (nur in SearchARDundZDFnew
erlaubt).
ARDStartSingle (ARDnew): Inhaltstext aus Api-Quelle ergänzt, falls umfang-
reicher als vorher in der Liste ermittelt.

Ausschluss-Filter (Haupt-PRG): Zähler und Notification ergänzt in
ZDF_PageMenu, ZDF_RubrikSingle, ZDF_FlatListEpisodes.
Ausschluss-Filter (ARDnew): Zähler und Notification ergänzt in
Expand Down
3 changes: 3 additions & 0 deletions resources/lib/ARDnew.py
Original file line number Diff line number Diff line change
Expand Up @@ -1740,6 +1740,9 @@ def get_json_content(li, page, ID, mark='', mehrzS='', homeID=""):
PLog('get_json_content: ' + ID); PLog(mark)
ID_org=ID; PLog(type(page));
PLog(str(py2_encode(page))[:80])

if mark: # Bsp. night+of+the+proms
mark = mark.replace("+", " ")

CurSender = ARD_CurSender() # init s. Modulkopf
sendername, sender, kanal, img, az_sender = CurSender.split(':')
Expand Down
122 changes: 41 additions & 81 deletions resources/lib/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# 17.11.2019 Migration Python3 Modul kodi_six + manuelle Anpassungen
#
# <nr>118</nr> # Numerierung für Einzelupdate
# Stand: 08.01.2025
# Stand: 11.01.2025

# Python3-Kompatibilität:
from __future__ import absolute_import
Expand Down Expand Up @@ -1499,24 +1499,15 @@ def GetAttribute(text, attribute, delimiter1 = '=', delimiter2 = ','):
return text[y:z].strip()
else:
return ''
#----------------------------------------------------------------
def repl_dop(liste): # Doppler entfernen, im Python-Script OK, Problem in Plex - s. PageControl
#----------------------------------------------------------------
# Aufr.: Parseplaylist
# Doppler entfernen
def repl_dop(liste):
mylist=liste
myset=set(mylist)
mylist=list(myset)
mylist.sort()
return mylist
#----------------------------------------------------------------
def repl_char(cut_char, line): # problematische Zeichen in Text entfernen, wenn replace nicht funktioniert
line_ret = line # return line bei Fehlschlag
pos = line_ret.find(cut_char)
while pos >= 0:
line_l = line_ret[0:pos]
line_r = line_ret[pos+len(cut_char):]
line_ret = line_l + line_r
pos = line_ret.find(cut_char)
#PLog(cut_char); PLog(pos); PLog(line_l); PLog(line_r); PLog(line_ret) # bei Bedarf
return line_ret
#----------------------------------------------------------------
# für json.loads (z.B.. in router) json-Zeichen in line entfernen, insbesondere
# Hochkommata (Problem bei Dictbildung)
Expand Down Expand Up @@ -1676,40 +1667,17 @@ def blockextract(blockmark, mString, blockendmark=''):

return rlist
#----------------------------------------------------------------
def teilstring(zeile, startmarker, endmarker):
# rfind: endmarker=letzte Fundstelle, return '' bei Fehlschlag
# die übergebenen Marker bleiben Bestandteile der Rückgabe (werden nicht abgeschnitten)
pos2 = zeile.find(endmarker, 0)
pos1 = zeile.rfind(startmarker, 0, pos2)
if pos1 & pos2:
teils = zeile[pos1:pos2+len(endmarker)] #
else:
teils = ''
#PLog(pos1) PLog(pos2)
return teils
# startmarker, endmarker: erste und letzte Fundstelle
# die übergebenen Marker bleiben Bestandteile der Rückgabe (werden nicht abgeschnitten)
# 08.01.2025 Umstellung find/rfind -> index/rindex
def teilstring(zeile, startmarker, endmarker):
try:
pos2 = zeile.index(endmarker)
pos1 = zeile.rindex(startmarker, 0, pos2)
return zeile[pos1:pos2 + len(endmarker)]
except ValueError:
return ''
# ----------------------------------------------------------------------
def my_rfind(left_pattern, start_pattern, line): # sucht ab start_pattern rückwärts + erweitert
# start_pattern nach links bis left_pattern.
# Rückgabe: Position von left_pattern und String ab left_pattern bis einschl. start_pattern
# Mit Python's rfind-Funktion nicht möglich

# PLog(left_pattern); PLog(start_pattern);
if left_pattern == '' or start_pattern == '' or line.find(start_pattern) == -1:
return -1, ''
startpos = line.find(start_pattern)
# Log(startpos); Log(line[startpos-10:startpos+len(start_pattern)]);
i = 1; pos = startpos
while pos >= 0:
newline = line[pos-i:startpos+len(start_pattern)] # newline um 1 Zeichen nach links erweitern
# Log(newline)
if newline.find(left_pattern) >= 0:
leftpos = pos # Position left_pattern in line
leftstring = newline
# Log(leftpos);Log(newline)
return leftpos, leftstring
i = i+1
return -1, '' # Fehler, wenn Anfang line erreicht
#----------------------------------------------------------------
# prüft Vorkommen von String insert in Liste my_items
# Rückgabe False/True
#
Expand All @@ -1723,42 +1691,32 @@ def exist_in_list(insert, my_items):
except Exception as exception:
PLog(str(exception))

return False
return False
#----------------------------------------------------------------
# Dialog mit FSK-Hinweis in page
def dialog_fsk(page):
PLog('dialog_fsk:')
fsk = stringextract('Einige Folgen sind FSK 16 und', ')</', page)
if fsk:
msg1 = "FSK-Hinweis:"
msg2 = 'Einige Folgen sind FSK 16 und %s' % (fsk)
MyDialog(msg1, msg2, '')

return
#----------------------------------------------------------------
# make_mark: farbige Markierung plus fett (optional
# Aufr.: Ausgeben von Suchergebnissen
# make_mark: farbige Markierung plus fett (optional)
# Groß-/Kleinschreibung egal
# bei Fehlschlag mString unverändert zurück
#
# title=' Aussteiger: *Identitäre* wollen Bürgerkrieg gegen'
def make_mark(mark, mString, color='red', bold=''):
PLog("make_mark:")
mark=py2_decode(mark); mString=py2_decode(mString)
mS = up_low(mString); ma = up_low(mark)
if ma in mS or mark == mString:
pos1 = mS.find(ma)
pos2 = pos1 + len(ma)
ms = mString[pos1:pos2] # Mittelstück mark unverändert
s1 = mString[:pos1]; s2 = mString[pos2:];
if bold and color == '':
rString= u"%s[B]%s[/B]%s" % (s1, ms, s2)
elif color and bold:
rString= u"%s[COLOR %s][B]%s[/B][/COLOR]%s" % (s1, color, ms, s2)
else:
rString= u"%s[COLOR %s]%s[/COLOR]%s" % (s1, color, ms, s2)
return rString
mS = up_low(mString); ma = up_low(mark) # beide -> lower
pos1 = mS.find(ma)
if pos1 == -1:
return mString # Markierung fehlt, mString unverändert zurück

pos1 = mS.find(ma)
pos2 = pos1 + len(ma)
ms = mString[pos1:pos2] # Mittelstück mark unverändert
pre = mString[:pos1]; post = mString[pos2:]

if bold and color == '':
rString= u"%s[B]%s[/B]%s" % (pre, ms, post)
elif color and bold:
rString= u"%s[COLOR %s][B]%s[/B][/COLOR]%s" % (pre, color, ms, post)
else:
return mString # Markierung fehlt, mString unverändert zurück
rString= u"%s[COLOR %s]%s[/COLOR]%s" % (pre, color, ms, post)
return rString
#----------------------------------------------------------------
def cleanmark(line): # entfernt Farb-/Fett-Markierungen
# PLog(type(line))
Expand Down Expand Up @@ -2039,7 +1997,8 @@ def CalculateDuration(timecode):
#----------------------------------------------------------------
# Format seconds 86400 (String, Int, Float)
# Rückgabe: 1d, 0h, 0m, 0s (days=True)
# oder: 0h:0d:0s
# oder: 0h:0d:0s
# 30.12.2024: github.com/rols1/Kodi-Addon-ARDundZDF/pull/41
def seconds_translate(seconds, days=False):
PLog('seconds_translate: %s' % str(seconds))

Expand Down Expand Up @@ -2220,7 +2179,7 @@ def get_keyboard_input(line='', head=''):
# Format datestamp: "2017-02-26 21:45:00", 2018-05-24T16:50:00 19-stel.
# 05.06.2020 hinzugefügt: 2018-05-24T16:50:00Z (Z wird hier entfernt)
# beim Menü Sendungen auch 2018-01-20 00:30 16 stel.
# time_state checkt auf akt. Status. Zukunft und jetzt werden rot gekennzeichnet
# time_state checkt auf akt. Status. Zukunft (rot gekennzeichnet)
def getOnline(datestamp, onlycheck=False):
PLog("getOnline: " + datestamp)
PLog(len(datestamp))
Expand All @@ -2232,7 +2191,7 @@ def getOnline(datestamp, onlycheck=False):


online=''; check_state=''
if len(datestamp) == 19 or len(datestamp) == 16:
if len(datestamp) == 19 or len(datestamp) == 16: # Formatierung
senddate = datestamp[:10]
year,month,day = senddate.split('-')
sendtime = datestamp[11:]
Expand All @@ -2253,7 +2212,8 @@ def getOnline(datestamp, onlycheck=False):

# ----------------------------------------------------------------------
# Prüft datestamp auf Vergangenheit, Gegenwart, Zukunft
# Format datestamp: "2020-01-26 11:15:00" 19 stel., in
# Aufrufer: getOnline
# Format datestamp: "2020-01-26 11:15:00" 19 stel., in
# getOnline auf 16 Stellen reduz. (o. Sek.)
# 03.01.2025 Ermittlung Param start optimiert
def time_state(checkstamp):
Expand Down Expand Up @@ -2923,7 +2883,7 @@ def get_IPTVstreamlinks(skip_log=False, force=False):
links = blockextract('http', item) # Links Logo + Stream, http: mögl.
if len(links) >= 1:
thumb = stringextract('tvg-logo="', '"', item)
streamurl = links[1]
streamurl = links[1].strip()
title = tvg_name

PLog("Satz2:")
Expand Down

0 comments on commit dd3d79f

Please sign in to comment.