kalarm
calendarcompat.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kalarm.h"
00022
00023 #include <qfile.h>
00024 #include <qtextstream.h>
00025
00026 #include <kapplication.h>
00027 #include <kaboutdata.h>
00028 #include <kdebug.h>
00029
00030 extern "C" {
00031 #include <libical/ical.h>
00032 }
00033 #include <libkcal/calendar.h>
00034
00035 #include "alarmevent.h"
00036 #include "functions.h"
00037 #include "preferences.h"
00038 #include "calendarcompat.h"
00039
00040 using namespace KCal;
00041
00042
00043
00044
00045
00046
00047
00048 void CalendarCompat::fix(KCal::Calendar& calendar, const QString& localFile)
00049 {
00050 bool version057_UTC = false;
00051 QString subVersion;
00052 int version = readKAlarmVersion(calendar, subVersion);
00053 if (!version)
00054 {
00055
00056
00057 return;
00058 }
00059 if (version == KAlarm::Version(0,5,7) && !localFile.isEmpty())
00060 {
00061
00062
00063 version057_UTC = isUTC(localFile);
00064 kdDebug(5950) << "CalendarCompat::fix(): KAlarm version 0.5.7 (" << (version057_UTC ? "" : "non-") << "UTC)\n";
00065 }
00066 else
00067 kdDebug(5950) << "CalendarCompat::fix(): KAlarm version " << version << endl;
00068
00069
00070 KAEvent::convertKCalEvents(calendar, version, version057_UTC);
00071 }
00072
00073
00074
00075
00076
00077
00078
00079 int CalendarCompat::readKAlarmVersion(KCal::Calendar& calendar, QString& subVersion)
00080 {
00081 subVersion = QString::null;
00082 const QString& prodid = calendar.productId();
00083
00084
00085 QString progname = QString::fromLatin1(" KAlarm ");
00086 int i = prodid.find(progname, 0, false);
00087 if (i < 0)
00088 {
00089
00090
00091 progname = QString(" ") + kapp->aboutData()->programName() + " ";
00092 i = prodid.find(progname, 0, false);
00093 if (i < 0)
00094 return 0;
00095 }
00096
00097
00098 QString ver = prodid.mid(i + progname.length()).stripWhiteSpace();
00099 i = ver.find('/');
00100 int j = ver.find(' ');
00101 if (j >= 0 && j < i)
00102 i = j;
00103 if (i <= 0)
00104 return 0;
00105 ver = ver.left(i);
00106 if (ver == KALARM_VERSION)
00107 return 0;
00108 return KAlarm::getVersionNumber(ver, &subVersion);
00109 }
00110
00111
00112
00113
00114
00115
00116
00117 bool CalendarCompat::isUTC(const QString& localFile)
00118 {
00119
00120 QFile file(localFile);
00121 if (!file.open(IO_ReadOnly))
00122 return false;
00123 QTextStream ts(&file);
00124 ts.setEncoding(QTextStream::UnicodeUTF8);
00125 QString text = ts.read();
00126 file.close();
00127
00128
00129 bool result = false;
00130 icalcomponent* calendar = icalcomponent_new_from_string(text.local8Bit().data());
00131 if (calendar)
00132 {
00133 if (icalcomponent_isa(calendar) == ICAL_VCALENDAR_COMPONENT)
00134 {
00135 icalcomponent* c = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT);
00136 if (c)
00137 {
00138 icalproperty* p = icalcomponent_get_first_property(c, ICAL_CREATED_PROPERTY);
00139 if (p)
00140 {
00141 struct icaltimetype datetime = icalproperty_get_created(p);
00142 if (datetime.is_utc)
00143 result = true;
00144 }
00145 }
00146 }
00147 icalcomponent_free(calendar);
00148 }
00149 return result;
00150 }
|