diff --git a/Frameworks/Account/Account.xcodeproj/project.pbxproj b/Frameworks/Account/Account.xcodeproj/project.pbxproj index 3d8c4e600..94d50d5c0 100644 --- a/Frameworks/Account/Account.xcodeproj/project.pbxproj +++ b/Frameworks/Account/Account.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ 846E77541F6F00E300A165E2 /* AccountManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846E77531F6F00E300A165E2 /* AccountManager.swift */; }; 848935001F62484F00CEBD24 /* Account.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 848934F61F62484F00CEBD24 /* Account.framework */; }; 848935051F62485000CEBD24 /* AccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848935041F62485000CEBD24 /* AccountTests.swift */; }; + 84B2D4D02238CD8A00498ADA /* FeedMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B2D4CE2238C13D00498ADA /* FeedMetadata.swift */; }; 84B99C9F1FAE8D3200ECDEDB /* ContainerPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9E1FAE8D3200ECDEDB /* ContainerPath.swift */; }; 84C3654A1F899F3B001EC85C /* CombinedRefreshProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */; }; 84C8B3F41F89DE430053CCA6 /* DataExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C8B3F31F89DE430053CCA6 /* DataExtensions.swift */; }; @@ -101,6 +102,8 @@ 848935041F62485000CEBD24 /* AccountTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountTests.swift; sourceTree = ""; }; 848935061F62485000CEBD24 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 848935101F62486800CEBD24 /* Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; + 84AF4EA3222CFDD100F6A800 /* AccountSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSettings.swift; sourceTree = ""; }; + 84B2D4CE2238C13D00498ADA /* FeedMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedMetadata.swift; sourceTree = ""; }; 84B99C9E1FAE8D3200ECDEDB /* ContainerPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerPath.swift; sourceTree = ""; }; 84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombinedRefreshProgress.swift; sourceTree = ""; }; 84C8B3F31F89DE430053CCA6 /* DataExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExtensions.swift; sourceTree = ""; }; @@ -200,9 +203,11 @@ children = ( 846E77531F6F00E300A165E2 /* AccountManager.swift */, 848935101F62486800CEBD24 /* Account.swift */, + 84AF4EA3222CFDD100F6A800 /* AccountSettings.swift */, 841974241F6DDCE4006346C4 /* AccountDelegate.swift */, 841974001F6DD1EC006346C4 /* Folder.swift */, 844B297C2106C7EC004020B3 /* Feed.swift */, + 84B2D4CE2238C13D00498ADA /* FeedMetadata.swift */, 844B297E210CE37E004020B3 /* UnreadCountProvider.swift */, 84B99C9E1FAE8D3200ECDEDB /* ContainerPath.swift */, 84C365491F899F3B001EC85C /* CombinedRefreshProgress.swift */, @@ -417,6 +422,7 @@ 841974251F6DDCE4006346C4 /* AccountDelegate.swift in Sources */, 846E77541F6F00E300A165E2 /* AccountManager.swift in Sources */, 844B297D2106C7EC004020B3 /* Feed.swift in Sources */, + 84B2D4D02238CD8A00498ADA /* FeedMetadata.swift in Sources */, 84B99C9F1FAE8D3200ECDEDB /* ContainerPath.swift in Sources */, 846E77501F6EF9C400A165E2 /* LocalAccountRefresher.swift in Sources */, 84D09623217418DC00D77525 /* FeedbinTagging.swift in Sources */, diff --git a/Frameworks/Account/AccountSettings.swift b/Frameworks/Account/AccountSettings.swift new file mode 100644 index 000000000..aa138a84b --- /dev/null +++ b/Frameworks/Account/AccountSettings.swift @@ -0,0 +1,10 @@ +// +// AccountSettings.swift +// Account +// +// Created by Brent Simmons on 3/3/19. +// Copyright © 2019 Ranchero Software, LLC. All rights reserved. +// + +import Foundation + diff --git a/Frameworks/Account/FeedMetadata.swift b/Frameworks/Account/FeedMetadata.swift new file mode 100644 index 000000000..5571fab84 --- /dev/null +++ b/Frameworks/Account/FeedMetadata.swift @@ -0,0 +1,107 @@ +// +// FeedMetadata.swift +// Account +// +// Created by Brent Simmons on 3/12/19. +// Copyright © 2019 Ranchero Software, LLC. All rights reserved. +// + +import Foundation +import RSWeb +import Articles + +protocol FeedMetadataDelegate: class { + func valueDidChange(_ feedMetadata: FeedMetadata, key: FeedMetadata.CodingKeys) +} + +final class FeedMetadata: Codable { + + let feedID: String + + enum CodingKeys: String, CodingKey { + case feedID + case homePageURL + case iconURL + case faviconURL + case name + case editedName + case authors + case contentHash + case conditionalGetInfo + } + + var homePageURL: String? { + didSet { + if homePageURL != oldValue { + valueDidChange(.homePageURL) + } + } + } + + var iconURL: String? { + didSet { + if iconURL != oldValue { + valueDidChange(.iconURL) + } + } + } + + var faviconURL: String? { + didSet { + if faviconURL != oldValue { + valueDidChange(.faviconURL) + } + } + } + + var name: String? { + didSet { + if name != oldValue { + valueDidChange(.name) + } + } + } + + var editedName: String? { + didSet { + if editedName != oldValue { + valueDidChange(.editedName) + } + } + } + + var contentHash: String? { + didSet { + if contentHash != oldValue { + valueDidChange(.contentHash) + } + } + } + + var authors: [Author]? { + didSet { + if authors != oldValue { + valueDidChange(.authors) + } + } + } + + var conditionalGetInfo: HTTPConditionalGetInfo? { + didSet { + if conditionalGetInfo != oldValue { + valueDidChange(.conditionalGetInfo) + } + } + } + + weak var delegate: FeedMetadataDelegate? + + init(feedID: String, delegate: FeedMetadataDelegate) { + self.feedID = feedID + self.delegate = delegate + } + + func valueDidChange(_ key: CodingKeys) { + delegate?.valueDidChange(self, key: key) + } +}