Files
upstream-mirror 702cc698a7
Some checks failed
Build & Test / Analyze (javascript, affine) (push) Failing after 4s
Build & Test / Analyze (typescript, affine) (push) Failing after 3s
Build & Test / Rust test filter (push) Failing after 4s
Build & Test / Check yarn binary (push) Failing after 3s
Build & Test / E2E BlockSuite Test (3) (push) Failing after 3s
Build & Test / Analyze (javascript, blocksuite) (push) Failing after 3s
Build & Test / Analyze (typescript, blocksuite) (push) Failing after 3s
Build & Test / Mobile native build filter (push) Failing after 3s
Build & Test / E2E BlockSuite Test (1) (push) Failing after 4s
Build & Test / E2E BlockSuite Test (2) (push) Failing after 4s
Build & Test / E2E Mobile Test (1) (push) Failing after 3s
Build & Test / Unit Test (1) (push) Has been skipped
Build & Test / Unit Test (2) (push) Has been skipped
Build & Test / Unit Test (3) (push) Has been skipped
Build & Test / Unit Test (4) (push) Has been skipped
Build & Test / Unit Test (5) (push) Has been skipped
Build & Test / Native Unit Test (push) Has been skipped
Build & Test / E2E BlockSuite Test (4) (push) Failing after 3s
Build & Test / E2E BlockSuite Test (5) (push) Failing after 3s
Build & Test / E2E BlockSuite Cross Browser Test (push) Failing after 3s
Build & Test / E2E Mobile Test (2) (push) Failing after 3s
Build & Test / Build AFFiNE native (x86_64-unknown-linux-gnu) (push) Failing after 3s
Build & Test / Build Server native (push) Failing after 3s
Build & Test / Check Git Status (push) Has been skipped
Build & Test / Server Test (0, 4) (push) Has been skipped
Build & Test / Server Test (1, 4) (push) Has been skipped
Build & Test / Server Test (2, 4) (push) Has been skipped
Build & Test / Server Test (3, 4) (push) Has been skipped
Build & Test / Server Test with Elasticsearch (push) Has been skipped
Build & Test / Build @affine/electron renderer (push) Failing after 3s
Build & Test / Copilot test filter (push) Failing after 4s
Build & Test / Lint Rust (push) Has been skipped
Build & Test / Server Test with Embedded Search (push) Has been skipped
Build & Test / Server Test with Manticore Search (push) Has been skipped
Build & Test / Server E2E Test (push) Has been skipped
Build & Test / Cloud Desktop E2E Test (push) Has been skipped
Build & Test / Cloud E2E Test 1/2 (push) Has been skipped
Build & Test / Cloud E2E Test 2/2 (push) Has been skipped
Build & Test / Build Android app (push) Has been skipped
Build & Test / Test Android app (push) Has been skipped
Build & Test / Run native tests (push) Has been skipped
Build & Test / Server Copilot Api Test (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (1, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (2, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (3, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (4, 5) (push) Has been skipped
Build & Test / Frontend Copilot E2E Test (5, 5) (push) Has been skipped
Release / Canary Gate (push) Has been skipped
Build & Test / Build AFFiNE native (aarch64-apple-darwin) (push) Has been cancelled
Build & Test / Lint (push) Has been cancelled
Build & Test / Typecheck (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-apple-darwin) (push) Has been cancelled
Build & Test / Desktop Test (ubuntu-latest, linux, x64, x86_64-unknown-linux-gnu, true) (push) Has been cancelled
Build & Test / Desktop Test (windows-latest, windows, x64, x86_64-pc-windows-msvc, true) (push) Has been cancelled
Build & Test / E2E Test (1) (push) Has been cancelled
Build & Test / E2E Test (2) (push) Has been cancelled
Build & Test / E2E Test (3) (push) Has been cancelled
Build & Test / E2E Test (4) (push) Has been cancelled
Build & Test / E2E Test (5) (push) Has been cancelled
Build & Test / Build AFFiNE native (aarch64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Build AFFiNE native (x86_64-pc-windows-msvc) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, arm64, aarch64-apple-darwin, true) (push) Has been cancelled
Build & Test / Desktop Test (macos-latest, macos, x64, x86_64-apple-darwin, false) (push) Has been cancelled
Build & Test / 3, 2, 1 Launch (push) Has been cancelled
Build & Test / Build iOS app (push) Has been cancelled
Copilot Test Automatically / Setup Test (push) Failing after 1s
Release / Prepare (push) Failing after 2s
Release / Release Cloud (push) Has been skipped
Release / Release Desktop (push) Has been skipped
Release / Release Docker Image (push) Has been skipped
Release / Release Mobile (push) Has been skipped
snapshot of https://github.com/toeverything/AFFiNE.git (canary, 2026-09-16; blobs > 131072B omitted)
2026-09-16 04:01:20 +05:00

206 lines
5.8 KiB
Swift

import Foundation
struct ShareInboxAttachment: Codable, Equatable {
var fileName: String
var mimeType: String
var relativePath: String
}
struct ShareInboxResolvedAttachment: Equatable {
var itemId: String
var url: URL
var relativePath: String
var name: String
var mimeType: String
var size: Int
}
enum ShareInboxContentKind: String, Codable {
case url
case text
case image
case pdf
}
struct ShareInboxContent: Codable, Equatable {
var kind: ShareInboxContentKind
var url: String?
var text: String?
}
struct ShareInboxTarget: Codable, Equatable {
var workspaceId: String
var workspaceFlavour: String
var tagIds: [String]
var collectionId: String?
}
struct ShareInboxResult: Codable, Equatable {
var docId: String
var committedAt: Date
}
enum SharePreviewRoute: String, Codable {
case official
case deferred
}
enum ShareWorkspaceMode: String, Codable {
case selfHostedPresent
case cloudOnly
case signedOut
case unknown
}
struct ShareWorkspaceModeSnapshot: Codable {
var version = 1
var mode: ShareWorkspaceMode
var updatedAt = Date()
}
struct ShareInboxItem: Codable, Equatable, Identifiable {
static let currentSchemaVersion = 2
private enum CodingKeys: String, CodingKey {
case schemaVersion
case importAttemptId
case id
case documentId
case createdAt
case title
case content
case target
case previewRoute
case previewText
case attachments
case result
case lastError
}
var schemaVersion: Int
var importAttemptId: String
var id: String
var documentId: String
var createdAt: Date
var title: String
var content: ShareInboxContent
var target: ShareInboxTarget?
var previewRoute: SharePreviewRoute
var previewText: String?
var attachments: [ShareInboxAttachment]
var result: ShareInboxResult?
var lastError: String?
init(
id: String = UUID().uuidString,
documentId: String = UUID().uuidString,
importAttemptId: String = UUID().uuidString,
createdAt: Date = Date(),
title: String,
content: ShareInboxContent,
target: ShareInboxTarget? = nil,
previewRoute: SharePreviewRoute = .deferred,
previewText: String? = nil,
attachments: [ShareInboxAttachment] = [],
result: ShareInboxResult? = nil,
lastError: String? = nil
) {
schemaVersion = Self.currentSchemaVersion
self.importAttemptId = importAttemptId
self.id = id
self.documentId = documentId
self.createdAt = createdAt
self.title = title
self.content = content
self.target = target
self.previewRoute = previewRoute
self.previewText = previewText
self.attachments = attachments
self.result = result
self.lastError = lastError
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let schemaVersion = try container.decodeIfPresent(Int.self, forKey: .schemaVersion) ?? 1
self.schemaVersion = schemaVersion
if schemaVersion == 1 {
importAttemptId = UUID().uuidString
} else {
let importAttemptId = try container.decode(String.self, forKey: .importAttemptId)
guard !importAttemptId.isEmpty else {
throw DecodingError.dataCorruptedError(
forKey: .importAttemptId,
in: container,
debugDescription: "importAttemptId must not be empty"
)
}
self.importAttemptId = importAttemptId
}
id = try container.decode(String.self, forKey: .id)
documentId = try container.decode(String.self, forKey: .documentId)
createdAt = try container.decode(Date.self, forKey: .createdAt)
title = try container.decode(String.self, forKey: .title)
content = try container.decode(ShareInboxContent.self, forKey: .content)
target = try container.decodeIfPresent(ShareInboxTarget.self, forKey: .target)
previewRoute = (try? container.decode(SharePreviewRoute.self, forKey: .previewRoute)) ?? .deferred
previewText = try container.decodeIfPresent(String.self, forKey: .previewText)
attachments =
try container.decodeIfPresent([ShareInboxAttachment].self, forKey: .attachments) ?? []
result = try container.decodeIfPresent(ShareInboxResult.self, forKey: .result)
lastError = try container.decodeIfPresent(String.self, forKey: .lastError)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(Self.currentSchemaVersion, forKey: .schemaVersion)
try container.encode(importAttemptId, forKey: .importAttemptId)
try container.encode(id, forKey: .id)
try container.encode(documentId, forKey: .documentId)
try container.encode(createdAt, forKey: .createdAt)
try container.encode(title, forKey: .title)
try container.encode(content, forKey: .content)
try container.encodeIfPresent(target, forKey: .target)
try container.encode(previewRoute, forKey: .previewRoute)
try container.encodeIfPresent(previewText, forKey: .previewText)
try container.encode(attachments, forKey: .attachments)
try container.encodeIfPresent(result, forKey: .result)
try container.encodeIfPresent(lastError, forKey: .lastError)
}
}
enum ShareInboxPendingEntry: Equatable {
case ready(ShareInboxItem)
case unsupportedVersion(itemId: String, schemaVersion: Int)
var createdAt: Date {
switch self {
case let .ready(item):
item.createdAt
case .unsupportedVersion:
.distantFuture
}
}
}
struct SharePayloadFile: Equatable {
var ownedStagingURL: URL
var name: String
var mimeType: String
var size: Int
var thumbnailData: Data
}
struct SharePayloadDraft: Equatable {
var title: String
var content: ShareInboxContent?
var previewText: String
var file: SharePayloadFile?
var errorMessage: String?
func discardStagingFiles() {
guard let file else { return }
SharePayloadBuilder.removeOwnedStagingFile(at: file.ownedStagingURL)
}
}