Example #1
0
 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)
Example #2
0
 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
Example #3
0
 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
Example #4
0
    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
Example #5
0
    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
Example #6
0
 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
Example #7
0
 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
Example #8
0
 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
Example #9
0
 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