Files
VOREStation/code/modules/tgui_panel/tgui_panel.dm
52ce9232fc Chat history prototype (#17206)
* Chat history prototype

* changes

* static defines

* bunch of fixes (#17207)

* bunch of fixes

* multi round export

* allow to export 1 specific round

* prepare for databse load

* Update code/__defines/vchatlog.dm

---------

Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com>

* fixed typo

* beginning of loading

* frontend

* data/chatlogs

* loading lines

* lint fix

* more fixes

* new define

* less spam

* timeout the loading (#17214)

* more frontend fixes

* ckey

* some comments and reverts (#17220)

* some comments and reverts

* we should fix that too

* .

* api

* cleanup (#17232)

* Button.Confirm

* API

* Up to date binaries

* Default set for chatlog backend

* Removed unused verbs

* fix that

* Update misc.dm

* .

* .

---------

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
2025-03-02 15:04:33 +01:00

115 lines
3.0 KiB
Plaintext

/*!
* 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
var/oldchat = FALSE
/datum/tgui_panel/New(client/client, id)
src.client = client
window = new(client, id)
window.subscribe(src, PROC_REF(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 TICKS)
initialized_at = world.time
// Perform a clean initialization
window.initialize(
strict_mode = TRUE,
assets = list(
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_batched/chat))
// Other setup
request_telemetry()
addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS)
window.send_message("testTelemetryCommand")
/**
* 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, span_userdanger("Failed to load fancy chat, click <a href='byond://?src=[REF(src)];reload_tguipanel=1'>HERE</a> 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
var/list/stored_rounds = CONFIG_GET(flag/chatlog_database_backend) ? vchatlog_get_recent_roundids(client.ckey) : null
window.send_message("connected", list(
"round_id" = GLOB.round_id, // Sends the round ID to the chat, requires round IDs
"chatlog_db_backend" = CONFIG_GET(flag/chatlog_database_backend),
"chatlog_api_endpoint" = CONFIG_GET(string/chatlog_database_api_endpoint),
"chatlog_stored_rounds" = islist(stored_rounds) ? list("0") + stored_rounds : list("0"),
))
window.send_message("update", list(
"config" = list(
"client" = list(
"ckey" = client.ckey,
"chatlog_token" = client.chatlog_token,
"address" = client.address,
"computer_id" = client.computer_id,
),
"server" = list(
"round_id" = GLOB.round_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")