Files
addon/platformcode/backup.py
2020-10-01 20:12:31 +02:00

123 lines
4.3 KiB
Python

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Backup and restore video library
# ------------------------------------------------------------
import datetime, xbmc, os, shutil
from zipfile import ZipFile
from core import videolibrarytools, filetools
from platformcode import logger, config, platformtools, xbmc_videolibrary
from distutils.dir_util import copy_tree
from specials import videolibrary
temp_path = u'' + xbmc.translatePath("special://userdata/addon_data/plugin.video.kod/temp/")
videolibrary_temp_path = u'' + xbmc.translatePath("special://userdata/addon_data/plugin.video.kod/temp/videolibrary")
movies_path = u'' + filetools.join(videolibrary_temp_path, "movies")
tvshows_path = u'' + filetools.join(videolibrary_temp_path, "tvshows")
videolibrary_movies_path = u'' + videolibrarytools.MOVIES_PATH
videolibrary_tvshows_path = u'' + videolibrarytools.TVSHOWS_PATH
def export_videolibrary(item):
logger.info()
zip_file_folder = platformtools.dialog_browse(3, config.get_localized_string(80002))
if zip_file_folder == "":
return
zip_file = u'' + xbmc.translatePath(zip_file_folder + "KoD_video_library-" + str(datetime.date.today()) + ".zip")
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(80003))
# p_dialog.update(0)
if filetools.exists(videolibrary_temp_path):
shutil.rmtree(videolibrary_temp_path)
filetools.mkdir(videolibrary_temp_path)
p_dialog.update(25)
filetools.mkdir(movies_path)
copy_tree(videolibrary_movies_path, movies_path)
p_dialog.update(50)
filetools.mkdir(tvshows_path)
copy_tree(videolibrary_tvshows_path, tvshows_path)
p_dialog.update(75)
zip(videolibrary_temp_path, zip_file)
shutil.rmtree(temp_path)
p_dialog.update(100)
xbmc.sleep(1000)
p_dialog.close()
platformtools.dialog_notification(config.get_localized_string(20000), config.get_localized_string(80004), time=5000, sound=False)
def import_videolibrary(item):
logger.info()
zip_file = u'' + platformtools.dialog_browse(1, config.get_localized_string(80005), mask=".zip")
if zip_file == "":
return
if not platformtools.dialog_yesno(config.get_localized_string(20000), config.get_localized_string(80006)):
return
p_dialog = platformtools.dialog_progress_bg(config.get_localized_string(20000), config.get_localized_string(80007))
# p_dialog.update(0)
if filetools.exists(temp_path):
shutil.rmtree(temp_path)
filetools.mkdir(videolibrary_temp_path)
unzip(videolibrary_temp_path, zip_file)
p_dialog.update(20)
if config.is_xbmc() and config.get_setting("videolibrary_kodi"):
xbmc_videolibrary.clean()
p_dialog.update(30)
xbmc.sleep(1000)
shutil.rmtree(videolibrary_movies_path)
shutil.rmtree(videolibrary_tvshows_path)
p_dialog.update(50)
config.verify_directories_created()
if filetools.exists(movies_path):
copy_tree(movies_path, videolibrary_movies_path)
p_dialog.update(70)
if filetools.exists(tvshows_path):
copy_tree(tvshows_path, videolibrary_tvshows_path)
p_dialog.update(90)
shutil.rmtree(temp_path)
p_dialog.update(100)
xbmc.sleep(1000)
p_dialog.close()
platformtools.dialog_notification(config.get_localized_string(20000), config.get_localized_string(80008), time=5000, sound=False)
videolibrary.update_videolibrary()
if config.is_xbmc() and config.get_setting("videolibrary_kodi"):
xbmc_videolibrary.update()
def zip(dir, file):
smb = False
if file.lower().startswith('smb://'):
temp = file
file = filetools.join(temp_path, os.path.split(file)[-1])
smb = True
with ZipFile(file, "w") as zf:
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()
if smb:
filetools.move(file, temp)
def unzip(dir, file):
if file.lower().startswith('smb://'):
temp = filetools.join(temp_path, os.path.split(file)[-1])
filetools.copy(file, temp)
file = temp
with ZipFile(file, 'r') as zf:
zf.extractall(dir)