From 4780e2964c01128223f3e804a4ecaa7fdc172c2c Mon Sep 17 00:00:00 2001 From: gald Date: Wed, 24 Sep 2025 11:56:03 +0200 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1n=C3=AD=20na=C4=8D=C3=ADt=C3=A1n?= =?UTF-8?q?=C3=AD=20a=20zobrazen=C3=AD=20filmov=C3=BDch=20kolekc=C3=AD=20z?= =?UTF-8?q?=20JSON=20soubor=C5=AF,=20v=C4=8Detn=C4=9B=20vylep=C5=A1en?= =?UTF-8?q?=C3=A9ho=20logov=C3=A1n=C3=AD=20a=20chybov=C3=A9=20spr=C3=A1vy.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galdPl.py | 89 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 12 deletions(-) diff --git a/galdPl.py b/galdPl.py index af69dd1..38f1e9a 100644 --- a/galdPl.py +++ b/galdPl.py @@ -723,6 +723,8 @@ def mojedb(params): xbmcplugin.setPluginCategory(_handle, _addon.getAddonInfo('name') + " \\ " + _addon.getLocalizedString(30220)) token = revalidate() updateListing=False + series_files = [] + movies_collections = [] try: # Načti seznam dostupných seriálů a filmů @@ -732,9 +734,8 @@ def mojedb(params): xbmc.log(f"Debug: Načítám seriály z: {series_dir}", xbmc.LOGDEBUG) # Načti seznam souborů seriálů - series_files = [] xbmc.log(f"Debug: Kontroluji existenci složky: {series_dir}", xbmc.LOGDEBUG) - + # Zkusíme načíst soubory pomocí os.path try: # Použijeme os.path místo xbmcvfs pro načítání souborů @@ -754,7 +755,36 @@ def mojedb(params): xbmc.log(f"Debug: Nalezeno {len(series_files)} JSON souborů seriálů", xbmc.LOGDEBUG) for file in series_files: xbmc.log(f"Debug: Seriál soubor: {file}", xbmc.LOGDEBUG) - + + xbmc.log(f"Debug: Načítám filmy z: {movies_dir}", xbmc.LOGDEBUG) + movies_files = [] + try: + if os.path.exists(movies_dir): + files = os.listdir(movies_dir) + xbmc.log(f"Debug: Úspěšně načteno {len(files)} souborů z {movies_dir}", xbmc.LOGDEBUG) + for file in files: + xbmc.log(f"Debug: Kontroluji filmový soubor: {file}", xbmc.LOGDEBUG) + if file.endswith('.json'): + movies_files.append(file) + xbmc.log(f"Debug: Přidán JSON soubor filmů: {file}", xbmc.LOGDEBUG) + else: + xbmc.log(f"Debug: Složka neexistuje (os.path): {movies_dir}", xbmc.LOGDEBUG) + except Exception as e: + xbmc.log(f"Debug: Chyba při načítání složky {movies_dir}: {str(e)}", xbmc.LOGDEBUG) + + xbmc.log(f"Debug: Nalezeno {len(movies_files)} JSON souborů filmů", xbmc.LOGDEBUG) + for file in movies_files: + try: + movie_path = xbmcvfs.translatePath(os.path.join(_addon.getAddonInfo('path'), 'resources', 'movies', file)) + xbmc.log(f"Debug: Načítám filmový katalog: {file}", xbmc.LOGDEBUG) + with xbmcvfs.File(movie_path, 'r') as f: + content = f.read() + movie_data = json.loads(content) + movies_collections.append({'file': file, 'data': movie_data}) + xbmc.log(f"Debug: Přidán katalog filmů: {movie_data.get('title', file)}", xbmc.LOGDEBUG) + except Exception as e: + xbmc.log(f"Chyba při načítání filmového souboru {file}: {str(e)}", xbmc.LOGERROR) + except Exception as e: xbmc.log(f"Chyba při načítání databáze: {str(e)}", xbmc.LOGERROR) popinfo(f"Chyba při načítání databáze: {str(e)}", icon=xbmcgui.NOTIFICATION_ERROR, sound=True) @@ -903,21 +933,56 @@ def mojedb(params): offset = 0 dosearch(token, what, category, sort, limit, offset, 'search') - # Výpis filmů - elif params.get('type') == 'movies': - for idx, movie in enumerate(dbdata.get('movies', [])): - listitem = xbmcgui.ListItem(label=movie['title']) - listitem.setArt({'icon': movie.get('icon', 'DefaultMovies.png')}) - xbmcplugin.addDirectoryItem(_handle, get_url(action='mojedb', type='movies', movie_idx=idx), listitem, True) + # Přehled filmových kolekcí + elif params.get('type') == 'movies' and params.get('collection_idx') is None and params.get('movie_idx') is None: + xbmc.log(f"Debug: Zobrazuji filmové kolekce, nalezeno {len(movies_collections)} souborů", xbmc.LOGDEBUG) + for idx, collection in enumerate(movies_collections): + data = collection['data'] + title = data.get('title') or collection['file'].replace('.json', '').replace('-', ' ').title() + xbmc.log(f"Debug: Přidávám kolekci filmů: {title}", xbmc.LOGDEBUG) + listitem = xbmcgui.ListItem(label=title) + listitem.setArt({'icon': data.get('icon', 'DefaultMovies.png')}) + xbmcplugin.addDirectoryItem(_handle, get_url(action='mojedb', type='movies', collection_idx=idx), listitem, True) + + # Výpis filmů v kolekci + elif params.get('type') == 'movies' and params.get('collection_idx') is not None and params.get('movie_idx') is None: + try: + collection_idx = int(params['collection_idx']) + collection = movies_collections[collection_idx] + movies = collection['data'].get('movies', []) + xbmc.log(f"Debug: Zobrazuji filmy v kolekci {collection['file']} (počet {len(movies)})", xbmc.LOGDEBUG) + for idx, movie in enumerate(movies): + listitem = xbmcgui.ListItem(label=movie.get('title', f'Film {idx + 1}')) + listitem.setArt({'icon': movie.get('icon', 'DefaultMovies.png')}) + xbmcplugin.addDirectoryItem( + _handle, + get_url(action='mojedb', type='movies', collection_idx=collection_idx, movie_idx=idx), + listitem, + True + ) + except (ValueError, IndexError) as e: + xbmc.log(f"Chyba při zobrazení filmové kolekce: {str(e)}", xbmc.LOGERROR) + popinfo(f"Chyba při zobrazení filmové kolekce: {str(e)}", icon=xbmcgui.NOTIFICATION_ERROR, sound=True) # Vyhledání konkrétního filmu - elif params.get('type') == 'movies' and params.get('movie_idx') is not None: - movie = dbdata['movies'][int(params['movie_idx'])] + elif params.get('type') == 'movies' and params.get('collection_idx') is not None and params.get('movie_idx') is not None: + try: + collection_idx = int(params['collection_idx']) + movie_idx = int(params['movie_idx']) + collection = movies_collections[collection_idx] + movie_list = collection['data'].get('movies', []) + movie = movie_list[movie_idx] + except (ValueError, IndexError) as e: + xbmc.log(f"Chyba při načítání filmu: {str(e)}", xbmc.LOGERROR) + popinfo(f"Chyba při načítání filmu: {str(e)}", icon=xbmcgui.NOTIFICATION_ERROR, sound=True) + xbmcplugin.endOfDirectory(_handle, updateListing=updateListing) + return + collection_icon = collection['data'].get('icon', 'DefaultMovies.png') if 'ident' in movie: if verify_ident(movie['ident'], token): # Vytvoř přehrávatelnou položku listitem = xbmcgui.ListItem(label=movie['title']) - listitem.setArt({'icon': movie.get('icon', 'DefaultMovies.png')}) + listitem.setArt({'icon': movie.get('icon', collection_icon)}) listitem.setInfo('video', {'title': movie['title']}) listitem.setProperty('IsPlayable', 'true') xbmcplugin.addDirectoryItem(_handle, get_url(action='play', ident=movie['ident'], name=movie['title']), listitem, False)