From 6f985f51bdd55b5976db51ba2d0e719522887550 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Thu, 13 Oct 2022 06:11:41 +0200
Subject: [PATCH] [MIRROR] Fixes the formatting in the Messenger app's message
history and makes the current ringtone appear in the input box when trying to
change it [MDB IGNORE] (#16831)
* Fixes the formatting in the Messenger app's message history and makes the current ringtone appear in the input box when trying to change it (#70458)
* Changing your PDA ringtone now has your current ringtone in your input box, like the previous PDAs used to.
* The incoming Messenger messages are now HTML encoded in message history, allowing it to display apostrophes and such.
* The prompt to send a PDA message now shows you the person you're trying to send a PDA message to.
* Fixes the formatting in the Messenger app's message history and makes the current ringtone appear in the input box when trying to change it
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
---
.../file_system/programs/ntmessenger.dm | 80 +++++++-----
.../packages/tgui/interfaces/NtosMessenger.js | 114 ++++++++++--------
2 files changed, 115 insertions(+), 79 deletions(-)
diff --git a/code/modules/modular_computers/file_system/programs/ntmessenger.dm b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
index c545a2e5789..2588fe21edc 100644
--- a/code/modules/modular_computers/file_system/programs/ntmessenger.dm
+++ b/code/modules/modular_computers/file_system/programs/ntmessenger.dm
@@ -114,33 +114,42 @@
switch(action)
if("PDA_ringSet")
- var/t = tgui_input_text(usr, "Enter a new ringtone", "Ringtone", "", 20)
+ var/new_ringtone = tgui_input_text(usr, "Enter a new ringtone", "Ringtone", ringtone, 20)
var/mob/living/usr_mob = usr
- if(in_range(computer, usr_mob) && computer.loc == usr_mob && t)
- if(SEND_SIGNAL(computer, COMSIG_TABLET_CHANGE_ID, usr_mob, t) & COMPONENT_STOP_RINGTONE_CHANGE)
- return
- else
- ringtone = t
- return(UI_UPDATE)
+ if(!new_ringtone || !in_range(computer, usr_mob) || computer.loc != usr_mob)
+ return
+
+ if(SEND_SIGNAL(computer, COMSIG_TABLET_CHANGE_ID, usr_mob, new_ringtone) & COMPONENT_STOP_RINGTONE_CHANGE)
+ return
+
+ ringtone = new_ringtone
+ return UI_UPDATE
+
if("PDA_ringer_status")
ringer_status = !ringer_status
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_sAndR")
sending_and_receiving = !sending_and_receiving
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_viewMessages")
viewing_messages = !viewing_messages
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_clearMessages")
messages = list()
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_changeSortStyle")
sort_by_job = !sort_by_job
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_sendEveryone")
if(!sending_and_receiving)
to_chat(usr, span_notice("ERROR: Device has sending disabled."))
return
+
if(!spam_mode)
to_chat(usr, span_notice("ERROR: Device does not have mass-messaging perms."))
return
@@ -153,14 +162,17 @@
if(targets.len > 0)
send_message(usr, targets, TRUE)
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_sendMessage")
if(!sending_and_receiving)
to_chat(usr, span_notice("ERROR: Device has sending disabled."))
return
+
var/obj/item/modular_computer/target = locate(params["ref"])
if(!target)
return // we don't want tommy sending his messages to nullspace
+
if(!(target.saved_identification == params["name"] && target.saved_job == params["job"]))
to_chat(usr, span_notice("ERROR: User no longer exists."))
return
@@ -171,20 +183,24 @@
if(!app.sending_and_receiving && !sending_virus)
to_chat(usr, span_notice("ERROR: Device has receiving disabled."))
return
+
if(sending_virus)
var/obj/item/computer_hardware/hard_drive/portable/virus/disk = computer.all_components[MC_SDD]
if(istype(disk))
disk.send_virus(target, usr)
- return(UI_UPDATE)
+ return UI_UPDATE
+
send_message(usr, list(target))
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_clearPhoto")
computer.saved_image = null
photo_path = null
- return(UI_UPDATE)
+ return UI_UPDATE
+
if("PDA_toggleVirus")
sending_virus = !sending_virus
- return(UI_UPDATE)
+ return UI_UPDATE
/datum/computer_file/program/messenger/ui_data(mob/user)
@@ -216,25 +232,35 @@
// Gets the input for a message being sent.
-/datum/computer_file/program/messenger/proc/msg_input(mob/living/U = usr, rigged = FALSE)
- var/t = null
+/datum/computer_file/program/messenger/proc/msg_input(mob/living/user = usr, target_name = null, rigged = FALSE)
+ var/message = null
if(mime_mode)
- t = emoji_sanitize(tgui_input_text(U, "Enter emojis", "NT Messaging"))
+ message = emoji_sanitize(tgui_input_text(user, "Enter emojis", "NT Messaging[target_name ? " ([target_name])" : ""]"))
else
- t = tgui_input_text(U, "Enter a message", "NT Messaging")
+ message = tgui_input_text(user, "Enter a message", "NT Messaging[target_name ? " ([target_name])" : ""]")
- if (!t || !sending_and_receiving)
+ if (!message || !sending_and_receiving)
return
- if(!U.canUseTopic(computer, be_close = TRUE))
+
+ if(!user.canUseTopic(computer, be_close = TRUE))
return
- return sanitize(t)
+
+ return sanitize(message)
+
/datum/computer_file/program/messenger/proc/send_message(mob/living/user, list/obj/item/modular_computer/targets, everyone = FALSE, rigged = FALSE, fake_name = null, fake_job = null)
- var/message = msg_input(user, rigged)
- if(!message || !targets.len)
+ if(!targets.len)
return FALSE
+
+ var/target_name = length(targets) == 1 ? targets[1].saved_identification : "Everyone"
+ var/message = msg_input(user, target_name, rigged)
+
+ if(!message)
+ return FALSE
+
if((last_text && world.time < last_text + 10) || (everyone && last_text_everyone && world.time < last_text_everyone + 2 MINUTES))
+ to_chat(user, span_warning("The subspace transmitter of your tablet is still cooling down!"))
return FALSE
var/turf/position = get_turf(computer)
@@ -333,7 +359,7 @@
var/list/message_data = list()
message_data["name"] = signal.data["name"]
message_data["job"] = signal.data["job"]
- message_data["contents"] = signal.format_message()
+ message_data["contents"] = html_decode(signal.format_message())
message_data["outgoing"] = FALSE
message_data["ref"] = signal.data["ref"]
message_data["automated"] = signal.data["automated"]
diff --git a/tgui/packages/tgui/interfaces/NtosMessenger.js b/tgui/packages/tgui/interfaces/NtosMessenger.js
index ff50258d5ea..1f8df5406b7 100644
--- a/tgui/packages/tgui/interfaces/NtosMessenger.js
+++ b/tgui/packages/tgui/interfaces/NtosMessenger.js
@@ -28,14 +28,21 @@ const NoIDDimmer = (props, context) => {
};
export const NtosMessenger = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { viewing_messages } = data;
+ if (viewing_messages) {
+ return ;
+ }
+ return ;
+};
+
+const ContactsScreen = (props, context) => {
const { act, data } = useBackend(context);
const {
owner,
- messages = [],
ringer_status,
sending_and_receiving,
messengers = [],
- viewing_messages,
sortByJob,
canSpam,
isSilicon,
@@ -43,56 +50,6 @@ export const NtosMessenger = (props, context) => {
virus_attach,
sending_virus,
} = data;
- if (viewing_messages) {
- return (
-
-
-
-
-
- {messages.map((message) => (
-
-
-
- {message.outgoing ? '(OUTGOING)' : '(INCOMING)'}
-
- {message.outgoing ? (
- {message.name + ' (' + message.job + ')'}
- ) : (
-
- act('PDA_sendMessage', {
- name: message.name,
- job: message.job,
- ref: message.ref,
- })
- }
- />
- )}
-
-
- {message.contents}
- {!!message.photo && }
-
-
- ))}
-
-
-
- );
- }
return (
@@ -202,3 +159,56 @@ export const NtosMessenger = (props, context) => {
);
};
+
+const MessageListScreen = (props, context) => {
+ const { act, data } = useBackend(context);
+ const { messages = [] } = data;
+ return (
+
+
+
+
+ act('PDA_viewMessages')}
+ />
+ act('PDA_clearMessages')}
+ />
+
+ {messages.map((message) => (
+
+
+
+ {message.outgoing ? '(OUTGOING)' : '(INCOMING)'}
+
+ {message.outgoing ? (
+ {message.name + ' (' + message.job + ')'}
+ ) : (
+
+ act('PDA_sendMessage', {
+ name: message.name,
+ job: message.job,
+ ref: message.ref,
+ })
+ }
+ />
+ )}
+
+
+ {message.contents}
+ {!!message.photo && }
+
+
+ ))}
+
+
+
+ );
+};