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