Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
353 commits
Select commit Hold shift + click to select a range
b8d713f
generate test
caldrian Jul 1, 2026
86b4660
improve test
caldrian Jul 1, 2026
6dcb7f9
Merge branch 'feat/support-meeting-conversation-type-WPB-26589' into …
caldrian Jul 1, 2026
56277e6
filter meeting type
caldrian Jul 1, 2026
9faaae3
filter meeting type
caldrian Jul 1, 2026
5d7fb2e
Merge branch 'feat/support-meeting-conversation-type-WPB-26589' into …
caldrian Jul 1, 2026
e2c47bf
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/crea…
caldrian Jul 1, 2026
a147f0d
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 1, 2026
0891e33
rework data model
caldrian Jul 1, 2026
20d1f92
add temporary files
caldrian Jul 1, 2026
c2356c4
add more temporary files
caldrian Jul 1, 2026
11a06b4
move temporary files
caldrian Jul 1, 2026
4a2c83a
clean up
caldrian Jul 1, 2026
87d250a
fix build error
caldrian Jul 1, 2026
7a97ec7
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/crea…
caldrian Jul 1, 2026
667492f
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 1, 2026
ca51884
add wiredatabase file
caldrian Jul 1, 2026
0273b48
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/crea…
caldrian Jul 2, 2026
3a3a878
Potential fix for pull request finding
caldrian Jul 2, 2026
db888d0
fixes
caldrian Jul 2, 2026
e2c0367
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/crea…
caldrian Jul 2, 2026
760bf51
format code
caldrian Jul 2, 2026
b4b4354
Merge branch 'chore/create-meetings-entities-WPB-20278' of github.com…
caldrian Jul 2, 2026
23180b9
add entityName property
caldrian Jul 2, 2026
aa3b72e
Update WireNetwork/Sources/WireNetwork/APIs/Rest/ConversationsAPI/Con…
caldrian Jul 2, 2026
6262d2d
minor fix
caldrian Jul 2, 2026
7bd750f
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/suppo…
caldrian Jul 2, 2026
83a40ad
format code
caldrian Jul 2, 2026
f9c04f3
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
f3771a7
Refine entity properties
caldrian Jul 2, 2026
4fc56c1
adjust data model
caldrian Jul 2, 2026
3d9afa7
adjust recurrence properties
caldrian Jul 2, 2026
630408c
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/crea…
caldrian Jul 2, 2026
fc21ee3
Merge commit '3d9afa7a76b7c93bf57f5f6693835a7ec0715383' into feat/cre…
caldrian Jul 2, 2026
dbd509d
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
d0262e2
recurrence
caldrian Jul 2, 2026
eb1eac3
fixes
caldrian Jul 2, 2026
c0ca19f
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
2d5ac87
StoredMeeting+recurrenceFrequency
caldrian Jul 2, 2026
dbda59b
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
4fb8e73
format code
caldrian Jul 2, 2026
ff2b2de
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
58e8e6e
meeting repository add
caldrian Jul 2, 2026
8e0d52f
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-495…
caldrian Jul 2, 2026
75e8152
Merge branch 'chore/create-meetings-entities-WPB-20278' into feat/cre…
caldrian Jul 2, 2026
541654e
split use cases
caldrian Jul 2, 2026
f91abf7
refactoring
caldrian Jul 2, 2026
c762f93
fix build errors
caldrian Jul 2, 2026
fcd18e2
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/suppo…
caldrian Jul 2, 2026
baa0b51
Merge branch 'feat/support-meeting-conversation-type-WPB-26589' into …
caldrian Jul 2, 2026
c25a16e
adjust TODO
caldrian Jul 2, 2026
2a7f7ca
fix build error
caldrian Jul 2, 2026
74be60d
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/suppo…
caldrian Jul 3, 2026
946c6b2
add comment
caldrian Jul 3, 2026
13b4ba1
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-494…
caldrian Jul 3, 2026
12732c3
Merge branch 'feat/support-meeting-conversation-type-WPB-26589' into …
caldrian Jul 3, 2026
79e5541
pull conversation after meeting creation
caldrian Jul 3, 2026
636972d
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 3, 2026
37b6473
attempt to add participants
caldrian Jul 3, 2026
04da9e9
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 6, 2026
d5f313b
set up MLS
caldrian Jul 6, 2026
5c0c26a
generate fix
caldrian Jul 6, 2026
05cabfa
clean up unused code
caldrian Jul 6, 2026
cc2c361
fix/cleanup
caldrian Jul 6, 2026
fc5a7b9
cleanup
caldrian Jul 6, 2026
4564642
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 6, 2026
f454633
move repeat option
caldrian Jul 6, 2026
22d7a69
repeat option + recurrance
caldrian Jul 6, 2026
858a187
format code
caldrian Jul 6, 2026
b4f2690
import changes
caldrian Jul 6, 2026
944da91
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 6, 2026
efc1d96
FocusState
caldrian Jul 6, 2026
46fb1c9
round up start date
caldrian Jul 6, 2026
14a51ac
CurrentDateProviding
caldrian Jul 6, 2026
3e67231
adjust end date
caldrian Jul 6, 2026
6e7f3c7
CreateMeetingFormViewModel factory
caldrian Jul 6, 2026
d9ebc5c
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 6, 2026
5dc8f6c
update snapshot reference images
caldrian Jul 6, 2026
2bb7744
address some PR comments
caldrian Jul 6, 2026
0cac9e9
address another comment
caldrian Jul 6, 2026
886db84
unchecked sendable
caldrian Jul 6, 2026
659a08e
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 6, 2026
496ea9e
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/send…
caldrian Jul 7, 2026
744122f
introduce SearchMembersUseCase
caldrian Jul 7, 2026
e61b60b
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 7, 2026
949bf4a
add TODO
caldrian Jul 7, 2026
cf5f547
forbid dates in the past
caldrian Jul 7, 2026
cac5860
allow same day meetings in the past
caldrian Jul 7, 2026
201ddf0
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/send…
caldrian Jul 7, 2026
c585e16
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 7, 2026
27fd05b
format code
caldrian Jul 7, 2026
51210fb
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 7, 2026
46a9456
add preview
caldrian Jul 7, 2026
6ff6fe1
delete unused code
caldrian Jul 7, 2026
35c947b
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 7, 2026
d2b2b91
Update WireCalling/Sources/WireCallingDomain/WireMeetings/UseCases/Cr…
caldrian Jul 7, 2026
96ec335
Update WireCalling/Sources/WireCallingUI/Views/WireMeetings/CreateMee…
caldrian Jul 7, 2026
cd51627
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/send…
caldrian Jul 7, 2026
ac1ab50
add comments
caldrian Jul 7, 2026
da51c00
use TimeInterval extension
caldrian Jul 7, 2026
303ee8f
don't present errors
caldrian Jul 7, 2026
ece78a2
fix syntax
caldrian Jul 7, 2026
e1021c5
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 7, 2026
84998de
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-496…
caldrian Jul 7, 2026
e46162d
Merge branch 'chore/send-create-meeting-request-WPB-25676' into feat/…
caldrian Jul 7, 2026
10efc1f
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 7, 2026
f037e1e
cleanup
caldrian Jul 7, 2026
7fb9d30
create MeetingsLocalStore
caldrian Jul 7, 2026
70db900
add todo
caldrian Jul 7, 2026
ba1383d
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 8, 2026
8555582
create MeetingsLocalStore
caldrian Jul 8, 2026
c9e5876
replaceAllMeetings
caldrian Jul 8, 2026
c4fb395
meeting events
caldrian Jul 8, 2026
97fc40b
add tests
caldrian Jul 8, 2026
97b4f1f
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 8, 2026
0eb88d2
squashed
caldrian Jul 8, 2026
ed573c9
Merge branch 'feat/create-update-list-meetings-WPB-25676' of github.c…
caldrian Jul 8, 2026
80ac201
import changes
caldrian Jul 8, 2026
049db52
create another MeetingRepository
caldrian Jul 8, 2026
3feadd5
delete redundant protocol
caldrian Jul 9, 2026
e10d18a
attempt to fix issues
caldrian Jul 9, 2026
ba11ceb
renamings
caldrian Jul 9, 2026
2c67e0a
fix
caldrian Jul 9, 2026
16dc0fb
fix build error
caldrian Jul 9, 2026
4686754
resolve todo
caldrian Jul 9, 2026
75ce11e
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 9, 2026
421f9b6
fix more build errors
caldrian Jul 9, 2026
5731f77
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 9, 2026
00e5d74
renaming
caldrian Jul 9, 2026
7468fb7
refactoring
caldrian Jul 9, 2026
ca897e5
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 9, 2026
b80f8d0
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/suppo…
caldrian Jul 9, 2026
898bbb1
WireMeetingsFactoryTests
caldrian Jul 9, 2026
c883832
undo change
caldrian Jul 9, 2026
bd5873b
format code
caldrian Jul 9, 2026
e2c0d29
import changes
caldrian Jul 9, 2026
0b61b24
Merge branch 'chore/prevent-name-collisions-WPB-25676' into feat/crea…
caldrian Jul 9, 2026
680b51b
resolve TODO, restore WireCallingData
caldrian Jul 9, 2026
3fb4d45
Potential fix for pull request finding
caldrian Jul 9, 2026
d3a606b
Potential fix for pull request finding
caldrian Jul 9, 2026
effb0dc
move files into WireCallingData
caldrian Jul 9, 2026
70743d2
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/prev…
caldrian Jul 9, 2026
9416923
Merge branch 'chore/prevent-name-collisions-WPB-25676' of github.com:…
caldrian Jul 9, 2026
221111c
Revert "Potential fix for pull request finding"
caldrian Jul 9, 2026
6a8ab1c
Merge branch 'chore/prevent-name-collisions-WPB-25676' into feat/crea…
caldrian Jul 9, 2026
ea319b8
add todo
caldrian Jul 9, 2026
6e78dd0
Merge branch 'chore/prevent-name-collisions-WPB-25676' into feat/supp…
caldrian Jul 9, 2026
3c31b8d
Merge branch 'feat/support-meeting-events-WPB-26733' into feat/create…
caldrian Jul 9, 2026
6034dae
remove todo
caldrian Jul 9, 2026
763e2f4
trigger CI
caldrian Jul 9, 2026
96c3c6f
add observation
caldrian Jul 9, 2026
637243f
move AsyncBroadcaster
caldrian Jul 9, 2026
1d5064e
generic
caldrian Jul 9, 2026
6ba3034
rename to AsyncMulticaster
caldrian Jul 9, 2026
413f22f
revert change
caldrian Jul 9, 2026
a038f4b
move changes out
caldrian Jul 9, 2026
1b67bda
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 9, 2026
a77342f
move all changes out
caldrian Jul 9, 2026
6edf683
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 9, 2026
296cb19
fix build error
caldrian Jul 9, 2026
31c0df8
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 9, 2026
1177d38
Merge commit 'd86d63e8788223d32a03f92aebe35a1a70377361' into chore/pr…
caldrian Jul 9, 2026
02f2a41
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/prev…
caldrian Jul 9, 2026
e381d2e
Merge branch 'chore/prevent-name-collisions-WPB-25676' into feat/crea…
caldrian Jul 9, 2026
4d8b8c7
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 9, 2026
401d50f
format code
caldrian Jul 9, 2026
6536f9f
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 10, 2026
3348d0b
new model version
caldrian Jul 10, 2026
b054311
sync meetings
caldrian Jul 10, 2026
7cefb8c
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
8af866c
update data model
caldrian Jul 10, 2026
93e7e3a
import changes
caldrian Jul 10, 2026
4d57b47
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
f05a46f
format code
caldrian Jul 10, 2026
b15ad20
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
3a8612d
move code around
caldrian Jul 10, 2026
ceed692
move code around
caldrian Jul 10, 2026
374e8a3
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
2ee3083
fix issues
caldrian Jul 10, 2026
ddbae23
fix issues
caldrian Jul 10, 2026
f01e34c
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
8e42c6e
format code
caldrian Jul 10, 2026
82c9768
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
ff4f22d
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
6e60971
fix warnings
caldrian Jul 10, 2026
d8091f9
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
ea03f1e
chore: sync meetings - WPB-20274 (#4999)
caldrian Jul 10, 2026
dcfbc36
Merge branch 'chore/sync-meetings-WPB-20274' of github.com:wireapp/wi…
caldrian Jul 10, 2026
5f04c16
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
e301ff4
fix warning
caldrian Jul 10, 2026
8a3b614
add comment
caldrian Jul 10, 2026
3ac87d8
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
1ea14e2
temporarily remove tests
caldrian Jul 10, 2026
8f46d01
fix bug
caldrian Jul 10, 2026
b316c13
Merge branch 'chore/sync-meetings-WPB-20274' into feat/support-meetin…
caldrian Jul 10, 2026
7e6bac9
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/sync…
caldrian Jul 10, 2026
80a8306
reduce duplicated code
caldrian Jul 10, 2026
b10ea87
add more linking
caldrian Jul 10, 2026
9339465
undo project changes
caldrian Jul 10, 2026
263de9a
workaround
caldrian Jul 10, 2026
36b2464
format
caldrian Jul 10, 2026
10d3b5c
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
0bf5ae9
format
caldrian Jul 10, 2026
25a1839
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
2c0b0c5
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
3b7c460
fix base class
caldrian Jul 10, 2026
7749f4b
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
f242277
fix build error
caldrian Jul 10, 2026
4017308
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
7819ac3
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
2090937
Potential fix for pull request finding
caldrian Jul 10, 2026
b107b92
add comment
caldrian Jul 10, 2026
95c8f65
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
ee43e54
Merge branch 'feat/create-update-list-meetings-WPB-25676' of github.c…
caldrian Jul 10, 2026
b9c6a64
break comment
caldrian Jul 10, 2026
613d2c2
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
7622c82
address pr comments
caldrian Jul 10, 2026
8d5e0d6
chore: sync meetings - WPB-20274 (#4999)
caldrian Jul 10, 2026
82b53e1
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-499…
caldrian Jul 10, 2026
fbdf4f5
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
83475e5
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
6c3fc11
Merge branch 'develop' of github.com:wireapp/wire-ios into chore/sync…
caldrian Jul 10, 2026
aa67b3f
Merge branch 'chore/sync-meetings-WPB-20274' into feat/create-update-…
caldrian Jul 10, 2026
455e20a
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
9a18090
chore: load list of meetings from DB - WPB-25676 (#4896)
caldrian Jul 10, 2026
4f1a1b9
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-489…
caldrian Jul 10, 2026
86d097f
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
47b97c1
fix listing meeting after create
caldrian Jul 10, 2026
d1049a4
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
97f4c5b
fix build errors
caldrian Jul 10, 2026
de4e6d6
format code
caldrian Jul 10, 2026
94ff81e
format code
caldrian Jul 10, 2026
4188b56
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
7942f13
fix filtering meetings
caldrian Jul 10, 2026
89e3bd5
mock
caldrian Jul 10, 2026
53cbb2d
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 10, 2026
d28d50f
fix build error
caldrian Jul 10, 2026
1c61b9c
fix tests
caldrian Jul 11, 2026
9633302
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 11, 2026
9a97dae
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/creat…
caldrian Jul 11, 2026
9140bbd
Merge branch 'feat/create-update-list-meetings-WPB-25676' into feat/s…
caldrian Jul 11, 2026
9af1d1a
Potential fix for pull request finding
caldrian Jul 11, 2026
adc5925
Merge remote-tracking branch 'github/gh-readonly-queue/develop/pr-501…
caldrian Jul 20, 2026
81cef5f
fix warning
caldrian Jul 20, 2026
b630d73
Merge branch 'develop' of github.com:wireapp/wire-ios into feat/suppo…
caldrian Jul 20, 2026
c233447
fix mocks
caldrian Jul 20, 2026
cac8691
MeetingConversationPullerProtocol
caldrian Jul 20, 2026
e37a405
delete puller
caldrian Jul 20, 2026
9fda82f
fix build errors
caldrian Jul 20, 2026
9ee0d71
process conversation.create-meeting events
caldrian Jul 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions WireCalling/Sources/WireCallingData/MeetingRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,21 @@ public final class MeetingRepository: MeetingRepositoryProtocol {
changeBroadcaster.broadcast()
}

public func pullMeeting(id: QualifiedID) async throws {
@discardableResult
public func pullMeeting(id: QualifiedID) async throws -> Meeting? {
// There is no endpoint to fetch a single meeting,
// so refetch the list to get the details.
let meetings = try await meetingsAPI.listMeetings()

if let meeting = meetings.first(where: { $0.id == id }) {
await localStore.storeMeeting(meeting.toDomainMeeting())
let meeting = meetings.first(where: { $0.id == id })?.toDomainMeeting()
if let meeting {
await localStore.storeMeeting(meeting)
} else {
// The meeting no longer exists on the backend.
await localStore.deleteMeeting(id: id)
}
changeBroadcaster.broadcast()
return meeting
}

public func pullMeetings() async throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ public protocol MeetingRepositoryProtocol: Sendable {
/// If the meeting no longer exists on the server, the locally stored copy is deleted.
///
/// - Parameter id: The qualified id of the meeting to pull.
/// - Returns: The pulled meeting, or `nil` if it no longer exists on the server.

func pullMeeting(id: QualifiedID) async throws
@discardableResult
func pullMeeting(id: QualifiedID) async throws -> Meeting?

/// Pulls all meetings from the server, replacing the locally stored
/// meetings, e.g. as part of a sync.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@ struct MeetingRepositoryTests {

// When

try await sut.pullMeeting(id: Scaffolding.meetingID)
let meeting = try await sut.pullMeeting(id: Scaffolding.meetingID)

// Then

#expect(meeting?.id == Scaffolding.meetingID)
#expect(localStore.storeMeetingMeetingMeetingVoidReceivedInvocations.count == 1)
#expect(localStore.storeMeetingMeetingMeetingVoidReceivedInvocations.first?.id == Scaffolding.meetingID)
#expect(
Expand All @@ -75,10 +76,11 @@ struct MeetingRepositoryTests {

// When

try await sut.pullMeeting(id: Scaffolding.meetingID)
let meeting = try await sut.pullMeeting(id: Scaffolding.meetingID)

// Then

#expect(meeting == nil)
#expect(localStore.storeMeetingMeetingMeetingVoidReceivedInvocations.isEmpty)
#expect(localStore.deleteMeetingIdQualifiedIDVoidReceivedInvocations == [Scaffolding.meetingID])
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,20 @@ public final class ClientSessionComponent {
localStore: MeetingLocalStore(context: syncContext)
)

private lazy var meetingCreateEventProcessor = MeetingCreateEventProcessor(
repository: meetingRepository,
conversationRepository: conversationRepository
)

private lazy var meetingDeleteEventProcessor = MeetingDeleteEventProcessor(
repository: meetingRepository
)

private lazy var meetingUpdateEventProcessor = MeetingUpdateEventProcessor(
repository: meetingRepository,
conversationRepository: conversationRepository
)

private lazy var conversationEventProcessor = ConversationEventProcessor(
accessUpdateEventProcessor: conversationAccessUpdateEventProcessor,
createEventProcessor: conversationCreateEventProcessor,
Expand Down Expand Up @@ -763,12 +777,19 @@ public final class ClientSessionComponent {
createEventProcessor: teamCreateEventProcessor
)

let meetingEventProcessor = MeetingEventProcessor(
createEventProcessor: meetingCreateEventProcessor,
deleteEventProcessor: meetingDeleteEventProcessor,
updateEventProcessor: meetingUpdateEventProcessor
)

return UpdateEventProcessor(
conversationEventProcessor: conversationEventProcessor,
featureConfigEventProcessor: featureConfigEventProcessor,
federationEventProcessor: federationEventProcessor,
userEventProcessor: userEventProcessor,
teamEventProcessor: teamEventProcessor
teamEventProcessor: teamEventProcessor,
meetingEventProcessor: meetingEventProcessor
)
}()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireCallingDomain
import WireNetwork

struct MeetingCreateEventProcessor: MeetingCreateEventProcessorProtocol {

let repository: any MeetingRepositoryProtocol
let conversationRepository: any ConversationRepositoryProtocol

func processEvent(_ event: MeetingCreateEvent) async throws {
guard let meeting = try await repository.pullMeeting(id: event.meetingID) else { return }

// The backend doesn't send a conversation.create event for the meeting's
// conversation (see `CreateMeetingUseCase`), so a meeting created on
// another client references a conversation this client doesn't know yet.
// Pull it and store the meeting again so the two are linked; meetings
// without a locally stored conversation are not listed.
let conversationID = meeting.conversationID
guard await conversationRepository.fetchConversation(
id: conversationID.id,
domain: conversationID.domain
) == nil else { return }

try await conversationRepository.pullConversation(
id: conversationID.id,
domain: conversationID.domain
)
await repository.storeMeeting(meeting)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireCallingDomain
import WireNetwork

struct MeetingDeleteEventProcessor: MeetingDeleteEventProcessorProtocol {

let repository: any MeetingRepositoryProtocol

func processEvent(_ event: MeetingDeleteEvent) async {
await repository.deleteLocalMeeting(id: event.meetingID)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireNetwork

struct MeetingEventProcessor: MeetingEventProcessorProtocol {

let createEventProcessor: any MeetingCreateEventProcessorProtocol
let deleteEventProcessor: any MeetingDeleteEventProcessorProtocol
let updateEventProcessor: any MeetingUpdateEventProcessorProtocol

func processEvent(_ event: MeetingEvent) async throws {
switch event {
case let .create(event):
try await createEventProcessor.processEvent(event)

case let .delete(event):
await deleteEventProcessor.processEvent(event)

case let .update(event):
try await updateEventProcessor.processEvent(event)
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireCallingDomain
import WireNetwork

struct MeetingUpdateEventProcessor: MeetingUpdateEventProcessorProtocol {

let repository: any MeetingRepositoryProtocol
let conversationRepository: any ConversationRepositoryProtocol

func processEvent(_ event: MeetingUpdateEvent) async throws {
guard let meeting = try await repository.pullMeeting(id: event.meetingID) else { return }

// The backend doesn't send a conversation.create event for the meeting's
// conversation (see `CreateMeetingUseCase`), so a meeting created on
// another client references a conversation this client doesn't know yet.
// Pull it and store the meeting again so the two are linked; meetings
// without a locally stored conversation are not listed.
let conversationID = meeting.conversationID
guard await conversationRepository.fetchConversation(
id: conversationID.id,
domain: conversationID.domain
) == nil else { return }

try await conversationRepository.pullConversation(
id: conversationID.id,
domain: conversationID.domain
)
await repository.storeMeeting(meeting)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireNetwork

/// Process meeting create events.

protocol MeetingCreateEventProcessorProtocol {

/// Process a meeting create event.
///
/// - Parameter event: A meeting create event.

func processEvent(_ event: MeetingCreateEvent) async throws

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireNetwork

/// Process meeting delete events.

protocol MeetingDeleteEventProcessorProtocol {

/// Process a meeting delete event.
///
/// - Parameter event: A meeting delete event.

func processEvent(_ event: MeetingDeleteEvent) async

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//
// Wire
// Copyright (C) 2026 Wire Swiss GmbH
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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, see http://www.gnu.org/licenses/.
//

import WireNetwork

/// Process meeting events.

protocol MeetingEventProcessorProtocol {

/// Process a meeting event.
///
/// - Parameter event: A meeting event.

func processEvent(_ event: MeetingEvent) async throws

}
Loading