diff options
Diffstat (limited to 'Sora/Data/Danbooru/DanbooruPost.swift')
| -rw-r--r-- | Sora/Data/Danbooru/DanbooruPost.swift | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/Sora/Data/Danbooru/DanbooruPost.swift b/Sora/Data/Danbooru/DanbooruPost.swift index 216816e..c619fce 100644 --- a/Sora/Data/Danbooru/DanbooruPost.swift +++ b/Sora/Data/Danbooru/DanbooruPost.swift @@ -6,16 +6,16 @@ struct DanbooruPost: Decodable { let uploaderId: Int let score: Int let source: String - let md5: String + let md5: String? let rating: String let imageWidth: Int let imageHeight: Int let tagString: String let parentId: Int? - let mediaAsset: DanbooruMediaAsset - let fileURL: String - let largeFileURL: String - let previewFileURL: String + let mediaAsset: DanbooruMediaAsset? + let fileURL: String? + let largeFileURL: String? + let previewFileURL: String? let isDeleted: Bool enum CodingKeys: String, CodingKey { @@ -38,24 +38,32 @@ struct DanbooruPost: Decodable { } func toBooruPost() -> BooruPost? { - guard let fileURL = URL(string: fileURL), - let sampleURL = URL(string: largeFileURL), - let previewURL = URL(string: previewFileURL) + guard let fileURLString = fileURL, + let fileURL = URL(string: fileURLString) else { return nil } - let previewVariant = mediaAsset.variants.first { $0.type == "180x180" } + let sampleURLString = largeFileURL ?? fileURLString + let previewURLString = previewFileURL ?? largeFileURL ?? fileURLString + + guard let sampleURL = URL(string: sampleURLString), + let previewURL = URL(string: previewURLString) + else { + return nil + } + + let previewVariant = mediaAsset?.variants.first { $0.type == "180x180" } let sampleVariant = - mediaAsset.variants.first { $0.type == "sample" } - ?? mediaAsset.variants.first { $0.type == "original" } + mediaAsset?.variants.first { $0.type == "sample" } + ?? mediaAsset?.variants.first { $0.type == "original" } return BooruPost( id: String(id), height: imageHeight, score: String(score), fileURL: fileURL, - parentID: parentId != nil ? String(parentId!) : "", + parentID: parentId.map(String.init) ?? "", sampleURL: sampleURL, sampleWidth: sampleVariant?.width ?? imageWidth, sampleHeight: sampleVariant?.height ?? imageHeight, @@ -64,7 +72,7 @@ struct DanbooruPost: Decodable { tags: tagString.components(separatedBy: " ").filter { !$0.isEmpty }, width: imageWidth, change: nil, - md5: md5, + md5: md5 ?? "", creatorID: String(uploaderId), authorID: nil, createdAt: createdAt, |