86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
|
|
Copyright (C) 2018-2018 plugin.video.youtube
|
|
|
|
SPDX-License-Identifier: GPL-2.0-only
|
|
See LICENSES/GPL-2.0-only for more information.
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
from copy import deepcopy
|
|
|
|
import xbmcaddon
|
|
import xbmcvfs
|
|
import xbmc
|
|
|
|
from .. import logger
|
|
|
|
try:
|
|
xbmc.translatePath = xbmcvfs.translatePath
|
|
except AttributeError:
|
|
pass
|
|
|
|
|
|
class JSONStore(object):
|
|
def __init__(self, filename):
|
|
addon_id = 'plugin.video.youtube'
|
|
addon = xbmcaddon.Addon(addon_id)
|
|
|
|
try:
|
|
self.base_path = xbmc.translatePath(addon.getAddonInfo('profile')).decode('utf-8')
|
|
except AttributeError:
|
|
self.base_path = xbmc.translatePath(addon.getAddonInfo('profile'))
|
|
|
|
self.filename = os.path.join(self.base_path, filename)
|
|
|
|
self._data = None
|
|
self.load()
|
|
self.set_defaults()
|
|
|
|
def set_defaults(self):
|
|
raise NotImplementedError
|
|
|
|
def save(self, data):
|
|
if data != self._data:
|
|
self._data = deepcopy(data)
|
|
if not xbmcvfs.exists(self.base_path):
|
|
if not self.make_dirs(self.base_path):
|
|
logger.log_debug('JSONStore Save |{filename}| failed to create directories.'.format(filename=self.filename.encode("utf-8")))
|
|
return
|
|
with open(self.filename, 'w') as jsonfile:
|
|
logger.log_debug('JSONStore Save |{filename}|'.format(filename=self.filename.encode("utf-8")))
|
|
json.dump(self._data, jsonfile, indent=4, sort_keys=True)
|
|
|
|
def load(self):
|
|
if xbmcvfs.exists(self.filename):
|
|
with open(self.filename, 'r') as jsonfile:
|
|
data = json.load(jsonfile)
|
|
self._data = data
|
|
logger.log_debug('JSONStore Load |{filename}|'.format(filename=self.filename.encode("utf-8")))
|
|
else:
|
|
self._data = dict()
|
|
|
|
def get_data(self):
|
|
return deepcopy(self._data)
|
|
|
|
@staticmethod
|
|
def make_dirs(path):
|
|
if not path.endswith('/'):
|
|
path = ''.join([path, '/'])
|
|
path = xbmc.translatePath(path)
|
|
if not xbmcvfs.exists(path):
|
|
try:
|
|
_ = xbmcvfs.mkdirs(path)
|
|
except:
|
|
pass
|
|
if not xbmcvfs.exists(path):
|
|
try:
|
|
os.makedirs(path)
|
|
except:
|
|
pass
|
|
return xbmcvfs.exists(path)
|
|
|
|
return True
|