Fix Gedcom import for multiple notes on OBJE (MULTIMEDIA_LINK) (#782)
Fixes #10277
This commit is contained in:
parent
7a82b78ff9
commit
f84c2ecf11
@ -3,7 +3,7 @@
|
|||||||
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
"http://gramps-project.org/xml/1.7.1/grampsxml.dtd">
|
||||||
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
<database xmlns="http://gramps-project.org/xml/1.7.1/">
|
||||||
<header>
|
<header>
|
||||||
<created date="2017-05-30" version="5.0.0-alpha1"/>
|
<created date="2019-02-01" version="5.0.2"/>
|
||||||
<researcher>
|
<researcher>
|
||||||
</researcher>
|
</researcher>
|
||||||
</header>
|
</header>
|
||||||
@ -66,6 +66,7 @@
|
|||||||
<object handle="_0000000300000003" change="1" id="O0000">
|
<object handle="_0000000300000003" change="1" id="O0000">
|
||||||
<file src="test_emb_55.jpg" mime="image/jpeg" description="Multimedia link embedded form v5.5"/>
|
<file src="test_emb_55.jpg" mime="image/jpeg" description="Multimedia link embedded form v5.5"/>
|
||||||
<noteref hlink="_0000000200000002"/>
|
<noteref hlink="_0000000200000002"/>
|
||||||
|
<noteref hlink="_0000000b0000000b"/>
|
||||||
</object>
|
</object>
|
||||||
<object handle="_0000000400000004" change="548708291" id="M1">
|
<object handle="_0000000400000004" change="548708291" id="M1">
|
||||||
<file src="" mime="" description="Multimedia link to linked form v5.5 blob"/>
|
<file src="" mime="" description="Multimedia link to linked form v5.5 blob"/>
|
||||||
|
@ -2315,8 +2315,8 @@ class GedcomParser(UpdateCallback):
|
|||||||
TOKEN_MEDI : self.__media_ref_medi, # v5.5.1
|
TOKEN_MEDI : self.__media_ref_medi, # v5.5.1
|
||||||
TOKEN_TITL : self.__media_ref_titl,
|
TOKEN_TITL : self.__media_ref_titl,
|
||||||
TOKEN_FILE : self.__media_ref_file,
|
TOKEN_FILE : self.__media_ref_file,
|
||||||
TOKEN_NOTE : self.__media_ref_note,
|
TOKEN_NOTE : self.__obje_note, # illegal, but often there
|
||||||
TOKEN_RNOTE : self.__media_ref_note,
|
TOKEN_RNOTE : self.__obje_note, # illegal, but often there
|
||||||
TOKEN__PRIM : self.__media_ref_prim, # LFT etc.
|
TOKEN__PRIM : self.__media_ref_prim, # LFT etc.
|
||||||
TOKEN_IGNORE : self.__ignore,
|
TOKEN_IGNORE : self.__ignore,
|
||||||
}
|
}
|
||||||
@ -5331,7 +5331,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
sub_state.attr = None
|
sub_state.attr = None
|
||||||
sub_state.filename = ""
|
sub_state.filename = ""
|
||||||
sub_state.title = ""
|
sub_state.title = ""
|
||||||
sub_state.note = ""
|
sub_state.media = Media()
|
||||||
sub_state.level = state.level + 1
|
sub_state.level = state.level + 1
|
||||||
sub_state.prim = ""
|
sub_state.prim = ""
|
||||||
|
|
||||||
@ -5376,7 +5376,7 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
path = sub_state.filename
|
path = sub_state.filename
|
||||||
# Multiple references to the same media silently drops the later
|
# Multiple references to the same media silently drops the later
|
||||||
# ones, even if title, notes etc. are different
|
# ones, even if title, etc. are different
|
||||||
photo_handle = self.media_map.get(path)
|
photo_handle = self.media_map.get(path)
|
||||||
if photo_handle is None:
|
if photo_handle is None:
|
||||||
photo = Media()
|
photo = Media()
|
||||||
@ -5391,14 +5391,17 @@ class GedcomParser(UpdateCallback):
|
|||||||
else:
|
else:
|
||||||
photo.set_mime_type(MIME_MAP.get(sub_state.form,
|
photo.set_mime_type(MIME_MAP.get(sub_state.form,
|
||||||
'unknown'))
|
'unknown'))
|
||||||
if sub_state.note:
|
|
||||||
photo.add_note(sub_state.note)
|
|
||||||
if sub_state.attr:
|
if sub_state.attr:
|
||||||
photo.attribute_list.append(sub_state.attr)
|
photo.attribute_list.append(sub_state.attr)
|
||||||
self.dbase.add_media(photo, self.trans)
|
self.dbase.add_media(photo, self.trans)
|
||||||
self.media_map[path] = photo.handle
|
self.media_map[path] = photo.handle
|
||||||
else:
|
else:
|
||||||
photo = self.dbase.get_media_from_handle(photo_handle)
|
photo = self.dbase.get_media_from_handle(photo_handle)
|
||||||
|
# copy notes to our media
|
||||||
|
for note in sub_state.media.get_note_list():
|
||||||
|
photo.add_note(note)
|
||||||
|
self.dbase.commit_media(photo, self.trans)
|
||||||
|
|
||||||
if sub_state.prim == "Y":
|
if sub_state.prim == "Y":
|
||||||
state.photo = photo.handle
|
state.photo = photo.handle
|
||||||
oref = MediaRef()
|
oref = MediaRef()
|
||||||
@ -5458,21 +5461,6 @@ class GedcomParser(UpdateCallback):
|
|||||||
return
|
return
|
||||||
state.filename = line.data
|
state.filename = line.data
|
||||||
|
|
||||||
def __media_ref_note(self, line, state):
|
|
||||||
"""
|
|
||||||
+1 <<NOTE_STRUCTURE>> {0:M}
|
|
||||||
|
|
||||||
@param line: The current line in GedLine format
|
|
||||||
@type line: GedLine
|
|
||||||
@param state: The current state
|
|
||||||
@type state: CurrentState
|
|
||||||
"""
|
|
||||||
obj = Media()
|
|
||||||
self.__parse_note(line, obj, state)
|
|
||||||
nlist = obj.get_note_list()
|
|
||||||
if nlist:
|
|
||||||
state.note = nlist[0]
|
|
||||||
|
|
||||||
def __media_ref_prim(self, line, state):
|
def __media_ref_prim(self, line, state):
|
||||||
"""
|
"""
|
||||||
+1 _PRIM <Y/N> {0:1}
|
+1 _PRIM <Y/N> {0:1}
|
||||||
|
Loading…
Reference in New Issue
Block a user