no message

This commit is contained in:
Peter 2018-09-25 01:36:44 +01:00
parent c55d7615a3
commit 97fc5d83e1
19 changed files with 82 additions and 29 deletions

View File

@ -11,8 +11,8 @@ private final class ChannelMembersControllerArguments {
let setPeerIdWithRevealedOptions: (PeerId?, PeerId?) -> Void
let removePeer: (PeerId) -> Void
let openPeer: (Peer) -> Void
let inviteViaLink:()->Void
init(account: Account, addMember: @escaping () -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, removePeer: @escaping (PeerId) -> Void, openPeer: @escaping (Peer) -> Void, inviteViaLink:@escaping()->Void) {
let inviteViaLink: ()->Void
init(account: Account, addMember: @escaping () -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, removePeer: @escaping (PeerId) -> Void, openPeer: @escaping (Peer) -> Void, inviteViaLink: @escaping()->Void) {
self.account = account
self.addMember = addMember
self.setPeerIdWithRevealedOptions = setPeerIdWithRevealedOptions
@ -243,7 +243,6 @@ private func ChannelMembersControllerEntries(account: Account, presentationData:
var entries: [ChannelMembersEntry] = []
if let participants = participants {
var canAddMember: Bool = false
if let peer = view.peers[view.peerId] as? TelegramChannel {
canAddMember = peer.hasAdminRights(.canInviteUsers)
@ -251,7 +250,9 @@ private func ChannelMembersControllerEntries(account: Account, presentationData:
if canAddMember {
entries.append(.addMember(presentationData.theme, presentationData.strings.Channel_Members_AddMembers))
entries.append(.inviteLink(presentationData.theme, presentationData.strings.Channel_Members_InviteLink))
if let peer = view.peers[view.peerId] as? TelegramChannel, peer.addressName == nil {
entries.append(.inviteLink(presentationData.theme, presentationData.strings.Channel_Members_InviteLink))
}
entries.append(.addMemberInfo(presentationData.theme, presentationData.strings.Channel_Members_AddMembersHelp))
}

View File

@ -572,7 +572,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode {
}
if let message = message, message.author?.id == account.peerId && !hasDraft {
if message.flags.isSending {
if message.flags.isSending && !message.isSentOrAcknowledged {
statusImage = PresentationResourcesChatList.pendingImage(item.presentationData.theme)
} else {
if let combinedReadState = combinedReadState, combinedReadState.isOutgoingMessageIndexRead(MessageIndex(message)) {

View File

@ -400,7 +400,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
} else {
if message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if message.flags.isSending {
} else if message.flags.isSending && !message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: messageRead))
@ -482,7 +482,7 @@ final class ChatMessageAttachedContentNode: ASDisplayNode {
} else {
statusType = .BubbleOutgoing(.Failed)
}
} else if message.flags.isSending {
} else if message.flags.isSending && !message.isSentOrAcknowledged {
if imageMode {
statusType = .ImageOutgoing(.Sending)
} else {

View File

@ -697,7 +697,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView {
} else {
if message.flags.contains(.Failed) {
statusType = .ImageOutgoing(.Failed)
} else if message.flags.isSending {
} else if message.flags.isSending && !message.isSentOrAcknowledged {
statusType = .ImageOutgoing(.Sending)
} else {
statusType = .ImageOutgoing(.Sent(read: item.read))

View File

@ -161,7 +161,7 @@ class ChatMessageContactBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if item.message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: item.read))

View File

@ -48,7 +48,7 @@ class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if item.message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: item.read))

View File

@ -208,7 +208,7 @@ class ChatMessageInteractiveInstantVideoNode: ASDisplayNode {
case .free:
if item.message.flags.contains(.Failed) {
statusType = .FreeOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .FreeOutgoing(.Sending)
} else {
statusType = .FreeOutgoing(.Sent(read: item.read))
@ -216,7 +216,7 @@ class ChatMessageInteractiveInstantVideoNode: ASDisplayNode {
case .bubble:
if item.message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: item.read))

View File

@ -435,7 +435,7 @@ public final class ChatMessageItem: ListViewItem, CustomStringConvertible {
apply(animation)
if let nodeValue = node() as? ChatMessageItemView {
nodeValue.updateSelectionState(animated: false)
nodeValue.updateHighlightedState(animated: false)
nodeValue.updateHighlightedState(animated: false)
}
})
}

View File

@ -199,7 +199,7 @@ class ChatMessageMapBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if item.message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: item.read))
@ -211,7 +211,7 @@ class ChatMessageMapBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if item.message.flags.contains(.Failed) {
statusType = .ImageOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .ImageOutgoing(.Sending)
} else {
statusType = .ImageOutgoing(.Sent(read: item.read))

View File

@ -129,7 +129,7 @@ class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if item.message.flags.contains(.Failed) {
statusType = .ImageOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .ImageOutgoing(.Sending)
} else {
statusType = .ImageOutgoing(.Sent(read: item.read))

View File

@ -201,7 +201,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView {
} else {
if item.message.flags.contains(.Failed) {
statusType = .FreeOutgoing(.Failed)
} else if item.message.flags.isSending {
} else if item.message.flags.isSending && !item.message.isSentOrAcknowledged {
statusType = .FreeOutgoing(.Sending)
} else {
statusType = .FreeOutgoing(.Sent(read: item.read))

View File

@ -97,7 +97,7 @@ class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
} else {
if message.flags.contains(.Failed) {
statusType = .BubbleOutgoing(.Failed)
} else if message.flags.isSending {
} else if message.flags.isSending && !message.isSentOrAcknowledged {
statusType = .BubbleOutgoing(.Sending)
} else {
statusType = .BubbleOutgoing(.Sent(read: item.read))

View File

@ -745,8 +745,13 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa
}
if let editingState = state.editingState {
if let group = view.peers[view.peerId] as? TelegramGroup, case .creator = group.role {
entries.append(.adminManagement(presentationData.theme, presentationData.strings.GroupInfo_ChatAdmins))
if let group = view.peers[view.peerId] as? TelegramGroup {
if case .creator = group.role {
entries.append(.adminManagement(presentationData.theme, presentationData.strings.GroupInfo_ChatAdmins))
}
entries.append(GroupInfoEntry.notifications(presentationData.theme, presentationData.strings.GroupInfo_Notifications, notificationsText))
entries.append(GroupInfoEntry.notificationSound(presentationData.theme, presentationData.strings.GroupInfo_Sound, localizedPeerNotificationSoundString(strings: presentationData.strings, sound: peerNotificationSettings.messageSound, default: globalNotificationSettings.effective.groupChats.sound)))
} else if let cachedChannelData = view.cachedData as? CachedChannelData {
if isCreator {
entries.append(GroupInfoEntry.groupTypeSetup(presentationData.theme, presentationData.strings.GroupInfo_GroupType, isPublic ? presentationData.strings.Channel_Setup_TypePublic : presentationData.strings.Channel_Setup_TypePrivate))

View File

@ -24,6 +24,26 @@ func presentedLegacyCamera(account: Account, peer: Peer, cameraView: TGAttachmen
controller = TGCameraController()
}
if #available(iOSApplicationExtension 10.0, *) {
} else {
controller.customPresentOverlayController = { [weak legacyController] overlayController in
guard let legacyController = legacyController, let overlayController = overlayController else {
return
}
let presentationData = account.telegramApplicationContext.currentPresentationData.with { $0 }
let overlayLegacyController = LegacyController(presentation: .custom, theme: presentationData.theme)
overlayLegacyController.supportedOrientations = ViewControllerSupportedOrientations(regularSize: .portrait, compactSize: .portrait)
overlayLegacyController.statusBar.statusBarStyle = .Hide
overlayLegacyController.bind(controller: overlayController)
overlayController.customDismissSelf = { [weak overlayLegacyController] in
overlayLegacyController?.dismiss()
}
legacyController.present(overlayLegacyController, in: .window(.root))
}
}
controller.isImportant = true
controller.shouldStoreCapturedAssets = saveCapturedPhotos && !isSecretChat
controller.allowCaptions = true

View File

@ -615,6 +615,7 @@ public final class ManagedAudioSession {
}
private func setupOutputMode(_ outputMode: AudioSessionOutputMode, type: ManagedAudioSessionType) throws {
print("ManagedAudioSession setup \(outputMode) for \(type)")
var resetToBuiltin = false
switch outputMode {
case .system:
@ -625,6 +626,16 @@ public final class ManagedAudioSession {
resetToBuiltin = true
case .speaker:
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
if type == .voiceCall {
if let routes = AVAudioSession.sharedInstance().availableInputs {
for route in routes {
if route.portType == AVAudioSessionPortBuiltInMic {
let _ = try? AVAudioSession.sharedInstance().setPreferredInput(route)
break
}
}
}
}
case .headphones:
break
case let .port(port):

View File

@ -161,6 +161,9 @@ final class NetworkStatusTitleView: UIView, NavigationBarTitleView, NavigationBa
alignedTitleWidth -= 20.0
proxyPadding += 39.0
}
if !self.lockView.isHidden {
maxTitleWidth -= 10.0
}
let titleSize = self.titleNode.updateLayout(CGSize(width: max(1.0, maxTitleWidth), height: size.height))

View File

@ -77,7 +77,7 @@ func stringForUserPresence(strings: PresentationStrings, day: RelativeTimestampF
case .today:
dayString = strings.LastSeen_AtDate(strings.Time_TodayAt(stringForShortTimestamp(hours: hours, minutes: minutes, timeFormat: timeFormat)).0).0
case .yesterday:
dayString = strings.LastSeen_AtDate(strings.Time_YesterdayAt(stringForShortTimestamp(hours: hours, minutes: minutes, timeFormat: timeFormat)).0).0
dayString = strings.LastSeen_YesterdayAt(stringForShortTimestamp(hours: hours, minutes: minutes, timeFormat: timeFormat)).0
}
return dayString
}
@ -269,7 +269,8 @@ func stringAndActivityForUserPresence(strings: PresentationStrings, timeFormat:
if dayDifference == 0 || dayDifference == -1 {
let day: RelativeTimestampFormatDay
if dayDifference == 0 {
day = .today
let minutes = difference / (60 * 60)
return (strings.LastSeen_HoursAgo(minutes), false)
} else {
day = .yesterday
}

View File

@ -29,7 +29,6 @@ private final class PresentationCallToneRenderer {
self.queue = queue
self.tone = tone
let data = presentationCallToneData(tone)
var controlImpl: ((MediaPlayerAudioSessionCustomControl) -> Disposable)?
@ -52,18 +51,28 @@ private final class PresentationCallToneRenderer {
let toneDataOffset = Atomic<Int>(value: 0)
let toneDataMaxOffset: Int?
if let loopCount = tone.loopCount {
toneDataMaxOffset = (data?.count ?? 0) * loopCount
} else {
toneDataMaxOffset = nil
}
let toneData = Atomic<Data?>(value: nil)
self.toneRenderer.beginRequestingFrames(queue: DispatchQueue.global(), takeFrame: {
var data = toneData.with { $0 }
if data == nil {
data = presentationCallToneData(tone)
if data != nil {
let _ = toneData.swap(data)
}
}
guard let toneData = data else {
return .finished
}
let toneDataMaxOffset: Int?
if let loopCount = tone.loopCount {
toneDataMaxOffset = (data?.count ?? 0) * loopCount
} else {
toneDataMaxOffset = nil
}
let frameSize = 44100
var takeOffset: Int?

View File

@ -2186,6 +2186,9 @@ final class SecureIdDocumentFormControllerNode: FormControllerNode<SecureIdDocum
case .postcode:
valueKey = .address
errorKey = .field(.address(.postCode))
case .city:
valueKey = .address
errorKey = .field(.address(.city))
default:
break
}