-rw-r--r-- | libopie2/opiepim/core/oconversion.cpp | 213 | ||||
-rw-r--r-- | libopie2/opiepim/core/oconversion.h | 7 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimcache.h | 10 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimmaintainer.cpp | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimmaintainer.h | 5 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimresolver.cpp | 11 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimresolver.h | 16 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimstate.cpp | 5 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimstate.h | 11 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxref.cpp | 14 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxref.h | 22 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxrefmanager.cpp | 22 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxrefmanager.h | 9 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxrefpartner.cpp | 12 | ||||
-rw-r--r-- | libopie2/opiepim/core/opimxrefpartner.h | 7 | ||||
-rw-r--r-- | libopie2/opiepim/core/orecur.cpp | 754 | ||||
-rw-r--r-- | libopie2/opiepim/core/orecur.h | 17 | ||||
-rw-r--r-- | libopie2/opiepim/core/otemplatebase.h | 9 | ||||
-rw-r--r-- | libopie2/opiepim/core/otimezone.cpp | 168 | ||||
-rw-r--r-- | libopie2/opiepim/core/otimezone.h | 13 |
20 files changed, 751 insertions, 576 deletions
diff --git a/libopie2/opiepim/core/oconversion.cpp b/libopie2/opiepim/core/oconversion.cpp index b7eebef..160c2c6 100644 --- a/libopie2/opiepim/core/oconversion.cpp +++ b/libopie2/opiepim/core/oconversion.cpp @@ -1,127 +1,138 @@ /*
- This file is part of the Opie Project
- Copyright (C) The Main Author <main-author@whereever.org>
- =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
- .=l.
- .>+-=
- _;:, .> :=|. This program is free software; you can
-.> <`_, > . <= redistribute it and/or modify it under
-:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
-.="- .-=="i, .._ License as published by the Free Software
- - . .-<_> .<> Foundation; either version 2 of the License,
- ._= =} : or (at your option) any later version.
- .%`+i> _;_.
- .i_,=:_. -<s. This program is distributed in the hope that
- + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
- : .. .:, . . . without even the implied warranty of
- =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
- _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
-..}^=.= = ; Library General Public License for more
-++= -. .` .: details.
- : = ...= . :.=-
- -. .:....=;==+<; You should have received a copy of the GNU
- -_. . . )=. = Library General Public License along with
- -- :-=` this library; see the file COPYING.LIB.
- If not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ This file is part of the Opie Project
+ =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
+ .=l.
+ .>+-=
+_;:, .> :=|. This program is free software; you can
+.> <`_, > . <= redistribute it and/or modify it under
+:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
+.="- .-=="i, .._ License as published by the Free Software
+- . .-<_> .<> Foundation; either version 2 of the License,
+ ._= =} : or (at your option) any later version.
+ .%`+i> _;_.
+ .i_,=:_. -<s. This program is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
+..}^=.= = ; Library General Public License for more
+++= -. .` .: details.
+: = ...= . :.=-
+-. .:....=;==+<; You should have received a copy of the GNU
+ -_. . . )=. = Library General Public License along with
+ -- :-=` this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
*/
+/* OPIE */
#include <opie2/oconversion.h>
#include <qpe/timeconversion.h>
-
-namespace Opie {
+namespace Opie
+{
QString OConversion::dateToString( const QDate &d )
{
- if ( d.isNull() || !d.isValid() )
- return QString::null;
+ if ( d.isNull() || !d.isValid() )
+ return QString::null;
- // ISO format in year, month, day (YYYYMMDD); e.g. 20021231
- QString year = QString::number( d.year() );
- QString month = QString::number( d.month() );
- month = month.rightJustify( 2, '0' );
- QString day = QString::number( d.day() );
- day = day.rightJustify( 2, '0' );
+ // ISO format in year, month, day (YYYYMMDD); e.g. 20021231
+ QString year = QString::number( d.year() );
+ QString month = QString::number( d.month() );
+ month = month.rightJustify( 2, '0' );
+ QString day = QString::number( d.day() );
+ day = day.rightJustify( 2, '0' );
- QString str = year + month + day;
- //qDebug( "\tPimContact dateToStr = %s", str.latin1() );
+ QString str = year + month + day;
+ //qDebug( "\tPimContact dateToStr = %s", str.latin1() );
- return str;
+ return str;
}
+
QDate OConversion::dateFromString( const QString& s )
{
- QDate date;
-
- if ( s.isEmpty() )
- return date;
-
- // Be backward compatible to old Opie format:
- // Try to load old format. If it fails, try new ISO-Format!
- date = TimeConversion::fromString ( s );
- if ( date.isValid() )
- return date;
-
- // Read ISO-Format (YYYYMMDD)
- int year = s.mid(0, 4).toInt();
- int month = s.mid(4,2).toInt();
- int day = s.mid(6,2).toInt();
-
- // do some quick sanity checking -eilers
- // but we isValid() again? -zecke
- if ( year < 1900 || year > 3000 ) {
- qWarning( "PimContact year is not in range");
- return date;
- }
- if ( month < 0 || month > 12 ) {
- qWarning( "PimContact month is not in range");
- return date;
- }
- if ( day < 0 || day > 31 ) {
- qWarning( "PimContact day is not in range");
- return date;
- }
-
- date.setYMD( year, month, day );
- if ( !date.isValid() ) {
- qWarning( "PimContact date is not valid");
- return date;
- }
-
- return date;
+ QDate date;
+
+ if ( s.isEmpty() )
+ return date;
+
+ // Be backward compatible to old Opie format:
+ // Try to load old format. If it fails, try new ISO-Format!
+ date = TimeConversion::fromString ( s );
+ if ( date.isValid() )
+ return date;
+
+ // Read ISO-Format (YYYYMMDD)
+ int year = s.mid( 0, 4 ).toInt();
+ int month = s.mid( 4, 2 ).toInt();
+ int day = s.mid( 6, 2 ).toInt();
+
+ // do some quick sanity checking -eilers
+ // but we isValid() again? -zecke
+ if ( year < 1900 || year > 3000 )
+ {
+ qWarning( "PimContact year is not in range" );
+ return date;
+ }
+ if ( month < 0 || month > 12 )
+ {
+ qWarning( "PimContact month is not in range" );
+ return date;
+ }
+ if ( day < 0 || day > 31 )
+ {
+ qWarning( "PimContact day is not in range" );
+ return date;
+ }
+
+ date.setYMD( year, month, day );
+ if ( !date.isValid() )
+ {
+ qWarning( "PimContact date is not valid" );
+ return date;
+ }
+
+ return date;
}
-QString OConversion::dateTimeToString( const QDateTime& dt ) {
- if (!dt.isValid() || dt.isNull() ) return QString::null;
- QString year = QString::number( dt.date().year() );
- QString month = QString::number( dt.date().month() );
- QString day = QString::number( dt.date().day() );
- QString hour = QString::number( dt.time().hour() );
- QString min = QString::number( dt.time().minute() );
- QString sec = QString::number( dt.time().second() );
+QString OConversion::dateTimeToString( const QDateTime& dt )
+{
+ if ( !dt.isValid() || dt.isNull() )
+ return QString::null;
- month = month.rightJustify( 2, '0' );
- day = day. rightJustify( 2, '0' );
- hour = hour. rightJustify( 2, '0' );
- min = min. rightJustify( 2, '0' );
- sec = sec. rightJustify( 2, '0' );
+ QString year = QString::number( dt.date().year() );
+ QString month = QString::number( dt.date().month() );
+ QString day = QString::number( dt.date().day() );
- QString str = day + month + year + hour + min + sec;
+ QString hour = QString::number( dt.time().hour() );
+ QString min = QString::number( dt.time().minute() );
+ QString sec = QString::number( dt.time().second() );
- return str;
+ month = month.rightJustify( 2, '0' );
+ day = day. rightJustify( 2, '0' );
+ hour = hour. rightJustify( 2, '0' );
+ min = min. rightJustify( 2, '0' );
+ sec = sec. rightJustify( 2, '0' );
+
+ return day + month + year + hour + min + sec;
}
-QDateTime OConversion::dateTimeFromString( const QString& str) {
- if ( str.isEmpty() ) return QDateTime();
- int day = str.mid(0, 2).toInt();
- int month = str.mid(2, 2).toInt();
- int year = str.mid(4, 4).toInt();
- int hour = str.mid(8, 2).toInt();
- int min = str.mid(10, 2).toInt();
- int sec = str.mid(12, 2).toInt();
+
+QDateTime OConversion::dateTimeFromString( const QString& str )
+{
+
+ if ( str.isEmpty() )
+ return QDateTime();
+ int day = str.mid( 0, 2 ).toInt();
+ int month = str.mid( 2, 2 ).toInt();
+ int year = str.mid( 4, 4 ).toInt();
+ int hour = str.mid( 8, 2 ).toInt();
+ int min = str.mid( 10, 2 ).toInt();
+ int sec = str.mid( 12, 2 ).toInt();
QDate date( year, month, day );
QTime time( hour, min, sec );
@@ -129,4 +140,4 @@ QDateTime OConversion::dateTimeFromString( const QString& str) { return dt;
}
-}
\ No newline at end of file +}
diff --git a/libopie2/opiepim/core/oconversion.h b/libopie2/opiepim/core/oconversion.h index 3c4fdf3..eeb97e5 100644 --- a/libopie2/opiepim/core/oconversion.h +++ b/libopie2/opiepim/core/oconversion.h @@ -27,11 +27,10 @@ Boston, MA 02111-1307, USA. */ -#ifndef __oconversion_h__ -#define __oconversion_h__ +#ifndef OCONVERSION_H +#define OCONVERSION_H -/* #include <time.h> */ -/* #include <sys/types.h> */ +/* QT */ #include <qdatetime.h> namespace Opie { diff --git a/libopie2/opiepim/core/opimcache.h b/libopie2/opiepim/core/opimcache.h index e70a910..a033574 100644 --- a/libopie2/opiepim/core/opimcache.h +++ b/libopie2/opiepim/core/opimcache.h @@ -26,13 +26,15 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIE_PIM_CACHE_H -#define OPIE_PIM_CACHE_H - -#include <qintcache.h> +#ifndef OPIMCACHE_H +#define OPIMCACHE_H +/* OPIE */ #include <opie2/opimrecord.h> +/* QT */ +#include <qintcache.h> + namespace Opie { class OPimCacheItemPrivate; diff --git a/libopie2/opiepim/core/opimmaintainer.cpp b/libopie2/opiepim/core/opimmaintainer.cpp index b2eff12..b8d829a 100644 --- a/libopie2/opiepim/core/opimmaintainer.cpp +++ b/libopie2/opiepim/core/opimmaintainer.cpp @@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA. */ -#include <opie2/opimmaintainer.h> +#include "opimmaintainer.h" namespace Opie { OPimMaintainer::OPimMaintainer( int mode, int uid ) diff --git a/libopie2/opiepim/core/opimmaintainer.h b/libopie2/opiepim/core/opimmaintainer.h index 46bc9d2..e7e7eeb 100644 --- a/libopie2/opiepim/core/opimmaintainer.h +++ b/libopie2/opiepim/core/opimmaintainer.h @@ -26,9 +26,10 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIE_PIM_MAINTAINER_H -#define OPIE_PIM_MAINTAINER_H +#ifndef OPIMMAINTAINER_H +#define OPIMMAINTAINER_H +/* QT */ #include <qstring.h> namespace Opie { diff --git a/libopie2/opiepim/core/opimresolver.cpp b/libopie2/opiepim/core/opimresolver.cpp index eceabcb..73d7de1 100644 --- a/libopie2/opiepim/core/opimresolver.cpp +++ b/libopie2/opiepim/core/opimresolver.cpp @@ -26,15 +26,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qcopchannel_qws.h> -#include <qpe/qcopenvelope_qws.h> +#include "opimresolver.h" -#include <opie2/otodoaccess.h> +/* OPIE */ #include <opie2/ocontactaccess.h> +#include <opie2/otodoaccess.h> +#include <qpe/qcopenvelope_qws.h> -//#include "opimfactory.h" -#include <opie2/opimresolver.h> +/* QT */ +#include <qcopchannel_qws.h> namespace Opie { diff --git a/libopie2/opiepim/core/opimresolver.h b/libopie2/opiepim/core/opimresolver.h index adc7c16..dd6f07f 100644 --- a/libopie2/opiepim/core/opimresolver.h +++ b/libopie2/opiepim/core/opimresolver.h @@ -26,14 +26,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIE_PIM_RESOLVER -#define OPIE_PIM_RESOLVER +#ifndef OPIMRESOLVER_H +#define OPIMRESOLVER_H +/* OPIE */ +#include <opie2/otemplatebase.h> + +/* QT */ #include <qstring.h> #include <qvaluelist.h> -#include <opie2/otemplatebase.h> - namespace Opie { /** * OPimResolver is a MetaClass to access @@ -47,7 +49,8 @@ namespace Opie { * USING XML is a waste of memory!!!!! */ class OPimResolver { -public: + + public: enum BuiltIn { TodoList = 0, DateBook, AddressBook @@ -100,7 +103,8 @@ public: */ OPimBase* backend( const QString& service ); OPimBase* backend( int rtti ); -private: + + private: OPimResolver(); void loadData(); inline bool isBuiltIn( const QString& )const; diff --git a/libopie2/opiepim/core/opimstate.cpp b/libopie2/opiepim/core/opimstate.cpp index 1013a1c..8aff558 100644 --- a/libopie2/opiepim/core/opimstate.cpp +++ b/libopie2/opiepim/core/opimstate.cpp @@ -26,10 +26,11 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <qshared.h> - #include "opimstate.h" +/* QT */ +#include <qshared.h> + namespace Opie { /* * for one int this does not make diff --git a/libopie2/opiepim/core/opimstate.h b/libopie2/opiepim/core/opimstate.h index 78e8cd0..8336b3e 100644 --- a/libopie2/opiepim/core/opimstate.h +++ b/libopie2/opiepim/core/opimstate.h @@ -26,9 +26,10 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIE_PIM_STATE_H -#define OPIE_PIM_STATE_H +#ifndef OPIMSTATE_H +#define OPIMSTATE_H +/* QT */ #include <qstring.h> namespace Opie { @@ -44,7 +45,8 @@ namespace Opie { * ;) */ class OPimState { -public: + + public: enum State { Started = 0, Postponed, @@ -60,7 +62,8 @@ public: OPimState &operator=( const OPimState& ); void setState( int state); int state()const; -private: + + private: void deref(); inline void copyInternally(); diff --git a/libopie2/opiepim/core/opimxref.cpp b/libopie2/opiepim/core/opimxref.cpp index 85d3345..f58ebb5 100644 --- a/libopie2/opiepim/core/opimxref.cpp +++ b/libopie2/opiepim/core/opimxref.cpp @@ -26,7 +26,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <opie2/opimxref.h> +#include "opimxref.h" namespace Opie { @@ -36,22 +36,25 @@ OPimXRef::OPimXRef( const OPimXRefPartner& one, const OPimXRefPartner& two ) m_partners[0] = one; m_partners[1] = two; } -OPimXRef::OPimXRef() - : m_partners(2) +OPimXRef::OPimXRef():m_partners(2) { } + OPimXRef::OPimXRef( const OPimXRef& ref) { *this = ref; } + OPimXRef::~OPimXRef() { } + OPimXRef &OPimXRef::operator=( const OPimXRef& ref) { m_partners = ref.m_partners; m_partners.detach(); - return* this; + return *this; } + bool OPimXRef::operator==( const OPimXRef& oper ) { if ( m_partners == oper.m_partners ) return true; @@ -60,15 +63,18 @@ bool OPimXRef::operator==( const OPimXRef& oper ) { OPimXRefPartner OPimXRef::partner( enum Partners par) const{ return m_partners[par]; } + void OPimXRef::setPartner( enum Partners par, const OPimXRefPartner& part) { m_partners[par] = part; } + bool OPimXRef::containsString( const QString& string ) const{ if ( m_partners[One].service() == string || m_partners[Two].service() == string ) return true; return false; } + bool OPimXRef::containsUid( int uid ) const{ if ( m_partners[One].uid() == uid || m_partners[Two].uid() == uid ) return true; diff --git a/libopie2/opiepim/core/opimxref.h b/libopie2/opiepim/core/opimxref.h index 820c9c4..f3e814e 100644 --- a/libopie2/opiepim/core/opimxref.h +++ b/libopie2/opiepim/core/opimxref.h @@ -27,21 +27,23 @@ Boston, MA 02111-1307, USA. */ -#ifndef OPIM_XREF_H -#define OPIM_XREF_H +#ifndef OPIMXREF_H +#define OPIMXREF_H +/* OPIE */ +#include <opie2/opimxrefpartner.h> + +/* QT */ #include <qarray.h> #include <qvaluelist.h> -#include <opie2/opimxrefpartner.h> - namespace Opie { /** * this is a Cross Referecne between * two Cross Reference Partners */ class OPimXRef { -public: + public: typedef QValueList<OPimXRef> ValueList; enum Partners { One, Two }; OPimXRef( const OPimXRefPartner& ONE, const OPimXRefPartner& ); @@ -52,14 +54,14 @@ public: OPimXRef &operator=( const OPimXRef& ); bool operator==( const OPimXRef& ); - OPimXRefPartner partner( enum Partners )const; + OPimXRefPartner partner( enum Partners ) const; - void setPartner( enum Partners, const OPimXRefPartner& ); + void setPartner( enum Partners, const OPimXRefPartner& ); - bool containsString( const QString& service)const; - bool containsUid( int uid )const; + bool containsString( const QString& service) const; + bool containsUid( int uid ) const; -private: + private: QArray<OPimXRefPartner> m_partners; class Private; diff --git a/libopie2/opiepim/core/opimxrefmanager.cpp b/libopie2/opiepim/core/opimxrefmanager.cpp index bf6fed6..e7c6c5a 100644 --- a/libopie2/opiepim/core/opimxrefmanager.cpp +++ b/libopie2/opiepim/core/opimxrefmanager.cpp @@ -26,40 +26,49 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <opie2/opimxrefmanager.h> +#include "opimxrefmanager.h" namespace Opie { OPimXRefManager::OPimXRefManager() { } + OPimXRefManager::OPimXRefManager( const OPimXRefManager& ref) { m_list = ref.m_list; } + OPimXRefManager::~OPimXRefManager() { } + OPimXRefManager &OPimXRefManager::operator=( const OPimXRefManager& ref) { m_list = ref.m_list; return *this; } + bool OPimXRefManager::operator==( const OPimXRefManager& /*ref*/) { // if ( m_list == ref.m_list ) return true; return false; } + void OPimXRefManager::add( const OPimXRef& ref) { m_list.append( ref ); } + void OPimXRefManager::remove( const OPimXRef& ref) { m_list.remove( ref ); } + void OPimXRefManager::replace( const OPimXRef& ref) { m_list.remove( ref ); m_list.append( ref ); } + void OPimXRefManager::clear() { m_list.clear(); } -QStringList OPimXRefManager::apps()const { + +QStringList OPimXRefManager::apps() const { OPimXRef::ValueList::ConstIterator it; QStringList list; @@ -73,10 +82,12 @@ QStringList OPimXRefManager::apps()const { } return list; } -OPimXRef::ValueList OPimXRefManager::list()const { + +OPimXRef::ValueList OPimXRefManager::list() const { return m_list; } -OPimXRef::ValueList OPimXRefManager::list( const QString& appName )const{ + +OPimXRef::ValueList OPimXRefManager::list( const QString& appName ) const{ OPimXRef::ValueList list; OPimXRef::ValueList::ConstIterator it; @@ -87,7 +98,8 @@ OPimXRef::ValueList OPimXRefManager::list( const QString& appName )const{ return list; } -OPimXRef::ValueList OPimXRefManager::list( int uid )const { + +OPimXRef::ValueList OPimXRefManager::list( int uid ) const { OPimXRef::ValueList list; OPimXRef::ValueList::ConstIterator it; diff --git a/libopie2/opiepim/core/opimxrefmanager.h b/libopie2/opiepim/core/opimxrefmanager.h index fa2d7f4..b80a645 100644 --- a/libopie2/opiepim/core/opimxrefmanager.h +++ b/libopie2/opiepim/core/opimxrefmanager.h @@ -26,13 +26,16 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIM_XREF_MANAGER_H -#define OPIM_XREF_MANAGER_H -#include <qstringlist.h> +#ifndef OPIMXREFMANAGER_H +#define OPIMXREFMANAGER_H +/* OPIE */ #include <opie2/opimxref.h> +/* QT */ +#include <qstringlist.h> + namespace Opie { /** * This is a simple manager for diff --git a/libopie2/opiepim/core/opimxrefpartner.cpp b/libopie2/opiepim/core/opimxrefpartner.cpp index f6ccc7f..3741bc3 100644 --- a/libopie2/opiepim/core/opimxrefpartner.cpp +++ b/libopie2/opiepim/core/opimxrefpartner.cpp @@ -26,7 +26,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <opie2/opimxrefpartner.h> +#include "opimxrefpartner.h" namespace Opie { @@ -34,11 +34,14 @@ OPimXRefPartner::OPimXRefPartner( const QString& appName, int uid, int field ) : m_app(appName), m_uid(uid), m_field( field ) { } + OPimXRefPartner::OPimXRefPartner( const OPimXRefPartner& ref ) { *this = ref; } + OPimXRefPartner::~OPimXRefPartner() { } + OPimXRefPartner &OPimXRefPartner::operator=( const OPimXRefPartner& par ) { m_app = par.m_app; m_uid = par.m_uid; @@ -46,6 +49,7 @@ OPimXRefPartner &OPimXRefPartner::operator=( const OPimXRefPartner& par ) { return *this; } + bool OPimXRefPartner::operator==( const OPimXRefPartner& par ) { if ( m_app != par.m_app ) return false; if ( m_uid != par.m_uid ) return false; @@ -53,21 +57,27 @@ bool OPimXRefPartner::operator==( const OPimXRefPartner& par ) { return true; } + QString OPimXRefPartner::service()const { return m_app; } + int OPimXRefPartner::uid()const { return m_uid; } + int OPimXRefPartner::field()const { return m_field; } + void OPimXRefPartner::setService( const QString& appName ) { m_app = appName; } + void OPimXRefPartner::setUid( int uid ) { m_uid = uid; } + void OPimXRefPartner::setField( int field ) { m_field = field; } diff --git a/libopie2/opiepim/core/opimxrefpartner.h b/libopie2/opiepim/core/opimxrefpartner.h index 6853d5b..005dbc0 100644 --- a/libopie2/opiepim/core/opimxrefpartner.h +++ b/libopie2/opiepim/core/opimxrefpartner.h @@ -29,6 +29,7 @@ #ifndef OPIM_XREF_PARTNER_H #define OPIM_XREF_PARTNER_H +/* QT */ #include <qstring.h> namespace Opie { @@ -40,7 +41,8 @@ namespace Opie { * with one tableId( fieldId ) to another. */ class OPimXRefPartner { -public: + + public: OPimXRefPartner( const QString& service = QString::null, int uid = 0, int field = -1 ); OPimXRefPartner( const OPimXRefPartner& ); @@ -56,7 +58,8 @@ public: void setService( const QString& service ); void setUid( int uid ); void setField( int field ); -private: + + private: QString m_app; int m_uid; int m_field; diff --git a/libopie2/opiepim/core/orecur.cpp b/libopie2/opiepim/core/orecur.cpp index 033f264..5e2da25 100644 --- a/libopie2/opiepim/core/orecur.cpp +++ b/libopie2/opiepim/core/orecur.cpp @@ -27,16 +27,20 @@ Boston, MA 02111-1307, USA. */ -#include <time.h> +#include "orecur.h" -#include <qshared.h> +/* OPIE */ +#include <opie2/otimezone.h> +#include <qpe/timeconversion.h> -#include <qtopia/timeconversion.h> +/* QT */ +#include <qshared.h> -#include <opie2/otimezone.h> -#include <opie2/orecur.h> +/* STD */ +#include <time.h> namespace Opie { + struct ORecur::Data : public QShared { Data() : QShared() { type = ORecur::NoRepeat; @@ -67,8 +71,8 @@ ORecur::ORecur() { ORecur::ORecur( const QMap<int, QString>& map ) { - ORecur(); - fromMap( map ); + ORecur(); + fromMap( map ); } @@ -77,21 +81,29 @@ ORecur::ORecur( const ORecur& rec) { data->ref(); } + + ORecur::~ORecur() { if ( data->deref() ) { delete data; data = 0l; } } + + void ORecur::deref() { if ( data->deref() ) { delete data; data = 0l; } } + + bool ORecur::operator==( const ORecur& )const { return false; } + + ORecur &ORecur::operator=( const ORecur& re) { if ( *this == re ) return *this; @@ -101,9 +113,13 @@ ORecur &ORecur::operator=( const ORecur& re) { return *this; } + + bool ORecur::doesRecur()const { return !( type() == NoRepeat ); } + + /* * we try to be smart here * @@ -118,6 +134,8 @@ bool ORecur::doesRecur( const QDate& date ) { return (recur == date); } + + // FIXME unuglify! // GPL from Datebookdb.cpp // FIXME exception list! @@ -129,6 +147,8 @@ bool ORecur::nextOcurrence( const QDate& from, QDate& next ) { return stillLooking; } + + bool ORecur::p_nextOccurrence( const QDate& from, QDate& next ) { // easy checks, first are we too far in the future or too far in the past? @@ -142,338 +162,382 @@ bool ORecur::p_nextOccurrence( const QDate& from, QDate& next ) { if (hasEndDate() && endDate() < from) - return FALSE; + return FALSE; if (start() >= from ) { - next = start(); - return TRUE; + next = start(); + return TRUE; } switch ( type() ) { - case Weekly: - /* weekly is just daily by 7 */ - /* first convert the repeatPattern.Days() mask to the next - day of week valid after from */ + case Weekly: + /* weekly is just daily by 7 */ + /* first convert the repeatPattern.Days() mask to the next + day of week valid after from */ dayOfWeek = from.dayOfWeek(); - dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */ - - /* this is done in case freq > 1 and from in week not - for this round */ - // firstOfWeek = 0; this is already done at decl. - while(!((1 << firstOfWeek) & days() )) - firstOfWeek++; - - /* there is at least one 'day', or there would be no event */ - while(!((1 << (dayOfWeek % 7)) & days() )) - dayOfWeek++; - - dayOfWeek = dayOfWeek % 7; /* the actual day of week */ - dayOfWeek -= start().dayOfWeek() -1; - - firstOfWeek = firstOfWeek % 7; /* the actual first of week */ - firstOfWeek -= start().dayOfWeek() -1; - - // dayOfWeek may be negitive now - // day of week is number of days to add to start day - - freq *= 7; - // FALL-THROUGH !!!!! - case Daily: - // the add is for the possible fall through from weekly */ - if(start().addDays(dayOfWeek) > from) { - /* first week exception */ - next = QDate(start().addDays(dayOfWeek) ); - if ((next > endDate()) - && hasEndDate() ) - return FALSE; - return TRUE; - } - /* if from is middle of a non-week */ - - diff = start().addDays(dayOfWeek).daysTo(from) % freq; - diff2 = start().addDays(firstOfWeek).daysTo(from) % freq; - - if(diff != 0) - diff = freq - diff; - if(diff2 != 0) - diff2 = freq - diff2; - diff = QMIN(diff, diff2); - - next = QDate(from.addDays(diff)); - if ( (next > endDate()) - && hasEndDate() ) - return FALSE; - return TRUE; - case MonthlyDay: - iday = from.day(); - iyear = from.year(); - imonth = from.month(); - /* find equivelent day of month for this month */ - dayOfWeek = start().dayOfWeek(); - weekOfMonth = (start().day() - 1) / 7; - - /* work out when the next valid month is */ - a = from.year() - start().year(); - a *= 12; - a = a + (imonth - start().month()); - /* a is e.start()monthsFrom(from); */ - if(a % freq) { - a = freq - (a % freq); - imonth = from.month() + a; - if (imonth > 12) { - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - } - } - /* imonth is now the first month after or on - from that matches the frequency given */ - - /* find for this month */ - tmpDate = QDate( iyear, imonth, 1 ); - - iday = 1; - iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; - iday += 7 * weekOfMonth; - while (iday > tmpDate.daysInMonth()) { - imonth += freq; - if (imonth > 12) { - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - } - tmpDate = QDate( iyear, imonth, 1 ); - /* these loops could go for a while, check end case now */ - if ((tmpDate > endDate()) && hasEndDate() ) - return FALSE; - iday = 1; - iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; - iday += 7 * weekOfMonth; - } - tmpDate = QDate(iyear, imonth, iday); - - if (tmpDate >= from) { - next = tmpDate; - if ((next > endDate() ) && hasEndDate() ) - return FALSE; - return TRUE; - } - - /* need to find the next iteration */ - do { - imonth += freq; - if (imonth > 12) { - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - } - tmpDate = QDate( iyear, imonth, 1 ); - /* these loops could go for a while, check end case now */ - if ((tmpDate > endDate()) && hasEndDate() ) - return FALSE; - iday = 1; - iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; - iday += 7 * weekOfMonth; - } while (iday > tmpDate.daysInMonth()); - tmpDate = QDate(iyear, imonth, iday); - - next = tmpDate; - if ((next > endDate()) && hasEndDate() ) - return FALSE; - return TRUE; - case MonthlyDate: - iday = start().day(); - iyear = from.year(); - imonth = from.month(); - - a = from.year() - start().year(); - a *= 12; - a = a + (imonth - start().month()); - /* a is e.start()monthsFrom(from); */ - if(a % freq) { - a = freq - (a % freq); - imonth = from.month() + a; - if (imonth > 12) { - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - } - } - /* imonth is now the first month after or on - from that matches the frequencey given */ - - /* this could go for a while, worse case, 4*12 iterations, probably */ - while(!QDate::isValid(iyear, imonth, iday) ) { - imonth += freq; - if (imonth > 12) { - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - } - /* these loops could go for a while, check end case now */ - if ((QDate(iyear, imonth, 1) > endDate()) && hasEndDate() ) - return FALSE; - } - - if(QDate(iyear, imonth, iday) >= from) { - /* done */ - next = QDate(iyear, imonth, iday); - if ((next > endDate()) && hasEndDate() ) - return FALSE; - return TRUE; - } - - /* ok, need to cycle */ - imonth += freq; - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - - while(!QDate::isValid(iyear, imonth, iday) ) { - imonth += freq; - imonth--; - iyear += imonth / 12; - imonth = imonth % 12; - imonth++; - if ((QDate(iyear, imonth, 1) > endDate()) && hasEndDate() ) - return FALSE; - } - - next = QDate(iyear, imonth, iday); - if ((next > endDate()) && hasEndDate() ) - return FALSE; - return TRUE; - case Yearly: - iday = start().day(); - imonth = start().month(); - iyear = from.year(); // after all, we want to start in this year - - diff = 1; - if(imonth == 2 && iday > 28) { - /* leap year, and it counts, calculate actual frequency */ - if(freq % 4) - if (freq % 2) - freq = freq * 4; - else - freq = freq * 2; - /* else divides by 4 already, leave freq alone */ - diff = 4; - } - - a = from.year() - start().year(); - if(a % freq) { - a = freq - (a % freq); - iyear = iyear + a; - } - - /* under the assumption we won't hit one of the special not-leap years twice */ - if(!QDate::isValid(iyear, imonth, iday)) { - /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ - iyear += freq; - } - - if(QDate(iyear, imonth, iday) >= from) { - next = QDate(iyear, imonth, iday); - - if ((next > endDate()) && hasEndDate() ) - return FALSE; - return TRUE; - } - /* iyear == from.year(), need to advance again */ - iyear += freq; - /* under the assumption we won't hit one of the special not-leap years twice */ - if(!QDate::isValid(iyear, imonth, iday)) { - /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ - iyear += freq; - } - - next = QDate(iyear, imonth, iday); - if ((next > endDate()) && hasEndDate() ) - return FALSE; - return TRUE; - default: - return FALSE; + dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */ + + /* this is done in case freq > 1 and from in week not + for this round */ + // firstOfWeek = 0; this is already done at decl. + while(!((1 << firstOfWeek) & days() )) + firstOfWeek++; + + /* there is at least one 'day', or there would be no event */ + while(!((1 << (dayOfWeek % 7)) & days() )) + dayOfWeek++; + + dayOfWeek = dayOfWeek % 7; /* the actual day of week */ + dayOfWeek -= start().dayOfWeek() -1; + + firstOfWeek = firstOfWeek % 7; /* the actual first of week */ + firstOfWeek -= start().dayOfWeek() -1; + + // dayOfWeek may be negitive now + // day of week is number of days to add to start day + + freq *= 7; + // FALL-THROUGH !!!!! + case Daily: + // the add is for the possible fall through from weekly */ + if(start().addDays(dayOfWeek) > from) { + /* first week exception */ + next = QDate(start().addDays(dayOfWeek) ); + if ((next > endDate()) + && hasEndDate() ) + return FALSE; + return TRUE; + } + /* if from is middle of a non-week */ + + diff = start().addDays(dayOfWeek).daysTo(from) % freq; + diff2 = start().addDays(firstOfWeek).daysTo(from) % freq; + + if(diff != 0) + diff = freq - diff; + if(diff2 != 0) + diff2 = freq - diff2; + diff = QMIN(diff, diff2); + + next = QDate(from.addDays(diff)); + if ( (next > endDate()) + && hasEndDate() ) + return FALSE; + return TRUE; + case MonthlyDay: + iday = from.day(); + iyear = from.year(); + imonth = from.month(); + /* find equivelent day of month for this month */ + dayOfWeek = start().dayOfWeek(); + weekOfMonth = (start().day() - 1) / 7; + + /* work out when the next valid month is */ + a = from.year() - start().year(); + a *= 12; + a = a + (imonth - start().month()); + /* a is e.start()monthsFrom(from); */ + if(a % freq) { + a = freq - (a % freq); + imonth = from.month() + a; + if (imonth > 12) { + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + } + } + /* imonth is now the first month after or on + from that matches the frequency given */ + + /* find for this month */ + tmpDate = QDate( iyear, imonth, 1 ); + + iday = 1; + iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; + iday += 7 * weekOfMonth; + while (iday > tmpDate.daysInMonth()) { + imonth += freq; + if (imonth > 12) { + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + } + tmpDate = QDate( iyear, imonth, 1 ); + /* these loops could go for a while, check end case now */ + if ((tmpDate > endDate()) && hasEndDate() ) + return FALSE; + iday = 1; + iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; + iday += 7 * weekOfMonth; + } + tmpDate = QDate(iyear, imonth, iday); + + if (tmpDate >= from) { + next = tmpDate; + if ((next > endDate() ) && hasEndDate() ) + return FALSE; + return TRUE; + } + + /* need to find the next iteration */ + do { + imonth += freq; + if (imonth > 12) { + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + } + tmpDate = QDate( iyear, imonth, 1 ); + /* these loops could go for a while, check end case now */ + if ((tmpDate > endDate()) && hasEndDate() ) + return FALSE; + iday = 1; + iday += (7 + dayOfWeek - tmpDate.dayOfWeek()) % 7; + iday += 7 * weekOfMonth; + } while (iday > tmpDate.daysInMonth()); + tmpDate = QDate(iyear, imonth, iday); + + next = tmpDate; + if ((next > endDate()) && hasEndDate() ) + return FALSE; + return TRUE; + case MonthlyDate: + iday = start().day(); + iyear = from.year(); + imonth = from.month(); + + a = from.year() - start().year(); + a *= 12; + a = a + (imonth - start().month()); + /* a is e.start()monthsFrom(from); */ + if(a % freq) { + a = freq - (a % freq); + imonth = from.month() + a; + if (imonth > 12) { + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + } + } + /* imonth is now the first month after or on + from that matches the frequencey given */ + + /* this could go for a while, worse case, 4*12 iterations, probably */ + while(!QDate::isValid(iyear, imonth, iday) ) { + imonth += freq; + if (imonth > 12) { + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + } + /* these loops could go for a while, check end case now */ + if ((QDate(iyear, imonth, 1) > endDate()) && hasEndDate() ) + return FALSE; + } + + if(QDate(iyear, imonth, iday) >= from) { + /* done */ + next = QDate(iyear, imonth, iday); + if ((next > endDate()) && hasEndDate() ) + return FALSE; + return TRUE; + } + + /* ok, need to cycle */ + imonth += freq; + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + + while(!QDate::isValid(iyear, imonth, iday) ) { + imonth += freq; + imonth--; + iyear += imonth / 12; + imonth = imonth % 12; + imonth++; + if ((QDate(iyear, imonth, 1) > endDate()) && hasEndDate() ) + return FALSE; + } + + next = QDate(iyear, imonth, iday); + if ((next > endDate()) && hasEndDate() ) + return FALSE; + return TRUE; + case Yearly: + iday = start().day(); + imonth = start().month(); + iyear = from.year(); // after all, we want to start in this year + + diff = 1; + if(imonth == 2 && iday > 28) { + /* leap year, and it counts, calculate actual frequency */ + if(freq % 4) + if (freq % 2) + freq = freq * 4; + else + freq = freq * 2; + /* else divides by 4 already, leave freq alone */ + diff = 4; + } + + a = from.year() - start().year(); + if(a % freq) { + a = freq - (a % freq); + iyear = iyear + a; + } + + /* under the assumption we won't hit one of the special not-leap years twice */ + if(!QDate::isValid(iyear, imonth, iday)) { + /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ + iyear += freq; + } + + if(QDate(iyear, imonth, iday) >= from) { + next = QDate(iyear, imonth, iday); + + if ((next > endDate()) && hasEndDate() ) + return FALSE; + return TRUE; + } + /* iyear == from.year(), need to advance again */ + iyear += freq; + /* under the assumption we won't hit one of the special not-leap years twice */ + if(!QDate::isValid(iyear, imonth, iday)) { + /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ + iyear += freq; + } + + next = QDate(iyear, imonth, iday); + if ((next > endDate()) && hasEndDate() ) + return FALSE; + return TRUE; + default: + return FALSE; } } + + ORecur::RepeatType ORecur::type()const{ return data->type; } + + int ORecur::frequency()const { return data->freq; } + + int ORecur::position()const { return data->pos; } + + char ORecur::days() const{ return data->days; } + + bool ORecur::hasEndDate()const { return data->hasEnd; } + + QDate ORecur::endDate()const { return data->end; } + + QDate ORecur::start()const{ return data->start; } + + QDateTime ORecur::createdDateTime()const { return data->create; } + + int ORecur::repetition()const { return data->rep; } + + QString ORecur::service()const { return data->app; } + + ORecur::ExceptionList& ORecur::exceptions() { return data->list; } + + void ORecur::setType( const RepeatType& z) { checkOrModify(); data->type = z; } + + void ORecur::setFrequency( int freq ) { checkOrModify(); data->freq = freq; } + + void ORecur::setPosition( int pos ) { checkOrModify(); data->pos = pos; } + + void ORecur::setDays( char c ) { checkOrModify(); data->days = c; } + + void ORecur::setEndDate( const QDate& dt) { checkOrModify(); data->end = dt; } + + void ORecur::setCreatedDateTime( const QDateTime& t) { checkOrModify(); data->create = t; } + + void ORecur::setHasEndDate( bool b) { checkOrModify(); data->hasEnd = b; } + + void ORecur::setRepitition( int rep ) { checkOrModify(); data->rep = rep; } + + void ORecur::setService( const QString& app ) { checkOrModify(); data->app = app; } + + void ORecur::setStart( const QDate& dt ) { checkOrModify(); data->start = dt; } + + void ORecur::checkOrModify() { if ( data->count != 1 ) { data->deref(); @@ -492,6 +556,8 @@ void ORecur::checkOrModify() { data = d2; } } + + QString ORecur::toString()const { QString buf; QMap<int, QString> recMap = toMap(); @@ -500,16 +566,16 @@ QString ORecur::toString()const { buf += recMap[ORecur::RType]; buf += "\""; if (data->days > 0 ) - buf += " rweekdays=\"" + recMap[ORecur::RWeekdays] + "\""; + buf += " rweekdays=\"" + recMap[ORecur::RWeekdays] + "\""; if ( data->pos != 0 ) - buf += " rposition=\"" + recMap[ORecur::RPosition] + "\""; + buf += " rposition=\"" + recMap[ORecur::RPosition] + "\""; buf += " rfreq=\"" + recMap[ORecur::RFreq] + "\""; buf += " rhasenddate=\"" + recMap[ORecur::RHasEndDate]+ "\""; if ( data->hasEnd ) - buf += " enddt=\"" - + recMap[ORecur::EndDate] - + "\""; + buf += " enddt=\"" + + recMap[ORecur::EndDate] + + "\""; buf += " created=\"" + recMap[ORecur::Created] + "\""; if ( data->list.isEmpty() ) return buf; @@ -522,104 +588,104 @@ QString ORecur::toString()const { QString ORecur::rTypeString() const { - QString retString; - switch ( data->type ) { - case ORecur::Daily: - retString = "Daily"; - break; - case ORecur::Weekly: - retString = "Weekly"; - break; - case ORecur::MonthlyDay: - retString = "MonthlyDay"; - break; - case ORecur::MonthlyDate: - retString = "MonthlyDate"; - break; - case ORecur::Yearly: - retString = "Yearly"; - break; - default: - retString = "NoRepeat"; - break; - - } - - return retString; + QString retString; + switch ( data->type ) { + case ORecur::Daily: + retString = "Daily"; + break; + case ORecur::Weekly: + retString = "Weekly"; + break; + case ORecur::MonthlyDay: + retString = "MonthlyDay"; + break; + case ORecur::MonthlyDate: + retString = "MonthlyDate"; + break; + case ORecur::Yearly: + retString = "Yearly"; + break; + default: + retString = "NoRepeat"; + break; + + } + + return retString; } QMap<QString, ORecur::RepeatType> ORecur::rTypeValueConvertMap() const { - QMap<QString, RepeatType> convertMap; + QMap<QString, RepeatType> convertMap; - convertMap.insert( QString( "Daily" ), ORecur::Daily ); - convertMap.insert( QString( "Weekly" ), ORecur::Weekly ); - convertMap.insert( QString( "MonthlyDay" ), ORecur::MonthlyDay ); - convertMap.insert( QString( "MonthlyDate" ), ORecur::MonthlyDate ); - convertMap.insert( QString( "Yearly" ), ORecur::Yearly ); - convertMap.insert( QString( "NoRepeat" ), ORecur::NoRepeat ); + convertMap.insert( QString( "Daily" ), ORecur::Daily ); + convertMap.insert( QString( "Weekly" ), ORecur::Weekly ); + convertMap.insert( QString( "MonthlyDay" ), ORecur::MonthlyDay ); + convertMap.insert( QString( "MonthlyDate" ), ORecur::MonthlyDate ); + convertMap.insert( QString( "Yearly" ), ORecur::Yearly ); + convertMap.insert( QString( "NoRepeat" ), ORecur::NoRepeat ); - return convertMap; + return convertMap; } QMap<int, QString> ORecur::toMap() const { - QMap<int, QString> retMap; - - retMap.insert( ORecur::RType, rTypeString() ); - retMap.insert( ORecur::RWeekdays, QString::number( static_cast<int>( data->days ) ) ); - retMap.insert( ORecur::RPosition, QString::number(data->pos ) ); - retMap.insert( ORecur::RFreq, QString::number( data->freq ) ); - retMap.insert( ORecur::RHasEndDate, QString::number( static_cast<int>( data->hasEnd ) ) ); - if( data -> hasEnd ) - retMap.insert( ORecur::EndDate, QString::number( OTimeZone::utc().fromUTCDateTime( QDateTime( data->end, QTime(12,0,0) ) ) ) ); - retMap.insert( ORecur::Created, QString::number( OTimeZone::utc().fromUTCDateTime( data->create ) ) ); - - if ( data->list.isEmpty() ) return retMap; - - // save exceptions list here!! - ExceptionList::ConstIterator it; - ExceptionList list = data->list; - QString exceptBuf; - QDate date; - for ( it = list.begin(); it != list.end(); ++it ) { - date = (*it); - if ( it != list.begin() ) exceptBuf += " "; - - exceptBuf += QCString().sprintf("%04d%02d%02d", date.year(), date.month(), date.day() ); - } - - retMap.insert( ORecur::Exceptions, exceptBuf ); - - return retMap; + QMap<int, QString> retMap; + + retMap.insert( ORecur::RType, rTypeString() ); + retMap.insert( ORecur::RWeekdays, QString::number( static_cast<int>( data->days ) ) ); + retMap.insert( ORecur::RPosition, QString::number(data->pos ) ); + retMap.insert( ORecur::RFreq, QString::number( data->freq ) ); + retMap.insert( ORecur::RHasEndDate, QString::number( static_cast<int>( data->hasEnd ) ) ); + if( data -> hasEnd ) + retMap.insert( ORecur::EndDate, QString::number( OTimeZone::utc().fromUTCDateTime( QDateTime( data->end, QTime(12,0,0) ) ) ) ); + retMap.insert( ORecur::Created, QString::number( OTimeZone::utc().fromUTCDateTime( data->create ) ) ); + + if ( data->list.isEmpty() ) return retMap; + + // save exceptions list here!! + ExceptionList::ConstIterator it; + ExceptionList list = data->list; + QString exceptBuf; + QDate date; + for ( it = list.begin(); it != list.end(); ++it ) { + date = (*it); + if ( it != list.begin() ) exceptBuf += " "; + + exceptBuf += QCString().sprintf("%04d%02d%02d", date.year(), date.month(), date.day() ); + } + + retMap.insert( ORecur::Exceptions, exceptBuf ); + + return retMap; } void ORecur::fromMap( const QMap<int, QString>& map ) { - QMap<QString, RepeatType> repTypeMap = rTypeValueConvertMap(); - - data -> type = repTypeMap[ map [ORecur::RType] ]; - data -> days = (char) map[ ORecur::RWeekdays ].toInt(); - data -> pos = map[ ORecur::RPosition ].toInt(); - data -> freq = map[ ORecur::RFreq ].toInt(); - data -> hasEnd= map[ ORecur::RHasEndDate ].toInt() ? true : false; - OTimeZone utc = OTimeZone::utc(); - if ( data -> hasEnd ){ - data -> end = utc.fromUTCDateTime( (time_t) map[ ORecur::EndDate ].toLong() ).date(); - } - data -> create = utc.fromUTCDateTime( (time_t) map[ ORecur::Created ].toLong() ).date(); + QMap<QString, RepeatType> repTypeMap = rTypeValueConvertMap(); + + data -> type = repTypeMap[ map [ORecur::RType] ]; + data -> days = (char) map[ ORecur::RWeekdays ].toInt(); + data -> pos = map[ ORecur::RPosition ].toInt(); + data -> freq = map[ ORecur::RFreq ].toInt(); + data -> hasEnd= map[ ORecur::RHasEndDate ].toInt() ? true : false; + OTimeZone utc = OTimeZone::utc(); + if ( data -> hasEnd ){ + data -> end = utc.fromUTCDateTime( (time_t) map[ ORecur::EndDate ].toLong() ).date(); + } + data -> create = utc.fromUTCDateTime( (time_t) map[ ORecur::Created ].toLong() ).date(); #if 0 - // FIXME: Exceptions currently not supported... - // Convert the list of exceptions from QString into ExceptionList - data -> list.clear(); - QString exceptStr = map[ ORecur::Exceptions ]; - QStringList exceptList = QStringList::split( " ", exceptStr ); - ... + // FIXME: Exceptions currently not supported... + // Convert the list of exceptions from QString into ExceptionList + data -> list.clear(); + QString exceptStr = map[ ORecur::Exceptions ]; + QStringList exceptList = QStringList::split( " ", exceptStr ); + ... #endif - - + + } -}
\ No newline at end of file +} diff --git a/libopie2/opiepim/core/orecur.h b/libopie2/opiepim/core/orecur.h index 60508f5..7808897 100644 --- a/libopie2/opiepim/core/orecur.h +++ b/libopie2/opiepim/core/orecur.h @@ -27,15 +27,16 @@ Boston, MA 02111-1307, USA. */ -#ifndef OPIE_RECUR_H -#define OPIE_RECUR_H - -#include <sys/types.h> +#ifndef ORECUR_H +#define ORECUR_H +/* QT */ #include <qdatetime.h> #include <qvaluelist.h> #include <qmap.h> +/* STD */ +#include <sys/types.h> namespace Opie { /** @@ -43,14 +44,15 @@ namespace Opie { */ class ORecur { -public: + + public: typedef QValueList<QDate> ExceptionList; enum RepeatType{ NoRepeat = -1, Daily, Weekly, MonthlyDay, MonthlyDate, Yearly }; enum Days { MON = 0x01, TUE = 0x02, WED = 0x04, THU = 0x08, FRI = 0x10, SAT = 0x20, SUN = 0x40 }; enum Fields{ RType = 0, RWeekdays, RPosition, RFreq, RHasEndDate, - EndDate, Created, Exceptions }; + EndDate, Created, Exceptions }; ORecur(); ORecur( const QMap<int, QString>& map ); @@ -114,7 +116,8 @@ public: /* almost internal */ QString toString()const; -private: + + private: bool p_nextOccurrence( const QDate& from, QDate& next ); void deref(); inline void checkOrModify(); diff --git a/libopie2/opiepim/core/otemplatebase.h b/libopie2/opiepim/core/otemplatebase.h index 17d9961..58cbfeb 100644 --- a/libopie2/opiepim/core/otemplatebase.h +++ b/libopie2/opiepim/core/otemplatebase.h @@ -26,13 +26,14 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef OPIE_TEMPLATE_BASE_H -#define OPIE_TEMPLATE_BASE_H - -#include <qarray.h> +#ifndef OTEMPLATEBASE_H +#define OTEMPLATEBASE_H +/* OPIE */ #include <opie2/opimrecord.h> +/* QT */ +#include <qarray.h> namespace Opie { /** diff --git a/libopie2/opiepim/core/otimezone.cpp b/libopie2/opiepim/core/otimezone.cpp index dab68af..e67715f 100644 --- a/libopie2/opiepim/core/otimezone.cpp +++ b/libopie2/opiepim/core/otimezone.cpp @@ -27,76 +27,90 @@ Boston, MA 02111-1307, USA. */ +#include "otimezone.h" + +/* STD */ #include <stdio.h> #include <stdlib.h> - #include <sys/types.h> -#include <opie2/otimezone.h> - -namespace Opie { +namespace Opie +{ - QDateTime utcTime( time_t t) { - tm* broken = ::gmtime( &t ); - QDateTime ret; - ret.setDate( QDate( broken->tm_year + 1900, broken->tm_mon +1, broken->tm_mday ) ); - ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); - return ret; - } - QDateTime utcTime( time_t t, const QString& zone) { - QCString org = ::getenv( "TZ" ); +QDateTime utcTime( time_t t ) +{ + tm * broken = ::gmtime( &t ); + QDateTime ret; + ret.setDate( QDate( broken->tm_year + 1900, broken->tm_mon + 1, broken->tm_mday ) ); + ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); + return ret; +} +QDateTime utcTime( time_t t, const QString& zone ) +{ + QCString org = ::getenv( "TZ" ); #ifndef Q_OS_MACX // Following line causes bus errors on Mac - ::setenv( "TZ", zone.latin1(), true ); - ::tzset(); - tm* broken = ::localtime( &t ); - ::setenv( "TZ", org, true ); + ::setenv( "TZ", zone.latin1(), true ); + ::tzset(); + + tm* broken = ::localtime( &t ); + ::setenv( "TZ", org, true ); #else #warning "Need a replacement for MacOSX!!" - tm* broken = ::localtime( &t ); + + tm* broken = ::localtime( &t ); #endif - QDateTime ret; - ret.setDate( QDate( broken->tm_year + 1900, broken->tm_mon +1, broken->tm_mday ) ); - ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); - - return ret; - } - time_t to_Time_t( const QDateTime& utc, const QString& str ) { - QDate d = utc.date(); - QTime t = utc.time(); - - tm broken; - broken.tm_year = d.year() - 1900; - broken.tm_mon = d.month() - 1; - broken.tm_mday = d.day(); - broken.tm_hour = t.hour(); - broken.tm_min = t.minute(); - broken.tm_sec = t.second(); - - QCString org = ::getenv( "TZ" ); + QDateTime ret; + ret.setDate( QDate( broken->tm_year + 1900, broken->tm_mon + 1, broken->tm_mday ) ); + ret.setTime( QTime( broken->tm_hour, broken->tm_min, broken->tm_sec ) ); + + return ret; +} +time_t to_Time_t( const QDateTime& utc, const QString& str ) +{ + QDate d = utc.date(); + QTime t = utc.time(); + + tm broken; + broken.tm_year = d.year() - 1900; + broken.tm_mon = d.month() - 1; + broken.tm_mday = d.day(); + broken.tm_hour = t.hour(); + broken.tm_min = t.minute(); + broken.tm_sec = t.second(); + + QCString org = ::getenv( "TZ" ); #ifndef Q_OS_MACX // Following line causes bus errors on Mac - ::setenv( "TZ", str.latin1(), true ); - ::tzset(); - time_t ti = ::mktime( &broken ); - ::setenv( "TZ", org, true ); + ::setenv( "TZ", str.latin1(), true ); + ::tzset(); + + time_t ti = ::mktime( &broken ); + ::setenv( "TZ", org, true ); #else #warning "Need a replacement for MacOSX!!" - time_t ti = ::mktime( &broken ); + + time_t ti = ::mktime( &broken ); #endif - return ti; - } -} -namespace Opie { -OTimeZone::OTimeZone( const ZoneName& zone ) - : m_name(zone) { + return ti; } -OTimeZone::~OTimeZone() { } -bool OTimeZone::isValid()const { +namespace Opie +{ +OTimeZone::OTimeZone( const ZoneName& zone ) + : m_name( zone ) +{} + + +OTimeZone::~OTimeZone() +{} + + +bool OTimeZone::isValid() const +{ return !m_name.isEmpty(); } @@ -104,42 +118,70 @@ bool OTimeZone::isValid()const { * we will get the current timezone * and ask it to convert to the timezone date */ -QDateTime OTimeZone::toLocalDateTime( const QDateTime& dt) { +QDateTime OTimeZone::toLocalDateTime( const QDateTime& dt ) +{ return OTimeZone::current().toDateTime( dt, *this ); } -QDateTime OTimeZone::toUTCDateTime( const QDateTime& dt ) { + + +QDateTime OTimeZone::toUTCDateTime( const QDateTime& dt ) +{ return OTimeZone::utc().toDateTime( dt, *this ); } -QDateTime OTimeZone::fromUTCDateTime( time_t t) { + + +QDateTime OTimeZone::fromUTCDateTime( time_t t ) +{ return utcTime( t ); } -QDateTime OTimeZone::toDateTime( time_t t) { + + +QDateTime OTimeZone::toDateTime( time_t t ) +{ return utcTime( t, m_name ); } + + /* * convert dt to utc using zone.m_name * convert utc -> timeZoneDT using this->m_name */ -QDateTime OTimeZone::toDateTime( const QDateTime& dt, const OTimeZone& zone ) { +QDateTime OTimeZone::toDateTime( const QDateTime& dt, const OTimeZone& zone ) +{ time_t utc = to_Time_t( dt, zone.m_name ); - qWarning("%d %s", utc, zone.m_name.latin1() ); + qWarning( "%d %s", utc, zone.m_name.latin1() ); return utcTime( utc, m_name ); } -time_t OTimeZone::fromDateTime( const QDateTime& time ) { + + +time_t OTimeZone::fromDateTime( const QDateTime& time ) +{ return to_Time_t( time, m_name ); } -time_t OTimeZone::fromUTCDateTime( const QDateTime& time ) { + + +time_t OTimeZone::fromUTCDateTime( const QDateTime& time ) +{ return to_Time_t( time, "UTC" ); } -OTimeZone OTimeZone::current() { - QCString str = ::getenv("TZ"); + + +OTimeZone OTimeZone::current() +{ + QCString str = ::getenv( "TZ" ); OTimeZone zone( str ); return zone; } -OTimeZone OTimeZone::utc() { - return OTimeZone("UTC"); + + +OTimeZone OTimeZone::utc() +{ + return OTimeZone( "UTC" ); } -QString OTimeZone::timeZone()const { + + +QString OTimeZone::timeZone() const +{ return m_name; } diff --git a/libopie2/opiepim/core/otimezone.h b/libopie2/opiepim/core/otimezone.h index 28ae6cb..f0b4022 100644 --- a/libopie2/opiepim/core/otimezone.h +++ b/libopie2/opiepim/core/otimezone.h @@ -27,12 +27,15 @@ Boston, MA 02111-1307, USA. */ -#ifndef OPIE_TIME_ZONE_H -#define OPIE_TIME_ZONE_H +#ifndef OTIMEZONE_H +#define OTIMEZONE_H -#include <time.h> +/* QT */ #include <qdatetime.h> +/* STD */ +#include <time.h> + namespace Opie { /** @@ -42,6 +45,7 @@ namespace Opie * and time_t */ class OTimeZone { + public: typedef QString ZoneName; OTimeZone( const ZoneName& = ZoneName::null ); @@ -91,7 +95,8 @@ class OTimeZone { static OTimeZone current(); static OTimeZone utc(); - QString timeZone()const; + QString timeZone() const; + private: ZoneName m_name; class Private; |