Skip to content

Commit

Permalink
Merge pull request #12 from nhiroyasu/develop
Browse files Browse the repository at this point in the history
v1.6.0
  • Loading branch information
nhiroyasu authored Jul 18, 2022
2 parents fbfd74b + f457a40 commit 1c7440a
Show file tree
Hide file tree
Showing 44 changed files with 1,782 additions and 346 deletions.
2 changes: 1 addition & 1 deletion scripts/mock-generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

set -ue

binary/mockolo -s ./slideover-for-macos -d ./slideover-for-macosTests/Mocks/mock.generated.swift --testable-imports Fixture_in_Picture --enable-args-history
mockolo -s ./slideover-for-macos -d ./slideover-for-macosTests/Mocks/mock.generated.swift --testable-imports Fixture_in_Picture --enable-args-history
145 changes: 109 additions & 36 deletions slideover-for-macos.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
{
"pins" : [
{
"identity" : "injectable",
"kind" : "remoteSourceControl",
"location" : "git@github.com:nhiroyasu/Injectable.git",
"state" : {
"revision" : "580e4fb209fb65383810c277aeab0db4238babb9",
"version" : "1.0.0"
}
},
{
"identity" : "magnet",
"kind" : "remoteSourceControl",
Expand Down
32 changes: 32 additions & 0 deletions slideover-for-macos/AppContainer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Foundation
import Swinject
import Injectable

class AppContainer {

static func build() -> Container {
let container = Container()

container.register(ScreenManager.self) { _ in ScreenManagerImpl() }
container.register(ApplicationService.self) { _ in ApplicationServiceImpl() }
container.register(WindowManager.self) { _ in WindowManagerImpl() }
container.register(UIQueue.self) { _ in DispatchQueue.main }
container.register(GlobalShortcutService.self) { _ in GlobalShortcutServiceImpl() }
container.register(NotificationManager.self) { _ in NotificationManagerImpl() }
container.register(AlertService.self) { _ in AlertServiceImpl() }
container.register(URLValidationService.self) { _ in URLValidationServiceImpl() }
container.register(URLEncodeService.self) { _ in URLEncodeServiceImpl() }
container.register(WebViewService.self) { _ in WebViewServiceImpl() }
container.register(UserSettingService.self) { _ in UserSettingServiceImpl(userDefaults: UserDefaults.standard) }.inObjectScope(.container)
container.register(SlideOverComputation.self) { injector in SlideOverComputationImpl(injector: injector) }
container.register(SlideOverService.self) { injector in
SlideOverServiceImpl(injector: injector)
}

return container
}
}

extension Injector {
static let shared = Injector(container: AppContainer.build())
}
24 changes: 15 additions & 9 deletions slideover-for-macos/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
import Cocoa
import Magnet
import Injectable

@main
class AppDelegate: NSObject, NSApplicationDelegate {

private var mainWindowController: SlideOverWindowController?
private var notificationManager: NotificationManager? {
Injector.shared.buildSafe(NotificationManager.self)
}
private var userSetting: UserSettingService? {
Injector.shared.buildSafe(UserSettingService.self)
}
private var slideOverCoordinator: SlideOverCoordinator!

func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let storyboard = NSStoryboard(name: "Main", bundle: nil)
mainWindowController = storyboard.instantiateController(identifier: "slideOverWindowController") { coder in
SlideOverWindowController(coder: coder, injector: Injector.shared)
}
if let mainWindowController = mainWindowController {
Injector.shared.container.register(SlideOverWindowControllable.self, impl: mainWindowController).inObjectScope(.container)
mainWindowController.showWindow(self)
}
let initState = SlideOverState()
let container = SlideOverContainerBuilder.build(parent: Injector.shared.container, state: initState)
slideOverCoordinator = .init(
injector: Injector(container: container),
state: initState
)
container.register(SlideOverTransition.self) { _ in self.slideOverCoordinator }
let windowController = slideOverCoordinator.create()
windowController.showWindow(self)
}

func applicationDidUnhide(_ notification: Notification) {
notificationManager?.push(name: .displaySlideOver, param: nil)
}

func applicationWillTerminate(_ aNotification: Notification) {
Expand Down
10 changes: 10 additions & 0 deletions slideover-for-macos/Coordinator/Coordinator.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import AppKit

public protocol Coordinator {
func create() -> NSWindowController
}

public protocol NavigationCoordinator: Coordinator {
func start()
func dismiss()
}
32 changes: 32 additions & 0 deletions slideover-for-macos/Coordinator/SettingCoordinator.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import AppKit
import Swinject
import Injectable

class SettingContainerBuilder {
static func build(parent: Container?) -> Container {
let container = Container(parent: parent)
return container
}
}

class SettingCoordinator: Coordinator {
private var windowController: SettingWindowController?
private let injector: Injectable

init(injector: Injectable) {
self.injector = injector
}

func create() -> NSWindowController {
if let windowController = windowController {
return windowController
} else {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
windowController = storyboard.instantiateController(identifier: "settingWindowController") { coder in
SettingWindowController(coder: coder)
}
return windowController!
}
}
}

57 changes: 57 additions & 0 deletions slideover-for-macos/Coordinator/SlideOverCoordinator.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import AppKit
import Swinject
import Injectable

class SlideOverContainerBuilder {
static func build(parent: Container?, state: SlideOverState) -> Container {
let container = Container(parent: parent)

container.register(SlideOverAction.self) { resolver in
SlideOverActionImpl(injector: resolver, state: state)
}.inObjectScope(.container)
container.register(SlideOverUseCase.self) { resolver in
SlideOverInteractor(injector: resolver)
}.inObjectScope(.container)
container.register(SlideOverPresenter.self) { resolver in
SlideOverPresenterImpl(injector: resolver, state: state)
}.inObjectScope(.container)
container.register(SlideOverNotificationObserver.self) { resolver in
SlideOverNotificationObserver(injector: resolver)
}.inObjectScope(.container)

return container
}
}

class SlideOverCoordinator: Coordinator {
private var windowController: SlideOverWindowController?
private lazy var settingCoordinator: SettingCoordinator = .init(injector: injector)
private let injector: Injectable
private let state: SlideOverState
private let notificationObserver: SlideOverNotificationObserver

init(injector: Injectable, state: SlideOverState) {
self.injector = injector
self.state = state
self.notificationObserver = injector.build()
}

func create() -> NSWindowController {
if let windowController = windowController {
return windowController
} else {
let storyboard = NSStoryboard(name: "Main", bundle: nil)
windowController = storyboard.instantiateController(identifier: "slideOverWindowController") { coder in
SlideOverWindowController(coder: coder, injector: self.injector, state: self.state)
}
return windowController!
}
}
}

extension SlideOverCoordinator: SlideOverTransition {
func openSettingWindow() {
let windowController = settingCoordinator.create()
windowController.showWindow(self)
}
}
20 changes: 20 additions & 0 deletions slideover-for-macos/Coordinator/Transitionable.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import AppKit

public protocol Transitionable {
func present(
_ viewController: NSViewController,
animator: NSViewControllerPresentationAnimator
)
func dismiss(_ viewController: NSViewController)
func present(
_ viewController: NSViewController,
asPopoverRelativeTo positioningRect: NSRect,
of positioningView: NSView,
preferredEdge: NSRectEdge,
behavior: NSPopover.Behavior
)
func presentAsModalWindow(_ viewController: NSViewController)
func presentAsSheet(_ viewController: NSViewController)
}

extension NSViewController: Transitionable {}
35 changes: 0 additions & 35 deletions slideover-for-macos/DI/AppContainer.swift

This file was deleted.

19 changes: 0 additions & 19 deletions slideover-for-macos/DI/Container+.swift

This file was deleted.

8 changes: 0 additions & 8 deletions slideover-for-macos/DI/Dependencies.swift

This file was deleted.

7 changes: 0 additions & 7 deletions slideover-for-macos/DI/Injectable.swift

This file was deleted.

28 changes: 0 additions & 28 deletions slideover-for-macos/DI/Injector.swift

This file was deleted.

19 changes: 0 additions & 19 deletions slideover-for-macos/DI/SwinjectInjector.swift

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Foundation
import Injectable

/// @mockable
protocol SlideOverWindowAction {
Expand Down
Loading

0 comments on commit 1c7440a

Please sign in to comment.