Skip to content

Commit af7af86

Browse files
committed
Merge pull request #23 from fayvel/config_int
Avoid loading invalid numeric config entries
2 parents 537419e + dfd8fb0 commit af7af86

File tree

4 files changed

+40
-16
lines changed

4 files changed

+40
-16
lines changed

src/m64py/frontend/mainwindow.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,7 @@ def __init__(self, optparse):
7878
self.settings = Settings(self)
7979
self.worker = Worker(self)
8080

81-
self.vidext = bool(
82-
int(self.settings.qset.value("enable_vidext", 1)))
81+
self.vidext = bool(self.settings.get_int_safe("enable_vidext", 1))
8382

8483
self.create_state_slots()
8584
self.create_widgets()
@@ -111,7 +110,7 @@ def resizeEvent(self, event):
111110

112111
def showEvent(self, event):
113112
if not self.widgets_height:
114-
width, height = self.settings.qset.value("size", SIZE_1X)
113+
width, height = self.settings.get_size_safe()
115114
menubar_height = self.menubar.size().height()
116115
statusbar_height = self.statusbar.size().height()
117116
self.widgets_height = menubar_height + statusbar_height
@@ -126,7 +125,7 @@ def window_size_triggered(self, size):
126125
# event.ignore() doesn't work on windows
127126
if not sys.platform == "win32":
128127
if not fullscreen and \
129-
bool(int(self.settings.qset.value("keep_aspect", 1))):
128+
bool(self.settings.get_int_safe("keep_aspect", 1)):
130129
width, height = self.keep_aspect(size)
131130

132131
self.worker.core.config.open_section("Video-General")

src/m64py/frontend/recentfiles.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,18 @@ def create(self):
4949
self.action_clear_history.triggered.connect(self.clear)
5050
self.parent.menuRecent.addAction(self.action_clear_history)
5151

52+
def is_string(self, obj):
53+
try:
54+
return isinstance(obj, basestring)
55+
except NameError:
56+
return isinstance(obj, str)
57+
5258
def update(self):
5359
"""Updates list of recent files."""
5460
self.recent_files = self.parent.settings.qset.value("recent_files", [])
61+
if not type(self.recent_files) == list:
62+
self.recent_files = []
63+
self.recent_files = list(filter(lambda x: self.is_string(x), self.recent_files))
5564
num_files = min(len(self.recent_files), self.max_recent)
5665
for i in range(num_files):
5766
text = QFileInfo(self.recent_files[i]).fileName()

src/m64py/frontend/settings.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def browse_dialog(self, args):
139139
self.core = self.parent.worker.core
140140
self.set_core()
141141
self.set_video()
142-
size = self.qset.value("size", SIZE_1X)
142+
size = self.get_size_safe()
143143
self.parent.window_size_triggered(size)
144144
self.parent.state_changed.emit((True, False, False, False))
145145
elif widget == self.pathPlugins:
@@ -195,6 +195,24 @@ def set_paths(self):
195195
self.pathPlugins.setText(path_plugins)
196196
self.pathData.setText(path_data)
197197

198+
def get_int_safe(self, key, default):
199+
try:
200+
return int(self.qset.value(key, default))
201+
except ValueError:
202+
return default
203+
204+
def get_size_safe(self):
205+
size = self.qset.value("size", SIZE_1X)
206+
if not type(size) == tuple:
207+
size = SIZE_1X
208+
if len(size) != 2:
209+
size = SIZE_1X
210+
if type(size[0]) != int or type(size[1]) != int:
211+
size = SIZE_1X
212+
if size[0] <= 0 or size[1] <= 0:
213+
size = SIZE_1X
214+
return size
215+
198216
def set_video(self):
199217
self.comboResolution.clear()
200218
for mode in MODES:
@@ -212,7 +230,7 @@ def set_video(self):
212230
self.comboResolution.setCurrentIndex(index)
213231

214232
self.checkEnableVidExt.setChecked(
215-
bool(int(self.qset.value("enable_vidext", 1))))
233+
bool(self.get_int_safe("enable_vidext", 1)))
216234

217235
self.checkFullscreen.setChecked(
218236
bool(self.core.config.get_parameter("Fullscreen")))
@@ -222,10 +240,10 @@ def set_video(self):
222240
self.checkKeepAspect.setChecked(False)
223241
self.checkKeepAspect.setEnabled(False)
224242
else:
225-
keep_aspect = bool(int(self.qset.value("keep_aspect", 1)))
243+
keep_aspect = bool(self.get_int_safe("keep_aspect", 1))
226244
self.checkKeepAspect.setChecked(keep_aspect)
227245

228-
disable_screensaver = bool(int(self.qset.value("disable_screensaver", 1)))
246+
disable_screensaver = bool(self.get_int_safe("disable_screensaver", 1))
229247
self.checkDisableScreenSaver.setChecked(disable_screensaver)
230248

231249
def set_core(self):

src/m64py/frontend/worker.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -179,17 +179,17 @@ def rom_open(self):
179179
del romfile
180180
self.core.rom_get_header()
181181
self.core.rom_get_settings()
182-
if bool(int(self.settings.qset.value(
183-
"disable_screensaver", 1))):
182+
if bool(self.settings.get_int_safe(
183+
"disable_screensaver", 1)):
184184
screensaver.disable()
185185
self.parent.rom_opened.emit()
186186
self.parent.recent_files.add(self.filepath)
187187

188188
def rom_close(self):
189189
"""Closes ROM."""
190190
self.core.rom_close()
191-
if bool(int(self.settings.qset.value(
192-
"disable_screensaver", 1))):
191+
if bool(self.settings.get_int_safe(
192+
"disable_screensaver", 1)):
193193
screensaver.enable()
194194
self.parent.rom_closed.emit()
195195

@@ -306,13 +306,11 @@ def toggle_pause(self):
306306
"""Toggles pause."""
307307
if self.state == M64EMU_RUNNING:
308308
self.core.pause()
309-
if bool(int(self.settings.qset.value(
310-
"disable_screensaver", 1))):
309+
if bool(self.settings.get_int_safe("disable_screensaver", 1)):
311310
screensaver.enable()
312311
elif self.state == M64EMU_PAUSED:
313312
self.core.resume()
314-
if bool(int(self.settings.qset.value(
315-
"disable_screensaver", 1))):
313+
if bool(self.settings.get_int_safe("disable_screensaver", 1)):
316314
screensaver.disable()
317315
self.toggle_actions()
318316

0 commit comments

Comments
 (0)