Skip to content

Commit cb79afd

Browse files
committed
Merge commit '85a51978f04d76fb4e5e4e8ec3a4b08c9874b5f8' into beta
2 parents 6ced157 + 85a5197 commit cb79afd

File tree

3 files changed

+65
-39
lines changed

3 files changed

+65
-39
lines changed

submodules/AccountContext/Sources/SharedMediaPlayer.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ public protocol SharedMediaPlaylistLocation {
148148
func isEqual(to: SharedMediaPlaylistLocation) -> Bool
149149
}
150150

151+
public func areSharedMediaPlaylistsEqual(_ lhs: SharedMediaPlaylist?, _ rhs: SharedMediaPlaylist?) -> Bool {
152+
if let lhs = lhs, let rhs = rhs {
153+
return lhs.id.isEqual(to: rhs.id) && lhs.location.isEqual(to: rhs.location)
154+
} else if (lhs != nil) != (rhs != nil) {
155+
return false
156+
} else {
157+
return true
158+
}
159+
}
160+
151161
public protocol SharedMediaPlaylist: AnyObject {
152162
var id: SharedMediaPlaylistId { get }
153163
var location: SharedMediaPlaylistLocation { get }

submodules/TelegramUI/Sources/MediaManager.swift

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -494,57 +494,71 @@ public final class MediaManagerImpl: NSObject, MediaManager {
494494
switch type {
495495
case .voice:
496496
strongSelf.musicMediaPlayer?.control(.playback(.pause))
497-
strongSelf.voiceMediaPlayer?.stop()
498497
if let (account, playlist, settings, storedState) = inputData {
499-
var continueInstantVideoLoopAfterFinish: Bool = true
500-
var controlPlaybackWithProximity: Bool = true
501-
if let playlist = playlist as? PeerMessagesMediaPlaylist {
502-
continueInstantVideoLoopAfterFinish = playlist.context.sharedContext.energyUsageSettings.autoplayVideo
503-
controlPlaybackWithProximity = playlist.context.sharedContext.currentMediaInputSettings.with({ $0.enableRaiseToSpeak })
504-
}
505-
506-
let voiceMediaPlayer = SharedMediaPlayer(mediaManager: strongSelf, inForeground: strongSelf.inForeground, account: account, audioSession: strongSelf.audioSession, overlayMediaManager: strongSelf.overlayMediaManager, playlist: playlist, initialOrder: .reversed, initialLooping: .none, initialPlaybackRate: settings.voicePlaybackRate, playerIndex: nextPlayerIndex, controlPlaybackWithProximity: controlPlaybackWithProximity, type: type, continueInstantVideoLoopAfterFinish: continueInstantVideoLoopAfterFinish)
507-
strongSelf.voiceMediaPlayer = voiceMediaPlayer
508-
voiceMediaPlayer.playedToEnd = { [weak voiceMediaPlayer] in
509-
if let strongSelf = self, let voiceMediaPlayer = voiceMediaPlayer, voiceMediaPlayer === strongSelf.voiceMediaPlayer {
510-
voiceMediaPlayer.stop()
511-
strongSelf.voiceMediaPlayer = nil
498+
if areSharedMediaPlaylistsEqual(playlist, strongSelf.voiceMediaPlayer?.playlist), case .seek = control {
499+
strongSelf.voiceMediaPlayer?.control(control)
500+
} else {
501+
strongSelf.voiceMediaPlayer?.stop()
502+
var continueInstantVideoLoopAfterFinish: Bool = true
503+
var controlPlaybackWithProximity: Bool = true
504+
if let playlist = playlist as? PeerMessagesMediaPlaylist {
505+
continueInstantVideoLoopAfterFinish = playlist.context.sharedContext.energyUsageSettings.autoplayVideo
506+
controlPlaybackWithProximity = playlist.context.sharedContext.currentMediaInputSettings.with({ $0.enableRaiseToSpeak })
512507
}
513-
}
514-
voiceMediaPlayer.cancelled = { [weak voiceMediaPlayer] in
515-
if let strongSelf = self, let voiceMediaPlayer = voiceMediaPlayer, voiceMediaPlayer === strongSelf.voiceMediaPlayer {
516-
voiceMediaPlayer.stop()
517-
strongSelf.voiceMediaPlayer = nil
508+
509+
let voiceMediaPlayer = SharedMediaPlayer(mediaManager: strongSelf, inForeground: strongSelf.inForeground, account: account, audioSession: strongSelf.audioSession, overlayMediaManager: strongSelf.overlayMediaManager, playlist: playlist, initialOrder: .reversed, initialLooping: .none, initialPlaybackRate: settings.voicePlaybackRate, playerIndex: nextPlayerIndex, controlPlaybackWithProximity: controlPlaybackWithProximity, type: type, continueInstantVideoLoopAfterFinish: continueInstantVideoLoopAfterFinish)
510+
strongSelf.voiceMediaPlayer = voiceMediaPlayer
511+
voiceMediaPlayer.playedToEnd = { [weak voiceMediaPlayer] in
512+
if let strongSelf = self, let voiceMediaPlayer = voiceMediaPlayer, voiceMediaPlayer === strongSelf.voiceMediaPlayer {
513+
voiceMediaPlayer.stop()
514+
strongSelf.voiceMediaPlayer = nil
515+
}
518516
}
517+
voiceMediaPlayer.cancelled = { [weak voiceMediaPlayer] in
518+
if let strongSelf = self, let voiceMediaPlayer = voiceMediaPlayer, voiceMediaPlayer === strongSelf.voiceMediaPlayer {
519+
voiceMediaPlayer.stop()
520+
strongSelf.voiceMediaPlayer = nil
521+
}
522+
}
523+
524+
var control = control
525+
if case .seek = control {
526+
} else if let timestamp = storedState?.timestamp {
527+
control = .seek(timestamp)
528+
}
529+
voiceMediaPlayer.control(control)
530+
voiceMediaPlayer.control(.playback(.play))
519531
}
520-
521-
var control = control
522-
if let timestamp = storedState?.timestamp {
523-
control = .seek(timestamp)
524-
}
525-
voiceMediaPlayer.control(control)
526532
} else {
533+
strongSelf.voiceMediaPlayer?.stop()
527534
strongSelf.voiceMediaPlayer = nil
528535
}
529536
case .music, .file:
530-
strongSelf.musicMediaPlayer?.stop()
531537
strongSelf.voiceMediaPlayer?.control(.playback(.pause))
532538
if let (account, playlist, settings, storedState) = inputData {
533-
let musicMediaPlayer = SharedMediaPlayer(mediaManager: strongSelf, inForeground: strongSelf.inForeground, account: account, audioSession: strongSelf.audioSession, overlayMediaManager: strongSelf.overlayMediaManager, playlist: playlist, initialOrder: settings.order, initialLooping: settings.looping, initialPlaybackRate: storedState?.playbackRate ?? .x1, playerIndex: nextPlayerIndex, controlPlaybackWithProximity: false, type: type, continueInstantVideoLoopAfterFinish: true)
534-
strongSelf.musicMediaPlayer = musicMediaPlayer
535-
musicMediaPlayer.cancelled = { [weak musicMediaPlayer] in
536-
if let strongSelf = self, let musicMediaPlayer = musicMediaPlayer, musicMediaPlayer === strongSelf.musicMediaPlayer {
537-
musicMediaPlayer.stop()
538-
strongSelf.musicMediaPlayer = nil
539+
if areSharedMediaPlaylistsEqual(playlist, strongSelf.musicMediaPlayer?.playlist), case .seek = control {
540+
strongSelf.musicMediaPlayer?.control(control)
541+
} else {
542+
strongSelf.musicMediaPlayer?.stop()
543+
let musicMediaPlayer = SharedMediaPlayer(mediaManager: strongSelf, inForeground: strongSelf.inForeground, account: account, audioSession: strongSelf.audioSession, overlayMediaManager: strongSelf.overlayMediaManager, playlist: playlist, initialOrder: settings.order, initialLooping: settings.looping, initialPlaybackRate: storedState?.playbackRate ?? .x1, playerIndex: nextPlayerIndex, controlPlaybackWithProximity: false, type: type, continueInstantVideoLoopAfterFinish: true)
544+
strongSelf.musicMediaPlayer = musicMediaPlayer
545+
musicMediaPlayer.cancelled = { [weak musicMediaPlayer] in
546+
if let strongSelf = self, let musicMediaPlayer = musicMediaPlayer, musicMediaPlayer === strongSelf.musicMediaPlayer {
547+
musicMediaPlayer.stop()
548+
strongSelf.musicMediaPlayer = nil
549+
}
539550
}
551+
552+
var control = control
553+
if case .seek = control {
554+
} else if let timestamp = storedState?.timestamp {
555+
control = .seek(timestamp)
556+
}
557+
strongSelf.musicMediaPlayer?.control(control)
558+
strongSelf.musicMediaPlayer?.control(.playback(.play))
540559
}
541-
542-
var control = control
543-
if let timestamp = storedState?.timestamp {
544-
control = .seek(timestamp)
545-
}
546-
strongSelf.musicMediaPlayer?.control(control)
547560
} else {
561+
strongSelf.musicMediaPlayer?.stop()
548562
strongSelf.musicMediaPlayer = nil
549563
}
550564
}

submodules/TelegramUI/Sources/SharedMediaPlayer.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ final class SharedMediaPlayer {
116116
private let audioSession: ManagedAudioSession
117117
private let overlayMediaManager: OverlayMediaManager
118118
private let playerIndex: Int32
119-
private let playlist: SharedMediaPlaylist
119+
let playlist: SharedMediaPlaylist
120120

121121
private var playbackRate: AudioPlaybackRate
122122

@@ -194,6 +194,8 @@ final class SharedMediaPlayer {
194194

195195
if controlPlaybackWithProximity {
196196
self.forceAudioToSpeaker = !DeviceProximityManager.shared().currentValue()
197+
} else {
198+
self.forceAudioToSpeaker = true
197199
}
198200

199201
playlist.currentItemDisappeared = { [weak self] in

0 commit comments

Comments
 (0)