* src/plugins/Rebuild.py (__init__): Proper progress indication.

svn: r7743
This commit is contained in:
Alex Roitman
2006-12-01 16:26:34 +00:00
parent 2c4d5d0750
commit 4fff3e494a
5 changed files with 59 additions and 26 deletions

View File

@ -3,6 +3,7 @@
parents in case the toolbar is not visible. parents in case the toolbar is not visible.
2006-12-01 Alex Roitman <shura@gramps-project.org> 2006-12-01 Alex Roitman <shura@gramps-project.org>
* src/plugins/Rebuild.py (__init__): Proper progress indication.
* src/ArgHandler.py (cl_action): Properly call CLI tool. * src/ArgHandler.py (cl_action): Properly call CLI tool.
* src/plugins/DumpGenderStats.py (__init__): Fix CLI mode. * src/plugins/DumpGenderStats.py (__init__): Fix CLI mode.
* src/PluginUtils/_Tool.py (cli_tool): Fix CLI tools. * src/PluginUtils/_Tool.py (cli_tool): Fix CLI tools.

View File

@ -606,7 +606,7 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
self.secondary_connected = True self.secondary_connected = True
def rebuild_secondary(self,callback=None): def rebuild_secondary(self,callback):
if self.readonly: if self.readonly:
return return
@ -616,54 +616,65 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
self.id_trans.close() self.id_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"idtrans") junk.remove(self.full_name,"idtrans")
callback(1)
self.surnames.close() self.surnames.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"surnames") junk.remove(self.full_name,"surnames")
callback(2)
# Repair secondary indices related to family_map # Repair secondary indices related to family_map
self.fid_trans.close() self.fid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"fidtrans") junk.remove(self.full_name,"fidtrans")
callback(3)
# Repair secondary indices related to place_map # Repair secondary indices related to place_map
self.pid_trans.close() self.pid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"pidtrans") junk.remove(self.full_name,"pidtrans")
callback(4)
# Repair secondary indices related to media_map # Repair secondary indices related to media_map
self.oid_trans.close() self.oid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"oidtrans") junk.remove(self.full_name,"oidtrans")
callback(5)
# Repair secondary indices related to source_map # Repair secondary indices related to source_map
self.sid_trans.close() self.sid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"sidtrans") junk.remove(self.full_name,"sidtrans")
callback(6)
# Repair secondary indices related to event_map # Repair secondary indices related to event_map
self.eid_trans.close() self.eid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"eidtrans") junk.remove(self.full_name,"eidtrans")
callback(7)
# Repair secondary indices related to repository_map # Repair secondary indices related to repository_map
self.rid_trans.close() self.rid_trans.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"ridtrans") junk.remove(self.full_name,"ridtrans")
callback(8)
# Repair secondary indices related to reference_map # Repair secondary indices related to reference_map
self.reference_map_primary_map.close() self.reference_map_primary_map.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"reference_map_primary_map") junk.remove(self.full_name,"reference_map_primary_map")
callback(9)
self.reference_map_referenced_map.close() self.reference_map_referenced_map.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"reference_map_referenced_map") junk.remove(self.full_name,"reference_map_referenced_map")
callback(10)
# Set flag saying that we have removed secondary indices # Set flag saying that we have removed secondary indices
# and then call the creating routine # and then call the creating routine
self.secondary_connected = False self.secondary_connected = False
self.connect_secondary() self.connect_secondary()
callback(11)
def find_backlink_handles(self, handle, include_classes=None): def find_backlink_handles(self, handle, include_classes=None):
""" """
@ -865,7 +876,7 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
transaction.add(REFERENCE_KEY,str(key),None,data) transaction.add(REFERENCE_KEY,str(key),None,data)
transaction.reference_add.append((str(key),data)) transaction.reference_add.append((str(key),data))
def reindex_reference_map(self): def reindex_reference_map(self,callback):
""" """
Reindex all primary records in the database. Reindex all primary records in the database.
This will be a slow process for large databases. This will be a slow process for large databases.
@ -876,14 +887,17 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
self.reference_map_referenced_map.close() self.reference_map_referenced_map.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"reference_map_referenced_map") junk.remove(self.full_name,"reference_map_referenced_map")
callback(1)
self.reference_map_primary_map.close() self.reference_map_primary_map.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"reference_map_primary_map") junk.remove(self.full_name,"reference_map_primary_map")
callback(2)
self.reference_map.close() self.reference_map.close()
junk = db.DB(self.env) junk = db.DB(self.env)
junk.remove(self.full_name,"reference_map") junk.remove(self.full_name,"reference_map")
callback(3)
# Open reference_map and primapry map # Open reference_map and primapry map
self.reference_map = self.open_table(self.full_name, "reference_map", self.reference_map = self.open_table(self.full_name, "reference_map",
@ -919,6 +933,7 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
} }
transaction = self.transaction_begin(batch=True,no_magic=True) transaction = self.transaction_begin(batch=True,no_magic=True)
callback(4)
# Now we use the functions and classes defined above # Now we use the functions and classes defined above
# to loop through each of the primary object tables. # to loop through each of the primary object tables.
@ -948,6 +963,7 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
data = cursor.next() data = cursor.next()
cursor.close() cursor.close()
callback(5)
self.transaction_commit(transaction,_("Rebuild reference map")) self.transaction_commit(transaction,_("Rebuild reference map"))
self.reference_map_referenced_map = db.DB(self.env) self.reference_map_referenced_map = db.DB(self.env)
@ -957,6 +973,7 @@ class GrampsBSDDB(GrampsDbBase,UpdateCallback):
db.DB_BTREE,flags=open_flags) db.DB_BTREE,flags=open_flags)
self.reference_map.associate(self.reference_map_referenced_map, self.reference_map.associate(self.reference_map_referenced_map,
find_referenced_handle,open_flags) find_referenced_handle,open_flags)
callback(6)
return return

View File

@ -283,7 +283,7 @@ class GrampsDbBase(GrampsDBCallback):
self.path = "" self.path = ""
self.name_group = {} self.name_group = {}
def rebuild_secondary(self, callback=None): def rebuild_secondary(self, callback):
pass pass
def version_supported(self): def version_supported(self):
@ -2044,7 +2044,7 @@ class GrampsDbBase(GrampsDBCallback):
need to be changed.""" need to be changed."""
pass pass
def reindex_reference_map(self): def reindex_reference_map(self,callback):
""" """
Reindex all primary records in the database. Reindex all primary records in the database.

View File

@ -53,47 +53,49 @@ import gtk.glade
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import RelLib import RelLib
import Utils
import const import const
from PluginUtils import Tool, register_tool from PluginUtils import Tool, register_tool
from QuestionDialog import OkDialog from QuestionDialog import OkDialog
from BasicUtils import UpdateCallback
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# runTool # runTool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Rebuild(Tool.Tool): class Rebuild(Tool.Tool,UpdateCallback):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
Tool.Tool.__init__(self, dbstate, options_class, name) Tool.Tool.__init__(self, dbstate, options_class, name)
if self.db.readonly: if self.db.readonly:
# TODO: split plugin in a check and repair part to support
# checking of a read only database
return return
self.db.disable_signals() self.db.disable_signals()
if uistate: if uistate:
progress = Utils.ProgressMeter( self.callback = uistate.pulse_progressbar
_('Rebuilding Secondary Indices')) uistate.set_busy_cursor(1)
# Six indices to rebuild, and the first step is removing uistate.progress.show()
# old ones uistate.push_message(dbstate, _("Rebuilding secondary indices..."))
total = 7
progress.set_pass('',total)
self.db.rebuild_secondary(progress.step)
progress.close()
OkDialog(_("Secondary indices rebuilt"),
_('All secondary indices have been rebuilt.'))
else: else:
print "Rebuilding Secondary Indices..." print "Rebuilding Secondary Indices..."
self.db.rebuild_secondary(self.empty) self.db.rebuild_secondary(self.empty)
print "All secondary indices have been rebuilt." print "All secondary indices have been rebuilt."
self.db.enable_signals()
def empty(self): UpdateCallback.__init__(self,self.callback)
pass self.set_total(11)
self.db.rebuild_secondary(self.update)
self.reset()
if uistate:
uistate.set_busy_cursor(0)
uistate.progress.hide()
OkDialog(_("Secondary indices rebuilt"),
_('All secondary indices have been rebuilt.'))
else:
print "All secondary indices have been rebuilt."
self.db.enable_signals()
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #

View File

@ -55,17 +55,17 @@ import gtk.glade
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import RelLib import RelLib
import Utils
import const import const
from PluginUtils import Tool, register_tool from PluginUtils import Tool, register_tool
from QuestionDialog import OkDialog from QuestionDialog import OkDialog
from BasicUtils import UpdateCallback
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# runTool # runTool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class RebuildRefMap(Tool.Tool): class RebuildRefMap(Tool.Tool,UpdateCallback):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
@ -76,12 +76,25 @@ class RebuildRefMap(Tool.Tool):
self.db.disable_signals() self.db.disable_signals()
if uistate: if uistate:
self.db.reindex_reference_map() self.callback = uistate.pulse_progressbar
uistate.set_busy_cursor(1)
uistate.progress.show()
uistate.push_message(dbstate, _("Rebuilding reference maps..."))
else:
self.callback = None
print "Rebuilding reference maps..."
UpdateCallback.__init__(self,self.callback)
self.set_total(6)
self.db.reindex_reference_map(self.update)
self.reset()
if uistate:
uistate.set_busy_cursor(0)
uistate.progress.hide()
OkDialog(_("Reference maps rebuilt"), OkDialog(_("Reference maps rebuilt"),
_('All reference maps have been rebuilt.')) _('All reference maps have been rebuilt.'))
else: else:
print "Rebuilding reference maps..."
self.db.reindex_reference_map()
print "All reference maps have been rebuilt." print "All reference maps have been rebuilt."
self.db.enable_signals() self.db.enable_signals()