summaryrefslogtreecommitdiff
path: root/libopie
authorzecke <zecke>2002-11-02 12:36:34 (UTC)
committer zecke <zecke>2002-11-02 12:36:34 (UTC)
commitffd0a764e4ac7f9bf29edf3b9b4d341e153ecf4a (patch) (side-by-side diff)
tree601ac645a3768c1fe89fce01243f54a24f08dc15 /libopie
parent74f49994a9c19bdfdbfdfb57a5cf5e1a1f966b53 (diff)
downloadopie-ffd0a764e4ac7f9bf29edf3b9b4d341e153ecf4a.zip
opie-ffd0a764e4ac7f9bf29edf3b9b4d341e153ecf4a.tar.gz
opie-ffd0a764e4ac7f9bf29edf3b9b4d341e153ecf4a.tar.bz2
Fix a vCard problem in OContact
cell phones do not set the UId property... add some more states to otodo
Diffstat (limited to 'libopie') (more/less context) (show whitespace changes)
-rw-r--r--libopie/pim/ocontact.cpp11
-rw-r--r--libopie/pim/opimrecord.h0
-rw-r--r--libopie/pim/opimstate.cpp64
-rw-r--r--libopie/pim/opimstate.h44
-rw-r--r--libopie/pim/orecordlist.h0
-rw-r--r--libopie/pim/orecur.cpp9
-rw-r--r--libopie/pim/orecur.h2
-rw-r--r--libopie/pim/otodo.cpp23
-rw-r--r--libopie/pim/otodo.h27
9 files changed, 176 insertions, 4 deletions
diff --git a/libopie/pim/ocontact.cpp b/libopie/pim/ocontact.cpp
index acd65c4..cd238ef 100644
--- a/libopie/pim/ocontact.cpp
+++ b/libopie/pim/ocontact.cpp
@@ -1463,9 +1463,18 @@ QValueList<OContact> OContact::readVCard( const QString &filename )
QValueList<OContact> contacts;
while ( obj ) {
- contacts.append( parseVObject( obj ) );
+ OContact con = parseVObject( obj );
+ /*
+ * if uid is 0 assign a new one
+ * this at least happens on
+ * Nokia6210
+ */
+ if ( con.uid() == 0 )
+ con.setUid( 1 );
+
+ contacts.append(con );
VObject *t = obj;
obj = nextVObjectInList(obj);
cleanVObject( t );
diff --git a/libopie/pim/opimrecord.h b/libopie/pim/opimrecord.h
index dbb94ed..d9ccad4 100644
--- a/libopie/pim/opimrecord.h
+++ b/libopie/pim/opimrecord.h
diff --git a/libopie/pim/opimstate.cpp b/libopie/pim/opimstate.cpp
new file mode 100644
index 0000000..6fb2feb
--- a/dev/null
+++ b/libopie/pim/opimstate.cpp
@@ -0,0 +1,64 @@
+#include <qshared.h>
+
+#include "opimstate.h"
+
+/*
+ * for one int this does not make
+ * much sense but never the less
+ * we will do it for the future
+ */
+struct OPimState::Data : public QShared {
+ Data() : QShared(),state(Undefined) {
+ }
+ int state;
+};
+
+OPimState::OPimState( int state ) {
+ data = new Data;
+ data->state = state;
+}
+OPimState::OPimState( const OPimState& st) :
+ data( st.data ) {
+ /* ref up */
+ data->ref();
+}
+OPimState::~OPimState() {
+ if ( data->deref() ) {
+ delete data ;
+ data = 0;
+ }
+}
+bool OPimState::operator==( const OPimState& st) {
+ if ( data->state == st.data->state ) return true;
+
+ return false;
+}
+OPimState &OPimState::operator=( const OPimState& st) {
+ st.data->ref();
+ deref();
+ data = st.data;
+
+ return *this;
+}
+void OPimState::setState( int st) {
+ copyInternally();
+ data->state = st;
+}
+int OPimState::state()const {
+ return data->state;
+}
+void OPimState::deref() {
+ if ( data->deref() ) {
+ delete data;
+ data = 0l;
+ }
+}
+void OPimState::copyInternally() {
+ /* we need to change it */
+ if ( data->count != 1 ) {
+ data->deref();
+ Data* d2 = new Data;
+ d2->state = data->state;
+ data = d2;
+ }
+}
diff --git a/libopie/pim/opimstate.h b/libopie/pim/opimstate.h
new file mode 100644
index 0000000..731181e
--- a/dev/null
+++ b/libopie/pim/opimstate.h
@@ -0,0 +1,44 @@
+#ifndef OPIE_PIM_STATE_H
+#define OPIE_PIM_STATE_H
+
+#include <qstring.h>
+
+/**
+ * The State of a Task
+ * This class encapsules the state of a todo
+ * and it's shared too
+ */
+/*
+ * in c a simple struct would be enough ;)
+ * g_new_state();
+ * g_do_some_thing( state_t* );
+ * ;)
+ */
+class OPimState {
+public:
+ enum State {
+ Started = 0,
+ Postponed,
+ Finished,
+ NotStarted,
+ Undefined
+ };
+ OPimState( int state = Undefined );
+ OPimState( const OPimState& );
+ ~OPimState();
+
+ bool operator==( const OPimState& );
+ OPimState &operator=( const OPimState& );
+ void setState( int state);
+ int state()const;
+private:
+ void deref();
+ inline void copyInternally();
+ struct Data;
+ Data* data;
+ class Private;
+ Private *d;
+};
+
+
+#endif
diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h
index 2f4a5d3..8ed41e2 100644
--- a/libopie/pim/orecordlist.h
+++ b/libopie/pim/orecordlist.h
diff --git a/libopie/pim/orecur.cpp b/libopie/pim/orecur.cpp
index 6c81f8f..257d4fd 100644
--- a/libopie/pim/orecur.cpp
+++ b/libopie/pim/orecur.cpp
@@ -20,8 +20,9 @@ struct ORecur::Data : public QShared {
int pos;
bool hasEnd : 1;
time_t end;
time_t create;
+ int rep;
};
ORecur::ORecur() {
@@ -77,8 +78,11 @@ time_t ORecur::endDateUTC()const {
}
time_t ORecur::createTime()const {
return data->create;
}
+int ORecur::repetition()const {
+ return data->rep;
+}
void ORecur::setType( const RepeatType& z) {
checkOrModify();
data->type = z;
}
@@ -109,8 +113,12 @@ void ORecur::setCreateTime( time_t t) {
void ORecur::setHasEndDate( bool b) {
checkOrModify();
data->hasEnd = b;
}
+void ORecur::setRepitition( int rep ) {
+ checkOrModify();
+ data->rep = rep;
+}
void ORecur::checkOrModify() {
if ( data->count != 1 ) {
data->deref();
Data* d2 = new Data;
@@ -120,8 +128,9 @@ void ORecur::checkOrModify() {
d2->pos = data->pos;
d2->hasEnd = data->hasEnd;
d2->end = data->end;
d2->create = data->create;
+ d2->rep = data->rep;
data = d2;
}
}
diff --git a/libopie/pim/orecur.h b/libopie/pim/orecur.h
index 89258f8..d24d72d 100644
--- a/libopie/pim/orecur.h
+++ b/libopie/pim/orecur.h
@@ -30,8 +30,9 @@ public:
bool hasEndDate()const;
QDate endDate()const;
time_t endDateUTC()const;
time_t createTime()const;
+ int repetition()const;
void setType( const RepeatType& );
void setFrequency( int freq );
void setPosition( int pos );
@@ -39,8 +40,9 @@ public:
void setEndDate( const QDate& dt );
void setEndDateUTC( time_t );
void setCreateTime( time_t );
void setHasEndDate( bool b );
+ void setRepitition(int );
private:
void deref();
inline void checkOrModify();
diff --git a/libopie/pim/otodo.cpp b/libopie/pim/otodo.cpp
index 765d5a9..0d5b1d3 100644
--- a/libopie/pim/otodo.cpp
+++ b/libopie/pim/otodo.cpp
@@ -11,9 +11,10 @@
#include <qpe/categories.h>
#include <qpe/categoryselect.h>
-
+#include "opimstate.h"
+#include "orecur.h"
#include "otodo.h"
struct OTodo::OTodoData : public QShared {
@@ -29,8 +30,10 @@ struct OTodo::OTodoData : public QShared {
QMap<QString, QString> extra;
ushort prog;
bool hasAlarmDateTime :1;
QDateTime alarmDateTime;
+ OPimState state;
+ ORecur recur;
};
OTodo::OTodo(const OTodo &event )
: OPimRecord( event ), data( event.data )
@@ -143,8 +146,14 @@ QDateTime OTodo::alarmDateTime() const
QString OTodo::description()const
{
return data->desc;
}
+OPimState OTodo::state()const {
+ return data->state;
+}
+ORecur OTodo::recurrence()const {
+ return data->recur;
+}
void OTodo::setCompleted( bool completed )
{
changeOrModify();
data->isCompleted = completed;
@@ -184,8 +193,16 @@ void OTodo::setAlarmDateTime( const QDateTime& alarm )
{
changeOrModify();
data->alarmDateTime = alarm;
}
+void OTodo::setState( const OPimState& state ) {
+ changeOrModify();
+ data->state = state;
+}
+void OTodo::setRecurrence( const ORecur& rec) {
+ changeOrModify();
+ data->recur = rec;
+}
bool OTodo::isOverdue( )
{
if( data->hasDate && !data->isCompleted)
return QDate::currentDate() > data->date;
@@ -357,9 +374,9 @@ QMap<QString, QString> OTodo::toExtraMap()const {
* right in place
*/
void OTodo::changeOrModify() {
if ( data->count != 1 ) {
-// qWarning("changeOrModify");
+ qWarning("changeOrModify");
data->deref();
OTodoData* d2 = new OTodoData();
copy(data, d2 );
data = d2;
@@ -375,8 +392,10 @@ void OTodo::copy( OTodoData* src, OTodoData* dest ) {
dest->extra = src->extra;
dest->prog = src->prog;
dest->hasAlarmDateTime = src->hasAlarmDateTime;
dest->alarmDateTime = src->alarmDateTime;
+ dest->state = src->state;
+ dest->recur = src->recur;
}
QString OTodo::type() const {
return QString::fromLatin1("OTodo");
}
diff --git a/libopie/pim/otodo.h b/libopie/pim/otodo.h
index 5bd91d6..2cdc587 100644
--- a/libopie/pim/otodo.h
+++ b/libopie/pim/otodo.h
@@ -15,8 +15,10 @@
#include <opie/opimrecord.h>
+class OPimState;
+class ORecur;
class OTodo : public OPimRecord {
public:
typedef QValueList<OTodo> ValueList;
enum RecordFields {
@@ -32,9 +34,14 @@ public:
DateYear,
Progress,
CrossReference,
HasAlarmDateTime,
- AlarmDateTime
+ AlarmDateTime,
+ State,
+ Recurrance,
+ Alarms,
+ Reminders,
+ Notifiers
};
public:
// priorities from Very low to very high
enum TaskPriority { VeryHigh=1, High, Normal, Low, VeryLow };
@@ -110,8 +117,18 @@ public:
*/
QDateTime alarmDateTime()const;
/**
+ * What is the state of this OTodo?
+ */
+ OPimState state()const;
+
+ /**
+ * the recurrance of this
+ */
+ ORecur recurrence()const;
+
+ /**
* The description of the todo
*/
QString description()const;
@@ -169,15 +186,23 @@ public:
* set the end date
*/
void setDueDate( QDate date );
+
+ void setRecurrence( const ORecur& );
/**
* set the alarm time
*/
void setAlarmDateTime ( const QDateTime& alarm );
void setDescription(const QString& );
void setSummary(const QString& );
+
+ /**
+ * set the state of a Todo
+ * @param state State what the todo should take
+ */
+ void setState( const OPimState& state);
bool isOverdue();
bool match( const QRegExp &r )const;