Save Recurrence rules -Miguel
svn path=/trunk/; revision=149
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
1998-04-17 Miguel de Icaza <miguel@nuclecu.unam.mx>
|
||||||
|
|
||||||
|
* calobj.c (ical_object_generate_events): Implement
|
||||||
|
RECUR_MONTHLY_BY_POS implemented.
|
||||||
|
|
||||||
|
(ical_object_to_vobject): Implement recurrence rule saving.
|
||||||
|
|
||||||
1998-04-16 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
1998-04-16 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||||
|
|
||||||
* eventedit.c (ee_store_alarm): Use menu_shell->children, not
|
* eventedit.c (ee_store_alarm): Use menu_shell->children, not
|
||||||
|
@ -565,8 +565,9 @@ ical_object_create_from_vobject (VObject *o, const char *object_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: dalarm */
|
/* FIXME: dalarm */
|
||||||
if (has (o, VCDAlarmProp))
|
if (has (o, VCDAlarmProp)){
|
||||||
;
|
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: aalarm */
|
/* FIXME: aalarm */
|
||||||
if (has (o, VCAAlarmProp))
|
if (has (o, VCAAlarmProp))
|
||||||
@ -625,6 +626,9 @@ store_list (VObject *o, char *prop, GList *values, char sep)
|
|||||||
g_free (p);
|
g_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *recur_type_name [] = { "D", "W", "MP", "MD", "YM", "YD" };
|
||||||
|
static char *recur_day_list [] = { "SU", "MO", "TU","WE", "TH", "FR", "SA" };
|
||||||
|
|
||||||
VObject *
|
VObject *
|
||||||
ical_object_to_vobject (iCalObject *ical)
|
ical_object_to_vobject (iCalObject *ical)
|
||||||
{
|
{
|
||||||
@ -702,6 +706,57 @@ ical_object_to_vobject (iCalObject *ical)
|
|||||||
if (ical->url)
|
if (ical->url)
|
||||||
addPropValue (o, VCURLProp, ical->url);
|
addPropValue (o, VCURLProp, ical->url);
|
||||||
|
|
||||||
|
if (ical->recur){
|
||||||
|
char result [256];
|
||||||
|
char buffer [80];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf (result, "%s%d ", recur_type_name [ical->recur->type], ical->recur->interval);
|
||||||
|
switch (ical->recur->type){
|
||||||
|
case RECUR_DAILY:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_WEEKLY:
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_POS: {
|
||||||
|
int nega = ical->recur->u.month_pos < 0;
|
||||||
|
|
||||||
|
sprintf (buffer, "%d%s ", nega ? -ical->recur->u.month_pos : ical->recur->u.month_pos,
|
||||||
|
nega ? "-" : "+");
|
||||||
|
strcat (result, buffer);
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
sprintf (buffer, "%d ", ical->recur->u.month_pos);
|
||||||
|
strcat (result, buffer);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_MONTH:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_DAY:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ical->recur->_enddate == 0)
|
||||||
|
sprintf (buffer, "#%d ",ical->recur->duration);
|
||||||
|
else
|
||||||
|
sprintf (buffer, "%s ", isodate_from_time_t (ical->recur->_enddate));
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
/* FIXME: alarms */
|
/* FIXME: alarms */
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
@ -758,6 +813,7 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
{
|
{
|
||||||
Recurrence *recur = ico->recur;
|
Recurrence *recur = ico->recur;
|
||||||
time_t current;
|
time_t current;
|
||||||
|
int first_week_day, i;
|
||||||
|
|
||||||
if (!ico->recur){
|
if (!ico->recur){
|
||||||
if (time_in_range (ico->dtstart, start, end) ||
|
if (time_in_range (ico->dtstart, start, end) ||
|
||||||
@ -822,7 +878,55 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_POS:
|
case RECUR_MONTHLY_BY_POS:
|
||||||
g_warning ("We still do not handle MONTHLY_BY_POS\n");
|
/* FIXME: We only deal with positives now */
|
||||||
|
if (ico->recur->u.month_pos < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ico->recur->u.month_pos == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
first_week_day = 7;
|
||||||
|
for (i = 6; i >= 0; i--)
|
||||||
|
if (ico->recur->weekday & (1 << i))
|
||||||
|
first_week_day = i;
|
||||||
|
|
||||||
|
/* This should not happen, but take it into account */
|
||||||
|
if (first_week_day == 7)
|
||||||
|
return;
|
||||||
|
|
||||||
|
do {
|
||||||
|
struct tm tm;
|
||||||
|
time_t t;
|
||||||
|
int p, week_day_start;
|
||||||
|
|
||||||
|
tm = *localtime (¤t);
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
t = mktime (&tm);
|
||||||
|
tm = *localtime (&t);
|
||||||
|
week_day_start = tm.tm_wday;
|
||||||
|
|
||||||
|
tm.tm_mday = 7 * (ico->recur->u.month_pos -
|
||||||
|
((week_day_start <= first_week_day ) ? 1 : 0)) -
|
||||||
|
(week_day_start - first_week_day) + 1;
|
||||||
|
|
||||||
|
t = mktime (&tm);
|
||||||
|
|
||||||
|
if (time_in_range (t, start, end))
|
||||||
|
if (!generate (ico, t, cb, closure))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Advance a month */
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
tm.tm_mon += recur->interval;
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
if (current == -1){
|
||||||
|
g_warning ("RECUR_MONTHLY_BY_DAY: mktime error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (current < end || (end == 0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_DAY:
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
@ -565,8 +565,9 @@ ical_object_create_from_vobject (VObject *o, const char *object_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: dalarm */
|
/* FIXME: dalarm */
|
||||||
if (has (o, VCDAlarmProp))
|
if (has (o, VCDAlarmProp)){
|
||||||
;
|
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: aalarm */
|
/* FIXME: aalarm */
|
||||||
if (has (o, VCAAlarmProp))
|
if (has (o, VCAAlarmProp))
|
||||||
@ -625,6 +626,9 @@ store_list (VObject *o, char *prop, GList *values, char sep)
|
|||||||
g_free (p);
|
g_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *recur_type_name [] = { "D", "W", "MP", "MD", "YM", "YD" };
|
||||||
|
static char *recur_day_list [] = { "SU", "MO", "TU","WE", "TH", "FR", "SA" };
|
||||||
|
|
||||||
VObject *
|
VObject *
|
||||||
ical_object_to_vobject (iCalObject *ical)
|
ical_object_to_vobject (iCalObject *ical)
|
||||||
{
|
{
|
||||||
@ -702,6 +706,57 @@ ical_object_to_vobject (iCalObject *ical)
|
|||||||
if (ical->url)
|
if (ical->url)
|
||||||
addPropValue (o, VCURLProp, ical->url);
|
addPropValue (o, VCURLProp, ical->url);
|
||||||
|
|
||||||
|
if (ical->recur){
|
||||||
|
char result [256];
|
||||||
|
char buffer [80];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf (result, "%s%d ", recur_type_name [ical->recur->type], ical->recur->interval);
|
||||||
|
switch (ical->recur->type){
|
||||||
|
case RECUR_DAILY:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_WEEKLY:
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_POS: {
|
||||||
|
int nega = ical->recur->u.month_pos < 0;
|
||||||
|
|
||||||
|
sprintf (buffer, "%d%s ", nega ? -ical->recur->u.month_pos : ical->recur->u.month_pos,
|
||||||
|
nega ? "-" : "+");
|
||||||
|
strcat (result, buffer);
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
sprintf (buffer, "%d ", ical->recur->u.month_pos);
|
||||||
|
strcat (result, buffer);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_MONTH:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_DAY:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ical->recur->_enddate == 0)
|
||||||
|
sprintf (buffer, "#%d ",ical->recur->duration);
|
||||||
|
else
|
||||||
|
sprintf (buffer, "%s ", isodate_from_time_t (ical->recur->_enddate));
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
/* FIXME: alarms */
|
/* FIXME: alarms */
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
@ -758,6 +813,7 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
{
|
{
|
||||||
Recurrence *recur = ico->recur;
|
Recurrence *recur = ico->recur;
|
||||||
time_t current;
|
time_t current;
|
||||||
|
int first_week_day, i;
|
||||||
|
|
||||||
if (!ico->recur){
|
if (!ico->recur){
|
||||||
if (time_in_range (ico->dtstart, start, end) ||
|
if (time_in_range (ico->dtstart, start, end) ||
|
||||||
@ -822,7 +878,55 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_POS:
|
case RECUR_MONTHLY_BY_POS:
|
||||||
g_warning ("We still do not handle MONTHLY_BY_POS\n");
|
/* FIXME: We only deal with positives now */
|
||||||
|
if (ico->recur->u.month_pos < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ico->recur->u.month_pos == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
first_week_day = 7;
|
||||||
|
for (i = 6; i >= 0; i--)
|
||||||
|
if (ico->recur->weekday & (1 << i))
|
||||||
|
first_week_day = i;
|
||||||
|
|
||||||
|
/* This should not happen, but take it into account */
|
||||||
|
if (first_week_day == 7)
|
||||||
|
return;
|
||||||
|
|
||||||
|
do {
|
||||||
|
struct tm tm;
|
||||||
|
time_t t;
|
||||||
|
int p, week_day_start;
|
||||||
|
|
||||||
|
tm = *localtime (¤t);
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
t = mktime (&tm);
|
||||||
|
tm = *localtime (&t);
|
||||||
|
week_day_start = tm.tm_wday;
|
||||||
|
|
||||||
|
tm.tm_mday = 7 * (ico->recur->u.month_pos -
|
||||||
|
((week_day_start <= first_week_day ) ? 1 : 0)) -
|
||||||
|
(week_day_start - first_week_day) + 1;
|
||||||
|
|
||||||
|
t = mktime (&tm);
|
||||||
|
|
||||||
|
if (time_in_range (t, start, end))
|
||||||
|
if (!generate (ico, t, cb, closure))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Advance a month */
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
tm.tm_mon += recur->interval;
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
if (current == -1){
|
||||||
|
g_warning ("RECUR_MONTHLY_BY_DAY: mktime error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (current < end || (end == 0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_DAY:
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
@ -8,14 +8,14 @@ DCREATED:19980402T023552
|
|||||||
UID:KOrganizer - 1804289383
|
UID:KOrganizer - 1804289383
|
||||||
SEQUENCE:1
|
SEQUENCE:1
|
||||||
LAST-MODIFIED:19980330T225948
|
LAST-MODIFIED:19980330T225948
|
||||||
DTSTART:19980415T116000
|
DTSTART:19980401T116000
|
||||||
DTEND:19980415T119000
|
DTEND:19980401T119000
|
||||||
SUMMARY:Mensual, el 15, durante 4 semanas
|
SUMMARY:Primer miercoles, 4 meses
|
||||||
STATUS:NEEDS ACTION
|
STATUS:NEEDS ACTION
|
||||||
CLASS:PUBLIC
|
CLASS:PUBLIC
|
||||||
PRIORITY:0
|
PRIORITY:0
|
||||||
TRANSP:0
|
TRANSP:0
|
||||||
RRULE:MD1 15 #4
|
RRULE:MP1 1+ WE # 4
|
||||||
RELATED-TO:0
|
RELATED-TO:0
|
||||||
X-PILOTID:0
|
X-PILOTID:0
|
||||||
X-PILOTSTAT:0
|
X-PILOTSTAT:0
|
||||||
|
@ -565,8 +565,9 @@ ical_object_create_from_vobject (VObject *o, const char *object_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: dalarm */
|
/* FIXME: dalarm */
|
||||||
if (has (o, VCDAlarmProp))
|
if (has (o, VCDAlarmProp)){
|
||||||
;
|
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: aalarm */
|
/* FIXME: aalarm */
|
||||||
if (has (o, VCAAlarmProp))
|
if (has (o, VCAAlarmProp))
|
||||||
@ -625,6 +626,9 @@ store_list (VObject *o, char *prop, GList *values, char sep)
|
|||||||
g_free (p);
|
g_free (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *recur_type_name [] = { "D", "W", "MP", "MD", "YM", "YD" };
|
||||||
|
static char *recur_day_list [] = { "SU", "MO", "TU","WE", "TH", "FR", "SA" };
|
||||||
|
|
||||||
VObject *
|
VObject *
|
||||||
ical_object_to_vobject (iCalObject *ical)
|
ical_object_to_vobject (iCalObject *ical)
|
||||||
{
|
{
|
||||||
@ -702,6 +706,57 @@ ical_object_to_vobject (iCalObject *ical)
|
|||||||
if (ical->url)
|
if (ical->url)
|
||||||
addPropValue (o, VCURLProp, ical->url);
|
addPropValue (o, VCURLProp, ical->url);
|
||||||
|
|
||||||
|
if (ical->recur){
|
||||||
|
char result [256];
|
||||||
|
char buffer [80];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sprintf (result, "%s%d ", recur_type_name [ical->recur->type], ical->recur->interval);
|
||||||
|
switch (ical->recur->type){
|
||||||
|
case RECUR_DAILY:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_WEEKLY:
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_POS: {
|
||||||
|
int nega = ical->recur->u.month_pos < 0;
|
||||||
|
|
||||||
|
sprintf (buffer, "%d%s ", nega ? -ical->recur->u.month_pos : ical->recur->u.month_pos,
|
||||||
|
nega ? "-" : "+");
|
||||||
|
strcat (result, buffer);
|
||||||
|
for (i = 0; i < 7; i++){
|
||||||
|
if (ical->recur->weekday & (1 << i)){
|
||||||
|
sprintf (buffer, "%s ", recur_day_list [i]);
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
sprintf (buffer, "%d ", ical->recur->u.month_pos);
|
||||||
|
strcat (result, buffer);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_MONTH:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RECUR_YEARLY_BY_DAY:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ical->recur->_enddate == 0)
|
||||||
|
sprintf (buffer, "#%d ",ical->recur->duration);
|
||||||
|
else
|
||||||
|
sprintf (buffer, "%s ", isodate_from_time_t (ical->recur->_enddate));
|
||||||
|
strcat (result, buffer);
|
||||||
|
}
|
||||||
/* FIXME: alarms */
|
/* FIXME: alarms */
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
@ -758,6 +813,7 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
{
|
{
|
||||||
Recurrence *recur = ico->recur;
|
Recurrence *recur = ico->recur;
|
||||||
time_t current;
|
time_t current;
|
||||||
|
int first_week_day, i;
|
||||||
|
|
||||||
if (!ico->recur){
|
if (!ico->recur){
|
||||||
if (time_in_range (ico->dtstart, start, end) ||
|
if (time_in_range (ico->dtstart, start, end) ||
|
||||||
@ -822,7 +878,55 @@ ical_object_generate_events (iCalObject *ico, time_t start, time_t end, calendar
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_POS:
|
case RECUR_MONTHLY_BY_POS:
|
||||||
g_warning ("We still do not handle MONTHLY_BY_POS\n");
|
/* FIXME: We only deal with positives now */
|
||||||
|
if (ico->recur->u.month_pos < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (ico->recur->u.month_pos == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
first_week_day = 7;
|
||||||
|
for (i = 6; i >= 0; i--)
|
||||||
|
if (ico->recur->weekday & (1 << i))
|
||||||
|
first_week_day = i;
|
||||||
|
|
||||||
|
/* This should not happen, but take it into account */
|
||||||
|
if (first_week_day == 7)
|
||||||
|
return;
|
||||||
|
|
||||||
|
do {
|
||||||
|
struct tm tm;
|
||||||
|
time_t t;
|
||||||
|
int p, week_day_start;
|
||||||
|
|
||||||
|
tm = *localtime (¤t);
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
t = mktime (&tm);
|
||||||
|
tm = *localtime (&t);
|
||||||
|
week_day_start = tm.tm_wday;
|
||||||
|
|
||||||
|
tm.tm_mday = 7 * (ico->recur->u.month_pos -
|
||||||
|
((week_day_start <= first_week_day ) ? 1 : 0)) -
|
||||||
|
(week_day_start - first_week_day) + 1;
|
||||||
|
|
||||||
|
t = mktime (&tm);
|
||||||
|
|
||||||
|
if (time_in_range (t, start, end))
|
||||||
|
if (!generate (ico, t, cb, closure))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Advance a month */
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
tm.tm_mday = 1;
|
||||||
|
tm.tm_mon += recur->interval;
|
||||||
|
current = mktime (&tm);
|
||||||
|
|
||||||
|
if (current == -1){
|
||||||
|
g_warning ("RECUR_MONTHLY_BY_DAY: mktime error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (current < end || (end == 0));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RECUR_MONTHLY_BY_DAY:
|
case RECUR_MONTHLY_BY_DAY:
|
||||||
|
@ -8,14 +8,14 @@ DCREATED:19980402T023552
|
|||||||
UID:KOrganizer - 1804289383
|
UID:KOrganizer - 1804289383
|
||||||
SEQUENCE:1
|
SEQUENCE:1
|
||||||
LAST-MODIFIED:19980330T225948
|
LAST-MODIFIED:19980330T225948
|
||||||
DTSTART:19980415T116000
|
DTSTART:19980401T116000
|
||||||
DTEND:19980415T119000
|
DTEND:19980401T119000
|
||||||
SUMMARY:Mensual, el 15, durante 4 semanas
|
SUMMARY:Primer miercoles, 4 meses
|
||||||
STATUS:NEEDS ACTION
|
STATUS:NEEDS ACTION
|
||||||
CLASS:PUBLIC
|
CLASS:PUBLIC
|
||||||
PRIORITY:0
|
PRIORITY:0
|
||||||
TRANSP:0
|
TRANSP:0
|
||||||
RRULE:MD1 15 #4
|
RRULE:MP1 1+ WE # 4
|
||||||
RELATED-TO:0
|
RELATED-TO:0
|
||||||
X-PILOTID:0
|
X-PILOTID:0
|
||||||
X-PILOTSTAT:0
|
X-PILOTSTAT:0
|
||||||
|
Reference in New Issue
Block a user