@@ -160,8 +160,8 @@ export class UpdateManager {
160160
161161 console . log ( '📦 Release più recente da GitHub:' , latestRelease . tag_name ) ;
162162
163- // Rimuovi il prefisso "app-v" se presente
164- const latestVersion = latestRelease . tag_name . replace ( / ^ a p p - v / , '' ) ;
163+ // Pulisci la versione usando la stessa logica robusta
164+ const latestVersion = this . cleanVersionString ( latestRelease . tag_name ) ;
165165 const isNewer = this . compareVersions ( latestVersion , currentVersion ) > 0 ;
166166
167167 if ( isNewer ) {
@@ -246,18 +246,65 @@ export class UpdateManager {
246246 * Confronta due versioni (formato semver)
247247 */
248248 compareVersions ( a , b ) {
249- const aParts = a . split ( '.' ) . map ( Number ) ;
250- const bParts = b . split ( '.' ) . map ( Number ) ;
249+ try {
250+ console . log ( '🔍 Confronto versioni:' , { a, b } ) ;
251+
252+ // Pulisci le versioni da prefissi e suffissi non numerici
253+ const cleanA = this . cleanVersionString ( a ) ;
254+ const cleanB = this . cleanVersionString ( b ) ;
255+
256+ console . log ( '🧹 Versioni pulite:' , { cleanA, cleanB } ) ;
257+
258+ const aParts = cleanA . split ( '.' ) . map ( part => {
259+ const num = parseInt ( part , 10 ) ;
260+ return isNaN ( num ) ? 0 : num ;
261+ } ) ;
262+ const bParts = cleanB . split ( '.' ) . map ( part => {
263+ const num = parseInt ( part , 10 ) ;
264+ return isNaN ( num ) ? 0 : num ;
265+ } ) ;
266+
267+ for ( let i = 0 ; i < Math . max ( aParts . length , bParts . length ) ; i ++ ) {
268+ const aPart = aParts [ i ] || 0 ;
269+ const bPart = bParts [ i ] || 0 ;
270+
271+ if ( aPart > bPart ) return 1 ;
272+ if ( aPart < bPart ) return - 1 ;
273+ }
251274
252- for ( let i = 0 ; i < Math . max ( aParts . length , bParts . length ) ; i ++ ) {
253- const aPart = aParts [ i ] || 0 ;
254- const bPart = bParts [ i ] || 0 ;
275+ return 0 ;
276+ } catch ( error ) {
277+ console . error ( '❌ Errore nel confronto versioni:' , error ) ;
278+ console . error ( '❌ Parametri:' , { a, b } ) ;
279+ // In caso di errore, assumiamo che non ci siano aggiornamenti
280+ return 0 ;
281+ }
282+ }
283+
284+ /**
285+ * Pulisce una stringa di versione da prefissi e caratteri non numerici
286+ */
287+ cleanVersionString ( version ) {
288+ if ( ! version || typeof version !== 'string' ) {
289+ return '0.0.0' ;
290+ }
255291
256- if ( aPart > bPart ) return 1 ;
257- if ( aPart < bPart ) return - 1 ;
292+ // Rimuovi prefissi comuni come "v", "app-v", etc.
293+ let cleaned = version
294+ . replace ( / ^ ( a p p - ) ? v / i, '' ) // Rimuovi "v" o "app-v"
295+ . replace ( / ^ p r e s t o \s + v ? / i, '' ) // Rimuovi "Presto v" o "Presto"
296+ . replace ( / ^ r e l e a s e \s + v ? / i, '' ) // Rimuovi "Release v" o "Release"
297+ . trim ( ) ;
298+
299+ // Estrai solo la parte numerica con punti (x.y.z)
300+ const versionMatch = cleaned . match ( / ^ ( \d + (?: \. \d + ) * ) / ) ;
301+ if ( versionMatch ) {
302+ return versionMatch [ 1 ] ;
258303 }
259304
260- return 0 ;
305+ // Se non riusciamo a estrarre una versione valida, ritorna 0.0.0
306+ console . warn ( '⚠️ Versione non valida:' , version , '- usando 0.0.0' ) ;
307+ return '0.0.0' ;
261308 }
262309
263310 /**
@@ -427,6 +474,8 @@ export class UpdateManager {
427474 errorMessage = 'Errore di rete durante il controllo degli aggiornamenti. Verifica la connessione a Internet.' ;
428475 } else if ( error === 'error sending request' ) {
429476 errorMessage = 'Errore di connessione al server degli aggiornamenti. Verifica la connessione a Internet e riprova più tardi.' ;
477+ } else if ( error . includes ( 'parsing' ) && error . includes ( 'version' ) ) {
478+ errorMessage = 'Errore nel formato delle informazioni di versione. Questo verrà risolto nel prossimo aggiornamento.' ;
430479 }
431480 } else if ( error && error . message ) {
432481 if ( error . message . includes ( 'network' ) || error . message . includes ( 'request' ) ) {
0 commit comments