1 /*
2 SPDX-FileCopyrightText: 2015-2019 Krzysztof Nowicki <krissn@op.pl>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #pragma once
8
9 class QString;
10 #include <QVector>
11
12 extern const QString soapEnvNsUri;
13 extern const QString ewsMsgNsUri;
14 extern const QString ewsTypeNsUri;
15
16 typedef enum {
17 EwsFolderTypeMail = 0,
18 EwsFolderTypeCalendar,
19 EwsFolderTypeContacts,
20 EwsFolderTypeSearch,
21 EwsFolderTypeTasks,
22 EwsFolderTypeUnknown,
23 } EwsFolderType;
24
25 typedef enum {
26 EwsResponseSuccess = 0,
27 EwsResponseWarning,
28 EwsResponseError,
29 EwsResponseParseError, // Internal - never returned by an Exchange server
30 EwsResponseUnknown // Internal - never returned by an Exchange server
31 } EwsResponseClass;
32
33 typedef enum {
34 EwsDIdCalendar = 0,
35 EwsDIdContacts,
36 EwsDIdDeletedItems,
37 EwsDIdDrafts,
38 EwsDIdInbox,
39 EwsDIdJournal,
40 EwsDIdNotes,
41 EwsDIdOutbox,
42 EwsDIdSentItems,
43 EwsDIdTasks,
44 EwsDIdMsgFolderRoot,
45 EwsDIdRoot,
46 EwsDIdJunkEmail,
47 EwsDIdSearchFolders,
48 EwsDIdVoiceMail,
49 EwsDIdRecoverableItemsRoot,
50 EwsDIdRecoverableItemsDeletions,
51 EwsDIdRecoverableItemsVersions,
52 EwsDIdRecoverableItemsPurges,
53 EwsDIdArchiveRoot,
54 EwsDIdArchiveMsgFolderRoot,
55 EwsDIdArchiveDeletedItems,
56 EwsDIdArchiveRecoverableItemsRoot,
57 EwsDIdArchiveRecoverableItemsDeletions,
58 EwsDIdArchiveRecoverableItemsVersions,
59 EwsDIdArchiveRecoverableItemsPurges
60 } EwsDistinguishedId;
61
62 typedef enum { EwsShapeIdOnly = 0, EwsShapeDefault, EwsShapeAllProperties } EwsBaseShape;
63
64 typedef enum {
65 EwsPropSetMeeting = 0,
66 EwsPropSetAppointment,
67 EwsPropSetCommon,
68 EwsPropSetPublicStrings,
69 EwsPropSetAddress,
70 EwsPropSetInternetHeaders,
71 EwsPropSetCalendarAssistant,
72 EwsPropSetUnifiedMessaging
73 } EwsDistinguishedPropSetId;
74
75 typedef enum {
76 EwsPropTypeApplicationTime = 0,
77 EwsPropTypeApplicationTimeArray,
78 EwsPropTypeBinary,
79 EwsPropTypeBinaryArray,
80 EwsPropTypeBoolean,
81 EwsPropTypeCLSID,
82 EwsPropTypeCLSIDArray,
83 EwsPropTypeCurrency,
84 EwsPropTypeCurrencyArray,
85 EwsPropTypeDouble,
86 EwsPropTypeDoubleArray,
87 EwsPropTypeError,
88 EwsPropTypeFloat,
89 EwsPropTypeFloatArray,
90 EwsPropTypeInteger,
91 EwsPropTypeTntegerArray,
92 EwsPropTypeLong,
93 EwsPropTypeLongArray,
94 EwsPropTypeNull,
95 EwsPropTypeObject,
96 EwsPropTypeObjectArray,
97 EwsPropTypeShort,
98 EwsPropTypeShortArray,
99 EwsPropTypeSystemTime,
100 EwsPropTypeSystemTimeArray,
101 EwsPropTypeString,
102 EwsPropTypeStringArray
103 } EwsPropertyType;
104
105 typedef enum { EwsTraversalShallow = 0, EwsTraversalDeep, EwsTraversalSoftDeleted, EwsTraversalAssociated } EwsTraversalType;
106
107 typedef enum {
108 EwsItemTypeItem = 0,
109 EwsItemTypeMessage,
110 EwsItemTypeCalendarItem,
111 EwsItemTypeContact,
112 EwsItemTypeDistributionList,
113 EwsItemTypeMeetingMessage,
114 EwsItemTypeMeetingRequest,
115 EwsItemTypeMeetingResponse,
116 EwsItemTypeMeetingCancellation,
117 EwsItemTypeTask,
118 EwsItemTypeAbchPerson,
119 EwsItemTypePostItem,
120 EwsItemTypeUnknown
121 } EwsItemType;
122
123 typedef enum { EwsItemSensitivityNormal, EwsItemSensitivityPersonal, EwsItemSensitivityPrivate, EwsItemSensitivityConfidential } EwsItemSensitivity;
124
125 /**
126 * @brief List of fields in EWS Item and its descendants
127 *
128 * The list is based on the XSD schema and contains duplicates, which were commented out.
129 */
130 typedef enum {
131 // Folder
132 EwsFolderFieldFolderId,
133 EwsFolderFieldParentFolderId,
134 EwsFolderFieldFolderClass,
135 EwsFolderFieldDisplayName,
136 EwsFolderFieldTotalCount,
137 EwsFolderFieldChildFolderCount,
138 EwsFolderFieldManagedFolderInformation,
139 EwsFolderFieldEffectiveRights,
140 // Calendar folder
141 EwsFolderFieldPermissionSet,
142 // Contacts folder
143 // EwsFolderFieldPermissionSet, DUPLICATE
144 // Mail folder
145 EwsFolderFieldUnreadCount,
146 // EwsFolderFieldPermissionSet, DUPLICATE
147 // Search folder
148 // EwsFolderFieldUnreadCount, DUPLICATE
149 EwsFolderFieldSearchParameters,
150 // Tasks folder
151 // EwsFolderFieldUnreadCount, DUPLICATE
152
153 // Item
154 EwsItemFieldMimeContent,
155 EwsItemFieldItemId,
156 EwsItemFieldParentFolderId,
157 EwsItemFieldItemClass,
158 EwsItemFieldSubject,
159 EwsItemFieldSensitivity,
160 EwsItemFieldBody,
161 EwsItemFieldAttachments,
162 EwsItemFieldDateTimeReceived,
163 EwsItemFieldSize,
164 EwsItemFieldCategories,
165 EwsItemFieldImportance,
166 EwsItemFieldInReplyTo,
167 EwsItemFieldIsSubmitted,
168 EwsItemFieldIsDraft,
169 EwsItemFieldIsFromMe,
170 EwsItemFieldIsResend,
171 EwsItemFieldIsUnmodified,
172 EwsItemFieldInternetMessageHeaders,
173 EwsItemFieldDateTimeSent,
174 EwsItemFieldDateTimeCreated,
175 EwsItemFieldResponseObjects,
176 EwsItemFieldReminderDueBy,
177 EwsItemFieldReminderIsSet,
178 EwsItemFieldReminderMinutesBeforeStart,
179 EwsItemFieldDisplayCc,
180 EwsItemFieldDisplayTo,
181 EwsItemFieldHasAttachments,
182 EwsItemFieldCulture,
183 EwsItemFieldEffectiveRights,
184 EwsItemFieldLastModifiedName,
185 EwsItemFieldLastModifiedTime,
186 EwsItemFieldIsAssociated,
187 EwsItemFieldWebClientReadFormQueryString,
188 EwsItemFieldWebClientEditFormQueryString,
189 EwsItemFieldConversationId,
190 EwsItemFieldUniqueBody,
191 EwsItemFieldFlag,
192 EwsItemFieldStoreEntryId,
193 EwsItemFieldInstanceKey,
194 EwsItemFieldNormalizedBody,
195 EwsItemFieldEntityExtractionResult,
196 EwsItemFieldPolicyTag,
197 EwsItemFieldArchiveTag,
198 EwsItemFieldRetentionDate,
199 EwsItemFieldPreview,
200 EwsItemFieldRightsManagementLicenseData,
201 EwsItemFieldPredictedActionReasons,
202 EwsItemFieldIsClutter,
203 EwsItemFieldBlockStatus,
204 EwsItemFieldHasBlockedImages,
205 EwsItemFieldTextBody,
206 EwsItemFieldIconIndex,
207 EwsItemFieldSearchKey,
208 EwsItemFieldSortKey,
209 EwsItemFieldHashtags,
210 EwsItemFieldMentions,
211 EwsItemFieldMentionedMe,
212 EwsItemFieldMentionsPreview,
213 EwsItemFieldMentionsEx,
214 EwsItemFieldAppliedHashtags,
215 EwsItemFieldAppliedHashtagsPreview,
216 EwsItemFieldLikes,
217 EwsItemFieldLikesPreview,
218 EwsItemFieldPendingSocialActivityTagIds,
219 EwsItemFieldAtAllMention,
220 EwsItemFieldCanDelete,
221 EwsItemFieldInferenceClassification,
222 // Message
223 EwsItemFieldSender,
224 EwsItemFieldToRecipients,
225 EwsItemFieldCcRecipients,
226 EwsItemFieldBccRecipients,
227 EwsItemFieldIsReadReceiptRequested,
228 EwsItemFieldIsDeliveryReceiptRequested,
229 EwsItemFieldConversationIndex,
230 EwsItemFieldConversationTopic,
231 EwsItemFieldFrom,
232 EwsItemFieldInternetMessageId,
233 EwsItemFieldIsRead,
234 EwsItemFieldIsResponseRequested,
235 EwsItemFieldReferences,
236 EwsItemFieldReplyTo,
237 EwsItemFieldReceivedBy,
238 EwsItemFieldReceivedRepresenting,
239 // Task
240 EwsItemFieldActualWork,
241 EwsItemFieldAssignedTime,
242 EwsItemFieldBillingInformation,
243 EwsItemFieldChangeCount,
244 EwsItemFieldCompanies,
245 EwsItemFieldCompleteDate,
246 EwsItemFieldContacts,
247 EwsItemFieldDelegationState,
248 EwsItemFieldDelegator,
249 EwsItemFieldDueDate,
250 EwsItemFieldIsAssignmentEditable,
251 EwsItemFieldIsComplete,
252 EwsItemFieldIsRecurring,
253 EwsItemFieldIsTeamTask,
254 EwsItemFieldMileage,
255 EwsItemFieldOwner,
256 EwsItemFieldPercentComplete,
257 EwsItemFieldRecurrence,
258 EwsItemFieldStartDate,
259 EwsItemFieldStatus,
260 EwsItemFieldStatusDescription,
261 EwsItemFieldTotalWork,
262 // Calendar
263 EwsItemFieldUID,
264 EwsItemFieldRecurrenceId,
265 EwsItemFieldDateTimeStamp,
266 EwsItemFieldStart,
267 EwsItemFieldEnd,
268 EwsItemFieldOriginalStart,
269 EwsItemFieldIsAllDayEvent,
270 EwsItemFieldLegacyFreeBusyStatus,
271 EwsItemFieldLocation,
272 EwsItemFieldWhen,
273 EwsItemFieldIsMeeting,
274 EwsItemFieldIsCancelled,
275 // EwsItemFieldIsRecurring, DUPLICATE
276 EwsItemFieldMeetingRequestWasSent,
277 // EwsItemFieldIsResponseRequested, DUPLICATE
278 EwsItemFieldCalendarItemType,
279 EwsItemFieldMyResponseType,
280 EwsItemFieldOrganizer,
281 EwsItemFieldRequiredAttendees,
282 EwsItemFieldOptionalAttendees,
283 EwsItemFieldResources,
284 EwsItemFieldConflictingMeetingCount,
285 EwsItemFieldAdjacentMeetingCount,
286 EwsItemFieldConflictingMeetings,
287 EwsItemFieldAdjacentMeetings,
288 EwsItemFieldDuration,
289 EwsItemFieldTimeZone,
290 EwsItemFieldStartTimeZone,
291 EwsItemFieldEndTimeZone,
292 EwsItemFieldAppointmentReplyTime,
293 EwsItemFieldAppointmentSequenceNumber,
294 EwsItemFieldAppointmentState,
295 // EwsItemFieldRecurrence, DUPLICATE
296 EwsItemFieldFirstOccurrence,
297 EwsItemFieldLastOccurrence,
298 EwsItemFieldModifiedOccurrences,
299 EwsItemFieldDeletedOccurrences,
300 EwsItemFieldMeetingTimeZone,
301 EwsItemFieldConferenceType,
302 EwsItemFieldAllowNewTimeProposal,
303 EwsItemFieldIsOnlineMeeting,
304 EwsItemFieldMeetingWorkspaceUrl,
305 EwsItemFieldNetShowUrl,
306 EwsItemFieldEnhancedLocation,
307 EwsItemFieldStartWallClock,
308 EwsItemFieldEndWallClock,
309 EwsItemFieldStartTimeZoneId,
310 EwsItemFieldEndTimeZoneId,
311 EwsItemFieldIntendedFreeBusyStatus,
312 EwsItemFieldJoinOnlineMeetingUrl,
313 EwsItemFieldOnlineMeetingSettings,
314 EwsItemFieldIsOrganizer,
315 EwsItemFieldCalendarActivityData,
316 EwsItemFieldDoNotForwardMeeting,
317 // MeetingMessage
318 EwsItemFieldAssociatedCalendarItemId,
319 EwsItemFieldIsDelegated,
320 EwsItemFieldIsOutOfDate,
321 EwsItemFieldHasBeenProcessed,
322 EwsItemFieldResponseType,
323 // EwsItemFieldUID, DUPLICATE
324 // EwsItemFieldRecurrenceId, DUPLICATE
325 // EwsItemFieldDateTimeStamp, DUPLICATE
326 // MeetingRequestMessage
327 EwsItemFieldMeetingRequestType,
328 // EwsItemFieldIntendedFreeBusyStatus, DUPLICATE
329 // EwsItemFieldStart, DUPLICATE
330 // EwsItemFieldEnd, DUPLICATE
331 // EwsItemFieldOriginalStart, DUPLICATE
332 // EwsItemFieldIsAllDayEvent, DUPLICATE
333 // EwsItemFieldLegacyFreeBusyStatus, DUPLICATE
334 // EwsItemFieldLocation, DUPLICATE
335 // EwsItemFieldWhen, DUPLICATE
336 // EwsItemFieldIsMeeting, DUPLICATE
337 // EwsItemFieldIsCancelled, DUPLICATE
338 // EwsItemFieldIsRecurring, DUPLICATE
339 // EwsItemFieldMeetingRequestWasSent, DUPLICATE
340 // EwsItemFieldCalendarItemType, DUPLICATE
341 // EwsItemFieldMyResponseType, DUPLICATE
342 // EwsItemFieldOrganizer, DUPLICATE
343 // EwsItemFieldRequiredAttendees, DUPLICATE
344 // EwsItemFieldOptionalAttendees, DUPLICATE
345 // EwsItemFieldResources, DUPLICATE
346 // EwsItemFieldConflictingMeetingCount, DUPLICATE
347 // EwsItemFieldAdjacentMeetingCount, DUPLICATE
348 // EwsItemFieldConflictingMeetings, DUPLICATE
349 // EwsItemFieldAdjacentMeetings, DUPLICATE
350 // EwsItemFieldDuration, DUPLICATE
351 // EwsItemFieldTimeZone, DUPLICATE
352 // EwsItemFieldAppointmentReplyTime, DUPLICATE
353 // EwsItemFieldAppointmentSequenceNumber,DUPLICATE
354 // EwsItemFieldAppointmentState, DUPLICATE
355 // EwsItemFieldRecurrence, DUPLICATE
356 // EwsItemFieldFirstOccurrence, DUPLICATE
357 // EwsItemFieldLastOccurrence, DUPLICATE
358 // EwsItemFieldModifiedOccurrences, DUPLICATE
359 // EwsItemFieldDeletedOccurrences, DUPLICATE
360 // EwsItemFieldMeetingTimeZone, DUPLICATE
361 // EwsItemFieldConferenceType, DUPLICATE
362 // EwsItemFieldAllowNewTimeProposal, DUPLICATE
363 // EwsItemFieldIsOnlineMeeting, DUPLICATE
364 // EwsItemFieldMeetingWorkspaceUrl, DUPLICATE
365 // EwsItemFieldNetShowUrl, DUPLICATE
366 // Contact
367 EwsItemFieldFileAs,
368 EwsItemFieldFileAsMapping,
369 EwsItemFieldDisplayName,
370 EwsItemFieldGivenName,
371 EwsItemFieldInitials,
372 EwsItemFieldMiddleName,
373 EwsItemFieldNickname,
374 EwsItemFieldCompleteName,
375 EwsItemFieldCompanyName,
376 EwsItemFieldEmailAddresses,
377 EwsItemFieldPhysicalAddresses,
378 EwsItemFieldPhoneNumbers,
379 EwsItemFieldAssistantName,
380 EwsItemFieldBirthday,
381 EwsItemFieldBusinessHomePage,
382 EwsItemFieldChildren,
383 // EwsItemFieldCompanies, DUPLICATE
384 EwsItemFieldContactSource,
385 EwsItemFieldDepartment,
386 EwsItemFieldGeneration,
387 EwsItemFieldImAddresses,
388 EwsItemFieldJobTitle,
389 EwsItemFieldManager,
390 // EwsItemFieldMileage, DUPLICATE
391 EwsItemFieldOfficeLocation,
392 EwsItemFieldPostalAddressIndex,
393 EwsItemFieldProfession,
394 EwsItemFieldSpouseName,
395 EwsItemFieldSurname,
396 EwsItemFieldWeddingAnniversary,
397 // DistributionList
398 // EwsItemFieldDisplayName, DUPLICATE
399 // EwsItemFieldFileAs, DUPLICATE
400 // EwsItemFieldContactSource, DUPLICATE
401 // Additional fields not in EWS specification
402 EwsItemFieldBodyIsHtml,
403 EwsItemFieldExtendedProperties,
404 EwsItemFieldExchangePersonIdGuid,
405 } EwsItemFields;
406
407 typedef enum { EwsItemImportanceLow, EwsItemImportanceNormal, EwsItemImportanceHigh } EwsItemImportance;
408
409 typedef enum { EwsBasePointBeginning, EwsBasePointEnd } EwsIndexedViewBasePoint;
410
411 typedef enum { EwsCalendarItemSingle = 0, EwsCalendarItemOccurrence, EwsCalendarItemException, EwsCalendarItemRecurringMaster } EwsCalendarItemType;
412
413 typedef enum {
414 EwsEventResponseUnknown = 0,
415 EwsEventResponseOrganizer,
416 EwsEventResponseTentative,
417 EwsEventResponseAccept,
418 EwsEventResponseDecline,
419 EwsEventResponseNotReceived
420 } EwsEventResponseType;
421
422 typedef enum { EwsLfbStatusFree = 0, EwsLfbStatusTentative, EwsLfbStatusBusy, EwsLfbOutOfOffice, EwsLfbNoData } EwsLegacyFreeBusyStatus;
423
424 typedef enum {
425 EwsDispSaveOnly = 0,
426 EwsDispSendOnly,
427 EwsDispSendAndSaveCopy,
428 } EwsMessageDisposition;
429
430 typedef enum {
431 EwsResolNeverOverwrite = 0,
432 EwsResolAutoResolve,
433 EwsResolAlwaysOverwrite,
434 } EwsConflictResolution;
435
436 typedef enum {
437 EwsMeetingDispSendToNone = 0,
438 EwsMeetingDispSendOnlyToAll,
439 EwsMeetingDispSendOnlyToChanged,
440 EwsMeetingDispSendToAllAndSaveCopy,
441 EwsMeetingDispSendToChangedAndSaveCopy,
442 EwsMeetingDispUnspecified
443 } EwsMeetingDisposition;
444
445 typedef enum {
446 EwsCopiedEvent = 0,
447 EwsCreatedEvent,
448 EwsDeletedEvent,
449 EwsModifiedEvent,
450 EwsMovedEvent,
451 EwsNewMailEvent,
452 EwsFreeBusyChangedEvent,
453 EwsStatusEvent,
454 EwsUnknownEvent
455 } EwsEventType;
456
457 typedef enum {
458 EwsResponseCodeNoError = 0,
459 EwsResponseCodeErrorServerBusy,
460 EwsResponseCodeUnauthorized,
461 EwsResponseCodeUnknown,
462 } EwsResponseCode;
463
decodeEnumString(const QString & str,const QString * table,unsigned count,bool * ok)464 template<typename T> T decodeEnumString(const QString &str, const QString *table, unsigned count, bool *ok)
465 {
466 unsigned i;
467 T enumVal = T();
468 for (i = 0; i < count; i++) {
469 if (str == table[i]) {
470 enumVal = static_cast<T>(i);
471 break;
472 }
473 }
474 *ok = (i < count);
475 return enumVal;
476 }
477
isEwsMessageItemType(EwsItemType type)478 inline bool isEwsMessageItemType(EwsItemType type)
479 {
480 return (type == EwsItemTypeItem) || (type == EwsItemTypePostItem);
481 }
482
483 extern const QVector<QString> ewsItemTypeNames;
484
485 EwsResponseCode decodeEwsResponseCode(const QString &code);
486 bool isEwsResponseCodeTemporaryError(EwsResponseCode code);
487