11
2- const refreshStatus = ( ) => {
3- fetch ( '/wifi/status' )
2+ const getStatus = async ( ) => {
3+ return await fetch ( '/wifi/status' )
44 . then ( response => response . json ( ) )
5- . then ( data => {
6- handleStatus ( data ) ;
7- } )
85 . catch ( error => {
96 console . error ( 'Error fetching WiFi status:' , error ) ;
10- handleStatus ( 'error' ) ;
7+ return { mode : 'error' } ;
118 } ) ;
9+ } ;
10+
11+ const refreshStatus = async ( ) => {
12+ const status = await getStatus ( ) ;
13+ handleStatus ( status ) ;
1214
13- fetch ( '/wifi/error' )
15+ await fetch ( '/wifi/error' )
1416 . then ( response => response . json ( ) )
1517 . then ( data => {
1618 if ( data . error !== null ) {
@@ -69,8 +71,7 @@ const connectToWifi = (_) => {
6971 return response . json ( ) ;
7072 } )
7173 . then ( data => {
72- console . log ( 'Connection response:' , data ) ;
73- handleStatus ( 'busy' ) ;
74+ handleStatus ( { mode : 'busy' } ) ;
7475 } )
7576 . catch ( error => {
7677 console . error ( 'Error connecting to WiFi:' , error ) ;
@@ -79,34 +80,92 @@ const connectToWifi = (_) => {
7980 return false ; // Prevent form submission
8081} ;
8182
83+ let currentMode = null ;
84+
8285const handleStatus = ( status ) => {
8386 const statusDiv = document . getElementById ( 'wifi-status' ) ;
84- const addWifiDiv = document . getElementById ( 'add-wifi' ) ;
85- const busyDiv = document . getElementById ( 'busy' ) ;
8687
87- addWifiDiv . classList = 'hidden' ;
88+ const knownNetworksDiv = document . getElementById ( 'known-networks' ) ;
89+ const knownNetworksList = document . getElementById ( 'known-networks-list' ) ;
90+ knownNetworksDiv . classList . remove ( 'hidden' ) ;
91+
92+ const mode = status . mode ;
93+
94+ knownNetworksList . innerHTML = '' ;
95+ if ( status . known_networks !== undefined && Array . isArray ( status . known_networks ) ) {
96+ status . known_networks . forEach ( ( network ) => {
97+ const li = document . createElement ( 'li' ) ;
98+ li . classList = 'flex flex-row items-center mb-1 gap-4 justify-left' ;
8899
89- if ( status == 'hotspot' ) {
100+ const nameSpan = document . createElement ( 'span' ) ;
101+ nameSpan . innerText = network ;
102+ li . appendChild ( nameSpan ) ;
103+
104+ // const removeBtn = document.createElement('span');
105+ // removeBtn.innerText = ' (remove ❌)';
106+ // removeBtn.style.cursor = 'pointer';
107+ // removeBtn.title = 'Remove network';
108+ // removeBtn.onclick = async () => {
109+ // if (confirm(`Remove network '${network}'?`)) {
110+ // removeNetwork(network);
111+ // }
112+ // };
113+ // li.appendChild(removeBtn);
114+
115+ knownNetworksList . appendChild ( li ) ;
116+ } ) ;
117+ }
118+
119+ if ( mode == 'hotspot' ) {
90120 statusDiv . innerText = 'Hotspot mode active. 🔌' ;
91- addWifiDiv . classList . remove ( 'hidden' ) ;
92- } else if ( status == 'wlan' ) {
93- statusDiv . innerText = 'Connected to WiFi. 📶' ;
94- } else if ( status == 'disconnected' ) {
121+
122+ } else if ( mode == 'wlan' ) {
123+ if ( currentMode !== null && currentMode !== 'wlan' ) {
124+ alert ( `Connected to WiFi network: ${ status . connected_network } ` ) ;
125+ }
126+
127+ statusDiv . innerText = `Connected to WiFi (SSID: ${ status . connected_network } ). 📶` ;
128+
129+ } else if ( mode == 'disconnected' ) {
95130 statusDiv . innerText = 'WiFi disconnected. ❌' ;
96- } else if ( status == 'busy' ) {
131+ } else if ( mode == 'busy' ) {
97132 statusDiv . innerText = 'Changing your WiFi configuration... Please wait ⏳' ;
98- busyDiv . hidden = false ;
99- } else if ( status == 'error' ) {
133+ } else if ( mode == 'error' ) {
100134 statusDiv . innerText = 'Error connecting to WiFi. ⚠️' ;
101135 } else {
102136 console . warn ( `Unknown status: ${ status } ` ) ;
103137 }
104138
105- currentStatus = status ;
139+ currentMode = mode ;
106140} ;
107141
108- window . addEventListener ( 'load' , async ( ) => {
142+ const removeNetwork = async ( ssid ) => {
143+ const status = await getStatus ( ) ;
144+
145+ // TODO:
146+ // if ssid !== status.connected_network:
147+ // remove connection
148+ // else:
149+ // refresh nmcli? go back to hotspot if needed?
150+ } ;
151+
152+ const cleanAndRefresh = async ( ) => {
153+ const statusDiv = document . getElementById ( 'wifi-status' ) ;
154+ statusDiv . innerText = 'Checking WiFi configuration...' ;
155+
156+ const knownNetworksDiv = document . getElementById ( 'known-networks' ) ;
157+ knownNetworksDiv . classList . add ( 'hidden' ) ;
158+
159+ const addWifi = document . getElementById ( 'add-wifi' ) ;
160+ addWifi . classList . add ( 'hidden' ) ;
161+
109162 await scanAndListWifiNetworks ( ) ;
110163 await refreshStatus ( ) ;
164+
165+ addWifi . classList . remove ( 'hidden' ) ;
166+ } ;
167+
168+ window . addEventListener ( 'load' , async ( ) => {
169+ await cleanAndRefresh ( ) ;
111170 setInterval ( refreshStatus , 1000 ) ;
112171} ) ;
0 commit comments