about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-02-14 05:20:22 -0500
committerJune McEnroe <june@causal.agency>2020-02-14 05:20:22 -0500
commit0d23f8f1b8d264e2dce82bd740e376a5731a2478 (patch)
tree7edec6bc4e9d44dc417a80b5e9efe7ff2ceb7427
parentTrack unreadTotal and unreadWarm separately (diff)
downloadcatgirl-0d23f8f1b8d264e2dce82bd740e376a5731a2478.tar.gz
catgirl-0d23f8f1b8d264e2dce82bd740e376a5731a2478.zip
Save heat, unreadTotal, unreadWarm
-rw-r--r--ui.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/ui.c b/ui.c
index f5c4936..3b1fdc1 100644
--- a/ui.c
+++ b/ui.c
@@ -950,7 +950,8 @@ void uiRead(void) {
 }
 
 static const time_t Signatures[] = {
-	0x6C72696774616301,
+	0x6C72696774616301, // no heat, unreadTotal, unreadWarm
+	0x6C72696774616302,
 };
 
 static size_t signatureVersion(time_t signature) {
@@ -971,10 +972,13 @@ int uiSave(const char *name) {
 	FILE *file = dataOpen(name, "w");
 	if (!file) return -1;
 
-	if (writeTime(file, Signatures[0])) return -1;
+	if (writeTime(file, Signatures[1])) return -1;
 	for (size_t num = 0; num < windows.len; ++num) {
 		const struct Window *window = windows.ptrs[num];
 		if (writeString(file, idNames[window->id])) return -1;
+		if (writeTime(file, window->heat)) return -1;
+		if (writeTime(file, window->unreadTotal)) return -1;
+		if (writeTime(file, window->unreadWarm)) return -1;
 		for (size_t i = 0; i < BufferCap; ++i) {
 			time_t time = bufferTime(&window->buffer, i);
 			const char *line = bufferLine(&window->buffer, i);
@@ -1017,12 +1021,17 @@ void uiLoad(const char *name) {
 		fclose(file);
 		return;
 	}
-	signatureVersion(signature);
+	size_t version = signatureVersion(signature);
 
 	char *buf = NULL;
 	size_t cap = 0;
 	while (0 < readString(file, &buf, &cap)) {
 		struct Window *window = windows.ptrs[windowFor(idFor(buf))];
+		if (version > 0) {
+			window->heat = readTime(file);
+			window->unreadTotal = readTime(file);
+			window->unreadWarm = readTime(file);
+		}
 		for (;;) {
 			time_t time = readTime(file);
 			if (!time) break;
@@ -1031,6 +1040,7 @@ void uiLoad(const char *name) {
 		}
 		reflow(window);
 		waddch(window->pad, '\n');
+		window->unreadLines++;
 	}
 
 	free(buf);
68477c3621707b366ea1a658a6c84ea66bd&follow=1'>Run tests in default targetJune McEnroe 2018-09-14Add termEvent testsJune McEnroe 2018-09-14Check width of entire next word including codesJune McEnroe This results in a tiny bit of premature wrapping for color codes, but that isn't a problem. 2018-09-14Remove word handling from formatParseJune McEnroe 2018-09-14Apply consecutive formatting codes at onceJune McEnroe Fixes the failing splits test. 2018-09-14Add tests for formatParseJune McEnroe With one currently failing so you know they're worth it. 2018-09-13Preview with nick in input windowJune McEnroe 2018-09-13Never send PRIVMSG to TagStatus or TagVerboseJune McEnroe 2018-09-13Move color selection to format.cJune McEnroe 2018-09-13Fix len for format->split at end of stringJune McEnroe 2018-09-13Avoid uninitialized x in uiReadJune McEnroe 2018-09-13Add IRCDefault to colors enumJune McEnroe 2018-09-13Return a format->split even at the end of the stringJune McEnroe 2018-09-13Fix weird tab-complete after commaJune McEnroe I have no idea why I did this. 2018-09-13Rewrite UI againJune McEnroe The persistent topic is gone and the status line is now at the top. The status formatting still needs to be reworked. I also want to try showing the nick in the input window so it really looks like your next message. 2018-09-12Add note about C-oJune McEnroe Why are there so few well usable ctrl key bindings? 2018-09-12Use formatParse split to position input cursorJune McEnroe 2018-09-12Factor out IRC formatting parsingJune McEnroe 2018-09-11Add /help equivalent to /manJune McEnroe 2018-09-11Don't render every PM as a pingJune McEnroe 2018-09-11Add urlOpenMatchJune McEnroe 2018-09-10Depend on man.sh for chroot.tar targetJune McEnroe 2018-09-10Set LESSSECURE=1 in man.shJune McEnroe Ridiculous. 2018-09-10Add /man commandJune McEnroe 2018-09-10Install man page in chrootJune McEnroe 2018-09-10Install man pageJune McEnroe 2018-09-10Split keys into subsections and document colorsJune McEnroe 2018-09-10Add "blank" lines to chatte.1June McEnroe 2018-09-10Document key bindings in chatte.1June McEnroe 2018-09-08Document slash commands in chatte.1June McEnroe