diff options
| author | Christian Cleberg <[email protected]> | 2026-07-17 11:09:02 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-07-20 13:56:41 -0500 |
| commit | 01c3d342f6980a69feb8df27a3454fd721d6298e (patch) | |
| tree | 72f7758dfb38623b1f4a3b6d5cf9c9d98e9bc601 /DomainDig/ContentView.swift | |
| parent | 54c151e22f8a5d4d7a9c290e79fc7626415f7083 (diff) | |
| download | domain-dig-01c3d342f6980a69feb8df27a3454fd721d6298e.tar.gz domain-dig-01c3d342f6980a69feb8df27a3454fd721d6298e.tar.bz2 domain-dig-01c3d342f6980a69feb8df27a3454fd721d6298e.zip | |
v4.8.0: Add markdown and PDF export formats
- DomainExportFormat gains .markdown and .pdf (CaseIterable, Identifiable,
titled), alongside the existing text/csv/json.
- Markdown reuses the existing text-export content verbatim via a line-based
transform (section "Title\n----" underlines become "## Title", the leading
title becomes an H1, other lines become bullets), so the two formats can
never drift apart.
- PDF renders that Markdown as a simple monospaced multi-page document via
UIGraphicsPDFRenderer (mirrors AuditExporter's existing PDF approach;
degrades to raw Markdown bytes on non-UIKit platforms).
- Replaced the single/batch/tracked-domains/workflow share call sites' hand-
written per-format switches with format-agnostic functions
(exportSingleReportData, exportBatchReportData, exportTrackedDomainsData,
exportWorkflowData) that delegate straight to DomainReportExporter, removing
the now-orphaned per-format helper functions those switches used to call.
Diffstat (limited to 'DomainDig/ContentView.swift')
| -rw-r--r-- | DomainDig/ContentView.swift | 42 |
1 files changed, 6 insertions, 36 deletions
diff --git a/DomainDig/ContentView.swift b/DomainDig/ContentView.swift index 30d693e..b5ec729 100644 --- a/DomainDig/ContentView.swift +++ b/DomainDig/ContentView.swift @@ -710,50 +710,20 @@ struct ContentView: View { } private func shareSingleResults(format: DomainExportFormat) { - let (filename, data) = exportPayload( - prefix: "domaindig_single", - format: format, - text: viewModel.exportText(), - csv: viewModel.exportCSV(), - json: viewModel.exportJSONData() - ) - ExportPresenter.share(filename: filename, data: data) + guard let data = viewModel.exportSingleReportData(format: format) else { return } + ExportPresenter.share(filename: exportFilename(prefix: "domaindig_single", format: format), data: data) } private func shareBatchResults(format: DomainExportFormat) { - let (filename, data) = exportPayload( - prefix: "domaindig_batch", - format: format, - text: viewModel.exportBatchText(), - csv: viewModel.exportBatchCSV(), - json: viewModel.exportBatchJSONData() - ) - ExportPresenter.share(filename: filename, data: data) + guard let data = viewModel.exportBatchReportData(format: format) else { return } + ExportPresenter.share(filename: exportFilename(prefix: "domaindig_batch", format: format), data: data) } - private func exportPayload( - prefix: String, - format: DomainExportFormat, - text: String, - csv: String, - json: Data? - ) -> (String, Data) { + private func exportFilename(prefix: String, format: DomainExportFormat) -> String { let formatter = DateFormatter() formatter.dateFormat = "yyyyMMdd_HHmmss" let timestamp = formatter.string(from: Date()) - let filename = "\(timestamp)_\(prefix).\(format.fileExtension)" - let data: Data - - switch format { - case .text: - data = Data(text.utf8) - case .csv: - data = Data(csv.utf8) - case .json: - data = json ?? Data("[]".utf8) - } - - return (filename, data) + return "\(timestamp)_\(prefix).\(format.fileExtension)" } private var defaultCollapsedSections: Set<ResultSection> { |
