From c41939e96663bd0fba9da73dc22e2e708bd350fb Mon Sep 17 00:00:00 2001 From: Benny Malengier Date: Thu, 27 Sep 2012 09:18:34 +0000 Subject: [PATCH] 5934: How to fix invalid Database Path? svn: r20455 --- src/cli/clidbman.py | 36 ++++++++++++++++++++---------------- src/gui/configure.py | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/cli/clidbman.py b/src/cli/clidbman.py index 82dd2127c..b222fa678 100644 --- a/src/cli/clidbman.py +++ b/src/cli/clidbman.py @@ -195,26 +195,26 @@ class CLIDbManager(object): # make the default directory if it does not exist dbdir = os.path.expanduser(config.get('behavior.database-path')) dbdir = dbdir.encode(sys.getfilesystemencoding()) - make_dbdir(dbdir) + db_ok = make_dbdir(dbdir) self.current_names = [] - - for dpath in os.listdir(dbdir): - dirpath = os.path.join(dbdir, dpath) - path_name = os.path.join(dirpath, NAME_FILE) - if os.path.isfile(path_name): - name = file(path_name).readline().strip() + if db_ok: + for dpath in os.listdir(dbdir): + dirpath = os.path.join(dbdir, dpath) + path_name = os.path.join(dirpath, NAME_FILE) + if os.path.isfile(path_name): + name = file(path_name).readline().strip() - (tval, last) = time_val(dirpath) - (enable, stock_id) = self.icon_values(dirpath, self.active, - self.dbstate.db.is_open()) + (tval, last) = time_val(dirpath) + (enable, stock_id) = self.icon_values(dirpath, self.active, + self.dbstate.db.is_open()) - if (stock_id == 'gramps-lock'): - last = find_locker_name(dirpath) + if (stock_id == 'gramps-lock'): + last = find_locker_name(dirpath) - self.current_names.append( - (name, os.path.join(dbdir, dpath), path_name, - last, tval, enable, stock_id)) + self.current_names.append( + (name, os.path.join(dbdir, dpath), path_name, + last, tval, enable, stock_id)) self.current_names.sort() @@ -395,7 +395,11 @@ def make_dbdir(dbdir): os.makedirs(dbdir) except (IOError, OSError), msg: msg = unicode(str(msg), sys.getfilesystemencoding()) - LOG.error(_("Could not make database directory: ") + msg) + LOG.error(_("\nERROR: Wrong database path in Edit Menu->Preferences.\n" + "Open preferences and set correct database path.\n\n" + "Details: Could not make database directory:\n %s\n\n") % msg) + return False + return True def find_next_db_name(name_list): """ diff --git a/src/gui/configure.py b/src/gui/configure.py index aaf744623..ad4eaee52 100644 --- a/src/gui/configure.py +++ b/src/gui/configure.py @@ -1116,9 +1116,16 @@ class GrampsPreferences(ConfigureDialog): table.set_col_spacings(6) table.set_row_spacings(6) - self.add_entry(table, - _('Family Tree Database path'), - 0, 'behavior.database-path') + + self.dbpath_entry = gtk.Entry() + self.add_path_box(table, + _('Family Tree Database path'), + 0, self.dbpath_entry, config.get('behavior.database-path'), + self.set_dbpath, self.select_dbpath) + + #self.add_entry(table, + # _('Family Tree Database path'), + # 0, 'behavior.database-path') self.add_checkbox(table, _('Automatically load last family tree'), 1, 'behavior.autoload') @@ -1151,6 +1158,30 @@ class GrampsPreferences(ConfigureDialog): self.path_entry.set_text(val) f.destroy() + def set_dbpath(self, *obj): + path = self.dbpath_entry.get_text().strip() + config.set('behavior.database-path', path) + + def select_dbpath(self, *obj): + f = gtk.FileChooserDialog( + _("Select database directory"), + action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, + buttons=(gtk.STOCK_CANCEL, + gtk.RESPONSE_CANCEL, + gtk.STOCK_APPLY, + gtk.RESPONSE_OK)) + dbpath = config.get('behavior.database-path') + if not dbpath: + dbpath = os.path.join(os.environ['HOME'], '.gramps','grampsdb') + f.set_current_folder(os.path.dirname(dbpath)) + + status = f.run() + if status == gtk.RESPONSE_OK: + val = Utils.get_unicode_path_from_file_chooser(f.get_filename()) + if val: + self.dbpath_entry.set_text(val) + f.destroy() + def update_idformat_entry(self, obj, constant): config.set(constant, unicode(obj.get_text())) self.dbstate.db.set_prefixes(