forked from ical-org/ical.net
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCalendarCollection.cs
More file actions
155 lines (136 loc) · 5.45 KB
/
CalendarCollection.cs
File metadata and controls
155 lines (136 loc) · 5.45 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Ical.Net.CalendarComponents;
using Ical.Net.DataTypes;
using Ical.Net.Serialization;
using Ical.Net.Utility;
namespace Ical.Net
{
/// <summary> A list of iCalendars that can be loaded from a <see cref="TextReader"/>. </summary>
public class CalendarCollection : List<Calendar>
{
public static CalendarCollection Load(string iCalendarString)
=> Load(new StringReader(iCalendarString));
/// <summary>
/// Loads an <see cref="Calendar"/> from an open stream.
/// </summary>
/// <param name="stream">The stream from which to load the <see cref="Calendar"/> object</param>
/// <returns>An <see cref="Calendar"/> object</returns>
public static CalendarCollection Load(Stream stream)
=> Load(new StreamReader(stream, Encoding.UTF8));
public static CalendarCollection Load(TextReader reader)
{
var calendars = SimpleDeserializer.Default.Deserialize(reader).OfType<Calendar>();
var collection = new CalendarCollection();
collection.AddRange(calendars);
return collection;
}
public void ClearEvaluation()
{
foreach (var iCal in this)
{
iCal.ClearEvaluation();
}
}
public HashSet<Occurrence> GetOccurrences(IDateTime dt)
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences(dt));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences(DateTime dt)
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences(dt));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences(IDateTime startTime, IDateTime endTime)
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences(startTime, endTime));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences(DateTime startTime, DateTime endTime)
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences(startTime, endTime));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences<T>(IDateTime dt) where T : IRecurringComponent
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences<T>(dt));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences<T>(DateTime dt) where T : IRecurringComponent
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences<T>(dt));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences<T>(IDateTime startTime, IDateTime endTime) where T : IRecurringComponent
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences<T>(startTime, endTime));
}
return occurrences;
}
public HashSet<Occurrence> GetOccurrences<T>(DateTime startTime, DateTime endTime) where T : IRecurringComponent
{
var occurrences = new HashSet<Occurrence>();
foreach (var iCal in this)
{
occurrences.UnionWith(iCal.GetOccurrences<T>(startTime, endTime));
}
return occurrences;
}
private static FreeBusy CombineFreeBusy(FreeBusy main, FreeBusy current)
{
main?.MergeWith(current);
return current;
}
public FreeBusy GetFreeBusy(FreeBusy freeBusyRequest)
{
return this.Aggregate<Calendar, FreeBusy>(null, (current, iCal) => CombineFreeBusy(current, iCal.GetFreeBusy(freeBusyRequest)));
}
public FreeBusy GetFreeBusy(IDateTime fromInclusive, IDateTime toExclusive)
{
return this.Aggregate<Calendar, FreeBusy>(null, (current, iCal) => CombineFreeBusy(current, iCal.GetFreeBusy(fromInclusive, toExclusive)));
}
public FreeBusy GetFreeBusy(Organizer organizer, IEnumerable<Attendee> contacts, IDateTime fromInclusive, IDateTime toExclusive)
{
return this.Aggregate<Calendar, FreeBusy>(null, (current, iCal) => CombineFreeBusy(current, iCal.GetFreeBusy(organizer, contacts, fromInclusive, toExclusive)));
}
public override int GetHashCode() => CollectionHelpers.GetHashCode(this);
protected bool Equals(CalendarCollection obj) => CollectionHelpers.Equals(this, obj);
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
return obj.GetType() == GetType() && Equals((CalendarEvent)obj);
}
}
}