Commit 6e9eeb391c88e0815023573632646f4dc705e4b6

Authored by Thiago Franco de Moraes
Committed by GitHub
1 parent feaf214b
Exists in master

Session as dict (#156)

* session as dict almost working

* writing to json

* Better last projection handling

* was not closing when didn't have config

* Not reading status from config file

* removed unused fucntion

* reading from cfg specifing the types

* reading from cfg specifing the types

* Removed unused parts

* Added a get method to session

* Using default in session

* last folder to inv3 and other files in session

* last folder to export and import stl export screenshots and open bmp folder in session
app.py
... ... @@ -147,9 +147,8 @@ class Inv3SplashScreen(SplashScreen):
147 147 create_session = True
148 148  
149 149 install_lang = 0
150   - # Check if there is a language set (if session file exists
151   - if session.ReadLanguage():
152   - lang = session.GetLanguage()
  150 + lang = session.GetLanguage()
  151 + if lang:
153 152 if (lang != "False"):
154 153 _ = i18n.InstallLanguage(lang)
155 154 install_lang = 1
... ... @@ -179,7 +178,9 @@ class Inv3SplashScreen(SplashScreen):
179 178 invdir = os.path.join(homedir, ".invesalius")
180 179 shutil.rmtree(invdir)
181 180 sys.exit()
182   -
  181 +
  182 + dialog.Destroy()
  183 +
183 184 # Session file should be created... So we set the recent
184 185 # choosen language
185 186 if (create_session):
... ... @@ -187,7 +188,7 @@ class Inv3SplashScreen(SplashScreen):
187 188 session.SetLanguage(lang)
188 189 session.WriteSessionFile()
189 190  
190   - session.SaveConfigFileBackup()
  191 + # session.SaveConfigFileBackup()
191 192  
192 193  
193 194 # Only after language was defined, splash screen will be
... ...
invesalius/control.py
... ... @@ -249,6 +249,7 @@ class Controller():
249 249 def ShowDialogCloseProject(self):
250 250 session = ses.Session()
251 251 st = session.project_status
  252 + print('Status', st, type(st))
252 253 if st == const.PROJ_CLOSE:
253 254 return -1
254 255 try:
... ...
invesalius/data/surface.py
... ... @@ -159,6 +159,28 @@ class SurfaceManager():
159 159 self.last_surface_index = 0
160 160 self.__bind_events()
161 161  
  162 + self._default_parameters = {
  163 + 'algorithm': 'Default',
  164 + 'quality': const.DEFAULT_SURFACE_QUALITY,
  165 + 'fill_holes': False,
  166 + 'keep_largest': False,
  167 + 'fill_border_holes': True,
  168 + }
  169 +
  170 + self._load_user_parameters()
  171 +
  172 + def _load_user_parameters(self):
  173 + session = ses.Session()
  174 +
  175 + if 'surface' in session:
  176 + self._default_parameters.update(session['surface'])
  177 + else:
  178 + session['surface'] = self._default_parameters
  179 + session.WriteSessionFile()
  180 +
  181 + print('Session', session)
  182 +
  183 +
162 184 def __bind_events(self):
163 185 Publisher.subscribe(self.AddNewActor, 'Create surface')
164 186 Publisher.subscribe(self.SetActorTransparency,
... ...
invesalius/gui/dialogs.py
... ... @@ -268,8 +268,10 @@ WILDCARD_MESH_FILES = "STL File format (*.stl)|*.stl|" \
268 268 def ShowOpenProjectDialog():
269 269 # Default system path
270 270 current_dir = os.path.abspath(".")
  271 + session = ses.Session()
  272 + last_directory = session.get('paths', 'last_directory_inv3', '')
271 273 dlg = wx.FileDialog(None, message=_("Open InVesalius 3 project..."),
272   - defaultDir="",
  274 + defaultDir=last_directory,
273 275 defaultFile="", wildcard=WILDCARD_OPEN,
274 276 style=wx.FD_OPEN|wx.FD_CHANGE_DIR)
275 277  
... ... @@ -286,6 +288,10 @@ def ShowOpenProjectDialog():
286 288 except(wx._core.PyAssertionError): # FIX: win64
287 289 filepath = dlg.GetPath()
288 290  
  291 + if filepath:
  292 + session['paths']['last_directory_inv3'] = os.path.split(filepath)[0]
  293 + session.WriteSessionFile()
  294 +
289 295 # Destroy the dialog. Don't do this until you are done with it!
290 296 # BAD things can happen otherwise!
291 297 dlg.Destroy()
... ... @@ -337,17 +343,19 @@ def ShowImportDirDialog(self):
337 343 def ShowImportBitmapDirDialog(self):
338 344 current_dir = os.path.abspath(".")
339 345  
340   - if sys.platform == 'win32' or sys.platform.startswith('linux'):
341   - session = ses.Session()
  346 + # if sys.platform == 'win32' or sys.platform.startswith('linux'):
  347 + # session = ses.Session()
342 348  
343   - if (session.GetLastDicomFolder()):
344   - folder = session.GetLastDicomFolder()
345   - else:
346   - folder = ''
347   - else:
348   - folder = ''
  349 + # if (session.GetLastDicomFolder()):
  350 + # folder = session.GetLastDicomFolder()
  351 + # else:
  352 + # folder = ''
  353 + # else:
  354 + # folder = ''
  355 + session = ses.Session()
  356 + last_directory = session.get('paths', 'last_directory_bitmap', '')
349 357  
350   - dlg = wx.DirDialog(self, _("Choose a folder with TIFF, BMP, JPG or PNG:"), folder,
  358 + dlg = wx.DirDialog(self, _("Choose a folder with TIFF, BMP, JPG or PNG:"), last_directory,
351 359 style=wx.DD_DEFAULT_STYLE
352 360 | wx.DD_DIR_MUST_EXIST
353 361 | wx.DD_CHANGE_DIR)
... ... @@ -363,9 +371,13 @@ def ShowImportBitmapDirDialog(self):
363 371 if (dlg.GetPath()):
364 372 path = dlg.GetPath()
365 373  
366   - if (sys.platform != 'darwin'):
367   - if (path):
368   - session.SetLastDicomFolder(path)
  374 + # if (sys.platform != 'darwin'):
  375 + # if (path):
  376 + # session.SetLastDicomFolder(path)
  377 +
  378 + if path:
  379 + session['paths']['last_directory_bitmap'] = path
  380 + session.WriteSessionFile()
369 381  
370 382 # Only destroy a dialog after you're done with it.
371 383 dlg.Destroy()
... ... @@ -375,9 +387,10 @@ def ShowImportBitmapDirDialog(self):
375 387  
376 388 def ShowImportOtherFilesDialog(id_type):
377 389 # Default system path
378   - current_dir = os.path.abspath(".")
  390 + session = ses.Session()
  391 + last_directory = session.get('paths', 'last_directory_%d' % id_type, '')
379 392 dlg = wx.FileDialog(None, message=_("Import Analyze 7.5 file"),
380   - defaultDir="",
  393 + defaultDir=last_directory,
381 394 defaultFile="", wildcard=WILDCARD_ANALYZE,
382 395 style=wx.FD_OPEN | wx.FD_CHANGE_DIR)
383 396  
... ... @@ -407,17 +420,22 @@ def ShowImportOtherFilesDialog(id_type):
407 420 if (dlg.GetPath()):
408 421 filename = dlg.GetPath()
409 422  
  423 + if filename:
  424 + session['paths']['last_directory_%d' % id_type] = os.path.split(dlg.GetPath())[0]
  425 + session.WriteSessionFile()
410 426 # Destroy the dialog. Don't do this until you are done with it!
411 427 # BAD things can happen otherwise!
412 428 dlg.Destroy()
413   - os.chdir(current_dir)
414 429 return filename
415 430  
416 431  
417 432 def ShowImportMeshFilesDialog():
418 433 # Default system path
419 434 current_dir = os.path.abspath(".")
  435 + session = ses.Session()
  436 + last_directory = session.get('paths', 'last_directory_surface_import', '')
420 437 dlg = wx.FileDialog(None, message=_("Import surface file"),
  438 + defaultDir=last_directory,
421 439 wildcard=WILDCARD_MESH_FILES,
422 440 style=wx.FD_OPEN | wx.FD_CHANGE_DIR)
423 441  
... ... @@ -435,6 +453,10 @@ def ShowImportMeshFilesDialog():
435 453 if (dlg.GetPath()):
436 454 filename = dlg.GetPath()
437 455  
  456 + if filename:
  457 + session['paths']['last_directory_surface_import'] = os.path.split(filename)[0]
  458 + session.WriteSessionFile()
  459 +
438 460 # Destroy the dialog. Don't do this until you are done with it!
439 461 # BAD things can happen otherwise!
440 462 dlg.Destroy()
... ... @@ -444,9 +466,11 @@ def ShowImportMeshFilesDialog():
444 466  
445 467 def ShowSaveAsProjectDialog(default_filename=None):
446 468 current_dir = os.path.abspath(".")
  469 + session = ses.Session()
  470 + last_directory = session.get('paths', 'last_directory_inv3', '')
447 471 dlg = wx.FileDialog(None,
448 472 _("Save project as..."), # title
449   - "", # last used directory
  473 + last_directory, # last used directory
450 474 default_filename,
451 475 WILDCARD_INV_SAVE,
452 476 wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
... ... @@ -469,6 +493,10 @@ def ShowSaveAsProjectDialog(default_filename=None):
469 493 if filename.split(".")[-1] != extension:
470 494 filename = filename + "." + extension
471 495  
  496 + if filename:
  497 + session['paths']['last_directory_inv3'] = os.path.split(filename)[0]
  498 + session.WriteSessionFile()
  499 +
472 500 wildcard = dlg.GetFilterIndex()
473 501 os.chdir(current_dir)
474 502 return filename, wildcard == INV_COMPRESSED
... ... @@ -1457,13 +1485,16 @@ def ExportPicture(type_=""):
1457 1485 utils.debug("ExportPicture")
1458 1486 project = proj.Project()
1459 1487  
  1488 + session = ses.Session()
  1489 + last_directory = session.get('paths', 'last_directory_screenshot', '')
  1490 +
1460 1491 project_name = "%s_%s" % (project.name, type_)
1461 1492 if not sys.platform in ('win32', 'linux2', 'linux'):
1462 1493 project_name += ".jpg"
1463 1494  
1464 1495 dlg = wx.FileDialog(None,
1465 1496 "Save %s picture as..." %type_,
1466   - "", # last used directory
  1497 + last_directory, # last used directory
1467 1498 project_name, # filename
1468 1499 WILDCARD_SAVE_PICTURE,
1469 1500 wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
... ... @@ -1474,6 +1505,8 @@ def ExportPicture(type_=""):
1474 1505 filetype = INDEX_TO_TYPE[filetype_index]
1475 1506 extension = INDEX_TO_EXTENSION[filetype_index]
1476 1507 filename = dlg.GetPath()
  1508 + session['paths']['last_directory_screenshot'] = os.path.split(filename)[0]
  1509 + session.WriteSessionFile()
1477 1510 if sys.platform != 'win32':
1478 1511 if filename.split(".")[-1] != extension:
1479 1512 filename = filename + "."+ extension
... ...
invesalius/gui/preferences.py
... ... @@ -222,7 +222,7 @@ class Language(wx.Panel):
222 222 class SurfaceCreation(wx.Panel):
223 223 def __init__(self, parent):
224 224 wx.Panel.__init__(self, parent)
225   - self.rb_fill_border = wx.RadioBox(self, -1, "Fill border holes", choices=[_('Yes'), _('No')], style=wx.RA_SPECIFY_COLS | wx.NO_BORDER)
  225 + self.rb_fill_border = wx.RadioBox(self, -1, _("Fill border holes"), choices=[_('Yes'), _('No')], style=wx.RA_SPECIFY_COLS | wx.NO_BORDER)
226 226  
227 227 sizer = wx.BoxSizer(wx.VERTICAL)
228 228 sizer.Add(self.rb_fill_border)
... ...
invesalius/gui/task_exporter.py
... ... @@ -33,6 +33,7 @@ from wx.lib.pubsub import pub as Publisher
33 33 import invesalius.constants as const
34 34 import invesalius.gui.dialogs as dlg
35 35 import invesalius.project as proj
  36 +import invesalius.session as ses
36 37  
37 38 BTN_MASK = wx.NewId()
38 39 BTN_PICTURE = wx.NewId()
... ... @@ -318,10 +319,12 @@ class InnerTaskPanel(wx.Panel):
318 319 else:
319 320 project_name = project.name+".stl"
320 321  
  322 + session = ses.Session()
  323 + last_directory = session.get('paths', 'last_directory_3d_surface', '')
321 324  
322 325 dlg = wx.FileDialog(None,
323 326 _("Save 3D surface as..."), # title
324   - "", # last used directory
  327 + last_directory, # last used directory
325 328 project_name, # filename
326 329 WILDCARD_SAVE_3D,
327 330 wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
... ... @@ -335,6 +338,11 @@ class InnerTaskPanel(wx.Panel):
335 338 if sys.platform != 'win32':
336 339 if filename.split(".")[-1] != extension:
337 340 filename = filename + "."+ extension
  341 +
  342 + if filename:
  343 + session['paths']['last_directory_3d_surface'] = os.path.split(filename)[0]
  344 + session.WriteSessionFile()
  345 +
338 346 Publisher.sendMessage('Export surface to file',
339 347 filename=filename, filetype=filetype)
340 348 if not os.path.exists(filename):
... ...
invesalius/session.py
... ... @@ -30,6 +30,8 @@ import sys
30 30 from threading import Thread
31 31 import time
32 32 import codecs
  33 +import collections
  34 +import json
33 35  
34 36 #import wx.lib.pubsub as ps
35 37 from wx.lib.pubsub import pub as Publisher
... ... @@ -52,7 +54,8 @@ else:
52 54 USER_INV_DIR = os.path.join(USER_DIR, u'.invesalius')
53 55 USER_PRESET_DIR = os.path.join(USER_INV_DIR, u'presets')
54 56 USER_LOG_DIR = os.path.join(USER_INV_DIR, u'logs')
55   -USER_INV_CFG_PATH = os.path.join(USER_INV_DIR, 'config.cfg')
  57 +USER_INV_CFG_PATH = os.path.join(USER_INV_DIR, 'config.json')
  58 +OLD_USER_INV_CFG_PATH = os.path.join(USER_INV_DIR, 'config.cfg')
56 59  
57 60 SESSION_ENCODING = 'utf8'
58 61  
... ... @@ -62,42 +65,98 @@ SESSION_ENCODING = 'utf8'
62 65 class Session(with_metaclass(Singleton, object)):
63 66  
64 67 def __init__(self):
  68 + self.project_path = ()
65 69 self.temp_item = False
66   - # Initializing as project status closed.
67   - # TODO: A better way to initialize project_status as closed (3)
68   - self.project_status = 3
69 70  
70   - def CreateItens(self):
71   - import invesalius.constants as const
72   - self.project_path = ()
73   - self.debug = False
74   - self.project_status = const.PROJ_CLOSE
75   - # const.PROJ_NEW*, const.PROJ_OPEN, const.PROJ_CHANGE*,
76   - # const.PROJ_CLOSE
  71 + self._values = collections.defaultdict(dict, {
  72 + 'session': {
  73 + 'status': 3,
  74 + 'language': '',
  75 + },
  76 + 'project': {
  77 + },
  78 +
  79 + 'paths': {
  80 + }
  81 + })
  82 +
  83 + self._map_attrs = {
  84 + 'mode': ('session', 'mode'),
  85 + 'project_status': ('session', 'status'),
  86 + 'debug': ('session', 'debug'),
  87 + 'language': ('session', 'language'),
  88 + 'random_id': ('session', 'random_id'),
  89 + 'surface_interpolation': ('session', 'surface_interpolation'),
  90 + 'rendering': ('session', 'rendering'),
  91 + 'slice_interpolation': ('session', 'slice_interpolation'),
  92 + 'recent_projects': ('project', 'recent_projects'),
  93 + 'homedir': ('paths', 'homedir'),
  94 + 'tempdir': ('paths', 'homedir'),
  95 + 'last_dicom_folder': ('paths', 'last_dicom_folder'),
  96 + }
77 97  
78   - self.mode = const.MODE_RP
79   - # const.MODE_RP, const.MODE_NAVIGATOR, const.MODE_RADIOLOGY,
80   - # const.MODE_ODONTOLOGY
81 98  
82   - # InVesalius default projects' directory
83   - homedir = self.homedir = USER_DIR
84   - tempdir = os.path.join(homedir, u".invesalius", u"temp")
  99 + def CreateItens(self):
  100 + import invesalius.constants as const
  101 + homedir = USER_DIR
  102 + tempdir = os.path.join(USER_DIR, u".invesalius", u"temp")
85 103 if not os.path.isdir(tempdir):
86 104 os.makedirs(tempdir)
87   - self.tempdir = tempdir
88   -
89   - # GUI language
90   - self.language = "" # "pt_BR", "es"
91 105  
92   - self.random_id = randint(0,pow(10,16))
93   -
94   - # Recent projects list
95   - self.recent_projects = [(const.SAMPLE_DIR, u"Cranium.inv3")]
96   - self.last_dicom_folder = ''
97   - self.surface_interpolation = 1
98   - self.slice_interpolation = 0
99   - self.rendering = 0
100   - self.WriteSessionFile()
  106 + self._values = collections.defaultdict(dict, {
  107 + 'session': {
  108 + 'mode': const.MODE_RP,
  109 + 'status': const.PROJ_CLOSE,
  110 + 'debug': False,
  111 + 'language': "",
  112 + 'random_id': randint(0, pow(10,16)),
  113 + 'surface_interpolation': 1,
  114 + 'rendering': 0,
  115 + 'slice_interpolation': 0,
  116 + },
  117 +
  118 + 'project': {
  119 + 'recent_projects': [(const.SAMPLE_DIR, u"Cranium.inv3"), ],
  120 + },
  121 +
  122 + 'paths': {
  123 + 'homedir': USER_DIR,
  124 + 'tempdir': os.path.join(homedir, u".invesalius", u"temp"),
  125 + 'last_dicom_folder': '',
  126 + },
  127 + })
  128 +
  129 + def __contains__(self, key):
  130 + return key in self._values
  131 +
  132 + def __getitem__(self, key):
  133 + return self._values[key]
  134 +
  135 + def __setitem__(self, key, value):
  136 + self._values[key] = value
  137 +
  138 + def __getattr__(self, name):
  139 + map_attrs = object.__getattribute__(self, '_map_attrs')
  140 + if name not in map_attrs:
  141 + raise AttributeError(name)
  142 + session, key = map_attrs[name]
  143 + return object.__getattribute__(self, '_values')[session][key]
  144 +
  145 + def __setattr__(self, name, value):
  146 + if name in ("temp_item", "_map_attrs", "_values", "project_path"):
  147 + return object.__setattr__(self, name, value)
  148 + else:
  149 + session, key = self._map_attrs[name]
  150 + self._values[session][key] = value
  151 +
  152 + def __str__(self):
  153 + return self._values.__str__()
  154 +
  155 + def get(self, session, key, default_value):
  156 + try:
  157 + return self._values[session][key]
  158 + except KeyError:
  159 + return default_value
101 160  
102 161 def IsOpen(self):
103 162 import invesalius.constants as const
... ... @@ -178,40 +237,17 @@ class Session(with_metaclass(Singleton, object)):
178 237 self.temp_item = False
179 238  
180 239 def WriteSessionFile(self):
181   - config = ConfigParser.RawConfigParser()
182   -
183   - config.add_section('session')
184   - config.set('session', 'mode', self.mode)
185   - config.set('session', 'status', self.project_status)
186   - config.set('session','debug', self.debug)
187   - config.set('session', 'language', self.language)
188   - config.set('session', 'random_id', self.random_id)
189   - config.set('session', 'surface_interpolation', self.surface_interpolation)
190   - config.set('session', 'rendering', self.rendering)
191   - config.set('session', 'slice_interpolation', self.slice_interpolation)
192   -
193   - config.add_section('project')
194   - config.set('project', 'recent_projects', self.recent_projects)
195   -
196   - config.add_section('paths')
197   - config.set('paths','homedir',self.homedir)
198   - config.set('paths','tempdir',self.tempdir)
199   - config.set('paths','last_dicom_folder',self.last_dicom_folder)
200   -
201   - path = os.path.join(self.homedir ,
202   - '.invesalius', 'config.cfg')
  240 + self._write_to_json(self._values, USER_INV_CFG_PATH)
203 241  
204   - configfile = codecs.open(path, 'wb', SESSION_ENCODING)
205   - try:
206   - config.write(configfile)
207   - except UnicodeDecodeError:
208   - pass
209   - configfile.close()
  242 + def _write_to_json(self, cfg_dict, cfg_filename):
  243 + with open(cfg_filename, 'w') as cfg_file:
  244 + json.dump(cfg_dict, cfg_file, sort_keys=True, indent=4)
210 245  
211 246 def __add_to_list(self, item):
212 247 import invesalius.constants as const
213 248 # Last projects list
214 249 l = self.recent_projects
  250 + item = list(item)
215 251  
216 252 # If item exists, remove it from list
217 253 if l.count(item):
... ... @@ -219,11 +255,7 @@ class Session(with_metaclass(Singleton, object)):
219 255  
220 256 # Add new item
221 257 l.insert(0, item)
222   -
223   - # Remove oldest projects from list
224   - if len(l)>const.PROJ_MAX:
225   - for i in range(len(l)-const.PROJ_MAX):
226   - l.pop()
  258 + self.recent_projects = l[:const.PROJ_MAX]
227 259  
228 260 def GetLanguage(self):
229 261 return self.language
... ... @@ -244,86 +276,59 @@ class Session(with_metaclass(Singleton, object)):
244 276 self.last_dicom_folder = folder
245 277 self.WriteSessionFile()
246 278  
247   - def ReadLanguage(self):
248   - config = ConfigParser.ConfigParser()
249   - path = os.path.join(USER_INV_DIR, 'config.cfg')
250   - try:
251   - f = codecs.open(path, 'rb', SESSION_ENCODING)
252   - config.readfp(f)
253   - f.close()
254   - self.language = config.get('session','language')
255   - return self.language
256   - except IOError:
257   - return False
258   - except (ConfigParser.NoSectionError,
259   - ConfigParser.NoOptionError,
260   - ConfigParser.MissingSectionHeaderError):
261   - return False
262   -
263   - def ReadRandomId(self):
264   - config = ConfigParser.ConfigParser()
265   - path = os.path.join(USER_INV_DIR, 'config.cfg')
266   - try:
267   - f = codecs.open(path, 'rb', SESSION_ENCODING)
268   - config.readfp(f)
269   - f.close()
270   - self.random_id = config.get('session','random_id')
271   - return self.random_id
272   - except IOError:
273   - return False
274   - except (ConfigParser.NoSectionError,
275   - ConfigParser.NoOptionError,
276   - ConfigParser.MissingSectionHeaderError):
277   - return False
278   -
279   - def ReadSession(self):
280   - config = ConfigParser.ConfigParser()
281   - path = USER_INV_CFG_PATH
282   - try:
283   - f = codecs.open(path, 'rb', SESSION_ENCODING)
284   - config.readfp(f)
285   - f.close()
286   - self.mode = config.get('session', 'mode')
287   - # Do not reading project status from the config file, since there
288   - # isn't a recover sessession tool in InVesalius
289   - #self.project_status = int(config.get('session', 'status'))
290   - self.debug = config.get('session','debug')
291   - self.language = config.get('session','language')
292   - self.recent_projects = eval(config.get('project','recent_projects'))
293   - self.homedir = config.get('paths','homedir')
294   - self.tempdir = config.get('paths','tempdir')
295   - self.last_dicom_folder = config.get('paths','last_dicom_folder')
296   -
297   - #if not(sys.platform == 'win32'):
298   - # self.last_dicom_folder = self.last_dicom_folder.decode('utf-8')
299   -
300   - self.surface_interpolation = config.get('session', 'surface_interpolation')
301   - self.slice_interpolation = config.get('session', 'slice_interpolation')
302   -
303   - self.rendering = config.get('session', 'rendering')
304   - self.random_id = config.get('session','random_id')
305   - return True
  279 + def _update_cfg_from_dict(self, config, cfg_dict):
  280 + for session in cfg_dict:
  281 + if cfg_dict[session] and isinstance(cfg_dict[session], dict):
  282 + config.add_section(session)
  283 + for key in cfg_dict[session]:
  284 + config.set(session, key, cfg_dict[session][key])
306 285  
307   - except IOError:
308   - return False
  286 + def _read_cfg_from_json(self, json_filename):
  287 + with open(json_filename, 'r') as cfg_file:
  288 + cfg_dict = json.load(cfg_file)
  289 + self._values.update(cfg_dict)
309 290  
310   - except(ConfigParser.NoSectionError, ConfigParser.MissingSectionHeaderError,
311   - ConfigParser.ParsingError):
  291 + # Do not reading project status from the config file, since there
  292 + # isn't a recover session tool in InVesalius yet.
  293 + self.project_status = 3
312 294  
313   - if (self.RecoveryConfigFile()):
314   - self.ReadSession()
315   - return True
316   - else:
317   - return False
  295 + def _read_cfg_from_ini(self, cfg_filename):
  296 + f = codecs.open(cfg_filename, 'rb', SESSION_ENCODING)
  297 + config = ConfigParser.ConfigParser()
  298 + config.readfp(f)
  299 + f.close()
  300 +
  301 + self.mode = config.getint('session', 'mode')
  302 + # Do not reading project status from the config file, since there
  303 + # isn't a recover sessession tool in InVesalius
  304 + #self.project_status = int(config.get('session', 'status'))
  305 + self.debug = config.getboolean('session','debug')
  306 + self.language = config.get('session','language')
  307 + recent_projects = eval(config.get('project','recent_projects'))
  308 + self.recent_projects = [list(rp) for rp in recent_projects]
  309 + self.homedir = config.get('paths','homedir')
  310 + self.tempdir = config.get('paths','tempdir')
  311 + self.last_dicom_folder = config.get('paths','last_dicom_folder')
  312 +
  313 + # if not(sys.platform == 'win32'):
  314 + # self.last_dicom_folder = self.last_dicom_folder.decode('utf-8')
  315 +
  316 + self.surface_interpolation = config.getint('session', 'surface_interpolation')
  317 + self.slice_interpolation = config.getint('session', 'slice_interpolation')
  318 +
  319 + self.rendering = config.getint('session', 'rendering')
  320 + self.random_id = config.getint('session','random_id')
318 321  
319   - except(ConfigParser.NoOptionError):
320   - #Added to fix new version compatibility
321   - self.surface_interpolation = 0
322   - self.slice_interpolation = 0
323   - self.rendering = 0
324   - self.random_id = randint(0,pow(10,16))
  322 + def ReadSession(self):
  323 + try:
  324 + self._read_cfg_from_json(USER_INV_CFG_PATH)
  325 + except Exception as e1:
  326 + debug(e1)
325 327 try:
326   - self.WriteSessionFile()
327   - except AttributeError:
  328 + self._read_cfg_from_ini(OLD_USER_INV_CFG_PATH)
  329 + except Exception as e2:
  330 + debug(e2)
328 331 return False
329   - return True
  332 +
  333 + self.WriteSessionFile()
  334 + return True
... ...
invesalius/utils.py
... ... @@ -394,21 +394,14 @@ def UpdateCheck():
394 394 #msgdlg.Destroy()
395 395  
396 396 print("Checking updates...")
397   -
  397 +
398 398 # Check if there is a language set
399 399 #import invesalius.i18n as i18n import invesalius.session as ses
400 400 session = ses.Session()
401 401 install_lang = 0
402   - if session.ReadLanguage():
403   - lang = session.GetLanguage()
404   - #if (lang != "False"):
405   - #_ = i18n.InstallLanguage(lang)
406   - #install_lang = 1
407   - #if (install_lang==0):
408   - #return
409   - if session.ReadRandomId():
410   - random_id = session.GetRandomId()
411   -
  402 + lang = session.GetLanguage()
  403 + random_id = session.GetRandomId()
  404 + if lang:
412 405 # Fetch update data from server
413 406 import invesalius.constants as const
414 407 url = "https://www.cti.gov.br/dt3d/invesalius/update/checkupdate.php"
... ...