2007-10-06 Benny Malengier <benny.malengier@gramps-project.org>
* src/DataViews/_RelationView.py: don't crash on missing media ref * src/DisplayTabs/_GalleryTab.py: on missing media ref, notify to run check tool * src/plugins/Check.py: add code to remove missing media ref in person, family, event, place, source. svn: r9089
This commit is contained in:
parent
8bc8b9858e
commit
e7f02d1855
@ -1,3 +1,9 @@
|
||||
2007-10-06 Benny Malengier <benny.malengier@gramps-project.org>
|
||||
* src/DataViews/_RelationView.py: don't crash on missing media ref
|
||||
* src/DisplayTabs/_GalleryTab.py: on missing media ref, notify to run check tool
|
||||
* src/plugins/Check.py: add code to remove missing media ref in person,
|
||||
family, event, place, source.
|
||||
|
||||
2007-10-06 Benny Malengier <benny.malengier@gramps-project.org>
|
||||
* src/plugins/Check.py: add remove empty objects.
|
||||
|
||||
|
@ -564,7 +564,7 @@ class RelationshipView(PageView.PersonNavView):
|
||||
image_list = person.get_media_list()
|
||||
if image_list:
|
||||
mobj = self.dbstate.db.get_object_from_handle(image_list[0].ref)
|
||||
if mobj.get_mime_type()[0:5] == "image":
|
||||
if mobj and mobj.get_mime_type()[0:5] == "image":
|
||||
pixbuf = ThumbNails.get_thumbnail_image(mobj.get_path(),
|
||||
rectangle=image_list[0].get_rectangle())
|
||||
image = gtk.Image()
|
||||
|
@ -213,10 +213,16 @@ class GalleryTab(ButtonTab):
|
||||
for ref in self.media_list:
|
||||
handle = ref.get_reference_handle()
|
||||
obj = self.dbstate.db.get_object_from_handle(handle)
|
||||
pixbuf = ThumbNails.get_thumbnail_image(obj.get_path(),
|
||||
if obj is None :
|
||||
#notify user of error
|
||||
from QuestionDialog import RunDatabaseRepair
|
||||
RunDatabaseRepair(
|
||||
_('Unexisting media found in the Gallery'))
|
||||
else :
|
||||
pixbuf = ThumbNails.get_thumbnail_image(obj.get_path(),
|
||||
obj.get_mime_type(),
|
||||
ref.get_rectangle())
|
||||
self.iconmodel.append(row=[pixbuf, obj.get_description(), ref])
|
||||
self.iconmodel.append(row=[pixbuf, obj.get_description(), ref])
|
||||
self._connect_icon_model()
|
||||
self._set_label()
|
||||
self._selection_changed()
|
||||
|
@ -186,6 +186,7 @@ class Check(Tool.BatchTool):
|
||||
checker.check_person_references()
|
||||
checker.check_place_references()
|
||||
checker.check_source_references()
|
||||
checker.check_media_references()
|
||||
checker.check_repo_references()
|
||||
self.db.transaction_commit(trans, _("Check Integrity"))
|
||||
self.db.enable_signals()
|
||||
@ -220,6 +221,7 @@ class CheckIntegrity:
|
||||
self.invalid_place_references = []
|
||||
self.invalid_source_references = []
|
||||
self.invalid_repo_references = []
|
||||
self.invalid_media_references = []
|
||||
self.removed_name_format = []
|
||||
self.empty_objects = {'persons' : [],
|
||||
'families': [],
|
||||
@ -950,7 +952,8 @@ class CheckIntegrity:
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
|
||||
|
||||
#I think this for loop is useless! sources in sources map exist...
|
||||
for handle in known_handles:
|
||||
self.progress.step()
|
||||
info = self.db.source_map[handle]
|
||||
@ -999,6 +1002,96 @@ class CheckIntegrity:
|
||||
not in self.invalid_source_references]
|
||||
self.invalid_source_references += new_bad_handles
|
||||
|
||||
def check_media_references(self):
|
||||
known_handles = self.db.get_media_object_handles(False)
|
||||
|
||||
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_sources()
|
||||
|
||||
self.progress.set_pass(_('Looking for media object reference problems'),
|
||||
total)
|
||||
|
||||
for handle in self.db.person_map.keys():
|
||||
self.progress.step()
|
||||
info = self.db.person_map[handle]
|
||||
person = RelLib.Person()
|
||||
person.unserialize(info)
|
||||
handle_list = person.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'MediaObject' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
person.remove_media_references(bad_handles)
|
||||
self.db.commit_person(person,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_media_references]
|
||||
self.invalid_media_references += new_bad_handles
|
||||
|
||||
for handle in self.db.family_map.keys():
|
||||
self.progress.step()
|
||||
info = self.db.family_map[handle]
|
||||
family = RelLib.Family()
|
||||
family.unserialize(info)
|
||||
handle_list = family.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'MediaObject' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
family.remove_media_references(bad_handles)
|
||||
self.db.commit_family(family,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_media_references]
|
||||
self.invalid_media_references += new_bad_handles
|
||||
|
||||
for handle in self.db.place_map.keys():
|
||||
self.progress.step()
|
||||
info = self.db.place_map[handle]
|
||||
place = RelLib.Place()
|
||||
place.unserialize(info)
|
||||
handle_list = place.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'MediaObject' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
place.remove_media_references(bad_handles)
|
||||
self.db.commit_place(place,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_media_references]
|
||||
self.invalid_media_references += new_bad_handles
|
||||
|
||||
for handle in self.db.event_map.keys():
|
||||
self.progress.step()
|
||||
info = self.db.event_map[handle]
|
||||
event = RelLib.Event()
|
||||
event.unserialize(info)
|
||||
handle_list = event.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'MediaObject' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
event.remove_media_references(bad_handles)
|
||||
self.db.commit_event(event,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_media_references]
|
||||
self.invalid_media_references += new_bad_handles
|
||||
|
||||
for handle in self.db.source_map.keys():
|
||||
self.progress.step()
|
||||
info = self.db.source_map[handle]
|
||||
source = RelLib.Source()
|
||||
source.unserialize(info)
|
||||
handle_list = source.get_referenced_handles_recursively()
|
||||
bad_handles = [ item[1] for item in handle_list
|
||||
if item[0] == 'MediaObject' and
|
||||
item[1] not in known_handles ]
|
||||
if bad_handles:
|
||||
source.remove_media_references(bad_handles)
|
||||
self.db.commit_source(source,self.trans)
|
||||
new_bad_handles = [handle for handle in bad_handles if handle
|
||||
not in self.invalid_media_references]
|
||||
self.invalid_media_references += new_bad_handles
|
||||
|
||||
def build_report(self,cl=0):
|
||||
self.progress.close()
|
||||
bad_photos = len(self.bad_photo)
|
||||
@ -1018,6 +1111,7 @@ class CheckIntegrity:
|
||||
place_references = len(self.invalid_place_references)
|
||||
source_references = len(self.invalid_source_references)
|
||||
repo_references = len(self.invalid_repo_references)
|
||||
media_references = len(self.invalid_media_references)
|
||||
name_format = len(self.removed_name_format)
|
||||
empty_objs = ( len(self.empty_objects['persons'])
|
||||
+ len(self.empty_objects['families'])
|
||||
@ -1032,7 +1126,8 @@ class CheckIntegrity:
|
||||
errors = (photos + efam + blink + plink + slink + rel
|
||||
+ event_invalid + person
|
||||
+ person_references + place_references + source_references
|
||||
+ repo_references + name_format + empty_objs
|
||||
+ repo_references + media_references
|
||||
+ name_format + empty_objs
|
||||
)
|
||||
|
||||
if errors == 0:
|
||||
@ -1167,6 +1262,12 @@ class CheckIntegrity:
|
||||
elif source_references > 1:
|
||||
self.text.write(_("%d sources were referenced, but not found\n") % source_references)
|
||||
|
||||
if media_references == 1:
|
||||
self.text.write(_("1 media object was referenced but not found\n"))
|
||||
elif media_references > 1:
|
||||
self.text.write(_("%d media objects were referenced, "
|
||||
"but not found\n") % media_references)
|
||||
|
||||
if name_format == 1:
|
||||
self.text.write(_("1 invalid name format reference was removed\n"))
|
||||
elif name_format > 1:
|
||||
|
Loading…
x
Reference in New Issue
Block a user