Move onClick handlers to separate functions and add PORT env variable for backend

main
Talon 2024-08-30 16:06:46 +02:00
parent c959741f45
commit 36a67a2ca1
3 changed files with 82 additions and 69 deletions

View File

@ -14,5 +14,4 @@ export const OPENAI_API_KEY= process.env["OPENAI_API_KEY"] || "";
export const OPENAI_MODEL = process.env["OPENAI_MODEL"] || "gpt-4o";
export const OLLAMA_URL= process.env["OLLAMA_URL"] || "http://localhost:11434";
export const OLLAMA_MODEL= process.env["OLLAMA_MODEL"] || "moondream";
// list all files in /usr/src/app/data/
export const PORT = parseInt(process.env["PORT"]!) || 3000;

View File

@ -24,6 +24,6 @@ wss.on('connection', (ws: WebSocket) => {
});
});
server.listen(3000, () => {
logger.info(`Server is running on http://localhost:${3000}`);
server.listen(PORT, () => {
logger.info(`Server is running on http://localhost:${PORT}`);
});

View File

@ -81,31 +81,15 @@ export class MainView extends View {
public onCreate(): void {
this.settingsButton = new Button("Settings");
this.settingsButton.setPosition(0, 0, 10, 10);
this.settingsButton.onClick(() => {
new SettingsDialog().open();
});
this.settingsButton.onClick(() => this.openSettingsDialog());
this.channelSwitcher = new Dropdown("Channel", []);
this.channelSwitcher.setPosition(30, 10, 30, 10);
this.channelInfoButton = new Button("Channel info");
this.channelInfoButton.setPosition(60, 10, 30, 10);
this.searchButton = new Button("Search");
this.searchButton.setPosition(90, 10, 10, 10);
this.searchButton.onClick(async () => {
const searchDialog = new SearchDialog();
const res = await searchDialog.open();
if (res) {
if (res.channelId && res.messageId) {
if (state.currentChannel?.id !== res.channelId) {
this.switchChannel(res.channelId.toString());
this.renderInitialMessageList();
}
const message = state.currentChannel!.getMessage(res.messageId);
if (message) {
this.messageElementMap.get(message.id)?.focus();
}
}
}
})
this.searchButton.onClick(async () => this.openSearchDialog());
this.fileInput = new FileInput("Upload file");
this.fileInput.setPosition(0, 90, 15, 10);
this.imageInput = new Button("Image");
@ -127,22 +111,8 @@ export class MainView extends View {
this.window.add(this.fileInput);
this.window.add(this.imageInput);
this.window.add(this.voiceMessageInput);
this.channelSwitcher.getElement().addEventListener("change", (e) => {
const target = e.target as HTMLSelectElement;
if (target.value === "__new__") {
this.createNewChannel();
} else {
this.switchChannel(target.value);
this.renderInitialMessageList();
this.syncMessages();
}
});
this.voiceMessageInput.onClick(async () => {
const blob = await new RecordAudioDialog().open();
if (blob) {
this.uploadVoiceMessage(blob);
}
})
this.channelSwitcher.getElement().addEventListener("change", (e) => this.handleChannelSwitcher(e));
this.voiceMessageInput.onClick(async () => this.handleVoiceMessageButton());
this.messageInput.onKeyDown((key: string, alt: boolean | undefined, shift: boolean | undefined, ctrl: boolean | undefined) => {
if (key === "Enter") {
@ -152,36 +122,8 @@ export class MainView extends View {
}
}
});
this.channelInfoButton.onClick(() => {
if (this.channelSwitcher.getSelectedValue() === "__new__") {
this.createNewChannel();
return;
}
const d = new ChannelDialog(state.currentChannel!);
d.open().then((chan) => {
if (!chan) {
state.removeChannel(state.currentChannel!);
state.currentChannel = null;
this.updateChannelList();
state.save();
if (state.channelList.channels.length > 0) {
return this.switchChannel(state.channelList.channels[0].id.toString());
} else {
return this.createNewChannel();
}
}
if (chan.messages.length < 1) {
this.renderInitialMessageList(true);
this.syncMessages();
}
state.save();
this.updateChannelList();
});
})
this.imageInput.onClick(async () => {
const photo = await new TakePhotoDialog().open();
this.uploadImage(photo);
});
this.channelInfoButton.onClick(() => this.handleChannelInfoButton());
this.imageInput.onClick(async () => this.handleImageButton());
}
public onDestroy(): void {
@ -550,4 +492,76 @@ export class MainView extends View {
this.messageList.add(elem);
this.messageElementMap.set(message.id, elem);
}
private async openSettingsDialog() {
const d = new SettingsDialog();
d.open();
}
private async openSearchDialog() {
const searchDialog = new SearchDialog();
const res = await searchDialog.open();
if (res) {
if (res.channelId && res.messageId) {
if (state.currentChannel?.id !== res.channelId) {
this.switchChannel(res.channelId.toString());
this.renderInitialMessageList();
}
const message = state.currentChannel!.getMessage(res.messageId);
if (message) {
this.messageElementMap.get(message.id)?.focus();
}
}
}
}
private handleChannelSwitcher(e: Event) {
const target = e.target as HTMLSelectElement;
if (target.value === "__new__") {
this.createNewChannel();
} else {
this.switchChannel(target.value);
this.renderInitialMessageList();
this.syncMessages();
}
}
private async handleVoiceMessageButton() {
const blob = await new RecordAudioDialog().open();
if (blob) {
this.uploadVoiceMessage(blob);
}
}
private async handleChannelInfoButton() {
if (this.channelSwitcher.getSelectedValue() === "__new__") {
this.createNewChannel();
return;
}
const d = new ChannelDialog(state.currentChannel!);
d.open().then((chan) => {
if (!chan) {
state.removeChannel(state.currentChannel!);
state.currentChannel = null;
this.updateChannelList();
state.save();
if (state.channelList.channels.length > 0) {
return this.switchChannel(state.channelList.channels[0].id.toString());
} else {
return this.createNewChannel();
}
}
if (chan.messages.length < 1) {
this.renderInitialMessageList(true);
this.syncMessages();
}
state.save();
this.updateChannelList();
});
}
private async handleImageButton() {
const photo = await new TakePhotoDialog().open();
this.uploadImage(photo);
}
}