Enhance DNS resolution process: update status messages for clarity, handle DNS name extraction, and improve error reporting during save operations.
This commit is contained in:
		
							parent
							
								
									1c8396f020
								
							
						
					
					
						commit
						b2d48be045
					
				
					 1 changed files with 43 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -684,21 +684,58 @@ class HostsManagerApp(App):
 | 
			
		|||
        # Get entries that need DNS resolution
 | 
			
		||||
        dns_entries = self.hosts_file.get_dns_entries()
 | 
			
		||||
        if not dns_entries:
 | 
			
		||||
            self.update_status("No entries with hostnames found")
 | 
			
		||||
            self.update_status("No entries with DNS names found")
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
        async def refresh_dns():
 | 
			
		||||
            try:
 | 
			
		||||
                hostnames = [entry.hostnames[0] for entry in dns_entries if entry.hostnames]
 | 
			
		||||
                # Extract DNS names (not hostnames!) from entries
 | 
			
		||||
                dns_names = [entry.dns_name for entry in dns_entries if entry.dns_name]
 | 
			
		||||
                
 | 
			
		||||
                # Resolve each hostname individually since resolve_hostnames_batch doesn't exist
 | 
			
		||||
                for hostname in hostnames:
 | 
			
		||||
                    await self.dns_service.resolve_entry_async(hostname)
 | 
			
		||||
                if not dns_names:
 | 
			
		||||
                    self.update_status("No valid DNS names found to resolve")
 | 
			
		||||
                    return
 | 
			
		||||
                
 | 
			
		||||
                resolved_count = 0
 | 
			
		||||
                failed_count = 0
 | 
			
		||||
                
 | 
			
		||||
                # Resolve each DNS name and apply results back to entries
 | 
			
		||||
                for dns_name in dns_names:
 | 
			
		||||
                    resolution = await self.dns_service.resolve_entry_async(dns_name)
 | 
			
		||||
                    
 | 
			
		||||
                    # Find the corresponding entry and update it
 | 
			
		||||
                    for entry in dns_entries:
 | 
			
		||||
                        if entry.dns_name == dns_name:
 | 
			
		||||
                            # Apply resolution results to entry fields
 | 
			
		||||
                            entry.last_resolved = resolution.resolved_at
 | 
			
		||||
                            entry.dns_resolution_status = resolution.status.value
 | 
			
		||||
                            
 | 
			
		||||
                            if resolution.is_success():
 | 
			
		||||
                                entry.resolved_ip = resolution.resolved_ip
 | 
			
		||||
                                resolved_count += 1
 | 
			
		||||
                            else:
 | 
			
		||||
                                failed_count += 1
 | 
			
		||||
                            break
 | 
			
		||||
                
 | 
			
		||||
                # Save hosts file with updated DNS information
 | 
			
		||||
                if resolved_count > 0 or failed_count > 0:
 | 
			
		||||
                    save_success, save_message = self.manager.save_hosts_file(self.hosts_file)
 | 
			
		||||
                    if not save_success:
 | 
			
		||||
                        self.update_status(f"❌ DNS resolution completed but save failed: {save_message}")
 | 
			
		||||
                        return
 | 
			
		||||
                
 | 
			
		||||
                # Update the UI - use direct calls since we're in the same async context
 | 
			
		||||
                self.table_handler.populate_entries_table()
 | 
			
		||||
                self.details_handler.update_entry_details()
 | 
			
		||||
                self.update_status(f"✅ DNS resolution completed for {len(hostnames)} entries")
 | 
			
		||||
                
 | 
			
		||||
                # Provide detailed status message
 | 
			
		||||
                if failed_count == 0:
 | 
			
		||||
                    self.update_status(f"✅  DNS resolution completed for {resolved_count} entries")
 | 
			
		||||
                elif resolved_count == 0:
 | 
			
		||||
                    self.update_status(f"❌  DNS resolution failed for all {failed_count} entries")
 | 
			
		||||
                else:
 | 
			
		||||
                    self.update_status(f"⚠️  DNS resolution: {resolved_count} succeeded, {failed_count} failed")
 | 
			
		||||
                    
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                self.update_status(f"❌ DNS resolution failed: {e}")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue