From f46a3ece48a6c1063262094315ad6b28f588d09a Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Wed, 12 Jul 2017 12:55:48 -0700 Subject: [PATCH] Back out of ArticleID struct in Data.framework. --- Frameworks/Data/Article.swift | 12 ++++-- Frameworks/Data/ArticleID.swift | 39 ------------------- .../Data/Data.xcodeproj/project.pbxproj | 4 -- 3 files changed, 8 insertions(+), 47 deletions(-) delete mode 100644 Frameworks/Data/ArticleID.swift diff --git a/Frameworks/Data/Article.swift b/Frameworks/Data/Article.swift index 34e240ffb..2871e3290 100644 --- a/Frameworks/Data/Article.swift +++ b/Frameworks/Data/Article.swift @@ -12,7 +12,9 @@ public final class Article: Hashable { weak var account: Account? - public let articleID: ArticleID + public let articleID: String // Unique per database + public let feedID: String // Likely a URL, but not necessarily + public let uniqueID: String // Unique per feed (RSS guid, for example) public var title: String? public var contentHTML: String? public var contentText: String? @@ -33,14 +35,16 @@ public final class Article: Hashable { var feed: Feed? { get { - return account?.existingFeed(with: articleID.feedID) + return account?.existingFeed(with: feedID) } } - init(account: Account, feedID: String, uniqueID: String, title: String?, contentHTML: String?, contentText: String?, url: String?, externalURL: String?, summary: String?, imageURL: String?, bannerImageURL: String?, datePublished: Date?, dateModified: Date?, authors: [Author]?, tags: Set?, attachments: [Attachment]?, accountInfo: AccountInfo?) { + init(account: Account, articleID: String, feedID: String, uniqueID: String, title: String?, contentHTML: String?, contentText: String?, url: String?, externalURL: String?, summary: String?, imageURL: String?, bannerImageURL: String?, datePublished: Date?, dateModified: Date?, authors: [Author]?, tags: Set?, attachments: [Attachment]?, accountInfo: AccountInfo?) { self.account = account - self.articleID = ArticleID(feedID: feedID, uniqueID: uniqueID) + self.articleID = articleID + self.feedID = feedID + self.uniqueID = uniqueID self.title = title self.contentHTML = contentHTML self.contentText = contentText diff --git a/Frameworks/Data/ArticleID.swift b/Frameworks/Data/ArticleID.swift deleted file mode 100644 index 7199ac278..000000000 --- a/Frameworks/Data/ArticleID.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// ArticleID.swift -// Data -// -// Created by Brent Simmons on 7/10/17. -// Copyright © 2017 Ranchero Software. All rights reserved. -// - -import Foundation - -// Any given article’s unique ID is unique only for the feed it appears in. -// We can’t rely on feed authors to produce globally unique identifiers. -// So ArticleID includes the feedID as well as the uniqueID. -// -// While we could use a compound primary key in the database (feedID, articleID), -// that complicates things more than a bit. So ArticleID.stringValue provides -// a single value that can be used as a primary key. - -public struct ArticleID: Hashable { - - public let feedID: String - public let uniqueID: String - public let stringValue: String // Stored in database - public let hashValue: Int - - public init(feedID: String, uniqueID: String) { - - self.feedID = feedID - self.uniqueID = uniqueID - self.stringValue = "\(feedID) \(uniqueID)" - self.hashValue = stringValue.hashValue - } - - public static func ==(lhs: ArticleID, rhs: ArticleID) -> Bool { - - return lhs.hashValue == rhs.hashValue && lhs.feedID == rhs.uniqueID && lhs.feedID == rhs.feedID - } -} - diff --git a/Frameworks/Data/Data.xcodeproj/project.pbxproj b/Frameworks/Data/Data.xcodeproj/project.pbxproj index 1855cd24e..d152730ac 100644 --- a/Frameworks/Data/Data.xcodeproj/project.pbxproj +++ b/Frameworks/Data/Data.xcodeproj/project.pbxproj @@ -8,7 +8,6 @@ /* Begin PBXBuildFile section */ 843079FA1F0AB57F00B4B7F7 /* RSCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844BEEA31F0AB512004AB7CD /* RSCore.framework */; }; - 843A08BA1F148A4400D9C438 /* ArticleID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843A08B91F148A4400D9C438 /* ArticleID.swift */; }; 844BEE651F0AB3C9004AB7CD /* Data.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844BEE5B1F0AB3C8004AB7CD /* Data.framework */; }; 844BEE6A1F0AB3C9004AB7CD /* DataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE691F0AB3C9004AB7CD /* DataTests.swift */; }; 844BEE791F0AB4B8004AB7CD /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844BEE781F0AB4B8004AB7CD /* Account.swift */; }; @@ -62,7 +61,6 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 843A08B91F148A4400D9C438 /* ArticleID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleID.swift; sourceTree = ""; }; 844BEE5B1F0AB3C8004AB7CD /* Data.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Data.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 844BEE641F0AB3C9004AB7CD /* DataTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DataTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 844BEE691F0AB3C9004AB7CD /* DataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTests.swift; sourceTree = ""; }; @@ -114,7 +112,6 @@ 844BEE781F0AB4B8004AB7CD /* Account.swift */, 844BEE7A1F0AB4BE004AB7CD /* Folder.swift */, 844BEE7C1F0AB4C4004AB7CD /* Feed.swift */, - 843A08B91F148A4400D9C438 /* ArticleID.swift */, 844BEE7E1F0AB4CA004AB7CD /* Article.swift */, 844BEE801F0AB4D0004AB7CD /* Author.swift */, 844BEE821F0AB4D6004AB7CD /* Attachment.swift */, @@ -339,7 +336,6 @@ 844BEE9A1F0AB4F8004AB7CD /* DisplayNameProvider.swift in Sources */, 844BEE8F1F0AB4EF004AB7CD /* Account+OPMLRepresentable.swift in Sources */, 844BEE991F0AB4F8004AB7CD /* Container.swift in Sources */, - 843A08BA1F148A4400D9C438 /* ArticleID.swift in Sources */, 844BEE7B1F0AB4BE004AB7CD /* Folder.swift in Sources */, 844BEE981F0AB4F8004AB7CD /* AccountDelegate.swift in Sources */, 844BEE831F0AB4D6004AB7CD /* Attachment.swift in Sources */,