From b9b3770593b66c8826cdca3ae50b6fa9b04f5076 Mon Sep 17 00:00:00 2001 From: axlt2002 Date: Wed, 18 Mar 2020 00:25:18 +0100 Subject: [PATCH] Aggiunto esportazione ed importazione videoteca --- core/ziptools.py | 11 ++++ platformcode/platformtools.py | 6 +++ resources/settings.xml | 4 +- specials/backup.py | 97 +++++++++++++++++++++++++++++++++++ specials/setting.py | 4 +- 5 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 specials/backup.py diff --git a/core/ziptools.py b/core/ziptools.py index ad3a88e7..1154e8f7 100644 --- a/core/ziptools.py +++ b/core/ziptools.py @@ -104,3 +104,14 @@ class ziptools(object): dirs.sort() return dirs + + def zip(self, dir, file): + import os + zf = zipfile.ZipFile(file, "w", zipfile.ZIP_DEFLATED) + abs_src = os.path.abspath(dir) + for dirname, subdirs, files in os.walk(dir): + for filename in files: + absname = os.path.abspath(os.path.join(dirname, filename)) + arcname = absname[len(abs_src) + 1:] + zf.write(absname, arcname) + zf.close() \ No newline at end of file diff --git a/platformcode/platformtools.py b/platformcode/platformtools.py index 840b9113..5c98d531 100644 --- a/platformcode/platformtools.py +++ b/platformcode/platformtools.py @@ -112,6 +112,12 @@ def dialog_textviewer(heading, text): # disponible a partir de kodi 16 return xbmcgui.Dialog().textviewer(heading, text) +def dialog_browse(_type, heading, default=""): + dialog = xbmcgui.Dialog() + d = dialog.browse(_type, heading, 'files') + return d + + def itemlist_refresh(): xbmc.executebuiltin("Container.Refresh") diff --git a/resources/settings.xml b/resources/settings.xml index e666b25c..fe19a695 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -42,7 +42,9 @@ - + + + diff --git a/specials/backup.py b/specials/backup.py new file mode 100644 index 00000000..d42cc42c --- /dev/null +++ b/specials/backup.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------ +# Backup and restore video library +# ------------------------------------------------------------ + +import os, datetime + +import xbmc + +from core import ziptools, videolibrarytools, filetools +from platformcode import logger, config, platformtools, xbmc_videolibrary +from distutils.dir_util import copy_tree + +def export_videolibrary(item): + logger.info() + + temp_path = xbmc.translatePath("special://userdata/addon_data/plugin.video.kod/temp/") + movies_path = os.path.join(temp_path, "movies") + tvshows_path = os.path.join(temp_path, "tvshows") + + zip_file_folder = platformtools.dialog_browse(3, config.get_localized_string(80002)) + if zip_file_folder == "": + return + zip_file = xbmc.translatePath(zip_file_folder + "KoD_video_library-" + str(datetime.date.today()) + ".zip") + + p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(80003), config.get_localized_string(20000)) + p_dialog.update(0) + + if filetools.exists(temp_path): + filetools.rmdirtree(temp_path) + filetools.mkdir(temp_path) + p_dialog.update(25) + filetools.mkdir(movies_path) + copy_tree(videolibrarytools.MOVIES_PATH, movies_path) + p_dialog.update(50) + filetools.mkdir(tvshows_path) + copy_tree(videolibrarytools.TVSHOWS_PATH, tvshows_path) + p_dialog.update(75) + + zipper = ziptools.ziptools() + zipper.zip(temp_path, zip_file) + + filetools.rmdirtree(temp_path) + + p_dialog.update(100) + xbmc.sleep(2000) + p_dialog.close() + platformtools.dialog_notification(config.get_localized_string(20000), config.get_localized_string(80004), icon=3, time=5000, sound=False) + +def import_videolibrary(item): + logger.info() + + zip_file = platformtools.dialog_browse(1, config.get_localized_string(80005)) + if zip_file == "": + return + if not platformtools.dialog_yesno(config.get_localized_string(20000), config.get_localized_string(80006)): + return + + temp_path = xbmc.translatePath("special://userdata/addon_data/plugin.video.kod/temp/") + + p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(80007), config.get_localized_string(20000)) + p_dialog.update(0) + + if filetools.exists(temp_path): + filetools.rmdirtree(temp_path) + filetools.mkdir(temp_path) + + unzipper = ziptools.ziptools() + unzipper.extract(zip_file, temp_path) + p_dialog.update(25) + + filetools.rmdirtree(videolibrarytools.VIDEOLIBRARY_PATH) + p_dialog.update(50) + if config.is_xbmc() and config.get_setting("videolibrary_kodi") == True: + xbmc.sleep(5000) + xbmc_videolibrary.clean() + + config.verify_directories_created() + if filetools.exists(temp_path + "movies"): + copy_tree(temp_path + "movies", videolibrarytools.MOVIES_PATH) + p_dialog.update(70) + if filetools.exists(temp_path + "tvshows"): + copy_tree(temp_path + "tvshows", videolibrarytools.TVSHOWS_PATH) + p_dialog.update(90) + filetools.rmdirtree(temp_path) + + p_dialog.update(100) + xbmc.sleep(2000) + p_dialog.close() + platformtools.dialog_notification(config.get_localized_string(20000), config.get_localized_string(80008), icon=3, time=5000, sound=False) + + if platformtools.dialog_yesno(config.get_localized_string(20000), config.get_localized_string(80009)): + import videolibrary_service + videolibrary_service.check_for_update(overwrite=True) + + if config.is_xbmc() and config.get_setting("videolibrary_kodi") == True: + xbmc_videolibrary.update() \ No newline at end of file diff --git a/specials/setting.py b/specials/setting.py index 782b582f..5242dd42 100644 --- a/specials/setting.py +++ b/specials/setting.py @@ -445,7 +445,7 @@ def submenu_tools(item): thumbnail=get_thumb("setting_0.png"))) itemlist.append(Item(channel=CHANNELNAME, title=config.get_localized_string(60566) + ":", action="", folder=False, text_bold=True, thumbnail=get_thumb("videolibrary.png"))) - itemlist.append(Item(channel=CHANNELNAME, action="overwrite_tools", folder=False, + itemlist.append(Item(channel=CHANNELNAME, action="restore_tools", folder=False, thumbnail=get_thumb("videolibrary.png"), title="- " + config.get_localized_string(60567))) itemlist.append(Item(channel="videolibrary", action="update_videolibrary", folder=False, @@ -795,7 +795,7 @@ def channel_status(item, dict_values): platformtools.dialog_notification(config.get_localized_string(60579), config.get_localized_string(60580)) -def overwrite_tools(item): +def restore_tools(item): import videolibrary_service from core import videolibrarytools import os