|
@@ -126,7 +126,7 @@ let LOCKED_KEY = "locked"
|
|
|
|
|
|
var cropSettingWindowController: KMCropSettingWindowController!
|
|
|
var currentWindowController: NSWindowController!
|
|
|
-// var interactionMode: SKInteractionMode = .SKNormalMode
|
|
|
+ // var interactionMode: SKInteractionMode = .SKNormalMode
|
|
|
var savedNormalSetup: NSMutableDictionary = NSMutableDictionary()
|
|
|
|
|
|
//数字签名
|
|
@@ -324,15 +324,15 @@ let LOCKED_KEY = "locked"
|
|
|
override func viewWillAppear() {
|
|
|
super.viewWillAppear()
|
|
|
|
|
|
- self.reStartAutoSaveTimer()
|
|
|
+ // self.reStartAutoSaveTimer()
|
|
|
//是否弹出登录窗口
|
|
|
// self.needShowRegisterView()
|
|
|
}
|
|
|
override func viewWillDisappear() {
|
|
|
super.viewWillDisappear()
|
|
|
|
|
|
-// KMPreferenceManager.shared.setPageNumber(self.listView.currentPageIndex, forKey: self.listView.document.documentURL.path)
|
|
|
- self.pauseAutoSaveTimer()
|
|
|
+ // KMPreferenceManager.shared.setPageNumber(self.listView.currentPageIndex, forKey: self.listView.document.documentURL.path)
|
|
|
+ // self.pauseAutoSaveTimer()
|
|
|
self.removeEventMonitor()
|
|
|
}
|
|
|
|
|
@@ -406,10 +406,10 @@ let LOCKED_KEY = "locked"
|
|
|
tipCurrentPageBox.moveCallback = { [unowned self] mouseEntered, mouseBox in
|
|
|
if mouseEntered {
|
|
|
self.pageNumberDisplayView.hover = true
|
|
|
-// self.updatePageIndicatoreType()
|
|
|
+ // self.updatePageIndicatoreType()
|
|
|
} else {
|
|
|
self.pageNumberDisplayView.hover = false
|
|
|
-// self.updatePageIndicatoreType()
|
|
|
+ // self.updatePageIndicatoreType()
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -430,12 +430,16 @@ let LOCKED_KEY = "locked"
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(willShowFullScreenNotification), name: NSWindow.willShowFullScreenNotification, object: nil)
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(didShowFullScreenNotification), name: NSWindow.didShowFullScreenNotification, object: nil)
|
|
|
NotificationCenter.default.addObserver(self, selector: #selector(didAddContentViewNotification), name: NSWindow.didAddContentViewNotification, object: nil)
|
|
|
+ NotificationCenter.default.addObserver(self, selector: #selector(addAutoSaveEvent), name: AutoSaveManager.kTimeValueChangedNotificationName, object: nil)
|
|
|
|
|
|
self.autoSaveTimeStartOrStopIfNeed()
|
|
|
+ Task {
|
|
|
+ self.addAutoSaveEvent()
|
|
|
+ }
|
|
|
|
|
|
self.toolbarController.selectItem(KMDocumentAnnotationToolbarItemIdentifier)
|
|
|
self.closeRightPane()
|
|
|
-
|
|
|
+
|
|
|
self.addKeyEventMonitor()
|
|
|
|
|
|
self.addAdsBannerView()
|
|
@@ -445,7 +449,7 @@ let LOCKED_KEY = "locked"
|
|
|
KMResourceDownloadManager.manager.checkDocumentAIVersion()
|
|
|
#endif
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
//MARK: - KMToolbarViewControllerDelegate
|
|
|
|
|
|
//MARK: - PDFListView
|
|
@@ -466,7 +470,7 @@ let LOCKED_KEY = "locked"
|
|
|
self.rightSideViewController.view.frame = CGRect(x: 0, y: 0, width: self.rightView.frame.width, height: self.rightView.frame.size.height)
|
|
|
self.rightSideViewController.view.autoresizingMask = [.height,.width]
|
|
|
self.rightSideViewController.listView = self.listView
|
|
|
-// self.rightSideViewController.view.isHidden = true
|
|
|
+ // self.rightSideViewController.view.isHidden = true
|
|
|
self.rightSideViewController.isHidden = true
|
|
|
self.rightSideViewController.delegate = self
|
|
|
self.rightView.addSubview(self.rightSideViewController.view)
|
|
@@ -550,38 +554,38 @@ let LOCKED_KEY = "locked"
|
|
|
}
|
|
|
|
|
|
func checkShouldAutoOpenLeftVC() {
|
|
|
-// if (KMPreferenceManager.shared.leftSideNeedCloseWhenOpenFile()) {
|
|
|
-// return
|
|
|
-// }
|
|
|
-// if (KMPreferenceManager.shared.leftSideDisplayType == .showOutlineIfHas) {
|
|
|
-// let outlineRoot = self.listView.document.outlineRoot()
|
|
|
-// let hasOutline = (outlineRoot != nil && outlineRoot!.numberOfChildren > 0)
|
|
|
-// if (hasOutline == false) {
|
|
|
-// return
|
|
|
-// }
|
|
|
-//
|
|
|
-// DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
|
|
|
-// self.leftSideViewController.refreshMethodType(methodType: .Outline)
|
|
|
-// }
|
|
|
-// return
|
|
|
-// }
|
|
|
-// DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
|
|
|
-// let selectedIndex = UserDefaults.standard.integer(forKey: "KMBOTASelectedIndexKey")
|
|
|
-// let thumai = KMLeftMethodMode()
|
|
|
-// if selectedIndex == 0 {
|
|
|
-// thumai.methodType = .Thumbnail
|
|
|
-// } else if selectedIndex == 1 {
|
|
|
-// thumai.methodType = .Outline
|
|
|
-// } else if selectedIndex == 2 {
|
|
|
-// thumai.methodType = .BookMark
|
|
|
-// } else if selectedIndex == 3 {
|
|
|
-// thumai.methodType = .Annotation
|
|
|
-// } else if selectedIndex == 4 {
|
|
|
-// thumai.methodType = .Search
|
|
|
-// }
|
|
|
-//
|
|
|
-// self.leftSideViewController.refreshMethodType(methodType: thumai.methodType)
|
|
|
-// }
|
|
|
+ // if (KMPreferenceManager.shared.leftSideNeedCloseWhenOpenFile()) {
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // if (KMPreferenceManager.shared.leftSideDisplayType == .showOutlineIfHas) {
|
|
|
+ // let outlineRoot = self.listView.document.outlineRoot()
|
|
|
+ // let hasOutline = (outlineRoot != nil && outlineRoot!.numberOfChildren > 0)
|
|
|
+ // if (hasOutline == false) {
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
|
|
|
+ // self.leftSideViewController.refreshMethodType(methodType: .Outline)
|
|
|
+ // }
|
|
|
+ // return
|
|
|
+ // }
|
|
|
+ // DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
|
|
|
+ // let selectedIndex = UserDefaults.standard.integer(forKey: "KMBOTASelectedIndexKey")
|
|
|
+ // let thumai = KMLeftMethodMode()
|
|
|
+ // if selectedIndex == 0 {
|
|
|
+ // thumai.methodType = .Thumbnail
|
|
|
+ // } else if selectedIndex == 1 {
|
|
|
+ // thumai.methodType = .Outline
|
|
|
+ // } else if selectedIndex == 2 {
|
|
|
+ // thumai.methodType = .BookMark
|
|
|
+ // } else if selectedIndex == 3 {
|
|
|
+ // thumai.methodType = .Annotation
|
|
|
+ // } else if selectedIndex == 4 {
|
|
|
+ // thumai.methodType = .Search
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // self.leftSideViewController.refreshMethodType(methodType: thumai.methodType)
|
|
|
+ // }
|
|
|
if KMPreference.shared.showLeftSideBar == false {
|
|
|
return
|
|
|
}
|
|
@@ -1415,16 +1419,16 @@ let LOCKED_KEY = "locked"
|
|
|
// self?.view.window?.endSheet((self?.currentWindowController.window)!)
|
|
|
// self?.currentWindowController = nil
|
|
|
// }
|
|
|
-//
|
|
|
+//
|
|
|
// windowController.resultCallback = { [weak self] result in
|
|
|
// let windowController_secure = self?.currentWindowController as! KMSecureEncryptWindowController
|
|
|
// self?.view.window?.endSheet((self?.currentWindowController.window)!)
|
|
|
// self?.currentWindowController = nil
|
|
|
-//
|
|
|
+//
|
|
|
// self?._secureOptions = windowController_secure.options
|
|
|
// self?.needSave = true
|
|
|
// self?.recordIsPDFDocumentEdited(type: .setPassword)
|
|
|
-//
|
|
|
+//
|
|
|
// if (result) {
|
|
|
// self?.showSecureSuccessTip()
|
|
|
// self?.recordSaveWatermarkFlag(type: .setPassword)
|
|
@@ -1434,7 +1438,7 @@ let LOCKED_KEY = "locked"
|
|
|
// alert.runModal()
|
|
|
// }
|
|
|
// }
|
|
|
-//
|
|
|
+//
|
|
|
// self.view.window?.beginSheet(windowController.window!)
|
|
|
|
|
|
let controller = KMSecurityWindowController(windowNibName: "KMSecurityWindowController")
|
|
@@ -1591,6 +1595,131 @@ let LOCKED_KEY = "locked"
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // MARK: - 定时保存
|
|
|
+
|
|
|
+ func addAutoSaveEvent() {
|
|
|
+ if (self.autoSaveTimer != nil) {
|
|
|
+ self.autoSaveTimer?.invalidate()
|
|
|
+ self.autoSaveTimer = nil
|
|
|
+ }
|
|
|
+
|
|
|
+ if self.document != nil {
|
|
|
+ self.autoSaveTimer = Timer.scheduledTimer(withTimeInterval: AutoSaveManager.manager.timeInterval * 60, repeats: true, block: { [weak self] timer in
|
|
|
+ self?.autoSaveTimerAction(timer)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ self.checkAutoSaveInfo()
|
|
|
+ }
|
|
|
+
|
|
|
+ func checkAutoSaveInfo() {
|
|
|
+ guard let cnt = AutoSaveManager.manager.autoSavePaths?.count, cnt > 0 else {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if AutoSaveManager.manager.autoSaveAlertShow {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ AutoSaveManager.manager.autoSaveDidEndAction = false
|
|
|
+ AutoSaveManager.manager.autoSaveAlertShow = true
|
|
|
+
|
|
|
+ let blockSaveWindow = AutoSavePopController()
|
|
|
+ blockSaveWindow.cancelHandle = { [weak self] windowController in
|
|
|
+ AutoSaveManager.manager.autoSaveDidEndAction = true
|
|
|
+ AutoSaveManager.manager.clearCache()
|
|
|
+ self?.km_quick_endSheet()
|
|
|
+ }
|
|
|
+
|
|
|
+ blockSaveWindow.confirmHandle = { [weak self] windowController in
|
|
|
+ self?.km_quick_endSheet()
|
|
|
+ self?.saveAutoSaveInfo()
|
|
|
+ }
|
|
|
+ self.km_beginSheet(windowC: blockSaveWindow)
|
|
|
+ }
|
|
|
+
|
|
|
+ func saveAutoSaveInfo() {
|
|
|
+ let openPanel = NSOpenPanel()
|
|
|
+ openPanel.canChooseDirectories = true
|
|
|
+ openPanel.canChooseFiles = false
|
|
|
+ openPanel.allowsMultipleSelection = false
|
|
|
+ let win = NSApp.keyWindow != nil ? NSApp.keyWindow : self.view.window
|
|
|
+ openPanel.beginSheetModal(for: win!) { result in
|
|
|
+ if (result == .OK) {
|
|
|
+ let folderPath = openPanel.url?.path ?? openPanel.url?.absoluteString
|
|
|
+ for path in AutoSaveManager.manager.opendPaths ?? [] {
|
|
|
+ let _path = path as? String
|
|
|
+ var newPath = "\(folderPath ?? "")/\(_path?.lastPathComponent ?? "")"
|
|
|
+ newPath = self.getValidFilePath(newPath)
|
|
|
+ do {
|
|
|
+ try FileManager.default.moveItem(atPath: _path ?? "", toPath: newPath)
|
|
|
+ } catch {
|
|
|
+ NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: newPath)])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ AutoSaveManager.manager.clearCache()
|
|
|
+ }
|
|
|
+ AutoSaveManager.manager.autoSaveDidEndAction = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ func autoSaveTimerAction(_ timer: Timer) {
|
|
|
+ if (self.document == nil || self.listView?.document?.documentURL.path == nil) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if AutoSaveManager.manager.autoSaveDidEndAction == false {
|
|
|
+ //防止提示弹窗出现后,未进行任何操作又进入自动保存的机制
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if let data = self.document?.isLocked, data {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if AutoSaveManager.manager.autoSaveEnabled == false {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let documentArray = NSDocumentController.shared.documents
|
|
|
+ var didFileEdit = false
|
|
|
+ for doc in documentArray {
|
|
|
+ if doc.fileURL?.path == self.document?.documentURL.path {
|
|
|
+ didFileEdit = doc.isDocumentEdited
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (didFileEdit == false) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ AutoSaveManager.manager.isSaving = true
|
|
|
+ let savePath = AutoSaveManager.manager.autoSaveWithPath(self.listView?.document?.documentURL.path ?? "")
|
|
|
+ if (!self.document!.isLocked) {
|
|
|
+ self.document?.write(to: URL(fileURLWithPath: savePath))
|
|
|
+ }
|
|
|
+ DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
|
|
|
+ AutoSaveManager.manager.isSaving = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ func removeAutoSaveInfo() {
|
|
|
+ if self.autoSaveTimer != nil {
|
|
|
+ self.autoSaveTimer?.invalidate()
|
|
|
+ self.autoSaveTimer = nil
|
|
|
+ }
|
|
|
+
|
|
|
+ if AutoSaveManager.manager.autoSaveDidEndAction == false {
|
|
|
+ //防止提示弹窗出现后,未进行任何操作又进入自动保存的机制
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if AutoSaveManager.manager.autoSaveEnabled == false {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if self.document == nil || self.listView?.document?.documentURL.path == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ AutoSaveManager.manager.removeAutoSavePath(self.listView?.document?.documentURL.path ?? "")
|
|
|
+ }
|
|
|
+
|
|
|
// MARK: -
|
|
|
// MARK: 选择 PDFDisplay 模式
|
|
|
@objc public func selectDisplay(display: KMPDFDisplayType, viewSettingIsReload: Bool = true) {
|
|
@@ -1670,26 +1799,26 @@ let LOCKED_KEY = "locked"
|
|
|
// MARK: - 自动保存
|
|
|
|
|
|
internal func autoSaveTimeStartOrStopIfNeed() {
|
|
|
- if (KMPreferenceManager.shared.autoSave == false) {
|
|
|
- self.stopAutoSaveTimer()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- self.startAutoSaveTimer(KMPreferenceManager.shared.autoSaveTimeInterval)
|
|
|
- if (self.myDocument == nil) {
|
|
|
- self.stopAutoSaveTimer()
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- let browser = self.browserWindowController?.browser
|
|
|
- guard let activeDocument = browser?.activeTabContents() else {
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (self.myDocument!.isEqual(to: activeDocument) == false) {
|
|
|
- self.pauseAutoSaveTimer()
|
|
|
- return
|
|
|
- }
|
|
|
+// if (KMPreferenceManager.shared.autoSave == false) {
|
|
|
+// self.stopAutoSaveTimer()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// self.startAutoSaveTimer(KMPreferenceManager.shared.autoSaveTimeInterval)
|
|
|
+// if (self.myDocument == nil) {
|
|
|
+// self.stopAutoSaveTimer()
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// let browser = self.browserWindowController?.browser
|
|
|
+// guard let activeDocument = browser?.activeTabContents() else {
|
|
|
+// return
|
|
|
+// }
|
|
|
+//
|
|
|
+// if (self.myDocument!.isEqual(to: activeDocument) == false) {
|
|
|
+// self.pauseAutoSaveTimer()
|
|
|
+// return
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
private func startAutoSaveTimer(_ interval: TimeInterval) {
|
|
@@ -1916,6 +2045,7 @@ let LOCKED_KEY = "locked"
|
|
|
if (self.listView.spellingTag() > 0) {
|
|
|
NSSpellChecker.shared.closeSpellDocument(withTag: self.listView.spellingTag())
|
|
|
}
|
|
|
+ self.removeAutoSaveInfo()
|
|
|
}
|
|
|
|
|
|
public func clearSecureOptions() {
|