summaryrefslogtreecommitdiff
path: root/DomainDig/DomainViewModel.swift
diff options
context:
space:
mode:
Diffstat (limited to 'DomainDig/DomainViewModel.swift')
-rw-r--r--DomainDig/DomainViewModel.swift70
1 files changed, 34 insertions, 36 deletions
diff --git a/DomainDig/DomainViewModel.swift b/DomainDig/DomainViewModel.swift
index 33756df..674efdf 100644
--- a/DomainDig/DomainViewModel.swift
+++ b/DomainDig/DomainViewModel.swift
@@ -1521,16 +1521,6 @@ final class DomainViewModel {
}
}
- func exportText() -> String {
- guard let currentReport else { return "No results available." }
- return DomainReportExporter.text(for: currentReport)
- }
-
- func exportCSV() -> String {
- guard let currentReport else { return DomainReportExporter.csv(for: []) }
- return DomainReportExporter.csv(for: [currentReport])
- }
-
func exportJSONData() -> Data? {
guard let currentReport else { return nil }
return try? DomainReportExporter.data(for: currentReport, format: .json)
@@ -1541,6 +1531,11 @@ final class DomainViewModel {
return String(data: data, encoding: .utf8)
}
+ func exportSingleReportData(format: DomainExportFormat) -> Data? {
+ guard let currentReport else { return nil }
+ return try? DomainReportExporter.data(for: currentReport, format: format)
+ }
+
func audits(for domain: String) -> [AuditSession] {
auditSessions
.filter { $0.domain.caseInsensitiveCompare(domain) == .orderedSame }
@@ -1792,40 +1787,18 @@ final class DomainViewModel {
usageCredits = Dictionary(uniqueKeysWithValues: statuses.map { ($0.feature, $0) })
}
- func exportBatchText() -> String {
- DomainReportExporter.batchText(
- for: currentBatchReports(),
- title: batchLookupSource == .watchlistRefresh ? "Tracked Domains Export" : "Batch Results Export"
- )
- }
-
- func exportBatchCSV() -> String {
- DomainReportExporter.csv(for: currentBatchReports())
- }
-
- func exportBatchJSONData() -> Data? {
+ func exportBatchReportData(format: DomainExportFormat) -> Data? {
try? DomainReportExporter.data(
for: currentBatchReports(),
- format: .json,
+ format: format,
title: batchLookupSource == .watchlistRefresh ? "Tracked Domains Export" : "Batch Results Export"
)
}
- func exportTrackedDomainsCSV(domains: [TrackedDomain]) -> String {
- DomainReportExporter.csv(for: reports(for: domains))
- }
-
- func exportTrackedDomainsText(domains: [TrackedDomain]) -> String {
- DomainReportExporter.batchText(
- for: reports(for: domains),
- title: "Tracked Domains Export"
- )
- }
-
- func exportTrackedDomainsJSONData(domains: [TrackedDomain]) -> Data? {
+ func exportTrackedDomainsData(domains: [TrackedDomain], format: DomainExportFormat) -> Data? {
try? DomainReportExporter.data(
for: reports(for: domains),
- format: .json,
+ format: format,
title: "Tracked Domains Export"
)
}
@@ -1934,6 +1907,31 @@ final class DomainViewModel {
return try? encoder.encode(payload)
}
+ func exportWorkflowMarkdown(summary: WorkflowRunSummary, changedOnly: Bool) -> String {
+ let reports = workflowReports(from: summary, changedOnly: changedOnly)
+ let base = DomainReportExporter.batchMarkdown(for: reports, title: "\(summary.workflowName) Workflow Export")
+ guard !summary.workflowInsights.isEmpty else { return base }
+ let insightLines = summary.workflowInsights.map {
+ "- \($0.description): \($0.domainsInvolved.joined(separator: ", "))"
+ }
+ return (["## \(summary.workflowName) Workflow Insights"] + insightLines + ["", base]).joined(separator: "\n")
+ }
+
+ func exportWorkflowData(summary: WorkflowRunSummary, changedOnly: Bool, format: DomainExportFormat) -> Data? {
+ switch format {
+ case .text:
+ return Data(exportWorkflowText(summary: summary, changedOnly: changedOnly).utf8)
+ case .csv:
+ return Data(exportWorkflowCSV(summary: summary, changedOnly: changedOnly).utf8)
+ case .json:
+ return exportWorkflowJSONData(summary: summary, changedOnly: changedOnly)
+ case .markdown:
+ return Data(exportWorkflowMarkdown(summary: summary, changedOnly: changedOnly).utf8)
+ case .pdf:
+ return DomainReportExporter.pdfData(fromMarkdown: exportWorkflowMarkdown(summary: summary, changedOnly: changedOnly))
+ }
+ }
+
private func performLookup(domain: String, lookupID: UUID) async -> HistoryEntry? {
let lookupStartedAt = DomainDebugLog.signpostStart("DomainViewModel.performLookup", domain: domain)
let previous = previousSnapshot(