CelestiaTimelineEvent.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import Foundation
  2. import SwiftData
  3. @Model
  4. final class CelestiaTimelineEvent {
  5. var id: UUID
  6. var relativeTimeMs: Int64
  7. var eventType: String // NOTE, PHOTO, MARKER, VOICE
  8. var textContent: String?
  9. var localFilePath: String?
  10. var voiceStartOffsetMs: Int64?
  11. var voiceEndOffsetMs: Int64?
  12. var createdAt: Date
  13. var session: CelestiaSession?
  14. var relativeTimeFormatted: String {
  15. let totalSeconds = Int(relativeTimeMs / 1000)
  16. let hours = totalSeconds / 3600
  17. let minutes = (totalSeconds % 3600) / 60
  18. let seconds = totalSeconds % 60
  19. if hours > 0 {
  20. return String(format: "%d:%02d:%02d", hours, minutes, seconds)
  21. }
  22. return String(format: "%02d:%02d", minutes, seconds)
  23. }
  24. var isContinuationMarker: Bool {
  25. eventType == "MARKER" && textContent?.hasPrefix("续录时间:") == true
  26. }
  27. var eventIcon: String {
  28. if isContinuationMarker {
  29. return "record.circle"
  30. }
  31. switch eventType {
  32. case "PHOTO": return "camera.fill"
  33. case "NOTE": return "note.text"
  34. case "MARKER": return "exclamationmark.triangle.fill"
  35. case "VOICE": return "mic.fill"
  36. default: return "circle.fill"
  37. }
  38. }
  39. init(id: UUID = UUID(), relativeTimeMs: Int64, eventType: String) {
  40. self.id = id
  41. self.relativeTimeMs = relativeTimeMs
  42. self.eventType = eventType
  43. self.createdAt = Date()
  44. }
  45. }