author | zautrix <zautrix> | 2004-10-25 15:27:39 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-10-25 15:27:39 (UTC) |
commit | 03ca6830a9e6742b8873aee04d77b3e094b65d30 (patch) (unidiff) | |
tree | 170ab278ffeb371aae783815101f64275cd30c53 | |
parent | 62e92aa86b6281b4e4c2a2bdb57f3ceb5a87f4e3 (diff) | |
download | kdepimpi-03ca6830a9e6742b8873aee04d77b3e094b65d30.zip kdepimpi-03ca6830a9e6742b8873aee04d77b3e094b65d30.tar.gz kdepimpi-03ca6830a9e6742b8873aee04d77b3e094b65d30.tar.bz2 |
fix of vcal crash
-rw-r--r-- | libkcal/vcalformat.cpp | 39 | ||||
-rw-r--r-- | libkcal/vcalformat.h | 3 | ||||
-rw-r--r-- | libkcal/versit/vcc.c | 3 |
3 files changed, 37 insertions, 8 deletions
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp index df93209..223aa5a 100644 --- a/libkcal/vcalformat.cpp +++ b/libkcal/vcalformat.cpp | |||
@@ -280,24 +280,25 @@ VObject *VCalFormat::eventToVTodo(const Todo *anEvent) | |||
280 | if (!curAttendee->email().isEmpty() && | 280 | if (!curAttendee->email().isEmpty() && |
281 | !curAttendee->name().isEmpty()) | 281 | !curAttendee->name().isEmpty()) |
282 | tmpStr = "MAILTO:" + curAttendee->name() + " <" + | 282 | tmpStr = "MAILTO:" + curAttendee->name() + " <" + |
283 | curAttendee->email() + ">"; | 283 | curAttendee->email() + ">"; |
284 | else if (curAttendee->name().isEmpty()) | 284 | else if (curAttendee->name().isEmpty()) |
285 | tmpStr = "MAILTO: " + curAttendee->email(); | 285 | tmpStr = "MAILTO: " + curAttendee->email(); |
286 | else if (curAttendee->email().isEmpty()) | 286 | else if (curAttendee->email().isEmpty()) |
287 | tmpStr = "MAILTO: " + curAttendee->name(); | 287 | tmpStr = "MAILTO: " + curAttendee->name(); |
288 | else if (curAttendee->name().isEmpty() && | 288 | else if (curAttendee->name().isEmpty() && |
289 | curAttendee->email().isEmpty()) | 289 | curAttendee->email().isEmpty()) |
290 | kdDebug(5800) << "warning! this Event has an attendee w/o name or email!" << endl; | 290 | kdDebug(5800) << "warning! this Event has an attendee w/o name or email!" << endl; |
291 | VObject *aProp = addPropValue(vtodo, VCAttendeeProp, tmpStr.local8Bit()); | 291 | VObject *aProp = addPropValue(vtodo, VCAttendeeProp, tmpStr.local8Bit()); |
292 | addPropValue(aProp, VCRoleProp, writeRole(curAttendee->role())); | ||
292 | addPropValue(aProp, VCRSVPProp, curAttendee->RSVP() ? "TRUE" : "FALSE"); | 293 | addPropValue(aProp, VCRSVPProp, curAttendee->RSVP() ? "TRUE" : "FALSE"); |
293 | addPropValue(aProp, VCStatusProp, writeStatus(curAttendee->status())); | 294 | addPropValue(aProp, VCStatusProp, writeStatus(curAttendee->status())); |
294 | } | 295 | } |
295 | } | 296 | } |
296 | 297 | ||
297 | // description BL: | 298 | // description BL: |
298 | if (!anEvent->description().isEmpty()) { | 299 | if (!anEvent->description().isEmpty()) { |
299 | VObject *d = addPropValue(vtodo, VCDescriptionProp, | 300 | VObject *d = addPropValue(vtodo, VCDescriptionProp, |
300 | anEvent->description().local8Bit()); | 301 | anEvent->description().local8Bit()); |
301 | if (anEvent->description().find('\n') != -1) | 302 | if (anEvent->description().find('\n') != -1) |
302 | addProp(d, VCQuotedPrintableProp); | 303 | addProp(d, VCQuotedPrintableProp); |
303 | } | 304 | } |
@@ -443,25 +444,26 @@ VObject* VCalFormat::eventToVEvent(const Event *anEvent) | |||
443 | if (!curAttendee->email().isEmpty() && | 444 | if (!curAttendee->email().isEmpty() && |
444 | !curAttendee->name().isEmpty()) | 445 | !curAttendee->name().isEmpty()) |
445 | tmpStr = "MAILTO:" + curAttendee->name() + " <" + | 446 | tmpStr = "MAILTO:" + curAttendee->name() + " <" + |
446 | curAttendee->email() + ">"; | 447 | curAttendee->email() + ">"; |
447 | else if (curAttendee->name().isEmpty()) | 448 | else if (curAttendee->name().isEmpty()) |
448 | tmpStr = "MAILTO: " + curAttendee->email(); | 449 | tmpStr = "MAILTO: " + curAttendee->email(); |
449 | else if (curAttendee->email().isEmpty()) | 450 | else if (curAttendee->email().isEmpty()) |
450 | tmpStr = "MAILTO: " + curAttendee->name(); | 451 | tmpStr = "MAILTO: " + curAttendee->name(); |
451 | else if (curAttendee->name().isEmpty() && | 452 | else if (curAttendee->name().isEmpty() && |
452 | curAttendee->email().isEmpty()) | 453 | curAttendee->email().isEmpty()) |
453 | kdDebug(5800) << "warning! this Event has an attendee w/o name or email!" << endl; | 454 | kdDebug(5800) << "warning! this Event has an attendee w/o name or email!" << endl; |
454 | VObject *aProp = addPropValue(vevent, VCAttendeeProp, tmpStr.local8Bit()); | 455 | VObject *aProp = addPropValue(vevent, VCAttendeeProp, tmpStr.local8Bit()); |
455 | addPropValue(aProp, VCRSVPProp, curAttendee->RSVP() ? "TRUE" : "FALSE");; | 456 | addPropValue(aProp, VCRoleProp, writeRole(curAttendee->role())); |
457 | addPropValue(aProp, VCRSVPProp, curAttendee->RSVP() ? "TRUE" : "FALSE"); | ||
456 | addPropValue(aProp, VCStatusProp, writeStatus(curAttendee->status())); | 458 | addPropValue(aProp, VCStatusProp, writeStatus(curAttendee->status())); |
457 | } | 459 | } |
458 | } | 460 | } |
459 | 461 | ||
460 | // recurrence rule stuff | 462 | // recurrence rule stuff |
461 | if (anEvent->recurrence()->doesRecur()) { | 463 | if (anEvent->recurrence()->doesRecur()) { |
462 | // some more variables | 464 | // some more variables |
463 | QPtrList<Recurrence::rMonthPos> tmpPositions; | 465 | QPtrList<Recurrence::rMonthPos> tmpPositions; |
464 | QPtrList<int> tmpDays; | 466 | QPtrList<int> tmpDays; |
465 | int *tmpDay; | 467 | int *tmpDay; |
466 | Recurrence::rMonthPos *tmpPos; | 468 | Recurrence::rMonthPos *tmpPos; |
467 | QString tmpStr2; | 469 | QString tmpStr2; |
@@ -742,28 +744,30 @@ Todo *VCalFormat::VTodoToEvent(VObject *vtodo) | |||
742 | int emailPos1, emailPos2; | 744 | int emailPos1, emailPos2; |
743 | if ((emailPos1 = tmpStr.find('<')) > 0) { | 745 | if ((emailPos1 = tmpStr.find('<')) > 0) { |
744 | // both email address and name | 746 | // both email address and name |
745 | emailPos2 = tmpStr.findRev('>'); | 747 | emailPos2 = tmpStr.findRev('>'); |
746 | a = new Attendee(tmpStr.left(emailPos1 - 1), | 748 | a = new Attendee(tmpStr.left(emailPos1 - 1), |
747 | tmpStr.mid(emailPos1 + 1, | 749 | tmpStr.mid(emailPos1 + 1, |
748 | emailPos2 - (emailPos1 + 1))); | 750 | emailPos2 - (emailPos1 + 1))); |
749 | } else if (tmpStr.find('@') > 0) { | 751 | } else if (tmpStr.find('@') > 0) { |
750 | // just an email address | 752 | // just an email address |
751 | a = new Attendee(0, tmpStr); | 753 | a = new Attendee(0, tmpStr); |
752 | } else { | 754 | } else { |
753 | // just a name | 755 | // just a name |
754 | QString email = tmpStr.replace( QRegExp(" "), "." ); | 756 | // QString email = tmpStr.replace( QRegExp(" "), "." ); |
755 | a = new Attendee(tmpStr,email); | 757 | a = new Attendee(tmpStr,0); |
756 | } | 758 | } |
757 | 759 | // is there a Role property? | |
760 | if ((vp = isAPropertyOf(vo, VCRoleProp)) != 0) | ||
761 | a->setRole(readRole(vObjectStringZValue(vp))); | ||
758 | // is there an RSVP property? | 762 | // is there an RSVP property? |
759 | if ((vp = isAPropertyOf(vo, VCRSVPProp)) != 0) | 763 | if ((vp = isAPropertyOf(vo, VCRSVPProp)) != 0) |
760 | a->setRSVP(vObjectStringZValue(vp)); | 764 | a->setRSVP(vObjectStringZValue(vp)); |
761 | // is there a status property? | 765 | // is there a status property? |
762 | if ((vp = isAPropertyOf(vo, VCStatusProp)) != 0) | 766 | if ((vp = isAPropertyOf(vo, VCStatusProp)) != 0) |
763 | a->setStatus(readStatus(vObjectStringZValue(vp))); | 767 | a->setStatus(readStatus(vObjectStringZValue(vp))); |
764 | // add the attendee | 768 | // add the attendee |
765 | anEvent->addAttendee(a); | 769 | anEvent->addAttendee(a); |
766 | } | 770 | } |
767 | } | 771 | } |
768 | 772 | ||
769 | // description for todo | 773 | // description for todo |
@@ -968,28 +972,33 @@ Event* VCalFormat::VEventToEvent(VObject *vevent) | |||
968 | int emailPos1, emailPos2; | 972 | int emailPos1, emailPos2; |
969 | if ((emailPos1 = tmpStr.find('<')) > 0) { | 973 | if ((emailPos1 = tmpStr.find('<')) > 0) { |
970 | // both email address and name | 974 | // both email address and name |
971 | emailPos2 = tmpStr.findRev('>'); | 975 | emailPos2 = tmpStr.findRev('>'); |
972 | a = new Attendee(tmpStr.left(emailPos1 - 1), | 976 | a = new Attendee(tmpStr.left(emailPos1 - 1), |
973 | tmpStr.mid(emailPos1 + 1, | 977 | tmpStr.mid(emailPos1 + 1, |
974 | emailPos2 - (emailPos1 + 1))); | 978 | emailPos2 - (emailPos1 + 1))); |
975 | } else if (tmpStr.find('@') > 0) { | 979 | } else if (tmpStr.find('@') > 0) { |
976 | // just an email address | 980 | // just an email address |
977 | a = new Attendee(0, tmpStr); | 981 | a = new Attendee(0, tmpStr); |
978 | } else { | 982 | } else { |
979 | // just a name | 983 | // just a name |
980 | QString email = tmpStr.replace( QRegExp(" "), "." ); | 984 | //QString email = tmpStr.replace( QRegExp(" "), "." ); |
981 | a = new Attendee(tmpStr,email); | 985 | a = new Attendee(tmpStr,0); |
982 | } | 986 | } |
983 | 987 | ||
988 | |||
989 | // is there a Role property? | ||
990 | if ((vp = isAPropertyOf(vo, VCRoleProp)) != 0) | ||
991 | a->setRole(readRole(vObjectStringZValue(vp))); | ||
992 | |||
984 | // is there an RSVP property? | 993 | // is there an RSVP property? |
985 | if ((vp = isAPropertyOf(vo, VCRSVPProp)) != 0) | 994 | if ((vp = isAPropertyOf(vo, VCRSVPProp)) != 0) |
986 | a->setRSVP(vObjectStringZValue(vp)); | 995 | a->setRSVP(vObjectStringZValue(vp)); |
987 | // is there a status property? | 996 | // is there a status property? |
988 | if ((vp = isAPropertyOf(vo, VCStatusProp)) != 0) | 997 | if ((vp = isAPropertyOf(vo, VCStatusProp)) != 0) |
989 | a->setStatus(readStatus(vObjectStringZValue(vp))); | 998 | a->setStatus(readStatus(vObjectStringZValue(vp))); |
990 | // add the attendee | 999 | // add the attendee |
991 | anEvent->addAttendee(a); | 1000 | anEvent->addAttendee(a); |
992 | } | 1001 | } |
993 | } | 1002 | } |
994 | 1003 | ||
995 | // This isn't strictly true. An event that doesn't have a start time | 1004 | // This isn't strictly true. An event that doesn't have a start time |
@@ -1649,25 +1658,43 @@ const char *VCalFormat::dayFromNum(int day) | |||
1649 | int VCalFormat::numFromDay(const QString &day) | 1658 | int VCalFormat::numFromDay(const QString &day) |
1650 | { | 1659 | { |
1651 | if (day == "MO ") return 0; | 1660 | if (day == "MO ") return 0; |
1652 | if (day == "TU ") return 1; | 1661 | if (day == "TU ") return 1; |
1653 | if (day == "WE ") return 2; | 1662 | if (day == "WE ") return 2; |
1654 | if (day == "TH ") return 3; | 1663 | if (day == "TH ") return 3; |
1655 | if (day == "FR ") return 4; | 1664 | if (day == "FR ") return 4; |
1656 | if (day == "SA ") return 5; | 1665 | if (day == "SA ") return 5; |
1657 | if (day == "SU ") return 6; | 1666 | if (day == "SU ") return 6; |
1658 | 1667 | ||
1659 | return -1; // something bad happened. :) | 1668 | return -1; // something bad happened. :) |
1660 | } | 1669 | } |
1670 | Attendee::Role VCalFormat::readRole(const char *s) const | ||
1671 | { | ||
1672 | QString statStr = s; | ||
1673 | statStr = statStr.upper(); | ||
1674 | Attendee::Role role = Attendee::ReqParticipant; | ||
1675 | |||
1676 | if ( statStr == "OWNER") | ||
1677 | role = Attendee::Chair; | ||
1678 | // enum Role { ReqParticipant, OptParticipant, NonParticipant, Chair }; | ||
1679 | |||
1680 | return role; | ||
1681 | } | ||
1661 | 1682 | ||
1683 | QCString VCalFormat::writeRole(Attendee::Role role) const | ||
1684 | { | ||
1685 | if ( role == Attendee::Chair ) | ||
1686 | return "OWNER"; | ||
1687 | return "ATTENDEE"; | ||
1688 | } | ||
1662 | Attendee::PartStat VCalFormat::readStatus(const char *s) const | 1689 | Attendee::PartStat VCalFormat::readStatus(const char *s) const |
1663 | { | 1690 | { |
1664 | QString statStr = s; | 1691 | QString statStr = s; |
1665 | statStr = statStr.upper(); | 1692 | statStr = statStr.upper(); |
1666 | Attendee::PartStat status; | 1693 | Attendee::PartStat status; |
1667 | 1694 | ||
1668 | if (statStr == "X-ACTION") | 1695 | if (statStr == "X-ACTION") |
1669 | status = Attendee::NeedsAction; | 1696 | status = Attendee::NeedsAction; |
1670 | else if (statStr == "NEEDS ACTION") | 1697 | else if (statStr == "NEEDS ACTION") |
1671 | status = Attendee::NeedsAction; | 1698 | status = Attendee::NeedsAction; |
1672 | else if (statStr== "ACCEPTED") | 1699 | else if (statStr== "ACCEPTED") |
1673 | status = Attendee::Accepted; | 1700 | status = Attendee::Accepted; |
diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h index 5bef7ed..c7df017 100644 --- a/libkcal/vcalformat.h +++ b/libkcal/vcalformat.h | |||
@@ -86,25 +86,26 @@ class VCalFormat : public CalFormat { | |||
86 | /** takes a string in the format YYYYMMDD and returns a | 86 | /** takes a string in the format YYYYMMDD and returns a |
87 | * valid QDate. */ | 87 | * valid QDate. */ |
88 | QDate ISOToQDate(const QString & dtStr); | 88 | QDate ISOToQDate(const QString & dtStr); |
89 | /** takes a vCalendar tree of VObjects, and puts all of them that have | 89 | /** takes a vCalendar tree of VObjects, and puts all of them that have |
90 | * the "event" property into the dictionary, todos in the todo-list, etc. */ | 90 | * the "event" property into the dictionary, todos in the todo-list, etc. */ |
91 | void populate(VObject *vcal); | 91 | void populate(VObject *vcal); |
92 | 92 | ||
93 | /** takes a number 0 - 6 and returns the two letter string of that day, | 93 | /** takes a number 0 - 6 and returns the two letter string of that day, |
94 | * i.e. MO, TU, WE, etc. */ | 94 | * i.e. MO, TU, WE, etc. */ |
95 | const char *dayFromNum(int day); | 95 | const char *dayFromNum(int day); |
96 | /** the reverse of the above function. */ | 96 | /** the reverse of the above function. */ |
97 | int numFromDay(const QString &day); | 97 | int numFromDay(const QString &day); |
98 | 98 | Attendee::Role VCalFormat::readRole(const char *s) const; | |
99 | QCString writeRole(Attendee::Role role) const; | ||
99 | Attendee::PartStat readStatus(const char *s) const; | 100 | Attendee::PartStat readStatus(const char *s) const; |
100 | QCString writeStatus(Attendee::PartStat status) const; | 101 | QCString writeStatus(Attendee::PartStat status) const; |
101 | 102 | ||
102 | private: | 103 | private: |
103 | Calendar *mCalendar; | 104 | Calendar *mCalendar; |
104 | bool useLocalTime; | 105 | bool useLocalTime; |
105 | 106 | ||
106 | QPtrList<Event> mEventsRelate; // events with relations | 107 | QPtrList<Event> mEventsRelate; // events with relations |
107 | QPtrList<Todo> mTodosRelate; // todos with relations | 108 | QPtrList<Todo> mTodosRelate; // todos with relations |
108 | }; | 109 | }; |
109 | 110 | ||
110 | } | 111 | } |
diff --git a/libkcal/versit/vcc.c b/libkcal/versit/vcc.c index 9be752d..5413813 100644 --- a/libkcal/versit/vcc.c +++ b/libkcal/versit/vcc.c | |||
@@ -1753,25 +1753,26 @@ static void lexSkipWhite() { | |||
1753 | int c = lexLookahead(); | 1753 | int c = lexLookahead(); |
1754 | while (c == ' ' || c == '\t') { | 1754 | while (c == ' ' || c == '\t') { |
1755 | lexSkipLookahead(); | 1755 | lexSkipLookahead(); |
1756 | c = lexLookahead(); | 1756 | c = lexLookahead(); |
1757 | } | 1757 | } |
1758 | } | 1758 | } |
1759 | 1759 | ||
1760 | static char* lexGetWord() { | 1760 | static char* lexGetWord() { |
1761 | int c; | 1761 | int c; |
1762 | lexSkipWhite(); | 1762 | lexSkipWhite(); |
1763 | lexClearToken(); | 1763 | lexClearToken(); |
1764 | c = lexLookahead(); | 1764 | c = lexLookahead(); |
1765 | while (c != EOF && !strchr("\t\n ;:=",c)) { | 1765 | // LR while (c != EOF && !strchr("\t\n ;:=",c)) { |
1766 | while (c != EOF && !strchr("\t\n;:=",c)) { | ||
1766 | lexAppendc(c); | 1767 | lexAppendc(c); |
1767 | lexSkipLookahead(); | 1768 | lexSkipLookahead(); |
1768 | c = lexLookahead(); | 1769 | c = lexLookahead(); |
1769 | } | 1770 | } |
1770 | lexAppendc(0); | 1771 | lexAppendc(0); |
1771 | return lexStr(); | 1772 | return lexStr(); |
1772 | } | 1773 | } |
1773 | 1774 | ||
1774 | static void lexPushLookaheadc(int c) { | 1775 | static void lexPushLookaheadc(int c) { |
1775 | int putptr; | 1776 | int putptr; |
1776 | /* can't putback EOF, because it never leaves lookahead buffer */ | 1777 | /* can't putback EOF, because it never leaves lookahead buffer */ |
1777 | if (c == EOF) return; | 1778 | if (c == EOF) return; |