* configure.in: Bump up the version number.
* src/gramps.py: Pass complete argument string. * src/gramps_main.py: Pass popt table to gnome_init(). Always enable argument handling. (read_xml,read_pkg): Add functions. * src/const.py.in: Define popt table, add all gnome options. * src/ArgHandler.py: Add long options for gramps-specific options. Add handling for the first filename argument. Use 'gramps-xml' to denote old gramps (XML) format. * src/DbPrompter.py: Add hint for the filename. * src/plugins/ReadNative.py: Cosmetic changes. * src/plugins/ReadPkg.py: Cosmetic changes. * src/plugins/WritePkg.py: Typo. * src/data/gramps.xml: Add mime type for gramps package. * src/data/gramps.applications: Add gramps package to the list. * src/data/Makefile.am: Typo. * src/gramps_main.py: removed new database info message * src/plugins/ReadGedcom.py: Fixed typos preventing import. (i.e. set_type instead of SetType, etc.) * Release: Version 1.1.0 "And now for something completely different" released. svn: r3218
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
			
		||||
#
 | 
			
		||||
# Gramps - a GTK+/GNOME based genealogy program
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2000-2003  Donald N. Allingham
 | 
			
		||||
# Copyright (C) 2000-2004  Donald N. Allingham
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
@@ -43,6 +43,10 @@ import getopt
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
import const
 | 
			
		||||
import ReadXML
 | 
			
		||||
import GrampsMime
 | 
			
		||||
import DbPrompter
 | 
			
		||||
import QuestionDialog
 | 
			
		||||
import GrampsCfg
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
@@ -50,54 +54,96 @@ import ReadXML
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
class ArgHandler:
 | 
			
		||||
    """
 | 
			
		||||
    This class is responsible for handling command line arguments (if any)
 | 
			
		||||
    given to gramps. The valid arguments are:
 | 
			
		||||
 | 
			
		||||
    FILE                :   filename to open. 
 | 
			
		||||
                            All following arguments will be ignored.
 | 
			
		||||
    -i, --import=FILE   :   filename to import.
 | 
			
		||||
    -o, --output=FILE   :   filename to export.
 | 
			
		||||
    -f, --format=FORMAT :   format of the file preceding this option.
 | 
			
		||||
    
 | 
			
		||||
    If the filename (no flags) is specified, the interactive session is 
 | 
			
		||||
    launched using data from filename. If the filename is not a natvive (grdb) format, dialog will
 | 
			
		||||
    be presented to set up a grdb database.
 | 
			
		||||
    
 | 
			
		||||
    If no filename or -i option is given, a new interactive session (empty
 | 
			
		||||
    database) is launched, since no data is goven anyway.
 | 
			
		||||
    
 | 
			
		||||
    If -i option is given, but no -o or -a options are given, and interactive
 | 
			
		||||
    session is launched with the FILE (specified with -i). 
 | 
			
		||||
    
 | 
			
		||||
    If both -i and -o or -a are given, interactive session will not be 
 | 
			
		||||
    launched. 
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    def __init__(self,parent,args):
 | 
			
		||||
        self.parent = parent
 | 
			
		||||
        self.handle_args(args)
 | 
			
		||||
        self.args = args
 | 
			
		||||
 | 
			
		||||
        self.open = None
 | 
			
		||||
        self.exports = []
 | 
			
		||||
        self.actions = []
 | 
			
		||||
        self.imports = []
 | 
			
		||||
 | 
			
		||||
        self.parse_args()
 | 
			
		||||
        self.handle_args()
 | 
			
		||||
 | 
			
		||||
    def parse_args(self):
 | 
			
		||||
        """
 | 
			
		||||
        Fill in lists with open, exports, imports, and actions options.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
    def handle_args(self,args):
 | 
			
		||||
        try:
 | 
			
		||||
            options,leftargs = getopt.getopt(args,
 | 
			
		||||
            options,leftargs = getopt.getopt(self.args[1:],
 | 
			
		||||
                        const.shortopts,const.longopts)
 | 
			
		||||
        except getopt.GetoptError,msg:
 | 
			
		||||
            print "Error: %s. Exiting." % msg
 | 
			
		||||
            os._exit(1)
 | 
			
		||||
        except:
 | 
			
		||||
            print "Error parsing arguments: %s " % args
 | 
			
		||||
        except getopt.GetoptError:
 | 
			
		||||
            # return without filling anything if we could not parse the args
 | 
			
		||||
            print "Error parsing arguments: %s " % self.args[1:]
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        if leftargs:
 | 
			
		||||
            print "Unrecognized option: %s" % leftargs[0]
 | 
			
		||||
            os._exit(1)
 | 
			
		||||
        exports = []
 | 
			
		||||
        actions = []
 | 
			
		||||
        imports = []
 | 
			
		||||
            # if there were an argument without option, use it as a file to 
 | 
			
		||||
            # open and return
 | 
			
		||||
            self.open = leftargs[0]
 | 
			
		||||
            print "Trying to open: %s ..." % leftargs[0]
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        for opt_ix in range(len(options)):
 | 
			
		||||
            o = options[opt_ix][0][1]
 | 
			
		||||
            if o == '-':
 | 
			
		||||
                continue
 | 
			
		||||
            elif o == 'i':
 | 
			
		||||
                fname = options[opt_ix][1]
 | 
			
		||||
                if opt_ix<len(options)-1 and options[opt_ix+1][0][1]=='f': 
 | 
			
		||||
            o,v = options[opt_ix]
 | 
			
		||||
            if o in ( '-i', '--import'):
 | 
			
		||||
                fname = v
 | 
			
		||||
                ftype = GrampsMime.get_type(os.path.abspath(os.path.expanduser(fname)))
 | 
			
		||||
                if opt_ix<len(options)-1 \
 | 
			
		||||
                            and options[opt_ix+1][0] in ( '-f', '--format'): 
 | 
			
		||||
                    format = options[opt_ix+1][1]
 | 
			
		||||
                    if format not in [ 'gedcom', 'gramps', 'gramps-pkg' ]:
 | 
			
		||||
                    if format not in ('gedcom','gramps-xml','gramps-pkg','grdb'):
 | 
			
		||||
                        print "Invalid format:  %s" % format
 | 
			
		||||
                        os._exit(1)
 | 
			
		||||
                elif fname[-3:].upper()== "GED":
 | 
			
		||||
                        print "Ignoring input file:  %s" % fname
 | 
			
		||||
                        continue
 | 
			
		||||
                elif ftype == "application/x-gedcom":
 | 
			
		||||
                    format = 'gedcom'
 | 
			
		||||
                elif fname[-3:].upper() == "TGZ":
 | 
			
		||||
                elif ftype == "application/x-gramps-package":
 | 
			
		||||
                    format = 'gramps-pkg'
 | 
			
		||||
                elif os.path.isdir(fname):
 | 
			
		||||
                    format = 'gramps'
 | 
			
		||||
                elif ftype == "x-directory/normal":
 | 
			
		||||
                    format = 'gramps-xml'
 | 
			
		||||
                elif ftype == "application/x-gramps":
 | 
			
		||||
                    format = 'grdb'
 | 
			
		||||
                else:
 | 
			
		||||
                    print "Unrecognized format for input file %s" % fname
 | 
			
		||||
                    os._exit(1)
 | 
			
		||||
                imports.append((fname,format))
 | 
			
		||||
            elif o == 'o':
 | 
			
		||||
                outfname = options[opt_ix][1]
 | 
			
		||||
                if opt_ix<len(options)-1 and options[opt_ix+1][0][1]=='f': 
 | 
			
		||||
                    print "Ignoring input file:  %s" % fname
 | 
			
		||||
                    continue
 | 
			
		||||
                self.imports.append((fname,format))
 | 
			
		||||
            elif o in ( '-o', '--output' ):
 | 
			
		||||
                outfname = v
 | 
			
		||||
                if opt_ix<len(options)-1 \
 | 
			
		||||
                            and options[opt_ix+1][0] in ( '-f', '--format'): 
 | 
			
		||||
                    outformat = options[opt_ix+1][1]
 | 
			
		||||
                    if outformat not in [ 'gedcom', 'gramps', 'gramps-pkg', 'iso', 'wft' ]:
 | 
			
		||||
                    if outformat not in ('gedcom','gramps-xml','gramps-pkg','grdb','iso','wft'):
 | 
			
		||||
                        print "Invalid format:  %s" % outformat
 | 
			
		||||
                        os._exit(1)
 | 
			
		||||
                        print "Ignoring output file:  %s" % outfname
 | 
			
		||||
                        continue
 | 
			
		||||
                elif outfname[-3:].upper() == "GED":
 | 
			
		||||
                    outformat = 'gedcom'
 | 
			
		||||
                elif outfname[-3:].upper() == "TGZ":
 | 
			
		||||
@@ -110,69 +156,118 @@ class ArgHandler:
 | 
			
		||||
                            os.makedirs(outfname,0700)
 | 
			
		||||
                        except:
 | 
			
		||||
                            print "Cannot create directory %s" % outfname
 | 
			
		||||
                            os._exit(1)
 | 
			
		||||
                    outformat = 'gramps'
 | 
			
		||||
                            print "Ignoring output file:  %s" % outfname
 | 
			
		||||
                            continue
 | 
			
		||||
                    outformat = 'gramps-xml'
 | 
			
		||||
                elif fname[-3:].upper() == "GRDB":
 | 
			
		||||
                    format = 'grdb'
 | 
			
		||||
                else:
 | 
			
		||||
                    print "Unrecognized format for output file %s" % outfname
 | 
			
		||||
                    os._exit(1)
 | 
			
		||||
                exports.append((outfname,outformat))
 | 
			
		||||
            elif o == 'a':
 | 
			
		||||
                action = options[opt_ix][1]
 | 
			
		||||
                if action not in [ 'check', 'summary' ]:
 | 
			
		||||
                    print "Unknown action: %s." % action
 | 
			
		||||
                    os._exit(1)
 | 
			
		||||
                actions.append(action)
 | 
			
		||||
                    print "Ignoring output file:  %s" % outfname
 | 
			
		||||
                    continue
 | 
			
		||||
                self.exports.append((outfname,outformat))
 | 
			
		||||
            elif o in ( '-a', '--action' ):
 | 
			
		||||
                action = v
 | 
			
		||||
                if action not in ( 'check', 'summary' ):
 | 
			
		||||
                    print "Unknown action: %s. Ignoring." % action
 | 
			
		||||
                    continue
 | 
			
		||||
                self.actions.append(action)
 | 
			
		||||
            
 | 
			
		||||
        if imports:
 | 
			
		||||
            self.parent.cl = bool(exports or actions)
 | 
			
		||||
            # Create dir for imported database(s)
 | 
			
		||||
            self.impdir_path = os.path.expanduser("~/.gramps/import" )
 | 
			
		||||
            if not os.path.isdir(self.impdir_path):
 | 
			
		||||
                try:
 | 
			
		||||
                    os.mkdir(self.impdir_path,0700)
 | 
			
		||||
                except:
 | 
			
		||||
                    print "Could not create import directory %s. Exiting." \
 | 
			
		||||
                        % self.impdir_path 
 | 
			
		||||
                    os._exit(1)
 | 
			
		||||
            elif not os.access(self.impdir_path,os.W_OK):
 | 
			
		||||
                print "Import directory %s is not writable. Exiting." \
 | 
			
		||||
                    % self.impdir_path 
 | 
			
		||||
    def handle_args(self):
 | 
			
		||||
        """
 | 
			
		||||
        Depending on the given arguments, import or open data, launch
 | 
			
		||||
        session, write files, and/or perform actions.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        if self.open:
 | 
			
		||||
            # Filename was given. Open a session with that file. Forget
 | 
			
		||||
            # the rest of given arguments.
 | 
			
		||||
            filename = os.path.abspath(os.path.expanduser(self.open))
 | 
			
		||||
            filetype = GrampsMime.get_type(filename) 
 | 
			
		||||
            if filetype == "application/x-gramps":
 | 
			
		||||
                print "Type: GRAMPS database"
 | 
			
		||||
                if self.parent.auto_save_load(filename):
 | 
			
		||||
                    print "Opened successfully!"
 | 
			
		||||
                else:
 | 
			
		||||
                    print "Cannot open %s. Exiting..."
 | 
			
		||||
            elif filetype == "application/x-gedcom":
 | 
			
		||||
                print "Type: GEDCOM"
 | 
			
		||||
                QuestionDialog.OkDialog( _("Opening non-native format"), 
 | 
			
		||||
                            _("New gramps database has to be set up when opening non-native formats. The following dialog will let you select the new database."),
 | 
			
		||||
                            self.parent.topWindow)
 | 
			
		||||
                DbPrompter.DbPrompter(self.parent,1,self.parent.topWindow,filename)
 | 
			
		||||
                self.parent.read_gedcom(filename)
 | 
			
		||||
            elif filetype == "x-directory/normal":
 | 
			
		||||
                print "Type: GRAMPS XML"
 | 
			
		||||
                QuestionDialog.OkDialog( _("Opening non-native format"), 
 | 
			
		||||
                            _("New gramps database has to be set up when opening non-native formats. The following dialog will let you select the new database."),
 | 
			
		||||
                            self.parent.topWindow)
 | 
			
		||||
                DbPrompter.DbPrompter(self.parent,1,self.parent.topWindow,filename)
 | 
			
		||||
                self.parent.read_xml(filename)
 | 
			
		||||
            elif filetype == "application/x-gramps-package":
 | 
			
		||||
                print "Type: GRAMPS package"
 | 
			
		||||
                QuestionDialog.OkDialog( _("Opening non-native format"), 
 | 
			
		||||
                            _("New gramps database has to be set up when opening non-native formats. The following dialog will let you select the new database."),
 | 
			
		||||
                            self.parent.topWindow)
 | 
			
		||||
                DbPrompter.DbPrompter(self.parent,1,self.parent.topWindow,filename)
 | 
			
		||||
                self.parent.read_pkg(filename)
 | 
			
		||||
            else:
 | 
			
		||||
                print "Unknown file type: %s" % filetype
 | 
			
		||||
                QuestionDialog.ErrorDialog( 
 | 
			
		||||
                            _("Cannot open file: unknown type"),
 | 
			
		||||
                            _('File type "%s" is unknown to GRAMPS.\n\nValid types are: GRAMPS database, GRAMPS XML, GRAMPS package, and GEDCOM.') % filetype,
 | 
			
		||||
                            self.parent.topWindow)
 | 
			
		||||
                print "Exiting..." 
 | 
			
		||||
                os._exit(1)
 | 
			
		||||
            # and clean it up before use
 | 
			
		||||
            files = os.listdir(self.impdir_path) ;
 | 
			
		||||
            for fn in files:
 | 
			
		||||
                if os.path.isfile(os.path.join(self.impdir_path,fn)):
 | 
			
		||||
                    os.remove(os.path.join(self.impdir_path,fn))
 | 
			
		||||
            self.parent.clear_database()
 | 
			
		||||
            self.parent.db.set_save_path(self.impdir_path)
 | 
			
		||||
            for imp in imports:
 | 
			
		||||
                print "Importing: file %s, format %s." % (imp[0],imp[1])
 | 
			
		||||
                            
 | 
			
		||||
            return
 | 
			
		||||
           
 | 
			
		||||
        if self.imports:
 | 
			
		||||
            self.parent.cl = bool(self.exports or self.actions)
 | 
			
		||||
            # Create file for imported database(s)
 | 
			
		||||
            self.imp_db_path = os.path.expanduser("~/.gramps/import_db" )
 | 
			
		||||
            # remove if it exists
 | 
			
		||||
            if os.path.isdir(self.imp_db_path):
 | 
			
		||||
                os.removedirs(self.imp_db_path)
 | 
			
		||||
            elif os.path.isfile(self.imp_db_path):
 | 
			
		||||
                os.remove(self.imp_db_path)
 | 
			
		||||
            self.parent.load_database(self.imp_db_path)
 | 
			
		||||
 | 
			
		||||
            for imp in self.imports:
 | 
			
		||||
                print "Importing: file %s, format %s." % imp #(imp[0],imp[1])
 | 
			
		||||
                self.cl_import(imp[0],imp[1])
 | 
			
		||||
        else:
 | 
			
		||||
            print "No data was given. Launching interactive session."
 | 
			
		||||
        elif len(self.args) > 1:
 | 
			
		||||
            print "No data was given -- will launch interactive session."
 | 
			
		||||
            print "To use in the command-line mode,", \
 | 
			
		||||
                "supply at least one input file to process."
 | 
			
		||||
            print "Launching interactive session..."
 | 
			
		||||
 | 
			
		||||
        if self.parent.cl:
 | 
			
		||||
            for expt in exports:
 | 
			
		||||
                print "Exporting: file %s, format %s." % (expt[0],expt[1])
 | 
			
		||||
            for expt in self.exports:
 | 
			
		||||
                print "Exporting: file %s, format %s." % expt #(expt[0],expt[1])
 | 
			
		||||
                self.cl_export(expt[0],expt[1])
 | 
			
		||||
 | 
			
		||||
            for action in actions:
 | 
			
		||||
            for action in self.actions:
 | 
			
		||||
                print "Performing action: %s." % action
 | 
			
		||||
                self.cl_action(action)
 | 
			
		||||
            
 | 
			
		||||
            print "Cleaning up."
 | 
			
		||||
            # clean import dir up after use
 | 
			
		||||
            files = os.listdir(self.impdir_path) ;
 | 
			
		||||
            for fn in files:
 | 
			
		||||
                if os.path.isfile(os.path.join(self.impdir_path,fn)):
 | 
			
		||||
                    os.remove(os.path.join(self.impdir_path,fn))
 | 
			
		||||
            # remove import db after use
 | 
			
		||||
            os.remove(self.imp_db_path)
 | 
			
		||||
            print "Exiting."
 | 
			
		||||
            os._exit(0)
 | 
			
		||||
        elif GrampsCfg.lastfile and GrampsCfg.autoload:
 | 
			
		||||
            if self.parent.auto_save_load(GrampsCfg.lastfile) == 0:
 | 
			
		||||
                DbPrompter.DbPrompter(self.parent,0,self.parent.topWindow)
 | 
			
		||||
        else:
 | 
			
		||||
            DbPrompter.DbPrompter(self.parent,0,self.parent.topWindow)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def cl_import(self,filename,format):
 | 
			
		||||
        """
 | 
			
		||||
        Command-line import routine. Try to import filename using the format.
 | 
			
		||||
        Any errors will cause the os._exit(1) call.
 | 
			
		||||
        """
 | 
			
		||||
        if format == 'gedcom':
 | 
			
		||||
            import ReadGedcom
 | 
			
		||||
            filename = os.path.normpath(os.path.abspath(filename))
 | 
			
		||||
@@ -184,7 +279,7 @@ class ArgHandler:
 | 
			
		||||
            except:
 | 
			
		||||
                print "Error importing %s" % filename
 | 
			
		||||
                os._exit(1)
 | 
			
		||||
        elif format == 'gramps':
 | 
			
		||||
        elif format == 'gramps-xml':
 | 
			
		||||
            try:
 | 
			
		||||
                dbname = os.path.join(filename,const.xmlFile)
 | 
			
		||||
                ReadXML.importData(self.parent.db,dbname,None,self.parent.cl)
 | 
			
		||||
@@ -233,9 +328,14 @@ class ArgHandler:
 | 
			
		||||
            print "Invalid format:  %s" % format
 | 
			
		||||
            os._exit(1)
 | 
			
		||||
        if not self.parent.cl:
 | 
			
		||||
            return self.parent.post_load(self.impdir_path)
 | 
			
		||||
            return self.parent.post_load(self.imp_db_path)
 | 
			
		||||
 | 
			
		||||
    def cl_export(self,filename,format):
 | 
			
		||||
        """
 | 
			
		||||
        Command-line export routine. 
 | 
			
		||||
        Try to write into filename using the format.
 | 
			
		||||
        Any errors will cause the os._exit(1) call.
 | 
			
		||||
        """
 | 
			
		||||
        if format == 'gedcom':
 | 
			
		||||
            import WriteGedcom
 | 
			
		||||
            try:
 | 
			
		||||
@@ -244,7 +344,7 @@ class ArgHandler:
 | 
			
		||||
            except:
 | 
			
		||||
                print "Error exporting %s" % filename
 | 
			
		||||
                os._exit(1)
 | 
			
		||||
        elif format == 'gramps':
 | 
			
		||||
        elif format == 'gramps-xml':
 | 
			
		||||
            filename = os.path.normpath(os.path.abspath(filename))
 | 
			
		||||
            dbname = os.path.join(filename,const.xmlFile)
 | 
			
		||||
            if filename:
 | 
			
		||||
@@ -315,6 +415,10 @@ class ArgHandler:
 | 
			
		||||
            os._exit(1)
 | 
			
		||||
 | 
			
		||||
    def cl_action(self,action):
 | 
			
		||||
        """
 | 
			
		||||
        Command-line action routine. Try to perform specified action.
 | 
			
		||||
        Any errors will cause the os._exit(1) call.
 | 
			
		||||
        """
 | 
			
		||||
        if action == 'check':
 | 
			
		||||
            import Check
 | 
			
		||||
            checker = Check.CheckIntegrity(self.parent.db)
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,14 @@
 | 
			
		||||
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# Python modules
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
import os
 | 
			
		||||
from gettext import gettext as _
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
# GNOME modules
 | 
			
		||||
@@ -28,6 +36,7 @@
 | 
			
		||||
import gtk
 | 
			
		||||
import gtk.glade
 | 
			
		||||
import gobject
 | 
			
		||||
import gnome
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
@@ -37,10 +46,7 @@ import gobject
 | 
			
		||||
import Utils
 | 
			
		||||
import const
 | 
			
		||||
import GrampsCfg
 | 
			
		||||
import gnome
 | 
			
		||||
import QuestionDialog
 | 
			
		||||
from gettext import gettext as _
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
#
 | 
			
		||||
@@ -50,12 +56,13 @@ import os
 | 
			
		||||
class DbPrompter:
 | 
			
		||||
    """Make sure a database is opened"""
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self,db,want_new,parent=None):
 | 
			
		||||
        self.db = db
 | 
			
		||||
    def __init__(self,parent,want_new,parent_window=None,file_hint=None):
 | 
			
		||||
        self.parent = parent
 | 
			
		||||
        self.file_hint = file_hint
 | 
			
		||||
        opendb = gtk.glade.XML(const.gladeFile, "opendb","gramps")
 | 
			
		||||
        top = opendb.get_widget('opendb')
 | 
			
		||||
        if parent:
 | 
			
		||||
            top.set_transient_for(parent)
 | 
			
		||||
        if parent_window:
 | 
			
		||||
            top.set_transient_for(parent_window)
 | 
			
		||||
        title = opendb.get_widget('title')
 | 
			
		||||
 | 
			
		||||
        Utils.set_titles(top,title,_('Open a database'))
 | 
			
		||||
@@ -89,7 +96,7 @@ class DbPrompter:
 | 
			
		||||
                                            gtk.RESPONSE_CANCEL,
 | 
			
		||||
                                            gtk.STOCK_OPEN,
 | 
			
		||||
                                            gtk.RESPONSE_OK))
 | 
			
		||||
            self.db.clear_database()
 | 
			
		||||
            self.parent.clear_database()
 | 
			
		||||
        else:
 | 
			
		||||
            choose = gtk.FileChooserDialog('Open GRAMPS database',
 | 
			
		||||
                                           None,
 | 
			
		||||
@@ -109,8 +116,11 @@ class DbPrompter:
 | 
			
		||||
        filter.add_pattern('*')
 | 
			
		||||
        choose.add_filter(filter)
 | 
			
		||||
        
 | 
			
		||||
        if save and GrampsCfg.lastfile:
 | 
			
		||||
            choose.set_filename(GrampsCfg.lastfile)
 | 
			
		||||
        if save:
 | 
			
		||||
            if self.file_hint:
 | 
			
		||||
                choose.set_filename(self.file_hint)
 | 
			
		||||
            elif GrampsCfg.lastfile:
 | 
			
		||||
                choose.set_filename(GrampsCfg.lastfile)
 | 
			
		||||
 | 
			
		||||
        response = choose.run()
 | 
			
		||||
        if response == gtk.RESPONSE_OK:
 | 
			
		||||
@@ -118,9 +128,8 @@ class DbPrompter:
 | 
			
		||||
            if save and os.path.splitext(filename)[1] != ".grdb":
 | 
			
		||||
                filename = filename + ".grdb"
 | 
			
		||||
            choose.destroy()
 | 
			
		||||
            self.db.read_file(filename)
 | 
			
		||||
            self.parent.read_file(filename)
 | 
			
		||||
            return 1
 | 
			
		||||
        else:
 | 
			
		||||
            choose.destroy()
 | 
			
		||||
            return 0
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -149,18 +149,48 @@ unknown      = _("unknown")
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
longopts = [ 
 | 
			
		||||
    "load-modules=", 
 | 
			
		||||
    "help", 
 | 
			
		||||
    "usage", 
 | 
			
		||||
    "oaf-ior-fd=", 
 | 
			
		||||
    "oaf-activate-iid=", 
 | 
			
		||||
    "oaf-private", 
 | 
			
		||||
    "disable-sound", 
 | 
			
		||||
    "enable-sound", 
 | 
			
		||||
    "espeaker=", 
 | 
			
		||||
    "version", 
 | 
			
		||||
    ]
 | 
			
		||||
# (longName, shortName, type , default, flags, descrip , argDescrip)
 | 
			
		||||
popt_table = [
 | 
			
		||||
    ("import", 'i', str, None, 0, "Import file", "FILENAME"),
 | 
			
		||||
    ("output", 'o', str, None, 0, "Write file",  "FILENAME"),
 | 
			
		||||
    ("format", 'f', str, None, 0, 'Specify format', "FORMAT"),
 | 
			
		||||
    ("action", 'a', str, None, 0, 'Specify action', "ACTION"),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
longopts = [
 | 
			
		||||
    "load-modules=",
 | 
			
		||||
    "help",
 | 
			
		||||
    "usage",
 | 
			
		||||
    "oaf-ior-fd=",
 | 
			
		||||
    "oaf-activate-iid=",
 | 
			
		||||
    "oaf-private",
 | 
			
		||||
    "disable-sound",
 | 
			
		||||
    "enable-sound",
 | 
			
		||||
    "espeaker=",
 | 
			
		||||
    "version",
 | 
			
		||||
    "gdk-debug=", 
 | 
			
		||||
    "gdk-no-debug=",
 | 
			
		||||
    "display=",
 | 
			
		||||
    "screen=",
 | 
			
		||||
    "sync",
 | 
			
		||||
    "name=",
 | 
			
		||||
    "class=",
 | 
			
		||||
    "gtk-debug=", 
 | 
			
		||||
    "gtk-no-debug=",
 | 
			
		||||
    "g-fatal-warnings",
 | 
			
		||||
    "gtk-module=",
 | 
			
		||||
    "sm-client-id=",
 | 
			
		||||
    "sm-config-prefix=",
 | 
			
		||||
    "sm-disable",
 | 
			
		||||
    "disable-crash-dialog",
 | 
			
		||||
    "disable-sound",
 | 
			
		||||
    "enable-sound",
 | 
			
		||||
    "espeaker=",
 | 
			
		||||
    "import=",
 | 
			
		||||
    "output=",
 | 
			
		||||
    "format=",
 | 
			
		||||
    "action=",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
shortopts = "i:o:f:a:?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ dist_pkgdata_DATA = gedcom.xml \
 | 
			
		||||
	       gramps.keys \
 | 
			
		||||
               gramps.mime
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = $(pkgdata_DATA)
 | 
			
		||||
EXTRA_DIST = $(dist_pkgdata_DATA)
 | 
			
		||||
 | 
			
		||||
install-data-local:
 | 
			
		||||
	$(INSTALL) -d $(DESTDIR)$(prefix)/share/gnome/apps/Applications
 | 
			
		||||
 
 | 
			
		||||
@@ -4,4 +4,4 @@ gramps
 | 
			
		||||
	can_open_multiple_files=false
 | 
			
		||||
	expects_uris=false
 | 
			
		||||
	requires_terminal=false
 | 
			
		||||
	mime_types=application/x-gramps,application/x-gedcom
 | 
			
		||||
	mime_types=application/x-gramps,application/x-gedcom,application/x-gramps-package
 | 
			
		||||
 
 | 
			
		||||
@@ -8,4 +8,8 @@
 | 
			
		||||
    <comment xml:lang="en">GEDCOM</comment>
 | 
			
		||||
    <glob pattern="*.ged"/>
 | 
			
		||||
  </mime-type>
 | 
			
		||||
  <mime-type type="application/x-gramps-package">
 | 
			
		||||
    <comment xml:lang="en">GRAMPS package</comment>
 | 
			
		||||
    <glob pattern="*.gpkg"/>
 | 
			
		||||
  </mime-type>
 | 
			
		||||
</mime-info>
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,7 @@ import gobject
 | 
			
		||||
 | 
			
		||||
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
 | 
			
		||||
 | 
			
		||||
args = sys.argv[1:]
 | 
			
		||||
args = sys.argv
 | 
			
		||||
 | 
			
		||||
def run():
 | 
			
		||||
    try:
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,7 @@ import EditPerson
 | 
			
		||||
import Find
 | 
			
		||||
import DbPrompter
 | 
			
		||||
import TipOfDay
 | 
			
		||||
import ArgHandler
 | 
			
		||||
 | 
			
		||||
from QuestionDialog import *
 | 
			
		||||
 | 
			
		||||
@@ -104,7 +105,9 @@ class Gramps:
 | 
			
		||||
 | 
			
		||||
    def __init__(self,args):
 | 
			
		||||
 | 
			
		||||
        self.program = gnome.program_init('gramps',const.version)
 | 
			
		||||
        self.program = gnome.program_init('gramps',const.version, 
 | 
			
		||||
                    gnome.libgnome_module_info_get(), 
 | 
			
		||||
                    args, const.popt_table)
 | 
			
		||||
        self.program.set_property('app-libdir','%s/lib' % const.prefixdir)
 | 
			
		||||
        self.program.set_property('app-datadir','%s/share/gramps' % const.prefixdir)
 | 
			
		||||
        self.program.set_property('app-sysconfdir','%s/etc' % const.prefixdir)
 | 
			
		||||
@@ -144,25 +147,11 @@ class Gramps:
 | 
			
		||||
        self.gtop = gtk.glade.XML(const.gladeFile, "gramps", "gramps")
 | 
			
		||||
        self.init_interface()
 | 
			
		||||
 | 
			
		||||
        ArgHandler.ArgHandler(self,args)
 | 
			
		||||
 | 
			
		||||
        if GrampsCfg.usetips:
 | 
			
		||||
            TipOfDay.TipOfDay()
 | 
			
		||||
 | 
			
		||||
        if args and len(args)==1:
 | 
			
		||||
            if GrampsMime.get_type(args[0]) == "application/x-gramps":
 | 
			
		||||
                if self.auto_save_load(args[0]) == 0:
 | 
			
		||||
                    DbPrompter.DbPrompter(self,0,self.topWindow)
 | 
			
		||||
            else:
 | 
			
		||||
                import ArgHandler
 | 
			
		||||
                ArgHandler.ArgHandler(self,args)
 | 
			
		||||
        elif args:
 | 
			
		||||
            import ArgHandler
 | 
			
		||||
            ArgHandler.ArgHandler(self,args)
 | 
			
		||||
        elif GrampsCfg.lastfile and GrampsCfg.autoload:
 | 
			
		||||
            if self.auto_save_load(GrampsCfg.lastfile) == 0:
 | 
			
		||||
                DbPrompter.DbPrompter(self,0,self.topWindow)
 | 
			
		||||
        else:
 | 
			
		||||
            DbPrompter.DbPrompter(self,0,self.topWindow)
 | 
			
		||||
 | 
			
		||||
        self.db.set_researcher(GrampsCfg.get_researcher())
 | 
			
		||||
 | 
			
		||||
    def pref_callback(self,val):
 | 
			
		||||
@@ -1033,12 +1022,64 @@ class Gramps:
 | 
			
		||||
        import ReadGedcom
 | 
			
		||||
        
 | 
			
		||||
        filename = os.path.normpath(os.path.abspath(filename))
 | 
			
		||||
        self.topWindow.set_title("%s - GRAMPS" % filename)
 | 
			
		||||
        try:
 | 
			
		||||
            ReadGedcom.importData(self.db,filename)
 | 
			
		||||
            ReadGedcom.importData(self.db,filename,None)
 | 
			
		||||
            self.import_tool_callback()
 | 
			
		||||
        except:
 | 
			
		||||
            DisplayTrace.DisplayTrace()
 | 
			
		||||
        self.full_update()
 | 
			
		||||
 | 
			
		||||
    def read_xml(self,filename):
 | 
			
		||||
        import ReadXML
 | 
			
		||||
        
 | 
			
		||||
        filename = os.path.normpath(os.path.abspath(os.path.join(filename,const.xmlFile)))
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            ReadXML.importData(self.db,filename,None)
 | 
			
		||||
            self.import_tool_callback()
 | 
			
		||||
        except:
 | 
			
		||||
            DisplayTrace.DisplayTrace()
 | 
			
		||||
 | 
			
		||||
    def read_pkg(self,filename):
 | 
			
		||||
        # Create tempdir, if it does not exist, then check for writability
 | 
			
		||||
        tmpdir_path = os.path.expanduser("~/.gramps/tmp" )
 | 
			
		||||
        if not os.path.isdir(tmpdir_path):
 | 
			
		||||
            try:
 | 
			
		||||
                os.mkdir(tmpdir_path,0700)
 | 
			
		||||
            except:
 | 
			
		||||
                DisplayTrace.DisplayTrace()
 | 
			
		||||
                return
 | 
			
		||||
        elif not os.access(tmpdir_path,os.W_OK):
 | 
			
		||||
            ErrorDialog( _("Cannot unpak archive"),
 | 
			
		||||
                        _("Temporary directory %s is not writable") % tmpdir_path )
 | 
			
		||||
            return
 | 
			
		||||
        else:    # tempdir exists and writable -- clean it up if not empty
 | 
			
		||||
            files = os.listdir(tmpdir_path) ;
 | 
			
		||||
            for fn in files:
 | 
			
		||||
                os.remove( os.path.join(tmpdir_path,fn) )
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            import TarFile
 | 
			
		||||
            t = TarFile.ReadTarFile(filename,tmpdir_path)
 | 
			
		||||
            t.extract()
 | 
			
		||||
            t.close()
 | 
			
		||||
        except:
 | 
			
		||||
            DisplayTrace.DisplayTrace()
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        dbname = os.path.join(tmpdir_path,const.xmlFile)  
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            import ReadXML
 | 
			
		||||
            ReadXML.importData(self.db,dbname,None)
 | 
			
		||||
        except:
 | 
			
		||||
            DisplayTrace.DisplayTrace()
 | 
			
		||||
 | 
			
		||||
        # Clean up tempdir after ourselves
 | 
			
		||||
        files = os.listdir(tmpdir_path) 
 | 
			
		||||
        for fn in files:
 | 
			
		||||
            os.remove(os.path.join(tmpdir_path,fn))
 | 
			
		||||
        os.rmdir(tmpdir_path)
 | 
			
		||||
        self.import_tool_callback()
 | 
			
		||||
 | 
			
		||||
    def read_file(self,filename):
 | 
			
		||||
        self.topWindow.set_resizable(gtk.FALSE)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#
 | 
			
		||||
# Gramps - a GTK+/GNOME based genealogy program
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2000-2003  Donald N. Allingham
 | 
			
		||||
# Copyright (C) 2000-2004  Donald N. Allingham
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
@@ -18,6 +18,8 @@
 | 
			
		||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Modified by Alex Roitman to handle media object files.
 | 
			
		||||
#
 | 
			
		||||
@@ -81,7 +83,7 @@ class ReadNative:
 | 
			
		||||
        Utils.destroy_passed_object(self.top)
 | 
			
		||||
        self.show_display()
 | 
			
		||||
 | 
			
		||||
	dbname = os.path.join(imp_dbpath,const.xmlFile)  
 | 
			
		||||
        dbname = os.path.join(imp_dbpath,const.xmlFile)  
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            importData(self.db,dbname,self.progress)
 | 
			
		||||
@@ -89,7 +91,7 @@ class ReadNative:
 | 
			
		||||
            import DisplayTrace
 | 
			
		||||
            DisplayTrace.DisplayTrace()
 | 
			
		||||
        
 | 
			
		||||
	self.window.destroy()
 | 
			
		||||
        self.window.destroy()
 | 
			
		||||
        self.callback()
 | 
			
		||||
 | 
			
		||||
    def progress(self,val):
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#
 | 
			
		||||
# Gramps - a GTK+/GNOME based genealogy program
 | 
			
		||||
#
 | 
			
		||||
# Copyright (C) 2000  Donald N. Allingham
 | 
			
		||||
# Copyright (C) 2000-2004  Donald N. Allingham
 | 
			
		||||
#
 | 
			
		||||
# This program is free software; you can redistribute it and/or modify
 | 
			
		||||
# it under the terms of the GNU General Public License as published by
 | 
			
		||||
@@ -18,6 +18,8 @@
 | 
			
		||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# $Id$
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Written by Alex Roitman, largely based on ReadNative.py by Don Allingham 
 | 
			
		||||
#
 | 
			
		||||
@@ -95,19 +97,19 @@ class ReadPkg:
 | 
			
		||||
            ErrorDialog( _("Temporary directory %s is not writable") % tmpdir_path )
 | 
			
		||||
            return
 | 
			
		||||
        else:    # tempdir exists and writable -- clean it up if not empty
 | 
			
		||||
	    files = os.listdir(tmpdir_path) ;
 | 
			
		||||
            files = os.listdir(tmpdir_path) ;
 | 
			
		||||
            for filename in files:
 | 
			
		||||
                os.remove( os.path.join(tmpdir_path,filename) )
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            t = TarFile.ReadTarFile(name,tmpdir_path)
 | 
			
		||||
	    t.extract()
 | 
			
		||||
	    t.close()
 | 
			
		||||
            t.extract()
 | 
			
		||||
            t.close()
 | 
			
		||||
        except:
 | 
			
		||||
            ErrorDialog(_("Error extracting into %s") % tmpdir_path )
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
	dbname = os.path.join(tmpdir_path,const.xmlFile)  
 | 
			
		||||
        dbname = os.path.join(tmpdir_path,const.xmlFile)  
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            importData(self.db,dbname,self.progress)
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@ class PackageWriter:
 | 
			
		||||
 | 
			
		||||
        if response == gtk.RESPONSE_OK:
 | 
			
		||||
            name = choose.get_filename()
 | 
			
		||||
            if os.path.splitext(filename)[1] != ".gpkg":
 | 
			
		||||
            if os.path.splitext(name)[1] != ".gpkg":
 | 
			
		||||
                name = name + ".gpkg"
 | 
			
		||||
            choose.destroy()
 | 
			
		||||
            self.export(name)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user