diff options
| author | Caleb Mabry <caleb.mabry.15@cnu.edu> | 2022-03-25 00:15:36 -0400 |
|---|---|---|
| committer | Caleb Mabry <caleb.mabry.15@cnu.edu> | 2022-03-25 00:15:36 -0400 |
| commit | 502a472ea297e3c170dd74c1a4542f492cf2ea3d (patch) | |
| tree | c182bdc555a07d1d569679d8bad87ca13cb51b3c | |
| parent | e4d1e1cd4b361e96aad09d9b5539db44cb1ed8dd (diff) | |
Added support for saving chatlog
| -rw-r--r-- | webAO/client.js | 45 | ||||
| -rw-r--r-- | webAO/services/downloadFile.ts | 10 |
2 files changed, 51 insertions, 4 deletions
diff --git a/webAO/client.js b/webAO/client.js index 6a2947c..10153f6 100644 --- a/webAO/client.js +++ b/webAO/client.js @@ -29,7 +29,7 @@ import queryParser from './utils/queryParser.js'; import getAnimLength from './utils/getAnimLength.js'; import getResources from './utils/getResources.js'; import transparentPng from './constants/transparentPng'; - +import downloadFile from './services/downloadFile' const version = process.env.npm_package_version; let client; @@ -559,13 +559,51 @@ class Client extends EventEmitter { } } + saveChatlogHandle = async () => { + const clientLog = document.getElementById('client_log') + const icMessageLogs = clientLog.getElementsByTagName('p') + const messages = [] + + for (let i = 0; i < icMessageLogs.length; i++) { + const SHOWNAME_POSITION = 0 + const TEXT_POSITION = 2 + const showname = icMessageLogs[i].children[SHOWNAME_POSITION].innerHTML + const text = icMessageLogs[i].children[TEXT_POSITION].innerHTML + const message = `${showname}: ${text}` + messages.push(message) + } + const d = new Date(); + let ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d); + let mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d); + let da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d); + + const filename = `chatlog-${da}-${mo}-${ye}`.toLowerCase() + downloadFile(messages.join('\n'), filename) + + // Reset Chatbox to Empty + document.getElementById('client_inputbox').value = ''; + } + /** * Handles an in-character chat message. * @param {*} args packet arguments */ handleMS(args) { + const msMessage = args[5] + const commands = { + '/save_chatlog': this.saveChatlogHandle + } + const commandsMap = new Map(Object.entries(commands)) + + if (msMessage && commandsMap.has(msMessage.toLowerCase())) { + try { + commandsMap.get(msMessage.toLowerCase())() + } catch (e) { + // Command Not Recognized + } + } // TODO: this if-statement might be a bug. - if (args[4] !== viewport.chatmsg.content) { + else if (args[4] !== viewport.chatmsg.content) { document.getElementById('client_inner_chat').innerHTML = ''; const char_id = Number(args[9]); @@ -699,8 +737,7 @@ class Client extends EventEmitter { if (chatmsg.charid === this.charID) { resetICParams(); } - - viewport.say(chatmsg); // no await + viewport.say(chatmsg); // no await } } } diff --git a/webAO/services/downloadFile.ts b/webAO/services/downloadFile.ts new file mode 100644 index 0000000..3774e9b --- /dev/null +++ b/webAO/services/downloadFile.ts @@ -0,0 +1,10 @@ +const downloadFile = (content: string, filename: string) => { + + const a = document.createElement('a'); + const file = new Blob([content], {type: 'text'}); + + a.href= URL.createObjectURL(file); + a.download = filename; + a.click(); +} +export default downloadFile
\ No newline at end of file |
