oficina / calendar Public

Clone
git clone https://amadan.net/oficina/calendar

Plain git — no account needed to clone.

Download

Download this file

1import Foundation
2
3public struct TeamCalendar: Decodable, Identifiable {
4 public let id: Int64
5 public let name: String
6 public let hue: Int
7 public let writable: Bool
8}
9struct CalendarSession: Decodable {
10 let week_start: Int
11 let zone: String
12 let calendars: [TeamCalendar]
13 let default_calendar_id: Int64
14}
15public struct CalendarEvent: Codable, Identifiable {
16 public var id: Int64 = 0
17 public var calendar_id: Int64 = 0
18 public var status = "confirmed"
19 public var title = ""
20 public var location = ""
21 public var notes = ""
22 public var all_day = false
23 public var start_local = ""
24 public var end_local = ""
25 public var tz = ""
26 public var start: Int64 = 0
27 public var end: Int64 = 0
28 public var recurring = false
29 public var writable = true
30 public var calendar_name = ""
31 public var occurrence = ""
32 public var day_start = ""
33 public var day_end = ""
34 public func occurs(on day: Date, calendar: Calendar) -> Bool {
35 if all_day {
36 let f = DateFormatter(); f.locale = Locale(identifier: "en_US_POSIX")
37 f.timeZone = calendar.timeZone; f.dateFormat = "yyyy-MM-dd"
38 let date = f.string(from: day)
39 return day_start <= date && day_end > date
40 }
41 let first = calendar.startOfDay(for: day)
42 let last = calendar.date(byAdding: .day, value: 1, to: first)!
43 return Double(start) < last.timeIntervalSince1970 && Double(end) > first.timeIntervalSince1970
44 }
45 public var identity: String { "\(id)-\(occurrence)-\(start)" }
46 public init() {}
47}
48struct CalendarEvents: Decodable { let events: [CalendarEvent] }
49struct SavedEvent: Decodable { let id: Int64; let warning: String? }
50