1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
/*
* qtmaildir - a Qt6 mail client for notmuch-indexed Maildirs
* Copyright (C) 2026 Danilo M. <danix@danix.xyz>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include "repeatrule.h"
#include <QByteArray>
#include <QColor>
#include <QDateTime>
#include <QList>
#include <QString>
/// One vdir collection: a subdirectory of calendars_dir.
struct CalCollection
{
QString dir; ///< The directory's own name, e.g. "52".
QString path; ///< Absolute path.
/// From the vdir's `displayname` file, which vdirsyncer's metasync fills
/// from the server; the directory name when absent.
QString displayName;
/// From the vdir's `color` file (`#RRGGBB`); a colour hashed from the
/// directory name when absent, so no collection is ever invisible.
QColor color;
bool readOnly = false; ///< The directory is not writable.
};
struct CalPerson
{
QString name; ///< CN, possibly empty.
QString address; ///< The address with "mailto:" removed.
QString partstat; ///< PARTSTAT as written, e.g. "ACCEPTED"; empty if absent.
};
/// A RECURRENCE-ID override: one occurrence of a series moved or changed.
struct CalOverride
{
QDateTime recurrenceId; ///< The original slot it replaces.
QDateTime start;
QDateTime end;
bool allDay = false;
QString summary;
QString location;
QString description;
bool cancelled = false; ///< STATUS:CANCELLED: the slot is removed.
};
/// One .ics file's event, as the rest of the application sees it.
struct CalEvent
{
QString filePath;
QString collectionDir;
QString uid;
QString summary;
QString location;
QString description;
QDateTime start;
QDateTime end; ///< Exclusive. For an all-day event, midnight after the last day.
bool allDay = false;
RepeatRule repeat; ///< Freq::None when the event does not repeat.
QList<QDateTime> exdates;
QList<CalOverride> overrides;
bool hasAlarm = false;
CalPerson organizer; ///< Empty address: no ORGANIZER.
QList<CalPerson> attendees;
int sequence = 0;
QByteArray rawText; ///< The file exactly as read: stale checks and undo.
};
/// One expanded occurrence. What a view is built from.
struct Occurrence
{
int eventIndex = -1; ///< Into LoadResult::events.
QDateTime start;
QDateTime end;
bool allDay = false;
/// The slot this occurrence fills in its series, which is what a
/// RECURRENCE-ID or an EXDATE names. Invalid for a non-repeating event.
QDateTime recurrenceId;
bool isOverride = false;
int overrideIndex = -1; ///< Into CalEvent::overrides when isOverride.
};
/// An occurrence plus what a view draws. Views see nothing else.
struct CalendarItem
{
Occurrence occurrence;
QString title;
QColor color;
};
/// What the edit form produces.
struct EventEdit
{
QString summary;
QString location;
QString description;
QDateTime start;
QDateTime end;
bool allDay = false;
RepeatRule repeat;
QString collectionDir;
};
struct LoadResult
{
QList<CalCollection> collections;
QList<CalEvent> events;
int unparsable = 0; ///< Files skipped because they did not parse.
int unknownZones = 0; ///< Events whose TZID resolved to nothing, shown in local time.
};
|