diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 063a67af6..290cbee3f 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -49,6 +49,7 @@ 5183CCE9226F68D90010922C /* AccountRefreshTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE7226F68D90010922C /* AccountRefreshTimer.swift */; }; 5183CCED22711DCE0010922C /* Settings.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5183CCEC22711DCE0010922C /* Settings.storyboard */; }; 5183CCEF227125970010922C /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCEE227125970010922C /* SettingsViewController.swift */; }; + 5194B5EE22B6965300144881 /* SettingsImportSubscriptionsDocumentPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5194B5ED22B6965300144881 /* SettingsImportSubscriptionsDocumentPickerView.swift */; }; 519B8D332143397200FA689C /* SharingServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519B8D322143397200FA689C /* SharingServiceDelegate.swift */; }; 51C451A9226377C200C03939 /* ArticlesDatabase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; }; 51C451AA226377C200C03939 /* ArticlesDatabase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8407167F2262A61100344432 /* ArticlesDatabase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -694,6 +695,7 @@ 5183CCE7226F68D90010922C /* AccountRefreshTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountRefreshTimer.swift; sourceTree = ""; }; 5183CCEC22711DCE0010922C /* Settings.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Settings.storyboard; sourceTree = ""; }; 5183CCEE227125970010922C /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; + 5194B5ED22B6965300144881 /* SettingsImportSubscriptionsDocumentPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsImportSubscriptionsDocumentPickerView.swift; sourceTree = ""; }; 519B8D322143397200FA689C /* SharingServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharingServiceDelegate.swift; sourceTree = ""; }; 51C4524E226506F400C03939 /* UIStoryboard-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIStoryboard-Extensions.swift"; sourceTree = ""; }; 51C45250226506F400C03939 /* String-Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String-Extensions.swift"; sourceTree = ""; }; @@ -1047,6 +1049,7 @@ 51F772EC22B2789B0087D9D1 /* SettingsDetailAccountView.swift */, 510D707F22B02A5F004E8F65 /* SettingsFeedbinAccountView.swift */, 510D707D22B02A4B004E8F65 /* SettingsLocalAccountView.swift */, + 5194B5ED22B6965300144881 /* SettingsImportSubscriptionsDocumentPickerView.swift */, 51F35D0822AFD4760003CE1B /* SettingsView.swift */, 51F35CFD22AFD0350003CE1B /* UIKit */, ); @@ -2381,6 +2384,7 @@ 5183CCE3226F314C0010922C /* ProgressTableViewController.swift in Sources */, 512E09012268907400BDCFDD /* MasterFeedTableViewSectionHeader.swift in Sources */, 51C45268226508F600C03939 /* MasterFeedUnreadCountView.swift in Sources */, + 5194B5EE22B6965300144881 /* SettingsImportSubscriptionsDocumentPickerView.swift in Sources */, 5183CCD0226E1E880010922C /* NonIntrinsicLabel.swift in Sources */, 51C4529F22650A1900C03939 /* AuthorAvatarDownloader.swift in Sources */, 51E595AD228E1C2100FCC42B /* AddAccountViewController.swift in Sources */, diff --git a/iOS/Settings/SettingsImportSubscriptionsDocumentPickerView.swift b/iOS/Settings/SettingsImportSubscriptionsDocumentPickerView.swift new file mode 100644 index 000000000..3c8cbbeb9 --- /dev/null +++ b/iOS/Settings/SettingsImportSubscriptionsDocumentPickerView.swift @@ -0,0 +1,52 @@ +// +// SettingsImportSubscriptionsDocumentPickerView.swift +// NetNewsWire-iOS +// +// Created by Maurice Parker on 6/16/19. +// Copyright © 2019 Ranchero Software. All rights reserved. +// + +import SwiftUI +import Account + +struct SettingsImportSubscriptionsDocumentPickerView : UIViewControllerRepresentable { + var account: Account? + + func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIDocumentPickerViewController { + let docPicker = UIDocumentPickerViewController(documentTypes: ["public.xml", "org.opml.opml"], in: .import) + docPicker.delegate = context.coordinator + docPicker.modalPresentationStyle = .formSheet + return docPicker + } + + func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: UIViewControllerRepresentableContext) { + // + } + + func makeCoordinator() -> Coordinator { + return Coordinator(self) + } + + class Coordinator : NSObject, UIDocumentPickerDelegate { + var parent: SettingsImportSubscriptionsDocumentPickerView + + init(_ view: SettingsImportSubscriptionsDocumentPickerView) { + self.parent = view + } + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { + for url in urls { + parent.account?.importOPML(url) { result in} + } + } + + } +} + +#if DEBUG +struct SettingsImportSubscriptionsDocumentPickerView_Previews : PreviewProvider { + static var previews: some View { + SettingsImportSubscriptionsDocumentPickerView() + } +} +#endif diff --git a/iOS/Settings/SettingsView.swift b/iOS/Settings/SettingsView.swift index 26281f8a9..761f4a268 100644 --- a/iOS/Settings/SettingsView.swift +++ b/iOS/Settings/SettingsView.swift @@ -14,7 +14,8 @@ import Account struct SettingsView : View { @ObjectBinding var viewModel: ViewModel - @State var showImportSubscriptions = false + @State var importSubscriptionsAccounts: ActionSheet? = nil + @State var importSubscriptionsDocumentPicker: Modal? = nil @State var showExportSubscriptions = false var body: some View { @@ -67,17 +68,18 @@ struct SettingsView : View { } } Button(action: { - self.showImportSubscriptions = true + self.importSubscriptionsAccounts = self.createImportSubscriptionsAccounts }) { Text("Import Subscriptions...") } - .presentation(showImportSubscriptions ? importSubscriptionsActionSheet : nil) + .presentation(importSubscriptionsAccounts) + .presentation(importSubscriptionsDocumentPicker) Button(action: { self.showExportSubscriptions = true }) { Text("Export Subscriptions...") } - .presentation(showExportSubscriptions ? exportSubscriptionsActionSheet : nil) + .presentation(showExportSubscriptions ? exportSubscriptionsAccounts : nil) } .foregroundColor(.primary) @@ -88,20 +90,20 @@ struct SettingsView : View { } } - var importSubscriptionsActionSheet: ActionSheet { + var createImportSubscriptionsAccounts: ActionSheet { var buttons = [ActionSheet.Button]() for account in viewModel.accounts { let button = ActionSheet.Button.default(Text(verbatim: account.nameForDisplay)) { - self.showImportSubscriptions = false - // Call doc picker here... + self.importSubscriptionsAccounts = nil + self.importSubscriptionsDocumentPicker = Modal(SettingsImportSubscriptionsDocumentPickerView(account: account)) } buttons.append(button) } - buttons.append(.cancel { self.showImportSubscriptions = false }) + buttons.append(.cancel { self.importSubscriptionsAccounts = nil }) return ActionSheet(title: Text("Import Subscriptions..."), message: Text("Select the account to import your OPML file into."), buttons: buttons) } - var exportSubscriptionsActionSheet: ActionSheet { + var exportSubscriptionsAccounts: ActionSheet { var buttons = [ActionSheet.Button]() for account in viewModel.accounts { let button = ActionSheet.Button.default(Text(verbatim: account.nameForDisplay)) { @@ -110,7 +112,7 @@ struct SettingsView : View { } buttons.append(button) } - buttons.append(.cancel { self.showImportSubscriptions = false }) + buttons.append(.cancel { self.showExportSubscriptions = false }) return ActionSheet(title: Text("Export Subscriptions..."), message: Text("Select the account to export out of."), buttons: buttons) }