libkdepim
kpimprefs.cpp00001
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 mCustomCategories.sort();
00060 }
00061
00062 const QString KPimPrefs::timezone()
00063 {
00064 QString zone = "";
00065
00066
00067 KConfig korgcfg( locate( "config", "korganizerrc" ) );
00068 korgcfg.setGroup( "Time & Date" );
00069 QString tz( korgcfg.readEntry( "TimeZoneId" ) );
00070 if ( !tz.isEmpty() ) {
00071 zone = tz;
00072 kdDebug(5300) << "timezone from korganizerrc is " << zone << endl;
00073 }
00074
00075
00076 if ( zone.isEmpty() ) {
00077 char zonefilebuf[ PATH_MAX ];
00078
00079 int len = readlink( "/etc/localtime", zonefilebuf, PATH_MAX );
00080 if ( len > 0 && len < PATH_MAX ) {
00081 zone = QString::fromLocal8Bit( zonefilebuf, len );
00082 zone = zone.mid( zone.find( "zoneinfo/" ) + 9 );
00083 kdDebug(5300) << "system timezone from /etc/localtime is " << zone
00084 << endl;
00085 } else {
00086 tzset();
00087 zone = tzname[ 0 ];
00088 kdDebug(5300) << "system timezone from tzset() is " << zone << endl;
00089 }
00090 }
00091
00092 return( zone );
00093 }
00094
00095 QDateTime KPimPrefs::utcToLocalTime( const QDateTime &_dt,
00096 const QString &timeZoneId )
00097 {
00098 QDateTime dt(_dt);
00099
00100
00101 int yearCorrection = 0;
00102
00103
00104
00105
00106
00107 int year = dt.date().year();
00108 if (year < 1971)
00109 {
00110 yearCorrection = 1971 - year;
00111 dt = dt.addYears(yearCorrection);
00112
00113 }
00114
00115 QCString origTz = getenv("TZ");
00116
00117 setenv( "TZ", "UTC", 1 );
00118 time_t utcTime = dt.toTime_t();
00119
00120 setenv( "TZ", timeZoneId.local8Bit(), 1 );
00121 struct tm *local = localtime( &utcTime );
00122
00123 if ( origTz.isNull() ) {
00124 unsetenv( "TZ" );
00125 } else {
00126 setenv( "TZ", origTz, 1 );
00127 }
00128 tzset();
00129
00130 QDateTime result( QDate( local->tm_year + 1900 - yearCorrection,
00131 local->tm_mon + 1, local->tm_mday ),
00132 QTime( local->tm_hour, local->tm_min, local->tm_sec ) );
00133
00134
00135 return result;
00136 }
00137
00138 QDateTime KPimPrefs::localTimeToUtc( const QDateTime &_dt,
00139 const QString &timeZoneId )
00140 {
00141 QDateTime dt(_dt);
00142
00143
00144 int yearCorrection = 0;
00145
00146
00147
00148
00149
00150
00151 int year = dt.date().year();
00152 if (year < 1971)
00153 {
00154 yearCorrection = 1971 - year;
00155 dt = dt.addYears(yearCorrection);
00156
00157 }
00158
00159 QCString origTz = getenv("TZ");
00160
00161 setenv( "TZ", timeZoneId.local8Bit(), 1 );
00162 time_t localTime = dt.toTime_t();
00163
00164 setenv( "TZ", "UTC", 1 );
00165 struct tm *utc = gmtime( &localTime );
00166
00167 if ( origTz.isNull() ) {
00168 unsetenv( "TZ" );
00169 } else {
00170 setenv( "TZ", origTz, 1 );
00171 }
00172 tzset();
00173
00174 QDateTime result( QDate( utc->tm_year + 1900 - yearCorrection,
00175 utc->tm_mon + 1, utc->tm_mday ),
00176 QTime( utc->tm_hour, utc->tm_min, utc->tm_sec ) );
00177
00178
00179
00180 return result;
00181 }
00182
00183 void KPimPrefs::usrWriteConfig()
00184 {
00185 config()->setGroup( "General" );
00186 config()->writeEntry( "Custom Categories", mCustomCategories );
00187 }
|