improve connection section

This commit is contained in:
marlon-erler
2024-07-09 14:18:38 +02:00
parent 48633ce534
commit 2d7b9e54da
3 changed files with 47 additions and 18 deletions
+20 -7
View File
@@ -580,9 +580,13 @@
// src/Model/model.ts // src/Model/model.ts
var UDN = new UDNFrontend(); var UDN = new UDNFrontend();
var currentAddress = new State("");
var isConnected = new State(false); var isConnected = new State(false);
var serverAddressInput = restoreState("socket-address", ""); var serverAddressInput = restoreState("socket-address", "");
var didRequestConnection = restoreState(
"did-request-connection",
false
);
var currentAddress = restoreState("current-address", "");
var cannotDisonnect = createProxyState( var cannotDisonnect = createProxyState(
[isConnected], [isConnected],
() => isConnected.value == false () => isConnected.value == false
@@ -591,16 +595,25 @@
[serverAddressInput, currentAddress, isConnected], [serverAddressInput, currentAddress, isConnected],
() => serverAddressInput.value == "" || currentAddress.value == serverAddressInput.value && isConnected.value == true () => serverAddressInput.value == "" || currentAddress.value == serverAddressInput.value && isConnected.value == true
); );
var cannotResetAddress = createProxyState(
[serverAddressInput, currentAddress],
() => serverAddressInput.value == currentAddress.value
);
function connect() { function connect() {
if (cannotConnect.value == true) return; if (cannotConnect.value == true) return;
currentAddress.value = serverAddressInput.value; currentAddress.value = serverAddressInput.value;
isConnected.value = false; isConnected.value = false;
didRequestConnection.value = true;
UDN.connect(serverAddressInput.value); UDN.connect(serverAddressInput.value);
} }
function disconnect() { function disconnect() {
didRequestConnection.value = false;
if (cannotDisonnect.value == true) return; if (cannotDisonnect.value == true) return;
UDN.disconnect(); UDN.disconnect();
} }
function resetAddressInput() {
serverAddressInput.value = currentAddress.value;
}
UDN.onconnect = () => { UDN.onconnect = () => {
isConnected.value = true; isConnected.value = true;
}; };
@@ -644,7 +657,7 @@
var isEncryptionUnavailable = window.crypto.subtle == void 0; var isEncryptionUnavailable = window.crypto.subtle == void 0;
var senderName = restoreState("sender-name", ""); var senderName = restoreState("sender-name", "");
var selectedChat = new State(void 0); var selectedChat = new State(void 0);
if (serverAddressInput.value != "") { if (serverAddressInput.value != "" && didRequestConnection.value == true) {
connect(); connect();
} }
@@ -879,7 +892,7 @@
))), /* @__PURE__ */ createElement("div", { class: "flex-row width-input justify-end" }, /* @__PURE__ */ createElement( ))), /* @__PURE__ */ createElement("div", { class: "flex-row width-input justify-end" }, /* @__PURE__ */ createElement(
"button", "button",
{ {
class: "danger width-100 flex-1", class: "danger width-100 flex-1 justify-center",
"aria-label": translation.disconnect, "aria-label": translation.disconnect,
"on:click": disconnect, "on:click": disconnect,
"toggle:disabled": cannotDisonnect "toggle:disabled": cannotDisonnect
@@ -888,16 +901,16 @@
), /* @__PURE__ */ createElement( ), /* @__PURE__ */ createElement(
"button", "button",
{ {
class: "width-100 flex-1", class: "width-100 flex-1 justify-center",
"aria-label": translation.resetAddress, "aria-label": translation.resetAddress,
"on:click": disconnect, "on:click": resetAddressInput,
"toggle:disabled": cannotDisonnect "toggle:disabled": cannotResetAddress
}, },
/* @__PURE__ */ createElement("span", { class: "icon" }, "undo") /* @__PURE__ */ createElement("span", { class: "icon" }, "undo")
), /* @__PURE__ */ createElement( ), /* @__PURE__ */ createElement(
"button", "button",
{ {
class: "primary width-100 flex-1", class: "primary width-100 flex-1 justify-center",
"aria-label": translation.connectToServer, "aria-label": translation.connectToServer,
"on:click": connect, "on:click": connect,
"toggle:disabled": cannotConnect "toggle:disabled": cannotConnect
+20 -6
View File
@@ -8,10 +8,14 @@ export const UDN = new UDNFrontend();
// CONNECTION // CONNECTION
// state // state
export const currentAddress = new React.State("");
export const isConnected = new React.State(false); export const isConnected = new React.State(false);
export const serverAddressInput = React.restoreState("socket-address", ""); export const serverAddressInput = React.restoreState("socket-address", "");
export const didRequestConnection = React.restoreState(
"did-request-connection",
false
);
export const currentAddress = React.restoreState("current-address", "");
export const cannotDisonnect = React.createProxyState( export const cannotDisonnect = React.createProxyState(
[isConnected], [isConnected],
@@ -26,21 +30,31 @@ export const cannotConnect = React.createProxyState(
isConnected.value == true) isConnected.value == true)
); );
export const cannotResetAddress = React.createProxyState(
[serverAddressInput, currentAddress],
() => serverAddressInput.value == currentAddress.value
);
// methods // methods
export function connect(): void { export function connect(): void {
if (cannotConnect.value == true) return; if (cannotConnect.value == true) return;
currentAddress.value = serverAddressInput.value; currentAddress.value = serverAddressInput.value;
isConnected.value = false; isConnected.value = false;
didRequestConnection.value = true;
UDN.connect(serverAddressInput.value); UDN.connect(serverAddressInput.value);
} }
export function disconnect(): void { export function disconnect(): void {
didRequestConnection.value = false;
if (cannotDisonnect.value == true) return; if (cannotDisonnect.value == true) return;
UDN.disconnect(); UDN.disconnect();
} }
export function resetAddressInput(): void { export function resetAddressInput(): void {
this.serverAddressInput.value = this.serverAddress.value; serverAddressInput.value = currentAddress.value;
} }
// listeners // listeners
@@ -84,16 +98,16 @@ export function deleteMailbox(): void {
UDN.onmailboxcreate = (id) => { UDN.onmailboxcreate = (id) => {
mailboxId.value = id; mailboxId.value = id;
UDN.connectMailbox(id); UDN.connectMailbox(id);
} };
UDN.onmailboxconnect = () => { UDN.onmailboxconnect = () => {
isMailboxActive.value = true; isMailboxActive.value = true;
} };
UDN.onmailboxdelete = () => { UDN.onmailboxdelete = () => {
isMailboxActive.value = false; isMailboxActive.value = false;
mailboxId.value = ""; mailboxId.value = "";
} };
// MISC // MISC
export const isEncryptionUnavailable = window.crypto.subtle == undefined; export const isEncryptionUnavailable = window.crypto.subtle == undefined;
@@ -102,6 +116,6 @@ export const senderName = React.restoreState("sender-name", "");
export const selectedChat = new React.State<Chat | undefined>(undefined); export const selectedChat = new React.State<Chat | undefined>(undefined);
// INIT // INIT
if (serverAddressInput.value != "") { if (serverAddressInput.value != "" && didRequestConnection.value == true) {
connect(); connect();
} }
+7 -5
View File
@@ -5,10 +5,12 @@ import {
cannotDeleteMailbox, cannotDeleteMailbox,
cannotDisonnect, cannotDisonnect,
cannotRequestMailbox, cannotRequestMailbox,
cannotResetAddress,
connect, connect,
deleteMailbox, deleteMailbox,
disconnect, disconnect,
requestMailbox, requestMailbox,
resetAddressInput,
serverAddressInput, serverAddressInput,
} from "../Model/model"; } from "../Model/model";
@@ -30,7 +32,7 @@ export function ConnectionSection() {
</label> </label>
<div class="flex-row width-input justify-end"> <div class="flex-row width-input justify-end">
<button <button
class="danger width-100 flex-1" class="danger width-100 flex-1 justify-center"
aria-label={translation.disconnect} aria-label={translation.disconnect}
on:click={disconnect} on:click={disconnect}
toggle:disabled={cannotDisonnect} toggle:disabled={cannotDisonnect}
@@ -38,15 +40,15 @@ export function ConnectionSection() {
<span class="icon">close</span> <span class="icon">close</span>
</button> </button>
<button <button
class="width-100 flex-1" class="width-100 flex-1 justify-center"
aria-label={translation.resetAddress} aria-label={translation.resetAddress}
on:click={disconnect} on:click={resetAddressInput}
toggle:disabled={cannotDisonnect} toggle:disabled={cannotResetAddress}
> >
<span class="icon">undo</span> <span class="icon">undo</span>
</button> </button>
<button <button
class="primary width-100 flex-1" class="primary width-100 flex-1 justify-center"
aria-label={translation.connectToServer} aria-label={translation.connectToServer}
on:click={connect} on:click={connect}
toggle:disabled={cannotConnect} toggle:disabled={cannotConnect}