Move onClick handlers to separate functions and add PORT env variable for backend
parent
c959741f45
commit
36a67a2ca1
|
@ -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;
|
|
@ -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}`);
|
||||
});
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue