Esempio n. 1
0
    def __really_delete_db(self):
        """
        Delete the selected database. If the database is open, close it first.
        Then scan the database directory, deleting the files, and finally
        removing the directory.
        """

        # close the database if the user has requested to delete the
        # active database
        if self.data_to_delete[PATH_COL] == self.active:
            self.dbstate.no_database()

        store, node = self.selection.get_selected()
        path = store.get_path(node)
        node = self.model.get_iter(path)
        filename = self.model.get_value(node, FILE_COL)
        try:
            name_file = open(filename, "r")
            file_name_to_delete = name_file.read()
            name_file.close()
            RecentFiles.remove_filename(file_name_to_delete)
            for (top, dirs, files) in os.walk(self.data_to_delete[1]):
                for filename in files:
                    os.unlink(os.path.join(top, filename))
            os.rmdir(self.data_to_delete[1])
        except (IOError, OSError), msg:
            DbManager.ERROR(_("Could not delete family tree"), str(msg))
Esempio n. 2
0
 def __rename_database(self, path, new_text):
     """
     Renames the database by writing the new value to the name.txt file
     """
     new_text = new_text.strip()
     node = self.model.get_iter(path)
     filename = self.model.get_value(node, FILE_COL)
     if self.existing_name(new_text, skippath=path):
         DbManager.ERROR(
             _("Could not rename the Family Tree."),
             _("Family Tree already exists, choose a unique name."))
         return
     old_text, new_text = self.rename_database(filename, new_text)
     if not (old_text is None):
         RecentFiles.rename_filename(old_text, new_text)
         self.model.set_value(node, NAME_COL, new_text)
Esempio n. 3
0
    def handle_args_gui(self):
        """
        method to handle the arguments that can be given for a GUI session.
        Returns the filename of the family tree that should be opened if 
        user just passed a famtree or a filename
            1/no options: a family tree can be given, if so, this name is tested
                        and returned. If a filename, it is imported in a new db
                        and name of new db returned
            2/an open and/or import option can have been given, if so, this 
                is handled, and None is returned
            
        """
        if self.open_gui:
            # First check if a Gramps database was provided
            # (either a database path or a database name)
            db_path = self.__deduce_db_path(self.open_gui)

            if not db_path:
                # Apparently it is not a database. See if it is a file that
                # can be imported.
                db_path, title = self.dbman.import_new_db(self.open_gui, None)

            if db_path:
                # Test if not locked or problematic
                if not self.check_db(db_path, self.force_unlock):
                    sys.exit(0)
                # Add the file to the recent items
                path = os.path.join(db_path, "name.txt")
                try:
                    ifile = open(path)
                    title = ifile.readline().strip()
                    ifile.close()
                except:
                    title = db_path
                RecentFiles.recent_files(db_path, title)
                self.open = db_path
                self.__open_action()
            else:
                sys.exit(0)
            return db_path
        
        # if not open_gui, parse any command line args. We can only have one 
        #  open argument, and perhaps some import arguments
        self.__open_action()
        self.__import_action()
        return None
Esempio n. 4
0
    def handle_args_gui(self):
        """
        method to handle the arguments that can be given for a GUI session.
        Returns the filename of the family tree that should be opened if 
        user just passed a famtree or a filename
            1/no options: a family tree can be given, if so, this name is tested
                        and returned. If a filename, it is imported in a new db
                        and name of new db returned
            2/an open and/or import option can have been given, if so, this 
                is handled, and None is returned
            
        """
        if self.open_gui:
            # First check if a Gramps database was provided
            # (either a database path or a database name)
            db_path = self.__deduce_db_path(self.open_gui)

            if not db_path:
                # Apparently it is not a database. See if it is a file that
                # can be imported.
                db_path, title = self.dbman.import_new_db(self.open_gui, None)

            if db_path:
                # Test if not locked or problematic
                if not self.check_db(db_path, self.force_unlock):
                    sys.exit(0)
                # Add the file to the recent items
                path = os.path.join(db_path, "name.txt")
                try:
                    ifile = open(path)
                    title = ifile.readline().strip()
                    ifile.close()
                except:
                    title = db_path
                RecentFiles.recent_files(db_path, title)
                self.open = db_path
                self.__open_action()
            else:
                sys.exit(0)
            return db_path

        # if not open_gui, parse any command line args. We can only have one
        #  open argument, and perhaps some import arguments
        self.__open_action()
        self.__import_action()
        return None
Esempio n. 5
0
    def _post_load_newdb_nongui(self, filename, title=None):
        """
        Called after a new database is loaded.
        """
        if not filename:
            return
        
        if filename[-1] == os.path.sep:
            filename = filename[:-1]
        name = os.path.basename(filename)
        if title:
            name = title

        # This method is for UI stuff when the database has changed.
        # Window title, recent files, etc related to new file.

        self.dbstate.db.set_save_path(filename)
        
        # apply preferred researcher if loaded file has none
        res = self.dbstate.db.get_researcher()
        owner = get_researcher()
        if res.get_name() == "" and owner.get_name() != "":
            self.dbstate.db.set_researcher(owner)
        
        name_displayer.set_name_format(self.dbstate.db.name_formats)
        fmt_default = config.get('preferences.name-format')
        if fmt_default < 0:
            name_displayer.set_default_format(fmt_default)

        self.dbstate.db.enable_signals()
        self.dbstate.signal_change()

        config.set('paths.recent-file', filename)

        try:
            initial_person = self.dbstate.db.find_initial_person().get_handle()
            self.uistate.set_active(initial_person, 'Person')
        except:
            pass
        
        RecentFiles.recent_files(filename, name)
        self.file_loaded = True
Esempio n. 6
0
    def _post_load_newdb_nongui(self, filename, title=None):
        """
        Called after a new database is loaded.
        """
        if not filename:
            return
        
        if filename[-1] == os.path.sep:
            filename = filename[:-1]
        name = os.path.basename(filename)
        self.dbstate.db.db_name = title
        if title:
            name = title

        # This method is for UI stuff when the database has changed.
        # Window title, recent files, etc related to new file.

        self.dbstate.db.set_save_path(filename)
        
        # apply preferred researcher if loaded file has none
        res = self.dbstate.db.get_researcher()
        owner = get_researcher()
        # If the DB Owner Info is empty and
        # [default] Researcher is not empty and
        # database is empty, then copy default researcher to DB owner
        if res.is_empty() and not owner.is_empty() and self.dbstate.db.is_empty():
            self.dbstate.db.set_researcher(owner)
        
        name_displayer.set_name_format(self.dbstate.db.name_formats)
        fmt_default = config.get('preferences.name-format')
        name_displayer.set_default_format(fmt_default)

        self.dbstate.db.enable_signals()
        self.dbstate.signal_change()

        config.set('paths.recent-file', filename)

        RecentFiles.recent_files(filename, name)
        self.file_loaded = True
Esempio n. 7
0
    def build(self):
        buf = StringIO()
        buf.write(_RCT_TOP)
        gramps_rf = RecentFiles.RecentFiles()

        count = 0

        if self.active != DISABLED:
            self.uimanager.remove_ui(self.active)
            self.uimanager.remove_action_group(self.action_group)
            self.action_group = gtk.ActionGroup('RecentFiles')
            self.active = DISABLED

        actions = []
        rfiles = gramps_rf.gramps_recent_files
        rfiles.sort(by_time)

        new_menu = gtk.Menu()

        for item in rfiles:
            try:
                title = item.get_name()
                filename = os.path.basename(item.get_path())
                action_id = "RecentMenu%d" % count
                buf.write('<menuitem action="%s"/>' % action_id)
                actions.append((action_id, None, title, None, None,
                                make_callback(item, self.load)))
                mitem = gtk.MenuItem(title, use_underline=False)
                mitem.connect('activate', make_callback(item, self.load))
                mitem.show()
                new_menu.append(mitem)
            except RuntimeError:
                _LOG.info("Ignoring the RecentItem %s (%s)" %
                          (title, filename))
                pass  # ignore no longer existing files

            count += 1
        buf.write(_RCT_BTM)
        self.action_group.add_actions(actions)
        self.uimanager.insert_action_group(self.action_group, 1)
        self.active = self.uimanager.add_ui_from_string(buf.getvalue())
        self.uimanager.ensure_update()
        buf.close()

        if len(rfiles) > 0:
            new_menu.show()
            self.uistate.set_open_recent_menu(new_menu)
Esempio n. 8
0
 def make_variables(self):
     self.db = Db.Db()
     self.path = self.export_path = QStandardPaths.writableLocation(
         QStandardPaths.DocumentsLocation)
     self.recent_files = RecentFiles.get(RECENT_FILES_MAX)
     self.closing = False