From 588d209f7bddaa623f920c8c6543ee1afbddfd90 Mon Sep 17 00:00:00 2001 From: Joseph Mattello Date: Wed, 4 Jan 2023 09:31:28 -0500 Subject: [PATCH] refs #160 codable feed structs Signed-off-by: Joseph Mattello --- AltStoreCore/Model/Source.swift | 141 ++++++++++++++++++++++++++++++ AltStoreCore/Model/StoreApp.swift | 4 +- 2 files changed, 142 insertions(+), 3 deletions(-) diff --git a/AltStoreCore/Model/Source.swift b/AltStoreCore/Model/Source.swift index c8d97c6d..8f1a72a7 100644 --- a/AltStoreCore/Model/Source.swift +++ b/AltStoreCore/Model/Source.swift @@ -7,6 +7,7 @@ // import CoreData +import UIKit public extension Source { @@ -35,6 +36,146 @@ public extension Source #endif } +public struct AppPermissionFeed: Codable { + let type: String // ALTAppPermissionType + let usageDescription: String + + enum CodingKeys: String, CodingKey + { + case type + case usageDescription + } +} + +public struct AppVersionFeed: Codable { + /* Properties */ + let version: String + let date: Date + let localizedDescription: String? + + let downloadURL: URL + let size: Int64 + + enum CodingKeys: String, CodingKey + { + case version + case date + case localizedDescription + case downloadURL + case size + } +} + +public struct PlatformURLFeed: Codable { + /* Properties */ + let platform: Platform + let downloadURL: URL + + + private enum CodingKeys: String, CodingKey + { + case platform + case downloadURL + } +} + + +public struct StoreAppFeed: Codable { + let name: String + let bundleIdentifier: String + let subtitle: String? + + let developerName: String + let localizedDescription: String + let size: Int64 + + let iconURL: URL + let screenshotURLs: [URL] + + let version: String + let versionDate: Date + let versionDescription: String? + let downloadURL: URL + let platformURLs: [PlatformURLFeed]? + + let tintColor: String? // UIColor? + let isBeta: Bool + + // let source: Source? + let appPermission: [AppPermissionFeed] + let versions: [AppVersionFeed] + + enum CodingKeys: String, CodingKey + { + case bundleIdentifier + case developerName + case downloadURL + case iconURL + case isBeta = "beta" + case localizedDescription + case name + case appPermission = "permissions" + case platformURLs + case screenshotURLs + case size + case subtitle + case tintColor + case version + case versionDate + case versionDescription + case versions + } +} + +public struct NewsItemFeed: Codable { + let identifier: String + let date: Date + + let title: String + let caption: String + let tintColor: String //UIColor + let notify: Bool + + let imageURL: URL? + let externalURL: URL? + + let appID: String? + + private enum CodingKeys: String, CodingKey + { + case identifier + case date + case title + case caption + case tintColor + case imageURL + case externalURL = "url" + case appID + case notify + } +} + + +public struct SourceJSON: Codable { + let name: String + let identifier: String + let sourceURL: URL + let userInfo: [String:String]? //[ALTSourceUserInfoKey:String]? + let apps: [StoreAppFeed] + let news: [NewsItemFeed] + + enum CodingKeys: String, CodingKey + { + case name + case identifier + case sourceURL + case userInfo + case apps + case news + } + +} + @objc(Source) public class Source: NSManagedObject, Fetchable, Decodable { diff --git a/AltStoreCore/Model/StoreApp.swift b/AltStoreCore/Model/StoreApp.swift index ad10f835..2e38b57d 100644 --- a/AltStoreCore/Model/StoreApp.swift +++ b/AltStoreCore/Model/StoreApp.swift @@ -26,14 +26,12 @@ public extension StoreApp } @objc -public enum Platform: UInt { +public enum Platform: UInt, Codable { case ios case tvos case macos } -extension Platform: Decodable {} - @objc public final class PlatformURL: NSManagedObject, Decodable { /* Properties */