63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
(function() {
|
|
// Configuration
|
|
const SSE_PORT = 8765;
|
|
const RECONNECT_DELAY = 5000; // 5 seconds
|
|
|
|
let eventSource = null;
|
|
let reconnectTimer = null;
|
|
|
|
function connect() {
|
|
// Clear any existing reconnect timer
|
|
if (reconnectTimer) {
|
|
clearTimeout(reconnectTimer);
|
|
reconnectTimer = null;
|
|
}
|
|
|
|
// Close existing connection
|
|
if (eventSource) {
|
|
eventSource.close();
|
|
}
|
|
|
|
// Connect to SSE server
|
|
const url = `${window.location.protocol}//${window.location.hostname}:${SSE_PORT}/events`;
|
|
eventSource = new EventSource(url);
|
|
|
|
eventSource.onmessage = function(event) {
|
|
try {
|
|
const data = JSON.parse(event.data);
|
|
if (data.type === 'reload') {
|
|
console.log('Repository updated, reloading page...');
|
|
// Hard reload to bypass cache
|
|
window.location.reload(true);
|
|
}
|
|
} catch (e) {
|
|
console.error('Error parsing SSE message:', e);
|
|
}
|
|
};
|
|
|
|
eventSource.onerror = function(error) {
|
|
console.log('SSE connection error, will reconnect...');
|
|
eventSource.close();
|
|
// Attempt to reconnect after delay
|
|
reconnectTimer = setTimeout(connect, RECONNECT_DELAY);
|
|
};
|
|
|
|
eventSource.onopen = function() {
|
|
console.log('Connected to auto-refresh service');
|
|
};
|
|
}
|
|
|
|
// Start connection when page loads
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', connect);
|
|
} else {
|
|
connect();
|
|
}
|
|
|
|
// Cleanup on page unload
|
|
window.addEventListener('beforeunload', function() {
|
|
if (eventSource) {
|
|
eventSource.close();
|
|
}
|
|
});
|
|
})(); |