summaryrefslogtreecommitdiffstats
path: root/libkpimexchange/core/README.download
diff options
context:
space:
mode:
Diffstat (limited to 'libkpimexchange/core/README.download')
-rw-r--r--libkpimexchange/core/README.download63
1 files changed, 63 insertions, 0 deletions
diff --git a/libkpimexchange/core/README.download b/libkpimexchange/core/README.download
new file mode 100644
index 000000000..07540db85
--- /dev/null
+++ b/libkpimexchange/core/README.download
@@ -0,0 +1,63 @@
+$Id$
+This document describes what happens during the download of
+appointments from an exchange server in exchangedownload.cpp.
+Error handling, user interface ignored for clarity
+
+Author: Jan-Pascal van Best, janpascal@vanbest.org
+
+NOTES:
+- You can only use an ExchangeDownload object for a single download
+ It uses internal state member variables and such.
+
+DATA STRUCTURES:
+QMap<QString,int> m_uids is in fact a set of known uids telling us
+whether we're already busy or finished reading the Master event
+for this UID. The map contains the UID as key, with a value of 1,
+if UID is either being or finished downloading.
+
+QMap<QString,DwString *> m_transferJobs maps URLs being downloaded
+to strings of data already received. A URL is removed from the map
+if all data has been received
+
+METHODS:
+download()
+- Provides authentication info to the KDE authentication service
+- Creates an SQL query using dateSelectQuery()
+- Starts a SEARCH job, connects the result() signal
+ to the slotSearchResult() slot
+
+slotSearchResult()
+- Calls handleAppointments() with recurrence enabled
+
+handleAppointments()
+- Examines all events returned by the SEARCH
+- If recurrence is enabled, for Master, Instance or Exception events,
+ and if we havent't handled this particular UID yet, call
+ handleRecurrence() with the UID of the event
+- If recurrence is disabled, or for Single events, start a TransferJob.
+ Connect the data() signal to the slotData() slot and the result()
+ signal to the slotTransferResult() slot.
+- Note that this method may start many new jobs for transferring
+ appointments and for finding recurrent events!
+
+handleRecurrence()
+- Start a new SEARCH job, looking for the Master event of the UID
+- Connect the result() signal to the slotMasterResult() slot
+
+slotMasterResult()
+- Call handleAppointment() with recurrence disabled
+
+slotData()
+- If the URL of the data we're receiving is already in m_transferJobs,
+ append the data to the string related to this URL. Else, create a new
+ string, and place a new URL,string pair in m_transferJobs
+
+slotTransferResult()
+- Parse the data received for this URL as a MIME message
+- call handlePart() for every MIME part in the message
+- Remove the URL from m_transferJobs and free the string
+
+handlePart()
+- If this is a text/calendar part, read iCalendar data from the part and
+ insert it into the calendar.
+