diff --git a/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift b/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift index 0108f5377c..80e0c00467 100644 --- a/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift +++ b/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift @@ -93,6 +93,7 @@ private enum SGBoolSetting: String { case wideChannelPosts case forceEmojiTab case forceBuiltInMic + case secondsInMessages case hideChannelBottomButton case confirmCalls case swipeForVideoPIP @@ -260,6 +261,7 @@ private func SGControllerEntries(presentationData: PresentationData, callListSet entries.append(.toggle(id: id.count, section: .other, settingName: .wideChannelPosts, value: SGSimpleSettings.shared.wideChannelPosts, text: i18n("Settings.wideChannelPosts", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .forceBuiltInMic, value: SGSimpleSettings.shared.forceBuiltInMic, text: i18n("Settings.forceBuiltInMic", lang), enabled: true)) entries.append(.notice(id: id.count, section: .other, text: i18n("Settings.forceBuiltInMic.Notice", lang))) + entries.append(.toggle(id: id.count, section: .other, settingName: .secondsInMessages, value: SGSimpleSettings.shared.secondsInMessages, text: i18n("Settings.secondsInMessages", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .messageDoubleTapActionOutgoingEdit, value: SGSimpleSettings.shared.messageDoubleTapActionOutgoing == SGSimpleSettings.MessageDoubleTapAction.edit.rawValue, text: i18n("Settings.messageDoubleTapActionOutgoingEdit", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .hideRecordingButton, value: !SGSimpleSettings.shared.hideRecordingButton, text: i18n("Settings.RecordingButton", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .disableSnapDeletionEffect, value: !SGSimpleSettings.shared.disableSnapDeletionEffect, text: i18n("Settings.SnapDeletionEffect", lang), enabled: true)) @@ -465,6 +467,8 @@ public func sgSettingsController(context: AccountContext/*, focusOnItemTag: Int? SGSimpleSettings.shared.forceBuiltInMic = value case .hideChannelBottomButton: SGSimpleSettings.shared.hideChannelBottomButton = !value + case .secondsInMessages: + SGSimpleSettings.shared.secondsInMessages = value case .confirmCalls: SGSimpleSettings.shared.confirmCalls = value case .swipeForVideoPIP: diff --git a/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift b/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift index 286bc8ad3f..a34df91acf 100644 --- a/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift +++ b/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift @@ -118,6 +118,7 @@ public class SGSimpleSettings { case wideChannelPosts case forceEmojiTab case forceBuiltInMic + case secondsInMessages case hideChannelBottomButton case forceSystemSharing case confirmCalls @@ -418,6 +419,9 @@ public class SGSimpleSettings { @UserDefault(key: Keys.forceBuiltInMic.rawValue) public var forceBuiltInMic: Bool + @UserDefault(key: Keys.secondsInMessages.rawValue) + public var secondsInMessages: Bool + @UserDefault(key: Keys.hideChannelBottomButton.rawValue) public var hideChannelBottomButton: Bool diff --git a/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings index ba92059e9c..3108e645a3 100644 --- a/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings @@ -139,6 +139,8 @@ "Settings.showChannelBottomButton" = "Channel Bottom Panel"; +"Settings.secondsInMessages" = "Show seconds in messages"; + "Settings.CallConfirmation" = "Call Confirmation"; "Settings.CallConfirmation.Notice" = "Swiftgram will ask for your confirmation before making a call."; diff --git a/submodules/TelegramStringFormatting/Sources/DateFormat.swift b/submodules/TelegramStringFormatting/Sources/DateFormat.swift index 569eff8c9c..8d84ef29c7 100644 --- a/submodules/TelegramStringFormatting/Sources/DateFormat.swift +++ b/submodules/TelegramStringFormatting/Sources/DateFormat.swift @@ -1,3 +1,4 @@ +import SGSimpleSettings import Foundation import TelegramPresentationData import TelegramUIPreferences @@ -46,8 +47,11 @@ public func stringForMessageTimestamp(timestamp: Int32, dateTimeFormat: Presenta } else { gmtime_r(&t, &timeinfo) } - - return stringForShortTimestamp(hours: timeinfo.tm_hour, minutes: timeinfo.tm_min, dateTimeFormat: dateTimeFormat) + if SGSimpleSettings.shared.secondsInMessages { + return stringForShortTimestampWithSeconds(hours: timeinfo.tm_hour, minutes: timeinfo.tm_min, seconds: timeinfo.tm_sec, dateTimeFormat: dateTimeFormat) + } else { + return stringForShortTimestamp(hours: timeinfo.tm_hour, minutes: timeinfo.tm_min, dateTimeFormat: dateTimeFormat) + } } public func getDateTimeComponents(timestamp: Int32) -> (day: Int32, month: Int32, year: Int32, hour: Int32, minutes: Int32) { @@ -222,3 +226,38 @@ public func stringForDateWithoutDayAndMonth(date: Date, timeZone: TimeZone? = Ti formatter.setLocalizedDateFormatFromTemplate("yyyy") return formatter.string(from: date) } + +public func stringForShortTimestampWithSeconds(hours: Int32, minutes: Int32, seconds: Int32, dateTimeFormat: PresentationDateTimeFormat) -> String { + switch dateTimeFormat.timeFormat { + case .regular: + let hourString: String + if hours == 0 { + hourString = "12" + } else if hours > 12 { + hourString = "\(hours - 12)" + } else { + hourString = "\(hours)" + } + + let periodString: String + if hours >= 12 { + periodString = "PM" + } else { + periodString = "AM" + } + + let minuteString: String + if minutes >= 10 { + minuteString = "\(minutes)" + } else { + minuteString = "0\(minutes)" + } + if seconds >= 10 { + return "\(hourString):\(minuteString):\(seconds)\u{00a0}\(periodString)" + } else { + return "\(hourString):\(minuteString):0\(seconds)\u{00a0}\(periodString)" + } + case .military: + return String(format: "%02d:%02d:%02d", arguments: [Int(hours), Int(minutes), Int(seconds)]) + } +}