147 lines
3.7 KiB
JavaScript
147 lines
3.7 KiB
JavaScript
const { invoke } = window.__TAURI__.core;
|
|
const { listen } = window.__TAURI__.event;
|
|
|
|
// Original Tauri integration code
|
|
async function refreshChannels() {
|
|
try {
|
|
const channels = await invoke("list_channels");
|
|
// Clear existing channels that aren't in the new list
|
|
const currentChannels = [...uiState.channels];
|
|
currentChannels.forEach(ch => {
|
|
if (!channels.includes(ch)) {
|
|
removeChannel(ch);
|
|
}
|
|
});
|
|
|
|
// Add new channels
|
|
channels.forEach(ch => {
|
|
if (!uiState.channels.includes(ch)) {
|
|
addChannel(ch);
|
|
}
|
|
});
|
|
} catch (e) {
|
|
addSystemMessage("Failed to refresh channels: " + e);
|
|
}
|
|
}
|
|
|
|
// Override the connect button handler to use Tauri
|
|
connectBtn.onclick = async () => {
|
|
const server = document.getElementById('server').value.trim();
|
|
const port = Number(document.getElementById('port').value);
|
|
const nickname = document.getElementById('nickname').value.trim();
|
|
|
|
if (!server || !port || !nickname) {
|
|
addSystemMessage('Please fill in server, port, and nickname.');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await invoke('connect', {
|
|
server: server,
|
|
port: port,
|
|
nickname: nickname,
|
|
useTls: false
|
|
});
|
|
|
|
uiState.connected = true;
|
|
updateConnectionStatus();
|
|
addSystemMessage('Connected to ' + server);
|
|
|
|
// Refresh channels after connection
|
|
setTimeout(refreshChannels, 1000);
|
|
} catch(e) {
|
|
addSystemMessage('Connection failed: ' + e);
|
|
}
|
|
};
|
|
|
|
// Override the disconnect button handler to use Tauri
|
|
disconnectBtn.onclick = async () => {
|
|
try {
|
|
await invoke('disconnect');
|
|
uiState.connected = false;
|
|
updateConnectionStatus();
|
|
|
|
// Clear channels and tabs
|
|
uiState.channels.forEach(channel => {
|
|
removeChannel(channel);
|
|
});
|
|
setActiveTab('welcome');
|
|
addSystemMessage('Disconnected');
|
|
} catch(e) {
|
|
addSystemMessage('Disconnect failed: ' + e);
|
|
}
|
|
};
|
|
|
|
// Override the join button handler to use Tauri
|
|
joinBtn.onclick = async () => {
|
|
let channel = channelInput.value.trim();
|
|
if (!channel) return;
|
|
|
|
if (!channel.startsWith('#')) {
|
|
channel = '#' + channel;
|
|
channelInput.value = channel;
|
|
}
|
|
|
|
try {
|
|
await invoke('join_channel', { channel });
|
|
addChannel(channel);
|
|
channelInput.value = '';
|
|
} catch(e) {
|
|
addSystemMessage(`Failed to join ${channel}: ${e}`);
|
|
}
|
|
};
|
|
|
|
// Override the part button handler to use Tauri
|
|
partBtn.onclick = async () => {
|
|
const channel = uiState.activeTab;
|
|
if (!channel || channel === 'welcome') {
|
|
addSystemMessage('Select a channel to leave first.');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await invoke('part_channel', { channel });
|
|
removeChannel(channel);
|
|
} catch(e) {
|
|
addSystemMessage(`Failed to leave ${channel}: ${e}`);
|
|
}
|
|
};
|
|
|
|
// Override the send button handler to use Tauri
|
|
sendBtn.onclick = async () => {
|
|
const target = uiState.activeTab;
|
|
const message = messageInput.value.trim();
|
|
|
|
if (!target || target === 'welcome') {
|
|
addSystemMessage('Join a channel to send messages.');
|
|
return;
|
|
}
|
|
|
|
if (!message) return;
|
|
|
|
try {
|
|
await invoke('send_message', { target, message });
|
|
addMessage(uiState.currentUser, message, true);
|
|
messageInput.value = '';
|
|
} catch(e) {
|
|
addSystemMessage(`Failed to send message: ${e}`);
|
|
}
|
|
};
|
|
|
|
// Listen to backend IRC messages
|
|
listen('irc-message', event => {
|
|
if (event.payload) {
|
|
/*const formattedMessage = formatIRCMessage(event.payload);
|
|
if (formattedMessage) {
|
|
addIRCMessage(formattedMessage);
|
|
}*/
|
|
addIRCMessage(event.payload);
|
|
}
|
|
});
|
|
|
|
// Listen for channel updates
|
|
listen('channel-update', event => {
|
|
if (event.payload) {
|
|
refreshChannels();
|
|
}
|
|
}); |