Create CloudKitSync module and start moving files there.

This commit is contained in:
Brent Simmons 2024-04-06 23:10:54 -07:00
parent 057d35030b
commit 079392b6d8
9 changed files with 72 additions and 16 deletions

View File

@ -21,6 +21,7 @@ let package = Package(
.package(path: "../Core"),
.package(path: "../CloudKitExtras"),
.package(path: "../ReaderAPI"),
.package(path: "../CloudKitSync"),
.package(path: "../CommonErrors")
],
targets: [
@ -37,6 +38,7 @@ let package = Package(
"Core",
"CloudKitExtras",
"ReaderAPI",
"CloudKitSync",
"CommonErrors"
],
swiftSettings: [

View File

@ -14,6 +14,7 @@ import CloudKit
import Articles
import SyncDatabase
import CloudKitExtras
import CloudKitSync
final class CloudKitArticlesZone: CloudKitZone {

View File

@ -14,6 +14,7 @@ import SyncDatabase
import Database
import Core
import CloudKitExtras
import CloudKitSync
class CloudKitSendStatusOperation: MainThreadOperation {

8
CloudKitSync/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
.DS_Store
/.build
/Packages
xcuserdata/
DerivedData/
.swiftpm/configuration/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
.netrc

View File

@ -0,0 +1,31 @@
// swift-tools-version: 5.10
import PackageDescription
let package = Package(
name: "CloudKitSync",
platforms: [.macOS(.v14), .iOS(.v17)],
products: [
.library(
name: "CloudKitSync",
targets: ["CloudKitSync"]),
],
dependencies: [
.package(path: "../CloudKitExtras"),
.package(path: "../SyncDatabase"),
.package(path: "../Articles")
],
targets: [
.target(
name: "CloudKitSync",
dependencies: [
"CloudKitExtras",
"SyncDatabase",
"Articles"
]
),
.testTarget(
name: "CloudKitSyncTests",
dependencies: ["CloudKitSync"]),
]
)

View File

@ -9,16 +9,16 @@
import Foundation
import CloudKit
extension CKRecord {
public extension CKRecord {
var externalID: String {
return recordID.externalID
}
}
extension CKRecord.ID {
public extension CKRecord.ID {
var externalID: String {
return recordName
}

View File

@ -10,20 +10,20 @@ import Foundation
import SyncDatabase
import Articles
struct CloudKitArticleStatusUpdate {
public struct CloudKitArticleStatusUpdate {
enum Record {
public enum Record: Sendable {
case all
case new
case statusOnly
case delete
}
var articleID: String
var statuses: [SyncStatus]
var article: Article?
init?(articleID: String, statuses: [SyncStatus], article: Article?) {
public var articleID: String
public var statuses: [SyncStatus]
public var article: Article?
public init?(articleID: String, statuses: [SyncStatus], article: Article?) {
self.articleID = articleID
self.statuses = statuses
self.article = article
@ -35,7 +35,7 @@ struct CloudKitArticleStatusUpdate {
}
}
var record: Record {
public var record: Record {
if statuses.contains(where: { $0.key == .deleted }) {
return .delete
}
@ -53,18 +53,17 @@ struct CloudKitArticleStatusUpdate {
return .statusOnly
}
var isRead: Bool {
public var isRead: Bool {
if let article = article {
return article.status.read
}
return true
}
var isStarred: Bool {
public var isStarred: Bool {
if let article = article {
return article.status.starred
}
return false
}
}

View File

@ -0,0 +1,12 @@
import XCTest
@testable import CloudKitSync
final class CloudKitSyncTests: XCTestCase {
func testExample() throws {
// XCTest Documentation
// https://developer.apple.com/documentation/xctest
// Defining Test Cases and Test Methods
// https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methods
}
}

View File

@ -1337,6 +1337,7 @@
845B14A51FC2299E0013CF92 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
845EE7B01FC2366500854A1F /* StarredFeedDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StarredFeedDelegate.swift; sourceTree = "<group>"; };
845EE7C01FC2488C00854A1F /* SmartFeed.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmartFeed.swift; sourceTree = "<group>"; };
845F3D2B2BC268FE00AEBB68 /* CloudKitSync */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = CloudKitSync; sourceTree = "<group>"; };
846799F42BBD120A000854CB /* Parser */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Parser; sourceTree = "<group>"; };
84702AA31FA27AC0006B8943 /* MarkStatusCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkStatusCommand.swift; sourceTree = "<group>"; };
847120D62B8AE6AF00BBFC34 /* UTType+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UTType+Extensions.swift"; sourceTree = "<group>"; };
@ -2357,10 +2358,11 @@
51C452B22265141B00C03939 /* Frameworks */,
51CD32C624D2DEF9009ABAEF /* Account */,
84CC98D92BC1DD25006A05C9 /* ReaderAPI */,
845F3D2B2BC268FE00AEBB68 /* CloudKitSync */,
8410C4A62BC221C900D4F799 /* CommonErrors */,
51CD32C724D2E06C009ABAEF /* Secrets */,
51CD32C424D2CF1D009ABAEF /* Articles */,
51CD32C324D2CD57009ABAEF /* ArticlesDatabase */,
51CD32C724D2E06C009ABAEF /* Secrets */,
51CD32A824D2CB25009ABAEF /* SyncDatabase */,
841550F42B9E3F8000D4B345 /* Database */,
841550F52B9E4D6800D4B345 /* FMDB */,