diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 66de92f17fd..4ff1e10a22f 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -153,12 +153,6 @@ /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") -/proc/cmp_pdaname_asc(datum/computer_file/program/messenger/A, datum/computer_file/program/messenger/B) - return sorttext(B?.computer?.saved_identification, A?.computer?.saved_identification) - -/proc/cmp_pdajob_asc(datum/computer_file/program/messenger/A, datum/computer_file/program/messenger/B) - return sorttext(B?.computer?.saved_job, A?.computer?.saved_job) - /proc/cmp_num_string_asc(A, B) return text2num(A) - text2num(B) diff --git a/code/modules/admin/admin_pda_message.dm b/code/modules/admin/admin_pda_message.dm index bee5a584634..0bf20554e77 100644 --- a/code/modules/admin/admin_pda_message.dm +++ b/code/modules/admin/admin_pda_message.dm @@ -29,8 +29,7 @@ ADMIN_VERB(message_pda, R_ADMIN, "PDA Message", "Send a message to a user's PDA. /datum/admin_pda_panel/ui_static_data(mob/user) var/list/data = list() var/list/available_messengers = list() - for(var/messenger_ref in get_messengers_sorted_by_name()) - var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref] + for(var/datum/computer_file/program/messenger/messenger as anything in GLOB.pda_messengers_by_name) available_messengers[REF(messenger)] = list( ref = REF(messenger), username = get_messenger_name(messenger), @@ -55,8 +54,7 @@ ADMIN_VERB(message_pda, R_ADMIN, "PDA Message", "Send a message to a user's PDA. if(!spam && (ref in GLOB.pda_messengers)) targets += GLOB.pda_messengers[ref] else - for(var/messenger_ref in get_messengers_sorted_by_name()) - var/datum/computer_file/program/messenger/messenger = GLOB.pda_messengers[messenger_ref] + for(var/datum/computer_file/program/messenger/messenger as anything in GLOB.pda_messengers_by_name) if(messenger.invisible && !params["include_invisible"]) continue targets += messenger diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm index 0b1514d4c04..b8f4129400e 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_data.dm @@ -1,5 +1,9 @@ /// A list of all active and visible messengers GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger) +/// A list of all active and visible messengers +GLOBAL_LIST_EMPTY_TYPED(pda_messengers_by_job, /datum/computer_file/program/messenger) +/// A list of all active and visible messengers +GLOBAL_LIST_EMPTY_TYPED(pda_messengers_by_name, /datum/computer_file/program/messenger) /// Registers an NTMessenger instance to the list of pda_messengers. /proc/add_messenger(datum/computer_file/program/messenger/messenger) @@ -16,6 +20,9 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger) return GLOB.pda_messengers[messenger_ref] = messenger + BINARY_INSERT_PROC_COMPARE(messenger, GLOB.pda_messengers_by_job, /datum/computer_file/program/messenger, messenger, compare_job, COMPARE_KEY) + BINARY_INSERT_PROC_COMPARE(messenger, GLOB.pda_messengers_by_name, /datum/computer_file/program/messenger, messenger, compare_name, COMPARE_KEY) + /// Unregisters an NTMessenger instance from the pda_messengers table. /proc/remove_messenger(datum/computer_file/program/messenger/messenger) @@ -26,15 +33,10 @@ GLOBAL_LIST_EMPTY_TYPED(pda_messengers, /datum/computer_file/program/messenger) if(!(messenger_ref in GLOB.pda_messengers)) return - GLOB.pda_messengers.Remove(messenger_ref) + GLOB.pda_messengers -= messenger_ref + GLOB.pda_messengers_by_job -= messenger + GLOB.pda_messengers_by_name -= messenger -/// Gets all messengers, sorted by their name -/proc/get_messengers_sorted_by_name() - return sortTim(GLOB.pda_messengers.Copy(), GLOBAL_PROC_REF(cmp_pdaname_asc), associative = TRUE) - -/// Gets all messengers, sorted by their job -/proc/get_messengers_sorted_by_job() - return sortTim(GLOB.pda_messengers.Copy(), GLOBAL_PROC_REF(cmp_pdajob_asc), associative = TRUE) /// Get the display name of a messenger instance /proc/get_messenger_name(datum/computer_file/program/messenger/messenger) diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 3b72d576f25..20326141922 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -88,10 +88,9 @@ /datum/computer_file/program/messenger/proc/get_messengers() var/list/dictionary = list() - var/list/messengers_sorted = sort_by_job ? get_messengers_sorted_by_job() : get_messengers_sorted_by_name() + var/list/messengers_sorted = sort_by_job ? GLOB.pda_messengers_by_job : GLOB.pda_messengers_by_name - for(var/messenger_ref in messengers_sorted) - var/datum/computer_file/program/messenger/messenger = messengers_sorted[messenger_ref] + for(var/datum/computer_file/program/messenger/messenger as anything in messengers_sorted) if(!istype(messenger) || !istype(messenger.computer)) continue if(messenger == src || messenger.invisible) @@ -759,6 +758,12 @@ var/obj/item/modular_computer/pda/comp = computer comp.explode(usr, from_message_menu = TRUE) +/datum/computer_file/program/messenger/proc/compare_name(datum/computer_file/program/messenger/rhs) + return sorttext(rhs.computer?.saved_identification, computer?.saved_identification) + +/datum/computer_file/program/messenger/proc/compare_job(datum/computer_file/program/messenger/rhs) + return sorttext(rhs.computer?.saved_job, computer?.saved_job) + #undef PDA_MESSAGE_TIMESTAMP_FORMAT #undef MAX_PDA_MESSAGE_LEN #undef TEMP_IMAGE_PATH diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index f5a0a374aac..0c91bcfd6e7 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -56,8 +56,7 @@ data["ntnetlogs"] += list(list("entry" = i)) data["tablets"] = list() - for(var/messenger_ref in get_messengers_sorted_by_name()) - var/datum/computer_file/program/messenger/app = GLOB.pda_messengers[messenger_ref] + for(var/datum/computer_file/program/messenger/app as anything in GLOB.pda_messengers_by_name) var/obj/item/modular_computer/pda = app.computer var/list/tablet_data = list()