1 /*
2     This file is part of the kolab resource - the implementation of the
3     Kolab storage format. See www.kolab.org for documentation on this.
4 
5     SPDX-FileCopyrightText: 2004 Bo Thorsen <bo@sonofthor.dk>
6 
7     SPDX-License-Identifier: LGPL-2.0-or-later
8 */
9 
10 #pragma once
11 
12 #include <KCalendarCore/Incidence>
13 
14 #include <QColor>
15 #include <QDateTime>
16 #include <QTimeZone>
17 #include <qdom.h>
18 
19 namespace KContacts
20 {
21 class Addressee;
22 class ContactGroup;
23 }
24 
25 namespace KolabV2
26 {
27 class KolabBase
28 {
29 public:
30     struct Email {
31     public:
32         Email(const QString &name = QString(), const QString &email = QString())
displayNameEmail33             : displayName(name)
34             , smtpAddress(email)
35         {
36         }
37 
38         QString displayName;
39         QString smtpAddress;
40     };
41 
42     enum Sensitivity {
43         Public = 0,
44         Private = 1,
45         Confidential = 2,
46     };
47 
48     explicit KolabBase(const QString &time_zone = QString());
49     virtual ~KolabBase();
50 
51     // Return a string identifying this type
52     virtual QString type() const = 0;
53 
54     virtual void setUid(const QString &uid);
55     virtual QString uid() const;
56 
57     virtual void setBody(const QString &body);
58     virtual QString body() const;
59 
60     virtual void setCategories(const QString &categories);
61     virtual QString categories() const;
62 
63     virtual void setCreationDate(const QDateTime &date);
64     virtual QDateTime creationDate() const;
65 
66     virtual void setLastModified(const QDateTime &date);
67     virtual QDateTime lastModified() const;
68 
69     virtual void setSensitivity(Sensitivity sensitivity);
70     virtual Sensitivity sensitivity() const;
71 
72     virtual void setPilotSyncId(unsigned long id);
73     virtual bool hasPilotSyncId() const;
74     virtual unsigned long pilotSyncId() const;
75 
76     virtual void setPilotSyncStatus(int status);
77     virtual bool hasPilotSyncStatus() const;
78     virtual int pilotSyncStatus() const;
79 
80     // String - Date conversion methods
81     static QString dateTimeToString(const QDateTime &time);
82     static QString dateToString(QDate date);
83     static QDateTime stringToDateTime(const QString &time);
84     static QDate stringToDate(const QString &date);
85 
86     // String - Sensitivity conversion methods
87     static QString sensitivityToString(Sensitivity);
88     static Sensitivity stringToSensitivity(const QString &);
89 
90     // String - Color conversion methods
91     static QString colorToString(const QColor &);
92     static QColor stringToColor(const QString &);
93 
94     // Load this object by reading the XML file
95     bool load(const QString &xml);
96     static QDomDocument loadDocument(const QString &xmlData);
97 
98     // Load this QDomDocument
99     virtual bool loadXML(const QDomDocument &xml) = 0;
100 
101     // Serialize this object to an XML string
102     virtual QString saveXML() const = 0;
103 
104 protected:
105     /// Read all known fields from this ical incidence
106     void setFields(const KCalendarCore::Incidence::Ptr &);
107 
108     /// Save all known fields into this ical incidence
109     void saveTo(const KCalendarCore::Incidence::Ptr &) const;
110 
111     /// Read all known fields from this contact
112     void setFields(const KContacts::Addressee *);
113 
114     /// Save all known fields into this contact
115     void saveTo(KContacts::Addressee *) const;
116 
117     /// Read all known fields from this contact group
118     void setFields(const KContacts::ContactGroup *);
119 
120     /// Save all known fields into this contact group
121     void saveTo(KContacts::ContactGroup *) const;
122 
123     // This just makes the initial dom tree with version and doctype
124     static QDomDocument domTree();
125 
126     bool loadEmailAttribute(QDomElement &element, Email &email);
127 
128     void saveEmailAttribute(QDomElement &element, const Email &email, const QString &tagName = QStringLiteral("email")) const;
129 
130     // Load the attributes of this class
131     virtual bool loadAttribute(QDomElement &);
132 
133     // Save the attributes of this class
134     virtual bool saveAttributes(QDomElement &) const;
135 
136     // Return the product ID
137     virtual QString productID() const = 0;
138 
139     // Write a string tag
140     static void writeString(QDomElement &, const QString &, const QString &);
141 
142     QDateTime localToUTC(const QDateTime &time) const;
143     QDateTime utcToLocal(const QDateTime &time) const;
144 
145     QString mUid;
146     QString mBody;
147     QString mCategories;
148     QDateTime mCreationDate;
149     QDateTime mLastModified;
150     Sensitivity mSensitivity;
151     QTimeZone mTimeZone;
152 
153     // KPilot synchronization stuff
154     bool mHasPilotSyncId, mHasPilotSyncStatus;
155     unsigned long mPilotSyncId;
156     int mPilotSyncStatus;
157 };
158 }
159 
160