diff --git a/ChangeLog b/ChangeLog index 030184e27..0c755410d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2004-11-25 Alex Roitman + * src/RecentFiles.py: Make robust to parse/save problems. + * src/DbPrompter.py: Support for recent-files on new db creation. + 2004-11-25 Don Allingham * src/FamilyView.py: Add check for empty family in display_marriage diff --git a/src/DbPrompter.py b/src/DbPrompter.py index 7dd7e40c8..72427747a 100644 --- a/src/DbPrompter.py +++ b/src/DbPrompter.py @@ -180,7 +180,7 @@ class ExistingDbPrompter: (the_path,the_file) = os.path.split(filename) GrampsGconfKeys.save_last_import_dir(the_path) - ret = False + success = False if filetype == const.app_gramps: choose.destroy() self.parent.db = GrampsBSDDB.GrampsBSDDB() @@ -188,19 +188,20 @@ class ExistingDbPrompter: msg_top = msgxml.get_widget('load_message') self.parent.read_file(filename) msg_top.destroy() - ret = True + success = True elif filetype == const.app_gramps_xml: choose.destroy() self.parent.db = GrampsXMLDB.GrampsXMLDB() self.parent.read_file(filename) - ret = True + success = True elif filetype == const.app_gedcom: choose.destroy() self.parent.db = GrampsGEDDB.GrampsGEDDB() self.parent.read_file(filename) - ret = True + success = True - if ret: + if success: + # Add the file to the recent items rf = RecentFiles.RecentFiles() item = RecentFiles.RecentItem( u='file://%s' % filename, @@ -388,6 +389,16 @@ class NewNativeDbPrompter: filename = filename + ".grdb" choose.destroy() self.parent.read_file(filename) + # Add the file to the recent items + rf = RecentFiles.RecentFiles() + item = RecentFiles.RecentItem( + u='file://%s' % filename, + m=const.app_gramps, + t=int(time.time()), + p=False, + g=['Gramps']) + rf.add(item) + rf.save() return True else: choose.destroy() diff --git a/src/RecentFiles.py b/src/RecentFiles.py index cfd36405b..0f6cd0d02 100644 --- a/src/RecentFiles.py +++ b/src/RecentFiles.py @@ -87,6 +87,10 @@ class RecentItem: def get_groups(self): return self.groups[:] + def add_group(self,group): + if group not in self.groups: + self.groups.append(group) + #------------------------------------------------------------------------- # # RecentFiles @@ -102,13 +106,31 @@ class RecentFiles: self.recent_files = parser.get() def add(self,item2add): + # First we need to walk the existing items to see + # if our item is already there for item in self.recent_files: if item.get_uri() == item2add.get_uri(): + # Found it -- modify timestamp and add all groups + # to the item's groups item.set_time(item2add.get_time()) + for group in item2add.get_groups(): + item.add_group(group) return + # At this point we walked the items and not found one, + # so simply inserting a new item in the beginning self.recent_files.insert(0,item2add) def save(self): + """ + Attempt saving into XML. + The trick is not to fail under any circumstances. + """ + try: + self.do_save() + except: + pass + + def do_save(self): """ Saves the current RecentFiles collection to the associated file. """ @@ -146,33 +168,29 @@ class RecentParser: """ def __init__(self): - xml_file = file(os.path.expanduser(FILENAME)) - fcntl.lockf(xml_file,fcntl.LOCK_SH) + self.recent_files = [] - self.recent_files = None + try: + xml_file = open(os.path.expanduser(FILENAME)) + fcntl.lockf(xml_file,fcntl.LOCK_SH) - p = xml.parsers.expat.ParserCreate() - p.StartElementHandler = self.startElement - p.EndElementHandler = self.endElement - p.CharacterDataHandler = self.characters - p.ParseFile(xml_file) + p = xml.parsers.expat.ParserCreate() + p.StartElementHandler = self.startElement + p.EndElementHandler = self.endElement + p.CharacterDataHandler = self.characters + p.ParseFile(xml_file) - fcntl.lockf(xml_file,fcntl.LOCK_UN) - xml_file.close() + fcntl.lockf(xml_file,fcntl.LOCK_UN) + xml_file.close() + except: + pass def get(self): return self.recent_files def startElement(self,tag,attrs): - """ - Loads the dictionary when an XML tag of 'template' is found. The format - XML tag is