Example #1
0
    def _make_label(rstartin, rstartA, rstartH, rstartM, rendH, rendM, ralarmH,
                                ralarmM, rendn, rendu, ralarmn, ralarmu,
                                endtype, alarmtype, fend, palarm, standard):
        label = 'Occur on the {} {} of every month at {}:{} ({})'.format(
                    MonthInverseWeekdayHourCtrl.compute_weekday_number_label(
                                                            rstartin), rstartA,
                    str(rstartH).zfill(2), str(rstartM).zfill(2), standard)

        if endtype == 1:
            label += ' for {} {}'.format(rendn, rendu)
        elif endtype == 2:
            label += ' until {}:{}'.format(str(rendH).zfill(2),
                                                           str(rendM).zfill(2))
            if fend:
                label += ' of the following day'

        if alarmtype == 1:
            label += ', activate alarm {} {} before'.format(ralarmn, ralarmu)
        elif alarmtype == 2:
            label += ', activate alarm at {}:{}'.format(
                                  str(ralarmH).zfill(2), str(ralarmM).zfill(2))
            if palarm:
                label += ' of the previous day'

        return label
Example #2
0
    def _compute_values(cls, standard, rule):
        # Remember to support also time zones that differ from UTC by not
        # exact hours (e.g. Australia/Adelaide)
        if not rule:
            nh = _datetime.datetime.now() + _datetime.timedelta(hours=1)
            lday = _calendar.monthrange(nh.year, nh.month)[1]
            win = (lday - nh.day) // 7 + 1

            values = {
                'start_weekday_raw': nh.weekday(),
                'start_hour': nh.hour,
                'start_minute': 0,
                'end_relative_time': 3600,
                'alarm_relative_time': 0,
                'end_type': 0,
                'alarm_type': 0,
                'time_standard': standard,
            }
        else:
            values = {
                'selected_months_raw': rule[0],
                'start_weekday_raw': rule[1],
                'start_weekday_number_raw': rule[2],
                'max_overlap': rule[3],
                'start_hour': rule[4],
                'start_minute': rule[5],
                'end_relative_time': rule[6] if rule[6] is not None else 3600,
                'alarm_relative_time': rule[7] if rule[7] is not None else 0,
                'end_type': rule[8][1],
                'alarm_type': rule[8][2],
                'time_standard': standard,
            }

            win = values['start_weekday_number_raw'] + 1

        values['end_relative_number'], values['end_relative_unit'] = \
                                        TimeSpanCtrl.compute_widget_values(
                                        values['end_relative_time'])

        # ralarm could be negative
        values['alarm_relative_number'], values['alarm_relative_unit'] = \
                                    TimeSpanCtrl.compute_widget_values(
                                    max((0, values['alarm_relative_time'])))

        rrstart = values['start_hour'] * 3600 + values['start_minute'] * 60

        rrend = rrstart + values['end_relative_time']
        values['end_next_day'] = False

        # End time could be set after 23:59 of the start day
        if rrend > 86399:
            rrend = rrend % 86400
            values['end_next_day'] = True

        rralarm = rrstart - values['alarm_relative_time']
        values['alarm_previous_day'] = False

        # Alarm time could be set before 00:00 of the start day
        if rralarm < 0:
            rralarm = 86400 - abs(rralarm) % 86400
            values['alarm_previous_day'] = True

        values.update({
            'start_weekday_number': win,
            'start_weekday': MonthInverseWeekdayHourCtrl.compute_widget_weekday(
                                                values['start_weekday_raw']),
            'end_hour': rrend // 3600,
            'end_minute': rrend % 3600 // 60,
            'alarm_hour': rralarm // 3600,
            'alarm_minute': rralarm % 3600 // 60,
        })

        return values