From 3fb97858829e53837201a8206e745a22e54f2ae1 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Mon, 6 Apr 2026 15:50:13 +0000 Subject: [PATCH] make file transfer initiate automatically --- bun.lockb | Bin 12053 -> 12416 bytes dist/index.js | 61 +++++++++++++----- package.json | 2 +- src/Model/Global/fileTransferModel.ts | 34 +++++++++- src/View/Modals/dataTransferModal.tsx | 15 +---- src/View/Modals/taskSettingsModal.tsx | 2 +- src/View/translations.ts | 8 +-- src/ViewModel/Chat/chatViewModel.ts | 15 +++-- src/ViewModel/Global/connectionViewModel.ts | 1 + src/ViewModel/Global/coreViewModel.ts | 3 +- src/ViewModel/Global/fileTransferViewModel.ts | 5 ++ src/ViewModel/Global/notificationViewModel.ts | 1 + src/ViewModel/Pages/boardViewModel.ts | 12 ++-- src/ViewModel/Pages/taskPageViewModel.ts | 2 + src/ViewModel/Pages/taskViewModel.ts | 4 +- 15 files changed, 112 insertions(+), 53 deletions(-) diff --git a/bun.lockb b/bun.lockb index 6526cdab54754182b9beb6bab8be9ebb1206a3a7..eec189599f547b3df2f5b91c38e0990f59514b28 100755 GIT binary patch delta 555 zcmbOl*N`|tPcwJ!`TIqoCmdxn_jW1?$+#`=RtcUtCB!?iOx9i@G%NpuJ_8uYPYjo5 zl2({l@qweXG&2PxHaUaw1BdiGAI}S_a;G;(FmZ4&a!(dy*5|y>$-rR9z|g=uIg!bH z@&_gkP5~|k1`D7F7f{4{@)fQ(jB=Ata(&;tf@d#h{Zuo{%J4AVET&}tZ4HaVZ6cv0#!VmVJTZg5Xe(OL7riD^DI>*|U=Ip3u*P8QUj&R7zVN{>rdk@AJq0 zWYwp01YP#2oLe7q@4&D9?=7qLyY6$8Vw>^kHj=?|n>UJ0W&-+!MF8ggvp`=80sS=j zAdmazZpm)e$puV?TnP#gCv+%GR*<&=h62OC{}2EY2e}VuDi|a4cPM~(3=9T}lgs4Q zCeM&B;R7j6Py~xI+yDy$!^~2l7%ah|1d$L?oxDpSg3)lZu;OJV0b@M_Jp+bBRft@o z>f~?A&Ri3q+#C9vomJj)iW};cq*tY67MJMe<)@_TCuQd8gM2heLmKQeeO)kD*AQsf NmDGvVw2na+!r)neKPa9OB&3s>c8ZaudVl znZ)ELR(zOT!1!Tv1``JdBiCd_W__l!oSR>9=`l{$;Qp{#f_E#YL#>#cVR2mjbY4-J zGjnuoQoJUA|FQ4rKaF~unatPc&s}=tprf(+f-QC1Eu { - createProxyState([this.selectedPage, this.chatListViewModel.selectedChat], () => { - if (this.chatListViewModel.selectedChat.value != this) return; - if (this.selectedPage.value != "messages" /* Messages */) return; - this.setReadStatus(false); - }); + createProxyState( + [this.selectedPage, this.chatListViewModel.selectedChat], + () => { + if (this.chatListViewModel.selectedChat.value != this) return; + if (this.selectedPage.value != "messages" /* Messages */) return; + this.setReadStatus(false); + } + ); }; this.storageModel = storageModel2; this.chatModel = chatModel; @@ -5147,6 +5152,7 @@ this.connectToAddress(this.serverAddressInput.value); }; this.connectToAddress = (address) => { + console.log(address); this.connectionModel.connect(address); }; this.disconnect = () => { @@ -5282,6 +5288,7 @@ this.showTransferDataModal = () => { this.presentedModal.value = 2 /* TransferDataDisplay */; this.getTransferData(); + this.fileTransferModel.prepareToSend(); }; this.initiateTransfer = () => { this.presentedModal.value = 3 /* TransferDisplay */; @@ -5316,6 +5323,9 @@ this.fileTransferModel.fileHandlerManager.addHandler( this.handleReceivedFile ); + this.fileTransferModel.readyToSendHandlerManager.addHandler( + () => this.initiateTransfer() + ); } }; @@ -5463,11 +5473,10 @@ ), /* @__PURE__ */ createElement( "button", { - class: "primary flex", - "on:click": fileTransferViewModel2.initiateTransfer + disabled: true, + class: "flex" }, - translations.dataTransferModal.sendButton, - /* @__PURE__ */ createElement("span", { class: "icon" }, "arrow_forward") + translations.general.waitingLabel )))); } function TransferDisplayModal(fileTransferViewModel2) { @@ -5554,7 +5563,7 @@ [fileTransferViewModel2.presentedModal], () => fileTransferViewModel2.presentedModal.value == 5 /* ReceptionDisplay */ ); - return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement("p", { class: "secondary" }, translations.dataTransferModal.readyToReceiveDescription), /* @__PURE__ */ createElement( + return /* @__PURE__ */ createElement("div", { class: "modal", "toggle:open": isPresented }, /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h2", null, translations.dataTransferModal.transferDataHeadline), /* @__PURE__ */ createElement( "p", { class: "secondary", @@ -5573,10 +5582,12 @@ } // src/Model/Global/fileTransferModel.ts - var FileTransferModel = class { + var FileTransferModel = class _FileTransferModel { // init constructor(storageModel2, connectionModel2) { this.fileHandlerManager = new HandlerManager(); + this.readyToSendHandlerManager = new HandlerManager(); + this.direction = 0 /* Send */; // general this.generateTransferData = () => { const transferData = { @@ -5586,15 +5597,29 @@ this.transferData = transferData; return transferData; }; + this.prepareToSend = () => { + this.direction = 0 /* Send */; + this.connectionModel.addChannel(this.transferData.channel); + }; this.prepareToReceive = (transferData) => { + this.direction = 1 /* Receive */; this.connectionModel.addChannel(transferData.channel); this.transferData = transferData; + this.connectionModel.sendPlainMessage( + transferData.channel, + _FileTransferModel.READY_MESSAGE + ); }; // handlers this.handleMessage = (data) => { + console.log(this.transferData); + if (data.messageChannel != this.transferData.channel) return; + if (data.messageBody == _FileTransferModel.READY_MESSAGE && this.direction == 0 /* Send */) { + console.log("TRIGGER"); + this.readyToSendHandlerManager.trigger(true); + } if (this.transferData == void 0) return; if (data.messageBody == void 0) return; - if (data.messageChannel != this.transferData.channel) return; this.handleFile(data.messageBody); }; this.handleFile = async (encryptedFileData) => { @@ -5603,7 +5628,6 @@ encryptedFileData, this.transferData.key ); - console.log(decrypted); const parsed = parse(decrypted); const isFileData = checkMatchesObjectStructure( parsed, @@ -5653,6 +5677,9 @@ this.handleMessage ); } + static { + this.READY_MESSAGE = "ready"; + } }; var FileDataReference = { path: [""], diff --git a/package.json b/package.json index 380d41d5..95fb8dee 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "dependencies": { "@types/uuid": "^10.0.0", - "bloatless-react": "^1.3.10", + "bloatless-react": "^1.3.11", "esbuild": "^0.23.0", "udn-frontend": "^1.0.9", "uuid": "^10.0.0" diff --git a/src/Model/Global/fileTransferModel.ts b/src/Model/Global/fileTransferModel.ts index 9317558b..35ed07b2 100644 --- a/src/Model/Global/fileTransferModel.ts +++ b/src/Model/Global/fileTransferModel.ts @@ -17,9 +17,13 @@ export default class FileTransferModel { storageModel: StorageModel; connectionModel: ConnectionModel; + static READY_MESSAGE = "ready"; + // data transferData: TransferData | undefined; fileHandlerManager: HandlerManager = new HandlerManager(); + readyToSendHandlerManager: HandlerManager = new HandlerManager(); + direction: TransferDirections = TransferDirections.Send; // general generateTransferData = (): TransferData => { @@ -31,16 +35,36 @@ export default class FileTransferModel { return transferData; }; - prepareToReceive = (transferData: TransferData) => { + prepareToSend = (): void => { + this.direction = TransferDirections.Send; + this.connectionModel.addChannel(this.transferData.channel); + }; + + prepareToReceive = (transferData: TransferData): void => { + this.direction = TransferDirections.Receive; + this.connectionModel.addChannel(transferData.channel); this.transferData = transferData; + this.connectionModel.sendPlainMessage( + transferData.channel, + FileTransferModel.READY_MESSAGE, + ); }; // handlers handleMessage = (data: Message): void => { + console.log(this.transferData); + if (data.messageChannel != this.transferData.channel) return; + if ( + data.messageBody == FileTransferModel.READY_MESSAGE && + this.direction == TransferDirections.Send + ) { + console.log("TRIGGER"); + this.readyToSendHandlerManager.trigger(true); + } + if (this.transferData == undefined) return; if (data.messageBody == undefined) return; - if (data.messageChannel != this.transferData.channel) return; this.handleFile(data.messageBody); }; @@ -52,7 +76,6 @@ export default class FileTransferModel { encryptedFileData, this.transferData.key, ); - console.log(decrypted); const parsed: any = parse(decrypted); const isFileData: boolean = checkMatchesObjectStructure( @@ -131,3 +154,8 @@ export const FileDataReference: FileData = { path: [""], body: "", }; + +export enum TransferDirections { + Send, + Receive, +} diff --git a/src/View/Modals/dataTransferModal.tsx b/src/View/Modals/dataTransferModal.tsx index adaf5c06..a6211a0d 100644 --- a/src/View/Modals/dataTransferModal.tsx +++ b/src/View/Modals/dataTransferModal.tsx @@ -281,12 +281,8 @@ function TransferDataDisplayModal( > {translations.general.backButton} - @@ -461,13 +457,6 @@ function DataReceptionModal(fileTransferViewModel: FileTransferViewModel) { {translations.dataTransferModal.transferDataHeadline} -

- { - translations.dataTransferModal - .readyToReceiveDescription - } -

-

+