Update TDLib installation process and refine socket payload handling

- Modified `build-tdlib-from-source.sh` to manually install `tdjson` libraries, addressing potential installation failures.
- Updated `socket_manager.rs` to handle payloads with an additional parameter in `Payload::Text`, improving data extraction and connection management.
This commit is contained in:
Steven Enamakel
2026-02-05 20:56:51 +05:30
parent 58b820c308
commit 54e0fc059a
3 changed files with 10 additions and 6 deletions
+5 -1
View File
@@ -126,7 +126,11 @@ else
-DTD_ENABLE_JNI=OFF
cmake --build . --target tdjson -j"$(sysctl -n hw.ncpu)"
cmake --install .
# cmake --install may fail on missing static lib targets we don't need.
# Just install tdjson manually.
mkdir -p "$INSTALL_DIR/lib"
cp -a libtdjson*.dylib "$INSTALL_DIR/lib/"
echo "==> TDLib installed to ${INSTALL_DIR}"
fi
+5 -5
View File
@@ -178,7 +178,7 @@ impl SocketManager {
.opening_header("Authorization", format!("Bearer {}", token))
.reconnect(true)
.max_reconnect_attempts(0) // unlimited
.transport_type(tf_rust_socketio::TransportType::Any)
.transport_type(tf_rust_socketio::TransportType::Websocket)
// --- Connection established ---
.on("connect", move |_payload, _client: Client| {
let shared = Arc::clone(&s_connect);
@@ -201,7 +201,7 @@ impl SocketManager {
Self::emit_state_change(&shared);
}
// Try to extract socket_id from the message payload
if let Payload::Text(values) = &payload {
if let Payload::Text(values, _) = &payload {
if let Some(val) = values.first() {
if let Some(sid) = val.get("sid").and_then(|v| v.as_str()) {
*shared.socket_id.write() = Some(sid.to_string());
@@ -377,7 +377,7 @@ impl SocketManager {
*shared.status.write() = ConnectionStatus::Connected;
Self::emit_state_change(&shared);
}
if let Payload::Text(values) = &payload {
if let Payload::Text(values, _) = &payload {
if let Some(val) = values.first() {
if let Some(sid) = val.get("sid").and_then(|v| v.as_str()) {
*shared.socket_id.write() = Some(sid.to_string());
@@ -695,7 +695,7 @@ impl Default for SocketManager {
#[cfg(not(target_os = "android"))]
fn extract_json(payload: &Payload) -> Option<serde_json::Value> {
match payload {
Payload::Text(values) => values.first().cloned(),
Payload::Text(values, _) => values.first().cloned(),
#[allow(unreachable_patterns)]
_ => None,
}
@@ -705,7 +705,7 @@ fn extract_json(payload: &Payload) -> Option<serde_json::Value> {
#[cfg(not(target_os = "android"))]
fn extract_text(payload: &Payload) -> String {
match payload {
Payload::Text(values) => values
Payload::Text(values, _) => values
.first()
.map(|v| v.to_string())
.unwrap_or_else(|| "unknown".to_string()),
Binary file not shown.