Selaa lähdekoodia

【书签】恢复上次开启记录 实现

lizhe 1 vuosi sitten
vanhempi
commit
4422fe0983

+ 7 - 3
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Controller/KMBookmarkController.swift

@@ -25,6 +25,7 @@ class KMBookmarkController: NSWindowController {
     @IBOutlet weak var bookmarkOutlineView: KMBookmarkOutlineView!
     @IBOutlet weak var outlineView: KMCustomOutlineView!
     
+    var previousSession: KMBookmark?
     var draggedBookmarks: [KMBookmark] = []
     var recentDocuments: [[String: Any]] {
         get {
@@ -38,6 +39,9 @@ class KMBookmarkController: NSWindowController {
     
     var bookmarkRoot: KMRootBookmark {
         get {
+            if let lastOpenFiles = UserDefaults.standard.array(forKey: SKLastOpenFileNamesKey), !lastOpenFiles.isEmpty {
+                previousSession = KMSessionBookmark.bookmarkSession(setups: lastOpenFiles as NSArray, label: NSLocalizedString("Restore Previous Session", comment: "Menu item title"))
+            }
             return KMBookmarkManager.manager.rootBookmark
         }
         set {
@@ -834,10 +838,10 @@ extension KMBookmarkController: NSMenuDelegate, NSMenuItemValidation {
                     i -= 1
                 }
                 
-                if supermenu == NSApp.mainMenu {
+                if supermenu == NSApp.mainMenu && previousSession != nil {
                     menu.addItem(.separator())
-    //                addItemForBookmark(previousSession, toMenu: menu, isFolder: false, isAlternate: false)
-    //                addItemForBookmark(previousSession, toMenu: menu, isFolder: true, isAlternate: true)
+                    addItemForBookmark(previousSession!, toMenu: menu, isFolder: false, isAlternate: false)
+                    addItemForBookmark(previousSession!, toMenu: menu, isFolder: true, isAlternate: true)
                 }
                 
                 if menu.numberOfItems > 0, bookmarks.count > 0 {

+ 38 - 23
PDF Office/PDF Master/Class/PDFTools/KMBookmark/Model/KMBookmark.swift

@@ -26,9 +26,13 @@ class KMBookmark: NSObject {
     var properties: [String: Any]? {
         get {
             var data: [String: Any] = documentSetup 
+            var bdAlias: SKAlias?
+            if self.fileURL != nil {
+                bdAlias = SKAlias.init(url: self.fileURL)
+            }
             let tempSetup = [kType: bookmarkType.rawValue,
-                             kBDAlias: self.aliasData ?? SKAlias.init(url: self.fileURL).data,
-                             kPageIndex: pageIndex.description,
+                             kBDAlias: self.aliasData ?? (bdAlias != nil ? bdAlias?.data: NSData()),
+                             kPageIndex: NSNumber(integerLiteral: Int(pageIndex)),
                              kLabel: self.label
             ] as [String : Any]
             data.merge(tempSetup) { (_, new) in new }
@@ -51,8 +55,11 @@ class KMBookmark: NSObject {
             if documentSetup[kType] != nil {
                 self.bookmarkType = KMBookmarkType(rawValue: documentSetup[kType] as! String ) ?? .bookmark
             }
+            let string: String = documentSetup[kPageIndex] as? String ?? "0"
+            let intValue: UInt = UInt(string) ?? 0
+            
             self.aliasData = documentSetup[kBDAlias] as? NSData
-            self.pageIndex = UInt(documentSetup[kPageIndex] as! String) ?? 0
+            self.pageIndex = intValue
             if documentSetup[kLabel] != nil {
                 self.label = documentSetup[kLabel] as! String
             }
@@ -266,26 +273,26 @@ class KMBookmark: NSObject {
     }
     
     func open() {
-        var document: Any?
-        var error: Error?
-//        if documentSetup != nil {
-//            document = try? NSDocumentController.shared.openDocument(nil)
-//            if document == nil {
-//                NSApp.presentError(NSError(domain: "File not found", code: -1, userInfo: nil))
-//            }
-////            document = [[NSDocumentController sharedDocumentController] openDocumentWithSetup:[self properties] error:&error];
-//        } else {
-            guard let fileURL = fileURL else { return }
-            NSDocumentController.shared.openDocument(withContentsOf: fileURL, display: true, completionHandler: { document, result, error in
-                if (error != nil) {
-                    NSApp.presentError(error!)
-                } else {
-                    if self.pageIndex > 1 {
-                        (document as! KMMainDocument).mainViewController?.setPageNumber = self.pageIndex + 1
-                    }
+        var tempFileURL = fileURL
+        if tempFileURL == nil {
+            if documentSetup[kBDAlias] != nil {
+                tempFileURL = SKAlias.init(data: documentSetup[kBDAlias] as? Data).fileURL
+            }
+            if tempFileURL == nil && documentSetup[KMDocumentSetupFileNameKey] != nil {
+                tempFileURL = NSURL.fileURL(withPath: documentSetup[KMDocumentSetupFileNameKey] as? String ?? "")
+            }
+        }
+        
+        guard let tempFileURL = tempFileURL else { return }
+        NSDocumentController.shared.openDocument(withContentsOf: tempFileURL, display: true, completionHandler: { document, result, error in
+            if (error != nil) {
+                NSApp.presentError(error!)
+            } else {
+                if self.pageIndex > 1 {
+                    (document as! KMMainDocument).mainViewController?.setPageNumber = self.pageIndex + 1
                 }
-            })
-//        }
+            }
+        })
     }
     
     func objectOfChidren(index: Int) -> KMBookmark{
@@ -331,6 +338,14 @@ class KMFolderBookmark: KMBookmark {
             
         }
     }
+    
+    override func open() {
+        var count = children.count
+        while (count != 0) {
+            count = count - 1
+            children[count].open()
+        }
+    }
 }
 
 class KMRootBookmark: KMFolderBookmark {
@@ -401,7 +416,7 @@ class KMRootBookmark: KMFolderBookmark {
 }
 
 //MARK: Session
-class KMSessionBookmark: KMBookmark {
+class KMSessionBookmark: KMFolderBookmark {
     override var bookmarkType: KMBookmarkType {
         get {
             return .session