kpimprefs.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <config.h>
00023
00024 #include <time.h>
00025 #include <unistd.h>
00026 #include <stdlib.h>
00027
00028 #include <qstring.h>
00029
00030 #include <kstandarddirs.h>
00031 #include <kglobal.h>
00032 #include <kconfig.h>
00033 #include <klocale.h>
00034 #include <kdebug.h>
00035
00036 #include "kpimprefs.h"
00037
00038 KPimPrefs::KPimPrefs( const QString &name )
00039 : KConfigSkeleton( name )
00040 {
00041 }
00042
00043 KPimPrefs::~KPimPrefs()
00044 {
00045 }
00046
00047 void KPimPrefs::usrSetDefaults()
00048 {
00049 setCategoryDefaults();
00050 }
00051
00052 void KPimPrefs::usrReadConfig()
00053 {
00054 kdDebug(5300) << "KPimPrefs::usrReadConfig()" << endl;
00055
00056 config()->setGroup("General");
00057 mCustomCategories = config()->readListEntry( "Custom Categories" );
00058 if ( mCustomCategories.isEmpty() ) setCategoryDefaults();
00059 }
00060
00061 const QString KPimPrefs::timezone()
00062 {
00063 QString zone = "";
00064
00065
00066 KConfig korgcfg( locate( "config", "korganizerrc" ) );
00067 korgcfg.setGroup( "Time & Date" );
00068 QString tz( korgcfg.readEntry( "TimeZoneId" ) );
00069 if ( !tz.isEmpty() ) {
00070 zone = tz;
00071 kdDebug(5300) << "timezone from korganizerrc is " << zone << endl;
00072 }
00073
00074
00075 if ( zone.isEmpty() ) {
00076 char zonefilebuf[ PATH_MAX ];
00077
00078 int len = readlink( "/etc/localtime", zonefilebuf, PATH_MAX );
00079 if ( len > 0 && len < PATH_MAX ) {
00080 zone = QString::fromLocal8Bit( zonefilebuf, len );
00081 zone = zone.mid( zone.find( "zoneinfo/" ) + 9 );
00082 kdDebug(5300) << "system timezone from /etc/localtime is " << zone
00083 << endl;
00084 } else {
00085 tzset();
00086 zone = tzname[ 0 ];
00087 kdDebug(5300) << "system timezone from tzset() is " << zone << endl;
00088 }
00089 }
00090
00091 return( zone );
00092 }
00093
00094 QDateTime KPimPrefs::utcToLocalTime( const QDateTime &_dt,
00095 const QString &timeZoneId )
00096 {
00097 QDateTime dt(_dt);
00098
00099
00100 int yearCorrection = 0;
00101
00102
00103
00104
00105
00106 int year = dt.date().year();
00107 if (year < 1971)
00108 {
00109 yearCorrection = 1971 - year;
00110 dt = dt.addYears(yearCorrection);
00111
00112 }
00113
00114 QCString origTz = getenv("TZ");
00115
00116 setenv( "TZ", "UTC", 1 );
00117 time_t utcTime = dt.toTime_t();
00118
00119 setenv( "TZ", timeZoneId.local8Bit(), 1 );
00120 struct tm *local = localtime( &utcTime );
00121
00122 if ( origTz.isNull() ) {
00123 unsetenv( "TZ" );
00124 } else {
00125 setenv( "TZ", origTz, 1 );
00126 }
00127 tzset();
00128
00129 QDateTime result( QDate( local->tm_year + 1900 - yearCorrection,
00130 local->tm_mon + 1, local->tm_mday ),
00131 QTime( local->tm_hour, local->tm_min, local->tm_sec ) );
00132
00133
00134 return result;
00135 }
00136
00137 QDateTime KPimPrefs::localTimeToUtc( const QDateTime &_dt,
00138 const QString &timeZoneId )
00139 {
00140 QDateTime dt(_dt);
00141
00142
00143 int yearCorrection = 0;
00144
00145
00146
00147
00148
00149
00150 int year = dt.date().year();
00151 if (year < 1971)
00152 {
00153 yearCorrection = 1971 - year;
00154 dt = dt.addYears(yearCorrection);
00155
00156 }
00157
00158 QCString origTz = getenv("TZ");
00159
00160 setenv( "TZ", timeZoneId.local8Bit(), 1 );
00161 time_t localTime = dt.toTime_t();
00162
00163 setenv( "TZ", "UTC", 1 );
00164 struct tm *utc = gmtime( &localTime );
00165
00166 if ( origTz.isNull() ) {
00167 unsetenv( "TZ" );
00168 } else {
00169 setenv( "TZ", origTz, 1 );
00170 }
00171 tzset();
00172
00173 QDateTime result( QDate( utc->tm_year + 1900 - yearCorrection,
00174 utc->tm_mon + 1, utc->tm_mday ),
00175 QTime( utc->tm_hour, utc->tm_min, utc->tm_sec ) );
00176
00177
00178
00179 return result;
00180 }
00181
00182 void KPimPrefs::usrWriteConfig()
00183 {
00184 config()->setGroup( "General" );
00185 config()->writeEntry( "Custom Categories", mCustomCategories );
00186 }
This file is part of the documentation for libkdepim Library Version 3.3.2.