From f7974d2cefa8d2f0ba6302187f958674b415571f Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 29 Dec 2021 19:46:55 +0000 Subject: [PATCH] Batch vue data updates, and sort the users list. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3719 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- apps/cory/index.json | 2 +- apps/cory/index/index.html | 2 +- apps/cory/index/tf.js | 127 ++++++++++++++++++++----------------- 3 files changed, 72 insertions(+), 59 deletions(-) diff --git a/apps/cory/index.json b/apps/cory/index.json index af866adb..1ffdd6bb 100644 --- a/apps/cory/index.json +++ b/apps/cory/index.json @@ -1 +1 @@ -{"type":"tildefriends-app","files":{"app.js":"&LPDR4ZoE/qdPy9djmNFUfblXk7W1znMbwuAXp3/zWPI=.sha256","index.html":"&LGgeVc7llvfOU2gbnQZ60PGYCgcNjtEdHd1vjnJXLaU=.sha256","vue-material.js":"&K5cdLqXYCENPak/TCINHQhyJhpS4G9DlZHGwoh/LF2g=.sha256","tf-user.js":"&uD6N8xUmrjXwIr95nkH/YjuZST6W1Q2MuJ8u6Vcmo6Q=.sha256","tf-message.js":"&KjVh7zASx0TZtZTsS6lJ7T70K9tyXcf+ink4vK7gSWI=.sha256","tf.js":"&r3w4aWGpCJ6J/x/K8hKAx6nohTuXHwVGvTDohJdnhiE=.sha256","commonmark.min.js":"&5x6ek3tFrKTZX6hXNNyFsjmhvrjmWpUkwuuaiyVV1Us=.sha256","vue.js":"&g1wvA+yHl1sVC+eufTsg9If7ZeVyMTBU+h0tks7ZNzE=.sha256","vue-material-theme-default-dark.css":"&RP2nr+2CR18BpHHw5ST9a5GJUCOG9n0G2kuGkcQioWE=.sha256","vue-material.min.css":"&kGbUM2QgFSyHZRzqQb0b+0S3EVIlZ0AXpdiAVjIhou8=.sha256","roboto.css":"&jJv43Om673mQO5JK0jj7714s5E+5Yrf82H6LcDx7wUs=.sha256","material-icons.css":"&a28PdcVvgq/DxyIvJAx/e+ZOEtOuHnr3kjLWKyzH11M=.sha256"}} \ No newline at end of file +{"type":"tildefriends-app","files":{"app.js":"&LPDR4ZoE/qdPy9djmNFUfblXk7W1znMbwuAXp3/zWPI=.sha256","index.html":"&zwiRwroNQ1SnCsq97zB8dRiGwY4H+ii4ZtuKR385zdI=.sha256","vue-material.js":"&K5cdLqXYCENPak/TCINHQhyJhpS4G9DlZHGwoh/LF2g=.sha256","tf-user.js":"&uD6N8xUmrjXwIr95nkH/YjuZST6W1Q2MuJ8u6Vcmo6Q=.sha256","tf-message.js":"&KjVh7zASx0TZtZTsS6lJ7T70K9tyXcf+ink4vK7gSWI=.sha256","tf.js":"&Kf578HPfGnoog7LmW2Nof8dQldS04Opl26CE5+nsFLA=.sha256","commonmark.min.js":"&5x6ek3tFrKTZX6hXNNyFsjmhvrjmWpUkwuuaiyVV1Us=.sha256","vue.js":"&g1wvA+yHl1sVC+eufTsg9If7ZeVyMTBU+h0tks7ZNzE=.sha256","vue-material-theme-default-dark.css":"&RP2nr+2CR18BpHHw5ST9a5GJUCOG9n0G2kuGkcQioWE=.sha256","vue-material.min.css":"&kGbUM2QgFSyHZRzqQb0b+0S3EVIlZ0AXpdiAVjIhou8=.sha256","roboto.css":"&jJv43Om673mQO5JK0jj7714s5E+5Yrf82H6LcDx7wUs=.sha256","material-icons.css":"&a28PdcVvgq/DxyIvJAx/e+ZOEtOuHnr3kjLWKyzH11M=.sha256"}} \ No newline at end of file diff --git a/apps/cory/index/index.html b/apps/cory/index/index.html index b7bc2e35..edea18fd 100644 --- a/apps/cory/index/index.html +++ b/apps/cory/index/index.html @@ -39,7 +39,7 @@ Connect Users - + diff --git a/apps/cory/index/tf.js b/apps/cory/index/tf.js index 6553f2b8..87568764 100644 --- a/apps/cory/index/tf.js +++ b/apps/cory/index/tf.js @@ -16,22 +16,25 @@ var g_data = { }; var g_data_initial = JSON.parse(JSON.stringify(g_data)); -window.addEventListener('message', function(event) { - var key = Object.keys(event.data)[0]; - if (key == 'message') { - event.data[key].children = []; - var found = false; - var root = JSON.parse(event.data[key].content).root; - if (root) { - for (let message of g_data.messages) { - if (root == message.id) { - message.children.push(event.data[key]); - message.children.sort((x, y) => y.timestamp - x.timestamp); - found = true; +var g_message_queue = []; +var g_process_pending = false; + +function processMessages() { + for (let event of g_message_queue) { + var key = Object.keys(event.data)[0]; + if (key == 'message') { + event.data[key].children = []; + var found = false; + var root = JSON.parse(event.data[key].content).root; + if (root) { + for (let message of g_data.messages) { + if (root == message.id) { + message.children.push(event.data[key]); + message.children.sort((x, y) => y.timestamp - x.timestamp); + found = true; + } } } - } - if (!found) { for (let message of g_data.messages) { if (JSON.parse(message.content).root == event.data[key].id) { event.data[key].children.push(message); @@ -40,51 +43,61 @@ window.addEventListener('message', function(event) { break; } } - } - if (!found) { - g_data.messages.push(event.data[key]); - g_data.messages.sort((x, y) => y.timestamp - x.timestamp); - } - } else if (key + 's' in g_data && Array.isArray(g_data[key + 's'])) { - g_data[key + 's'].push(event.data[key]); - } else if (key == 'user') { - Vue.set(g_data.users, event.data.user.user, Object.assign({}, g_data.users[event.data.user.user] || {}, event.data.user.about)); - } else if (key == 'followers') { - if (!g_data.users[event.data.followers.id]) { - Vue.set(g_data.users, event.data.followers.id, {}); - } - Vue.set(g_data.users[event.data.followers.id], 'followers', event.data.followers.users); - } else if (key == 'following') { - if (!g_data.users[event.data.following.id]) { - Vue.set(g_data.users, event.data.following.id, {}); - } - Vue.set(g_data.users[event.data.following.id], 'following', event.data.following.users); - } else if (key == 'broadcasts') { - g_data.broadcasts = event.data.broadcasts; - } else if (key == 'pubs') { - g_data.pubs = event.data.pubs; - } else if (key == 'apps') { - g_data.apps = event.data.apps; - } else if (key == 'votes') { - event.data.votes.forEach(function(vote) { - var content = JSON.parse(vote.content); - var link = content.vote.link; - if (!g_data.votes[link]) { - Vue.set(g_data.votes, link, {}); + if (!found) { + g_data.messages.push(event.data[key]); + g_data.messages.sort((x, y) => y.timestamp - x.timestamp); } - if (!g_data.votes[link][content.vote.expression]) { - Vue.set(g_data.votes[link], content.vote.expression, []); + } else if (key + 's' in g_data && Array.isArray(g_data[key + 's'])) { + g_data[key + 's'].push(event.data[key]); + } else if (key == 'user') { + Vue.set(g_data.users, event.data.user.user, Object.assign({}, g_data.users[event.data.user.user] || {}, event.data.user.about)); + } else if (key == 'followers') { + if (!g_data.users[event.data.followers.id]) { + Vue.set(g_data.users, event.data.followers.id, {}); } - g_data.votes[link][content.vote.expression].push({author: vote.author, value: content.vote.value}); - }); - } else if (key == 'clear') { - Object.keys(g_data_initial).forEach(function(key) { - Vue.set(g_data, key, JSON.parse(JSON.stringify(g_data_initial[key]))); - }); - } else if (key == 'unread') { - g_data.unread += event.data.unread; - } else { - g_data[key] = event.data[key]; + Vue.set(g_data.users[event.data.followers.id], 'followers', event.data.followers.users); + } else if (key == 'following') { + if (!g_data.users[event.data.following.id]) { + Vue.set(g_data.users, event.data.following.id, {}); + } + Vue.set(g_data.users[event.data.following.id], 'following', event.data.following.users); + } else if (key == 'broadcasts') { + g_data.broadcasts = event.data.broadcasts; + } else if (key == 'pubs') { + g_data.pubs = event.data.pubs; + } else if (key == 'apps') { + g_data.apps = event.data.apps; + } else if (key == 'votes') { + event.data.votes.forEach(function(vote) { + var content = JSON.parse(vote.content); + var link = content.vote.link; + if (!g_data.votes[link]) { + Vue.set(g_data.votes, link, {}); + } + if (!g_data.votes[link][content.vote.expression]) { + Vue.set(g_data.votes[link], content.vote.expression, []); + } + g_data.votes[link][content.vote.expression].push({author: vote.author, value: content.vote.value}); + }); + } else if (key == 'clear') { + Object.keys(g_data_initial).forEach(function(key) { + Vue.set(g_data, key, JSON.parse(JSON.stringify(g_data_initial[key]))); + }); + } else if (key == 'unread') { + g_data.unread += event.data.unread; + } else { + g_data[key] = event.data[key]; + } + } + g_message_queue = []; + g_process_pending = false; +} + +window.addEventListener('message', function(event) { + g_message_queue.push(event); + if (!g_process_pending) { + g_process_pending = true; + setTimeout(processMessages, 250); } }); window.addEventListener('load', function() {