2019-11-25 22:48:42 +01:00
|
|
|
import xbmcgui
|
2021-04-01 22:33:38 +02:00
|
|
|
import xbmcvfs
|
2019-08-26 22:40:15 +02:00
|
|
|
import resources.lib.utils as utils
|
|
|
|
from resources.lib.backup import XbmcBackup
|
2021-04-01 22:33:38 +02:00
|
|
|
from resources.lib.authorizers import DropboxAuthorizer
|
|
|
|
from resources.lib.advanced_editor import AdvancedBackupEditor
|
|
|
|
|
|
|
|
# mode constants
|
|
|
|
BACKUP = 0
|
|
|
|
RESTORE = 1
|
|
|
|
SETTINGS = 2
|
|
|
|
ADVANCED_EDITOR = 3
|
|
|
|
LAUNCHER = 4
|
|
|
|
|
|
|
|
|
|
|
|
def authorize_cloud(cloudProvider):
|
2021-07-06 15:48:05 +02:00
|
|
|
# dropbox
|
2021-04-01 22:33:38 +02:00
|
|
|
if(cloudProvider == 'dropbox'):
|
|
|
|
authorizer = DropboxAuthorizer()
|
|
|
|
|
|
|
|
if(authorizer.authorize()):
|
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010), '%s %s' % (utils.getString(30027), utils.getString(30106)))
|
|
|
|
else:
|
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010), '%s %s' % (utils.getString(30107), utils.getString(30027)))
|
|
|
|
|
|
|
|
|
|
|
|
def remove_auth():
|
|
|
|
# triggered from settings.xml - asks if user wants to delete OAuth token information
|
2021-07-06 15:48:05 +02:00
|
|
|
shouldDelete = xbmcgui.Dialog().yesno(utils.getString(30093), '%s\n%s' % (utils.getString(30094), utils.getString(30095)), autoclose=7000)
|
2021-04-01 22:33:38 +02:00
|
|
|
|
|
|
|
if(shouldDelete):
|
|
|
|
# delete any of the known token file types
|
|
|
|
xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + "tokens.txt")) # dropbox
|
|
|
|
xbmcvfs.delete(xbmcvfs.translatePath(utils.data_dir() + "google_drive.dat")) # google drive
|
2019-08-26 22:40:15 +02:00
|
|
|
|
2019-11-25 22:56:59 +01:00
|
|
|
|
2019-08-26 22:40:15 +02:00
|
|
|
def get_params():
|
|
|
|
param = {}
|
2019-08-27 22:04:30 +02:00
|
|
|
try:
|
2019-08-26 22:40:15 +02:00
|
|
|
for i in sys.argv:
|
|
|
|
args = i
|
2019-08-27 22:04:30 +02:00
|
|
|
if('=' in args):
|
|
|
|
if(args.startswith('?')):
|
2019-11-26 17:43:38 +01:00
|
|
|
args = args[1:] # legacy in case of url params
|
2019-08-27 22:04:30 +02:00
|
|
|
splitString = args.split('=')
|
2021-04-01 22:33:38 +02:00
|
|
|
utils.log(splitString[1])
|
2019-08-27 22:04:30 +02:00
|
|
|
param[splitString[0]] = splitString[1]
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
2019-08-26 22:40:15 +02:00
|
|
|
return param
|
|
|
|
|
2019-11-25 22:56:59 +01:00
|
|
|
|
2019-11-25 22:19:57 +01:00
|
|
|
# the program mode
|
2019-08-26 22:40:15 +02:00
|
|
|
mode = -1
|
|
|
|
params = get_params()
|
|
|
|
|
|
|
|
if("mode" in params):
|
|
|
|
if(params['mode'] == 'backup'):
|
2021-04-01 22:33:38 +02:00
|
|
|
mode = BACKUP
|
2019-08-26 22:40:15 +02:00
|
|
|
elif(params['mode'] == 'restore'):
|
2021-04-01 22:33:38 +02:00
|
|
|
mode = RESTORE
|
|
|
|
elif(params['mode'] == 'launcher'):
|
|
|
|
mode = LAUNCHER
|
2019-08-26 22:40:15 +02:00
|
|
|
|
2019-11-25 22:19:57 +01:00
|
|
|
# if mode wasn't passed in as arg, get from user
|
2019-08-26 22:40:15 +02:00
|
|
|
if(mode == -1):
|
2019-11-25 22:19:57 +01:00
|
|
|
# by default, Backup,Restore,Open Settings
|
2019-11-25 22:45:41 +01:00
|
|
|
options = [utils.getString(30016), utils.getString(30017), utils.getString(30099)]
|
2019-11-25 22:33:34 +01:00
|
|
|
|
2019-11-25 22:19:57 +01:00
|
|
|
# find out if we're using the advanced editor
|
2019-11-27 21:19:41 +01:00
|
|
|
if(utils.getSettingInt('backup_selection_type') == 1):
|
2019-08-26 22:40:15 +02:00
|
|
|
options.append(utils.getString(30125))
|
|
|
|
|
2019-11-25 22:19:57 +01:00
|
|
|
# figure out if this is a backup or a restore from the user
|
2019-11-25 22:45:41 +01:00
|
|
|
mode = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30023), options)
|
2019-08-26 22:40:15 +02:00
|
|
|
|
2021-07-06 16:01:14 +02:00
|
|
|
# check which mode should be run
|
2019-08-26 22:40:15 +02:00
|
|
|
if(mode != -1):
|
|
|
|
|
2021-04-01 22:33:38 +02:00
|
|
|
if(mode == SETTINGS):
|
2019-11-25 22:19:57 +01:00
|
|
|
# open the settings dialog
|
2019-08-26 22:40:15 +02:00
|
|
|
utils.openSettings()
|
2021-04-01 22:33:38 +02:00
|
|
|
elif(mode == ADVANCED_EDITOR and utils.getSettingInt('backup_selection_type') == 1):
|
|
|
|
# open the advanced editor but only if in advanced mode
|
|
|
|
editor = AdvancedBackupEditor()
|
|
|
|
editor.showMainScreen()
|
|
|
|
elif(mode == LAUNCHER):
|
|
|
|
# copied from old launcher.py
|
|
|
|
if(params['action'] == 'authorize_cloud'):
|
|
|
|
authorize_cloud(params['provider'])
|
|
|
|
elif(params['action'] == 'remove_auth'):
|
|
|
|
remove_auth()
|
|
|
|
elif(params['action'] == 'advanced_editor'):
|
|
|
|
editor = AdvancedBackupEditor()
|
|
|
|
editor.showMainScreen()
|
|
|
|
elif(params['action'] == 'advanced_copy_config'):
|
|
|
|
editor = AdvancedBackupEditor()
|
|
|
|
editor.copySimpleConfig()
|
|
|
|
|
2021-07-06 16:01:14 +02:00
|
|
|
elif(mode == BACKUP or mode == RESTORE):
|
|
|
|
backup = XbmcBackup()
|
|
|
|
|
2021-04-01 22:33:38 +02:00
|
|
|
# if mode was RESTORE
|
2021-07-06 16:01:14 +02:00
|
|
|
if(mode == RESTORE and backup.remoteConfigured()):
|
2019-11-25 22:19:57 +01:00
|
|
|
# get list of valid restore points
|
2019-08-26 22:40:15 +02:00
|
|
|
restorePoints = backup.listBackups()
|
|
|
|
pointNames = []
|
|
|
|
folderNames = []
|
2019-11-25 22:33:34 +01:00
|
|
|
|
2019-08-26 22:40:15 +02:00
|
|
|
for aDir in restorePoints:
|
|
|
|
pointNames.append(aDir[1])
|
|
|
|
folderNames.append(aDir[0])
|
|
|
|
|
|
|
|
selectedRestore = -1
|
|
|
|
|
|
|
|
if("archive" in params):
|
2019-11-25 22:19:57 +01:00
|
|
|
# check that the user give archive exists
|
2019-08-26 22:40:15 +02:00
|
|
|
if(params['archive'] in folderNames):
|
2019-11-25 22:19:57 +01:00
|
|
|
# set the index
|
2019-08-26 22:40:15 +02:00
|
|
|
selectedRestore = folderNames.index(params['archive'])
|
|
|
|
utils.log(str(selectedRestore) + " : " + params['archive'])
|
|
|
|
else:
|
|
|
|
utils.showNotification(utils.getString(30045))
|
|
|
|
utils.log(params['archive'] + ' is not a valid restore point')
|
|
|
|
else:
|
2019-11-25 22:19:57 +01:00
|
|
|
# allow user to select the backup to restore from
|
2019-11-25 22:45:41 +01:00
|
|
|
selectedRestore = xbmcgui.Dialog().select(utils.getString(30010) + " - " + utils.getString(30021), pointNames)
|
2019-08-26 22:40:15 +02:00
|
|
|
|
|
|
|
if(selectedRestore != -1):
|
|
|
|
backup.selectRestore(restorePoints[selectedRestore][0])
|
2019-11-25 22:33:34 +01:00
|
|
|
|
2019-08-26 22:40:15 +02:00
|
|
|
if('sets' in params):
|
|
|
|
backup.restore(selectedSets=params['sets'].split('|'))
|
|
|
|
else:
|
|
|
|
backup.restore()
|
2021-07-06 16:01:14 +02:00
|
|
|
elif(mode == BACKUP and backup.remoteConfigured()):
|
2021-04-01 22:33:38 +02:00
|
|
|
# mode was BACKUP
|
2019-08-26 22:40:15 +02:00
|
|
|
backup.backup()
|
2021-07-06 16:01:14 +02:00
|
|
|
else:
|
|
|
|
# can't go any further
|
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010), utils.getString(30045))
|
|
|
|
utils.openSettings()
|
2019-08-26 22:40:15 +02:00
|
|
|
else:
|
2021-07-06 16:01:14 +02:00
|
|
|
xbmcgui.Dialog().ok(utils.getString(30010), "%s %s" % (utils.getString(30159), params['mode']))
|