* src/ViewManager.py: allow for info dialog after import
	* src/gen/db/base.py: find returns if new object or not
	* src/gen/db/dbdir.py: find returns if new object or not
	* src/plugins/ImportGeneWeb.py: allow multiple mime types
	* src/plugins/ImportvCard.py: allow multiple mime types
	* src/plugins/ReadGrdb.py: allow multiple mime types
	* src/plugins/ReadPkg.py: allow multiple mime types
	* src/plugins/ImportCSV.py: allow multiple mime types
	* src/DbManager.py: use family tree string, not database
	* src/glade/gramps.glade: add info dialog
	* src/QuestionDialog.py: add info dialog, clean up set transient errors
	* src/GrampsDbUtils/_GrampsDbWriteXML.py: improve comment
	* src/GrampsDbUtils/_ReadXML.py: fix change dates problems, fix 
	 creation of empty objects in bookmarks, add info dialog, clean up
	 relative media import, remove unneeded parameters
	* src/GrampsDbUtils/_GrampsDbWRFactories.py: 
	* src/GrampsDbUtils/_GrampsBSDDB.py: allow multiple mime types
	* src/DbLoader.py: fix up import filters and some mime type issues



svn: r10138
This commit is contained in:
Benny Malengier
2008-02-28 22:32:40 +00:00
parent fefa36ad4e
commit b1561e5f78
17 changed files with 575 additions and 143 deletions

View File

@@ -69,10 +69,12 @@ import Errors
# Constants
#
#-------------------------------------------------------------------------
#connection between main mime type, name, and list of alternative mime types
_KNOWN_FORMATS = {
const.APP_GRAMPS : _('GRAMPS (grdb)'),
const.APP_GRAMPS_XML : _('GRAMPS XML'),
const.APP_GEDCOM : _('GEDCOM'),
const.APP_GRAMPS : [_('GRAMPS (grdb)'), []],
const.APP_GRAMPS_XML : [_('GRAMPS XML'), []],
const.APP_GEDCOM : [_('GEDCOM'), []],
}
OPEN_FORMATS = [const.APP_GRAMPS_XML, const.APP_GEDCOM]
@@ -86,6 +88,7 @@ class DbLoader:
def __init__(self, dbstate, uistate):
self.dbstate = dbstate
self.uistate = uistate
self.import_info = None
def import_file(self):
# First thing first: import is a batch transaction
@@ -112,24 +115,24 @@ class DbLoader:
choose_db_dialog.set_local_only(False)
# Always add automatic (match all files) filter
add_all_files_filter(choose_db_dialog)
add_grdb_filter(choose_db_dialog)
add_xml_filter(choose_db_dialog)
add_gedcom_filter(choose_db_dialog)
add_all_files_filter(choose_db_dialog) # *
#add_grdb_filter(choose_db_dialog) # .grdb no longer native!
add_xml_filter(choose_db_dialog) # .gramps
add_gedcom_filter(choose_db_dialog) # .ged
format_list = OPEN_FORMATS[:]
# Add more data type selections if opening existing db
for data in import_list:
mime_filter = data[1]
mime_type = data[2]
mime_types = data[2]
native_format = data[3]
format_name = data[4]
if not native_format:
choose_db_dialog.add_filter(mime_filter)
format_list.append(mime_type)
_KNOWN_FORMATS[mime_type] = format_name
format_list.append(mime_types[0])
_KNOWN_FORMATS[mime_types[0]] = [format_name, mime_types[1:]]
(box, type_selector) = format_maker(format_list)
choose_db_dialog.set_extra_widget(box)
@@ -166,17 +169,17 @@ class DbLoader:
continue
# First we try our best formats
if filetype in OPEN_FORMATS:
if filetype in OPEN_FORMATS or filetype in _KNOWN_FORMATS:
importer = GrampsDbUtils.gramps_db_reader_factory(filetype)
self.do_import(choose_db_dialog, importer, filename)
return True
# Then we try all the known plugins
(the_path, the_file) = os.path.split(filename)
Config.set(Config.RECENT_IMPORT_DIR, the_path)
for (importData, mime_filter, mime_type, native_format,
# Then we try all the known plugins
for (importData, mime_filter, mime_types, native_format,
format_name) in import_list:
if filetype == mime_type or the_file == mime_type:
if filetype in mime_types:
self.do_import(choose_db_dialog, importData, filename)
return True
@@ -281,12 +284,16 @@ class DbLoader:
def do_import(self, dialog, importer, filename):
self.import_info = None
dialog.destroy()
self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
self.uistate.progress.show()
try:
importer(self.dbstate.db, filename, self.uistate.pulse_progressbar)
#an importer can return an object with info, object.info_text()
#returns that info. Otherwise None is set to import_info
self.import_info = 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 UnicodeError, msg:
@@ -297,6 +304,16 @@ class DbLoader:
"encoding, and import again") + "\n\n %s" % msg)
except Exception:
_LOG.error("Failed to import database.", exc_info=True)
def import_info_text(self):
"""
On import the importer can construct an info object about the import.
If so, this method will return this text, otherwise the empty string
is returned
"""
if self.import_info is None:
return u""
return self.import_info.info_text()
#-------------------------------------------------------------------------
#
@@ -348,7 +365,7 @@ def add_grdb_filter(chooser):
Add a GRDB filter to the file chooser dialog.
"""
mime_filter = gtk.FileFilter()
mime_filter.set_name(_('GRAMPS databases'))
mime_filter.set_name(_('GRAMPS 2.x databases'))
mime_filter.add_mime_type(const.APP_GRAMPS)
chooser.add_filter(mime_filter)
@@ -409,7 +426,7 @@ def format_maker(formats):
format_list = [ ('auto', _('Automatically detected')) ]
for format in formats:
if _KNOWN_FORMATS.has_key(format):
format_list.append( (format, _KNOWN_FORMATS[format]) )
format_list.append( (format, _KNOWN_FORMATS[format][0]) )
type_selector = GrampsFormatWidget()
type_selector.set(format_list)