mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
118 lines
4.0 KiB
Swift
118 lines
4.0 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import Display
|
|
import SyncCore
|
|
import AsyncDisplayKit
|
|
import TelegramPresentationData
|
|
import TelegramUIPreferences
|
|
import TelegramStringFormatting
|
|
import ListSectionHeaderNode
|
|
|
|
private let timezoneOffset: Int32 = {
|
|
let nowTimestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970)
|
|
var now: time_t = time_t(nowTimestamp)
|
|
var timeinfoNow: tm = tm()
|
|
localtime_r(&now, &timeinfoNow)
|
|
return Int32(timeinfoNow.tm_gmtoff)
|
|
}()
|
|
|
|
public func listMessageDateHeaderId(timestamp: Int32) -> Int64 {
|
|
let unclippedValue: Int64 = min(Int64(Int32.max), Int64(timestamp))
|
|
|
|
var time: time_t = time_t(Int32(clamping: unclippedValue))
|
|
var timeinfo: tm = tm()
|
|
localtime_r(&time, &timeinfo)
|
|
|
|
let roundedTimestamp = timeinfo.tm_year * 100 + timeinfo.tm_mon
|
|
|
|
return Int64(roundedTimestamp)
|
|
}
|
|
|
|
public func listMessageDateHeaderInfo(timestamp: Int32) -> (year: Int32, month: Int32) {
|
|
var time: time_t = time_t(timestamp)
|
|
var timeinfo: tm = tm()
|
|
localtime_r(&time, &timeinfo)
|
|
|
|
return (timeinfo.tm_year, timeinfo.tm_mon)
|
|
}
|
|
|
|
final class ListMessageDateHeader: ListViewItemHeader {
|
|
private let timestamp: Int32
|
|
private let roundedTimestamp: Int32
|
|
private let month: Int32
|
|
private let year: Int32
|
|
|
|
let id: Int64
|
|
let theme: PresentationTheme
|
|
let strings: PresentationStrings
|
|
let fontSize: PresentationFontSize
|
|
|
|
init(timestamp: Int32, theme: PresentationTheme, strings: PresentationStrings, fontSize: PresentationFontSize) {
|
|
self.timestamp = timestamp
|
|
self.theme = theme
|
|
self.strings = strings
|
|
self.fontSize = fontSize
|
|
|
|
var time: time_t = time_t(timestamp)
|
|
var timeinfo: tm = tm()
|
|
localtime_r(&time, &timeinfo)
|
|
|
|
self.roundedTimestamp = timeinfo.tm_year * 100 + timeinfo.tm_mon
|
|
self.month = timeinfo.tm_mon
|
|
self.year = timeinfo.tm_year
|
|
|
|
self.id = Int64(self.roundedTimestamp)
|
|
}
|
|
|
|
let stickDirection: ListViewItemHeaderStickDirection = .top
|
|
|
|
let height: CGFloat = 28.0
|
|
|
|
func node() -> ListViewItemHeaderNode {
|
|
return ListMessageDateHeaderNode(theme: self.theme, strings: self.strings, fontSize: self.fontSize, roundedTimestamp: self.roundedTimestamp, month: self.month, year: self.year)
|
|
}
|
|
|
|
func updateNode(_ node: ListViewItemHeaderNode, previous: ListViewItemHeader?, next: ListViewItemHeader?) {
|
|
}
|
|
}
|
|
|
|
public final class ListMessageDateHeaderNode: ListViewItemHeaderNode {
|
|
var theme: PresentationTheme
|
|
var strings: PresentationStrings
|
|
let headerNode: ListSectionHeaderNode
|
|
|
|
let month: Int32
|
|
let year: Int32
|
|
|
|
init(theme: PresentationTheme, strings: PresentationStrings, fontSize: PresentationFontSize, roundedTimestamp: Int32, month: Int32, year: Int32) {
|
|
self.theme = theme
|
|
self.strings = strings
|
|
self.month = month
|
|
self.year = year
|
|
|
|
self.headerNode = ListSectionHeaderNode(theme: theme)
|
|
|
|
super.init()
|
|
|
|
self.addSubnode(self.headerNode)
|
|
|
|
self.headerNode.title = stringForMonth(strings: strings, month: month, ofYear: year).uppercased()
|
|
}
|
|
|
|
public func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) {
|
|
self.theme = theme
|
|
self.headerNode.updateTheme(theme: theme)
|
|
|
|
self.strings = strings
|
|
self.headerNode.title = stringForMonth(strings: strings, month: self.month, ofYear: self.year).uppercased()
|
|
|
|
self.setNeedsLayout()
|
|
}
|
|
|
|
override public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) {
|
|
let headerFrame = CGRect(origin: CGPoint(x: 0.0, y: -UIScreenPixel), size: CGSize(width: size.width, height: size.height + UIScreenPixel))
|
|
self.headerNode.frame = headerFrame
|
|
self.headerNode.updateLayout(size: headerFrame.size, leftInset: leftInset, rightInset: rightInset)
|
|
}
|
|
}
|