Skip to content

Commit 1f041ea

Browse files
committed
Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios
2 parents ef4d0ad + 8034269 commit 1f041ea

File tree

31 files changed

+773
-314
lines changed

31 files changed

+773
-314
lines changed

submodules/GalleryUI/Sources/GalleryController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public func galleryItemForEntry(
259259
}
260260

261261
if isHLS {
262-
content = HLSVideoContent(id: .message(message.id, message.stableId, file.fileId), userLocation: .peer(message.id.peerId), fileReference: .message(message: MessageReference(message), media: file), streamVideo: streamVideos, loopVideo: loopVideos)
262+
content = HLSVideoContent(id: .message(message.stableId, file.fileId), userLocation: .peer(message.id.peerId), fileReference: .message(message: MessageReference(message), media: file), streamVideo: streamVideos, loopVideo: loopVideos)
263263
} else {
264264
content = NativeVideoContent(id: .message(message.stableId, file.fileId), userLocation: .peer(message.id.peerId), fileReference: .message(message: MessageReference(message), media: file), imageReference: mediaImage.flatMap({ ImageMediaReference.message(message: MessageReference(message), media: $0) }), streamVideo: .conservative, loopVideo: loopVideos, tempFilePath: tempFilePath, captureProtected: captureProtected, storeAfterDownload: generateStoreAfterDownload?(message, file))
265265
}
@@ -1364,7 +1364,7 @@ public class GalleryController: ViewController, StandalonePresentableController,
13641364
})
13651365

13661366
let disableTapNavigation = !(self.context.sharedContext.currentMediaDisplaySettings.with { $0 }.showNextMediaOnTap)
1367-
self.displayNode = GalleryControllerNode(controllerInteraction: controllerInteraction, disableTapNavigation: disableTapNavigation)
1367+
self.displayNode = GalleryControllerNode(context: self.context, controllerInteraction: controllerInteraction, disableTapNavigation: disableTapNavigation)
13681368
self.displayNodeDidLoad()
13691369

13701370
self.galleryNode.statusBar = self.statusBar

submodules/GalleryUI/Sources/GalleryControllerNode.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@ import Display
55
import Postbox
66
import SwipeToDismissGesture
77
import AccountContext
8+
import UndoUI
89

910
open class GalleryControllerNode: ASDisplayNode, ASScrollViewDelegate, ASGestureRecognizerDelegate {
11+
private let context: AccountContext
12+
1013
public var statusBar: StatusBar?
1114
public var navigationBar: NavigationBar? {
1215
didSet {
@@ -48,7 +51,8 @@ open class GalleryControllerNode: ASDisplayNode, ASScrollViewDelegate, ASGesture
4851
}
4952
}
5053

51-
public init(controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0, disableTapNavigation: Bool = false) {
54+
public init(context: AccountContext, controllerInteraction: GalleryControllerInteraction, pageGap: CGFloat = 20.0, disableTapNavigation: Bool = false) {
55+
self.context = context
5256
self.backgroundNode = ASDisplayNode()
5357
self.backgroundNode.backgroundColor = UIColor.black
5458
self.scrollView = UIScrollView()
@@ -471,6 +475,16 @@ open class GalleryControllerNode: ASDisplayNode, ASScrollViewDelegate, ASGesture
471475
let minimalDismissDistance = scrollView.contentSize.height / 12.0
472476
if abs(velocity.y) > 1.0 || abs(distanceFromEquilibrium) > minimalDismissDistance {
473477
if distanceFromEquilibrium > 1.0, let centralItemNode = self.pager.centralItemNode(), centralItemNode.maybePerformActionForSwipeDismiss() {
478+
if let chatController = self.baseNavigationController()?.topViewController as? ChatController {
479+
let presentationData = self.context.sharedContext.currentPresentationData.with({ $0 })
480+
//TODO:localize
481+
chatController.present(UndoOverlayController(
482+
presentationData: presentationData,
483+
content: .hidArchive(title: "Video Minimized", text: "Swipe down on a video to close it.", undo: false),
484+
elevatedLayout: false, action: { _ in true }
485+
), in: .current)
486+
}
487+
474488
return
475489
}
476490

submodules/GalleryUI/Sources/SecretMediaPreviewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ public final class SecretMediaPreviewController: ViewController {
254254
}, controller: { [weak self] in
255255
return self
256256
})
257-
self.displayNode = SecretMediaPreviewControllerNode(controllerInteraction: controllerInteraction)
257+
self.displayNode = SecretMediaPreviewControllerNode(context: self.context, controllerInteraction: controllerInteraction)
258258
self.displayNodeDidLoad()
259259

260260
self.controllerNode.statusPressed = { [weak self] _ in

submodules/InstantPageUI/Sources/InstantPageGalleryController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ public class InstantPageGalleryController: ViewController, StandalonePresentable
377377
}, controller: { [weak self] in
378378
return self
379379
})
380-
self.displayNode = GalleryControllerNode(controllerInteraction: controllerInteraction)
380+
self.displayNode = GalleryControllerNode(context: self.context,controllerInteraction: controllerInteraction)
381381
self.displayNodeDidLoad()
382382

383383
self.galleryNode.statusBar = self.statusBar

submodules/MediaPlayer/Sources/ChunkMediaPlayer.swift

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -230,45 +230,6 @@ private final class ChunkMediaPlayerContext {
230230
self.loadedState = ChunkMediaPlayerLoadedState()
231231

232232
let queue = self.queue
233-
let audioRendererContext = MediaPlayerAudioRenderer(
234-
audioSession: .manager(self.audioSessionManager),
235-
forAudioVideoMessage: self.isAudioVideoMessage,
236-
playAndRecord: self.playAndRecord,
237-
soundMuted: self.soundMuted,
238-
ambient: self.ambient,
239-
mixWithOthers: self.mixWithOthers,
240-
forceAudioToSpeaker: self.forceAudioToSpeaker,
241-
baseRate: self.baseRate,
242-
audioLevelPipe: self.audioLevelPipe,
243-
updatedRate: { [weak self] in
244-
queue.async {
245-
guard let self else {
246-
return
247-
}
248-
self.tick()
249-
}
250-
},
251-
audioPaused: { [weak self] in
252-
queue.async {
253-
guard let self else {
254-
return
255-
}
256-
if self.enableSound {
257-
if self.continuePlayingWithoutSoundOnLostAudioSession {
258-
self.continuePlayingWithoutSound(seek: .start)
259-
} else {
260-
self.pause(lostAudioSession: true, faded: false)
261-
}
262-
} else {
263-
self.seek(timestamp: 0.0, action: .play, notify: true)
264-
}
265-
}
266-
}
267-
)
268-
self.audioRenderer = MediaPlayerAudioRendererContext(renderer: audioRendererContext)
269-
270-
self.loadedState.controlTimebase = ChunkMediaPlayerControlTimebase(timebase: audioRendererContext.audioTimebase, isAudio: true)
271-
272233
self.videoRenderer.visibilityUpdated = { [weak self] value in
273234
assert(queue.isCurrent())
274235

@@ -328,9 +289,6 @@ private final class ChunkMediaPlayerContext {
328289
return .noFrames
329290
})
330291

331-
audioRendererContext.start()
332-
self.tick()
333-
334292
let tickTimer = SwiftSignalKit.Timer(timeout: 1.0 / 25.0, repeat: true, completion: { [weak self] in
335293
self?.tick()
336294
}, queue: self.queue)
@@ -344,6 +302,8 @@ private final class ChunkMediaPlayerContext {
344302
self.partsState = partsState
345303
self.tick()
346304
})
305+
306+
self.tick()
347307
}
348308

349309
deinit {
@@ -457,6 +417,7 @@ private final class ChunkMediaPlayerContext {
457417
} else {
458418
timestamp = 0.0
459419
}
420+
let _ = timestamp
460421
self.seek(timestamp: timestamp, action: .play, notify: true)
461422
} else {
462423
if case let .timecode(time) = seek {
@@ -598,19 +559,82 @@ private final class ChunkMediaPlayerContext {
598559
}
599560
timestamp = max(0.0, timestamp)
600561

601-
if let firstPart = self.loadedState.partStates.first, let mediaBuffers = firstPart.mediaBuffers, mediaBuffers.videoBuffer != nil, mediaBuffers.audioBuffer == nil {
602-
// No audio
562+
var disableAudio = false
563+
if !self.enableSound {
564+
disableAudio = true
565+
}
566+
var hasAudio = false
567+
if let firstPart = self.loadedState.partStates.first, let mediaBuffers = firstPart.mediaBuffers, mediaBuffers.videoBuffer != nil {
568+
if mediaBuffers.audioBuffer != nil {
569+
hasAudio = true
570+
} else {
571+
disableAudio = true
572+
}
573+
}
574+
575+
if disableAudio {
576+
var resetTimebase = false
603577
if self.audioRenderer != nil {
604578
self.audioRenderer?.renderer.stop()
605579
self.audioRenderer = nil
606-
580+
resetTimebase = true
581+
}
582+
if self.loadedState.controlTimebase == nil {
583+
resetTimebase = true
584+
}
585+
586+
if resetTimebase {
607587
var timebase: CMTimebase?
608588
CMTimebaseCreateWithSourceClock(allocator: nil, sourceClock: CMClockGetHostTimeClock(), timebaseOut: &timebase)
609589
let controlTimebase = ChunkMediaPlayerControlTimebase(timebase: timebase!, isAudio: false)
610590
CMTimebaseSetTime(timebase!, time: CMTimeMakeWithSeconds(timestamp, preferredTimescale: 44000))
611591

612592
self.loadedState.controlTimebase = controlTimebase
613593
}
594+
} else if hasAudio {
595+
if self.audioRenderer == nil {
596+
let queue = self.queue
597+
let audioRendererContext = MediaPlayerAudioRenderer(
598+
audioSession: .manager(self.audioSessionManager),
599+
forAudioVideoMessage: self.isAudioVideoMessage,
600+
playAndRecord: self.playAndRecord,
601+
soundMuted: self.soundMuted,
602+
ambient: self.ambient,
603+
mixWithOthers: self.mixWithOthers,
604+
forceAudioToSpeaker: self.forceAudioToSpeaker,
605+
baseRate: self.baseRate,
606+
audioLevelPipe: self.audioLevelPipe,
607+
updatedRate: { [weak self] in
608+
queue.async {
609+
guard let self else {
610+
return
611+
}
612+
self.tick()
613+
}
614+
},
615+
audioPaused: { [weak self] in
616+
queue.async {
617+
guard let self else {
618+
return
619+
}
620+
if self.enableSound {
621+
if self.continuePlayingWithoutSoundOnLostAudioSession {
622+
self.continuePlayingWithoutSound(seek: .start)
623+
} else {
624+
self.pause(lostAudioSession: true, faded: false)
625+
}
626+
} else {
627+
self.seek(timestamp: 0.0, action: .play, notify: true)
628+
}
629+
}
630+
}
631+
)
632+
self.audioRenderer = MediaPlayerAudioRendererContext(renderer: audioRendererContext)
633+
634+
self.loadedState.controlTimebase = ChunkMediaPlayerControlTimebase(timebase: audioRendererContext.audioTimebase, isAudio: true)
635+
audioRendererContext.flushBuffers(at: CMTimeMakeWithSeconds(timestamp, preferredTimescale: 44000), completion: {})
636+
audioRendererContext.start()
637+
}
614638
}
615639

616640
//print("Timestamp: \(timestamp)")

submodules/PassportUI/Sources/SecureIdDocumentGalleryController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class SecureIdDocumentGalleryController: ViewController, StandalonePresentableCo
187187
}, controller: { [weak self] in
188188
return self
189189
})
190-
self.displayNode = GalleryControllerNode(controllerInteraction: controllerInteraction)
190+
self.displayNode = GalleryControllerNode(context: self.context, controllerInteraction: controllerInteraction)
191191
self.displayNodeDidLoad()
192192

193193
self.galleryNode.statusBar = self.statusBar

submodules/PeerAvatarGalleryUI/Sources/AvatarGalleryController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ public class AvatarGalleryController: ViewController, StandalonePresentableContr
633633
}, controller: { [weak self] in
634634
return self
635635
})
636-
self.displayNode = GalleryControllerNode(controllerInteraction: controllerInteraction)
636+
self.displayNode = GalleryControllerNode(context: self.context, controllerInteraction: controllerInteraction)
637637
self.displayNodeDidLoad()
638638

639639
self.galleryNode.pager.updateOnReplacement = true

submodules/TelegramBaseController/Sources/TelegramBaseController.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,8 @@ open class TelegramBaseController: ViewController, KeyShortcutResponder {
472472
let controller = UndoOverlayController(
473473
presentationData: presentationData,
474474
content: .universal(
475-
animation: "anim_profileunmute",
476-
scale: 0.075,
475+
animation: "anim_set_notification",
476+
scale: 0.06,
477477
colors: [
478478
"Middle.Group 1.Fill 1": UIColor.white,
479479
"Top.Group 1.Fill 1": UIColor.white,

0 commit comments

Comments
 (0)