mirror of
https://github.com/immich-app/immich.git
synced 2026-03-23 00:38:59 +03:00
add schemas sync variants formatting initial implementation use existing db, wip move to separate folder fix table definitions wip wiring it up repository pattern
63 lines
2.4 KiB
Swift
63 lines
2.4 KiB
Swift
import StructuredFieldValues
|
|
|
|
struct AssetData: StructuredFieldValue {
|
|
static let structuredFieldType: StructuredFieldType = .dictionary
|
|
|
|
let deviceAssetId: String
|
|
let deviceId: String
|
|
let fileCreatedAt: String
|
|
let fileModifiedAt: String
|
|
let fileName: String
|
|
let isFavorite: Bool
|
|
let livePhotoVideoId: String?
|
|
|
|
static let boundary = "Boundary-\(UUID().uuidString)"
|
|
static let deviceAssetIdField = "--\(boundary)\r\nContent-Disposition: form-data; name=\"deviceAssetId\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let deviceIdField = "\r\n--\(boundary)\r\nContent-Disposition: form-data; name=\"deviceId\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let fileCreatedAtField =
|
|
"\r\n--\(boundary)\r\nContent-Disposition: form-data; name=\"fileCreatedAt\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let fileModifiedAtField =
|
|
"\r\n--\(boundary)\r\nContent-Disposition: form-data; name=\"fileModifiedAt\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let isFavoriteField = "\r\n--\(boundary)\r\nContent-Disposition: form-data; name=\"isFavorite\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let livePhotoVideoIdField =
|
|
"\r\n--\(boundary)\r\nContent-Disposition: form-data; name=\"livePhotoVideoId\"\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
static let trueData = "true".data(using: .utf8)!
|
|
static let falseData = "false".data(using: .utf8)!
|
|
static let footer = "\r\n--\(boundary)--\r\n".data(using: .utf8)!
|
|
static let contentType = "multipart/form-data; boundary=\(boundary)"
|
|
|
|
func multipart() -> (Data, Data) {
|
|
var header = Data()
|
|
header.append(Self.deviceAssetIdField)
|
|
header.append(deviceAssetId.data(using: .utf8)!)
|
|
|
|
header.append(Self.deviceIdField)
|
|
header.append(deviceId.data(using: .utf8)!)
|
|
|
|
header.append(Self.fileCreatedAtField)
|
|
header.append(fileCreatedAt.data(using: .utf8)!)
|
|
|
|
header.append(Self.fileModifiedAtField)
|
|
header.append(fileModifiedAt.data(using: .utf8)!)
|
|
|
|
header.append(Self.isFavoriteField)
|
|
header.append(isFavorite ? Self.trueData : Self.falseData)
|
|
|
|
if let livePhotoVideoId {
|
|
header.append(Self.livePhotoVideoIdField)
|
|
header.append(livePhotoVideoId.data(using: .utf8)!)
|
|
}
|
|
header.append(
|
|
"\r\n--\(Self.boundary)\r\nContent-Disposition: form-data; name=\"assetData\"; filename=\"\(fileName)\"\r\nContent-Type: application/octet-stream\r\n\r\n"
|
|
.data(using: .utf8)!
|
|
)
|
|
return (header, Self.footer)
|
|
}
|
|
}
|