# -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- import json import os import locale from util import Singleton, curr_directory from wrapper.toxcore_enums_and_consts import * global LOG import logging LOG = logging.getLogger(__name__) class Settings(Singleton, dict): def __init__(self): self.path = os.path.join(curr_directory(), 'settings.json') if os.path.isfile(self.path): with open(self.path) as fl: data = fl.read() super(self.__class__, self).__init__(json.loads(data)) else: super(self.__class__, self).__init__(Settings.get_default_settings()) self['read'] = list(map(lambda x: x[:TOX_PUBLIC_KEY_SIZE * 2], set(self['read']))) self['write'] = list(map(lambda x: x[:TOX_PUBLIC_KEY_SIZE * 2], set(self['write']))) self['delete'] = list(map(lambda x: x[:TOX_PUBLIC_KEY_SIZE * 2], set(self['delete']))) self['master'] = list(map(lambda x: x[:TOX_PUBLIC_KEY_SIZE * 2], set(self['master']))) if self['folder'][-1] == '/' or self['folder'][-1] == '\\': self['folder'] = self['folder'][:-1] self.save() @staticmethod def get_default_settings(): return { 'read': [], 'write': [], 'delete': [], 'master': [], 'folder': curr_directory(), 'folder_save': curr_directory(), 'auto_rights': 'r', 'size': 500 } def save(self): LOG.debug('Saving') text = json.dumps(self) with open(self.path, 'w') as fl: fl.write(text) class ProfileHelper(object): """ Class with static methods for search, load and save profiles """ @staticmethod def open_profile(path): ProfileHelper._path = path with open(ProfileHelper._path, 'rb') as fl: data = fl.read() if data: return data else: raise IOError('Save file has zero size!') @staticmethod def save_profile(data): with open(ProfileHelper._path, 'wb') as fl: fl.write(data)