Přidání načítání a zobrazení filmových kolekcí z JSON souborů, včetně vylepšeného logování a chybové správy.

This commit is contained in:
2025-09-24 11:56:03 +02:00
parent bcb28c32c9
commit 4780e2964c

View File

@@ -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)