/*! * Copyright (c) 2020 Aleksej Komarov * SPDX-License-Identifier: MIT */ /** * tgui_panel datum * Hosts tgchat and other nice features. */ /datum/tgui_panel var/client/client var/datum/tgui_window/window var/broken = FALSE var/initialized_at /datum/tgui_panel/New(client/client) src.client = client window = new(client, "browseroutput") window.subscribe(src, .proc/on_message) /datum/tgui_panel/Del() window.unsubscribe(src) window.close() return ..() /** * public * * TRUE if panel is initialized and ready to receive messages. */ /datum/tgui_panel/proc/is_ready() return !broken && window.is_ready() /** * public * * Initializes tgui panel. */ /datum/tgui_panel/proc/initialize(force = FALSE) set waitfor = FALSE // Minimal sleep to defer initialization to after client constructor sleep(1) initialized_at = world.time // Perform a clean initialization window.initialize(inline_assets = list( get_asset_datum(/datum/asset/simple/tgui_common), get_asset_datum(/datum/asset/simple/tgui_panel), )) window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/tgfont)) window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat)) // Other setup request_telemetry() addtimer(CALLBACK(src, .proc/on_initialize_timed_out), 5 SECONDS) /** * private * * Called when initialization has timed out. */ /datum/tgui_panel/proc/on_initialize_timed_out() // Currently does nothing but sending a message to old chat. SEND_TEXT(client, "Failed to load fancy chat, click HERE to attempt to reload it.") /** * private * * Callback for handling incoming tgui messages. */ /datum/tgui_panel/proc/on_message(type, payload) if(type == "ready") broken = FALSE window.send_message("update", list( "config" = list( "client" = list( "ckey" = client.ckey, "address" = client.address, "computer_id" = client.computer_id, ), "window" = list( "fancy" = FALSE, "locked" = FALSE, ), ), )) return TRUE if(type == "audio/setAdminMusicVolume") client.admin_music_volume = payload["volume"] return TRUE if(type == "telemetry") analyze_telemetry(payload) return TRUE /** * public * * Sends a round restart notification. */ /datum/tgui_panel/proc/send_roundrestart() window.send_message("roundrestart")