Skip to content

Commit

Permalink
introduce global context and migrate updater controller into
Browse files Browse the repository at this point in the history
  • Loading branch information
CanglongCl committed Jan 25, 2024
1 parent a7bb785 commit 412c7df
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 54 deletions.
4 changes: 4 additions & 0 deletions Easydict.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@
EA9943EE2B5353AB00EE7B97 /* WindowTypeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9943ED2B5353AB00EE7B97 /* WindowTypeExtensions.swift */; };
EA9943F02B5354C400EE7B97 /* ShowWindowPositionExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9943EF2B5354C400EE7B97 /* ShowWindowPositionExtensions.swift */; };
EA9943F22B5358BF00EE7B97 /* LanguageExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9943F12B5358BF00EE7B97 /* LanguageExtensions.swift */; };
EAE3D3502B62E9DE001EE3E3 /* GlobalContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE3D34F2B62E9DE001EE3E3 /* GlobalContext.swift */; };
EAED41EC2B54AA920005FE0A /* ServiceConfigurationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAED41EB2B54AA920005FE0A /* ServiceConfigurationSection.swift */; };
EAED41EF2B54B1430005FE0A /* ConfigurableService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAED41EE2B54B1430005FE0A /* ConfigurableService.swift */; };
EAED41F22B54B39D0005FE0A /* OpenAIService+ConfigurableService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAED41F12B54B39D0005FE0A /* OpenAIService+ConfigurableService.swift */; };
Expand Down Expand Up @@ -772,6 +773,7 @@
EA9943ED2B5353AB00EE7B97 /* WindowTypeExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowTypeExtensions.swift; sourceTree = "<group>"; };
EA9943EF2B5354C400EE7B97 /* ShowWindowPositionExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowWindowPositionExtensions.swift; sourceTree = "<group>"; };
EA9943F12B5358BF00EE7B97 /* LanguageExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageExtensions.swift; sourceTree = "<group>"; };
EAE3D34F2B62E9DE001EE3E3 /* GlobalContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalContext.swift; sourceTree = "<group>"; };
EAED41EB2B54AA920005FE0A /* ServiceConfigurationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceConfigurationSection.swift; sourceTree = "<group>"; };
EAED41EE2B54B1430005FE0A /* ConfigurableService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigurableService.swift; sourceTree = "<group>"; };
EAED41F12B54B39D0005FE0A /* OpenAIService+ConfigurableService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OpenAIService+ConfigurableService.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -2068,6 +2070,7 @@
27FE95262B3DC55F000AD654 /* EasydictApp.swift */,
27FE98042B3DCB09000AD654 /* NewAppManager.swift */,
27FE98062B3DD525000AD654 /* View */,
EAE3D34F2B62E9DE001EE3E3 /* GlobalContext.swift */,
);
path = NewApp;
sourceTree = "<group>";
Expand Down Expand Up @@ -2795,6 +2798,7 @@
0320C5872B29F35700861B3D /* QueryServiceRecord.swift in Sources */,
03FC699A2B39D13A0035D2DA /* EZOpenAIChatResponse.m in Sources */,
03B022FA29231FA6001C7E63 /* EZServiceTypes.m in Sources */,
EAE3D3502B62E9DE001EE3E3 /* GlobalContext.swift in Sources */,
EA9943F02B5354C400EE7B97 /* ShowWindowPositionExtensions.swift in Sources */,
03B0233129231FA6001C7E63 /* MMCrash.m in Sources */,
03B0232629231FA6001C7E63 /* NSAttributedString+MM.m in Sources */,
Expand Down
2 changes: 0 additions & 2 deletions Easydict/App/AppDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,4 @@

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (weak) IBOutlet SPUStandardUpdaterController *updaterController;

@end
10 changes: 2 additions & 8 deletions Easydict/Feature/Configuration/Configuration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,6 @@ let kHideMenuBarIconKey = "EZConfiguration_kHideMenuBarIconKey"
}
}

var appDelegate = NSApp.delegate as? AppDelegate

var updater: SPUUpdater? {
appDelegate?.updaterController.updater
}

@DefaultsWrapper(.firstLanguage)
var firstLanguage: Language

Expand Down Expand Up @@ -65,10 +59,10 @@ let kHideMenuBarIconKey = "EZConfiguration_kHideMenuBarIconKey"

var automaticallyChecksForUpdates: Bool {
get {
updater?.automaticallyChecksForUpdates ?? false
GlobalContext.updaterController.updater.automaticallyDownloadsUpdates
}
set {
updater?.automaticallyChecksForUpdates = newValue
GlobalContext.updaterController.updater.automaticallyDownloadsUpdates = newValue
logSettings(["automatically_checks_for_updates": newValue])
}
}
Expand Down
2 changes: 1 addition & 1 deletion Easydict/Feature/Configuration/EZConfiguration.m
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ - (BOOL)automaticallyChecksForUpdates {
}

- (SPUUpdater *)updater {
return self.appDelegate.updaterController.updater;
return GlobalContext.getUpdaterController.updater;
}

#pragma mark - setter
Expand Down
37 changes: 5 additions & 32 deletions Easydict/NewApp/EasydictApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import Sparkle
import SwiftUI
import Defaults

@main
enum EasydictCmpatibilityEntry {
Expand All @@ -21,28 +22,12 @@ enum EasydictCmpatibilityEntry {
}
}

class SPUUpdaterHelper: NSObject, SPUUpdaterDelegate {
func feedURLString(for _: SPUUpdater) -> String? {
var feedURLString = "https://raw.githubusercontent.com/tisfeng/Easydict/main/appcast.xml"
#if DEBUG
feedURLString = "http://localhost:8000/appcast.xml"
#endif
return feedURLString
}
}

class SPUUserDriverHelper: NSObject, SPUStandardUserDriverDelegate {
var supportsGentleScheduledUpdateReminders: Bool {
true
}
}

struct EasydictApp: App {
@NSApplicationDelegateAdaptor
var delegate: AppDelegate
private var delegate: AppDelegate

@AppStorage(kHideMenuBarIconKey)
private var hideMenuBar = false
@Default(.hideMenuBarIcon)
private var hideMenuBar

private var menuBarImage: String {
#if DEBUG
Expand All @@ -52,22 +37,10 @@ struct EasydictApp: App {
#endif
}

let userDriverHelper = SPUUserDriverHelper()
let upadterHelper = SPUUpdaterHelper()

private let updaterController: SPUStandardUpdaterController

init() {
// 参考 https://sparkle-project.org/documentation/programmatic-setup/
// If you want to start the updater manually, pass false to startingUpdater and call .startUpdater() later
// This is where you can also pass an updater delegate if you need one
updaterController = SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: upadterHelper, userDriverDelegate: userDriverHelper)
}

var body: some Scene {
if #available(macOS 13, *) {
MenuBarExtra(isInserted: $hideMenuBar.toggledValue) {
MenuItemView(updater: updaterController.updater)
MenuItemView()
} label: {
Label {
Text("Easydict")
Expand Down
44 changes: 44 additions & 0 deletions Easydict/NewApp/GlobalContext.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
//
// GlobalContext.swift
// Easydict
//
// Created by 戴藏龙 on 2024/1/25.
// Copyright © 2024 izual. All rights reserved.
//

import Foundation
import Sparkle

@objc class GlobalContext: NSObject {
static let updaterController: SPUStandardUpdaterController = {
class SPUUpdaterHelper: NSObject, SPUUpdaterDelegate {
func feedURLString(for _: SPUUpdater) -> String? {
var feedURLString = "https://raw.githubusercontent.com/tisfeng/Easydict/main/appcast.xml"
#if DEBUG
feedURLString = "http://localhost:8000/appcast.xml"
#endif
return feedURLString
}
}

class SPUUserDriverHelper: NSObject, SPUStandardUserDriverDelegate {
var supportsGentleScheduledUpdateReminders: Bool {
true
}
}
let userDriverHelper = SPUUserDriverHelper()
let upadterHelper = SPUUpdaterHelper()
// 参考 https://sparkle-project.org/documentation/programmatic-setup/
// If you want to start the updater manually, pass false to startingUpdater and call .startUpdater() later
// This is where you can also pass an updater delegate if you need one
return SPUStandardUpdaterController(
startingUpdater: true,
updaterDelegate: upadterHelper,
userDriverDelegate: userDriverHelper
)
}()

@objc class func getUpdaterController() -> SPUStandardUpdaterController {
updaterController
}
}
20 changes: 9 additions & 11 deletions Easydict/NewApp/View/MenuItemView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,19 @@ import ZipArchive
@available(macOS 13, *)
final class MenuItemStore: ObservableObject {
@Published var canCheckForUpdates = false
var updater: SPUUpdater
init(updater: SPUUpdater) {
self.updater = updater
self.updater.publisher(for: \.canCheckForUpdates)

init() {
GlobalContext
.updaterController
.updater
.publisher(for: \.canCheckForUpdates)
.assign(to: &$canCheckForUpdates)
}
}

@available(macOS 13, *)
struct MenuItemView: View {
@ObservedObject var store: MenuItemStore

init(updater: SPUUpdater) {
store = MenuItemStore(updater: updater)
}
@ObservedObject private var store: MenuItemStore = .init()

var body: some View {
// ️.menuBarExtraStyle为 .menu 时某些控件可能会失效 ,只能显示内容(按照菜单项高度、图像以 template 方式渲染)无法交互 ,比如 Stepper、Slider 等,像基本的 Button、Text、Divider、Image 等还是能正常显示的。
Expand Down Expand Up @@ -173,7 +171,7 @@ struct MenuItemView: View {
private var checkUpdateItem: some View {
Button("check_updates") {
NSLog("检查更新")
store.updater.checkForUpdates()
GlobalContext.updaterController.updater.checkForUpdates()
}.disabled(!store.canCheckForUpdates)
}

Expand Down Expand Up @@ -225,5 +223,5 @@ struct MenuItemView: View {

@available(macOS 13, *)
#Preview {
MenuItemView(updater: SPUStandardUpdaterController(startingUpdater: true, updaterDelegate: nil, userDriverDelegate: nil).updater)
MenuItemView()
}

0 comments on commit 412c7df

Please sign in to comment.