friends system (appears fully functional)
This commit is contained in:
@@ -11,6 +11,8 @@ pub enum RemoteError {
|
||||
Http(#[from] reqwest::Error),
|
||||
#[error("JSON parse error: {0}")]
|
||||
Json(#[from] serde_json::Error),
|
||||
#[error("{0}")]
|
||||
Api(String),
|
||||
}
|
||||
|
||||
#[derive(Default, Serialize, Deserialize, Clone, Debug, TS)]
|
||||
@@ -175,6 +177,18 @@ impl FriendRemote {
|
||||
"FriendRemote::send_friend_request - Received response with status: {}",
|
||||
resp.status()
|
||||
);
|
||||
|
||||
if resp.status() == reqwest::StatusCode::CONFLICT {
|
||||
let text = resp.text().await.unwrap_or_default();
|
||||
// try to parse the error message
|
||||
let error_msg = serde_json::from_str::<serde_json::Value>(&text)
|
||||
.ok()
|
||||
.and_then(|v| v.get("message").and_then(|m| m.as_str().map(String::from)))
|
||||
.unwrap_or_else(|| "Conflict error".to_string());
|
||||
|
||||
return Err(RemoteError::Api(error_msg));
|
||||
}
|
||||
|
||||
let resp = resp.error_for_status().map_err(|e| {
|
||||
tracing::error!("FriendRemote::send_friend_request - HTTP error: {}", e);
|
||||
e
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
import { onMount, onDestroy } from "svelte";
|
||||
import { listen } from "@tauri-apps/api/event";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import { appData } from "../../../events/app-data";
|
||||
import type { FriendRequestResponseDto } from "../../../types/bindings/FriendRequestResponseDto.js";
|
||||
@@ -42,9 +43,40 @@
|
||||
})),
|
||||
];
|
||||
|
||||
onMount(() => {
|
||||
let unlisteners: (() => void)[] = [];
|
||||
|
||||
onMount(async () => {
|
||||
refreshReceived();
|
||||
refreshSent();
|
||||
|
||||
unlisteners.push(
|
||||
await listen("friend-request-received", () => {
|
||||
refreshReceived();
|
||||
}),
|
||||
);
|
||||
|
||||
unlisteners.push(
|
||||
await listen("friend-request-accepted", () => {
|
||||
refreshSent();
|
||||
invoke("refresh_app_data");
|
||||
}),
|
||||
);
|
||||
|
||||
unlisteners.push(
|
||||
await listen("friend-request-denied", () => {
|
||||
refreshSent();
|
||||
}),
|
||||
);
|
||||
|
||||
unlisteners.push(
|
||||
await listen("unfriended", () => {
|
||||
invoke("refresh_app_data");
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
onDestroy(() => {
|
||||
unlisteners.forEach((unlisten) => unlisten());
|
||||
});
|
||||
|
||||
async function refreshReceived() {
|
||||
@@ -153,7 +185,13 @@
|
||||
});
|
||||
await refreshSent();
|
||||
} catch (e) {
|
||||
error = (e as Error)?.message ?? String(e);
|
||||
const msg = (e as Error)?.message ?? String(e);
|
||||
// If the server returns a conflict error (already friends or request exists), show "User not found"
|
||||
if (msg.toLowerCase().includes("already")) {
|
||||
error = "User not found";
|
||||
} else {
|
||||
error = msg;
|
||||
}
|
||||
} finally {
|
||||
loading.action = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user