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 #include <qstringlist.h>
00026
00027 #include <kapplication.h>
00028 #include <kaboutdata.h>
00029 #include <kdebug.h>
00030
00031 #include <libkcal/calendar.h>
00032
00033 #include "alarmevent.h"
00034 #include "functions.h"
00035 #include "preferences.h"
00036 #include "calendarcompat.h"
00037
00038 using namespace KCal;
00039
00040
00041
00042
00043
00044
00045
00046 void CalendarCompat::fix(KCal::Calendar& calendar, const QString& localFile)
00047 {
00048 bool version057_UTC = false;
00049 QString subVersion;
00050 int version = readKAlarmVersion(calendar, subVersion);
00051 if (!version)
00052 {
00053
00054
00055 return;
00056 }
00057 if (version == KAlarm::Version(0,5,7) && !localFile.isEmpty())
00058 {
00059
00060
00061 version057_UTC = isUTC(localFile);
00062 kdDebug(5950) << "CalendarCompat::fix(): KAlarm version 0.5.7 (" << (version057_UTC ? "" : "non-") << "UTC)\n";
00063 }
00064 else
00065 kdDebug(5950) << "CalendarCompat::fix(): KAlarm version " << version << endl;
00066
00067
00068 KAEvent::convertKCalEvents(calendar, version, version057_UTC);
00069 }
00070
00071
00072
00073
00074
00075
00076
00077 int CalendarCompat::readKAlarmVersion(KCal::Calendar& calendar, QString& subVersion)
00078 {
00079 subVersion = QString::null;
00080 const QString& prodid = calendar.productId();
00081
00082
00083 QString progname = QString::fromLatin1(" KAlarm ");
00084 int i = prodid.find(progname, 0, false);
00085 if (i < 0)
00086 {
00087
00088
00089 progname = QString(" ") + kapp->aboutData()->programName() + ' ';
00090 i = prodid.find(progname, 0, false);
00091 if (i < 0)
00092 return 0;
00093 }
00094
00095
00096 QString ver = prodid.mid(i + progname.length()).stripWhiteSpace();
00097 i = ver.find('/');
00098 int j = ver.find(' ');
00099 if (j >= 0 && j < i)
00100 i = j;
00101 if (i <= 0)
00102 return 0;
00103 ver = ver.left(i);
00104 if (ver == KAlarm::currentCalendarVersionString())
00105 return 0;
00106 return KAlarm::getVersionNumber(ver, &subVersion);
00107 }
00108
00109
00110
00111
00112
00113
00114
00115 bool CalendarCompat::isUTC(const QString& localFile)
00116 {
00117
00118 QFile file(localFile);
00119 if (!file.open(IO_ReadOnly))
00120 return false;
00121 QTextStream ts(&file);
00122 ts.setEncoding(QTextStream::Latin1);
00123 QString text = ts.read();
00124 file.close();
00125
00126
00127 QString VCALENDAR = QString::fromLatin1("BEGIN:VCALENDAR");
00128 QString VEVENT = QString::fromLatin1("BEGIN:VEVENT");
00129 QString CREATED = QString::fromLatin1("CREATED:");
00130 QStringList lines = QStringList::split(QChar('\n'), text);
00131 for (QStringList::ConstIterator it = lines.begin(); it != lines.end(); ++it)
00132 {
00133 if ((*it).startsWith(VCALENDAR))
00134 {
00135 while (++it != lines.end())
00136 {
00137 if ((*it).startsWith(VEVENT))
00138 {
00139 while (++it != lines.end())
00140 {
00141 if ((*it).startsWith(CREATED))
00142 return (*it).endsWith("Z");
00143 }
00144 }
00145 }
00146 break;
00147 }
00148 }
00149 return false;
00150 }
|