Skip to content

Commit b69b184

Browse files
authored
Merge pull request #99 from 42Box/cluster_develop
Merge: 2.5 Week Release
2 parents 5d0bf6b + 6d4c188 commit b69b184

51 files changed

Lines changed: 1359 additions & 260 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Box42.xcodeproj/project.pbxproj

Lines changed: 195 additions & 30 deletions
Large diffs are not rendered by default.

Box42/ButtonGroup/ButtonGroupViewController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Cocoa
99

1010
class ButtonGroupViewController: NSViewController {
1111
override func loadView() {
12-
// let ButtonViewGroup = BoxButtonViewGroup()
12+
// let ButtonViewGroup = BoxButtonViewGroup(clickAction: clickAction)
1313
let ButtonViewGroup = NSView()
1414
ButtonViewGroup.wantsLayer = true
1515
ButtonViewGroup.layer?.backgroundColor = NSColor.black.cgColor
@@ -20,6 +20,10 @@ class ButtonGroupViewController: NSViewController {
2020
super.viewDidLoad()
2121
}
2222

23+
func clickAction(_ sender: NSButton?) {
24+
print("click Action")
25+
}
26+
2327
func preference() {
2428
print("preference")
2529
}

Box42/Icon/IconController.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// IconController.swift
3+
// Box42
4+
//
5+
// Created by Chanhee Kim on 8/30/23.
6+
//
7+
8+
import Foundation
9+
10+
class IconController {
11+
let icon = MenubarViewController()
12+
13+
init() {
14+
NotificationCenter.default.addObserver(self,
15+
selector: #selector(handleUserProfileIconUpdate),
16+
name: .didUpdateUserProfile,
17+
object: nil)
18+
}
19+
20+
@objc private func handleUserProfileIconUpdate() {
21+
DispatchQueue.main.async {
22+
self.icon.buttonImageChange(UserManager.shared.getUserProfile()?.icon ?? "fox")
23+
}
24+
print("Icon Changed")
25+
}
26+
}

Box42/Main/BoxBaseContainerViewController.swift

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Cocoa
99
import SnapKit
1010

1111
class BoxBaseContainerViewController: NSViewController {
12+
// MARK: - LeftContainer
1213
var splitView: BoxBaseSplitView = BoxBaseSplitView()
1314
var contentGroup: BoxContentsViewGroup = BoxContentsViewGroup()
1415
var toolbarGroupVC: ToolbarViewController = ToolbarViewController()
@@ -17,6 +18,11 @@ class BoxBaseContainerViewController: NSViewController {
1718
let windowViewGroupVC: WindowButtonViewController = WindowButtonViewController()
1819
var leftContainer: MovableContainerView = MovableContainerView()
1920
var buttonGroupVC: ButtonGroupViewController = ButtonGroupViewController()
21+
22+
// MARK: - QuickSlot
23+
var preferenceVC: PreferencesViewController = PreferencesViewController()
24+
var scriptsVC: ScriptsViewController = ScriptsViewController()
25+
2026
weak var menubarVCDelegate: MenubarViewControllerDelegate? // extension
2127

2228
override func loadView() {
@@ -32,8 +38,11 @@ class BoxBaseContainerViewController: NSViewController {
3238

3339
override func viewDidLoad() {
3440
self.view.wantsLayer = true
41+
3542
// self.view.layer?.backgroundColor = NSColor(hex: "#FF9548").cgColor
3643
self.view.layer?.backgroundColor = NSColor(hex: "#E7E7E7").cgColor
44+
45+
NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTapped), name: .collectionButtonTapped, object: nil)
3746
}
3847

3948
func BoxButtonViewGroupInit() -> BoxButtonViewGroup {
@@ -171,3 +180,29 @@ extension BoxBaseContainerViewController: BoxFunctionViewControllerDelegate {
171180
clickBtn(sender: "box")
172181
}
173182
}
183+
184+
extension BoxBaseContainerViewController {
185+
@objc func handleButtonTapped(notification: NSNotification) {
186+
if let button = notification.object as? NSButton {
187+
if button.title == QuickSlotUI.title.preferences {
188+
print("Button with title \(button.title) was tapped in BaseVC")
189+
contentGroup.showPreferences()
190+
}
191+
192+
if button.title == QuickSlotUI.title.scripts {
193+
print("Button with title \(button.title) was tapped in BaseVC")
194+
contentGroup.showScripts()
195+
}
196+
197+
if button.title == QuickSlotUI.title.user {
198+
print("Button with title \(button.title) was tapped in BaseVC")
199+
contentGroup.removeAllSubviews()
200+
print(WebViewManager.shared.hostingWebView!)
201+
contentGroup.addSubview(WebViewManager.shared.hostingWebView!)
202+
WebViewManager.shared.hostingWebView!.snp.makeConstraints { make in
203+
make.top.bottom.left.right.equalToSuperview()
204+
}
205+
}
206+
}
207+
}
208+
}

Box42/Menubar/MenubarModel.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@ class StatusBar {
1616
var isRunning: Bool
1717
var interval: Double
1818
var alertCount: Int
19-
19+
var version: Int
20+
2021
init() {
2122
self.statusItem = NSStatusItem()
2223
self.frames = [NSImage]()
2324
self.cnt = 0
2425
self.isRunning = false
2526
self.interval = 1.0
2627
self.alertCount = 0
28+
self.version = 0
2729
}
2830
}

Box42/Menubar/MenubarViewController.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class MenubarViewController: NSViewController {
1313
var statusBarVM = StatusBarViewModel()
1414
lazy var eventMonitor: EventMonitor = self.setupEventMonitor()
1515
var boxWindowController: BoxWindowController?
16-
16+
1717
func menubarViewControllerInit() {
1818
self.buttonInit()
1919
}
@@ -47,7 +47,9 @@ class MenubarViewController: NSViewController {
4747
}
4848

4949
func buttonImageChange(_ img: String) {
50+
self.menubarStopRunning()
5051
statusBarVM.changeStatusBarIcon(img)
52+
self.menubarStartRunning()
5153
}
5254

5355
func buttonActionInit() {
@@ -122,7 +124,7 @@ extension MenubarViewController: MenubarViewControllerDelegate {
122124
}
123125
window.level = .floating
124126
}
125-
boxWindowController?.showWindow(sender)
127+
boxWindowController?.showWindow(sender)
126128
}
127129
}
128130
}

Box42/Menubar/MenubarViewModel.swift

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class StatusBarViewModel {
1111
let cpu: CPU
1212
let statusBar: StatusBar
1313
private var currentAnimationWorkItem: DispatchWorkItem?
14+
private let scheduleQueue = DispatchQueue(label: "animation.scheduleQueue")
1415

1516
init () {
1617
self.statusBar = StatusBar.shared
@@ -23,7 +24,13 @@ class StatusBarViewModel {
2324

2425
func changeStatusBarIcon(_ imgName: String) {
2526
statusBar.frames.removeAll()
26-
27+
currentAnimationWorkItem?.cancel()
28+
if statusBar.version == Int.max {
29+
statusBar.version = 0
30+
} else {
31+
statusBar.version += 1
32+
}
33+
2734
switch imgName {
2835
case "cat": for i in (0...4) {statusBar.frames.append(NSImage(imageLiteralResourceName: "cat_page\(i)"))}
2936
case "gon": for i in (1...5) {statusBar.frames.append(NSImage(imageLiteralResourceName: "gon_\(i)"))}
@@ -52,25 +59,34 @@ class StatusBarViewModel {
5259
self.animate()
5360
}
5461
}
55-
56-
func scheduleAnimation() {
57-
currentAnimationWorkItem?.cancel()
5862

59-
let workItem = DispatchWorkItem { [weak self] in
60-
self?.statusBar.statusItem.button?.image = self?.statusBar.frames[self?.statusBar.cnt ?? 0]
61-
self?.statusBar.cnt = ((self?.statusBar.cnt)! + 1) % (self?.statusBar.frames.count ?? 1)
63+
func scheduleAnimation() {
64+
scheduleQueue.sync {
65+
currentAnimationWorkItem?.cancel()
6266

63-
if self?.statusBar.isRunning ?? false {
64-
self?.scheduleAnimation()
67+
let currentVersion = statusBar.version
68+
69+
let workItem = DispatchWorkItem { [weak self] in
70+
guard self?.statusBar.version == currentVersion else { return }
71+
72+
self?.statusBar.statusItem.button?.image = self?.statusBar.frames[self?.statusBar.cnt ?? 0]
73+
74+
if let cnt = self?.statusBar.cnt, let framesCount = self?.statusBar.frames.count {
75+
self?.statusBar.cnt = (cnt + 1) % framesCount
76+
}
77+
78+
if self?.statusBar.isRunning ?? false {
79+
self?.scheduleAnimation()
80+
}
6581
}
82+
83+
currentAnimationWorkItem = workItem
84+
DispatchQueue.main.asyncAfter(deadline: .now() + statusBar.interval, execute: workItem)
6685
}
67-
68-
currentAnimationWorkItem = workItem
69-
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + statusBar.interval, execute: workItem)
7086
}
71-
87+
7288
func stopRunning() {
73-
statusBar.isRunning = cpu.StopCPU()
89+
statusBar.isRunning = cpu.stopCPU()
7490
currentAnimationWorkItem?.cancel()
7591
statusBar.cnt = 0
7692
}

Box42/Preferences/Icon.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

Box42/Preferences/PreferencesViewController.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,6 @@ class PreferencesViewController: NSViewController {
4848

4949
var stackBox: [NSView] = []
5050

51-
let icons = iconModel().icon
52-
icons.forEach { (icon) in
53-
stackBox.append(NSButton(title: "Change \(icon) Icon", target: self, action: #selector(changeIconButtonPressed)))
54-
}
5551

5652
let scripts = Scripts().info
5753
scripts.forEach { (script) in

Box42/QuickSlot/Controller/QuickSlotScriptsLogicController.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ class ScriptsLogicController {
1212
static let shared = ScriptsLogicController()
1313

1414
private init() {
15-
NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTapped), name: NSNotification.Name(NotifConst.object.collectionButtonTapped), object: nil)
15+
NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTapped), name: .collectionButtonTapped, object: nil)
1616
}
1717

1818
@objc func handleButtonTapped(notification: NSNotification) {
1919
if let button = notification.object as? NSButton {
20-
let buttonTitle = button.title // 메인 스레드에서 타이틀을 캡쳐
20+
let buttonTitle = button.title
2121
print("Button with title \(buttonTitle) was tapped")
2222

2323
DispatchQueue.global(qos: .background).async { [weak self] in
24-
if buttonTitle == "clean" {
24+
if buttonTitle == QuickSlotUI.title.clean {
2525
self?.executeCleanScript()
2626
}
2727
}
@@ -53,5 +53,4 @@ class ScriptsLogicController {
5353
}
5454
}
5555
}
56-
5756
}

0 commit comments

Comments
 (0)