From 5a75e5440f7b3391096e11284652bf7f3aceac3d Mon Sep 17 00:00:00 2001 From: Max Goedjen Date: Sun, 15 Mar 2020 00:32:56 -0700 Subject: [PATCH] Protocolized --- Secretive/AppDelegate.swift | 2 +- Secretive/ContentView.swift | 45 +++++++++---------- .../Preview Content/PreviewUpdater.swift | 25 ++++++++++- Secretive/Updater.swift | 11 +++-- 4 files changed, 53 insertions(+), 30 deletions(-) diff --git a/Secretive/AppDelegate.swift b/Secretive/AppDelegate.swift index 62c863d..2997b80 100644 --- a/Secretive/AppDelegate.swift +++ b/Secretive/AppDelegate.swift @@ -13,7 +13,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { list.add(store: SmartCard.Store()) return list }() - let updater = Updater() + let updater = PreviewUpdater() func applicationDidFinishLaunching(_ aNotification: Notification) { diff --git a/Secretive/ContentView.swift b/Secretive/ContentView.swift index 74c6e00..c6e7489 100644 --- a/Secretive/ContentView.swift +++ b/Secretive/ContentView.swift @@ -1,10 +1,10 @@ import SwiftUI import SecretKit -struct ContentView: View { +struct ContentView: View { @ObservedObject var storeList: SecretStoreList - @ObservedObject var updater: Updater + @ObservedObject var updater: UpdaterType @State fileprivate var active: AnySecret.ID? @State fileprivate var showingDeletion = false @@ -92,26 +92,25 @@ struct ContentView: View { } -extension ContentView { - - enum Constants { - static let emptyStoreModifiableTag: AnyHashable = "emptyStoreModifiableTag" - static let emptyStoreTag: AnyHashable = "emptyStoreModifiableTag" - } - +fileprivate enum Constants { + static let emptyStoreModifiableTag: AnyHashable = "emptyStoreModifiableTag" + static let emptyStoreTag: AnyHashable = "emptyStoreModifiableTag" } -//#if DEBUG -// -//struct ContentView_Previews: PreviewProvider { -// static var previews: some View { -// Group { -// ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater()) -// ContentView(storeList: Preview.storeList(stores: [Preview.Store()], modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater()) -// ContentView(storeList: Preview.storeList(stores: [Preview.Store()]), updater: PreviewUpdater()) -// ContentView(storeList: Preview.storeList(modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater()) -// } -// } -//} -// -//#endif + +#if DEBUG + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + Group { + ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater()) + ContentView(storeList: Preview.storeList(stores: [Preview.Store()], modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater()) + ContentView(storeList: Preview.storeList(stores: [Preview.Store()]), updater: PreviewUpdater()) + ContentView(storeList: Preview.storeList(modifiableStores: [Preview.StoreModifiable()]), updater: PreviewUpdater()) + ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .advisory)) + ContentView(storeList: Preview.storeList(stores: [Preview.Store(numberOfRandomSecrets: 0)], modifiableStores: [Preview.StoreModifiable(numberOfRandomSecrets: 0)]), updater: PreviewUpdater(update: .critical)) + } + } +} + +#endif diff --git a/Secretive/Preview Content/PreviewUpdater.swift b/Secretive/Preview Content/PreviewUpdater.swift index 8916bc3..8cbeda8 100644 --- a/Secretive/Preview Content/PreviewUpdater.swift +++ b/Secretive/Preview Content/PreviewUpdater.swift @@ -1,6 +1,27 @@ import Foundation import Combine -class PreviewUpdater: ObservableObject, UpdaterProtocol { - var update: Release? = nil +class PreviewUpdater: UpdaterProtocol { + + let update: Release? + + init(update: Update = .none) { + switch update { + case .none: + self.update = nil + case .advisory: + self.update = Release(name: "10.10.10", html_url: URL(string: "https://example.com")!, body: "Some regular update") + case .critical: + self.update = Release(name: "10.10.10", html_url: URL(string: "https://example.com")!, body: "Critical Security Update") + } + } + +} + +extension PreviewUpdater { + + enum Update { + case none, advisory, critical + } + } diff --git a/Secretive/Updater.swift b/Secretive/Updater.swift index 3efa7f3..25e361b 100644 --- a/Secretive/Updater.swift +++ b/Secretive/Updater.swift @@ -2,7 +2,9 @@ import Foundation import Combine protocol UpdaterProtocol: ObservableObject { + var update: Release? { get } + } class Updater: ObservableObject, UpdaterProtocol { @@ -10,9 +12,11 @@ class Updater: ObservableObject, UpdaterProtocol { @Published var update: Release? init() { - DispatchQueue.global().asyncAfter(deadline: .now() + 3) { + checkForUpdates() + let timer = Timer.scheduledTimer(withTimeInterval: 60*60*24, repeats: true) { _ in self.checkForUpdates() } + timer.tolerance = 60*60 } func checkForUpdates() { @@ -49,16 +53,15 @@ class Updater: ObservableObject, UpdaterProtocol { extension Updater { enum Constants { - static let updateURL = URL(string: "https://api.github.com/repos/rails/rails/releases/latest")! + static let updateURL = URL(string: "https://api.github.com/repos/maxgoedjen/secretive/releases/latest")! } } - struct Release: Codable { let name: String let html_url: URL - fileprivate let body: String + let body: String }