summaryrefslogtreecommitdiff
path: root/DomainDig/WatchlistView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-21 22:54:40 -0500
committerChristian Cleberg <[email protected]>2026-04-21 22:54:40 -0500
commite73d58ee5dd43eaeaaa717f7781cc22256df30f0 (patch)
tree2eb84058b37f4edfb6cf6ad7205c08a2af374938 /DomainDig/WatchlistView.swift
parent22ecca12b4fe0e0850401754c674632f322d919d (diff)
downloaddomain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.tar.gz
domain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.tar.bz2
domain-dig-e73d58ee5dd43eaeaaa717f7781cc22256df30f0.zip
feat(v2.4.0): add JSON output, CLI foundation, and shared report layer
* introduce DomainReport as canonical output model * add JSON export for single and batch results * create DomainReportBuilder for reusable report construction * add CLI target using shared inspection pipeline * refactor services for UI-independent usage * ensure consistency across TXT, CSV, and JSON outputs
Diffstat (limited to 'DomainDig/WatchlistView.swift')
-rw-r--r--DomainDig/WatchlistView.swift29
1 files changed, 20 insertions, 9 deletions
diff --git a/DomainDig/WatchlistView.swift b/DomainDig/WatchlistView.swift
index 1f03a0d..7e42b53 100644
--- a/DomainDig/WatchlistView.swift
+++ b/DomainDig/WatchlistView.swift
@@ -143,11 +143,15 @@ struct WatchlistView: View {
.disabled(viewModel.batchLookupRunning)
Button("Export TXT") {
- shareTrackedDomains(asCSV: false)
+ shareTrackedDomains(format: .text)
}
Button("Export CSV") {
- shareTrackedDomains(asCSV: true)
+ shareTrackedDomains(format: .csv)
+ }
+
+ Button("Export JSON") {
+ shareTrackedDomains(format: .json)
}
} label: {
Image(systemName: "line.3.horizontal.decrease.circle")
@@ -178,16 +182,23 @@ struct WatchlistView: View {
domains.forEach(viewModel.deleteTrackedDomain)
}
- private func shareTrackedDomains(asCSV: Bool) {
+ private func shareTrackedDomains(format: DomainExportFormat) {
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMdd_HHmmss"
let timestamp = formatter.string(from: Date())
- let fileExtension = asCSV ? "csv" : "txt"
- let filename = "\(timestamp)_domaindig_watchlist.\(fileExtension)"
- let contents = asCSV
- ? viewModel.exportTrackedDomainsCSV(domains: viewModel.filteredTrackedDomains)
- : viewModel.exportTrackedDomainsText(domains: viewModel.filteredTrackedDomains)
- ExportPresenter.share(filename: filename, contents: contents)
+ let filename = "\(timestamp)_domaindig_watchlist.\(format.fileExtension)"
+ let data: Data
+
+ switch format {
+ case .text:
+ data = Data(viewModel.exportTrackedDomainsText(domains: viewModel.filteredTrackedDomains).utf8)
+ case .csv:
+ data = Data(viewModel.exportTrackedDomainsCSV(domains: viewModel.filteredTrackedDomains).utf8)
+ case .json:
+ data = viewModel.exportTrackedDomainsJSONData(domains: viewModel.filteredTrackedDomains) ?? Data("[]".utf8)
+ }
+
+ ExportPresenter.share(filename: filename, data: data)
}
}