- made sure that if an older preferences file is detected then there are no errors and only the parameters that are currently active are loaded; the factory defaults file is deleted and recreated in the new format

This commit is contained in:
Marius Stanciu 2019-12-04 00:50:50 +02:00 committed by Marius
parent b1547bf6b9
commit 2757b018b6
2 changed files with 43 additions and 7 deletions

View File

@ -17,6 +17,7 @@ import simplejson as json
import lzma
import threading
import shutil
import stat
from stat import S_IREAD, S_IRGRP, S_IROTH
import subprocess
@ -392,10 +393,10 @@ class App(QtCore.QObject):
# #################################################################################
# #################### DEFAULTS - PREFERENCES STORAGE #############################
# #################################################################################
self.defaults = LoudDict()
self.defaults.update({
# Global APP Preferences
"version": self.version,
"first_run": True,
"units": "MM",
"global_serial": 0,
@ -930,6 +931,7 @@ class App(QtCore.QObject):
# ############################################################
# ############### Load defaults from file ####################
# ############################################################
self.old_defaults_found = False
if user_defaults:
self.load_defaults(filename='current_defaults')
@ -2576,7 +2578,7 @@ class App(QtCore.QObject):
factory_file.close()
# and then make the factory_defaults.FlatConfig file read_only os it can't be modified after creation.
# and then make the factory_defaults.FlatConfig file read_only so it can't be modified after creation.
filename_factory = self.data_path + '/factory_defaults.FlatConfig'
os.chmod(filename_factory, S_IREAD | S_IRGRP | S_IROTH)
@ -2685,6 +2687,11 @@ class App(QtCore.QObject):
if App.args:
self.args_at_startup.emit(App.args)
if self.old_defaults_found is True:
self.inform.emit('[WARNING_NOTCL] %s' % _("Found old default preferences files. "
"Please reboot the application"))
self.old_defaults_found = False
@staticmethod
def copy_and_overwrite(from_path, to_path):
"""
@ -3721,8 +3728,7 @@ class App(QtCore.QObject):
f.close()
except IOError:
self.log.error("Could not load defaults file.")
self.inform.emit('[ERROR] %s' %
_("Could not load defaults file."))
self.inform.emit('[ERROR] %s' % _("Could not load defaults file."))
# in case the defaults file can't be loaded, show all toolbars
self.defaults["global_toolbar_view"] = 511
return
@ -3736,7 +3742,31 @@ class App(QtCore.QObject):
App.log.error(str(e))
self.inform.emit('[ERROR] %s' % _("Failed to parse defaults file."))
return
self.defaults.update(defaults)
if 'version' not in defaults or defaults['version'] != self.defaults['version']:
for k, v in defaults.items():
if k in self.defaults:
self.defaults[k] = v
# delete old factory defaults
try:
fact_def_file_path = os.path.join(self.data_path, 'factory_defaults.FlatConfig')
os.chmod(fact_def_file_path, stat.S_IRWXO | stat.S_IWRITE | stat.S_IWGRP)
os.remove(fact_def_file_path)
# recreate a new factory defaults file and save the factory defaults data into it
f_f_def_s = open(self.data_path + "/factory_defaults.FlatConfig", "w")
json.dump(self.defaults, f_f_def_s, default=to_dict, indent=2, sort_keys=True)
f_f_def_s.close()
# and then make the factory_defaults.FlatConfig file read_only so it can't be modified after creation.
os.chmod(fact_def_file_path, S_IREAD | S_IRGRP | S_IROTH)
except Exception as e:
log.debug("App.load_defaults() -> deleting old factory defaults file -> %s" % str(e))
self.old_defaults_found = True
else:
self.defaults.update(defaults)
log.debug("FlatCAM defaults loaded from: %s" % filename)
def on_import_preferences(self):
@ -4864,7 +4894,8 @@ class App(QtCore.QObject):
e = sys.exc_info()[0]
App.log.error("Failed to parse factory defaults file.")
App.log.error(str(e))
self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to parse factory defaults file."))
if silent_message is False:
self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to parse factory defaults file."))
return
# Update options
@ -4879,7 +4910,8 @@ class App(QtCore.QObject):
f_f_def_s.close()
except Exception as e:
log.debug("App.save_factory_default() save update --> %s" % str(e))
self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write factory defaults to file."))
if silent_message is False:
self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to write factory defaults to file."))
return
if silent_message is False:

View File

@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing.
=================================================
4.12.2019
- made sure that if an older preferences file is detected then there are no errors and only the parameters that are currently active are loaded; the factory defaults file is deleted and recreated in the new format
3.12.2019
- in Preferences added an Apply button which apply the modified preferences but does not save to a file, minimizing the file IO operations; CTRL+S key combo does the Apply now.