iptv-stream-web/assets/js/app.js

116 lines
3 KiB
JavaScript

// Core Dodgers Stream Application
// Configuration and module loading
const AppConfig = {
// API configuration
api: {
baseUrl: '',
heartbeatInterval: 5000,
chatPollInterval: 2000,
maxRetries: 3,
retryDelay: 1000
},
// Video player configuration
video: {
defaultVolume: 0.3,
maxRetries: 3,
recoveryTimeout: 10000,
streamMonitoringInterval: 10000,
recoveryCheckCount: 5,
recoveryCheckInterval: 2000
},
// UI configuration
ui: {
animationDuration: 300,
mobileBreakpoint: 768,
toastDuration: 3000
},
// Chat configuration
chat: {
maxMessages: 100,
maxMessageLength: 1000,
maxNicknameLength: 20,
typingTimeout: 1000
}
};
// Global application state
const AppState = {
player: null,
userId: '',
nickname: '',
isAdmin: false,
streamMode: 'live', // 'live' or 'placeholder'
chatCollapsed: false,
unreadCount: 0,
soundEnabled: true,
lastMessageId: '',
allMessages: [],
viewerCount: 0,
errorRetryCount: 0,
isRetrying: false,
isRecovering: false,
recoveryInterval: null,
typingTimer: null,
isTyping: false
};
// Global error handling and logging
const AppLogger = {
log: (message, ...args) => {
console.log(`[${new Date().toLocaleTimeString()}] ${message}`, ...args);
},
error: (message, ...args) => {
console.error(`[${new Date().toLocaleTimeString()}] ERROR: ${message}`, ...args);
},
warn: (message, ...args) => {
console.warn(`[${new Date().toLocaleTimeString()}] WARNING: ${message}`, ...args);
}
};
// Module registry for dependencies
const AppModules = {
loaded: new Set(),
register: function(name) {
this.loaded.add(name);
AppLogger.log(`Module '${name}' registered`);
},
isLoaded: function(name) {
return this.loaded.has(name);
},
require: function(...names) {
for (const name of names) {
if (!this.isLoaded(name)) {
throw new Error(`Required module '${name}' is not loaded`);
}
}
}
};
// Global error handler
window.addEventListener('unhandledrejection', (event) => {
AppLogger.error('Unhandled promise rejection:', event.reason);
});
window.addEventListener('error', (event) => {
AppLogger.error('Unhandled error:', event.error);
});
// Initialize application
document.addEventListener('DOMContentLoaded', () => {
AppLogger.log('Dodgers Stream Theater initializing...');
// Start with basic UI setup
const nicknameInput = document.getElementById('nickname');
if (nicknameInput && localStorage.getItem('chatNickname')) {
nicknameInput.value = localStorage.getItem('chatNickname');
AppState.nickname = nicknameInput.value;
}
AppLogger.log('Core application initialized');
});
AppLogger.log('Core app.js loaded');