diff --git a/addon.xml b/addon.xml index 2c094fe..56eb5d8 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/ardundzdf.py b/ardundzdf.py index 4931cdf..fb0a342 100644 --- a/ardundzdf.py +++ b/ardundzdf.py @@ -56,8 +56,8 @@ # VERSION -> addon.xml aktualisieren # 80 # Numerierung für Einzelupdate -VERSION = '4.5.6' -VDATE = '11.12.2022' +VERSION = '4.5.7' +VDATE = '18.12.2022' # (c) 2019 by Roland Scholz, rols1@gmx.de @@ -548,6 +548,7 @@ def Main(): summ = "%s\n-%s" % (summ, "strm-Tools") if SETTINGS.getSetting('pref_playlist') == 'true': summ = "%s\n-%s" % (summ, "PLAYLIST-Tools") + summ = "%s\n-%s" % (summ, "Kodis Thumbnails-Ordner bereinigen") summ = "%s\n\n%s" % (summ, u"[B]Einzelupdate[/B] (für einzelne Dateien und Module)") fparams="&fparams={}" addDir(li=li, label='Infos + Tools', action="dirList", dirID="InfoAndFilter", fanart=R(FANART), thumb=R(ICON_INFO), @@ -671,7 +672,17 @@ def InfoAndFilter(): addDir(li=li, label=title, action="dirList", dirID="start_script",\ fanart=R(FANART), thumb=R("icon-playlist.png"), tagline=tag, summary=summ, fparams=fparams) - title = u"Einzelupdate (einzelne Dateien und Module)" # Update von Einzeldateien + title = u"Kodis Thumbnails-Ordner bereinigen" # Thumbnails-Ordner bereinigen + tag = u'[B]Kodis Thumbnails-Ordner bereinigen[/B]' + summ = u"Das Bereinigen schafft Platz, indem es ältere Bilder entfernt (Auswahl 1-100 Tage)." + summ = u"%s\nDadurch kann sich die Anzeige älterer Beiträge anfangs verzögern." %summ + summ = u"%s\n\nDer aktuelle Füllstand kann im Menü Addon-Infos eingesehen werden." % summ + fparams="&fparams={}" + addDir(li=li, label=title, action="dirList", dirID="resources.lib.tools.ClearUpThumbnails",\ + fanart=R(FANART), thumb=R("icon-clear.png"), tagline=tag, summary=summ, fparams=fparams) + + + title = u"Einzelupdate (einzelne Dateien und Module)" # Update von Einzeldateien tag = u'[B]Update einzelner, neuer Bestandteile des Addons vom Github-Repo %s[/B]' % REPO_NAME tag = u"%s\n\nNach Abgleich werden neue Dateien heruntergeladen - diese ersetzen lokale Dateien im Addon." % tag summ = u"Anstehende Einzelupdates werden im Forum kodinerds im Startpost des Addons angezeigt." @@ -823,10 +834,11 @@ def AddonInfos(): a4 = u"%sKodi-Version: %s" % (t, KODI_VERSION) p1 = u"%s\n%s\n%s\n%s\n%s\n" % (a,a1,a2,a3,a4) + THUMBNAILS = os.path.join(USERDATA, "Thumbnails") a = u"[COLOR red]Cache:[/COLOR]" - a1 = u"%s %10s Dict (Variablen, Objekte)" % (t, get_dir_size(DICTSTORE)) - a2 = u"%s %10s Inhaltstexte (im Voraus geladen)" % (t, get_dir_size(TEXTSTORE)) - a3 = u"%s %10s m3u8 (Einzelauflösungen der Livestreams)" % (t, get_dir_size(M3U8STORE)) + a1 = u"%s %10s Thumbnails (Kodi gesamt)" % (t, get_dir_size(THUMBNAILS)) + a2 = u"%s %10s Dict (Variablen, Objekte)" % (t, get_dir_size(DICTSTORE)) + a3 = u"%s %10s Inhaltstexte (im Voraus geladen)" % (t, get_dir_size(TEXTSTORE)) a4 = u"%s %10s Slides (Bilder)" % (t, get_dir_size(SLIDESTORE)) a5 = u"%s %10s subtitles (Untertitel)" % (t, get_dir_size(SUBTITLESTORE)) a6 = '' diff --git a/changelog.txt b/changelog.txt index 4349043..701c1ce 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,6 +10,21 @@ CHANGE HISTORY max_col 97 -------------- + +18.12.2022 4.5.7 + Kika (Modul childs): Erneuerung Kikaninchen-Code, Bilder neu/aktualisert: + kika-suche, GIT_KIKASTART, GIT_KIKALIVE, GIT_KIKAVIDEOS, GIT_GENALPHA, + GIT_MAUSLIVE, Korrektur Seitenzahl in Kika_Rubriken bei Folgeseiten, + variables Funktionsende in Kikaninchen_VideoSingle (abhängig vom Status + pref_video_direct) für Verbleib in Videoliste. + Neue Funktion ClearupThumbnails (Modul tools): Icon update-einzeln, Menü + "Kodis Thumbnails-Ordner bereinigen" in "Infos + Tools" (Haupt-PRG), An- + passung Cache-Info in Addon-Infos (Haupt-PRG). + update_single (Modul EPG): Abbruch ermöglicht bei 1. Dialog ("eigene Auswahl + oder Liste"). + ClearUp (Modul util): zusätzl. Param keep_dirs (keine Verzeichnisse löschen). + get_dir_size (Modul util): zusätzl. Param raw (raw-Rückgabe size in Bytes). + 11.12.2022 4.5.6 SearchWordWork (Modul tools): Hinzufügen neuer Suchwörter begrenzt auf 24, einschl. Dialog. diff --git a/resources/images/icon-clear.png b/resources/images/icon-clear.png new file mode 100644 index 0000000..8d7e60f Binary files /dev/null and b/resources/images/icon-clear.png differ diff --git a/resources/images/kika-suche.png b/resources/images/kika-suche.png new file mode 100644 index 0000000..4d1fce0 Binary files /dev/null and b/resources/images/kika-suche.png differ diff --git a/resources/lib/EPG.py b/resources/lib/EPG.py index 9da6cc5..30c8c3b 100644 --- a/resources/lib/EPG.py +++ b/resources/lib/EPG.py @@ -180,17 +180,19 @@ def update_single(PluginAbsPath): ret = util.MyDialog(msg1=msg1, msg2=msg2, msg3='', ok=False, yes='eigene Auswahl', cancel='komplette Liste', heading=title) PLog(ret) # 0 od. ESC = komplette Liste - if ret == 1: # 1 = eigene Auswahl - textlist=[]; selected=[] - for local_file in SINGLELIST: - local_file = local_file.split(PluginAbsPath)[-1] - textlist.append(local_file[1:]) # ohne führ. / (wie Ergebnisliste) + if ret != 1: # 1 = eigene Auswahl + return - title = u"Einzelupdate - eigene Auswahl vornehmen:" - ret_list = xbmcgui.Dialog().multiselect(title, textlist, preselect=selected) - PLog("ret_list: %s" % str(ret_list)) - if ret_list == None or len(ret_list) == 0: # ohne Auswahl - return + textlist=[]; selected=[] + for local_file in SINGLELIST: + local_file = local_file.split(PluginAbsPath)[-1] + textlist.append(local_file[1:]) # ohne führ. / (wie Ergebnisliste) + + title = u"Einzelupdate - eigene Auswahl vornehmen:" + ret_list = xbmcgui.Dialog().multiselect(title, textlist, preselect=selected) + PLog("ret_list: %s" % str(ret_list)) + if ret_list == None or len(ret_list) <= 0: # ohne Auswahl + return title = "Einzelupdate starten (eigene Auswahl)" if len(ret_list) == len(SINGLELIST): diff --git a/resources/lib/childs.py b/resources/lib/childs.py index 97be648..a948d81 100644 --- a/resources/lib/childs.py +++ b/resources/lib/childs.py @@ -8,7 +8,7 @@ ################################################################################ # # 12 # Numerierung für Einzelupdate -# Stand: 13.12.2022 +# Stand: 17.12.2022 # Python3-Kompatibilität: from __future__ import absolute_import # sucht erst top-level statt im akt. Verz. @@ -86,7 +86,7 @@ MAUSRELIVE = "https://www.wdrmaus.de//_teaserbilder/721363_512.jpg" MAUSHEAR = "https://www1.wdr.de/mediathek/audio/sendereihen-bilder/maus_sendereihenbild_podcast-1-100~_v-original.jpg" -# ext. Icons zum Nachladen aus Platzgründen,externe Nutzung: ZDFRubriken (GIT_ZDFTIVI) +# ext. Icons zum Nachladen aus Platzgründen,externe Nutzung: #GIT_KIKA = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/tv-kika.png?raw=true" KIKA_START = "https://www.kika.de/bilder/startseite-104_v-tlarge169_w-1920_zc-a4147743.jpg" # ab 07.12.2022 KIKA_VIDEOS = "https://www.kika.de/videos/videos-110_v-tlarge169_zc-cc2f4e31.jpg" # - " - @@ -97,6 +97,7 @@ KIKA_WISSEN = "https://www.kika.de/videos/wissen-108_v-tlarge169_zc-cc2f4e31.jpg?version=11506" KIKA_SHOWS = "https://www.kika.de/videos/show-100_v-tlarge169_zc-cc2f4e31.jpg?version=3229" KIKA_LIVE = "https://www.kika.de/live/bilder/live-102_v-tlarge169_zc-cc2f4e31.jpg?version=32751" +KIKA_GENALPHA = "https://kommunikation.kika.de/ueber-kika/25-jahre/podcast/generation-alpha-100_v-tlarge169_zc-cc2f4e31.jpg?version=35225" GIT_AZ = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/icon-AZ.png?raw=true" # Einzelbuchstaben zu A-Z siehe Tivi_AZ @@ -117,6 +118,14 @@ GIT_AD = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/tv-kikaAD.png?raw=true" GIT_ARD_KINDER = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/tv-ard_kinder-familie.png?raw=true" +# 14.12.2022 1024x1024: +GIT_KIKASTART = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/GIT_KIKASTART.png?raw=true" +GIT_KIKALIVE = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/GIT_KIKALIVE.png?raw=true" +GIT_KIKAVIDEOS = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/GIT_KIKAVIDEOS.png?raw=true" +GIT_GENALPHA = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/GIT_GENALPHA.png?raw=true" +GIT_MAUSLIVE = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/GIT_MAUSLIVE.png?raw=true" + + KikaCacheTime = 1*3600 # Addon-Cache für A-Z-Seiten: 1 Stunde KIKA_HEADERS ="{'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36', \ 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate, br', 'Cache-Control': 'max-age=0'}" @@ -173,12 +182,12 @@ def Main_KIKA(title=''): summ = "Suche Sendungen in KiKA" fparams="&fparams={'query': '', 'title': '%s'}" % title addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.Kika_Search", - fanart=KIKA_START, thumb=R(ICON_SEARCH), fparams=fparams) + fanart=KIKA_START, thumb=R("kika-suche.png"), fparams=fparams) title='KiKA Live gucken' fparams="&fparams={}" addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.Kika_Live", - fanart=KIKA_START, thumb=KIKA_LIVE, tagline='KIKA TV-Live', fparams=fparams) + fanart=KIKA_START, thumb=GIT_KIKALIVE, tagline='KIKA TV-Live', fparams=fparams) title='KiKA Programmvorschau' tag = u"Programmvorschau für eine Woche\n\nMit Klick zur laufenden Sendung" @@ -189,16 +198,16 @@ def Main_KIKA(title=''): title='KiKA Startseite' # neu ab 07.12 2022 fparams="&fparams={}" addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.Kika_Start", - fanart=KIKA_START, thumb=KIKA_START, tagline=title, fparams=fparams) + fanart=KIKA_START, thumb=GIT_KIKASTART, tagline=title, fparams=fparams) title='KiKA Videos' # neu ab 07.12 2022 fparams="&fparams={}" addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.Kika_Videos_Menu", - fanart=KIKA_START, thumb=KIKA_VIDEOS, tagline=title, fparams=fparams) + fanart=KIKA_START, thumb=GIT_KIKAVIDEOS, tagline=title, fparams=fparams) title=u'MausLive' tag = u"%s\n\nDer Kinderradiokanal des WDR (Nachfolgeseite für [B]KiRaKa[/B])" % title - img = MAUSLIVE + img = GIT_MAUSLIVE fparams="&fparams={}" addDir(li=li, label=title , action="dirList", dirID="resources.lib.childs.MausLive", fanart=KIKA_START, thumb=img, tagline=tag, fparams=fparams) @@ -220,7 +229,7 @@ def Main_KIKA(title=''): title=u'[B]für Erwachsene:[/B] Generation Alpha – Der KiKA-Podcast' tag = u"[B]für Erwachsene:[/B]\nwie entwickelt sich die Lebenswelt der Kinder und welche Herausforderungen kommen auf " tag = u"%sMedienmacher*innen zu? Das sind die Leitfragen von [B]Generation Alpha – Der KiKA-Podcast[/B]" % tag - thumb = "https://kommunikation.kika.de/ueber-kika/25-jahre/podcast/generation-alpha-100_v-tlarge169_zc-cc2f4e31.jpg?version=35225" + thumb = GIT_GENALPHA fparams="&fparams={}" addDir(li=li, label=title, action="dirList", dirID="resources.lib.childs.gen_alpha", fanart=KIKA_START, thumb=thumb, tagline=tag, fparams=fparams) @@ -712,10 +721,11 @@ def Kika_get_singleItem(s): # ---------------------------------------------------------------------- # 07.12.2022 Neu nach Webänderungen - Cluster ermitteln in # Folgeseiten (path=api_url -> json), docType: videoSubchannel -# +# Sonderbehdl. Kikaninchen_Videos: extract api_url in html-Seite, +# erneut -> Kika_Subchannel def Kika_Subchannel(path, title, thumb, Plot, li=''): PLog('Kika_Subchannel: ' + title) - title_org=title + title_org=title page, msg = get_page(path) if page == '': @@ -723,6 +733,19 @@ def Kika_Subchannel(path, title, thumb, Plot, li=''): msg2 = msg MyDialog(msg1, msg2, '') return + + # ------------------------ + if path.endswith("html"): # von Kikaninchen_Videos, s.o. + PLog("html_site") + pos1 = page.find('"videoSubchannel"') + PLog(pos1) + if pos1 > 0: + page = page[pos1:] + allvideos = stringextract('"url":"', '"', page) # wie videosPageUrl in json-Seite + Kika_Subchannel(allvideos, title, thumb, Plot="") + return + # ------------------------ + if li == "": li = xbmcgui.ListItem() li = home(li, ID='Kinderprogramme') # Home-Button @@ -733,7 +756,7 @@ def Kika_Subchannel(path, title, thumb, Plot, li=''): Plot_par = Plot summ_org = Plot.replace("||", "\n") # Plot hier: tagline + summary - + featuredVideo = stringextract('"featuredVideo"', '"videosPageUrl"', page) fanimg="" if featuredVideo: # Empfehlung od. 1. Folge | kann fehlen @@ -780,10 +803,11 @@ def Kika_Series(path, title, thumb, Plot): MyDialog(msg1, msg2, '') return - Subchannel = stringextract('"videoSubchannel"', '},', page) - api_url = stringextract('url":"', '"', Subchannel) - Kika_Subchannel(api_url, title, thumb, Plot) # -> Seitensteuerung Kika_Rubriken - xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True) + Subchannel = stringextract('"videoSubchannel"', '},', page) # fehlt für Serien-Button + if Subchannel: + api_url = stringextract('url":"', '"', Subchannel) + Kika_Subchannel(api_url, title, thumb, Plot) # -> Seitensteuerung Kika_Rubriken + xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True) # ---------------------------------------------------------------------- # 07.12.2022 Neu nach Webänderungen - einz. Cluster/Channel/Folgen @@ -814,12 +838,16 @@ def Kika_Rubriken(page, title, thumb, ID='', li='', path=''): items = blockextract('"docType":', page) PLog(len(items)) + skip_list=[] for s in items: mediatype='' # path: api_url, neue typ-Varianten in Kika_get_singleItem # ergänzen: mehrf,typ,path,stitle,thumb,Plot = Kika_get_singleItem(s) # -> Kika_get_singleItem tag = Plot.replace('||', '\n') + if path in skip_list: # Doppler vermeiden + continue + skip_list.append(path) if typ == "skip_api_null": # fehlende api-Url ausblenden continue if typ == "interactiveContent": # Spiele ausblenden @@ -853,7 +881,7 @@ def Kika_Rubriken(page, title, thumb, ID='', li='', path=''): next_page=0 try: next_page = re.search(u'page=(\d+)', next_path).group(1) - next_page = int(next_page) + next_page = int(next_page) +1 except Exception as exception: PLog(str(exception)) @@ -1322,14 +1350,14 @@ def Kikaninchen_Videos(showChar, path='', title=''): thumb = stringextract('image":"', '"', item) # gesamt-img if thumb == "": thumb = R("Dir-video.png") - id_link = stringextract('@id":"', '"', item) # ev. Link zu KiKA-Seite + id_link = stringextract('@id":"', '"', item) # ev. Link zu KiKA-Seite (html) PLog("id_link: %s, thumb: %s" % (id_link, thumb)) # Inhalte node-videos fehlen bei id-Links zu KiKA-Seiten. pos1 = page.find("node-videos") # wie KikaninchenVideosAZ page = page[pos1:] PLog(page[:100]) - items = blockextract(" extract api_url zu videosPageUrl (alle-folgen) msg1 = "KiKA-Videos" # notification msg2 = title icon = KIKA_VIDEOS @@ -1381,14 +1409,15 @@ def Kikaninchen_Videos(showChar, path='', title=''): li = xbmcgui.ListItem() li = home(li, ID='Kinderprogramme') # Home-Button - thumb = R(ICON_DIR_FOLDER) for s in AZ_lines: + thumb = R(ICON_DIR_FOLDER) title, href = s.split("|") # Zeile: Titel|Link title = unescape(title) fchar = up_low(title[0]) tag = "weiter zu den [B]Videos[/B]" if "_zc-" and "_zs-" in href: tag = "weiter zum [B]Einzelvideo[/B]" + thumb = R("Dir-video.png") if fchar == showChar: PLog(href); PLog(title); img = "https://github.com/rols1/PluginPictures/blob/master/ARDundZDF/KIKA_tivi/Buchstabe_%s.png?raw=true" % showChar @@ -1439,6 +1468,7 @@ def KikaninchenFilme(): # 10.12.2022 Neu nach Webseitenänderungen # Videodetails via Assets-Url ermitteln. path = Videoseite mit embedded # Player, für Videodetails +# Aufrufer: Kikaninchen_Videos # Aufrufer mit assets_url: KikaninchenLieder # def Kikaninchen_VideoSingle(path, title, assets_url=''): @@ -1538,7 +1568,9 @@ def Kikaninchen_VideoSingle(path, title, assets_url=''): thumb = img; ID = 'KIKA'; HOME_ID = "Kinderprogramme" ardundzdf.build_Streamlists_buttons(li,title_org,thumb,geoblock,Plot,sub_path,\ HLS_List,MP4_List,HBBTV_List,ID,HOME_ID) - + + if SETTINGS.getSetting('pref_video_direct') == 'true': # Verbleib in Liste + return xbmcplugin.endOfDirectory(HANDLE, cacheToDisc=True) # ---------------------------------------------------------------------- @@ -1638,9 +1670,10 @@ def Tonschnipsel(): # ###################################################################### # einzelnes Video # 07.12.2022 Neu nach Webänderungen (vormals xml-Seite) -# path enthält die api-Seite mit Details. Hier direkt +# path enthält die api-Seite mit Details (json). Hier direkt # weiter mit der assets-Url zu den Videoquellen (einfaches Anängen # von /assets klappt nicht bei typ=relatedVideo +# Aufrufer: Kika_Subchannel, Kika_Rubriken # def Kika_SingleBeitrag(path, title, thumb, Plot): PLog('Kika_SingleBeitrag: ' + path) diff --git a/resources/lib/tools.py b/resources/lib/tools.py index 040cacd..5c46ab4 100644 --- a/resources/lib/tools.py +++ b/resources/lib/tools.py @@ -8,7 +8,7 @@ ################################################################################ # 2 # Numerierung für Einzelupdate -# Stand: 27.06.2022 +# Stand: 18.12.2022 # Python3-Kompatibilität: from __future__ import absolute_import # sucht erst top-level statt im akt. Verz. @@ -390,4 +390,106 @@ def FilterToolsWork(action): xbmc.executebuiltin('Container.Refresh') return + +#---------------------------------------------------------------- +# Aufruf InfoAndFilter +# Kodis Thumbnails-Ordner bereinigen +# Hinw.: ClearUp (util) nicht geeignet (ohne Check einz. Dateien +# in Unterverz.) +# +def ClearUpThumbnails(): + PLog('ClearUpThumbnails:') + + li = xbmcgui.ListItem() + li = home(li, ID=NAME) # Home-Button + + THUMBNAILS = os.path.join(USERDATA, "Thumbnails") + directory = THUMBNAILS + #directory = "/tmp/Thumbnails/" # Debug + + akt_size_raw = get_dir_size(directory, raw=True) + akt_size = humanbytes(akt_size_raw) + dialog = xbmcgui.Dialog() + + #----------------------- # 1. Auswahl Lösch-Alter + title = u"Bitte das Lösch-Alter in Tagen auswählen:" + day_list = ["1","5","10","30","100"] + sel = dialog.select(title, day_list) + if sel < 0: + return + + sel = day_list[sel] + PLog("Auswahl: " + sel) + + #----------------------- # 2. Bereinigung / Abbruch + title = u"Thumbnails-Bereinigung starten?" + msg1 = u"Aktuelle Größe: [B]%s[/B] | Lösch-Alter: [B]%s[/B] Tage" % (akt_size, sel) + msg2 = u"Thumbnails-Bereinigung jetzt starten?" + msg3 = u"Rückgängig nicht möglich!" + ret = MyDialog(msg1, msg2, msg3, ok=False, cancel='Abbruch', yes='JA', heading=title) + PLog(ret) + if ret != 1: + return + + maxdays = int(sel) + PLog("ClearUp_Start: %s | days: %d" % (directory, maxdays)) + max_secs = maxdays*86400 # 1 Tag=86400 sec + now = time.time() + cnt=0; del_cnt=0; + for dirpath, dirnames, filenames in os.walk(directory): + for f in filenames: + fp = os.path.join(dirpath, f) # Filepath + # PLog(fp) # Debug + # skip symbolic link + if not os.path.islink(fp): + cnt = cnt+1 + if os.stat(fp).st_mtime < (now - max_secs): + os.remove(fp) + del_cnt = del_cnt+1 + + #----------------------- # 3. Abschluss-Info + if ret == False: + msg1 = u"Bereinigung fehlgeschlagen" + msg2 = u"Fehler siehe Addon-Log (Plugin-Logging einschalten)" + msg3 = "" + MyDialog(msg1, msg2, '') + return + + new_size_raw = get_dir_size(directory, raw=True) + new_size = humanbytes(new_size_raw) + win = akt_size_raw - new_size_raw + PLog(del_cnt); PLog(win) + msg1 = u"Fertig | Entfernte Thumbnails: [B]%s[/B]" % del_cnt + msg2 = u"Größe vorher / nachher: %s / %s." % (akt_size, new_size) + msg3 = "Speicherplatz unverändert." + if win > 0: + msg3 = "Speicherplatz freigegeben: [B]%s[/B]." % humanbytes(win) + MyDialog(msg1, msg2, msg3) + + return # Verbleib in Tools-Liste + #---------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/lib/util.py b/resources/lib/util.py index cbdd193..1c08b91 100644 --- a/resources/lib/util.py +++ b/resources/lib/util.py @@ -12,7 +12,7 @@ # 17.11.2019 Migration Python3 Modul kodi_six + manuelle Anpassungen # # 33 # Numerierung für Einzelupdate -# Stand: 03.12.2022 +# Stand: 18.12.2022 # Python3-Kompatibilität: from __future__ import absolute_import @@ -527,10 +527,11 @@ def name(**variables): # Dateien löschen älter als seconds # directory = os.path.join(path) # seconds = int (1 Tag=86400, 1 Std.=3600) -# leere Ordner werden entfernt -def ClearUp(directory, seconds): +# Ältere Ordner werden ohne Leertest entfernt! +def ClearUp(directory, seconds, keep_dirs=False): PLog('ClearUp: %s, sec: %s' % (directory, seconds)) PLog('älter als: ' + seconds_translate(seconds, days=True)) + PLog("keep_dirs: " + str(keep_dirs)) now = time.time() cnt_files=0; cnt_dirs=0 try: @@ -546,10 +547,11 @@ def ClearUp(directory, seconds): PLog('entfernte_Datei: ' + f) os.remove(f) cnt_files = cnt_files + 1 - if os.path.isdir(f): # Verz. ohne Leertest entf. - PLog('entferntes Verz.: ' + f) - shutil.rmtree(f, ignore_errors=True) - cnt_dirs = cnt_dirs + 1 + if os.path.isdir(f): # Verz. ohne Leertest entfernen + if keep_dirs: + PLog('entferntes Verz.: ' + f) + shutil.rmtree(f, ignore_errors=True) + cnt_dirs = cnt_dirs + 1 PLog("ClearUp: entfernte Dateien %s, entfernte Ordner %s" % (str(cnt_files), str(cnt_dirs))) return True except Exception as exception: @@ -558,8 +560,9 @@ def ClearUp(directory, seconds): #---------------------------------------------------------------- # u.a. für AddonInfos -def get_dir_size(directory): - PLog('get_dir_size:') +# raw= False: Rückgabe humanbytes +def get_dir_size(directory, raw=False): + PLog('get_dir_size: ' + str(raw)) size=0 for dirpath, dirnames, filenames in os.walk(directory): @@ -568,8 +571,10 @@ def get_dir_size(directory): # skip symbolic link if not os.path.islink(fp): size += os.path.getsize(fp) - - return humanbytes(size) + if raw: + return size + else: + return humanbytes(size) #---------------------------------------------------------------- # checkt Existenz + Größe Datei fpath # Rückgabe True falls > 2 Byte