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 }