* src/ArgHandler.py: Adapt to recent changes.

* src/BasicUtils.py (update_empty): Clean up callback.
	* src/GrampsDb/_ReadGedcom.py: Clean up callback.


svn: r6700
This commit is contained in:
Alex Roitman 2006-05-18 01:02:52 +00:00
parent d95f546782
commit ae8ec93201
6 changed files with 66 additions and 93 deletions

View File

@ -1,4 +1,7 @@
2006-05-17 Alex Roitman <shura@gramps-project.org> 2006-05-17 Alex Roitman <shura@gramps-project.org>
* src/ArgHandler.py: Adapt to recent changes.
* src/BasicUtils.py (update_empty): Clean up callback.
* src/GrampsDb/_ReadGedcom.py: Clean up callback.
* src/GrampsDb/_GrampsDbBase.py (DbState.change_database_noclose): * src/GrampsDb/_GrampsDbBase.py (DbState.change_database_noclose):
Add new method. Add new method.
* src/Makefile.am (gdir_PYTHON): Ship new file. * src/Makefile.am (gdir_PYTHON): Ship new file.

View File

@ -249,21 +249,6 @@ class ArgHandler:
options_str = options[opt_ix+1][1] options_str = options[opt_ix+1][1]
self.actions.append((action,options_str)) self.actions.append((action,options_str))
#-------------------------------------------------------------------------
#
# open data in native format
#
#-------------------------------------------------------------------------
def auto_save_load(self,filename):
filename = os.path.normpath(os.path.abspath(filename))
filetype = Mime.get_type(filename)
if filetype in (const.app_gramps,
const.app_gramps_xml,
const.app_gedcom):
return self.vm.open_native(filename,filetype)
else:
return 0
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Overall argument handler: # Overall argument handler:
@ -292,10 +277,11 @@ class ArgHandler:
elif filetype == const.app_gramps_xml: elif filetype == const.app_gramps_xml:
print "Type: GRAMPS XML database" print "Type: GRAMPS XML database"
if self.auto_save_load(filename): try:
self.vm.read_recent_file(filename,filetype)
print "Opened successfully!" print "Opened successfully!"
success = True success = True
else: except:
print "Cannot open %s. Exiting..." print "Cannot open %s. Exiting..."
elif filetype in (const.app_gramps_package,): elif filetype in (const.app_gramps_package,):
QuestionDialog.OkDialog( _("Opening non-native format"), QuestionDialog.OkDialog( _("Opening non-native format"),
@ -327,7 +313,8 @@ class ArgHandler:
os._exit(1) os._exit(1)
if success: if success:
# Add the file to the recent items # Add the file to the recent items
RecentFiles.recent_files(filename,filetype) #RecentFiles.recent_files(filename,filetype)
pass
else: else:
os._exit(1) os._exit(1)
return return
@ -344,20 +331,24 @@ class ArgHandler:
filename = os.path.abspath(os.path.expanduser(name)) filename = os.path.abspath(os.path.expanduser(name))
if format == 'grdb': if format == 'grdb':
filetype = const.app_gramps
print "Type: GRAMPS database" print "Type: GRAMPS database"
elif format == 'gedcom': elif format == 'gedcom':
filetype = const.app_gedcom
print "Type: GEDCOM" print "Type: GEDCOM"
elif format == 'gramps-xml': elif format == 'gramps-xml':
filetype = const.app_gramps_xml
print "Type: GRAMPS XML" print "Type: GRAMPS XML"
else: else:
print "Unknown file type: %s" % format print "Unknown file type: %s" % format
print "Exiting..." print "Exiting..."
os._exit(1) os._exit(1)
if self.auto_save_load(filename): try:
self.vm.read_recent_file(filename,filetype)
print "Opened successfully!" print "Opened successfully!"
success = True success = True
else: except:
print "Error opening the file." print "Error opening the file."
print "Exiting..." print "Exiting..."
os._exit(1) os._exit(1)
@ -385,7 +376,7 @@ class ArgHandler:
if os.path.isfile(os.path.join(self.impdir_path,fn)): if os.path.isfile(os.path.join(self.impdir_path,fn)):
os.remove(os.path.join(self.impdir_path,fn)) os.remove(os.path.join(self.impdir_path,fn))
self.vm.load_database(self.imp_db_path) self.vm.db_loader.read_file(self.imp_db_path,const.app_gramps)
for imp in self.imports: for imp in self.imports:
print "Importing: file %s, format %s." % imp print "Importing: file %s, format %s." % imp
@ -419,7 +410,9 @@ class ArgHandler:
## if self.imports: ## if self.imports:
## self.parent.import_tool_callback() ## self.parent.import_tool_callback()
elif Config.get(Config.RECENT_FILE) and Config.get(Config.AUTOLOAD): elif Config.get(Config.RECENT_FILE) and Config.get(Config.AUTOLOAD):
self.auto_save_load(Config.get(Config.RECENT_FILE)) rf = Config.get(Config.RECENT_FILE)
filetype = Mime.get_type(rf)
self.vm.read_recent_file(rf,filetype)
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -435,20 +428,16 @@ class ArgHandler:
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
try: try:
GrampsDb.gramps_db_reader_factory(const.app_gramps)( GrampsDb.gramps_db_reader_factory(const.app_gramps)(
self.state.db,filename,None) self.state.db,filename,empty)
except: except:
print "Error importing %s" % filename print "Error importing %s" % filename
os._exit(1) os._exit(1)
elif format == 'gedcom': elif format == 'gedcom':
from GrampsDb import GedcomParser
filename = os.path.normpath(os.path.abspath(filename)) filename = os.path.normpath(os.path.abspath(filename))
try: try:
np = ReadGedcom.NoteParser(filename, False, None) # Cheating here to use default encoding
g = ReadGedcom.GedcomParser(self.parent.db,filename,None,None, from GrampsDb._ReadGedcom import import2
np.get_map(),np.get_lines()) import2(self.state.db,filename,None,None,False)
g = GedcomParser(self.state.db,filename,None)
g.parse_gedcom_file()
del g
except: except:
print "Error importing %s" % filename print "Error importing %s" % filename
os._exit(1) os._exit(1)
@ -521,7 +510,7 @@ class ArgHandler:
print "Invalid format: %s" % format print "Invalid format: %s" % format
os._exit(1) os._exit(1)
if not self.cl: if not self.cl:
return self.vm.post_load(self.imp_db_path) return self.vm.post_load()
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -769,3 +758,6 @@ def add_grdb_filter(chooser):
def read_pkg(filename): def read_pkg(filename):
print "FIXME: This is not re-implemented yet." print "FIXME: This is not re-implemented yet."
def empty(val):
pass

View File

@ -67,7 +67,7 @@ class UpdateCallback:
def set_total(self,total): def set_total(self,total):
self.total = total self.total = total
def update_empty(self): def update_empty(self,count=None):
pass pass
def update_real(self,count=None): def update_real(self,count=None):

View File

@ -92,33 +92,10 @@ class DbLoader:
format_list = [const.app_gramps,const.app_gramps_xml,const.app_gedcom] format_list = [const.app_gramps,const.app_gramps_xml,const.app_gedcom]
# Add more data type selections if opening existing db
for data in import_list:
mime_filter = data[1]
mime_type = data[2]
native_format = data[2]
format_name = data[3]
if not native_format:
choose.add_filter(mime_filter)
format_list.append(mime_type)
_KNOWN_FORMATS[mime_type] = format_name
(box, type_selector) = format_maker(format_list) (box, type_selector) = format_maker(format_list)
choose.set_extra_widget(box) choose.set_extra_widget(box)
# Suggested folder: try last open file, last import, last export, choose.set_current_folder(get_default_dir())
# then home.
default_dir = os.path.split(Config.get(Config.RECENT_FILE))[0] \
+ os.path.sep
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_IMPORT_DIR)
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_EXPORT_DIR)
if len(default_dir)<=1:
default_dir = '~/'
choose.set_current_folder(default_dir)
response = choose.run() response = choose.run()
if response == gtk.RESPONSE_OK: if response == gtk.RESPONSE_OK:
filename = choose.get_filename() filename = choose.get_filename()
@ -157,16 +134,7 @@ class DbLoader:
add_all_files_filter(choose) add_all_files_filter(choose)
add_grdb_filter(choose) add_grdb_filter(choose)
# Suggested folder: try last open file, import, then last export, default_dir = get_default_dir()
# then home.
default_dir = os.path.split(Config.get(Config.RECENT_FILE))[0] + os.path.sep
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_IMPORT_DIR)
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_EXPORT_DIR)
if len(default_dir)<=1:
default_dir = '~/'
new_filename = Utils.get_new_filename('grdb', default_dir) new_filename = Utils.get_new_filename('grdb', default_dir)
choose.set_current_folder(default_dir) choose.set_current_folder(default_dir)
@ -213,17 +181,7 @@ class DbLoader:
(box, type_selector) = format_maker(format_list) (box, type_selector) = format_maker(format_list)
choose.set_extra_widget(box) choose.set_extra_widget(box)
# Suggested folder: try last open file, import, then last export, default_dir = get_default_dir()
# then home.
default_dir = os.path.split(Config.get(Config.RECENT_FILE))[0] \
+ os.path.sep
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_IMPORT_DIR)
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_EXPORT_DIR)
if len(default_dir)<=1:
default_dir = '~/'
new_filename = Utils.get_new_filename('grdb', default_dir) new_filename = Utils.get_new_filename('grdb', default_dir)
choose.set_current_folder(default_dir) choose.set_current_folder(default_dir)
@ -313,17 +271,15 @@ class DbLoader:
# then home. # then home.
default_dir = Config.get(Config.RECENT_IMPORT_DIR) default_dir = Config.get(Config.RECENT_IMPORT_DIR)
if len(default_dir)<=1: if len(default_dir)<=1:
base_path = os.path.split(Config.get(Config.RECENT_FILE))[0] default_dir = get_default_dir()
default_dir = base_path + os.path.sep
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_EXPORT_DIR)
if len(default_dir)<=1:
default_dir = '~/'
choose.set_current_folder(default_dir) choose.set_current_folder(default_dir)
response = choose.run() response = choose.run()
if response == gtk.RESPONSE_OK: if response == gtk.RESPONSE_OK:
filename = choose.get_filename() filename = choose.get_filename()
if self.check_errors(filename):
return False
filetype = type_selector.get_value() filetype = type_selector.get_value()
if filetype == 'auto': if filetype == 'auto':
try: try:
@ -408,15 +364,14 @@ class DbLoader:
def read_file(self, filename, filetype): def read_file(self, filename, filetype):
""" """
This method takes care of enabling/disabling/emittin signals, This method takes care of changing database, and loading the data.
changing database, and loading the data.
This method should only return on success. This method should only return on success.
Returning on failure makes no sense, because we cannot recover, Returning on failure makes no sense, because we cannot recover,
since database has already beeen changed. since database has already beeen changed.
Therefore, any errors should raise exceptions. Therefore, any errors should raise exceptions.
We return with the disabled signals. The post-load routine On success, return with the disabled signals. The post-load routine
should enable signals, as well as finish up with other UI goodies. should enable signals, as well as finish up with other UI goodies.
""" """
@ -428,8 +383,8 @@ class DbLoader:
else: else:
mode = "w" mode = "w"
factory = GrampsDb.gramps_db_factory dbclass = GrampsDb.gramps_db_factory(db_type = filetype)
self.dbstate.change_database(factory(db_type = filetype)()) self.dbstate.change_database(dbclass())
self.dbstate.db.disable_signals() self.dbstate.db.disable_signals()
self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
@ -447,7 +402,6 @@ class DbLoader:
old_database = self.dbstate.db old_database = self.dbstate.db
self.dbstate.change_database_noclose(new_database) self.dbstate.change_database_noclose(new_database)
# self.dbstate.emit('database-changed', (new_database,) )
old_database.disable_signals() old_database.disable_signals()
new_database.disable_signals() new_database.disable_signals()
@ -466,7 +420,30 @@ class DbLoader:
dialog.destroy() dialog.destroy()
self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
self.uistate.progress.show() self.uistate.progress.show()
importer(self.dbstate.db, filename, self.uistate.pulse_progressbar)
try:
importer(self.dbstate.db, filename, self.uistate.pulse_progressbar)
dirname = os.path.dirname(filename) + os.path.sep
Config.set(Config.RECENT_IMPORT_DIR,dirname)
except Exception:
log.error("Failed to import database.", exc_info=True)
#-------------------------------------------------------------------------
#
# default dir selection
#
#-------------------------------------------------------------------------
def get_default_dir():
# Suggested folder: try last open file, last import, last export,
# then home.
default_dir = os.path.dirname(Config.get(Config.RECENT_FILE)) + os.path.sep
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_IMPORT_DIR)
if len(default_dir)<=1:
default_dir = Config.get(Config.RECENT_EXPORT_DIR)
if len(default_dir)<=1:
default_dir = '~/'
return default_dir
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -613,7 +613,6 @@ class GedcomParser(UpdateCallback):
self.error_count = 0 self.error_count = 0
amap = Utils.personalConstantAttributes amap = Utils.personalConstantAttributes
self.current = self.interval
self.attrs = amap.values() self.attrs = amap.values()
self.gedattr = {} self.gedattr = {}
@ -735,8 +734,6 @@ class GedcomParser(UpdateCallback):
t = time.time() - t t = time.time() - t
msg = _('Import Complete: %d seconds') % t msg = _('Import Complete: %d seconds') % t
if self.callback:
self.callback(100)
self.db.transaction_commit(self.trans,_("GEDCOM import")) self.db.transaction_commit(self.trans,_("GEDCOM import"))
self.db.enable_signals() self.db.enable_signals()
self.db.request_rebuild() self.db.request_rebuild()

View File

@ -721,6 +721,10 @@ class ViewManager:
self.window.window.set_cursor(None) self.window.window.set_cursor(None)
def post_load_newdb(self, filename, filetype): def post_load_newdb(self, filename, filetype):
if not filename:
return
# This method is for UI stuff when the database has changed. # This method is for UI stuff when the database has changed.
# Window title, recent files, etc related to new file. # Window title, recent files, etc related to new file.