Skip to content

Commit 71f5b94

Browse files
committed
Display day change messages
Similar to weechat.look.day_change.
1 parent d85172e commit 71f5b94

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

  • app/src/main/java/com/ubergeek42/WeechatAndroid/relay

app/src/main/java/com/ubergeek42/WeechatAndroid/relay/Lines.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ import com.ubergeek42.WeechatAndroid.utils.Linkify
88
import com.ubergeek42.WeechatAndroid.utils.Utils
99
import com.ubergeek42.WeechatAndroid.utils.invalidatableLazy
1010
import 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
1117
import java.util.*
1218
import 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

Comments
 (0)