adcalendarbase.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <unistd.h>
00027 #include <time.h>
00028
00029 #include <qfile.h>
00030
00031 #include <kstandarddirs.h>
00032 #include <ksimpleconfig.h>
00033 #include <ktempfile.h>
00034 #include <kio/job.h>
00035 #include <kio/jobclasses.h>
00036 #include <kdebug.h>
00037
00038 #include "adcalendarbase.h"
00039 #include "adcalendarbase.moc"
00040
00041 ADCalendarBase::EventsMap ADCalendarBase::eventsHandled_;
00042
00043 ADCalendarBase::ADCalendarBase(const QString& url, const QCString& appname, Type type)
00044 : mUrlString(url),
00045 mAppName(appname),
00046 mActionType(type),
00047 mRcIndex(-1),
00048 mLoaded(false),
00049 mLoadedConnected(false),
00050 mUnregistered(false)
00051 {
00052 if (mAppName == "korgac")
00053 {
00054 KConfig cfg( locate( "config", "korganizerrc" ) );
00055 cfg.setGroup( "Time & Date" );
00056 QString tz = cfg.readEntry( "TimeZoneId" );
00057 kdDebug(5900) << "ADCalendarBase(): tz: " << tz << endl;
00058 if( tz.isEmpty() ) {
00059
00060
00061
00062 QString zone;
00063 char zonefilebuf[100];
00064 int len = readlink("/etc/localtime",zonefilebuf,100);
00065 if (len > 0 && len < 100) {
00066 zonefilebuf[len] = '\0';
00067 zone = zonefilebuf;
00068 zone = zone.mid(zone.find("zoneinfo/") + 9);
00069 } else {
00070 tzset();
00071 zone = tzname[0];
00072 }
00073 tz = zone;
00074 }
00075 setTimeZoneId( tz );
00076 }
00077 }
00078
00079
00080
00081
00082 bool ADCalendarBase::loadFile_()
00083 {
00084 if ( !mTempFileName.isNull() ) {
00085
00086 kdError(5900) << "ADCalendarBase::loadFile_(): already downloading another file\n";
00087 return false;
00088 }
00089 mLoaded = false;
00090 KURL url( mUrlString );
00091 if ( url.isLocalFile() ) {
00092
00093 loadLocalFile( url.path() );
00094 emit loaded( this, mLoaded );
00095 } else {
00096
00097 KTempFile tempFile;
00098 mTempFileName = tempFile.name();
00099 KURL dest;
00100 dest.setPath( mTempFileName );
00101 KIO::FileCopyJob *job = KIO::file_copy( url, dest, -1, true );
00102 connect( job, SIGNAL( result( KIO::Job * ) ),
00103 SLOT( slotDownloadJobResult( KIO::Job * ) ) );
00104 }
00105 return true;
00106 }
00107
00108 void ADCalendarBase::slotDownloadJobResult( KIO::Job *job )
00109 {
00110 if ( job->error() ) {
00111 KURL url( mUrlString );
00112 kdDebug(5900) << "Error downloading calendar from " << url.prettyURL() << endl;
00113 job->showErrorDialog( 0 );
00114 } else {
00115 kdDebug(5900) << "--- Downloaded to " << mTempFileName << endl;
00116 loadLocalFile( mTempFileName );
00117 }
00118 unlink( QFile::encodeName( mTempFileName ) );
00119 mTempFileName = QString::null;
00120 emit loaded( this, mLoaded );
00121 }
00122
00123 void ADCalendarBase::loadLocalFile( const QString& filename )
00124 {
00125 mLoaded = load( filename );
00126 if (!mLoaded)
00127 kdDebug(5900) << "ADCalendarBase::loadLocalFile(): Error loading calendar file '" << filename << "'\n";
00128 else
00129 {
00130
00131 for (EventsMap::Iterator it = eventsHandled_.begin(); it != eventsHandled_.end(); )
00132 {
00133 if (it.data().calendarURL == mUrlString && !event(it.key()))
00134 {
00135
00136 EventsMap::Iterator i = it;
00137 ++it;
00138 eventsHandled_.remove(i);
00139 }
00140 else
00141 ++it;
00142 }
00143 }
00144 }
00145
00146 bool ADCalendarBase::setLoadedConnected()
00147 {
00148 if (mLoadedConnected)
00149 return true;
00150 mLoadedConnected = true;
00151 return false;
00152 }
00153
00154 void ADCalendarBase::dump() const
00155 {
00156 kdDebug(5900) << " <calendar>" << endl;
00157 kdDebug(5900) << " <url>" << urlString() << "</url>" << endl;
00158 kdDebug(5900) << " <appname>" << appName() << "</appname>" << endl;
00159 if ( loaded() ) kdDebug(5900) << " <loaded/>" << endl;
00160 kdDebug(5900) << " <actiontype>" << int(actionType()) << "</actiontype>" << endl;
00161 if (enabled() ) kdDebug(5900) << " <enabled/>" << endl;
00162 else kdDebug(5900) << " <disabled/>" << endl;
00163 if (available()) kdDebug(5900) << " <available/>" << endl;
00164 kdDebug(5900) << " </calendar>" << endl;
00165 }
This file is part of the documentation for kalarmd Library Version 3.2.2.