X-Git-Url: http://git.osdn.net/view?p=kcd%2FKCD.git;a=blobdiff_plain;f=KCD%2FGameViewController.swift;h=a87dc7b1f7d32981539d7cb6e832b0ffbf73727d;hp=8616b416cb8fcf567befd7ffe88ae9970030d96a;hb=0c3ec4c478b5b8a835e01bfa1287d2996ff8a4e3;hpb=fb11e3235b721205e72361a41f7ade657c4f1b79 diff --git a/KCD/GameViewController.swift b/KCD/GameViewController.swift index 8616b416..a87dc7b1 100644 --- a/KCD/GameViewController.swift +++ b/KCD/GameViewController.swift @@ -10,26 +10,19 @@ import Cocoa import WebKit import JavaScriptCore -fileprivate extension Selector { - - static let reloadContent = #selector(GameViewController.reloadContent(_:)) - static let deleteCacheAndReload = #selector(GameViewController.deleteCacheAndReload(_:)) - static let screenShot = #selector(GameViewController.screenShot(_:)) -} - final class GameViewController: NSViewController { private static let gamePageURL = "http://www.dmm.com/netgame/social/-/gadgets/=/app_id=854854/" private static let loginPageURLPrefix = "https://www.dmm.com/my/-/login/=/" - @IBOutlet var webView: WebView! + @IBOutlet private var webView: WebView! - override var nibName: String! { + override var nibName: NSNib.Name { - return "GameViewController" + return .nibName(instanceOf: self) } - fileprivate var flashTopLeft = NSPoint(x: 2600, y: 1445) + private var flashTopLeft = NSPoint(x: 2600, y: 1445) private var clipView: NSClipView { return view as! NSClipView // swiftlint:disable:this force_cast @@ -56,10 +49,11 @@ final class GameViewController: NSViewController { @IBAction func reloadContent(_ sender: AnyObject?) { - guard let _ = webView.mainFrameURL - else { - webView.mainFrameURL = GameViewController.gamePageURL - return + guard let _ = webView.mainFrameURL else { + + webView.mainFrameURL = GameViewController.gamePageURL + + return } // ゲームページでない場合はゲームページを表示する @@ -84,8 +78,8 @@ final class GameViewController: NSViewController { let untilDate = prevDate.addingTimeInterval(1 * 60) let date = DateFormatter.localizedString(from: untilDate, dateStyle: .none, timeStyle: .medium) let alert = NSAlert() - alert.messageText = NSLocalizedString("Reload interval is too short?", comment: "") - let format = NSLocalizedString("Reload interval is too short.\nWait until %@.", comment: "") + alert.messageText = LocalizedStrings.reloadTimeShortenMessage.string + let format = LocalizedStrings.reloadTimeShortenInfo.string alert.informativeText = String(format: format, date) alert.runModal() @@ -101,66 +95,164 @@ final class GameViewController: NSViewController { let panel = ProgressPanel() - guard let window = view.window, - let panelWindow = panel.window - else { return } + guard let window = view.window else { + + return + } + guard let panelWindow = panel.window else { + + return + } panel.title = "" - panel.message = NSLocalizedString("Deleting caches...", comment: "Deleting caches...") + panel.message = LocalizedStrings.deletingCacheInfo.string panel.animate = true - window.beginSheet(panelWindow) { _ in NSSound(named: "Submarine")?.play() } + window.beginSheet(panelWindow) { _ in NSSound(named: NSSound.Name("Submarine"))?.play() } AppDelegate.shared.clearCache() window.endSheet(panelWindow) } - @IBAction func screenShot(_ sender: AnyObject?) { + func screenshotOld() { let frame = webView.visibleRect let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth] let f = frame.insetBy(dx: -screenshotBorder, dy: -screenshotBorder) - guard let rep = webView.bitmapImageRepForCachingDisplay(in: f) else { return } + guard let rep = webView.bitmapImageRepForCachingDisplay(in: f) else { + + return + } webView.cacheDisplay(in: frame, to: rep) - AppDelegate.shared.registerScreenshot(rep, fromOnScreen: .zero) + + ScreenshotRegister(ApplicationDirecrories.shared.screenshotSaveDirectoryURL) + .registerScreenshot(rep, name: localizedAppName()) + } + + @available(OSX 10.13, *) + func screenshot() { + + let frame = view.visibleRect + let screenshotBorder = UserDefaults.standard[.screenShotBorderWidth] + let f = frame.insetBy(dx: -screenshotBorder, dy: -screenshotBorder) + let windowCoordinateFrame = view.convert(f, to: nil) + + guard let window = view.window else { + + Logger.shared.log("Can not get window") + + return + } + let screenCoordinsteFrame = window.convertToScreen(windowCoordinateFrame) + + guard let screen = NSScreen.main else { + + Logger.shared.log("Can not get Screen") + + return + } + let scFrame = screen.frame + + guard let cxt = window.graphicsContext?.cgContext else { + + Logger.shared.log("Cannot get Context") + + return + } + let deviceCoordinateFrame = cxt.convertToDeviceSpace(screenCoordinsteFrame) + let raio = deviceCoordinateFrame.size.width / screenCoordinsteFrame.size.width + + let trimRect = CGRect(x: raio * screenCoordinsteFrame.origin.x, + y: raio * (scFrame.size.height - screenCoordinsteFrame.origin.y - screenCoordinsteFrame.size.height), + width: raio * screenCoordinsteFrame.size.width, + height: raio * screenCoordinsteFrame.size.height) + + guard let fullSizeImage = CGDisplayCreateImage(CGMainDisplayID()) else { + + Logger.shared.log("Can not get Image") + + return + } + + guard let image = fullSizeImage.cropping(to: trimRect) else { + + Logger.shared.log("Can not trim image") + + return + } + + let rep = NSBitmapImageRep(cgImage: image) + + if rep.size != NSSize(width: 800, height: 480) { + + rep.size = NSSize(width: 800, height: 480) + } + + ScreenshotRegister(ApplicationDirecrories.shared.screenshotSaveDirectoryURL) + .registerScreenshot(rep, name: localizedAppName()) + } + + @IBAction func screenShot(_ sender: AnyObject?) { + + if #available(OSX 10.13, *) { + + screenshot() + + } else { + + screenshotOld() + } } override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool { - if menuItem.action == .reloadContent { + guard let action: Selector = menuItem.action else { + + return false + } + + switch action { + + case #selector(GameViewController.reloadContent(_:)): - guard let _ = webView.mainFrame, - let frameURL = webView.mainFrameURL - else { return true } + guard let _ = webView.mainFrame else { + + return true + } + guard let frameURL = webView.mainFrameURL else { + + return true + } switch frameURL { + case GameViewController.gamePageURL: - menuItem.title = NSLocalizedString("Reload", comment: "Reload menu, reload") + menuItem.title = LocalizedStrings.reload.string case let s where s.hasPrefix(GameViewController.loginPageURLPrefix): - menuItem.title = NSLocalizedString("Reload", comment: "Reload menu, reload") + menuItem.title = LocalizedStrings.reload.string default: - menuItem.title = NSLocalizedString("Back To Game", comment: "Reload menu, back to game") + menuItem.title = LocalizedStrings.backToGame.string + } return true - } - - if menuItem.action == .deleteCacheAndReload { + + case #selector(GameViewController.deleteCacheAndReload(_:)): return true - } - - if menuItem.action == .screenShot { + + case #selector(GameViewController.screenShot(_:)): return true + + default: return false + } - - return false } } @@ -179,8 +271,10 @@ extension GameViewController: WebFrameLoadDelegate, WebUIDelegate { func webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) { - guard let path = frame.dataSource?.initialRequest.url?.path - else { return } + guard let path = frame.dataSource?.initialRequest.url?.path else { + + return + } let handler: (JSContext?, JSValue?) -> Void = { (_, exception) in @@ -191,14 +285,15 @@ extension GameViewController: WebFrameLoadDelegate, WebUIDelegate { } else { print("Caught exception in evaluteScript") - } } if path.hasSuffix("gadgets/ifr") { - guard let context = frame.javaScriptContext - else { return } + guard let context = frame.javaScriptContext else { + + return + } context.exceptionHandler = handler context.evaluateScript( @@ -215,8 +310,10 @@ extension GameViewController: WebFrameLoadDelegate, WebUIDelegate { if path.hasSuffix("app_id=854854") { - guard let context = frame.javaScriptContext - else { return } + guard let context = frame.javaScriptContext else { + + return + } context.exceptionHandler = handler context.evaluateScript( @@ -232,8 +329,10 @@ extension GameViewController: WebFrameLoadDelegate, WebUIDelegate { ) let validIframe = context.objectForKeyedSubscript("validIframe").toInt32() - guard validIframe != 0 - else { return } + guard validIframe != 0 else { + + return + } let top = context.objectForKeyedSubscript("atop").toDouble() let left = context.objectForKeyedSubscript("aleft").toDouble() @@ -245,8 +344,10 @@ extension GameViewController: WebFrameLoadDelegate, WebUIDelegate { func webView(_ sender: WebView!, contextMenuItemsForElement element: [AnyHashable: Any]!, defaultMenuItems: [Any]!) -> [Any]! { - guard let menuItems = defaultMenuItems as? [NSMenuItem] - else { return [] } + guard let menuItems = defaultMenuItems as? [NSMenuItem] else { + + return [] + } return menuItems.filter { !GameViewController.excludeMenuItemTag.contains($0.tag) } }