()
| 3835 | |
| 3836 | // Small delay to ensure dialog closes before showing welcome |
| 3837 | await new Promise(resolve => setTimeout(resolve, 200)); |
| 3838 | |
| 3839 | // Show welcome dialog if this is the first run |
| 3840 | const hasRunBefore = await window.electron.getSetting('hasRunBefore'); |
| 3841 | if (!hasRunBefore) { |
| 3842 | const welcomeDialog = document.getElementById('welcome-message'); |
| 3843 | if (welcomeDialog) { |
| 3844 | welcomeDialog.showModal(); |
| 3845 | await window.electron.saveSetting('hasRunBefore', 'true'); |
| 3846 | } |
| 3847 | } |
| 3848 | |
| 3849 | resolve(true); // Resolve promise when accepted |
| 3850 | }; |
| 3851 | |
| 3852 | const declineHandler = () => { |
| 3853 | acceptButton.removeEventListener('click', acceptHandler); |
| 3854 | declineButton.removeEventListener('click', declineHandler); |
| 3855 | window.electron.quitApp(); |
| 3856 | resolve(false); // Resolve promise when declined |
| 3857 | }; |
| 3858 | |
| 3859 | acceptButton.addEventListener('click', acceptHandler); |
| 3860 | declineButton.addEventListener('click', declineHandler); |
| 3861 | }); |
| 3862 | } |
| 3863 | return true; // Return true if already accepted |
| 3864 | } catch (error) { |
| 3865 | console.error('Error checking Terms of Service:', error); |
| 3866 | return false; // Return false on error |
| 3867 | } |
| 3868 | } |
| 3869 | |
| 3870 | // Function to create menu dropdown for server mode |
| 3871 | function createMenuDropdown(label, items) { |
| 3872 | const menuContainer = document.createElement('div'); |
| 3873 | menuContainer.style.cssText = 'position: relative; margin-right: 15px;'; |
| 3874 | |
| 3875 | const menuButton = document.createElement('button'); |
| 3876 | menuButton.textContent = label; |
| 3877 | menuButton.style.cssText = 'background: none; border: none; color: #e0e0e0; padding: 5px 10px; cursor: pointer; font-size: 13px; font-family: inherit;'; |
| 3878 | menuButton.onmouseover = () => menuButton.style.backgroundColor = '#3a3a3a'; |
| 3879 | menuButton.onmouseout = () => menuButton.style.backgroundColor = 'transparent'; |
| 3880 | |
| 3881 | const dropdown = document.createElement('div'); |
| 3882 | dropdown.style.cssText = 'display: none; position: absolute; top: 100%; left: 0; background-color: #2c2c2c; border: 1px solid #444; border-radius: 4px; min-width: 180px; box-shadow: 0 4px 6px rgba(0,0,0,0.3); z-index: 10001; margin-top: 2px;'; |
| 3883 | |
| 3884 | items.forEach(item => { |
| 3885 | if (item.label === '---') { |
| 3886 | const separator = document.createElement('div'); |
| 3887 | separator.style.cssText = 'height: 1px; background-color: #444; margin: 4px 0;'; |
| 3888 | dropdown.appendChild(separator); |
| 3889 | } else { |
| 3890 | const menuItem = document.createElement('div'); |
no test coverage detected