diff --git a/.cargo/config.toml b/.cargo/config.toml
index 1c37730a..f3aa06b2 100644
--- a/.cargo/config.toml
+++ b/.cargo/config.toml
@@ -1,3 +1,6 @@
+[build]
+target = "wasm32-unknown-unknown"
+
[profile]
[profile.dioxus-wasm]
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e680f727..ccdda06d 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,8 +5,8 @@
-
-
+
+
@@ -15,7 +15,11 @@
+
+
+
+
@@ -29,6 +33,9 @@
+
+
+
{
"associatedIndex": 3
}
@@ -57,7 +64,7 @@
"nodejs_package_manager_path": "npm",
"org.rust.cargo.project.model.PROJECT_DISCOVERY": "true",
"org.rust.cargo.project.model.impl.CargoExternalSystemProjectAware.subscribe.first.balloon": "",
- "settings.editor.selected.configurable": "Runtime.Targets.Configurable",
+ "settings.editor.selected.configurable": "language.rust.cargo.check",
"vue.rearranger.settings.migration": "true"
}
}
@@ -231,6 +238,9 @@
+
+
+
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 2e62bd7b..be98f618 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,3 @@
{
- "rust-analyzer.cargo.target": "wasm32-unknown-unknown"
+ "rust-analyzer.diagnostics.enable": false
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 76684c7f..3ce54dd1 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -1,29 +1,31 @@
{
"version": "2.0.0",
"tasks": [
- {
- "label": "dx build",
- "type": "shell",
- "command": "dx",
- "args": ["build", "--platform", "web"],
- "options": {
- "cwd": "${workspaceFolder}/ui"
- },
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "problemMatcher": {
- "owner": "rust",
- "fileLocation": ["relative", "${workspaceFolder}"],
- "pattern": {
- "regexp": "^(.*):(\\d+):(\\d+):\\s(\\d+):\\s(.*)$",
- "file": 1,
- "line": 2,
- "column": 3,
- "message": 5
+ {
+ "label": "Build with dx in ui directory",
+ "type": "shell",
+ "command": "dx build --platform web",
+ "options": {
+ "cwd": "${workspaceFolder}/ui"
+ },
+ "problemMatcher": {
+ "owner": "rust",
+ "fileLocation": ["relative", "${workspaceFolder}"],
+ "pattern": [
+ {
+ "regexp": "^(.+):(\\d+):(\\d+):\\s+(error|warning):\\s+(.*)$",
+ "file": 1,
+ "line": 2,
+ "column": 3,
+ "severity": 4,
+ "message": 5
+ }
+ ]
+ },
+ "group": {
+ "kind": "build",
+ "isDefault": true
}
}
- }
]
}
diff --git a/ui/src/components/app.rs b/ui/src/components/app.rs
index bf8e44d4..754789cf 100644
--- a/ui/src/components/app.rs
+++ b/ui/src/components/app.rs
@@ -3,18 +3,11 @@ mod freenet_api;
use super::{conversation::Conversation, members::MemberList, room_list::RoomList};
use crate::components::members::member_info_modal::MemberInfoModal;
use crate::components::room_list::edit_room_modal::EditRoomModal;
-use crate::constants::ROOM_CONTRACT_WASM;
use crate::room_data::{CurrentRoom, Rooms};
-use crate::util::to_cbor_vec;
use common::room_state::member::MemberId;
-use common::room_state::ChatRoomParametersV1;
use dioxus::prelude::*;
use document::Stylesheet;
use ed25519_dalek::VerifyingKey;
-use freenet_stdlib::client_api::WebApi;
-use freenet_stdlib::client_api::{ClientError, ClientRequest, HostResponse};
-use freenet_stdlib::prelude::{ContractCode, ContractInstanceId, Parameters};
-use futures::SinkExt;
pub fn App() -> Element {
use_context_provider(|| Signal::new(initial_rooms()));
@@ -23,7 +16,7 @@ pub fn App() -> Element {
use_context_provider(|| Signal::new(EditRoomModalSignal { room: None }));
use_context_provider(|| Signal::new(CreateRoomModalSignal { show: false }));
- connect_to_freenet();
+ //connect_to_freenet();
rsx! {
Stylesheet { href: asset!("./assets/bulma.min.css") }
diff --git a/ui/src/components/app/freenet_api.rs b/ui/src/components/app/freenet_api.rs
new file mode 100644
index 00000000..7bbdf0e2
--- /dev/null
+++ b/ui/src/components/app/freenet_api.rs
@@ -0,0 +1,65 @@
+use common::room_state::ChatRoomParametersV1;
+use ed25519_dalek::VerifyingKey;
+use freenet_stdlib::{client_api::{ClientError, ClientRequest, ContractRequest, HostResponse}, prelude::{ContractCode, ContractInstanceId, ContractKey, Parameters}};
+use freenet_stdlib::client_api::WebApi;
+
+use crate::{constants::ROOM_CONTRACT_WASM, util::to_cbor_vec};
+use futures::sink::SinkExt;
+
+pub struct FreenetApi<'a> {
+ pub api: WebApi,
+ pub requests: futures::channel::mpsc::UnboundedReceiver>,
+ pub host_responses: futures::channel::mpsc::UnboundedSender,
+}
+
+impl FreenetApi<'_> {
+ pub fn new() -> Self {
+ let conn = web_sys::WebSocket::new(
+ "ws://localhost:50509/contract/command?encodingProtocol=native",
+ )
+ .unwrap();
+ let (send_host_responses, host_responses) = futures::channel::mpsc::unbounded();
+ let (send_half, requests) =
+ futures::channel::mpsc::unbounded::();
+ let result_handler = move |result: Result| {
+ let mut send_host_responses_clone = send_host_responses.clone();
+ let _ = wasm_bindgen_futures::future_to_promise(async move {
+ send_host_responses_clone
+ .send(result)
+ .await
+ .expect("channel open");
+ Ok(wasm_bindgen::JsValue::NULL)
+ });
+ };
+ let (tx, rx) = futures::channel::oneshot::channel();
+ let onopen_handler = move || {
+ let _ = tx.send(());
+ };
+ let mut api = WebApi::start(
+ conn,
+ result_handler,
+ |err| {
+ log::error!("host error: {}", err);
+ },
+ onopen_handler,
+ );
+ todo!()
+ //Self {
+ // api,
+ // requests: requests,
+ // host_responses: host_responses,
+ // }
+ }
+
+ pub fn subscribe(&mut self, room_owner: &VerifyingKey) {
+ let parameters = ChatRoomParametersV1 { owner: *room_owner };
+ let parameters = to_cbor_vec(¶meters);
+ let parameters: Parameters = parameters.into();
+ let contract_code = ContractCode::from(ROOM_CONTRACT_WASM);
+ let contract_instance_id =
+ ContractInstanceId::from_params_and_code(parameters, contract_code);
+ let contract_key = ContractKey::from(contract_instance_id);
+ let request = ContractRequest::Subscribe {key : contract_key, summary : None };
+ // self.api.send_request(request);
+ }
+}