Skip to content

Commit 63a22fa

Browse files
Wrappers: refactor method names
1 parent f4f8038 commit 63a22fa

File tree

4 files changed

+75
-71
lines changed

4 files changed

+75
-71
lines changed

rare/components/tabs/settings/widgets/proton.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def showEvent(self, a0: QShowEvent) -> None:
6262
self.tool_combo.addItem(tool.name, tool)
6363
try:
6464
wrapper = next(
65-
filter(lambda w: w.is_compat_tool, self.wrappers.get_game_wrapper_list(self.app_name))
65+
filter(lambda w: w.is_compat_tool, self.wrappers.get_wrappers(self.app_name))
6666
)
6767
self.tool_wrapper = wrapper
6868
tool = next(filter(lambda t: t.checksum == wrapper.checksum, tools))
@@ -88,7 +88,7 @@ def __on_proton_changed(self, index):
8888
config.save_envvar(self.app_name, key, value)
8989
self.environ_changed.emit(key)
9090

91-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
91+
wrappers = self.wrappers.get_wrappers(self.app_name)
9292
if self.tool_wrapper and self.tool_wrapper in wrappers:
9393
wrappers.remove(self.tool_wrapper)
9494
if steam_tool is None:
@@ -99,7 +99,7 @@ def __on_proton_changed(self, index):
9999
)
100100
wrappers.append(wrapper)
101101
self.tool_wrapper = wrapper
102-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
102+
self.wrappers.set_wrappers(self.app_name, wrappers)
103103

104104
self.tool_prefix.setEnabled(steam_tool is not None)
105105
if steam_tool:

rare/components/tabs/settings/widgets/wrappers.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,10 @@ def showEvent(self, a0: QShowEvent):
278278
@Slot(QWidget, int)
279279
def __on_order_changed(self, widget: WrapperWidget, new_index: int):
280280
wrapper = widget.data()
281-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
281+
wrappers = self.wrappers.get_wrappers(self.app_name)
282282
wrappers.remove(wrapper)
283283
wrappers.insert(new_index, wrapper)
284-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
284+
self.wrappers.set_wrappers(self.app_name, wrappers)
285285

286286
@Slot()
287287
def __on_add(self) -> None:
@@ -308,12 +308,12 @@ def __add_wrapper(self, wrapper: Wrapper, position: int = -1):
308308
widget.delete_wrapper.connect(self.__delete_wrapper)
309309

310310
def add_wrapper(self, wrapper: Wrapper, position: int = -1):
311-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
311+
wrappers = self.wrappers.get_wrappers(self.app_name)
312312
if position < 0 or wrapper.is_compat_tool:
313313
wrappers.append(wrapper)
314314
else:
315315
wrappers.insert(position, wrapper)
316-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
316+
self.wrappers.set_wrappers(self.app_name, wrappers)
317317
self.__add_wrapper(wrapper, position)
318318

319319
def add_user_wrapper(self, wrapper: Wrapper, position: int = -1):
@@ -330,7 +330,7 @@ def add_user_wrapper(self, wrapper: Wrapper, position: int = -1):
330330
)
331331
return
332332

333-
if wrapper.checksum in self.wrappers.get_game_csum_list(self.app_name):
333+
if wrapper.checksum in self.wrappers.get_checksums(self.app_name):
334334
QMessageBox.warning(
335335
self,
336336
self.tr("Warning"),
@@ -353,35 +353,35 @@ def add_user_wrapper(self, wrapper: Wrapper, position: int = -1):
353353

354354
@Slot(object)
355355
def __disable_wrapper(self, wrapper: Wrapper):
356-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
356+
wrappers = self.wrappers.get_wrappers(self.app_name)
357357
index = wrappers.index(wrapper)
358358
wrappers.remove(wrapper)
359359
wrappers.insert(index, wrapper)
360-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
360+
self.wrappers.set_wrappers(self.app_name, wrappers)
361361
self.__add_wrapper(wrapper, index)
362362

363363
@Slot(object)
364364
def __delete_wrapper(self, wrapper: Wrapper):
365-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
365+
wrappers = self.wrappers.get_wrappers(self.app_name)
366366
wrappers.remove(wrapper)
367-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
367+
self.wrappers.set_wrappers(self.app_name, wrappers)
368368
if not wrappers:
369369
self.wrapper_label.setVisible(True)
370370

371371
@Slot(object, object)
372372
def __update_wrapper(self, old: Wrapper, new: Wrapper):
373-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
373+
wrappers = self.wrappers.get_wrappers(self.app_name)
374374
index = wrappers.index(old)
375375
wrappers.remove(old)
376376
wrappers.insert(index, new)
377-
self.wrappers.set_game_wrapper_list(self.app_name, wrappers)
377+
self.wrappers.set_wrappers(self.app_name, wrappers)
378378
self.__add_wrapper(new, index)
379379

380380
@Slot()
381381
def update_state(self):
382382
for w in self.wrapper_container.findChildren(WrapperWidget, options=Qt.FindChildOption.FindDirectChildrenOnly):
383383
w.deleteLater()
384-
wrappers = self.wrappers.get_game_wrapper_list(self.app_name)
384+
wrappers = self.wrappers.get_wrappers(self.app_name)
385385
if not wrappers:
386386
self.wrapper_label.setVisible(True)
387387
for wrapper in wrappers:

rare/shared/workers/wine_resolver.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def _configure_process(core: LegendaryCore, app_name: str) -> Tuple[List, Dict]:
4242

4343
if config.get_boolean(app_name, "no_wine"):
4444
wrappers = Wrappers()
45-
for w in wrappers.get_game_wrapper_list(app_name):
45+
for w in wrappers.get_wrappers(app_name):
4646
if w.is_compat_tool:
4747
for t in steam.find_tools():
4848
if t.checksum == w.checksum:

rare/shared/wrappers.py

+59-55
Original file line numberDiff line numberDiff line change
@@ -41,109 +41,113 @@ def __dict__(self):
4141

4242
class Wrappers:
4343
def __init__(self):
44-
self.__file = os.path.join(config_dir(), "wrappers.json")
45-
self.__wrappers_dict = {}
44+
self._file = os.path.join(config_dir(), "wrappers.json")
45+
self._wrappers_dict = {}
4646
try:
47-
with open(self.__file, "r", encoding="utf-8") as f:
48-
self.__wrappers_dict = json.load(f)
47+
with open(self._file, "r", encoding="utf-8") as f:
48+
self._wrappers_dict = json.load(f)
4949
except FileNotFoundError:
50-
logger.info("%s does not exist", self.__file)
50+
logger.info("%s does not exist", self._file)
5151
except json.JSONDecodeError:
52-
logger.warning("%s is corrupt", self.__file)
52+
logger.warning("%s is corrupt", self._file)
5353

54-
self.__wrappers: Dict[str, Wrapper] = {}
55-
for wrap_id, wrapper in self.__wrappers_dict.get("wrappers", {}).items():
56-
self.__wrappers.update({wrap_id: Wrapper.from_dict(wrapper)})
54+
self._version = self._wrappers_dict.get("version", 1)
5755

58-
self.__applists: Dict[str, List[WrapperEntry]] = {}
59-
for app_name, wrapper_list in self.__wrappers_dict.get("applists", {}).items():
56+
self._wrappers: Dict[str, Wrapper] = {}
57+
for wrap_id, wrapper in self._wrappers_dict.get("wrappers", {}).items():
58+
self._wrappers.update({wrap_id: Wrapper.from_dict(wrapper)})
59+
60+
self._applists: Dict[str, List[WrapperEntry]] = {}
61+
for app_name, wrapper_list in self._wrappers_dict.get("applists", {}).items():
6062
if all(isinstance(x, str) for x in wrapper_list):
6163
wlist = [WrapperEntry(y) for y in wrapper_list]
6264
elif all(isinstance(x, dict) for x in wrapper_list):
6365
wlist = [WrapperEntry.from_dict(y) for y in wrapper_list]
6466
else:
6567
wlist = []
66-
self.__applists.update({app_name: wlist})
68+
self._applists.update({app_name: wlist})
69+
70+
# set current file version
71+
self._version = 2
6772

6873
def import_wrappers(self, core: LegendaryCore, settings: QSettings, app_names: List):
6974
for app_name in app_names:
70-
wrappers = self.get_game_wrapper_list(app_name)
71-
if not wrappers and (commands := settings.value(f"{app_name}/wrapper", [], list)):
75+
wrappers = self.get_wrappers(app_name)
76+
if not wrappers and (commands := settings.value(f"{app_name}/wrapper", [], type=list)):
7277
logger.info("Importing wrappers from Rare's config")
7378
settings.remove(f"{app_name}/wrapper")
7479
for command in commands:
7580
wrapper = Wrapper(command=shlex.split(command))
7681
wrappers.append(wrapper)
77-
self.set_game_wrapper_list(app_name, wrappers)
82+
self.set_wrappers(app_name, wrappers)
7883
logger.debug("Imported previous wrappers in %s Rare: %s", app_name, wrapper.name)
7984

8085
# NOTE: compatibility with Legendary
86+
# No Rare settings wrappers, but legendary config wrappers, for backwards compatibility
8187
if not wrappers and (command := core.lgd.config.get(app_name, "wrapper", fallback="")):
8288
logger.info("Importing wrappers from legendary's config")
83-
# no qt wrapper, but legendary wrapper, to have backward compatibility
84-
# pattern = re.compile(r'''((?:[^ "']|"[^"]*"|'[^']*')+)''')
85-
# wrappers = pattern.split(command)[1::2]
8689
wrapper = Wrapper(
8790
command=shlex.split(command),
8891
name="Imported from Legendary",
8992
wtype=WrapperType.LEGENDARY_IMPORT
9093
)
9194
wrappers = [wrapper]
92-
self.set_game_wrapper_list(app_name, wrappers)
95+
self.set_wrappers(app_name, wrappers)
9396
logger.debug("Imported existing wrappers in %s legendary: %s", app_name, wrapper.name)
9497

9598
@property
9699
def user_wrappers(self) -> Iterable[Wrapper]:
97-
return filter(lambda w: w.is_editable, self.__wrappers.values())
100+
return filter(lambda w: w.is_editable, self._wrappers.values())
98101
# for wrap in self.__wrappers.values():
99102
# if wrap.is_user_defined:
100103
# yield wrap
101104

102-
def get_game_wrapper_string(self, app_name: str) -> str:
103-
commands = [wrapper.as_str for wrapper in self.get_game_wrapper_list(app_name) if wrapper.is_enabled]
105+
def wrapper_command(self, app_name: str) -> str:
106+
commands = [wrapper.as_str for wrapper in self.get_wrappers(app_name) if wrapper.is_enabled]
104107
return " ".join(commands)
105108

106-
def get_game_wrapper_list(self, app_name: str) -> List[Wrapper]:
109+
def get_checksums(self, app_name: str) -> Set[str]:
110+
return {entry.checksum for entry in self._applists.get(app_name, [])}
111+
112+
def get_wrappers(self, app_name: str) -> List[Wrapper]:
107113
wrappers = []
108-
for entry in self.__applists.get(app_name, []):
109-
if wrap := self.__wrappers.get(entry.checksum, None):
114+
for entry in self._applists.get(app_name, []):
115+
if wrap := self._wrappers.get(entry.checksum, None):
110116
wrap.is_enabled = entry.enabled
111117
wrappers.append(wrap)
112118
return wrappers
113119

114-
def get_game_csum_list(self, app_name: str) -> Set[str]:
115-
return {entry.checksum for entry in self.__applists.get(app_name, [])}
116-
117-
def set_game_wrapper_list(self, app_name: str, wrappers: List[Wrapper]) -> None:
120+
def set_wrappers(self, app_name: str, wrappers: List[Wrapper]) -> None:
118121
_wrappers = sorted(wrappers, key=lambda w: w.is_compat_tool)
119122
for w in _wrappers:
120-
if (md5sum := w.checksum) in self.__wrappers.keys():
121-
if w != self.__wrappers[md5sum]:
122-
logger.error("Equal csum for unequal wrappers %s, %s", w.name, self.__wrappers[md5sum].name)
123+
if (md5sum := w.checksum) in self._wrappers.keys():
124+
if w != self._wrappers[md5sum]:
125+
logger.error("Equal csum for unequal wrappers %s, %s", w.name, self._wrappers[md5sum].name)
123126
if w.is_compat_tool:
124-
self.__wrappers.update({md5sum: w})
127+
self._wrappers.update({md5sum: w})
125128
else:
126-
self.__wrappers.update({md5sum: w})
127-
self.__applists[app_name] = [WrapperEntry(w.checksum, w.is_enabled) for w in _wrappers]
129+
self._wrappers.update({md5sum: w})
130+
self._applists[app_name] = [WrapperEntry(w.checksum, w.is_enabled) for w in _wrappers]
128131
self.__save_config(app_name)
129132
self.__save_wrappers()
130133

131134
def __save_config(self, app_name: str):
132-
command_string = self.get_game_wrapper_string(app_name)
133-
config.save_option(app_name, "wrapper", command_string)
135+
command = self.wrapper_command(app_name)
136+
config.save_option(app_name, "wrapper", command)
134137

135138
def __save_wrappers(self):
136-
existing = {csum for csum in self.__wrappers.keys()}
137-
in_use = {entry.checksum for wrappers in self.__applists.values() for entry in wrappers}
139+
existing = {csum for csum in self._wrappers.keys()}
140+
in_use = {entry.checksum for wrappers in self._applists.values() for entry in wrappers}
138141

139142
for redudant in existing.difference(in_use):
140-
del self.__wrappers[redudant]
143+
del self._wrappers[redudant]
141144

142-
self.__wrappers_dict["wrappers"] = self.__wrappers
143-
self.__wrappers_dict["applists"] = self.__applists
145+
self._wrappers_dict["version"] = self._version
146+
self._wrappers_dict["wrappers"] = self._wrappers
147+
self._wrappers_dict["applists"] = self._applists
144148

145-
with open(os.path.join(self.__file), "w+", encoding="utf-8") as f:
146-
json.dump(self.__wrappers_dict, f, default=lambda o: vars(o), indent=2)
149+
with open(os.path.join(self._file), "w+", encoding="utf-8") as f:
150+
json.dump(self._wrappers_dict, f, default=lambda o: vars(o), indent=2)
147151

148152

149153
if __name__ == "__main__":
@@ -167,30 +171,30 @@ def __save_wrappers(self):
167171
w2 = Wrapper(command=["/usr/bin/w2"], wtype=WrapperType.COMPAT_TOOL)
168172
w3 = Wrapper(command=["/usr/bin/w3"], wtype=WrapperType.USER_DEFINED, enabled=False)
169173
w4 = Wrapper(command=["/usr/bin/w4"], wtype=WrapperType.USER_DEFINED)
170-
wr.set_game_wrapper_list("testgame", [w1, w2, w3, w4])
174+
wr.set_wrappers("testgame", [w1, w2, w3, w4])
171175

172176
w5 = Wrapper(command=["/usr/bin/w5"], wtype=WrapperType.COMPAT_TOOL)
173-
wr.set_game_wrapper_list("testgame2", [w2, w1, w5])
177+
wr.set_wrappers("testgame2", [w2, w1, w5])
174178

175179
w6 = Wrapper(command=["/usr/bin/w 6", "-w", "-t"], wtype=WrapperType.USER_DEFINED)
176-
wr.set_game_wrapper_list("testgame", [w1, w2, w3, w6])
180+
wr.set_wrappers("testgame", [w1, w2, w3, w6])
177181

178182
w7 = Wrapper(command=["/usr/bin/w2"], wtype=WrapperType.COMPAT_TOOL)
179-
app_wrappers = wr.get_game_wrapper_list("testgame")
183+
app_wrappers = wr.get_wrappers("testgame")
180184
pprint([w.as_str for w in app_wrappers])
181185
# item = next(item for item in app_wrappers if item.checksum == w3.checksum)
182186
app_wrappers.remove(w3)
183-
wr.set_game_wrapper_list("testgame", app_wrappers)
187+
wr.set_wrappers("testgame", app_wrappers)
184188

185-
game_wrappers = wr.get_game_wrapper_list("testgame")
189+
game_wrappers = wr.get_wrappers("testgame")
186190
pprint([w.as_str for w in game_wrappers])
187-
game_wrappers = wr.get_game_wrapper_list("testgame2")
191+
game_wrappers = wr.get_wrappers("testgame2")
188192
pprint([w.as_str for w in game_wrappers])
189193

190-
# for i, tool in enumerate(steam.find_tools()):
191-
# wt = Wrapper(command=tool.command(), name=tool.name, wtype=WrapperType.COMPAT_TOOL)
192-
# wr.set_game_wrapper_list(f"compat_game_{i}", [wt])
193-
# print(wt.as_str)
194+
for i, tool in enumerate(steam.find_tools()):
195+
wt = Wrapper(command=tool.command(), name=tool.name, wtype=WrapperType.COMPAT_TOOL)
196+
wr.set_wrappers(f"compat_game_{i}", [wt])
197+
print(wt.as_str)
194198

195199
for wrp in wr.user_wrappers:
196200
pprint(wrp.as_str)

0 commit comments

Comments
 (0)