1+ from staticflags import *
2+ import random
3+ import json
4+ import gzip
5+
6+ def compatibilize_appdata (data :dict ) -> dict :
7+ """This function ensures that appdata is brought up to the latest version. It is compatible to the beginning."""
8+ try :
9+ cver = data ["version" ]
10+ except :
11+ data ["version" ] = APP_APPDATA_VERSION
12+
13+ if not "language" in data :
14+ data ["language" ] = None
15+
16+ if not "settings" in data :
17+ data ["settings" ] = {
18+
19+ "transitions" :{
20+ "display" : "Show Transitions?" ,
21+ "type" : "bool" ,
22+ "value" : True
23+ },
24+ "oldmenu" :{
25+ "name" : "oldmenu" ,
26+ "display" : "Use legacy style menus?" ,
27+ "type" : "bool" ,
28+ "value" : False
29+ }
30+ }
31+ elif type (data ["settings" ]) == list :
32+ #Update data
33+ data ["settings" ] = {
34+
35+ "transitions" :{
36+ "display" : "Show Transitions?" ,
37+ "type" : "bool" ,
38+ "value" : data ["settings" ][1 ]["value" ]
39+ },
40+ "oldmenu" :{
41+ "name" : "oldmenu" ,
42+ "display" : "Use legacy style menus?" ,
43+ "type" : "bool" ,
44+ "value" : data ["settings" ][2 ]["value" ]
45+ }
46+
47+ }
48+ if not "showprog" in data ["settings" ]:
49+ data ["settings" ]["showprog" ] = {
50+ "name" : "showprog" ,
51+ "display" : "Show progress bar startup?" ,
52+ "type" : "bool" ,
53+ "value" :False
54+ }
55+ if not "editor" in data ["settings" ]:
56+ data ["settings" ]["editor" ] = {
57+ "name" : "editor" ,
58+ "display" : "Text Editor" ,
59+ "type" : "str" ,
60+ "value" : "/usr/bin/editor %s"
61+ }
62+ if not "autoupdate" in data ["settings" ]:
63+ data ["settings" ]["autoupdate" ] = {
64+ "name" :"autoupdate" ,
65+ "display" :"Update automatically" ,
66+ "type" :"bool" ,
67+ "value" :True
68+ }
69+
70+ if not "idata" in data :
71+ data ["idata" ] = {
72+ "MOTD" : "No Message Yet" ,
73+ "dead" : {
74+ "active" : False ,
75+ "message" : "N/A"
76+ }
77+ }
78+ svri = 0
79+ for svr in data ["servers" ]:
80+ if type (svr ) is not dict :
81+ del svr
82+ continue #I don't know how this happened
83+ if not "id" in svr :
84+ data ["servers" ][svri ]["id" ] = random .randint (1111 ,9999 )
85+ if not "settings" in svr :
86+ data ["servers" ][svri ]["settings" ] = {}#New empty settings
87+ if data ["servers" ][svri ]["settings" ] == {}:
88+ data ["servers" ][svri ]["settings" ] = {"launchcommands" :[],"exitcommands" :[]}
89+ if not "legacy" in data ["servers" ][svri ]["settings" ]:
90+ data ['servers' ][svri ]["settings" ]["legacy" ] = True
91+ if not "backupdir" in svr :
92+ data ['servers' ][svri ]["backupdir" ] = SERVERS_BACKUP_DIR + os .sep + str (data ['servers' ][svri ]["id" ])
93+ if data ["servers" ][svri ]["software" ] == 0 :
94+ data ["servers" ][svri ]["software" ] = 5 #v1.48
95+
96+ #1.49.1
97+ if not "flags" in svr ["settings" ]:
98+ data ["servers" ][svri ]["settings" ]["flags" ] = ""
99+
100+ svri += 1
101+
102+ svk = 0
103+ for ji in data ["javainstalls" ]:
104+ data ["javainstalls" ][svk ] = {"path" :ji ["path" ].replace ("\\ " ,"/" ).replace ("//" ,"/" ),"ver" :ji ["ver" ]}
105+
106+ svk += 1
107+ if not "license" in data :
108+ data ["license" ] = False
109+
110+ if not "backupprofiles" in data :
111+ #Works with glob
112+ data ["backupprofiles" ] = {
113+ "everything" : {
114+ "include" : [
115+ "#SD/**"
116+ ],
117+ "exclude" : [
118+
119+ ]
120+ }
121+ }
122+
123+ #1.49
124+ if not "reswarn" in data ["settings" ]:
125+ data ["settings" ]["reswarn" ] = {
126+ "name" :"reswarn" ,
127+ "display" : "Give warnings for high-resource operations" ,
128+ "type" : "bool" ,
129+ "value" : True
130+ }
131+
132+ #1.53
133+ if "pkd" in data :
134+ del data ["productKey" ]
135+ del data ["pkd" ]
136+
137+ return data
138+
139+ __DEFAULTAPPDATA__ = {
140+ "servers" : [
141+
142+ ],
143+ "hasCompletedOOBE" : False ,
144+ "version" : APP_APPDATA_VERSION ,
145+ "javainstalls" : [
146+
147+ ],
148+
149+ "settings" : {
150+ "transitions" :{
151+ "display" : "Show Transitions?" ,
152+ "type" : "bool" ,
153+ "value" : False
154+ },
155+ "oldmenu" :{
156+ "name" : "oldmenu" ,
157+ "display" : "Use legacy style menus?" ,
158+ "type" : "bool" ,
159+ "value" : False
160+ },
161+ "showprog" : {
162+ "name" : "showprog" ,
163+ "display" : "Show progress bar on startup?" ,
164+ "type" : "bool" ,
165+ "value" : False
166+ },
167+ "reswarn" : {
168+ "name" :"reswarn" ,
169+ "display" : "Give warnings for high-resource operations" ,
170+ "type" : "bool" ,
171+ "value" : True
172+ }
173+ },
174+ "idata" : {
175+ "MOTD" : "No Message Yet" ,
176+ "dead" : {
177+ "active" : False ,
178+ "message" : "N/A"
179+ }
180+ },
181+ "license" : False ,
182+ "language" : None
183+ }
184+
185+ UUID_INDEX :dict = {}
186+
187+ def setup_appdata ():
188+ global APPDATA
189+ global APPDATAFILE
190+ global UUIDFILE
191+ global UUID_INDEX
192+ APPDATAFILE = APPDATADIR + "/config.json"
193+ if not os .path .isfile (APPDATAFILE ):
194+ with open (APPDATAFILE ,"w+" ) as f :
195+ f .write (json .dumps (__DEFAULTAPPDATA__ ))
196+ APPDATA = __DEFAULTAPPDATA__
197+ else :
198+ try :
199+ with open (APPDATAFILE ) as f :
200+ APPDATA = json .load (f )
201+ except :
202+ with open (APPDATAFILE ,"w+" ) as f :
203+ f .write (json .dumps (__DEFAULTAPPDATA__ ))
204+ APPDATA = __DEFAULTAPPDATA__
205+ APPDATA = compatibilize_appdata (APPDATA )
206+
207+ UUIDFILE = APPDATADIR + "/uuidindex.json.gz"
208+
209+ if not os .path .isfile (UUIDFILE ):
210+ with open (UUIDFILE ,"wb+" ) as f :
211+ f .write (gzip .compress (json .dumps ({}).encode ()))
212+ else :
213+ try :
214+ with open (UUIDFILE ,"rb" ) as f :
215+ UUID_INDEX = json .loads (gzip .decompress (f .read ()))
216+ except :
217+ with open (UUIDFILE ,"wb+" ) as f :
218+ f .write (gzip .compress (json .dumps ({}).encode ()))
219+
220+ def updateappdata ():
221+
222+ global APPDATAFILE
223+ global UUID_INDEX
224+ global UUIDFILE
225+ with open (APPDATAFILE ,"w+" ) as f :
226+ f .write (json .dumps (APPDATA ,indent = 2 ))
227+ with open (UUIDFILE ,"wb+" ) as f :
228+ f .write (gzip .compress (json .dumps (UUID_INDEX ).encode ()))#Write compressed file
0 commit comments