Use a Date for the timestamp in all timeline items. (#3590)

* Use a Date for the timestamp in all timeline items.

* UI test snapshots.

* Update snapshots

---------

Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
This commit is contained in:
Doug
2024-12-06 13:55:29 +00:00
committed by GitHub
parent 3ff8271924
commit 64da80c6cb
235 changed files with 522 additions and 510 deletions

View File

@@ -85,7 +85,7 @@ extension PollRoomTimelineItem {
.init(id: .randomEvent,
poll: poll,
body: "poll",
timestamp: "Now",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isEditable,
canBeRepliedTo: true,

View File

@@ -32,4 +32,14 @@ extension Date {
return formatted(.dateTime.year().day().month())
}
}
/// The date formatted as just the time, for use in timeline items specifically.
func formattedTime() -> String {
formatted(date: .omitted, time: .shortened)
}
/// A fixed date used for mocks, previews etc.
static var mock: Date {
Calendar.current.startOfDay(for: .now).addingTimeInterval((9 * 60 * 60) + (41 * 60)) // 9:41 am
}
}

View File

@@ -85,7 +85,7 @@ struct TimelineItemMenu: View {
Spacer(minLength: 16.0)
Text(item.timestamp)
Text(item.timestamp.formattedTime())
.font(.compound.bodyXS)
.foregroundColor(.compound.textSecondary)
}

View File

@@ -20,7 +20,7 @@ struct SwipeToReplyView: View {
struct SwipeToReplyView_Previews: PreviewProvider, TestablePreview {
static let timelineItem = TextRoomTimelineItem(id: .randomEvent,
timestamp: "",
timestamp: .mock,
isOutgoing: true,
isEditable: true,
canBeRepliedTo: true,

View File

@@ -412,7 +412,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
static var replies: some View {
VStack(spacing: 0) {
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -425,7 +425,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
groupStyle: .single))
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -460,7 +460,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
static var encryptionAuthenticity: some View {
VStack(spacing: 0) {
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -471,7 +471,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
groupStyle: .single))
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -483,7 +483,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
groupStyle: .single))
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -494,7 +494,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
groupStyle: .first))
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -505,7 +505,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
groupStyle: .last))
ImageRoomTimelineView(timelineItem: ImageRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -518,7 +518,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview
properties: RoomTimelineItemProperties(encryptionAuthenticity: .notGuaranteed(color: .gray))))
VoiceMessageRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -547,7 +547,7 @@ private struct MockTimelineContent: View {
var body: some View {
RoomTimelineItemView(viewState: .init(item: TextRoomTimelineItem(id: makeItemIdentifier(),
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -558,7 +558,7 @@ private struct MockTimelineContent: View {
groupStyle: .single))
AudioRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -573,7 +573,7 @@ private struct MockTimelineContent: View {
replyDetails: replyDetails))
FileRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "10:42",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -588,7 +588,7 @@ private struct MockTimelineContent: View {
replyDetails: replyDetails))
ImageRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: true,
canBeRepliedTo: true,
@@ -600,7 +600,7 @@ private struct MockTimelineContent: View {
replyDetails: replyDetails))
LocationRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -613,7 +613,7 @@ private struct MockTimelineContent: View {
replyDetails: replyDetails))
LocationRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -624,7 +624,7 @@ private struct MockTimelineContent: View {
replyDetails: replyDetails))
VoiceMessageRoomTimelineView(timelineItem: .init(id: makeItemIdentifier(),
timestamp: "10:42",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -58,7 +58,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
static let viewModel = TimelineViewModel.mock
static let base = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -81,7 +81,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
static let sendingLast: TextRoomTimelineItem = {
let id = viewModel.state.timelineViewState.uniqueIDs.last ?? .init(id: UUID().uuidString)
var result = TextRoomTimelineItem(id: .event(uniqueID: id, eventOrTransactionID: .eventId(eventId: UUID().uuidString)),
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -101,7 +101,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
static let sentLast: TextRoomTimelineItem = {
let id = viewModel.state.timelineViewState.uniqueIDs.last ?? .init(id: UUID().uuidString)
let result = TextRoomTimelineItem(id: .event(uniqueID: id, eventOrTransactionID: .eventId(eventId: UUID().uuidString)),
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -112,7 +112,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
}()
static let ltrString = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -120,7 +120,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
sender: .test, content: .init(body: "house!"))
static let rtlString = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -128,7 +128,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
sender: .test, content: .init(body: "באמת!"))
static let ltrStringThatContainsRtl = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -137,7 +137,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
content: .init(body: "house! -- באמת‏! -- house!"))
static let rtlStringThatContainsLtr = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -146,7 +146,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
content: .init(body: "באמת‏! -- house! -- באמת!"))
static let ltrStringThatFinishesInRtl = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -155,7 +155,7 @@ struct TimelineItemStyler_Previews: PreviewProvider, TestablePreview {
content: .init(body: "house! -- באמת!"))
static let rtlStringThatFinishesInLtr = TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -102,7 +102,7 @@ struct TimelineReadReceiptsView_Previews: PreviewProvider, TestablePreview {
static func mockTimelineItem(with receipts: [ReadReceipt]) -> TextRoomTimelineItem {
TextRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -42,7 +42,7 @@ struct AudioRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static func makeItem(filename: String, fileSize: UInt, caption: String? = nil) -> AudioRoomTimelineItem {
.init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -34,7 +34,7 @@ struct CallInviteRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var body: some View {
CallInviteRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isEditable: false,
canBeRepliedTo: false,
sender: .init(id: "Bob")))

View File

@@ -39,7 +39,7 @@ struct CallNotificationRoomTimelineView: View {
Spacer()
Text(timelineItem.timestamp)
Text(timelineItem.timestamp.formattedTime())
.font(.compound.bodyXS)
.foregroundColor(.compound.textSecondary)
}
@@ -61,7 +61,7 @@ struct CallNotificationRoomTimelineView_Previews: PreviewProvider, TestablePrevi
static var body: some View {
CallNotificationRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isEditable: false,
canBeRepliedTo: false,
sender: .init(id: "Bob")))

View File

@@ -32,16 +32,16 @@ struct EmoteRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var body: some View {
VStack(alignment: .leading, spacing: 20.0) {
EmoteRoomTimelineView(timelineItem: itemWith(text: "Short loin ground round tongue hamburger, fatback salami shoulder. Beef turkey sausage kielbasa strip steak. Alcatra capicola pig tail pancetta chislic.",
timestamp: "Now",
timestamp: .mock,
senderId: "Bob"))
EmoteRoomTimelineView(timelineItem: itemWith(text: "Some other text",
timestamp: "Later",
timestamp: .mock,
senderId: "Anne"))
}
}
private static func itemWith(text: String, timestamp: String, senderId: String) -> EmoteRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, senderId: String) -> EmoteRoomTimelineItem {
EmoteRoomTimelineItem(id: .randomEvent,
timestamp: timestamp,
isOutgoing: false,

View File

@@ -61,27 +61,27 @@ struct EncryptedRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var body: some View {
VStack(alignment: .leading, spacing: 20.0) {
EncryptedRoomTimelineView(timelineItem: itemWith(text: L10n.commonWaitingForDecryptionKey,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
senderId: "Bob"))
EncryptedRoomTimelineView(timelineItem: itemWith(text: L10n.commonWaitingForDecryptionKey,
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
EncryptedRoomTimelineView(timelineItem: itemWith(text: "Some other text that is very long and will wrap onto multiple lines.",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
EncryptedRoomTimelineView(timelineItem: expectedItemWith(timestamp: "Now",
EncryptedRoomTimelineView(timelineItem: expectedItemWith(timestamp: .mock,
isOutgoing: false,
senderId: "Bob"))
}
}
private static func itemWith(text: String, timestamp: String, isOutgoing: Bool, senderId: String) -> EncryptedRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, isOutgoing: Bool, senderId: String) -> EncryptedRoomTimelineItem {
EncryptedRoomTimelineItem(id: .randomEvent,
body: text,
encryptionType: .unknown,
@@ -92,7 +92,7 @@ struct EncryptedRoomTimelineView_Previews: PreviewProvider, TestablePreview {
sender: .init(id: senderId))
}
private static func expectedItemWith(timestamp: String, isOutgoing: Bool, senderId: String) -> EncryptedRoomTimelineItem {
private static func expectedItemWith(timestamp: Date, isOutgoing: Bool, senderId: String) -> EncryptedRoomTimelineItem {
EncryptedRoomTimelineItem(id: .randomEvent,
body: L10n.commonUnableToDecryptNoAccess,
encryptionType: .megolmV1AesSha2(sessionID: "foo", cause: .sentBeforeWeJoined),

View File

@@ -112,7 +112,7 @@ struct FileRoomTimelineView_Previews: PreviewProvider, TestablePreview {
caption: String? = nil,
formattedCaption: AttributedString? = nil) -> FileRoomTimelineItem {
.init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -94,7 +94,7 @@ struct ImageRoomTimelineView_Previews: PreviewProvider, TestablePreview {
private static func makeTimelineItem(caption: String? = nil, isEdited: Bool = false) -> ImageRoomTimelineItem {
ImageRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -91,7 +91,7 @@ struct LocationRoomTimelineView_Previews: PreviewProvider, TestablePreview {
@ViewBuilder
static var states: some View {
LocationRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -100,7 +100,7 @@ struct LocationRoomTimelineView_Previews: PreviewProvider, TestablePreview {
content: .init(body: "Fallback geo uri description")))
LocationRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -109,7 +109,7 @@ struct LocationRoomTimelineView_Previews: PreviewProvider, TestablePreview {
content: .init(body: "Fallback geo uri description",
geoURI: .init(latitude: 41.902782, longitude: 12.496366), description: "Location description description description description description description description description")))
LocationRoomTimelineView(timelineItem: .init(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -44,16 +44,16 @@ struct NoticeRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var body: some View {
VStack(alignment: .leading, spacing: 20.0) {
NoticeRoomTimelineView(timelineItem: itemWith(text: "Short loin ground round tongue hamburger, fatback salami shoulder. Beef turkey sausage kielbasa strip steak. Alcatra capicola pig tail pancetta chislic.",
timestamp: "Now",
timestamp: .mock,
senderId: "Bob"))
NoticeRoomTimelineView(timelineItem: itemWith(text: "Some other text",
timestamp: "Later",
timestamp: .mock,
senderId: "Anne"))
}
}
private static func itemWith(text: String, timestamp: String, senderId: String) -> NoticeRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, senderId: String) -> NoticeRoomTimelineItem {
NoticeRoomTimelineItem(id: .randomEvent,
timestamp: timestamp,
isOutgoing: false,

View File

@@ -35,7 +35,7 @@ struct ReadMarkerRoomTimelineView_Previews: PreviewProvider, TestablePreview {
VStack(alignment: .leading, spacing: 0) {
RoomTimelineItemView(viewState: .init(type: .separator(.init(id: .virtual(uniqueID: .init(id: "Separator")), text: "Today")), groupStyle: .single))
RoomTimelineItemView(viewState: .init(type: .text(.init(id: .randomEvent,
timestamp: "",
timestamp: .mock,
isOutgoing: true,
isEditable: false,
canBeRepliedTo: true,
@@ -47,7 +47,7 @@ struct ReadMarkerRoomTimelineView_Previews: PreviewProvider, TestablePreview {
RoomTimelineItemView(viewState: .init(type: .separator(.init(id: .virtual(uniqueID: .init(id: "Separator")), text: "Today")), groupStyle: .single))
RoomTimelineItemView(viewState: .init(type: .text(.init(id: .randomEvent,
timestamp: "",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -26,13 +26,13 @@ struct RedactedRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var previews: some View {
VStack(alignment: .leading, spacing: 20.0) {
RedactedRoomTimelineView(timelineItem: itemWith(text: L10n.commonMessageRemoved,
timestamp: "Later",
timestamp: .mock,
senderId: "Anne"))
}
.environmentObject(viewModel.context)
}
private static func itemWith(text: String, timestamp: String, senderId: String) -> RedactedRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, senderId: String) -> RedactedRoomTimelineItem {
RedactedRoomTimelineItem(id: .randomEvent,
body: text,
timestamp: timestamp,

View File

@@ -32,7 +32,7 @@ struct StateRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static let item = StateRoomTimelineItem(id: .randomVirtual,
body: "Alice joined",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -44,7 +44,7 @@ struct StickerRoomTimelineView_Previews: PreviewProvider, TestablePreview {
VStack(spacing: 20.0) {
StickerRoomTimelineView(timelineItem: StickerRoomTimelineItem(id: .randomEvent,
body: "Some image",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -53,7 +53,7 @@ struct StickerRoomTimelineView_Previews: PreviewProvider, TestablePreview {
StickerRoomTimelineView(timelineItem: StickerRoomTimelineItem(id: .randomEvent,
body: "Blurhashed image",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -42,44 +42,44 @@ struct TextRoomTimelineView_Previews: PreviewProvider, TestablePreview {
ScrollView {
VStack(alignment: .leading, spacing: 20.0) {
TextRoomTimelineView(timelineItem: itemWith(text: "Short loin ground round tongue hamburger, fatback salami shoulder. Beef turkey sausage kielbasa strip steak. Alcatra capicola pig tail pancetta chislic.",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
senderId: "Bob"))
TextRoomTimelineView(timelineItem: itemWith(text: "Some other text",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
TextRoomTimelineView(timelineItem: itemWith(text: "Short loin ground round tongue hamburger, fatback salami shoulder. Beef turkey sausage kielbasa strip steak. Alcatra capicola pig tail pancetta chislic.",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
senderId: "Bob"))
TextRoomTimelineView(timelineItem: itemWith(text: "Some other text",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
TextRoomTimelineView(timelineItem: itemWith(text: "טקסט אחר",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
TextRoomTimelineView(timelineItem: itemWith(html: "<ol><li>First item</li><li>Second item</li><li>Third item</li></ol>",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
TextRoomTimelineView(timelineItem: itemWith(html: "<ol><li>פריט ראשון</li><li>הפריט השני</li><li>פריט שלישי</li></ol>",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
}
}
}
private static func itemWith(text: String, timestamp: String, isOutgoing: Bool, senderId: String) -> TextRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, isOutgoing: Bool, senderId: String) -> TextRoomTimelineItem {
TextRoomTimelineItem(id: .randomEvent,
timestamp: timestamp,
isOutgoing: isOutgoing,
@@ -90,7 +90,7 @@ struct TextRoomTimelineView_Previews: PreviewProvider, TestablePreview {
content: .init(body: text))
}
private static func itemWith(html: String, timestamp: String, isOutgoing: Bool, senderId: String) -> TextRoomTimelineItem {
private static func itemWith(html: String, timestamp: Date, isOutgoing: Bool, senderId: String) -> TextRoomTimelineItem {
let builder = AttributedStringBuilder(cacheKey: "preview", mentionBuilder: MentionBuilder())
let attributedString = builder.fromHTML(html)

View File

@@ -40,18 +40,18 @@ struct UnsupportedRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static var body: some View {
VStack(alignment: .leading, spacing: 20.0) {
UnsupportedRoomTimelineView(timelineItem: itemWith(text: "Text",
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
senderId: "Bob"))
UnsupportedRoomTimelineView(timelineItem: itemWith(text: "Some other text",
timestamp: "Later",
timestamp: .mock,
isOutgoing: true,
senderId: "Anne"))
}
}
private static func itemWith(text: String, timestamp: String, isOutgoing: Bool, senderId: String) -> UnsupportedRoomTimelineItem {
private static func itemWith(text: String, timestamp: Date, isOutgoing: Bool, senderId: String) -> UnsupportedRoomTimelineItem {
UnsupportedRoomTimelineItem(id: .randomEvent,
body: text,
eventType: "Some Event Type",

View File

@@ -98,7 +98,7 @@ struct VideoRoomTimelineView_Previews: PreviewProvider, TestablePreview {
private static func makeTimelineItem(caption: String? = nil, isEdited: Bool = false) -> VideoRoomTimelineItem {
VideoRoomTimelineItem(id: .randomEvent,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -13,7 +13,7 @@ enum RoomTimelineItemFixtures {
SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init(id: "Yesterday")), text: "Yesterday"),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: ".RoomTimelineItemFixtures.default.0"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.0")),
timestamp: "10:10 AM",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -23,7 +23,7 @@ enum RoomTimelineItemFixtures {
properties: RoomTimelineItemProperties(isEdited: true)),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.1"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.1")),
timestamp: "10:11 AM",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -35,7 +35,7 @@ enum RoomTimelineItemFixtures {
])),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.2"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.2")),
timestamp: "10:11 AM",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -55,7 +55,7 @@ enum RoomTimelineItemFixtures {
SeparatorRoomTimelineItem(id: .virtual(uniqueID: .init(id: "Today")), text: "Today"),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.3"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.3")),
timestamp: "5 PM",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -65,7 +65,7 @@ enum RoomTimelineItemFixtures {
properties: RoomTimelineItemProperties(orderedReadReceipts: [ReadReceipt(userID: "alice", formattedTimestamp: nil)])),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.4"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.4")),
timestamp: "5 PM",
timestamp: .mock,
isOutgoing: true,
isEditable: true,
canBeRepliedTo: true,
@@ -74,7 +74,7 @@ enum RoomTimelineItemFixtures {
content: .init(body: "And John's speech was amazing!")),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.5"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.5")),
timestamp: "5 PM",
timestamp: .mock,
isOutgoing: true,
isEditable: true,
canBeRepliedTo: true,
@@ -88,7 +88,7 @@ enum RoomTimelineItemFixtures {
ReadReceipt(userID: "dan", formattedTimestamp: nil)])),
TextRoomTimelineItem(id: .event(uniqueID: .init(id: "RoomTimelineItemFixtures.default.6"),
eventOrTransactionID: .eventId(eventId: "RoomTimelineItemFixtures.default.6")),
timestamp: "5 PM",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,
@@ -267,7 +267,7 @@ enum RoomTimelineItemFixtures {
private extension TextRoomTimelineItem {
init(id: TimelineItemIdentifier? = nil, text: String, senderDisplayName: String) {
self.init(id: id ?? .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: senderDisplayName == "Alice",
isEditable: false,
canBeRepliedTo: true,
@@ -286,7 +286,7 @@ private extension TextRoomTimelineItem {
private extension AudioRoomTimelineItem {
init(isOutgoing: Bool, caption: String? = nil) {
self.init(id: .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isOutgoing,
canBeRepliedTo: true,
@@ -305,7 +305,7 @@ private extension AudioRoomTimelineItem {
private extension FileRoomTimelineItem {
init(isOutgoing: Bool, caption: String? = nil) {
self.init(id: .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isOutgoing,
canBeRepliedTo: true,
@@ -323,7 +323,7 @@ private extension FileRoomTimelineItem {
private extension ImageRoomTimelineItem {
init(isOutgoing: Bool, caption: String? = nil) {
self.init(id: .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isOutgoing,
canBeRepliedTo: true,
@@ -340,7 +340,7 @@ private extension ImageRoomTimelineItem {
private extension VideoRoomTimelineItem {
init(isOutgoing: Bool, caption: String? = nil) {
self.init(id: .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isOutgoing,
canBeRepliedTo: true,
@@ -357,7 +357,7 @@ private extension VideoRoomTimelineItem {
private extension VoiceMessageRoomTimelineItem {
init(isOutgoing: Bool) {
self.init(id: .randomEvent,
timestamp: "10:47 am",
timestamp: .mock,
isOutgoing: isOutgoing,
isEditable: isOutgoing,
canBeRepliedTo: true,

View File

@@ -9,7 +9,7 @@ import Foundation
import UIKit
protocol EventBasedTimelineItemProtocol: RoomTimelineItemProtocol, CustomStringConvertible {
var timestamp: String { get }
var timestamp: Date { get }
var isOutgoing: Bool { get }
var isEditable: Bool { get }
var canBeRepliedTo: Bool { get }
@@ -84,7 +84,7 @@ extension EventBasedTimelineItemProtocol {
if properties.isEdited {
start = "\(L10n.commonEditedSuffix) "
}
return start + timestamp
return start + timestamp.formattedTime()
}
var isCopyable: Bool {

View File

@@ -9,7 +9,7 @@ import Foundation
struct AudioRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -9,7 +9,7 @@ import UIKit
struct EmoteRoomTimelineItem: TextBasedRoomTimelineItem, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UniformTypeIdentifiers
struct FileRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UniformTypeIdentifiers
struct ImageRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -5,10 +5,12 @@
// Please see LICENSE in the repository root for full details.
//
import Foundation
struct LocationRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -9,7 +9,7 @@ import UIKit
struct NoticeRoomTimelineItem: TextBasedRoomTimelineItem, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UIKit
struct TextRoomTimelineItem: TextBasedRoomTimelineItem, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UniformTypeIdentifiers
struct VideoRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -9,7 +9,7 @@ import Foundation
struct VoiceMessageRoomTimelineItem: EventBasedMessageTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -57,7 +57,7 @@ struct VoiceMessageRoomTimelineView_Previews: PreviewProvider, TestablePreview {
static let viewModel = TimelineViewModel.mock
static let timelineItemIdentifier = TimelineItemIdentifier.randomEvent
static let voiceRoomTimelineItem = VoiceMessageRoomTimelineItem(id: timelineItemIdentifier,
timestamp: "Now",
timestamp: .mock,
isOutgoing: false,
isEditable: false,
canBeRepliedTo: true,

View File

@@ -9,7 +9,7 @@ import Foundation
struct CallInviteRoomTimelineItem: RoomTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -9,7 +9,7 @@ import Foundation
struct CallNotificationRoomTimelineItem: RoomTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let timestamp: String
let timestamp: Date
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -27,7 +27,7 @@ struct EncryptedRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let body: String
let encryptionType: EncryptionType
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -11,7 +11,7 @@ struct PollRoomTimelineItem: Equatable, EventBasedTimelineItemProtocol {
let id: TimelineItemIdentifier
let poll: Poll
let body: String
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -11,7 +11,7 @@ import UIKit
struct RedactedRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let body: String
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UIKit
struct StateRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let body: String
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -10,7 +10,7 @@ import UIKit
struct StickerRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
let id: TimelineItemIdentifier
let body: String
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -14,7 +14,7 @@ struct UnsupportedRoomTimelineItem: EventBasedTimelineItemProtocol, Equatable {
let eventType: String
let error: String
let timestamp: String
let timestamp: Date
let isOutgoing: Bool
let isEditable: Bool
let canBeRepliedTo: Bool

View File

@@ -103,7 +103,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
body: L10n.commonUnsupportedEvent,
eventType: eventType,
error: error,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -120,7 +120,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return StickerRoomTimelineItem(id: eventItemProxy.id,
body: body,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -172,7 +172,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return EncryptedRoomTimelineItem(id: eventItemProxy.id,
body: errorLabel,
encryptionType: encryptionType,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -184,7 +184,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
RedactedRoomTimelineItem(id: eventItemProxy.id,
body: L10n.commonMessageRemoved,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -197,7 +197,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ textMessageContent: TextMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
TextRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -217,7 +217,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ imageMessageContent: ImageMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
ImageRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -237,7 +237,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ videoMessageContent: VideoMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
VideoRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -257,7 +257,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ audioMessageContent: AudioMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
AudioRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -277,7 +277,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ audioMessageContent: AudioMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
VoiceMessageRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -297,7 +297,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ fileMessageContent: FileMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
FileRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -317,7 +317,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ noticeMessageContent: NoticeMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
NoticeRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -337,7 +337,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ emoteMessageContent: EmoteMessageContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
EmoteRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -357,7 +357,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
_ locationMessageContent: LocationContent,
_ isOutgoing: Bool) -> RoomTimelineItemProtocol {
LocationRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -410,7 +410,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
return PollRoomTimelineItem(id: eventItemProxy.id,
poll: poll,
body: poll.question,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
@@ -424,7 +424,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
private func buildCallInviteTimelineItem(for eventItemProxy: EventTimelineItemProxy) -> RoomTimelineItemProtocol {
CallInviteRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
sender: eventItemProxy.sender)
@@ -432,7 +432,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
private func buildCallNotificationTimelineItem(for eventItemProxy: EventTimelineItemProxy) -> RoomTimelineItemProtocol {
CallNotificationRoomTimelineItem(id: eventItemProxy.id,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isEditable: eventItemProxy.isEditable,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,
sender: eventItemProxy.sender)
@@ -652,7 +652,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
private func buildStateTimelineItem(for eventItemProxy: EventTimelineItemProxy, text: String, isOutgoing: Bool) -> RoomTimelineItemProtocol {
StateRoomTimelineItem(id: eventItemProxy.id,
body: text,
timestamp: eventItemProxy.timestamp.formatted(date: .omitted, time: .shortened),
timestamp: eventItemProxy.timestamp,
isOutgoing: isOutgoing,
isEditable: false,
canBeRepliedTo: eventItemProxy.canBeRepliedTo,

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11690714e9762d729ca2b9777494f4ffe479ca03b95e282c6dafcbcd0c6e47d1
size 99579
oid sha256:d3b53e20f2c6cc50e19de94c8af37e1a0f4b96ed577994d4f5e8e6d2bbda4607
size 99180

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d029be2d41fb70268aafe9e252edea552014545591c9f06ddb5abbb7b872ad88
size 102503
oid sha256:48b6f07f5253cb191f6e29bc089f9b53170084b12b2a53fee14421926f59ed06
size 103858

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6d06795ef84b2f9eef65341825a0dcef00f5c0e646a0a441824b9a656eb57ef7
size 55300
oid sha256:c591e0f26fcb14be30b7076970c1bfc32603ab3c88d0ac3390b550c1d252f058
size 55077

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:796fe32ebed61725457773d6bc27768f2a38fd5af2c0492fcd488125f8126fd0
size 57907
oid sha256:c98cc16ddfe4c0b0f428806446c933bb9a0e0637090e0b525b4a20e89f37f263
size 59016

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b430f8f6bc48e6a9f2c91fad0b466ce1376858eaf2be4a47388071ecff8da30a
size 118462
oid sha256:b7723a45c3430cd338b39a20d531280e216c98850da8203225ab9e5df856f007
size 118002

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b5fd573e63c1811c8798aa3c2114e57532180a33751dd03d184710e661585472
size 123432
oid sha256:5f70eb32caf02c6558bc44f73fc196a3af6ea3d72dc76a92d4a186b67cd0a2ce
size 126874

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a3e69b21964edc58faa211d7fff2147d3836accb85618cc67a073c01086cb083
size 80764
oid sha256:019d83b959e0106972e0a3fee94827fed1a679b881a3d002a63c7ce89f2111d5
size 80258

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:15e5630704d6949c4f6b53079789db3368db27e215cde7413d79a609d580d0d1
size 103083
oid sha256:27e3d1dfcb7d8666aeea233981141da687f92a9ddca514e302a0928c2941accc
size 106227

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:90f04fdb63831afb462488dc0afbcf78e9a2c1f8ccfae3855432d6b23f23f0d4
size 137263
oid sha256:e2a98c631c75cda4c23c5526e2afb813aa2c080be3bc67fb6d738bccb67bdb57
size 136530

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:daf4fbf2db6fb4412d80e949cb4374a5aa456bd1458919ee1d90f36fead48d07
size 141084
oid sha256:ef3b12f53fb49c4a0a3a11f1abffb21764d7b214b425437dccf572adeabf758a
size 143746

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a938ef5e6940b0f3c65a345db8c34b648873a7f2037f154569f22fa35e71aaa6
size 89747
oid sha256:3392233ca4467a372098ec75f53e1041490c4a2f721c0a9f547e83e434b6c318
size 89292

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3615b93b61f8eb6baa432734763d405fe3f6b679d67e11a25277e760188f8189
size 93512
oid sha256:09c4eed152e1b3fcf6ccda1baa1778577e4cc71d239bc6c30aea17213c1273e9
size 95252

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aa6267cdf145d058df12b779a6fdcbad4ddfcc26b058daa438d35cd7559d9bcd
size 3055472
oid sha256:07171c89d5ea45b181fb7c1e97e72bf0dab2c0cf1a2672be4524f4280b6b0bab
size 3055431

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e9c09c56436a70734f6e4a9600875286a11d1fa7f66958cc331621aadd7a120c
size 3054384
oid sha256:02b8d56780b78dc8558ee0a9bdbefabc1b22f629f7f2033c9280b28b616bec9b
size 3054607

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:72b266ba096bdc3ee20f035d58314a8d50b73074cf03cfa351491f42f391c415
size 1504607
oid sha256:9b24b9ca76f87aa2f1af0fd6773ce168f51d884677464b0bd86c7efc916195f5
size 1504110

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:74720a73db523afa7f12b00db51c5c580eddc2c9deef31c5cef6765beff380b0
size 1503480
oid sha256:592f62573bc89468b58e66a57db6534461597bbae2f3dd4449aafb028f3c369d
size 1501742

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7f75b5504a3ee6e3d47737fc0490f0bca3629d80a8fed607a4ca6c35a32c909d
size 1027852
oid sha256:7fb62383066a45ae514f8736f6ea08b8a5c0bab0c231836613ff57d1ddb95975
size 1027619

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ada69e2040fab6f2d842df492c4376e154d7990c6398679ba0ab85e3f752cfeb
size 1029365
oid sha256:8575f49f01e82cbca9366dab9b31954df18e0c8a2fc267225fc3ca9d93286695
size 1029185

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9e98a73d4400299b598412e5b39ab36578ec7340224c2c56827284d6a2d6f32c
size 607551
oid sha256:667d2b653d460a351e8c9b1adf708532d215b465ecfe3548409a1de3abc12ba5
size 607504

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b90878891af72fd14ecea9ca76d39853452ff057bfb2d6b8a30be70048378d9f
size 608331
oid sha256:547c133de43262b6e4a3a91231af8ed39af98357dd7962df14dc8011379100a7
size 580526

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5588f1b5c3673c7637b0d54b1b81f84ebdbcffef54595e13c2769a9ab49ddbbd
size 120582
oid sha256:f73c154414e982e5b7258cc4242585604f4c45130369263e81d18473e3eeac7e
size 120387

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fdd82d802c100ca12b7d7cccc36c4d69950b8908be64abc0365409bd188c9a3c
size 120334
oid sha256:56e0e12e519182e593a2aece330750538d4051c6d3ec34500f11d725375b88d5
size 120142

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f84ce97f1de03675d8f833127d0da7e8ed1a00aaaf4c3a01a82bd6c174ad9a5f
size 115200
oid sha256:cd692af1eb55d95c824b3b6cd2d884bde71e95974bd7063e404f54eb9a16eee4
size 115024

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6af065aa0746db5dd657ad05bff5ca29f48bc3e0d47a776cbbb7199f705f8373
size 114952
oid sha256:56d554f45bf6feaddadf292a4196377ccb6d7832bca18f1e9884b110b6e1c75f
size 114770

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6af065aa0746db5dd657ad05bff5ca29f48bc3e0d47a776cbbb7199f705f8373
size 114952
oid sha256:56d554f45bf6feaddadf292a4196377ccb6d7832bca18f1e9884b110b6e1c75f
size 114770

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e794544b48d147d620fb3d12365d9b265ed03e23dda7f191662555f3431ee595
size 79267
oid sha256:a45eda8e78a872de72eb183f405c5d9b8a326bb9ee41995afbba369d1b0060fa
size 79078

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:47365a8ce3aacf6432d147ba27ecee5d55a4b7a7415794761e7387e23c222e78
size 111787
oid sha256:f7d30bab10e499e4f523dbe5a5ae29898462554fc431ae8180a152396530b6f3
size 111631

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6f09fd7c993fdb7034a0c52ad1741a5cf05c0d58b32c454cf97fe68a6c8cacca
size 134951
oid sha256:7efe5cf2876de74b6bcc9adcdaa48db1659cdf995de9182de3bc9c6df0e6b8fa
size 135605

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3f9a7e25d1dddfab55108b9894feb4d50adfe5e9f33475d494581df2877b36d9
size 134501
oid sha256:c012824d0c46609c270429e7e2ca9af89438eb56e6cb2ef5a599dc055a08b4cd
size 135157

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aed6092acae427341404cb3c3203fa920544f936de5fb0bff9c4a3150f9af56b
size 130082
oid sha256:0ecfb6c9ca94278e784efad7698fd7af3262d0961231f5b0a4cdff99fabfdccc
size 130686

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:33442a0da97a6b366f9efe8e7fea603ad0de39bd8bf352d6e219435050b3c4b9
size 128547
oid sha256:392619b11a7dacf37566ce18b99d603238fa48c1ca592149a07a2cf393af9f55
size 129161

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:33442a0da97a6b366f9efe8e7fea603ad0de39bd8bf352d6e219435050b3c4b9
size 128547
oid sha256:392619b11a7dacf37566ce18b99d603238fa48c1ca592149a07a2cf393af9f55
size 129161

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e794544b48d147d620fb3d12365d9b265ed03e23dda7f191662555f3431ee595
size 79267
oid sha256:b415b6a13df504c10c4e39c1eb53f3ec4456aa5d256328d4cd559a9510c6ff0b
size 79935

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:03257dc02e700e403d229736219ac6e9ff22c37756a7f90a60134a1e3ee58848
size 117042
oid sha256:2fa853f8e26b15544b3c558e7eb0b5de16d36fbbe55931815bf6ef34becd7cd3
size 117677

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9898c8ed3dca614fcd1a0cc5dc8245057e4c098312c8f7d5a27e32642bb68293
size 73383
oid sha256:4f224e513ab605d93e7a2ff29336d725902c07f029fc32b9be82c2c8eeefe6d8
size 73271

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8d45a079df17a7e9bda5bfacdbdcafedba7e7f2863ecd32fe7781ecf65153f11
size 73162
oid sha256:84180502601af16e30bcebbe95442728d02ebdc70885400228174120607deb39
size 73050

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0c00cde6d7bbcf3b8c295cddcc755adc1a1ec47a38624eda37b0a73f03c455c0
size 68530
oid sha256:0bb69c9393f6d5c6fd820ad578b9d37bead0bac60387bb0a41ff1bb1b0dc4c0d
size 68410

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:40eda3506181416da579a84b715a5602f1b0c7397eb54e56215c90c6f8f1d0a4
size 68166
oid sha256:dd39e7f4a106d9a691947393474f5dd5bd602fc89f0b11d7539a047caae28707
size 68069

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:40eda3506181416da579a84b715a5602f1b0c7397eb54e56215c90c6f8f1d0a4
size 68166
oid sha256:dd39e7f4a106d9a691947393474f5dd5bd602fc89f0b11d7539a047caae28707
size 68069

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3fb34cdbfd8b96f150febcf956c6dde8bc28052679ad8d216dcd47bda58c1adf
size 39188
oid sha256:dd07464a88c257b6edecdbf7022c477888a772e774392d5d9f3ef4800016da9e
size 39051

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8a67811455cada6f94ac7888ef2759d30f3d0aa002ce566f6f24cfcf3c26d89b
size 67083
oid sha256:628163b90188642c7dacdf80749f481e511b607f7deccbba5d2cde2b43d0d642
size 66981

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:771f11cd8317781b17a52cd09af602198ee49e0c57f3248572c48b7a149aeb9b
size 86548
oid sha256:309a859e1fa5d7ba54044b089a378551c5dd4dcd56b1cf560746f5d4563c68ee
size 87114

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b78407f39f5f594ab4d2abc44e78b0174f65f7985ef6fc5b2698072047e06d24
size 85908
oid sha256:ddb6bced7750335ec2197af4d0cb336ecf395d7c02be7d0a93df9d0aaa03c213
size 86469

View File

@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d804f0beb15981af0fc1944ad13e7fa508282211116f23a4774d8e56d6f16f89
size 81762
oid sha256:9f07fa9ded418aa919a2d920388ba56b2ab5d95b8610aff944aca0703125fa24
size 82314

Some files were not shown because too many files have changed in this diff Show More