diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index f50ad6e26..1bdc236a6 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -107,7 +107,6 @@ 512DD4C92430086400C17B1F /* CloudKitAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */; }; 512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97A11ED9F180007D329B /* FolderTreeControllerDelegate.swift */; }; 512E08E72268801200BDCFDD /* WebFeedTreeControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97611ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift */; }; - 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */; }; 512E094D2268B8AB00BDCFDD /* DeleteCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84B99C9C1FAE83C600ECDEDB /* DeleteCommand.swift */; }; 5131463E235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 51314637235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 51314668235A7E4600387FDC /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51314666235A7E4600387FDC /* IntentHandler.swift */; }; @@ -176,15 +175,12 @@ 515D4FCA23257CB500EE1167 /* Node-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97971ED9EFAA007D329B /* Node-Extensions.swift */; }; 515D4FCC2325815A00EE1167 /* SafariExt.js in Resources */ = {isa = PBXBuildFile; fileRef = 515D4FCB2325815A00EE1167 /* SafariExt.js */; }; 516244E3241E19F000B61C47 /* ColorPaletteTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516244E2241E19F000B61C47 /* ColorPaletteTableViewController.swift */; }; - 51627A6723861DA3007B3B4B /* MasterFeedViewController+Drag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51627A6623861DA3007B3B4B /* MasterFeedViewController+Drag.swift */; }; - 51627A6923861DED007B3B4B /* MasterFeedViewController+Drop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51627A6823861DED007B3B4B /* MasterFeedViewController+Drop.swift */; }; 51627A93238A3836007B3B4B /* CroppingPreviewParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51627A92238A3836007B3B4B /* CroppingPreviewParameters.swift */; }; 516A093723609A3600EAE89B /* SettingsComboTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 516A091D23609A3600EAE89B /* SettingsComboTableViewCell.xib */; }; 516A09392360A2AE00EAE89B /* SettingsComboTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516A09382360A2AE00EAE89B /* SettingsComboTableViewCell.swift */; }; 516A093B2360A4A000EAE89B /* SettingsTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 516A093A2360A4A000EAE89B /* SettingsTableViewCell.xib */; }; 516A09402361240900EAE89B /* Account.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 516A093F2361240900EAE89B /* Account.storyboard */; }; 516A09422361248000EAE89B /* Inspector.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 516A09412361248000EAE89B /* Inspector.storyboard */; }; - 516AE9B32371C372007DEEAA /* MasterFeedTableViewSectionHeaderLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516AE9B22371C372007DEEAA /* MasterFeedTableViewSectionHeaderLayout.swift */; }; 516AE9DF2372269A007DEEAA /* IconImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516AE9DE2372269A007DEEAA /* IconImage.swift */; }; 516AE9E02372269A007DEEAA /* IconImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 516AE9DE2372269A007DEEAA /* IconImage.swift */; }; 516B695F24D2F33B00B5702F /* Account in Frameworks */ = {isa = PBXBuildFile; productRef = 516B695E24D2F33B00B5702F /* Account */; }; @@ -208,8 +204,6 @@ 51934CCE2310792F006127BE /* ActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51934CCD2310792F006127BE /* ActivityManager.swift */; }; 51938DF2231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51938DF1231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift */; }; 51938DF3231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51938DF1231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift */; }; - 5195C1DA2720205F00888867 /* ShadowTableChanges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5195C1D92720205F00888867 /* ShadowTableChanges.swift */; }; - 5195C1DC2720BD3000888867 /* MasterFeedRowIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5195C1DB2720BD3000888867 /* MasterFeedRowIdentifier.swift */; }; 519B8D332143397200FA689C /* SharingServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519B8D322143397200FA689C /* SharingServiceDelegate.swift */; }; 519CA8E525841DB700EB079A /* CrashReporter in Frameworks */ = {isa = PBXBuildFile; productRef = 519CA8E425841DB700EB079A /* CrashReporter */; }; 519E743D22C663F900A78E47 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519E743422C663F900A78E47 /* SceneDelegate.swift */; }; @@ -268,10 +262,6 @@ 51C45259226508D300C03939 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45255226507D200C03939 /* AppDefaults.swift */; }; 51C4525A226508D600C03939 /* UIStoryboard-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4524E226506F400C03939 /* UIStoryboard-Extensions.swift */; }; 51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45250226506F400C03939 /* String-Extensions.swift */; }; - 51C45268226508F600C03939 /* MasterFeedUnreadCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45261226508F600C03939 /* MasterFeedUnreadCountView.swift */; }; - 51C45269226508F600C03939 /* MasterFeedTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45262226508F600C03939 /* MasterFeedTableViewCell.swift */; }; - 51C4526A226508F600C03939 /* MasterFeedTableViewCellLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45263226508F600C03939 /* MasterFeedTableViewCellLayout.swift */; }; - 51C4526B226508F600C03939 /* MasterFeedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C45264226508F600C03939 /* MasterFeedViewController.swift */; }; 51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4526E2265091600C03939 /* MasterTimelineViewController.swift */; }; 51C452772265091600C03939 /* MultilineUILabelSizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452702265091600C03939 /* MultilineUILabelSizer.swift */; }; 51C452782265091600C03939 /* MasterTimelineCellData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C452712265091600C03939 /* MasterTimelineCellData.swift */; }; @@ -313,8 +303,6 @@ 51C4CFF224D37D1F00AF9874 /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4CFEF24D37D1F00AF9874 /* Secrets.swift */; }; 51C4CFF624D37DD500AF9874 /* Secrets in Frameworks */ = {isa = PBXBuildFile; productRef = 51C4CFF524D37DD500AF9874 /* Secrets */; }; 51C9DE5823EA2EF4003D5A6D /* WrapperScriptMessageHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C9DE5723EA2EF4003D5A6D /* WrapperScriptMessageHandler.swift */; }; - 51CE1C0923621EDA005548FC /* RefreshProgressView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 51CE1C0823621EDA005548FC /* RefreshProgressView.xib */; }; - 51CE1C0B23622007005548FC /* RefreshProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CE1C0A23622006005548FC /* RefreshProgressView.swift */; }; 51CE1C712367721A005548FC /* testURLsOfCurrentArticle.applescript in Sources */ = {isa = PBXBuildFile; fileRef = 84F9EADB213660A100CF2DE4 /* testURLsOfCurrentArticle.applescript */; }; 51D0214626ED617100FF2E0F /* core.css in Resources */ = {isa = PBXBuildFile; fileRef = 51D0214526ED617100FF2E0F /* core.css */; }; 51D0214826ED617100FF2E0F /* core.css in Resources */ = {isa = PBXBuildFile; fileRef = 51D0214526ED617100FF2E0F /* core.css */; }; @@ -835,7 +823,6 @@ 512AF9DC236F05230066F8BE /* InteractiveLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractiveLabel.swift; sourceTree = ""; }; 512D554323C804DE0023FFFA /* OpenInSafariActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenInSafariActivity.swift; sourceTree = ""; }; 512DD4C82430086400C17B1F /* CloudKitAccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitAccountViewController.swift; sourceTree = ""; }; - 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewSectionHeader.swift; sourceTree = ""; }; 51314617235A797400387FDC /* NetNewsWire_iOSintentextension_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_iOSintentextension_target.xcconfig; sourceTree = ""; }; 51314637235A7BBE00387FDC /* NetNewsWire iOS Intents Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "NetNewsWire iOS Intents Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; 51314665235A7E4600387FDC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -872,15 +859,12 @@ 515D4FCD2325909200EE1167 /* NetNewsWire_iOS_ShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetNewsWire_iOS_ShareExtension.entitlements; sourceTree = ""; }; 515D4FCE2325B3D000EE1167 /* NetNewsWire_iOSshareextension_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_iOSshareextension_target.xcconfig; sourceTree = ""; }; 516244E2241E19F000B61C47 /* ColorPaletteTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorPaletteTableViewController.swift; sourceTree = ""; }; - 51627A6623861DA3007B3B4B /* MasterFeedViewController+Drag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MasterFeedViewController+Drag.swift"; sourceTree = ""; }; - 51627A6823861DED007B3B4B /* MasterFeedViewController+Drop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MasterFeedViewController+Drop.swift"; sourceTree = ""; }; 51627A92238A3836007B3B4B /* CroppingPreviewParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CroppingPreviewParameters.swift; sourceTree = ""; }; 516A091D23609A3600EAE89B /* SettingsComboTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsComboTableViewCell.xib; sourceTree = ""; }; 516A09382360A2AE00EAE89B /* SettingsComboTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsComboTableViewCell.swift; sourceTree = ""; }; 516A093A2360A4A000EAE89B /* SettingsTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsTableViewCell.xib; sourceTree = ""; }; 516A093F2361240900EAE89B /* Account.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Account.storyboard; sourceTree = ""; }; 516A09412361248000EAE89B /* Inspector.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Inspector.storyboard; sourceTree = ""; }; - 516AE9B22371C372007DEEAA /* MasterFeedTableViewSectionHeaderLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewSectionHeaderLayout.swift; sourceTree = ""; }; 516AE9DE2372269A007DEEAA /* IconImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IconImage.swift; sourceTree = ""; }; 51707438232AA97100A461A3 /* ShareFolderPickerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareFolderPickerController.swift; sourceTree = ""; }; 517630032336215100E15FFF /* main.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; @@ -899,8 +883,6 @@ 518ED21C23D0F26000E0A862 /* UIViewController-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController-Extensions.swift"; sourceTree = ""; }; 51934CCD2310792F006127BE /* ActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityManager.swift; sourceTree = ""; }; 51938DF1231AFC660055A1A0 /* SearchTimelineFeedDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTimelineFeedDelegate.swift; sourceTree = ""; }; - 5195C1D92720205F00888867 /* ShadowTableChanges.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShadowTableChanges.swift; sourceTree = ""; }; - 5195C1DB2720BD3000888867 /* MasterFeedRowIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterFeedRowIdentifier.swift; sourceTree = ""; }; 519B8D322143397200FA689C /* SharingServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingServiceDelegate.swift; sourceTree = ""; }; 519E743422C663F900A78E47 /* SceneDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; 51A052CD244FB9D6006C2024 /* AddFeedWIndowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AddFeedWIndowController.swift; path = AddFeed/AddFeedWIndowController.swift; sourceTree = ""; }; @@ -933,10 +915,6 @@ 51C45250226506F400C03939 /* String-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String-Extensions.swift"; sourceTree = ""; }; 51C45254226507D200C03939 /* AppAssets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppAssets.swift; sourceTree = ""; }; 51C45255226507D200C03939 /* AppDefaults.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDefaults.swift; sourceTree = ""; }; - 51C45261226508F600C03939 /* MasterFeedUnreadCountView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterFeedUnreadCountView.swift; sourceTree = ""; }; - 51C45262226508F600C03939 /* MasterFeedTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewCell.swift; sourceTree = ""; }; - 51C45263226508F600C03939 /* MasterFeedTableViewCellLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterFeedTableViewCellLayout.swift; sourceTree = ""; }; - 51C45264226508F600C03939 /* MasterFeedViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterFeedViewController.swift; sourceTree = ""; }; 51C4526E2265091600C03939 /* MasterTimelineViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineViewController.swift; sourceTree = ""; }; 51C452702265091600C03939 /* MultilineUILabelSizer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultilineUILabelSizer.swift; sourceTree = ""; }; 51C452712265091600C03939 /* MasterTimelineCellData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MasterTimelineCellData.swift; sourceTree = ""; }; @@ -955,8 +933,6 @@ 51CD32C424D2CF1D009ABAEF /* Articles */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Articles; sourceTree = ""; }; 51CD32C624D2DEF9009ABAEF /* Account */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Account; sourceTree = ""; }; 51CD32C724D2E06C009ABAEF /* Secrets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Secrets; sourceTree = ""; }; - 51CE1C0823621EDA005548FC /* RefreshProgressView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RefreshProgressView.xib; sourceTree = ""; }; - 51CE1C0A23622006005548FC /* RefreshProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshProgressView.swift; sourceTree = ""; }; 51D0214526ED617100FF2E0F /* core.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = core.css; sourceTree = ""; }; 51D6A5BB23199C85001C27D8 /* MasterTimelineDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineDataSource.swift; sourceTree = ""; }; 51D87EE02311D34700E63F03 /* ActivityType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityType.swift; sourceTree = ""; }; @@ -1209,6 +1185,10 @@ FFD43E372340F320009E5CA3 /* MarkAsReadAlertController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkAsReadAlertController.swift; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + 84352B8A2D1B446D0002B64E /* MainFeed */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = MainFeed; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 176813F02564BB2C00D98635 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -1590,33 +1570,6 @@ path = "UIKit Extensions"; sourceTree = ""; }; - 51C4525D226508F600C03939 /* MasterFeed */ = { - isa = PBXGroup; - children = ( - 51C45264226508F600C03939 /* MasterFeedViewController.swift */, - 51627A6623861DA3007B3B4B /* MasterFeedViewController+Drag.swift */, - 51627A6823861DED007B3B4B /* MasterFeedViewController+Drop.swift */, - 51CE1C0A23622006005548FC /* RefreshProgressView.swift */, - 51CE1C0823621EDA005548FC /* RefreshProgressView.xib */, - 5195C1D92720205F00888867 /* ShadowTableChanges.swift */, - 51C45260226508F600C03939 /* Cell */, - ); - path = MasterFeed; - sourceTree = ""; - }; - 51C45260226508F600C03939 /* Cell */ = { - isa = PBXGroup; - children = ( - 5195C1DB2720BD3000888867 /* MasterFeedRowIdentifier.swift */, - 51C45262226508F600C03939 /* MasterFeedTableViewCell.swift */, - 51C45263226508F600C03939 /* MasterFeedTableViewCellLayout.swift */, - 512E08F722688F7C00BDCFDD /* MasterFeedTableViewSectionHeader.swift */, - 516AE9B22371C372007DEEAA /* MasterFeedTableViewSectionHeaderLayout.swift */, - 51C45261226508F600C03939 /* MasterFeedUnreadCountView.swift */, - ); - path = Cell; - sourceTree = ""; - }; 51C4526D2265091600C03939 /* MasterTimeline */ = { isa = PBXGroup; children = ( @@ -2205,7 +2158,7 @@ 51BB7C262335A8E5008E8144 /* ArticleActivityItemSource.swift */, C5A6ED5123C9AF4300AB6BE2 /* TitleActivityItemSource.swift */, 51B62E67233186730085F949 /* IconView.swift */, - 51C4525D226508F600C03939 /* MasterFeed */, + 84352B8A2D1B446D0002B64E /* MainFeed */, 51C4526D2265091600C03939 /* MasterTimeline */, 51C4527D2265092C00C03939 /* Article */, 516A093E236123A800EAE89B /* Account */, @@ -2516,6 +2469,9 @@ 5131463D235A7BBE00387FDC /* PBXTargetDependency */, 176813FF2564BB2D00D98635 /* PBXTargetDependency */, ); + fileSystemSynchronizedGroups = ( + 84352B8A2D1B446D0002B64E /* MainFeed */, + ); name = "NetNewsWire-iOS"; packageProductDependencies = ( 516B695E24D2F33B00B5702F /* Account */, @@ -2794,7 +2750,6 @@ 49F40DF92335B71000552BF4 /* newsfoot.js in Resources */, 51F85BEF2272520B00C787DC /* Thanks.rtf in Resources */, 8413C13B2D050EA6002E3D0F /* PrivacyInfo.xcprivacy in Resources */, - 51CE1C0923621EDA005548FC /* RefreshProgressView.xib in Resources */, 84C9FC9D2262A1A900D921D6 /* Assets.xcassets in Resources */, 514219582353C28900E07E2C /* main_ios.js in Resources */, 51DEE81426FB9233006DAA56 /* Appanoose.nnwtheme in Resources */, @@ -3127,7 +3082,6 @@ 51C452A422650A2D00C03939 /* ArticleUtilities.swift in Sources */, 51EF0F79227716380050506E /* ColorHash.swift in Sources */, 51F9F3FB23DFB25700A314FD /* Animations.swift in Sources */, - 5195C1DA2720205F00888867 /* ShadowTableChanges.swift in Sources */, 5183CCDA226E31A50010922C /* NonIntrinsicImageView.swift in Sources */, B2B80778239C4C7000F191E0 /* RSImage-AppIcons.swift in Sources */, 518ED21D23D0F26000E0A862 /* UIViewController-Extensions.swift in Sources */, @@ -3142,7 +3096,6 @@ 51C45291226509C800C03939 /* SmartFeed.swift in Sources */, 51C452A722650A3D00C03939 /* RSImage-Extensions.swift in Sources */, 511B9807237DCAC90028BCAA /* UserInfoKey.swift in Sources */, - 51C45269226508F600C03939 /* MasterFeedTableViewCell.swift in Sources */, 51F85BFD2275DCA800C787DC /* SingleLineUILabelSizer.swift in Sources */, 517630232336657E00E15FFF /* WebViewProvider.swift in Sources */, 51E43962238037C400015C31 /* AddFeedFolderViewController.swift in Sources */, @@ -3168,7 +3121,6 @@ 51C4525C226508DF00C03939 /* String-Extensions.swift in Sources */, 51F9F3F923DFB16300A314FD /* UITableView-Extensions.swift in Sources */, 51C452792265091600C03939 /* MasterTimelineTableViewCell.swift in Sources */, - 51C4526B226508F600C03939 /* MasterFeedViewController.swift in Sources */, 5126EE97226CB48A00C22AFC /* SceneCoordinator.swift in Sources */, 84CAFCB022BC8C35007694F0 /* FetchRequestOperation.swift in Sources */, 51EF0F77227716200050506E /* FaviconGenerator.swift in Sources */, @@ -3203,7 +3155,6 @@ 51E4398023805EBC00015C31 /* AddComboTableViewCell.swift in Sources */, 51C4529A22650A0400C03939 /* ArticleTheme.swift in Sources */, 51C4527F2265092C00C03939 /* ArticleViewController.swift in Sources */, - 51C4526A226508F600C03939 /* MasterFeedTableViewCellLayout.swift in Sources */, 51C452AE2265104D00C03939 /* ArticleStringFormatter.swift in Sources */, 512E08E62268800D00BDCFDD /* FolderTreeControllerDelegate.swift in Sources */, 51A9A60A2382FD240033AADF /* PoppableGestureRecognizerDelegate.swift in Sources */, @@ -3237,7 +3188,6 @@ 51A1699B235E10D700EB091F /* AccountInspectorViewController.swift in Sources */, 512D554423C804DE0023FFFA /* OpenInSafariActivity.swift in Sources */, 51C452762265091600C03939 /* MasterTimelineViewController.swift in Sources */, - 5195C1DC2720BD3000888867 /* MasterFeedRowIdentifier.swift in Sources */, 5108F6D823763094001ABC45 /* TickMarkSlider.swift in Sources */, 51C452882265093600C03939 /* AddFeedViewController.swift in Sources */, 51B5C8C023F3866C00032075 /* ExtensionFeedAddRequestFile.swift in Sources */, @@ -3247,9 +3197,7 @@ 518651DA235621840078E021 /* ImageTransition.swift in Sources */, 51C266EA238C334800F53014 /* ContextMenuPreviewViewController.swift in Sources */, 173A642C2547BE9600267F6E /* AccountType+Helpers.swift in Sources */, - 51627A6923861DED007B3B4B /* MasterFeedViewController+Drop.swift in Sources */, 514219372352510100E07E2C /* ImageScrollView.swift in Sources */, - 516AE9B32371C372007DEEAA /* MasterFeedTableViewSectionHeaderLayout.swift in Sources */, 51DC370B2405BC9A0095D371 /* PreloadedWebView.swift in Sources */, D3555BF524664566005E48C3 /* ArticleSearchBar.swift in Sources */, 8454C3F3263F2D8700E3F9C7 /* IconImageCache.swift in Sources */, @@ -3258,9 +3206,7 @@ 17071EF126F8137400F5E71D /* ArticleTheme+Notifications.swift in Sources */, 51C4529B22650A1000C03939 /* FaviconDownloader.swift in Sources */, 84DEE56622C32CA4005FC42C /* SmartFeedDelegate.swift in Sources */, - 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */, 516AE9E02372269A007DEEAA /* IconImage.swift in Sources */, - 51C45268226508F600C03939 /* MasterFeedUnreadCountView.swift in Sources */, D3A39865246505DF00F9A366 /* FindInArticleActivity.swift in Sources */, 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */, 5137C2EA26F63AE6009EFEDB /* ArticleThemeImporter.swift in Sources */, @@ -3272,11 +3218,9 @@ 8413C1382D050A1E002E3D0F /* UniformTypeIdentifiers+Extras.swift in Sources */, 51C452782265091600C03939 /* MasterTimelineCellData.swift in Sources */, 5148F4552336DB7000F8CD8B /* MasterTimelineTitleView.swift in Sources */, - 51627A6723861DA3007B3B4B /* MasterFeedViewController+Drag.swift in Sources */, 51FFF0C4235EE8E5002762AA /* VibrantButton.swift in Sources */, 51C45259226508D300C03939 /* AppDefaults.swift in Sources */, 510FFAB326EEA22C00F32265 /* ArticleThemesTableViewController.swift in Sources */, - 51CE1C0B23622007005548FC /* RefreshProgressView.swift in Sources */, 511D4419231FC02D00FB1562 /* KeyboardManager.swift in Sources */, 51A1699D235E10D700EB091F /* SettingsViewController.swift in Sources */, 51C45293226509C800C03939 /* StarredFeedDelegate.swift in Sources */, diff --git a/iOS/Base.lproj/Main.storyboard b/iOS/Base.lproj/Main.storyboard index fb22428a5..4d05018e1 100644 --- a/iOS/Base.lproj/Main.storyboard +++ b/iOS/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -173,13 +173,13 @@ - + - + @@ -432,7 +432,7 @@ - + diff --git a/iOS/MasterFeed/Cell/MasterFeedRowIdentifier.swift b/iOS/MainFeed/Cell/MainFeedRowIdentifier.swift similarity index 78% rename from iOS/MasterFeed/Cell/MasterFeedRowIdentifier.swift rename to iOS/MainFeed/Cell/MainFeedRowIdentifier.swift index 8737decf3..7cffecb6e 100644 --- a/iOS/MasterFeed/Cell/MasterFeedRowIdentifier.swift +++ b/iOS/MainFeed/Cell/MainFeedRowIdentifier.swift @@ -1,5 +1,5 @@ // -// MasterFeedRowIdentifier.swift +// MainFeedRowIdentifier.swift // NetNewsWire-iOS // // Created by Maurice Parker on 10/20/21. @@ -8,7 +8,7 @@ import Foundation -class MasterFeedRowIdentifier: NSObject, NSCopying { +class MainFeedRowIdentifier: NSObject, NSCopying { var indexPath: IndexPath diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewCell.swift b/iOS/MainFeed/Cell/MainFeedTableViewCell.swift similarity index 84% rename from iOS/MasterFeed/Cell/MasterFeedTableViewCell.swift rename to iOS/MainFeed/Cell/MainFeedTableViewCell.swift index 4cb6f90e6..54fc3ffd7 100644 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewCell.swift +++ b/iOS/MainFeed/Cell/MainFeedTableViewCell.swift @@ -1,5 +1,5 @@ // -// MasterTableViewCell.swift +// MainFeedTableViewCell.swift // NetNewsWire // // Created by Brent Simmons on 8/1/15. @@ -11,13 +11,13 @@ import RSCore import Account import RSTree -protocol MasterFeedTableViewCellDelegate: AnyObject { - func masterFeedTableViewCellDisclosureDidToggle(_ sender: MasterFeedTableViewCell, expanding: Bool) +protocol MainFeedTableViewCellDelegate: AnyObject { + func masterFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) } -class MasterFeedTableViewCell : VibrantTableViewCell { +class MainFeedTableViewCell : VibrantTableViewCell { - weak var delegate: MasterFeedTableViewCellDelegate? + weak var delegate: MainFeedTableViewCellDelegate? override var accessibilityLabel: String? { set {} @@ -103,7 +103,7 @@ class MasterFeedTableViewCell : VibrantTableViewCell { private var isDisclosureExpanded = false private var disclosureButton: UIButton? - private var unreadCountView = MasterFeedUnreadCountView(frame: CGRect.zero) + private var unreadCountView = MainFeedUnreadCountView(frame: CGRect.zero) private var isShowingEditControl = false required init?(coder: NSCoder) { @@ -136,13 +136,13 @@ class MasterFeedTableViewCell : VibrantTableViewCell { } override func sizeThatFits(_ size: CGSize) -> CGSize { - let layout = MasterFeedTableViewCellLayout(cellWidth: bounds.size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView, showingEditingControl: isShowingEditControl, indent: indentationLevel == 1, shouldShowDisclosure: isDisclosureAvailable) + let layout = MainFeedTableViewCellLayout(cellWidth: bounds.size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView, showingEditingControl: isShowingEditControl, indent: indentationLevel == 1, shouldShowDisclosure: isDisclosureAvailable) return CGSize(width: bounds.width, height: layout.height) } override func layoutSubviews() { super.layoutSubviews() - let layout = MasterFeedTableViewCellLayout(cellWidth: bounds.size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView, showingEditingControl: isShowingEditControl, indent: indentationLevel == 1, shouldShowDisclosure: isDisclosureAvailable) + let layout = MainFeedTableViewCellLayout(cellWidth: bounds.size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView, showingEditingControl: isShowingEditControl, indent: indentationLevel == 1, shouldShowDisclosure: isDisclosureAvailable) layoutWith(layout) } @@ -180,7 +180,7 @@ class MasterFeedTableViewCell : VibrantTableViewCell { } -private extension MasterFeedTableViewCell { +private extension MainFeedTableViewCell { func commonInit() { addSubviewAtInit(unreadCountView) @@ -208,7 +208,7 @@ private extension MasterFeedTableViewCell { view.translatesAutoresizingMaskIntoConstraints = false } - func layoutWith(_ layout: MasterFeedTableViewCellLayout) { + func layoutWith(_ layout: MainFeedTableViewCellLayout) { iconView.setFrameIfNotEqual(layout.faviconRect) titleView.setFrameIfNotEqual(layout.titleRect) unreadCountView.setFrameIfNotEqual(layout.unreadCountRect) diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewCellLayout.swift b/iOS/MainFeed/Cell/MainFeedTableViewCellLayout.swift similarity index 59% rename from iOS/MasterFeed/Cell/MasterFeedTableViewCellLayout.swift rename to iOS/MainFeed/Cell/MainFeedTableViewCellLayout.swift index 4ff894978..a1d84f04e 100644 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewCellLayout.swift +++ b/iOS/MainFeed/Cell/MainFeedTableViewCellLayout.swift @@ -1,5 +1,5 @@ // -// MasterTableViewCellLayout.swift +// MainFeedTableViewCellLayout.swift // NetNewsWire // // Created by Brent Simmons on 11/24/17. @@ -9,7 +9,7 @@ import UIKit import RSCore -struct MasterFeedTableViewCellLayout { +struct MainFeedTableViewCellLayout { private static let indentWidth = CGFloat(integerLiteral: 42) private static let editingControlIndent = CGFloat(integerLiteral: 40) @@ -32,18 +32,18 @@ struct MasterFeedTableViewCellLayout { let height: CGFloat - init(cellWidth: CGFloat, insets: UIEdgeInsets, label: UILabel, unreadCountView: MasterFeedUnreadCountView, showingEditingControl: Bool, indent: Bool, shouldShowDisclosure: Bool) { + init(cellWidth: CGFloat, insets: UIEdgeInsets, label: UILabel, unreadCountView: MainFeedUnreadCountView, showingEditingControl: Bool, indent: Bool, shouldShowDisclosure: Bool) { var initialIndent = insets.left if indent { - initialIndent += MasterFeedTableViewCellLayout.indentWidth + initialIndent += MainFeedTableViewCellLayout.indentWidth } let bounds = CGRect(x: initialIndent, y: 0.0, width: floor(cellWidth - initialIndent - insets.right), height: 0.0) // Disclosure Button var rDisclosure = CGRect.zero if shouldShowDisclosure { - rDisclosure.size = MasterFeedTableViewCellLayout.disclosureButtonSize + rDisclosure.size = MainFeedTableViewCellLayout.disclosureButtonSize rDisclosure.origin.x = bounds.origin.x } @@ -51,10 +51,10 @@ struct MasterFeedTableViewCellLayout { var rFavicon = CGRect.zero if !shouldShowDisclosure { let x = bounds.origin.x - let y = UIFontMetrics.default.scaledValue(for: MasterFeedTableViewCellLayout.verticalPadding) + + let y = UIFontMetrics.default.scaledValue(for: MainFeedTableViewCellLayout.verticalPadding) + label.font.lineHeight / 2.0 - - MasterFeedTableViewCellLayout.imageSize.height / 2.0 - rFavicon = CGRect(x: x, y: y, width: MasterFeedTableViewCellLayout.imageSize.width, height: MasterFeedTableViewCellLayout.imageSize.height) + MainFeedTableViewCellLayout.imageSize.height / 2.0 + rFavicon = CGRect(x: x, y: y, width: MainFeedTableViewCellLayout.imageSize.width, height: MainFeedTableViewCellLayout.imageSize.height) } // Unread Count @@ -64,21 +64,21 @@ struct MasterFeedTableViewCellLayout { var rUnread = CGRect.zero if !unreadCountIsHidden { rUnread.size = unreadCountSize - rUnread.origin.x = bounds.maxX - (MasterFeedTableViewCellLayout.unreadCountMarginRight + unreadCountSize.width) + rUnread.origin.x = bounds.maxX - (MainFeedTableViewCellLayout.unreadCountMarginRight + unreadCountSize.width) } // Title - var rLabelx = insets.left + MasterFeedTableViewCellLayout.disclosureButtonSize.width + var rLabelx = insets.left + MainFeedTableViewCellLayout.disclosureButtonSize.width if !shouldShowDisclosure { - rLabelx = rLabelx + MasterFeedTableViewCellLayout.imageSize.width + MasterFeedTableViewCellLayout.imageMarginRight + rLabelx = rLabelx + MainFeedTableViewCellLayout.imageSize.width + MainFeedTableViewCellLayout.imageMarginRight } - let rLabely = UIFontMetrics.default.scaledValue(for: MasterFeedTableViewCellLayout.verticalPadding) + let rLabely = UIFontMetrics.default.scaledValue(for: MainFeedTableViewCellLayout.verticalPadding) var labelWidth = CGFloat.zero if !unreadCountIsHidden { - labelWidth = cellWidth - (rLabelx + MasterFeedTableViewCellLayout.labelMarginRight + (cellWidth - rUnread.minX)) + labelWidth = cellWidth - (rLabelx + MainFeedTableViewCellLayout.labelMarginRight + (cellWidth - rUnread.minX)) } else { - labelWidth = cellWidth - (rLabelx + MasterFeedTableViewCellLayout.labelMarginRight) + labelWidth = cellWidth - (rLabelx + MainFeedTableViewCellLayout.labelMarginRight) } let labelSizeInfo = MultilineUILabelSizer.size(for: label.text ?? "", font: label.font, numberOfLines: 0, width: Int(floor(labelWidth))) @@ -87,44 +87,44 @@ struct MasterFeedTableViewCellLayout { // We do this because we don't want the row height to change when the editing controls are brought out. We will // handle the missing space, but removing it from the label and truncating. if showingEditingControl { - rDisclosure.origin.x += MasterFeedTableViewCellLayout.editingControlIndent - rFavicon.origin.x += MasterFeedTableViewCellLayout.editingControlIndent - rLabelx += MasterFeedTableViewCellLayout.editingControlIndent + rDisclosure.origin.x += MainFeedTableViewCellLayout.editingControlIndent + rFavicon.origin.x += MainFeedTableViewCellLayout.editingControlIndent + rLabelx += MainFeedTableViewCellLayout.editingControlIndent if !unreadCountIsHidden { - rUnread.origin.x -= MasterFeedTableViewCellLayout.editingControlIndent - labelWidth = cellWidth - (rLabelx + MasterFeedTableViewCellLayout.labelMarginRight + (cellWidth - rUnread.minX)) + rUnread.origin.x -= MainFeedTableViewCellLayout.editingControlIndent + labelWidth = cellWidth - (rLabelx + MainFeedTableViewCellLayout.labelMarginRight + (cellWidth - rUnread.minX)) } else { - labelWidth = cellWidth - (rLabelx + MasterFeedTableViewCellLayout.labelMarginRight + MasterFeedTableViewCellLayout.editingControlIndent) + labelWidth = cellWidth - (rLabelx + MainFeedTableViewCellLayout.labelMarginRight + MainFeedTableViewCellLayout.editingControlIndent) } } var rLabel = CGRect(x: rLabelx, y: rLabely, width: labelWidth, height: labelSizeInfo.size.height) // Determine cell height - let paddedLabelHeight = rLabel.maxY + UIFontMetrics.default.scaledValue(for: MasterFeedTableViewCellLayout.verticalPadding) + let paddedLabelHeight = rLabel.maxY + UIFontMetrics.default.scaledValue(for: MainFeedTableViewCellLayout.verticalPadding) let maxGraphicsHeight = [rFavicon, rUnread, rDisclosure].maxY() var cellHeight = max(paddedLabelHeight, maxGraphicsHeight) - if cellHeight < MasterFeedTableViewCellLayout.minRowHeight { - cellHeight = MasterFeedTableViewCellLayout.minRowHeight + if cellHeight < MainFeedTableViewCellLayout.minRowHeight { + cellHeight = MainFeedTableViewCellLayout.minRowHeight } // Center in Cell let newBounds = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: bounds.width, height: cellHeight) if !unreadCountIsHidden { - rUnread = MasterFeedTableViewCellLayout.centerVertically(rUnread, newBounds) + rUnread = MainFeedTableViewCellLayout.centerVertically(rUnread, newBounds) } if shouldShowDisclosure { - rDisclosure = MasterFeedTableViewCellLayout.centerVertically(rDisclosure, newBounds) + rDisclosure = MainFeedTableViewCellLayout.centerVertically(rDisclosure, newBounds) } // Small fonts and the Favicon need centered if we hit the minimum row height - if cellHeight == MasterFeedTableViewCellLayout.minRowHeight { - rLabel = MasterFeedTableViewCellLayout.centerVertically(rLabel, newBounds) - rFavicon = MasterFeedTableViewCellLayout.centerVertically(rFavicon, newBounds) + if cellHeight == MainFeedTableViewCellLayout.minRowHeight { + rLabel = MainFeedTableViewCellLayout.centerVertically(rLabel, newBounds) + rFavicon = MainFeedTableViewCellLayout.centerVertically(rFavicon, newBounds) } // Separator Insets - let separatorInset = MasterFeedTableViewCellLayout.disclosureButtonSize.width + let separatorInset = MainFeedTableViewCellLayout.disclosureButtonSize.width separatorRect = CGRect(x: separatorInset, y: cellHeight - 0.5, width: cellWidth - separatorInset, height: 0.5) // Assign the properties diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift b/iOS/MainFeed/Cell/MainFeedTableViewSectionHeader.swift similarity index 85% rename from iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift rename to iOS/MainFeed/Cell/MainFeedTableViewSectionHeader.swift index dc5b21ed6..794aa550b 100644 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeader.swift +++ b/iOS/MainFeed/Cell/MainFeedTableViewSectionHeader.swift @@ -1,5 +1,5 @@ // -// MasterTableViewSectionHeader.swift +// MainTableViewSectionHeader.swift // NetNewsWire // // Created by Maurice Parker on 4/18/19. @@ -8,13 +8,13 @@ import UIKit -protocol MasterFeedTableViewSectionHeaderDelegate { - func masterFeedTableViewSectionHeaderDisclosureDidToggle(_ sender: MasterFeedTableViewSectionHeader) +protocol MainFeedTableViewSectionHeaderDelegate { + func mainFeedTableViewSectionHeaderDisclosureDidToggle(_ sender: MainFeedTableViewSectionHeader) } -class MasterFeedTableViewSectionHeader: UITableViewHeaderFooterView { +class MainFeedTableViewSectionHeader: UITableViewHeaderFooterView { - var delegate: MasterFeedTableViewSectionHeaderDelegate? + var delegate: MainFeedTableViewSectionHeaderDelegate? override var accessibilityLabel: String? { set {} @@ -81,7 +81,7 @@ class MasterFeedTableViewSectionHeader: UITableViewHeaderFooterView { return label }() - private let unreadCountView = MasterFeedUnreadCountView(frame: CGRect.zero) + private let unreadCountView = MainFeedUnreadCountView(frame: CGRect.zero) private lazy var disclosureButton: UIButton = { let button = NonIntrinsicButton() @@ -118,14 +118,14 @@ class MasterFeedTableViewSectionHeader: UITableViewHeaderFooterView { } override func sizeThatFits(_ size: CGSize) -> CGSize { - let layout = MasterFeedTableViewSectionHeaderLayout(cellWidth: size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView) + let layout = MainFeedTableViewSectionHeaderLayout(cellWidth: size.width, insets: safeAreaInsets, label: titleView, unreadCountView: unreadCountView) return CGSize(width: bounds.width, height: layout.height) } override func layoutSubviews() { super.layoutSubviews() - let layout = MasterFeedTableViewSectionHeaderLayout(cellWidth: contentView.bounds.size.width, + let layout = MainFeedTableViewSectionHeaderLayout(cellWidth: contentView.bounds.size.width, insets: contentView.safeAreaInsets, label: titleView, unreadCountView: unreadCountView) @@ -134,10 +134,10 @@ class MasterFeedTableViewSectionHeader: UITableViewHeaderFooterView { } -private extension MasterFeedTableViewSectionHeader { +private extension MainFeedTableViewSectionHeader { @objc func toggleDisclosure() { - delegate?.masterFeedTableViewSectionHeaderDisclosureDidToggle(self) + delegate?.mainFeedTableViewSectionHeaderDisclosureDidToggle(self) } func commonInit() { @@ -189,7 +189,7 @@ private extension MasterFeedTableViewSectionHeader { view.translatesAutoresizingMaskIntoConstraints = false } - func layoutWith(_ layout: MasterFeedTableViewSectionHeaderLayout) { + func layoutWith(_ layout: MainFeedTableViewSectionHeaderLayout) { titleView.setFrameIfNotEqual(layout.titleRect) unreadCountView.setFrameIfNotEqual(layout.unreadCountRect) disclosureButton.setFrameIfNotEqual(layout.disclosureButtonRect) diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeaderLayout.swift b/iOS/MainFeed/Cell/MainFeedTableViewSectionHeaderLayout.swift similarity index 62% rename from iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeaderLayout.swift rename to iOS/MainFeed/Cell/MainFeedTableViewSectionHeaderLayout.swift index 1421e16f0..758383e09 100644 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewSectionHeaderLayout.swift +++ b/iOS/MainFeed/Cell/MainFeedTableViewSectionHeaderLayout.swift @@ -1,5 +1,5 @@ // -// MasterFeedTableViewSectionHeaderLayout.swift +// MainFeedTableViewSectionHeaderLayout.swift // NetNewsWire-iOS // // Created by Maurice Parker on 11/5/19. @@ -9,7 +9,7 @@ import UIKit import RSCore -struct MasterFeedTableViewSectionHeaderLayout { +struct MainFeedTableViewSectionHeaderLayout { private static let labelMarginRight = CGFloat(integerLiteral: 8) private static let unreadCountMarginRight = CGFloat(integerLiteral: 16) @@ -24,13 +24,13 @@ struct MasterFeedTableViewSectionHeaderLayout { let height: CGFloat - init(cellWidth: CGFloat, insets: UIEdgeInsets, label: UILabel, unreadCountView: MasterFeedUnreadCountView) { + init(cellWidth: CGFloat, insets: UIEdgeInsets, label: UILabel, unreadCountView: MainFeedUnreadCountView) { let bounds = CGRect(x: insets.left, y: 0.0, width: floor(cellWidth - insets.right), height: 0.0) // Disclosure Button var rDisclosure = CGRect.zero - rDisclosure.size = MasterFeedTableViewSectionHeaderLayout.disclosureButtonSize + rDisclosure.size = MainFeedTableViewSectionHeaderLayout.disclosureButtonSize rDisclosure.origin.x = bounds.origin.x // Unread Count @@ -40,43 +40,43 @@ struct MasterFeedTableViewSectionHeaderLayout { var rUnread = CGRect.zero if !unreadCountIsHidden { rUnread.size = unreadCountSize - rUnread.origin.x = bounds.maxX - (MasterFeedTableViewSectionHeaderLayout.unreadCountMarginRight + unreadCountSize.width) + rUnread.origin.x = bounds.maxX - (MainFeedTableViewSectionHeaderLayout.unreadCountMarginRight + unreadCountSize.width) } // Max Unread Count // We can't reload Section Headers so we don't let the title extend into the (probably) worse case Unread Count area. - let maxUnreadCountView = MasterFeedUnreadCountView(frame: CGRect.zero) + let maxUnreadCountView = MainFeedUnreadCountView(frame: CGRect.zero) maxUnreadCountView.unreadCount = 888 let maxUnreadCountSize = maxUnreadCountView.contentSize // Title - let rLabelx = insets.left + MasterFeedTableViewSectionHeaderLayout.disclosureButtonSize.width - let rLabely = UIFontMetrics.default.scaledValue(for: MasterFeedTableViewSectionHeaderLayout.verticalPadding) + let rLabelx = insets.left + MainFeedTableViewSectionHeaderLayout.disclosureButtonSize.width + let rLabely = UIFontMetrics.default.scaledValue(for: MainFeedTableViewSectionHeaderLayout.verticalPadding) var labelWidth = CGFloat.zero - labelWidth = cellWidth - (rLabelx + MasterFeedTableViewSectionHeaderLayout.labelMarginRight + maxUnreadCountSize.width + MasterFeedTableViewSectionHeaderLayout.unreadCountMarginRight) + labelWidth = cellWidth - (rLabelx + MainFeedTableViewSectionHeaderLayout.labelMarginRight + maxUnreadCountSize.width + MainFeedTableViewSectionHeaderLayout.unreadCountMarginRight) let labelSizeInfo = MultilineUILabelSizer.size(for: label.text ?? "", font: label.font, numberOfLines: 0, width: Int(floor(labelWidth))) var rLabel = CGRect(x: rLabelx, y: rLabely, width: labelWidth, height: labelSizeInfo.size.height) // Determine cell height - let paddedLabelHeight = rLabel.maxY + UIFontMetrics.default.scaledValue(for: MasterFeedTableViewSectionHeaderLayout.verticalPadding) + let paddedLabelHeight = rLabel.maxY + UIFontMetrics.default.scaledValue(for: MainFeedTableViewSectionHeaderLayout.verticalPadding) let maxGraphicsHeight = [rUnread, rDisclosure].maxY() var cellHeight = max(paddedLabelHeight, maxGraphicsHeight) - if cellHeight < MasterFeedTableViewSectionHeaderLayout.minRowHeight { - cellHeight = MasterFeedTableViewSectionHeaderLayout.minRowHeight + if cellHeight < MainFeedTableViewSectionHeaderLayout.minRowHeight { + cellHeight = MainFeedTableViewSectionHeaderLayout.minRowHeight } // Center in Cell let newBounds = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: bounds.width, height: cellHeight) if !unreadCountIsHidden { - rUnread = MasterFeedTableViewCellLayout.centerVertically(rUnread, newBounds) + rUnread = MainFeedTableViewCellLayout.centerVertically(rUnread, newBounds) } - rDisclosure = MasterFeedTableViewCellLayout.centerVertically(rDisclosure, newBounds) + rDisclosure = MainFeedTableViewCellLayout.centerVertically(rDisclosure, newBounds) // Small fonts need centered if we hit the minimum row height - if cellHeight == MasterFeedTableViewSectionHeaderLayout.minRowHeight { - rLabel = MasterFeedTableViewCellLayout.centerVertically(rLabel, newBounds) + if cellHeight == MainFeedTableViewSectionHeaderLayout.minRowHeight { + rLabel = MainFeedTableViewCellLayout.centerVertically(rLabel, newBounds) } // Assign the properties diff --git a/iOS/MasterFeed/Cell/MasterFeedUnreadCountView.swift b/iOS/MainFeed/Cell/MainFeedUnreadCountView.swift similarity index 97% rename from iOS/MasterFeed/Cell/MasterFeedUnreadCountView.swift rename to iOS/MainFeed/Cell/MainFeedUnreadCountView.swift index e084036b9..9f2919343 100644 --- a/iOS/MasterFeed/Cell/MasterFeedUnreadCountView.swift +++ b/iOS/MainFeed/Cell/MainFeedUnreadCountView.swift @@ -1,5 +1,5 @@ // -// MasterUnreadCountView.swift +// MainFeedUnreadCountView.swift // NetNewsWire // // Created by Brent Simmons on 11/22/15. @@ -8,7 +8,7 @@ import UIKit -class MasterFeedUnreadCountView : UIView { +class MainFeedUnreadCountView : UIView { var padding: UIEdgeInsets { return UIEdgeInsets(top: 1.0, left: 9.0, bottom: 1.0, right: 9.0) diff --git a/iOS/MasterFeed/MasterFeedViewController+Drag.swift b/iOS/MainFeed/MainFeedViewController+Drag.swift similarity index 89% rename from iOS/MasterFeed/MasterFeedViewController+Drag.swift rename to iOS/MainFeed/MainFeedViewController+Drag.swift index 9553afedf..6c15c2ce9 100644 --- a/iOS/MasterFeed/MasterFeedViewController+Drag.swift +++ b/iOS/MainFeed/MainFeedViewController+Drag.swift @@ -1,5 +1,5 @@ // -// MasterFeedViewController+Drag.swift +// MainFeedViewController+Drag.swift // NetNewsWire-iOS // // Created by Maurice Parker on 11/20/19. @@ -11,7 +11,7 @@ import MobileCoreServices import Account import UniformTypeIdentifiers -extension MasterFeedViewController: UITableViewDragDelegate { +extension MainFeedViewController: UITableViewDragDelegate { func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] { guard let node = coordinator.nodeFor(indexPath), let webFeed = node.representedObject as? WebFeed else { diff --git a/iOS/MasterFeed/MasterFeedViewController+Drop.swift b/iOS/MainFeed/MainFeedViewController+Drop.swift similarity index 98% rename from iOS/MasterFeed/MasterFeedViewController+Drop.swift rename to iOS/MainFeed/MainFeedViewController+Drop.swift index c7f925c07..516c328fd 100644 --- a/iOS/MasterFeed/MasterFeedViewController+Drop.swift +++ b/iOS/MainFeed/MainFeedViewController+Drop.swift @@ -1,5 +1,5 @@ // -// MasterFeedViewController+Drop.swift +// MainFeedViewController+Drop.swift // NetNewsWire-iOS // // Created by Maurice Parker on 11/20/19. @@ -11,7 +11,7 @@ import RSCore import Account import RSTree -extension MasterFeedViewController: UITableViewDropDelegate { +extension MainFeedViewController: UITableViewDropDelegate { func tableView(_ tableView: UITableView, canHandle session: UIDropSession) -> Bool { return session.localDragSession != nil diff --git a/iOS/MasterFeed/MasterFeedViewController.swift b/iOS/MainFeed/MainFeedViewController.swift similarity index 94% rename from iOS/MasterFeed/MasterFeedViewController.swift rename to iOS/MainFeed/MainFeedViewController.swift index a3a683961..a18cc5eeb 100644 --- a/iOS/MasterFeed/MasterFeedViewController.swift +++ b/iOS/MainFeed/MainFeedViewController.swift @@ -1,5 +1,5 @@ // -// MasterViewController.swift +// MainFeedViewController.swift // NetNewsWire // // Created by Maurice Parker on 4/8/19. @@ -13,7 +13,7 @@ import RSCore import RSTree import SafariServices -class MasterFeedViewController: UITableViewController, UndoableCommandRunner { +class MainFeedViewController: UITableViewController, UndoableCommandRunner { @IBOutlet weak var filterButton: UIBarButtonItem! private var refreshProgressView: RefreshProgressView? @@ -22,7 +22,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { if #available(iOS 14, *) { addNewItemButton.primaryAction = nil } else { - addNewItemButton.action = #selector(MasterFeedViewController.add(_:)) + addNewItemButton.action = #selector(MainFeedViewController.add(_:)) } } } @@ -59,7 +59,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { frame.size.height = .leastNormalMagnitude tableView.tableHeaderView = UIView(frame: frame) - tableView.register(MasterFeedTableViewSectionHeader.self, forHeaderFooterViewReuseIdentifier: "SectionHeader") + tableView.register(MainFeedTableViewSectionHeader.self, forHeaderFooterViewReuseIdentifier: "SectionHeader") tableView.dragDelegate = self tableView.dropDelegate = self tableView.dragInteractionEnabled = true @@ -106,7 +106,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { if let account = unreadCountProvider as? Account { if let node = coordinator.rootNode.childNodeRepresentingObject(account) { let sectionIndex = coordinator.rootNode.indexOfChild(node)! - if let headerView = tableView.headerView(forSection: sectionIndex) as? MasterFeedTableViewSectionHeader { + if let headerView = tableView.headerView(forSection: sectionIndex) as? MainFeedTableViewSectionHeader { headerView.unreadCount = account.unreadCount } } @@ -121,7 +121,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { } guard let unreadCountNode = node, let indexPath = coordinator.indexPathFor(unreadCountNode) else { return } - if let cell = tableView.cellForRow(at: indexPath) as? MasterFeedTableViewCell { + if let cell = tableView.cellForRow(at: indexPath) as? MainFeedTableViewCell { cell.unreadCount = unreadCountProvider.unreadCount } } @@ -166,7 +166,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MasterFeedTableViewCell + let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MainFeedTableViewCell configure(cell, indexPath) return cell } @@ -185,7 +185,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { return 44 } - let headerView = MasterFeedTableViewSectionHeader() + let headerView = MainFeedTableViewSectionHeader() headerView.name = nameProvider.nameForDisplay let size = headerView.sizeThatFits(CGSize(width: tableView.bounds.width, height: 0.0)) @@ -199,7 +199,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { return nil } - let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "SectionHeader") as! MasterFeedTableViewSectionHeader + let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "SectionHeader") as! MainFeedTableViewSectionHeader headerView.delegate = self headerView.name = nameProvider.nameForDisplay @@ -336,7 +336,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { } override func tableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? { - guard let identifier = configuration.identifier as? MasterFeedRowIdentifier, + guard let identifier = configuration.identifier as? MainFeedRowIdentifier, let cell = tableView.cellForRow(at: identifier.indexPath) else { return nil } @@ -464,7 +464,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { } @objc func toggleSectionHeader(_ sender: UITapGestureRecognizer) { - guard let headerView = sender.view as? MasterFeedTableViewSectionHeader else { + guard let headerView = sender.view as? MainFeedTableViewSectionHeader else { return } toggle(headerView) @@ -686,7 +686,7 @@ class MasterFeedViewController: UITableViewController, UndoableCommandRunner { // MARK: UIContextMenuInteractionDelegate -extension MasterFeedViewController: UIContextMenuInteractionDelegate { +extension MainFeedViewController: UIContextMenuInteractionDelegate { func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? { guard let sectionIndex = interaction.view?.tag, @@ -724,9 +724,9 @@ extension MasterFeedViewController: UIContextMenuInteractionDelegate { // MARK: MasterFeedTableViewSectionHeaderDelegate -extension MasterFeedViewController: MasterFeedTableViewSectionHeaderDelegate { +extension MainFeedViewController: MainFeedTableViewSectionHeaderDelegate { - func masterFeedTableViewSectionHeaderDisclosureDidToggle(_ sender: MasterFeedTableViewSectionHeader) { + func mainFeedTableViewSectionHeaderDisclosureDidToggle(_ sender: MainFeedTableViewSectionHeader) { toggle(sender) } @@ -734,9 +734,9 @@ extension MasterFeedViewController: MasterFeedTableViewSectionHeaderDelegate { // MARK: MasterTableViewCellDelegate -extension MasterFeedViewController: MasterFeedTableViewCellDelegate { +extension MainFeedViewController: MainFeedTableViewCellDelegate { - func masterFeedTableViewCellDisclosureDidToggle(_ sender: MasterFeedTableViewCell, expanding: Bool) { + func masterFeedTableViewCellDisclosureDidToggle(_ sender: MainFeedTableViewCell, expanding: Bool) { if expanding { expand(sender) } else { @@ -748,7 +748,7 @@ extension MasterFeedViewController: MasterFeedTableViewCellDelegate { // MARK: Private -private extension MasterFeedViewController { +private extension MainFeedViewController { func configureToolbar() { guard let refreshProgressView = Bundle.main.loadNibNamed("RefreshProgressView", owner: self, options: nil)?[0] as? RefreshProgressView else { @@ -774,14 +774,14 @@ private extension MasterFeedViewController { let titleLabel = NonIntrinsicLabel() titleLabel.text = "But I must explain" - let unreadCountView = MasterFeedUnreadCountView() + let unreadCountView = MainFeedUnreadCountView() unreadCountView.unreadCount = 10 - let layout = MasterFeedTableViewCellLayout(cellWidth: tableView.bounds.size.width, insets: tableView.safeAreaInsets, label: titleLabel, unreadCountView: unreadCountView, showingEditingControl: false, indent: false, shouldShowDisclosure: false) + let layout = MainFeedTableViewCellLayout(cellWidth: tableView.bounds.size.width, insets: tableView.safeAreaInsets, label: titleLabel, unreadCountView: unreadCountView, showingEditingControl: false, indent: false, shouldShowDisclosure: false) tableView.estimatedRowHeight = layout.height } - func configure(_ cell: MasterFeedTableViewCell, _ indexPath: IndexPath) { + func configure(_ cell: MainFeedTableViewCell, _ indexPath: IndexPath) { guard let node = coordinator.nodeFor(indexPath) else { return } cell.delegate = self @@ -814,7 +814,7 @@ private extension MasterFeedViewController { } - func configureIcon(_ cell: MasterFeedTableViewCell, _ indexPath: IndexPath) { + func configureIcon(_ cell: MainFeedTableViewCell, _ indexPath: IndexPath) { guard let node = coordinator.nodeFor(indexPath), let feed = node.representedObject as? Feed, let feedID = feed.feedID else { return } @@ -832,7 +832,7 @@ private extension MasterFeedViewController { applyToCellsForRepresentedObject(representedObject, configure) } - func applyToCellsForRepresentedObject(_ representedObject: AnyObject, _ completion: (MasterFeedTableViewCell, IndexPath) -> Void) { + func applyToCellsForRepresentedObject(_ representedObject: AnyObject, _ completion: (MainFeedTableViewCell, IndexPath) -> Void) { applyToAvailableCells { (cell, indexPath) in if let node = coordinator.nodeFor(indexPath), let representedFeed = representedObject as? Feed, @@ -843,12 +843,12 @@ private extension MasterFeedViewController { } } - func applyToAvailableCells(_ completion: (MasterFeedTableViewCell, IndexPath) -> Void) { + func applyToAvailableCells(_ completion: (MainFeedTableViewCell, IndexPath) -> Void) { tableView.visibleCells.forEach { cell in guard let indexPath = tableView.indexPath(for: cell) else { return } - completion(cell as! MasterFeedTableViewCell, indexPath) + completion(cell as! MainFeedTableViewCell, indexPath) } } @@ -871,7 +871,7 @@ private extension MasterFeedViewController { return nil } - func toggle(_ headerView: MasterFeedTableViewSectionHeader) { + func toggle(_ headerView: MainFeedTableViewSectionHeader) { guard let sectionNode = coordinator.rootNode.childAtIndex(headerView.tag) else { return } @@ -885,14 +885,14 @@ private extension MasterFeedViewController { } } - func expand(_ cell: MasterFeedTableViewCell) { + func expand(_ cell: MainFeedTableViewCell) { guard let indexPath = tableView.indexPath(for: cell), let node = coordinator.nodeFor(indexPath) else { return } coordinator.expand(node) } - func collapse(_ cell: MasterFeedTableViewCell) { + func collapse(_ cell: MainFeedTableViewCell) { guard let indexPath = tableView.indexPath(for: cell), let node = coordinator.nodeFor(indexPath) else { return } @@ -900,7 +900,7 @@ private extension MasterFeedViewController { } func makeWebFeedContextMenu(indexPath: IndexPath, includeDeleteRename: Bool) -> UIContextMenuConfiguration { - return UIContextMenuConfiguration(identifier: MasterFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { [ weak self] suggestedActions in + return UIContextMenuConfiguration(identifier: MainFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { [ weak self] suggestedActions in guard let self = self else { return nil } @@ -945,7 +945,7 @@ private extension MasterFeedViewController { } func makeFolderContextMenu(indexPath: IndexPath) -> UIContextMenuConfiguration { - return UIContextMenuConfiguration(identifier: MasterFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { [weak self] suggestedActions in + return UIContextMenuConfiguration(identifier: MainFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { [weak self] suggestedActions in guard let self = self else { return nil } @@ -972,7 +972,7 @@ private extension MasterFeedViewController { return nil } - return UIContextMenuConfiguration(identifier: MasterFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { suggestedActions in + return UIContextMenuConfiguration(identifier: MainFeedRowIdentifier(indexPath: indexPath), previewProvider: nil, actionProvider: { suggestedActions in return UIMenu(title: "", children: [markAllAction]) }) } @@ -1288,7 +1288,7 @@ private extension MasterFeedViewController { } -extension MasterFeedViewController: UIGestureRecognizerDelegate { +extension MainFeedViewController: UIGestureRecognizerDelegate { func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { guard let gestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { return false diff --git a/iOS/MasterFeed/RefreshProgressView.swift b/iOS/MainFeed/RefreshProgressView.swift similarity index 100% rename from iOS/MasterFeed/RefreshProgressView.swift rename to iOS/MainFeed/RefreshProgressView.swift diff --git a/iOS/MasterFeed/RefreshProgressView.xib b/iOS/MainFeed/RefreshProgressView.xib similarity index 100% rename from iOS/MasterFeed/RefreshProgressView.xib rename to iOS/MainFeed/RefreshProgressView.xib diff --git a/iOS/MasterFeed/ShadowTableChanges.swift b/iOS/MainFeed/ShadowTableChanges.swift similarity index 100% rename from iOS/MasterFeed/ShadowTableChanges.swift rename to iOS/MainFeed/ShadowTableChanges.swift diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewCellSectionIdentifier.swift b/iOS/MasterFeed/Cell/MasterFeedTableViewCellSectionIdentifier.swift deleted file mode 100644 index 87e298f75..000000000 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewCellSectionIdentifier.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// MasterFeedTableViewCellSectionIdentifier.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 6/3/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import Foundation -import RSTree - -struct MasterFeedTableViewSectionIdentifier: Hashable { - - init(node: Node) { - - } - -} diff --git a/iOS/MasterFeed/Cell/MasterFeedTableViewIdentifier.swift b/iOS/MasterFeed/Cell/MasterFeedTableViewIdentifier.swift deleted file mode 100644 index adc6fc74f..000000000 --- a/iOS/MasterFeed/Cell/MasterFeedTableViewIdentifier.swift +++ /dev/null @@ -1,78 +0,0 @@ -// -// MasterFeedTableViewIdentifier.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 6/3/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import Foundation -import Account -import RSTree - -final class MasterFeedTableViewIdentifier: NSObject, NSCopying { - - let feedID: FeedIdentifier? - let containerID: ContainerIdentifier? - let parentContainerID: ContainerIdentifier? - - let isEditable: Bool - let isPsuedoFeed: Bool - let isFolder: Bool - let isWebFeed: Bool - - let nameForDisplay: String - let url: String? - let unreadCount: Int - let childCount: Int - - var account: Account? { - if isFolder, let parentContainerID = parentContainerID { - return AccountManager.shared.existingContainer(with: parentContainerID) as? Account - } - if isWebFeed, let feedID = feedID { - return (AccountManager.shared.existingFeed(with: feedID) as? WebFeed)?.account - } - return nil - } - - init(node: Node, unreadCount: Int) { - let feed = node.representedObject as! Feed - self.feedID = feed.feedID - self.containerID = (node.representedObject as? Container)?.containerID - self.parentContainerID = (node.parent?.representedObject as? Container)?.containerID - - self.isEditable = !(node.representedObject is PseudoFeed) - self.isPsuedoFeed = node.representedObject is PseudoFeed - self.isFolder = node.representedObject is Folder - self.isWebFeed = node.representedObject is WebFeed - self.nameForDisplay = feed.nameForDisplay - - if let webFeed = node.representedObject as? WebFeed { - self.url = webFeed.url - } else { - self.url = nil - } - - self.unreadCount = unreadCount - self.childCount = node.numberOfChildNodes - } - - override func isEqual(_ object: Any?) -> Bool { - guard let otherIdentifier = object as? MasterFeedTableViewIdentifier else { return false } - if self === otherIdentifier { return true } - return feedID == otherIdentifier.feedID && parentContainerID == otherIdentifier.parentContainerID - } - - override var hash: Int { - var hasher = Hasher() - hasher.combine(feedID) - hasher.combine(parentContainerID) - return hasher.finalize() - } - - func copy(with zone: NSZone? = nil) -> Any { - return self - } - -} diff --git a/iOS/MasterFeed/UpdateSelectionOperation.swift b/iOS/MasterFeed/UpdateSelectionOperation.swift deleted file mode 100644 index 1660ed1e9..000000000 --- a/iOS/MasterFeed/UpdateSelectionOperation.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// UpdateSelectionOperation.swift -// NetNewsWire-iOS -// -// Created by Maurice Parker on 2/22/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import UIKit -import RSCore - -class UpdateSelectionOperation: MainThreadOperation { - - // MainThreadOperation - public var isCanceled = false - public var id: Int? - public weak var operationDelegate: MainThreadOperationDelegate? - public var name: String? = "UpdateSelectionOperation" - public var completionBlock: MainThreadOperation.MainThreadOperationCompletionBlock? - - private var coordinator: SceneCoordinator - private var dataSource: MasterFeedDataSource - private var tableView: UITableView - private var animations: Animations - - init(coordinator: SceneCoordinator, dataSource: MasterFeedDataSource, tableView: UITableView, animations: Animations) { - self.coordinator = coordinator - self.dataSource = dataSource - self.tableView = tableView - self.animations = animations - } - - func run() { - if dataSource.snapshot().numberOfItems > 0 { - if let indexPath = coordinator.currentFeedIndexPath { - CATransaction.begin() - CATransaction.setCompletionBlock { - self.operationDelegate?.operationDidComplete(self) - } - tableView.selectRowAndScrollIfNotVisible(at: indexPath, animations: animations) - CATransaction.commit() - } else { - if let indexPath = tableView.indexPathForSelectedRow { - if animations.contains(.select) { - CATransaction.begin() - CATransaction.setCompletionBlock { - self.operationDelegate?.operationDidComplete(self) - } - tableView.deselectRow(at: indexPath, animated: true) - CATransaction.commit() - } else { - tableView.deselectRow(at: indexPath, animated: false) - self.operationDelegate?.operationDidComplete(self) - } - } else { - self.operationDelegate?.operationDidComplete(self) - } - } - } else { - self.operationDelegate?.operationDidComplete(self) - } - } - -} diff --git a/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift b/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift index 66a7a4b26..fd377b2d4 100644 --- a/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift +++ b/iOS/MasterTimeline/MasterTimelineUnreadCountView.swift @@ -8,7 +8,7 @@ import UIKit -class MasterTimelineUnreadCountView: MasterFeedUnreadCountView { +class MasterTimelineUnreadCountView: MainFeedUnreadCountView { override var padding: UIEdgeInsets { return UIEdgeInsets(top: 2.0, left: 9.0, bottom: 2.0, right: 9.0) diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 2bc9b6f42..5a33daca3 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -52,7 +52,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { private var rootSplitViewController: RootSplitViewController! - private var masterFeedViewController: MasterFeedViewController! + private var masterFeedViewController: MainFeedViewController! private var masterTimelineViewController: MasterTimelineViewController? private var articleViewController: ArticleViewController? @@ -280,7 +280,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { super.init() - self.masterFeedViewController = rootSplitViewController.viewController(for: .primary) as? MasterFeedViewController + self.masterFeedViewController = rootSplitViewController.viewController(for: .primary) as? MainFeedViewController self.masterFeedViewController.coordinator = self self.masterFeedViewController?.navigationController?.delegate = self