From: Markus Armbruster Date: Mon, 21 Nov 2011 06:26:02 +0000 (+0100) Subject: Fix read not to split production report when update is slow X-Git-Tag: v4.3.29~15 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=17223e8fe2956f0db878480caa9e4add844216d9 Fix read not to split production report when update is slow Adjacent telegrams are squashed together if type and sender are the same, and the timestamp is "close enough". This is done in two places: rea() and typed_wu(). They're inconsistent: typed_wu() ignores the timestamp for production reports since Empire 2, but rea() doesn't. Record typed_wu()'s decision in new telstr member tel_cont. Use it in rea(). --- diff --git a/include/tel.h b/include/tel.h index 63d90704a..497edb3c6 100644 --- a/include/tel.h +++ b/include/tel.h @@ -27,7 +27,7 @@ * tel.h: Definitions for things having to do with telegrams * * Known contributors to this file: - * Markus Armbruster, 2009-2010 + * Markus Armbruster, 2009-2011 */ #ifndef TEL_H @@ -50,6 +50,7 @@ struct telstr { natid tel_from; /* sender */ unsigned char tel_type; + signed char tel_cont; /* squash into prev. telegram? */ unsigned tel_length; /* how long */ time_t tel_date; /* when sent */ }; diff --git a/src/lib/commands/rea.c b/src/lib/commands/rea.c index b0cc7f416..f30109b7f 100644 --- a/src/lib/commands/rea.c +++ b/src/lib/commands/rea.c @@ -31,7 +31,7 @@ * Doug Hay, 1998 * Steve McClure, 1998-2000 * Ron Koenderink, 2005-2007 - * Markus Armbruster, 2009 + * Markus Armbruster, 2009-2011 */ #include @@ -62,10 +62,6 @@ rea(void) int teles; int size; char buf[1024]; - int lasttype; - int lastcnum; - time_t lastdate; - int header; int filelen; char *kind; int n, res; @@ -74,7 +70,6 @@ rea(void) time_t now; time_t then; time_t delta; - int first = 1; int may_delete = 1; /* may messages be deleted? */ now = time(NULL); @@ -108,9 +103,6 @@ rea(void) teles = 0; size = fsize(fileno(telfp)); more: - lastdate = 0; - lastcnum = -1; - lasttype = -1; while ((res = tel_read_header(telfp, mbox, &tgm)) > 0) { if (*kind == 'a') { if ((!player->god && (getrejects(tgm.tel_from, np) & REJ_ANNO)) @@ -121,26 +113,16 @@ rea(void) continue; } } - if (first && *kind == 'a') { + if (!teles && *kind == 'a') pr("\nAnnouncements since %s", ctime(&then)); - first = 0; - } - header = 0; - if (tgm.tel_type != lasttype || tgm.tel_from != lastcnum) - header++; - if (abs((int)(tgm.tel_date - (long)lastdate)) > TEL_SECONDS) - header++; - if (header) { + if (!teles || !tgm.tel_cont) { pr("\n> "); - lastcnum = tgm.tel_from; - lasttype = tgm.tel_type; pr("%s ", telnames[tgm.tel_type]); if ((tgm.tel_type == TEL_NORM) || (tgm.tel_type == TEL_ANNOUNCE) || (tgm.tel_type == TEL_BULLETIN)) pr("from %s, (#%d)", cname(tgm.tel_from), tgm.tel_from); pr(" dated %s", ctime(&tgm.tel_date)); - lastdate = tgm.tel_date; } teles++; res = tel_read_body(telfp, mbox, &tgm, print_sink, NULL); diff --git a/src/lib/subs/wu.c b/src/lib/subs/wu.c index f79a993f9..5cd6ea23c 100644 --- a/src/lib/subs/wu.c +++ b/src/lib/subs/wu.c @@ -28,6 +28,7 @@ * * Known contributors to this file: * Steve McClure, 2000 + * Markus Armbruster, 2005-2011 */ #include @@ -145,6 +146,7 @@ typed_wu(natid from, natid to, char *message, int type) len = strlen(message); tel.tel_length = len; tel.tel_type = type; + tel.tel_cont = !telegram_is_new(to, &tel); iov[0].iov_base = &tel; iov[0].iov_len = sizeof(tel); iov[1].iov_base = message; @@ -169,7 +171,7 @@ typed_wu(natid from, natid to, char *message, int type) putnat(np); } } else { - if (!np->nat_tgms || telegram_is_new(to, &tel)) { + if (!np->nat_tgms || !tel.tel_cont) { np->nat_tgms++; putnat(np); if (np->nat_flags & NF_INFORM) {