@@ -2,14 +2,16 @@ const updateManager = {
22 busy : false ,
33 preRelease : false ,
44
5- isUpdateAvailable : async ( ) => {
5+ checkForUpdate : async ( ) => {
6+ await updateManager . updateUI ( ) ; // Clear previous state
7+
68 await fetch ( '/update/available?pre_release=' + updateManager . preRelease )
79 . then ( async response => {
810 if ( ! response . ok ) {
911 return false ;
1012 }
1113 const data = await response . json ( ) ;
12- return data . update . reachy_mini ;
14+ await updateManager . updateUI ( data ) ;
1315 } ) . catch ( error => {
1416 console . error ( 'Error checking for updates:' , error ) ;
1517 } ) ;
@@ -44,66 +46,87 @@ const updateManager = {
4446
4547 connectLogsWebSocket : ( jobId ) => {
4648 const updateModal = document . getElementById ( 'update-modal' ) ;
47- const updateModalTitle = updateModal . queryElementById ( 'update-modal-title' ) ;
49+ const updateModalTitle = document . getElementById ( 'update-modal-title' ) ;
4850 const logsDiv = document . getElementById ( 'update-logs' ) ;
4951 const closeButton = document . getElementById ( 'update-modal-close-button' ) ;
5052
5153 updateModalTitle . textContent = 'Updating...' ;
5254
5355 closeButton . onclick = ( ) => {
54- installModal . classList . add ( 'hidden' ) ;
56+ updateModal . classList . add ( 'hidden' ) ;
5557 } ;
56- closeButton . classList = "hidden" ;
57- closeButton . textContent = '' ;
5858
59- updateModal . classList . removeAttribute ( 'hidden' ) ;
59+ updateModal . classList . remove ( 'hidden' ) ;
6060
61- const ws = new WebSocket ( `ws://${ location . host } /api/ update/ws/logs?job_id=${ jobId } ` ) ;
61+ const ws = new WebSocket ( `ws://${ location . host } /update/ws/logs?job_id=${ jobId } ` ) ;
6262
6363 ws . onmessage = ( event ) => {
64+ // console.log('Update log:', event);
65+ logsDiv . innerHTML += event . data + '<br>' ;
66+ logsDiv . scrollTop = logsDiv . scrollHeight ;
6467 } ;
6568 ws . onclose = async ( ) => {
69+ console . log ( 'Update logs WebSocket closed' ) ;
70+ closeButton . classList . remove ( 'hidden' ) ;
71+ closeButton . textContent = 'Close' ;
72+ updateModalTitle . textContent = 'Update Completed ✅' ;
73+
6674 updateManager . busy = false ;
67- updateManager . updateUI ( ) ;
75+ await updateManager . checkForUpdate ( ) ;
6876 } ;
6977 } ,
7078
71- updateUI : async ( ) => {
72- const isUpdateAvailable = await updateManager . isUpdateAvailable ( ) ;
73-
74- updateManager . updateMainPage ( isUpdateAvailable ) ;
75- updateManager . updateUpdatePage ( isUpdateAvailable ) ;
79+ updateUI : async ( update ) => {
80+ // updateManager.updateMainPage(isUpdateAvailable);
81+ updateManager . updateUpdatePage ( update ) ;
7682 } ,
7783
78- updateMainPage : async ( isUpdateAvailable ) => {
79- const daemonUpdateBtn = document . getElementById ( 'daemon-update-btn' ) ;
80- if ( ! daemonUpdateBtn ) return ;
81-
82- if ( isUpdateAvailable ) {
83- daemonUpdateBtn . innerHTML = 'Update <span class="rounded-full bg-blue-700 text-white text-xs font-semibold px-2 py-1 ml-2">1</span>' ;
84- } else {
85- daemonUpdateBtn . innerHTML = 'Update' ;
86- }
87- } ,
88- updateUpdatePage : async ( isUpdateAvailable ) => {
84+ // updateMainPage: async (update ) => {
85+ // const daemonUpdateBtn = document.getElementById('daemon-update-btn');
86+ // if (!daemonUpdateBtn) return;
87+
88+ // if (isUpdateAvailable) {
89+ // daemonUpdateBtn.innerHTML = 'Update <span class="rounded-full bg-blue-700 text-white text-xs font-semibold px-2 py-1 ml-2">1</span>';
90+ // } else {
91+ // daemonUpdateBtn.innerHTML = 'Update';
92+ // }
93+ // },
94+ updateUpdatePage : async ( data ) => {
8995 const statusElem = document . getElementById ( 'update-status' ) ;
9096 if ( ! statusElem ) return ;
9197
92- const checkAgainBtn = document . getElementById ( 'check-again-btn' ) ;
98+ const currentVersionElem = document . getElementById ( 'current-version' ) ;
99+ const availableVersionElem = document . getElementById ( 'available-version' ) ;
100+ const availableVersionContainer = document . getElementById ( 'available-version-container' ) ;
93101 const startUpdateBtn = document . getElementById ( 'start-update-btn' ) ;
94102
103+ if ( ! data || ! data . update || ! data . update . reachy_mini ) {
104+ statusElem . innerHTML = 'Checking for updates...' ;
105+ if ( currentVersionElem ) currentVersionElem . textContent = '' ;
106+ if ( availableVersionElem ) availableVersionElem . textContent = '' ;
107+ return ;
108+ }
109+
110+ const updateInfo = data . update . reachy_mini ;
111+ const isUpdateAvailable = updateInfo . is_available ;
112+ const currentVersion = updateInfo . current_version || '-' ;
113+ const availableVersion = updateInfo . available_version || '-' ;
114+
115+ if ( currentVersionElem ) currentVersionElem . textContent = `Current version: ${ currentVersion } ` ;
116+ if ( availableVersionElem ) availableVersionElem . textContent = `Available version: ${ availableVersion } ` ;
117+
95118 if ( isUpdateAvailable ) {
96119 statusElem . innerHTML = 'An update is available!' ;
97- checkAgainBtn . classList . add ( 'hidden' ) ;
120+ if ( availableVersionContainer ) availableVersionContainer . classList . remove ( 'hidden' ) ;
98121 startUpdateBtn . classList . remove ( 'hidden' ) ;
99122 } else {
100123 statusElem . innerHTML = 'Your system is up to date.' ;
101- checkAgainBtn . classList . remove ( 'hidden' ) ;
124+ if ( availableVersionContainer ) availableVersionContainer . classList . add ( 'hidden' ) ;
102125 startUpdateBtn . classList . add ( 'hidden' ) ;
103126 }
104127 }
105128} ;
106129
107130window . addEventListener ( 'load' , async ( ) => {
108- updateManager . updateUI ( ) ;
131+ await updateManager . checkForUpdate ( ) ;
109132} ) ;
0 commit comments