diff --git a/default.py b/default.py
index ba611fe6..a2fc79bc 100644
--- a/default.py
+++ b/default.py
@@ -95,7 +95,8 @@ class Main(object):
'refreshplaylist': entrypoint.refreshPlaylist,
'deviceid': entrypoint.resetDeviceId,
'delete': entrypoint.deleteItem,
- 'connect': entrypoint.emby_connect
+ 'connect': entrypoint.emby_connect,
+ 'backup': entrypoint.emby_backup
}
if mode in modes:
# Simple functions
diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml
index d15ccde0..80bb6e13 100644
--- a/resources/language/English/strings.xml
+++ b/resources/language/English/strings.xml
@@ -342,5 +342,10 @@
Remove all cached artwork?
Reset all Emby add-on settings?
Database reset has completed, Kodi will now restart to apply the changes.
+ Enter folder name for backup
+ Replace existing backup?
+ Create backup at:
+ Create a backup
+ Backup folder
\ No newline at end of file
diff --git a/resources/lib/entrypoint.py b/resources/lib/entrypoint.py
index 839e19de..6a14a008 100644
--- a/resources/lib/entrypoint.py
+++ b/resources/lib/entrypoint.py
@@ -5,6 +5,7 @@
import json
import logging
import os
+import shutil
import sys
import urlparse
@@ -112,6 +113,9 @@ def doMainListing():
addDirectoryItem(lang(33058), "plugin://plugin.video.emby/?mode=reset")
addDirectoryItem(lang(33059), "plugin://plugin.video.emby/?mode=texturecache")
addDirectoryItem(lang(33060), "plugin://plugin.video.emby/?mode=thememedia")
+
+ if settings('backupPath'):
+ addDirectoryItem(lang(33092), "plugin://plugin.video.emby/?mode=backup")
xbmcplugin.endOfDirectory(int(sys.argv[1]))
@@ -135,6 +139,50 @@ def emby_connect():
settings('connectUsername', value=username)
+def emby_backup():
+ # Create a backup at specified location
+ path = settings('backupPath')
+
+ # filename
+ default_value = "Kodi%s.%s" % (xbmc.getInfoLabel('System.BuildVersion')[:2],
+ xbmc.getInfoLabel('System.Date(dd-mm-yy)'))
+ filename = dialog(type_="input",
+ heading=lang(33089),
+ defaultt=default_value)
+ if not filename:
+ return
+
+ backup = os.path.join(path, filename)
+ log.info("Backup: %s", backup)
+
+ # Create directory
+ if xbmcvfs.exists(backup+"\\"):
+ log.info("Existing directory!")
+ if not dialog(type_="yesno",
+ heading="{emby}",
+ line1=lang(33090)):
+ return emby_backup()
+ shutil.rmtree(backup)
+
+ # Addon_data
+ shutil.copytree(src=xbmc.translatePath(
+ "special://profile/addon_data/plugin.video.emby").decode('utf-8'),
+ dst=os.path.join(backup, "addon_data", "plugin.video.emby"))
+
+ # Database files
+ xbmcvfs.mkdir(os.path.join(backup, "Database"))
+
+ shutil.copy(src=utils.getKodiVideoDBPath(),
+ dst=os.path.join(backup, "Database"))
+
+ if settings('enableMusic') == "true":
+ shutil.copy(src=utils.getKodiMusicDBPath(),
+ dst=os.path.join(backup, "Database"))
+
+ dialog(type_="ok",
+ heading="{emby}",
+ line1="%s: %s" % (lang(33091), backup))
+
##### Generate a new deviceId
def resetDeviceId():
diff --git a/resources/lib/utils.py b/resources/lib/utils.py
index 7a975ea7..b1850682 100644
--- a/resources/lib/utils.py
+++ b/resources/lib/utils.py
@@ -50,7 +50,7 @@ def language(string_id):
# Central string retrieval - unicode
return xbmcaddon.Addon(id='plugin.video.emby').getLocalizedString(string_id)
-def dialog(type_, **kwargs):
+def dialog(type_, *args, **kwargs):
d = xbmcgui.Dialog()
@@ -68,7 +68,7 @@ def dialog(type_, **kwargs):
'select': d.select,
'numeric': d.numeric
}
- return types[type_](**kwargs)
+ return types[type_](*args, **kwargs)
class JSONRPC(object):
diff --git a/resources/settings.xml b/resources/settings.xml
index 7eae30e8..61d3a542 100644
--- a/resources/settings.xml
+++ b/resources/settings.xml
@@ -80,5 +80,7 @@
+
+