Create CloudKitSync module and start moving files there.
This commit is contained in:
parent
057d35030b
commit
079392b6d8
@ -21,6 +21,7 @@ let package = Package(
|
|||||||
.package(path: "../Core"),
|
.package(path: "../Core"),
|
||||||
.package(path: "../CloudKitExtras"),
|
.package(path: "../CloudKitExtras"),
|
||||||
.package(path: "../ReaderAPI"),
|
.package(path: "../ReaderAPI"),
|
||||||
|
.package(path: "../CloudKitSync"),
|
||||||
.package(path: "../CommonErrors")
|
.package(path: "../CommonErrors")
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
@ -37,6 +38,7 @@ let package = Package(
|
|||||||
"Core",
|
"Core",
|
||||||
"CloudKitExtras",
|
"CloudKitExtras",
|
||||||
"ReaderAPI",
|
"ReaderAPI",
|
||||||
|
"CloudKitSync",
|
||||||
"CommonErrors"
|
"CommonErrors"
|
||||||
],
|
],
|
||||||
swiftSettings: [
|
swiftSettings: [
|
||||||
|
@ -14,6 +14,7 @@ import CloudKit
|
|||||||
import Articles
|
import Articles
|
||||||
import SyncDatabase
|
import SyncDatabase
|
||||||
import CloudKitExtras
|
import CloudKitExtras
|
||||||
|
import CloudKitSync
|
||||||
|
|
||||||
final class CloudKitArticlesZone: CloudKitZone {
|
final class CloudKitArticlesZone: CloudKitZone {
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ import SyncDatabase
|
|||||||
import Database
|
import Database
|
||||||
import Core
|
import Core
|
||||||
import CloudKitExtras
|
import CloudKitExtras
|
||||||
|
import CloudKitSync
|
||||||
|
|
||||||
class CloudKitSendStatusOperation: MainThreadOperation {
|
class CloudKitSendStatusOperation: MainThreadOperation {
|
||||||
|
|
||||||
|
8
CloudKitSync/.gitignore
vendored
Normal file
8
CloudKitSync/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
.DS_Store
|
||||||
|
/.build
|
||||||
|
/Packages
|
||||||
|
xcuserdata/
|
||||||
|
DerivedData/
|
||||||
|
.swiftpm/configuration/registries.json
|
||||||
|
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
|
||||||
|
.netrc
|
31
CloudKitSync/Package.swift
Normal file
31
CloudKitSync/Package.swift
Normal 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"]),
|
||||||
|
]
|
||||||
|
)
|
@ -9,16 +9,16 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import CloudKit
|
import CloudKit
|
||||||
|
|
||||||
extension CKRecord {
|
public extension CKRecord {
|
||||||
|
|
||||||
var externalID: String {
|
var externalID: String {
|
||||||
return recordID.externalID
|
return recordID.externalID
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension CKRecord.ID {
|
public extension CKRecord.ID {
|
||||||
|
|
||||||
var externalID: String {
|
var externalID: String {
|
||||||
return recordName
|
return recordName
|
||||||
}
|
}
|
@ -10,20 +10,20 @@ import Foundation
|
|||||||
import SyncDatabase
|
import SyncDatabase
|
||||||
import Articles
|
import Articles
|
||||||
|
|
||||||
struct CloudKitArticleStatusUpdate {
|
public struct CloudKitArticleStatusUpdate {
|
||||||
|
|
||||||
enum Record {
|
public enum Record: Sendable {
|
||||||
case all
|
case all
|
||||||
case new
|
case new
|
||||||
case statusOnly
|
case statusOnly
|
||||||
case delete
|
case delete
|
||||||
}
|
}
|
||||||
|
|
||||||
var articleID: String
|
public var articleID: String
|
||||||
var statuses: [SyncStatus]
|
public var statuses: [SyncStatus]
|
||||||
var article: Article?
|
public var article: Article?
|
||||||
|
|
||||||
init?(articleID: String, statuses: [SyncStatus], article: Article?) {
|
public init?(articleID: String, statuses: [SyncStatus], article: Article?) {
|
||||||
self.articleID = articleID
|
self.articleID = articleID
|
||||||
self.statuses = statuses
|
self.statuses = statuses
|
||||||
self.article = article
|
self.article = article
|
||||||
@ -35,7 +35,7 @@ struct CloudKitArticleStatusUpdate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var record: Record {
|
public var record: Record {
|
||||||
if statuses.contains(where: { $0.key == .deleted }) {
|
if statuses.contains(where: { $0.key == .deleted }) {
|
||||||
return .delete
|
return .delete
|
||||||
}
|
}
|
||||||
@ -53,18 +53,17 @@ struct CloudKitArticleStatusUpdate {
|
|||||||
return .statusOnly
|
return .statusOnly
|
||||||
}
|
}
|
||||||
|
|
||||||
var isRead: Bool {
|
public var isRead: Bool {
|
||||||
if let article = article {
|
if let article = article {
|
||||||
return article.status.read
|
return article.status.read
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
var isStarred: Bool {
|
public var isStarred: Bool {
|
||||||
if let article = article {
|
if let article = article {
|
||||||
return article.status.starred
|
return article.status.starred
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
12
CloudKitSync/Tests/CloudKitSyncTests/CloudKitSyncTests.swift
Normal file
12
CloudKitSync/Tests/CloudKitSyncTests/CloudKitSyncTests.swift
Normal 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
|
||||||
|
}
|
||||||
|
}
|
@ -1337,6 +1337,7 @@
|
|||||||
845B14A51FC2299E0013CF92 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
846799F42BBD120A000854CB /* Parser */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Parser; sourceTree = "<group>"; };
|
||||||
84702AA31FA27AC0006B8943 /* MarkStatusCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkStatusCommand.swift; 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>"; };
|
847120D62B8AE6AF00BBFC34 /* UTType+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UTType+Extensions.swift"; sourceTree = "<group>"; };
|
||||||
@ -2357,10 +2358,11 @@
|
|||||||
51C452B22265141B00C03939 /* Frameworks */,
|
51C452B22265141B00C03939 /* Frameworks */,
|
||||||
51CD32C624D2DEF9009ABAEF /* Account */,
|
51CD32C624D2DEF9009ABAEF /* Account */,
|
||||||
84CC98D92BC1DD25006A05C9 /* ReaderAPI */,
|
84CC98D92BC1DD25006A05C9 /* ReaderAPI */,
|
||||||
|
845F3D2B2BC268FE00AEBB68 /* CloudKitSync */,
|
||||||
8410C4A62BC221C900D4F799 /* CommonErrors */,
|
8410C4A62BC221C900D4F799 /* CommonErrors */,
|
||||||
|
51CD32C724D2E06C009ABAEF /* Secrets */,
|
||||||
51CD32C424D2CF1D009ABAEF /* Articles */,
|
51CD32C424D2CF1D009ABAEF /* Articles */,
|
||||||
51CD32C324D2CD57009ABAEF /* ArticlesDatabase */,
|
51CD32C324D2CD57009ABAEF /* ArticlesDatabase */,
|
||||||
51CD32C724D2E06C009ABAEF /* Secrets */,
|
|
||||||
51CD32A824D2CB25009ABAEF /* SyncDatabase */,
|
51CD32A824D2CB25009ABAEF /* SyncDatabase */,
|
||||||
841550F42B9E3F8000D4B345 /* Database */,
|
841550F42B9E3F8000D4B345 /* Database */,
|
||||||
841550F52B9E4D6800D4B345 /* FMDB */,
|
841550F52B9E4D6800D4B345 /* FMDB */,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user