00001
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 <tqfile.h>
00024 #include <tqtextstream.h>
00025 #include <tqstringlist.h>
00026
00027 #include <tdeapplication.h>
00028 #include <tdeaboutdata.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 TQString& localFile)
00047 {
00048 bool version057_UTC = false;
00049 TQString 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, TQString& subVersion)
00078 {
00079 subVersion = TQString();
00080 const TQString& prodid = calendar.productId();
00081
00082
00083 TQString progname = TQString::fromLatin1(" KAlarm ");
00084 int i = prodid.find(progname, 0, false);
00085 if (i < 0)
00086 {
00087
00088
00089 progname = TQString(" ") + kapp->aboutData()->programName() + ' ';
00090 i = prodid.find(progname, 0, false);
00091 if (i < 0)
00092 return 0;
00093 }
00094
00095
00096 TQString 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 TQString& localFile)
00116 {
00117
00118 TQFile file(localFile);
00119 if (!file.open(IO_ReadOnly))
00120 return false;
00121 TQTextStream ts(&file);
00122 ts.setEncoding(TQTextStream::Latin1);
00123 TQString text = ts.read();
00124 file.close();
00125
00126
00127 TQString VCALENDAR = TQString::fromLatin1("BEGIN:VCALENDAR");
00128 TQString VEVENT = TQString::fromLatin1("BEGIN:VEVENT");
00129 TQString CREATED = TQString::fromLatin1("CREATED:");
00130 TQStringList lines = TQStringList::split(TQChar('\n'), text);
00131 for (TQStringList::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 }