From ee2520f2c0c2d806fd284c3d6b8a81a3822f5270 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Mon, 20 Apr 2026 15:28:12 -0500 Subject: feat(v1.8): improve result structure, history, and consistency - normalize sections and add summary card - fix resolver usage in reverse DNS - include custom port scans in history/export - standardize error handling - decompose ContentView into smaller views --- DomainDig/IPGeolocationService.swift | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'DomainDig/IPGeolocationService.swift') diff --git a/DomainDig/IPGeolocationService.swift b/DomainDig/IPGeolocationService.swift index 6c60295..809dd28 100644 --- a/DomainDig/IPGeolocationService.swift +++ b/DomainDig/IPGeolocationService.swift @@ -1,17 +1,22 @@ import Foundation struct IPGeolocationService { - static func lookup(ip: String) async throws -> IPGeolocation { + static func lookup(ip: String) async -> ServiceResult { let url = URL(string: "https://ipapi.co/\(ip)/json/")! let request = URLRequest(url: url, timeoutInterval: 10) - let (data, response) = try await URLSession.shared.data(for: request) + do { + let (data, response) = try await URLSession.shared.data(for: request) - guard let httpResponse = response as? HTTPURLResponse, - httpResponse.statusCode == 200 else { - throw URLError(.badServerResponse) - } + guard let httpResponse = response as? HTTPURLResponse, + httpResponse.statusCode == 200 else { + return .error(URLError(.badServerResponse).localizedDescription) + } - return try JSONDecoder().decode(IPGeolocation.self, from: data) + let geolocation = try JSONDecoder().decode(IPGeolocation.self, from: data) + return .success(geolocation) + } catch { + return .error(error.localizedDescription) + } } } -- cgit v1.2.3