From 085b44752a8d89b15c3abd084480a25cb871c794 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sun, 31 Jul 2016 14:23:47 +0000 Subject: [PATCH] Adding multiplayer markdeep. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3291 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- packages/cory/libirc/libirc.js | 6 + packages/cory/sharedwiki/sharedwiki.js | 186 +++++++++++++++++++++++++ packages/cory/todo/todo.js | 19 ++- 3 files changed, 200 insertions(+), 11 deletions(-) create mode 100644 packages/cory/sharedwiki/sharedwiki.js diff --git a/packages/cory/libirc/libirc.js b/packages/cory/libirc/libirc.js index e079318c..7a7d11bb 100644 --- a/packages/cory/libirc/libirc.js +++ b/packages/cory/libirc/libirc.js @@ -98,6 +98,12 @@ class IrcService { let person = prefix.split('!')[0]; let conversation = parts[1]; this._service.notifyPresenceChanged(conversation, person, "unavailable"); + } else if (parts[0] == "QUIT") { + let person = prefix.split('!')[0]; + let conversations = this._service.getConversations(); + for (let i in conversations) { + this._service.notifyPresenceChanged(conversations[i], person, "unavailable"); + } } else if (parts[0] == "353") { // RPL_NAMREPLY if (!this._nameReplies[parts[3]]) { this._nameReplies[parts[3]] = []; diff --git a/packages/cory/sharedwiki/sharedwiki.js b/packages/cory/sharedwiki/sharedwiki.js new file mode 100644 index 00000000..910892a6 --- /dev/null +++ b/packages/cory/sharedwiki/sharedwiki.js @@ -0,0 +1,186 @@ +"use strict"; + +//! {"require": ["ui"]} + +terminal.setEcho(false); +terminal.setTitle("Live Markdeep Editor"); + +let gEditEvent = null; + +function back() { + terminal.split([{name: "terminal"}]); + if (gEditEvent) { + gEditEvent.back(); + } +} + +core.register("onWindowMessage", function(event) { + if (event.message.ready) { + core.broadcast({title: gEditEvent.name, sync: true}); + terminal.postMessageToIframe("iframe", {title: gEditEvent.name, contents: gEditEvent.value}); + } else if (event.message.index) { + back(); + } else if (event.message.cursor) { + core.broadcast({title: gEditEvent.name, user: core.user.index, cursor: event.message.cursor}); + } else if (event.message.change) { + core.broadcast({title: gEditEvent.name, user: core.user.index, change: event.message.change}); + } else if (event.message.sync) { + core.broadcast({title: event.message.title, user: core.user.index, contents: event.message.contents}); + } else { + gEditEvent.save(event.message.title, event.message.contents).then(function() { + return core.broadcast({title: gEditEvent.name, contents: event.message.contents, sync: true}); + }).then(back); + } +}); + +core.register("onMessage", function(sender, message) { + if (!gEditEvent || message.title == gEditEvent.name) { + terminal.postMessageToIframe("iframe", message); + } +}); + +core.register("onSessionEnd", function(process) { + terminal.postMessageToIframe("iframe", {user: process.index, cursor: {}}); +}); + +function editPage(event) { + gEditEvent = event; + terminal.split([{name: "terminal", type: "vertical"}]); + terminal.clear(); + terminal.print({iframe: ` + + + + + + + + + + +
+
+
+
+ + `, name: "iframe", style: "flex: 1 1 auto; border: 0; width: 100%"}); +} + +require("ui").fileList({ + title: "Live Markdeep Editor", + edit: editPage, +}); \ No newline at end of file diff --git a/packages/cory/todo/todo.js b/packages/cory/todo/todo.js index a3c21b49..87c6960c 100644 --- a/packages/cory/todo/todo.js +++ b/packages/cory/todo/todo.js @@ -83,17 +83,14 @@ function notifyChanged() { return core.broadcast({changed: true}); } -function readList(key) { - return database.get(key).catch(function(error) { - return null; - }).then(function(todo) { - try { - todo = JSON.parse(todo); - } catch (error) { - todo = {name: "TODO", items: []}; - } - return todo; - }); +async function readList(key) { + let todo = null; + try { + todo = JSON.parse(await database.get(key)); + } catch (error) { + todo = {name: "TODO", items: []}; + } + return todo; } function writeList(key, todo) {