@@ -8,6 +8,12 @@ import com.ubergeek42.WeechatAndroid.utils.Linkify
88import com.ubergeek42.WeechatAndroid.utils.Utils
99import com.ubergeek42.WeechatAndroid.utils.invalidatableLazy
1010import com.ubergeek42.weechat.Color
11+ import java.time.Instant
12+ import java.time.LocalDateTime
13+ import java.time.ZoneId
14+ import java.time.format.DateTimeFormatter
15+ import java.time.format.FormatStyle
16+ import java.time.temporal.ChronoUnit
1117import java.util.*
1218import kotlin.properties.Delegates.observable
1319
@@ -93,12 +99,46 @@ class Lines {
9399 filtered.clear()
94100 }
95101
102+ private fun addDateLine (array : ArrayDeque <Line >, newTimestamp : Long ) {
103+ var oldDate = LocalDateTime .MIN
104+ if (! array.isEmpty()) {
105+ oldDate = Instant .ofEpochSecond(array.getLast().timestamp / 1000 )
106+ .atZone(ZoneId .systemDefault())
107+ .toLocalDateTime()
108+ }
109+ val newDate = Instant .ofEpochSecond(newTimestamp / 1000 )
110+ .atZone(ZoneId .systemDefault())
111+ .toLocalDateTime()
112+ if (newDate.getHour() < oldDate.getHour() ||
113+ newDate.getDayOfYear() > oldDate.getDayOfYear() ||
114+ newDate.getYear() > oldDate.getYear()) {
115+ val midnight = newDate.truncatedTo(ChronoUnit .DAYS )
116+ val tstamp = midnight.atZone(ZoneId .systemDefault()).toEpochSecond() * 1000
117+ var msg = midnight.format(DateTimeFormatter .ofLocalizedDate(FormatStyle .MEDIUM )) + " --"
118+ if (newDate.getDayOfYear() > oldDate.getDayOfYear() + 1 ||
119+ newDate.getYear() > oldDate.getYear()) {
120+ val oldMidnight = oldDate.truncatedTo(ChronoUnit .DAYS )
121+ msg = midnight.format(DateTimeFormatter .ofLocalizedDate(FormatStyle .MEDIUM )) +
122+ " (" +
123+ oldMidnight.format(DateTimeFormatter .ofLocalizedDate(FormatStyle .MEDIUM )) +
124+ " ) --"
125+ }
126+ val dateLine = Line (++ fakePointerCounter, LineSpec .Type .Other , tstamp, " -- " , msg,
127+ nick = null , isVisible = true , isHighlighted = false ,
128+ LineSpec .DisplayAs .Unspecified , LineSpec .NotifyLevel .Low )
129+ array.addLast(dateLine)
130+ }
131+ }
132+
96133 fun addLast (line : Line ) {
97134 if (shouldAddSquiggleOnNewLine) {
98135 shouldAddSquiggleOnNewLine = false
99136 if (status == Status .Init && unfiltered.size > 0 ) addLast(SquiggleLine ()) // invisible
100137 }
101138
139+ addDateLine(unfiltered, line.timestamp)
140+ if (line.isVisible) addDateLine(filtered, line.timestamp)
141+
102142 if (shouldAddSquiggleOnNewVisibleLine && line.isVisible) {
103143 shouldAddSquiggleOnNewVisibleLine = false
104144 if (status == Status .Init && filtered.size > 0 ) {
0 commit comments