summaryrefslogtreecommitdiff
path: root/ui/lib/runs.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui/lib/runs.js')
-rw-r--r--ui/lib/runs.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/ui/lib/runs.js b/ui/lib/runs.js
new file mode 100644
index 0000000..f4e90be
--- /dev/null
+++ b/ui/lib/runs.js
@@ -0,0 +1,25 @@
+import * as iter from './iterator.js';
+
+const RUN_COALESCE_MAX_INTERVAL = 10 /* min */ * 60 /* sec */ * 1000; /* ms */
+
+export function runs(messages, self) {
+ const bareRuns = iter.chunkBy(messages, runKey, continueRun);
+ return iter.map(bareRuns, (run) => summarizeRun(self, run));
+}
+
+function summarizeRun(self, { key, chunk }) {
+ const [sender, at] = key;
+ return {
+ sender: sender.name,
+ ownMessage: sender.id === self.id,
+ messages: chunk
+ };
+}
+
+function runKey(message) {
+ return [message.sender, message.at];
+}
+
+function continueRun([lastSender, lastAt], [newSender, newAt]) {
+ return lastSender === newSender && newAt - lastAt < RUN_COALESCE_MAX_INTERVAL;
+}