diff --git a/ChangeLog b/ChangeLog index 9c949d3dc..228ad712c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ 2006-05-09 Alex Roitman + * src/plugins/ExportVCard.py: Bring to new API. + * src/plugins/ExportVCalendar.py: Bring to new API. * src/plugins/WriteFtree.py: Bring to new API. * src/Filters/_FilterMenu.py (build_filter_menu): Return the menu. * src/plugins/WriteGeneWeb.py: Bring to new API. diff --git a/src/plugins/ExportVCalendar.py b/src/plugins/ExportVCalendar.py index 8a5d8cdd1..c61caed6b 100644 --- a/src/plugins/ExportVCalendar.py +++ b/src/plugins/ExportVCalendar.py @@ -29,6 +29,7 @@ #------------------------------------------------------------------------- import os from time import localtime +from gettext import gettext as _ #------------------------------------------------------------------------- # @@ -54,9 +55,8 @@ log = logging.getLogger(".ExportVCal") from Filters import GenericFilter, Rules, build_filter_menu import const import Utils -from RelLib import Date +from RelLib import Date, EventType import Errors -from gettext import gettext as _ from QuestionDialog import ErrorDialog from PluginUtils import register_export @@ -124,12 +124,18 @@ class CalendarWriterOptionBox: class CalendarWriter: - def __init__(self,database,person,cl=0,filename="",option_box=None): + def __init__(self,database,person,cl=0,filename="", + option_box=None,callback=None): self.db = database self.person = person self.option_box = option_box self.cl = cl self.filename = filename + self.callback = callback + if '__call__' in dir(self.callback): # callback is really callable + self.update = self.update_real + else: + self.update = self.update_empty self.plist = {} self.flist = {} @@ -161,6 +167,16 @@ class CalendarWriter: for family_handle in p.get_family_handle_list(): self.flist[family_handle] = 1 + def update_empty(self): + pass + + def update_real(self): + self.count += 1 + newval = int(100*self.count/self.total) + if newval != self.oldval: + self.callback(newval) + self.oldval = newval + def cl_setup(self): for p in self.db.get_person_handles(sort_handles=False): self.plist[p] = 1 @@ -191,11 +207,17 @@ class CalendarWriter: self.writeln("BEGIN:VCALENDAR"); self.writeln("PRODID:-//GNU//Gramps//EN"); self.writeln("VERSION:1.0"); + + self.count = 0 + self.oldval = 0 + self.total = len(self.plist) + len(self.flist) for key in self.plist: self.write_person(key) + self.update() for key in self.flist: self.write_family(key) + self.update() self.writeln(""); self.writeln("END:VCALENDAR"); @@ -208,7 +230,7 @@ class CalendarWriter: if family: for event_ref in family.get_event_ref_list(): event = self.db.get_event_from_handle(event_ref.ref) - if int(event.get_type()) == RelLib.EventType.MARRIAGE: + if event.get_type() == EventType.MARRIAGE: m_date = event.get_date_object() place_handle = event.get_place_handle() text = _("Marriage of %s") % Utils.family_name(family,self.db) @@ -308,9 +330,9 @@ class CalendarWriter: # # #------------------------------------------------------------------------- -def exportData(database,filename,person,option_box): +def exportData(database,filename,person,option_box,callback=None): ret = 0 - cw = CalendarWriter(database,person,0,filename,option_box) + cw = CalendarWriter(database,person,0,filename,option_box,callback) ret = cw.export_data(filename) return ret diff --git a/src/plugins/ExportVCard.py b/src/plugins/ExportVCard.py index 747b3cebc..a734a81d1 100644 --- a/src/plugins/ExportVCard.py +++ b/src/plugins/ExportVCard.py @@ -28,6 +28,7 @@ # #------------------------------------------------------------------------- import os +from gettext import gettext as _ #------------------------------------------------------------------------ # @@ -54,7 +55,6 @@ from Filters import GenericFilter, Rules, build_filter_menu import const from RelLib import Date import Errors -from gettext import gettext as _ from QuestionDialog import ErrorDialog from PluginUtils import register_export @@ -121,12 +121,18 @@ class CardWriterOptionBox: self.cfilter = self.filter_menu.get_active().get_data("filter") class CardWriter: - def __init__(self,database,person,cl=0,filename="",option_box=None): + def __init__(self,database,person,cl=0,filename="", + option_box=None,callback=None): self.db = database self.person = person self.option_box = option_box self.cl = cl self.filename = filename + self.callback = callback + if '__call__' in dir(self.callback): # callback is really callable + self.update = self.update_real + else: + self.update = self.update_empty self.plist = {} @@ -147,7 +153,16 @@ class CardWriter: ErrorDialog(m1,m2) return - + def update_empty(self): + pass + + def update_real(self): + self.count += 1 + newval = int(100*self.count/self.total) + if newval != self.oldval: + self.callback(newval) + self.oldval = newval + def cl_setup(self): for p in self.db.get_person_handles(sort_handles=False): self.plist[p] = 1 @@ -168,12 +183,15 @@ class CardWriter: ErrorDialog(_("Could not create %s") % filename) return 0 + self.count = 0 + self.oldval = 0 + self.total = len(self.plist) for key in self.plist: self.write_person(key) + self.update() self.g.close() - return 1 - + return 1 def write_person(self, person_handle): person = self.db.get_person_from_handle(person_handle) @@ -227,9 +245,9 @@ class CardWriter: # # #------------------------------------------------------------------------- -def exportData(database,filename,person,option_box): +def exportData(database,filename,person,option_box,callback=None): ret = 0 - cw = CardWriter(database,person,0,filename,option_box) + cw = CardWriter(database,person,0,filename,option_box,callback) ret = cw.export_data(filename) return ret