def getrepeattype(self, entry, exceptions): #convert the bpcalender type into vx8100 type repeat_entry=bpcalendar.RepeatEntry() interval2=0 if entry.repeat.repeat_type==repeat_entry.monthly: dow=entry.repeat.dow interval2=entry.repeat.interval2 if entry.repeat.dow==0: # set interval for month type 4 to start day of month, (required by vx8100) interval=entry.start[2] type=5 else: interval=entry.repeat.interval type=4 elif entry.repeat.repeat_type==repeat_entry.daily: dow=entry.repeat.dow interval=entry.repeat.interval if entry.repeat.interval==0: type=2 else: type=1 elif entry.repeat.repeat_type==repeat_entry.weekly: dow=entry.repeat.dow interval=entry.repeat.interval type=3 elif entry.repeat.repeat_type==repeat_entry.yearly: # set interval to start day of month, (required by vx8100) interval=entry.start[2] # set dow to start month, (required by vx8100) dow=entry.start[1] type=7 return (type, dow, interval, interval2, exceptions)
def makerepeat(self, repeat): # get all the variables out of the repeat tuple # and convert into a bpcalender RepeatEntry type, dow, interval, interval2, exceptions = repeat if type == 0: repeat_entry = None else: repeat_entry = bpcalendar.RepeatEntry() if type == 1: #daily repeat_entry.repeat_type = repeat_entry.daily repeat_entry.interval = interval elif type == 5: #'monfri' repeat_entry.repeat_type = repeat_entry.daily repeat_entry.interval = 0 elif type == 2: #'weekly' repeat_entry.repeat_type = repeat_entry.weekly repeat_entry.dow = dow repeat_entry.interval = interval elif type == 3: #'monthly' repeat_entry.repeat_type = repeat_entry.monthly repeat_entry.interval2 = interval2 repeat_entry.dow = 0 elif type == 6: #'monthly' #Xth Y day (e.g. 2nd friday each month) repeat_entry.repeat_type = repeat_entry.monthly repeat_entry.interval = interval #X repeat_entry.dow = dow #Y repeat_entry.interval2 = interval2 else: # =4 'yearly' repeat_entry.repeat_type = repeat_entry.yearly return repeat_entry
def makerepeat(self, repeat, start): # get all the variables out of the repeat tuple # and convert into a bpcalender RepeatEntry type,dow,interval,interval2,exceptions=repeat #print "repeat "+`repeat`+" start "+`start` if type==0: repeat_entry=None else: repeat_entry=bpcalendar.RepeatEntry() if type==1: #daily repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=interval elif type==2: #'monfri' repeat_entry.repeat_type=repeat_entry.daily repeat_entry.interval=0 elif type==3: #'weekly' repeat_entry.repeat_type=repeat_entry.weekly repeat_entry.interval=interval elif type==5: #'monthly' repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval2=interval2 repeat_entry.dow=0 elif type==4: #'monthly' #Xth Y day (e.g. 2nd friday each month) repeat_entry.repeat_type=repeat_entry.monthly repeat_entry.interval=interval #X repeat_entry.dow=dow #Y repeat_entry.interval2=interval2 elif type==6: #'yearly #Xth Y day of Month (2nd sunday of april)' Not supported by bitpim #repeat_entry.repeat_type=repeat_entry.yearly repeat_entry=None else: # =7 'yearly' repeat_entry.repeat_type=repeat_entry.yearly return repeat_entry
def __populate_repeat_entry(self, e, ce): # populate repeat entry data if not e.get('repeat', False) or e.get('repeat_type', None) is None: # not a repeat event return rp=bpcalendar.RepeatEntry() rp_type=e['repeat_type'] rp_interval=e.get('repeat_interval', 1) rp_interval2=e.get('repeat_interval2', 1) rp_dow=e.get('repeat_dow', 0) if rp_type==rp.daily: # daily event rp.repeat_type=rp.daily rp.interval=rp_interval elif rp_type==rp.weekly or rp_type==rp.monthly: rp.repeat_type=rp_type rp.interval=rp_interval rp.interval2=rp_interval2 rp.dow=rp_dow elif rp_type==rp.yearly: rp.repeat_type=rp.yearly else: # not yet supported return # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) # all done ce.repeat=rp
def _build_repeat_part(self, entry, calendar, fundamentals): """Build and return a repeat object of this entry""" _rep=None _repeat_type=entry.repeat_type if _repeat_type==self.protocolclass.CAL_REP_DAILY: _rep=bpcalendar.RepeatEntry() _rep.interval=1 elif _repeat_type==self.protocolclass.CAL_REP_WEEKLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.weekly) _rep.interval=1 elif _repeat_type==self.protocolclass.CAL_REP_MONTHLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.monthly) _rep.interval2=1 _rep.dow=0 elif _repeat_type==self.protocolclass.CAL_REP_MONTHLY_NTH: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.monthly) _rep.interval=_rep.get_nthweekday(entry.start_date) _rep.interval2=1 _rep.dow=self._dow(entry.start_date) elif _repeat_type==self.protocolclass.CAL_REP_YEARLY: _rep=bpcalendar.RepeatEntry(bpcalendar.RepeatEntry.yearly) return _rep
def _populate_repeat_entry(self, e, ce): # populate repeat entry data if not e.get('repeat', False) or e.get('repeat_type', None) is None: # not a repeat event return rp = bpcalendar.RepeatEntry() rp_type = e['repeat_type'] rp_interval = e.get('repeat_interval', 1) rp_interval2 = e.get('repeat_interval2', 1) rp_end = e.get('repeat_end', None) rp_num = e.get('repeat_num', None) rp_dow = e.get('repeat_dow', 0) if rp_type == rp.daily: # daily event rp.repeat_type = rp.daily rp.interval = rp_interval elif rp_type == rp.weekly or rp_type == rp.monthly: rp.repeat_type = rp_type rp.interval = rp_interval rp.interval2 = rp_interval2 rp.dow = rp_dow elif rp_type == rp.yearly: rp.repeat_type = rp.yearly else: # not yet supported return rp.weekstart = e.get('repeat_wkst', 'MO') # setting the repeat duration/end-date of this event if rp_end is not None: # end date specified ce.end = rp_end[:3] + ce.end[3:] elif rp_num: # num of occurrences specified _dt = ce.start[:3] for i in range(rp_num - 1): _dt = rp.next_date(_dt) ce.end = _dt[:3] + ce.end[3:] else: # forever duration ce.end = common_calendar.no_end_date[:3] + ce.end[3:] # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) # all done ce.repeat = rp
def _build_bpcalendar_entry(self, phone_entry): entry = bpcalendar.CalendarEntry() entry.start = phone_entry.date + phone_entry.time entry.end = phone_entry.date + phone_entry.time entry.description = phone_entry.description entry.serials.append({'sourcetype': 'phone', 'id': phone_entry.index}) entry.alarm = self.protocolclass.CAL_ALARM_VALUE.get( phone_entry.alarm, -1) _rpt_type = self.cal_repeat_value.get(phone_entry.repeat, None) if _rpt_type: # this is a recurrent event rpt = bpcalendar.RepeatEntry(_rpt_type) if _rpt_type != bpcalendar.RepeatEntry.yearly: rpt.interval = 1 # repeat forever entry.end = bpcalendar.CalendarEntry.no_end_date entry.repeat = rpt return entry
def Get(self): self.dirty = self.ignore_dirty = False rt = self._repeat_option_rb.GetSelection() if rt == 0: # No repeat return None r = bpcalendar.RepeatEntry() if rt == 1: # daily self._get_daily_options(r) elif rt == 2: # weekly self._get_weekly_options(r) elif rt == 3: # monthly self._get_monthly_options(r) else: r.repeat_type = r.yearly # get the list of exceptions r.suppressed=[str(self._exception_list.GetString(i)) \ for i in range(self._exception_list.GetCount())] # and return the result return r
def _populate_entry(self, e, ce): # populate an calendar entry with outlook data ce.description = e.get('description', None) ce.location = e.get('location', None) v = e.get('priority', None) if v is not None: if v == self.olImportanceNormal: ce.priority = ce.priority_normal elif v == self.olImportanceLow: ce.priority = ce.priority_low elif v == self.olImportanceHigh: ce.priority = ce.priority_high if not self._filter.get('no_alarm', False) and \ not self._filter.get('alarm_override', False) and \ e.get('alarm', False): ce.alarm = e.get('alarm_value', 0) ce.ringtone = self._filter.get('ringtone', "") ce.vibrate = self._filter.get('vibrate', False) elif not self._filter.get('no_alarm', False) and \ self._filter.get('alarm_override', False): ce.alarm = self._filter.get('alarm_value', 0) ce.ringtone = self._filter.get('ringtone', "") ce.vibrate = self._filter.get('vibrate', False) ce.allday = e.get('allday', False) if ce.allday: if not e.get('repeat', False): ce.start = e['start'][:3] + (0, 0) # for non-recurrent allday events, Outlook always set the # end date to 1-extra day. _dt = datetime.datetime(*e['end']) - datetime.timedelta(1) ce.end = (_dt.year, _dt.month, _dt.day, 23, 59) else: # unless it is a repeating all day event! # we can now handle allday events that span more than one day! ce.start = e['start'][:3] + (0, 0) ce.end = e['end'][:3] + (23, 59) else: ce.start = e['start'] ce.end = e['end'] ce.notes = e.get('notes', None) v = [] for k in e.get('categories', []): v.append({'category': k}) ce.categories = v # look at repeat events if not e.get('repeat', False): # not a repeat event, just return return rp = bpcalendar.RepeatEntry() rt = e['repeat_type'] r_interval = e.get('repeat_interval', 0) r_interval2 = e.get('repeat_interval2', 1) r_dow = e.get('repeat_dow', 0) if rt == self.olRecursDaily: rp.repeat_type = rp.daily elif rt == self.olRecursWeekly: if r_interval: # weekly event rp.repeat_type = rp.weekly else: # mon-fri event rp.repeat_type = rp.daily elif rt == self.olRecursMonthly or rt == self.olRecursMonthNth: rp.repeat_type = rp.monthly else: rp.repeat_type = rp.yearly if rp.repeat_type == rp.daily: rp.interval = r_interval elif rp.repeat_type == rp.weekly or rp.repeat_type == rp.monthly: rp.interval = r_interval rp.interval2 = r_interval2 rp.dow = r_dow # check for invalid monthly type if rp.repeat_type==rp.monthly and \ rp.dow in (rp.dow_weekday, rp.dow_weekend): rp.dow = 0 # add the list of exceptions for k in e.get('exceptions', []): rp.add_suppressed(*k[:3]) ce.repeat = rp