ProgressMeter additions
svn: r5008
This commit is contained in:
parent
3816790b4f
commit
ca4856adee
@ -1,3 +1,9 @@
|
|||||||
|
2005-08-03 Don Allingham <don@gramps-project.org>
|
||||||
|
* src/GrampsDbBase.py: provide functions for indicating the number
|
||||||
|
of items in each table
|
||||||
|
* src/Check.py: Add ProgressMeter calls
|
||||||
|
* src/Utils.py: Define new ProgressMeter class
|
||||||
|
|
||||||
2005-08-02 Alex Roitman <shura@gramps-project.org>
|
2005-08-02 Alex Roitman <shura@gramps-project.org>
|
||||||
* src/Bookmarks.py: Convert from CList to ListModel and TreeView;
|
* src/Bookmarks.py: Convert from CList to ListModel and TreeView;
|
||||||
Remove Cancel and OK buttons, Add Close button; make all changes
|
Remove Cancel and OK buttons, Add Close button; make all changes
|
||||||
|
@ -783,6 +783,36 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
|||||||
"""
|
"""
|
||||||
return len(self.person_map)
|
return len(self.person_map)
|
||||||
|
|
||||||
|
def get_number_of_families(self):
|
||||||
|
"""
|
||||||
|
Returns the number of families currently in the databse.
|
||||||
|
"""
|
||||||
|
return len(self.family_map)
|
||||||
|
|
||||||
|
def get_number_of_events(self):
|
||||||
|
"""
|
||||||
|
Returns the number of events currently in the databse.
|
||||||
|
"""
|
||||||
|
return len(self.event_map)
|
||||||
|
|
||||||
|
def get_number_of_places(self):
|
||||||
|
"""
|
||||||
|
Returns the number of places currently in the databse.
|
||||||
|
"""
|
||||||
|
return len(self.place_map)
|
||||||
|
|
||||||
|
def get_number_of_sources(self):
|
||||||
|
"""
|
||||||
|
Returns the number of sources currently in the databse.
|
||||||
|
"""
|
||||||
|
return len(self.source_map)
|
||||||
|
|
||||||
|
def get_number_of_media_objects(self):
|
||||||
|
"""
|
||||||
|
Returns the number of media objects currently in the databse.
|
||||||
|
"""
|
||||||
|
return len(self.media_map)
|
||||||
|
|
||||||
def get_person_handles(self,sort_handles=True):
|
def get_person_handles(self,sort_handles=True):
|
||||||
"""
|
"""
|
||||||
Returns a list of database handles, one handle for each Person in
|
Returns a list of database handles, one handle for each Person in
|
||||||
|
@ -810,3 +810,61 @@ def strip_context(msgid,sep='|'):
|
|||||||
if msgval == msgid and sep_idx != -1:
|
if msgval == msgid and sep_idx != -1:
|
||||||
msgval = msgid[sep_idx+1:]
|
msgval = msgid[sep_idx+1:]
|
||||||
return msgval
|
return msgval
|
||||||
|
|
||||||
|
class ProgressMeter:
|
||||||
|
"""
|
||||||
|
Progress meter class for GRAMPS.
|
||||||
|
"""
|
||||||
|
def __init__(self,title,header):
|
||||||
|
"""
|
||||||
|
Specify the title and the current pass header.
|
||||||
|
"""
|
||||||
|
self.ptop = gtk.Dialog()
|
||||||
|
self.ptop.set_has_separator(False)
|
||||||
|
self.ptop.set_title(title)
|
||||||
|
self.ptop.set_border_width(12)
|
||||||
|
self.ptop.vbox.set_spacing(10)
|
||||||
|
lbl = gtk.Label('<span size="larger" weight="bold">%s</span>' % title)
|
||||||
|
lbl.set_use_markup(True)
|
||||||
|
self.lbl = gtk.Label(header)
|
||||||
|
self.lbl.set_use_markup(True)
|
||||||
|
self.ptop.vbox.add(lbl)
|
||||||
|
self.ptop.vbox.add(self.lbl)
|
||||||
|
self.ptop.vbox.set_border_width(24)
|
||||||
|
self.pbar = gtk.ProgressBar()
|
||||||
|
|
||||||
|
self.ptop.set_size_request(350,125)
|
||||||
|
self.ptop.vbox.add(self.pbar)
|
||||||
|
self.ptop.show_all()
|
||||||
|
|
||||||
|
def set_pass(self,header,total):
|
||||||
|
"""
|
||||||
|
Reset for another pass. Provide a new header and define number
|
||||||
|
of steps to be used.
|
||||||
|
"""
|
||||||
|
self.pbar_max = total
|
||||||
|
self.pbar_index = 0.0
|
||||||
|
self.lbl.set_text(header)
|
||||||
|
self.pbar.set_fraction(0.0)
|
||||||
|
while gtk.events_pending():
|
||||||
|
gtk.main_iteration()
|
||||||
|
|
||||||
|
def step(self):
|
||||||
|
"""Click the progress bar over to the next value. Be paranoid
|
||||||
|
and insure that it doesn't go over 100%."""
|
||||||
|
self.pbar_index = self.pbar_index + 1.0
|
||||||
|
if (self.pbar_index > self.pbar_max):
|
||||||
|
self.pbar_index = self.pbar_max
|
||||||
|
|
||||||
|
val = self.pbar_index/self.pbar_max
|
||||||
|
|
||||||
|
self.pbar.set_text("%d of %d (%.1f%%)" % (self.pbar_index,self.pbar_max,(val*100)))
|
||||||
|
self.pbar.set_fraction(val)
|
||||||
|
while gtk.events_pending():
|
||||||
|
gtk.main_iteration()
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
"""
|
||||||
|
Close the progress meter
|
||||||
|
"""
|
||||||
|
self.ptop.destroy()
|
||||||
|
@ -120,11 +120,16 @@ class CheckIntegrity:
|
|||||||
self.invalid_death_events = []
|
self.invalid_death_events = []
|
||||||
self.invalid_place_references = []
|
self.invalid_place_references = []
|
||||||
self.invalid_source_references = []
|
self.invalid_source_references = []
|
||||||
|
self.progress = Utils.ProgressMeter('Checking database','')
|
||||||
|
|
||||||
def family_errors(self):
|
def family_errors(self):
|
||||||
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family) + len(self.duplicate_links)
|
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family) + len(self.duplicate_links)
|
||||||
|
|
||||||
def cleanup_duplicate_spouses(self):
|
def cleanup_duplicate_spouses(self):
|
||||||
|
|
||||||
|
self.progress.set_pass(_('Looking for duplicate spouses'),
|
||||||
|
self.db.get_number_of_people())
|
||||||
|
|
||||||
cursor = self.db.get_person_cursor()
|
cursor = self.db.get_person_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
@ -140,11 +145,17 @@ class CheckIntegrity:
|
|||||||
p.set_family_handle_list(new_list)
|
p.set_family_handle_list(new_list)
|
||||||
self.db.commit_person(p,self.trans)
|
self.db.commit_person(p,self.trans)
|
||||||
data = cursor.next()
|
data = cursor.next()
|
||||||
|
self.progress.step()
|
||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
def check_for_broken_family_links(self):
|
def check_for_broken_family_links(self):
|
||||||
# Check persons referenced by the family objects
|
# Check persons referenced by the family objects
|
||||||
for family_handle in self.db.get_family_handles():
|
|
||||||
|
fhandle_list = self.db.get_family_handles()
|
||||||
|
self.progress.set_pass(_('Looking for broken family links'),
|
||||||
|
len(fhandle_list) + self.db.get_number_of_people())
|
||||||
|
|
||||||
|
for family_handle in fhandle_list:
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
father_handle = family.get_father_handle()
|
father_handle = family.get_father_handle()
|
||||||
mother_handle = family.get_mother_handle()
|
mother_handle = family.get_mother_handle()
|
||||||
@ -193,6 +204,7 @@ class CheckIntegrity:
|
|||||||
family.remove_child_handle(child_handle)
|
family.remove_child_handle(child_handle)
|
||||||
self.db.commit_family(family,self.trans)
|
self.db.commit_family(family,self.trans)
|
||||||
self.broken_links.append((child_handle,family_handle))
|
self.broken_links.append((child_handle,family_handle))
|
||||||
|
self.progress.step()
|
||||||
|
|
||||||
# Check persons membership in referenced families
|
# Check persons membership in referenced families
|
||||||
for person_handle in self.db.get_person_handles():
|
for person_handle in self.db.get_person_handles():
|
||||||
@ -227,8 +239,13 @@ class CheckIntegrity:
|
|||||||
person.remove_family_handle(family_handle)
|
person.remove_family_handle(family_handle)
|
||||||
self.db.commit_person(person,self.trans)
|
self.db.commit_person(person,self.trans)
|
||||||
self.broken_links.append((person_handle,family_handle))
|
self.broken_links.append((person_handle,family_handle))
|
||||||
|
self.progress.step()
|
||||||
|
|
||||||
def cleanup_missing_photos(self,cl=0):
|
def cleanup_missing_photos(self,cl=0):
|
||||||
|
|
||||||
|
self.progress.set_pass(_('Looking for unused objects'),
|
||||||
|
len(self.db.get_media_object_handles()))
|
||||||
|
|
||||||
missmedia_action = 0
|
missmedia_action = 0
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
def remove_clicked():
|
def remove_clicked():
|
||||||
@ -318,9 +335,17 @@ class CheckIntegrity:
|
|||||||
leave_clicked()
|
leave_clicked()
|
||||||
elif missmedia_action == 3:
|
elif missmedia_action == 3:
|
||||||
select_clicked()
|
select_clicked()
|
||||||
|
self.progress.step()
|
||||||
|
|
||||||
def cleanup_empty_families(self,automatic):
|
def cleanup_empty_families(self,automatic):
|
||||||
for family_handle in self.db.get_family_handles():
|
|
||||||
|
fhandle_list = self.db.get_family_handles()
|
||||||
|
|
||||||
|
self.progress.set_pass(_('Looking for empty families'),
|
||||||
|
len(fhandle_list))
|
||||||
|
for family_handle in fhandle_list:
|
||||||
|
self.progress.step()
|
||||||
|
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
father_handle = family.get_father_handle()
|
father_handle = family.get_father_handle()
|
||||||
mother_handle = family.get_mother_handle()
|
mother_handle = family.get_mother_handle()
|
||||||
@ -352,7 +377,12 @@ class CheckIntegrity:
|
|||||||
self.db.remove_family(family_handle,self.trans)
|
self.db.remove_family(family_handle,self.trans)
|
||||||
|
|
||||||
def check_parent_relationships(self):
|
def check_parent_relationships(self):
|
||||||
for family_handle in self.db.get_family_handles():
|
|
||||||
|
fhandle_list = self.db.get_family_handles()
|
||||||
|
self.progress.set_pass(_('Looking for broken parent relationships'),
|
||||||
|
len(fhandle_list))
|
||||||
|
|
||||||
|
for family_handle in fhandle_list:
|
||||||
family = self.db.get_family_from_handle(family_handle)
|
family = self.db.get_family_from_handle(family_handle)
|
||||||
mother_handle = family.get_mother_handle()
|
mother_handle = family.get_mother_handle()
|
||||||
father_handle = family.get_father_handle()
|
father_handle = family.get_father_handle()
|
||||||
@ -400,7 +430,12 @@ class CheckIntegrity:
|
|||||||
self.db.commit_family(family,self.trans)
|
self.db.commit_family(family,self.trans)
|
||||||
|
|
||||||
def check_events(self):
|
def check_events(self):
|
||||||
|
self.progress.set_pass(_('Looking for event problems'),
|
||||||
|
self.db.get_number_of_people())
|
||||||
|
|
||||||
for key in self.db.get_person_handles(sort_handles=False):
|
for key in self.db.get_person_handles(sort_handles=False):
|
||||||
|
self.progress.step()
|
||||||
|
|
||||||
person = self.db.get_person_from_handle(key)
|
person = self.db.get_person_from_handle(key)
|
||||||
birth_handle = person.get_birth_handle()
|
birth_handle = person.get_birth_handle()
|
||||||
if birth_handle:
|
if birth_handle:
|
||||||
@ -441,7 +476,12 @@ class CheckIntegrity:
|
|||||||
self.invalid_events.append(key)
|
self.invalid_events.append(key)
|
||||||
|
|
||||||
def check_place_references(self):
|
def check_place_references(self):
|
||||||
for key in self.db.get_event_handles():
|
elist = self.db.get_event_handles()
|
||||||
|
|
||||||
|
self.progress.set_pass(_('Looking for place reference problems'),
|
||||||
|
len(elist))
|
||||||
|
|
||||||
|
for key in elist:
|
||||||
event = self.db.get_event_from_handle(key)
|
event = self.db.get_event_from_handle(key)
|
||||||
place_handle = event.get_place_handle()
|
place_handle = event.get_place_handle()
|
||||||
if place_handle:
|
if place_handle:
|
||||||
@ -455,9 +495,18 @@ class CheckIntegrity:
|
|||||||
def check_source_references(self):
|
def check_source_references(self):
|
||||||
known_handles = self.db.get_source_handles()
|
known_handles = self.db.get_source_handles()
|
||||||
|
|
||||||
|
total = self.db.get_number_of_people() + self.db.get_number_of_families() + \
|
||||||
|
self.db.get_number_of_events() + self.db.get_number_of_places() + \
|
||||||
|
self.db.get_number_of_media_objects() + \
|
||||||
|
self.db.get_number_of_sources()
|
||||||
|
|
||||||
|
self.progress.set_pass(_('Looking for source reference problems'),
|
||||||
|
total)
|
||||||
|
|
||||||
cursor = self.db.get_person_cursor()
|
cursor = self.db.get_person_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
person = RelLib.Person()
|
person = RelLib.Person()
|
||||||
person.unserialize(info)
|
person.unserialize(info)
|
||||||
@ -477,6 +526,7 @@ class CheckIntegrity:
|
|||||||
cursor = self.db.get_family_cursor()
|
cursor = self.db.get_family_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
family = RelLib.Family()
|
family = RelLib.Family()
|
||||||
family.unserialize(info)
|
family.unserialize(info)
|
||||||
@ -496,6 +546,7 @@ class CheckIntegrity:
|
|||||||
cursor = self.db.get_place_cursor()
|
cursor = self.db.get_place_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
place = RelLib.Place()
|
place = RelLib.Place()
|
||||||
place.unserialize(info)
|
place.unserialize(info)
|
||||||
@ -515,6 +566,7 @@ class CheckIntegrity:
|
|||||||
cursor = self.db.get_source_cursor()
|
cursor = self.db.get_source_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
source = RelLib.Source()
|
source = RelLib.Source()
|
||||||
source.unserialize(info)
|
source.unserialize(info)
|
||||||
@ -534,6 +586,7 @@ class CheckIntegrity:
|
|||||||
cursor = self.db.get_media_cursor()
|
cursor = self.db.get_media_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
obj = RelLib.MediaObject()
|
obj = RelLib.MediaObject()
|
||||||
obj.unserialize(info)
|
obj.unserialize(info)
|
||||||
@ -553,6 +606,7 @@ class CheckIntegrity:
|
|||||||
cursor = self.db.get_event_cursor()
|
cursor = self.db.get_event_cursor()
|
||||||
data = cursor.first()
|
data = cursor.first()
|
||||||
while data:
|
while data:
|
||||||
|
self.progress.step()
|
||||||
handle,info = data
|
handle,info = data
|
||||||
event = RelLib.Event()
|
event = RelLib.Event()
|
||||||
event.unserialize(info)
|
event.unserialize(info)
|
||||||
@ -570,6 +624,7 @@ class CheckIntegrity:
|
|||||||
cursor.close()
|
cursor.close()
|
||||||
|
|
||||||
def build_report(self,cl=0):
|
def build_report(self,cl=0):
|
||||||
|
self.progress.close()
|
||||||
bad_photos = len(self.bad_photo)
|
bad_photos = len(self.bad_photo)
|
||||||
replaced_photos = len(self.replaced_photo)
|
replaced_photos = len(self.replaced_photo)
|
||||||
removed_photos = len(self.removed_photo)
|
removed_photos = len(self.removed_photo)
|
||||||
|
Loading…
Reference in New Issue
Block a user