@ -34,7 +34,7 @@ bool is_elf(char *fname) { 
			
		
	
		
			
				
					void  Setup : : download ( QString  url )  {  
			
		
	
		
			
				
					  CURL  * curl  =  curl_easy_init ( ) ;   
			
		
	
		
			
				
					  if  ( ! curl )  {   
			
		
	
		
			
				
					    emit  finished ( false ) ;   
			
		
	
		
			
				
					    emit  finished ( url ,  tr ( " Something went wrong. Reboot the device. " ) ) ;   
			
		
	
		
			
				
					    return ;   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -57,16 +57,19 @@ void Setup::download(QString url) { 
			
		
	
		
			
				
					  int  ret  =  curl_easy_perform ( curl ) ;   
			
		
	
		
			
				
					  long  res_status  =  0 ;   
			
		
	
		
			
				
					  curl_easy_getinfo ( curl ,  CURLINFO_RESPONSE_CODE ,  & res_status ) ;   
			
		
	
		
			
				
					  if  ( ret  = =  CURLE_OK  & &  res_status  = =  200  & &  is_elf ( tmpfile ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  ( ret  ! =  CURLE_OK  | |  res_status  ! =  200 )  {   
			
		
	
		
			
				
					    emit  finished ( url ,  tr ( " Ensure the entered URL is valid, and the device’s internet connection is good. " ) ) ;   
			
		
	
		
			
				
					  }  else  if  ( ! is_elf ( tmpfile ) )  {   
			
		
	
		
			
				
					    emit  finished ( url ,  tr ( " No custom software found at this URL. " ) ) ;   
			
		
	
		
			
				
					  }  else  {   
			
		
	
		
			
				
					    rename ( tmpfile ,  " /tmp/installer " ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    FILE  * fp_url  =  fopen ( " /tmp/installer_url " ,  " w " ) ;   
			
		
	
		
			
				
					    fprintf ( fp_url ,  " %s " ,  url . toStdString ( ) . c_str ( ) ) ;   
			
		
	
		
			
				
					    fclose ( fp_url ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    emit  finished ( true ) ;   
			
		
	
		
			
				
					  }  else  {   
			
		
	
		
			
				
					    emit  finished ( false ) ;   
			
		
	
		
			
				
					    emit  finished ( url ) ;   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  curl_slist_free_all ( list ) ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -239,10 +242,10 @@ QWidget * Setup::downloading() { 
			
		
	
		
			
				
					  return  widget ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					QWidget  *  Setup : : download_failed ( )  {  
			
		
	
		
			
				
					QWidget  *  Setup : : download_failed ( QLabel  * url ,  QLabel  * body )  {  
			
		
	
		
			
				
					  QWidget  * widget  =  new  QWidget ( ) ;   
			
		
	
		
			
				
					  QVBoxLayout  * main_layout  =  new  QVBoxLayout ( widget ) ;   
			
		
	
		
			
				
					  main_layout - > setContentsMargins ( 55 ,  22 5,  55 ,  55 ) ;   
			
		
	
		
			
				
					  main_layout - > setContentsMargins ( 55 ,  18 5,  55 ,  55 ) ;   
			
		
	
		
			
				
					  main_layout - > setSpacing ( 0 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  QLabel  * title  =  new  QLabel ( tr ( " Download Failed " ) ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -251,7 +254,13 @@ QWidget * Setup::download_failed() { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  main_layout - > addSpacing ( 67 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  QLabel  * body  =  new  QLabel ( tr ( " Ensure the entered URL is valid, and the device’s internet connection is good. " ) ) ;   
			
		
	
		
			
				
					  url - > setWordWrap ( true ) ;   
			
		
	
		
			
				
					  url - > setAlignment ( Qt : : AlignTop  |  Qt : : AlignLeft ) ;   
			
		
	
		
			
				
					  url - > setStyleSheet ( " font-family:  \" JetBrains Mono \" ; font-size: 64px; font-weight: 400; margin-right: 100px; " ) ;   
			
		
	
		
			
				
					  main_layout - > addWidget ( url ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  main_layout - > addSpacing ( 48 ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  body - > setWordWrap ( true ) ;   
			
		
	
		
			
				
					  body - > setAlignment ( Qt : : AlignTop  |  Qt : : AlignLeft ) ;   
			
		
	
		
			
				
					  body - > setStyleSheet ( " font-size: 80px; font-weight: 300; margin-right: 100px; " ) ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -276,7 +285,7 @@ QWidget * Setup::download_failed() { 
			
		
	
		
			
				
					  restart - > setProperty ( " primary " ,  true ) ;   
			
		
	
		
			
				
					  blayout - > addWidget ( restart ) ;   
			
		
	
		
			
				
					  QObject : : connect ( restart ,  & QPushButton : : clicked ,  this ,  [ = ] ( )  {   
			
		
	
		
			
				
					    setCurrentIndex ( 2 ) ;   
			
		
	
		
			
				
					    setCurrentIndex ( 1 ) ;   
			
		
	
		
			
				
					  } ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  widget - > setStyleSheet ( R " (   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -309,15 +318,19 @@ Setup::Setup(QWidget *parent) : QStackedWidget(parent) { 
			
		
	
		
			
				
					  downloading_widget  =  downloading ( ) ;   
			
		
	
		
			
				
					  addWidget ( downloading_widget ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  failed_widget  =  download_failed ( ) ;   
			
		
	
		
			
				
					  QLabel  * url_label  =  new  QLabel ( ) ;   
			
		
	
		
			
				
					  QLabel  * body_label  =  new  QLabel ( ) ;   
			
		
	
		
			
				
					  failed_widget  =  download_failed ( url_label ,  body_label ) ;   
			
		
	
		
			
				
					  addWidget ( failed_widget ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  QObject : : connect ( this ,  & Setup : : finished ,  [ = ] ( bool  success )  {   
			
		
	
		
			
				
					    // hide setup on success
   
			
		
	
		
			
				
					    qDebug ( )  < <  " finished "  < <  success ;   
			
		
	
		
			
				
					    if  ( success )  {   
			
		
	
		
			
				
					  QObject : : connect ( this ,  & Setup : : finished ,  [ = ] ( const  QString  & url ,  const  QString  & error )  {   
			
		
	
		
			
				
					    qDebug ( )  < <  " finished "  < <  url  < <  error ;   
			
		
	
		
			
				
					    if  ( error . isEmpty ( ) )  {   
			
		
	
		
			
				
					      // hide setup on success
    
			
		
	
		
			
				
					      QTimer : : singleShot ( 3000 ,  this ,  & QWidget : : hide ) ;   
			
		
	
		
			
				
					    }  else  {   
			
		
	
		
			
				
					      url_label - > setText ( url ) ;   
			
		
	
		
			
				
					      body_label - > setText ( error ) ;   
			
		
	
		
			
				
					      setCurrentWidget ( failed_widget ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  } ) ;