[WIP] Stories

This commit is contained in:
Ali 2023-05-16 18:46:45 +04:00
parent 952d9fd88f
commit e6ebc89b85
3 changed files with 61 additions and 52 deletions

View File

@ -502,7 +502,11 @@ public func peersNearbyController(context: AccountContext) -> ViewController {
}) })
|> mapToSignal { coordinate -> Signal<PeersNearbyData?, NoError> in |> mapToSignal { coordinate -> Signal<PeersNearbyData?, NoError> in
guard let coordinate = coordinate else { guard let coordinate = coordinate else {
let peersNearbyContext = PeersNearbyContext(network: context.account.network, stateManager: context.account.stateManager, coordinate: nil) #if !DEBUG
#error("fix")
#endif
preconditionFailure()
/*let peersNearbyContext = PeersNearbyContext(network: context.account.network, stateManager: context.account.stateManager, coordinate: nil)
return peersNearbyContext.get() return peersNearbyContext.get()
|> map { peersNearby -> PeersNearbyData in |> map { peersNearby -> PeersNearbyData in
var isVisible = false var isVisible = false
@ -515,7 +519,7 @@ public func peersNearbyController(context: AccountContext) -> ViewController {
} }
} }
return PeersNearbyData(latitude: 0.0, longitude: 0.0, address: nil, visible: isVisible, accountPeerId: context.account.peerId, users: [], groups: [], channels: []) return PeersNearbyData(latitude: 0.0, longitude: 0.0, address: nil, visible: isVisible, accountPeerId: context.account.peerId, users: [], groups: [], channels: [])
} }*/
} }
return Signal { subscriber in return Signal { subscriber in

View File

@ -82,6 +82,8 @@ public final class RippleEffectView: MTKView {
self.framebufferOnly = true self.framebufferOnly = true
self.isPaused = false self.isPaused = false
self.isUserInteractionEnabled = false
} }
public func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) { public func mtkView(_ view: MTKView, drawableSizeWillChange size: CGSize) {

View File

@ -24,6 +24,7 @@ import LegacyMediaPickerUI
import LegacyCamera import LegacyCamera
import AvatarNode import AvatarNode
import LocalMediaResources import LocalMediaResources
import ShareWithPeersScreen
private class DetailsChatPlaceholderNode: ASDisplayNode, NavigationDetailsPlaceholderNode { private class DetailsChatPlaceholderNode: ASDisplayNode, NavigationDetailsPlaceholderNode {
private var presentationData: PresentationData private var presentationData: PresentationData
@ -349,57 +350,59 @@ public final class TelegramRootController: NavigationController, TelegramRootCon
return nil return nil
} }
}, completion: { mediaResult, commit in }, completion: { mediaResult, commit in
let privacy = EngineStoryPrivacy(base: .everyone, additionallyIncludePeers: []) let stateContext = ShareWithPeersScreen.StateContext(context: self.context)
// if additionalCategoryIds.contains(AdditionalCategoryId.everyone.rawValue) { let _ = (stateContext.ready |> filter { $0 } |> take(1) |> deliverOnMainQueue).start(next: { [weak self] _ in
// privacy.base = .everyone guard let self else {
// } else if additionalCategoryIds.contains(AdditionalCategoryId.contacts.rawValue) { return
// privacy.base = .contacts
// } else if additionalCategoryIds.contains(AdditionalCategoryId.closeFriends.rawValue) {
// privacy.base = .closeFriends
// }
// privacy.additionallyIncludePeers = peerIds.compactMap { id -> EnginePeer.Id? in
// switch id {
// case let .peer(peerId):
// return peerId
// default:
// return nil
// }
// }
if let chatListController = self.chatListController as? ChatListControllerImpl, let storyListContext = chatListController.storyListContext {
switch mediaResult {
case let .image(image, dimensions, caption):
if let data = image.jpegData(compressionQuality: 0.8) {
storyListContext.upload(media: .image(dimensions: dimensions, data: data), text: caption?.string ?? "", entities: [], privacy: privacy)
Queue.mainQueue().after(0.3, { [weak chatListController] in
chatListController?.animateStoryUploadRipple()
})
}
case let .video(content, _, values, duration, dimensions, caption):
let adjustments: VideoMediaResourceAdjustments
if let valuesData = try? JSONEncoder().encode(values) {
let data = MemoryBuffer(data: valuesData)
let digest = MemoryBuffer(data: data.md5Digest())
adjustments = VideoMediaResourceAdjustments(data: data, digest: digest, isStory: true)
let resource: TelegramMediaResource
switch content {
case let .imageFile(path):
resource = LocalFileVideoMediaResource(randomId: Int64.random(in: .min ... .max), path: path, adjustments: adjustments)
case let .videoFile(path):
resource = LocalFileVideoMediaResource(randomId: Int64.random(in: .min ... .max), path: path, adjustments: adjustments)
case let .asset(localIdentifier):
resource = VideoLibraryMediaResource(localIdentifier: localIdentifier, conversion: .compress(adjustments))
}
storyListContext.upload(media: .video(dimensions: dimensions, duration: Int(duration), resource: resource), text: caption?.string ?? "", entities: [], privacy: privacy)
Queue.mainQueue().after(0.3, { [weak chatListController] in
chatListController?.animateStoryUploadRipple()
})
}
} }
} guard let controller = self.viewControllers.last as? ViewController else {
dismissCameraImpl?() return
commit() }
controller.push(ShareWithPeersScreen(context: self.context, stateContext: stateContext, completion: { [weak self] privacy in
guard let self else {
dismissCameraImpl?()
commit()
return
}
if let chatListController = self.chatListController as? ChatListControllerImpl, let storyListContext = chatListController.storyListContext {
switch mediaResult {
case let .image(image, dimensions, caption):
if let data = image.jpegData(compressionQuality: 0.8) {
storyListContext.upload(media: .image(dimensions: dimensions, data: data), text: caption?.string ?? "", entities: [], privacy: privacy)
Queue.mainQueue().after(0.3, { [weak chatListController] in
chatListController?.animateStoryUploadRipple()
})
}
case let .video(content, _, values, duration, dimensions, caption):
let adjustments: VideoMediaResourceAdjustments
if let valuesData = try? JSONEncoder().encode(values) {
let data = MemoryBuffer(data: valuesData)
let digest = MemoryBuffer(data: data.md5Digest())
adjustments = VideoMediaResourceAdjustments(data: data, digest: digest, isStory: true)
let resource: TelegramMediaResource
switch content {
case let .imageFile(path):
resource = LocalFileVideoMediaResource(randomId: Int64.random(in: .min ... .max), path: path, adjustments: adjustments)
case let .videoFile(path):
resource = LocalFileVideoMediaResource(randomId: Int64.random(in: .min ... .max), path: path, adjustments: adjustments)
case let .asset(localIdentifier):
resource = VideoLibraryMediaResource(localIdentifier: localIdentifier, conversion: .compress(adjustments))
}
storyListContext.upload(media: .video(dimensions: dimensions, duration: Int(duration), resource: resource), text: caption?.string ?? "", entities: [], privacy: privacy)
Queue.mainQueue().after(0.3, { [weak chatListController] in
chatListController?.animateStoryUploadRipple()
})
}
}
}
dismissCameraImpl?()
commit()
}))
})
}) })
controller.sourceHint = .camera controller.sourceHint = .camera
controller.cancelled = { controller.cancelled = {