-
Notifications
You must be signed in to change notification settings - Fork 2
/
KolConfigsManager.py
125 lines (103 loc) · 4.24 KB
/
KolConfigsManager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# -------------------------------------------------------------------------------
# ------------------------- Profile Manager ----------------------------------
# -------------------------------------------------------------------------------
from aqt import mw
from kol.src.utils import log
class KolConfig():
def __init__(self,
profileName="DEFAULT",
kanjiDeckName="",
kanjiExpression="",
kanjiKeyword="",
kanjiOnYomi="",
kanjiOnYomiEnabled=True,
kanjiKunYomi="",
kanjiKunYomiEnabled=True,
kanjiMemoStory="",
kanjiMemoStoryEnabled=False,
kanjiCustomProfileEnabled=False,
kanjiDisplayWithFuriganaMod=True,
kanjiLoadDefaultValuesForNonExistingValues=False,
kanjiShowColorsForKnownKanji=True,
kanjiUseLink=False,
kanjiUseLinkUrl=""):
self.profileName = profileName
self.kanjiCustomProfileEnabled = kanjiCustomProfileEnabled
self.kanjiDeckName = kanjiDeckName
self.kanjiExpression = kanjiExpression
self.kanjiKeyword = kanjiKeyword
self.kanjiOnYomi = kanjiOnYomi
self.kanjiOnYomiEnabled = kanjiOnYomiEnabled
self.kanjiKunYomi = kanjiKunYomi
self.kanjiKunYomiEnabled = kanjiKunYomiEnabled
self.kanjiMemoStory = kanjiMemoStory
self.kanjiMemoStoryEnabled = kanjiMemoStoryEnabled
self.kanjiDisplayWithFuriganaMod = kanjiDisplayWithFuriganaMod
self.kanjiLoadDefaultValuesForNonExistingValues = kanjiLoadDefaultValuesForNonExistingValues
self.kanjiShowColorsForKnownKanji = kanjiShowColorsForKnownKanji
self.kanjiUseLink = kanjiUseLink
self.kanjiUseLinkUrl = kanjiUseLinkUrl
@staticmethod
def createFromDict(data):
self = KolConfig()
self.__dict__.update(data)
return self
def toDict(self):
return self.__dict__
class KolConfigs:
VERSION = 5
def __init__(self, version = None, profiles = None):
self.version = version if version != None else KolConfigs.VERSION
self.allProfiles = self.createFromProfiles(profiles) if profiles else dict()
def createFromProfiles(self, profiles):
allProfiles = dict()
for profilesName, profilesValue in profiles.items():
allProfiles[profilesName] = KolConfig.createFromDict(profilesValue)
return allProfiles
def update(self, newProfile):
self.allProfiles.update({newProfile.profileName: newProfile})
def get(self, name):
if name in self.allProfiles:
return self.allProfiles[name]
return None
def toDict(self):
profiles = dict()
for profilesName, profilesValue in self.allProfiles.items():
profiles[profilesName] = profilesValue.__dict__
return {
'profiles': profiles,
'version': self.version
}
class KolConfigsManager:
__instance = None
@staticmethod
def getInstance():
if KolConfigsManager.__instance == None:
KolConfigsManager.__instance = KolConfigsManager()
return KolConfigsManager.__instance
def __init__(self):
kolConfigs = None
try:
kolConfigs = self.__loadConfigsFromFs()
except:
log("Warning: An error occured when loading config")
if kolConfigs == None:
kolConfigs = KolConfigs()
self.kolConfigs = kolConfigs
def save(self):
config = self.kolConfigs.toDict()
mw.addonManager.writeConfig(__name__, config)
def getProfileByName(self, profileName):
kolConfigs = self.kolConfigs
profile = kolConfigs.get(profileName)
if profile == None:
profile = self.__addNewProfile(profileName)
return profile
def __loadConfigsFromFs(self):
config = mw.addonManager.getConfig(__name__)
kolConfigs = KolConfigs(profiles=config['profiles'], version=config['version'])
return kolConfigs
def __addNewProfile(self, profilename):
newProfile = KolConfig(profileName=profilename)
self.kolConfigs.update(newProfile)
return newProfile