diff --git a/package.json b/package.json index 382f046..ba5cfd9 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "license": "MIT", "dependencies": { - "@solidjs/router": "^0.13.4", + "@solidjs/router": "^0.13.5", "@tauri-apps/api": ">=2.0.0-beta.0", "@tauri-apps/plugin-shell": ">=2.0.0-beta.0", "solid-js": "^1.7.8" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4254e96..c8e0b98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@solidjs/router': - specifier: ^0.13.4 - version: 0.13.4(solid-js@1.8.17) + specifier: ^0.13.5 + version: 0.13.5(solid-js@1.8.17) '@tauri-apps/api': specifier: '>=2.0.0-beta.0' version: 2.0.0-beta.13 @@ -380,8 +380,8 @@ packages: cpu: [x64] os: [win32] - '@solidjs/router@0.13.4': - resolution: {integrity: sha512-UvL/8TkP3ExE/Z5KDs0wdqesWasISsRTrrredcTbxQx/eNdRXr8BXFsa3GV2f6VSQVjbukWG5cRAcIzV76nl/g==} + '@solidjs/router@0.13.5': + resolution: {integrity: sha512-I/bR5ZHCz2Dx80qL+6uGwSdclqXRqoT49SJ5cvLbOuT3HnYysSIxSfULCTWUMLFVcgPh5GrdHV6KwEoyrbPZZA==} peerDependencies: solid-js: ^1.8.6 @@ -1072,7 +1072,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.18.0': optional: true - '@solidjs/router@0.13.4(solid-js@1.8.17)': + '@solidjs/router@0.13.5(solid-js@1.8.17)': dependencies: solid-js: 1.8.17 diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index cf4a750..2573d19 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -232,22 +232,6 @@ enum SendMessageError { ), } -async fn send_message( - recipient: String, - message: MlsMessageOut, - client: &Client, -) -> Result<(), SendMessageError> { - let message = message.tls_serialize_detached()?; - let response = client - .post(&format!("http://localhost:3000/messages/{}", recipient)) - .body(message) - .send() - .await?; - - response.error_for_status()?; - Ok(()) -} - #[derive(Error, Debug, Serialize)] enum InvitePackageError { #[error("No user is signed in")] @@ -280,6 +264,13 @@ enum InvitePackageError { #[serde(skip)] tls_codec::Error, ), + + #[error("Error merging pending commit")] + MergePendingCommitError( + #[from] + #[serde(skip)] + MergePendingCommitError, + ), } #[tauri::command] @@ -306,6 +297,10 @@ async fn invite_package( let (mls_message_out, welcome_out, group_information) = group.add_members(state.backend.as_ref(), &user.signature_key, &[package])?; + //TODO check if commit needs to be synchronized with others + // Merge pending commit that adds the new member + group.merge_pending_commit(state.backend.as_ref())?; + // Return welcome message to frontent to send over websockets to other clients let data = welcome_out.tls_serialize_detached()?; @@ -340,6 +335,7 @@ const JOIN_GROUP_EVENT: &str = "join_group"; struct JoinGroupEvent { group_id: String, } + #[tauri::command] async fn process_message( data: Vec, @@ -367,7 +363,7 @@ async fn process_message( return Ok(()); } - todo!() + unimplemented!("Processing messages is not implemented yet"); } #[tauri::command] @@ -436,6 +432,7 @@ pub fn run() { create_user, get_groups, invite_package, + process_message, ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); diff --git a/src/AppContext.tsx b/src/AppContext.tsx index fd4b2f1..a28ed02 100644 --- a/src/AppContext.tsx +++ b/src/AppContext.tsx @@ -1,7 +1,6 @@ import { invoke } from "@tauri-apps/api/core"; import { listen } from "@tauri-apps/api/event"; import { - Accessor, JSX, Resource, Setter, @@ -12,6 +11,12 @@ import { } from "solid-js"; const socket = new WebSocket("ws://localhost:3000/ws"); +socket.addEventListener("message", async (event) => { + if (typeof event.data === "string") + throw new Error("Unexpected string as message event payload"); + + await invoke("process_message", event.data); +}); const [groups, { mutate: setGroups }] = createResource( async () => (await invoke("get_groups")) as string[] ); diff --git a/src/index.tsx b/src/index.tsx index 95c59f0..01e062b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -4,7 +4,7 @@ import { Route, Router } from "@solidjs/router"; import "./styles.css"; import App from "./App"; -import Groups from "./routes/Groups"; +import Group from "./routes/Group"; import { SocketProvider } from "./AppContext"; render( @@ -12,7 +12,7 @@ render( - + ), diff --git a/src/routes/Groups.tsx b/src/routes/Group.tsx similarity index 97% rename from src/routes/Groups.tsx rename to src/routes/Group.tsx index a177663..2f53417 100644 --- a/src/routes/Groups.tsx +++ b/src/routes/Group.tsx @@ -11,7 +11,7 @@ async function getPackagesIndex() { return (await response.json()) as string[]; } -export default function Groups() { +export default function Group() { const parameters = useParams(); const sendMessage = useWebSocket(); const groupId = () => parameters.id;