Skip to content

Commit

Permalink
Fix migration issues
Browse files Browse the repository at this point in the history
  • Loading branch information
ipavlidakis committed Feb 28, 2025
1 parent f4a53d3 commit 9f6fe62
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 21 deletions.
26 changes: 13 additions & 13 deletions Sources/StreamVideo/Utils/Sorting/Participants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,44 +5,44 @@
import Foundation

/// A comparator which sorts participants by whether they are the dominant speaker.
public let dominantSpeaker: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let dominantSpeaker: StreamSortComparator<CallParticipant> = { a, b in
if a.isDominantSpeaker && !b.isDominantSpeaker { return .orderedAscending }
if !a.isDominantSpeaker && b.isDominantSpeaker { return .orderedDescending }
return .orderedSame
}

/// A comparator which sorts participants by whether they are speaking.
public let speaking: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let speaking: StreamSortComparator<CallParticipant> = { a, b in
if a.isSpeaking && !b.isSpeaking { return .orderedAscending }
if !a.isSpeaking && b.isSpeaking { return .orderedDescending }
return .orderedSame
}

public let isSpeaking = speaking
nonisolated(unsafe) public let isSpeaking = speaking

/// A comparator which sorts participants by screen sharing status.
public let screenSharing: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let screenSharing: StreamSortComparator<CallParticipant> = { a, b in
if a.isScreensharing && !b.isScreensharing { return .orderedAscending }
if !a.isScreensharing && b.isScreensharing { return .orderedDescending }
return .orderedSame
}

/// A comparator which sorts participants by video status.
public let publishingVideo: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let publishingVideo: StreamSortComparator<CallParticipant> = { a, b in
if a.hasVideo && !b.hasVideo { return .orderedAscending }
if !a.hasVideo && b.hasVideo { return .orderedDescending }
return .orderedSame
}

/// A comparator which sorts participants by audio status.
public let publishingAudio: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let publishingAudio: StreamSortComparator<CallParticipant> = { a, b in
if a.hasAudio && !b.hasAudio { return .orderedAscending }
if !a.hasAudio && b.hasAudio { return .orderedDescending }
return .orderedSame
}

/// A comparator which prioritizes participants who are pinned.
public let pinned: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let pinned: StreamSortComparator<CallParticipant> = { a, b in
if let aPin = a.pin, let bPin = b.pin {
if !aPin.isLocal && bPin.isLocal { return .orderedAscending }
if aPin.isLocal && !bPin.isLocal { return .orderedDescending }
Expand All @@ -57,7 +57,7 @@ public let pinned: StreamSortComparator<CallParticipant> = { a, b in
}

/// A comparator creator which sets up a comparator prioritizing participants who have a specific role.
public func roles(_ roles: [String] = ["admin", "host", "speaker"]) -> StreamSortComparator<CallParticipant> {
nonisolated public func roles(_ roles: [String] = ["admin", "host", "speaker"]) -> StreamSortComparator<CallParticipant> {
{ a, b in
if hasAnyRole(a, roles) && !hasAnyRole(b, roles) { return .orderedAscending }
if !hasAnyRole(a, roles) && hasAnyRole(b, roles) { return .orderedDescending }
Expand All @@ -66,20 +66,20 @@ public func roles(_ roles: [String] = ["admin", "host", "speaker"]) -> StreamSor
}

/// A comparator which sorts participants by name.
public let name: StreamSortComparator<CallParticipant> = { a, b in
nonisolated(unsafe) public let name: StreamSortComparator<CallParticipant> = { a, b in
a.name.localizedCompare(b.name)
}

/// Helper function to check if a participant has any of the specified roles.
private func hasAnyRole(_ participant: CallParticipant, _ roles: [String]) -> Bool {
nonisolated private func hasAnyRole(_ participant: CallParticipant, _ roles: [String]) -> Bool {
participant.roles.contains(where: roles.contains)
}

/// Comparator for sorting `CallParticipant` objects based on their `id` property
public var id: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.id) }
nonisolated(unsafe) public var id: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.id) }

/// Comparator for sorting `CallParticipant` objects based on their `userId` property
public var userId: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.userId) }
nonisolated(unsafe) public var userId: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.userId) }

/// Comparator for sorting `CallParticipant` objects based on the date and time (`joinedAt`) they joined the call
public var joinedAt: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.joinedAt) }
nonisolated(unsafe) public var joinedAt: StreamSortComparator<CallParticipant> = { comparison($0, $1, keyPath: \.joinedAt) }
16 changes: 8 additions & 8 deletions Sources/StreamVideo/Utils/Sorting/Presets.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ import Foundation

/// A comparator decorator which applies the decorated comparator only if the participant is invisible.
/// This ensures stable sorting when all participants are visible.
public let ifInvisibleBy = conditional { (a: CallParticipant, b: CallParticipant) in
nonisolated(unsafe) public let ifInvisibleBy = conditional { (a: CallParticipant, b: CallParticipant) in
a.showTrack == false || b.showTrack == false
}

public let ifInvisible = ifInvisibleBy
nonisolated(unsafe) public let ifInvisible = ifInvisibleBy

/// The default sorting preset.
public let defaultSortPreset = [
nonisolated(unsafe) public let defaultSortPreset = [
pinned,
screenSharing,
ifInvisibleBy(
Expand All @@ -29,10 +29,10 @@ public let defaultSortPreset = [
ifInvisibleBy(userId)
]

public let defaultComparators = defaultSortPreset
nonisolated(unsafe) public let defaultComparators = defaultSortPreset

/// The sorting preset for speaker layout.
public let speakerLayoutSortPreset = [
nonisolated(unsafe) public let speakerLayoutSortPreset = [
pinned,
screenSharing,
dominantSpeaker,
Expand All @@ -48,10 +48,10 @@ public let speakerLayoutSortPreset = [
ifInvisibleBy(userId)
]

public let screensharing = speakerLayoutSortPreset
nonisolated(unsafe) public let screensharing = speakerLayoutSortPreset

/// The sorting preset for layouts that don't render all participants but instead, render them in pages.
public let paginatedLayoutSortPreset = [
nonisolated(unsafe) public let paginatedLayoutSortPreset = [
pinned,
ifInvisibleBy(
combineComparators(
Expand All @@ -67,7 +67,7 @@ public let paginatedLayoutSortPreset = [
]

/// The sorting preset for livestreams and audio rooms.
public let livestreamOrAudioRoomSortPreset = [
nonisolated(unsafe) public let livestreamOrAudioRoomSortPreset = [
ifInvisibleBy(
combineComparators(
[
Expand Down

0 comments on commit 9f6fe62

Please sign in to comment.