Browse Source

Merge branch 'develop_PDFReaderProNew' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderProNew

liujiajie 1 year ago
parent
commit
5fdfa63b8d

+ 11 - 0
PDF Office/PDF Master/Class/AD/KMAdsManager.swift

@@ -79,6 +79,17 @@ class KMAdsManager: NSObject {
 //        adView.tag = kADViewWithTag
         adView.beginSheetModalForView(view: view, directions: directions, animated: animated, completionHandler: handler)
         adViews.append(adView)
+        if KMAdsInfoManager.shareInstance.adsInfoArrM.count > 0 {
+            let adsInfo = KMAdsInfoManager.shareInstance.getRandomAdsInfo()
+            if adsInfo?.show == true {
+                adView.adsInfo = adsInfo
+                adView.reloadData()
+            } else {
+                adView.isHidden = true
+            }
+        } else {
+            adView.isHidden = true
+        }
         
         return true
     }

+ 51 - 50
PDF Office/PDF Master/Class/AD/KMAdsWebView.swift

@@ -20,35 +20,44 @@ let kAD_Refresh_Rate = 6000.0
 class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
     weak var adDelegate: AdsWebViewDelegate?
 
-    private var closeButton: NSButton
+    private var closeButton: NSButton!
+    var clickButton: NSButton!
     private var timer: Timer?
     private var currentPage: Int = 0
     private var completionHandler: ((Int) -> Void)?
 
-    private var adsWebView: WKWebView
+    var adsImageView: NSImageView!
+    var adsInfo: KMAdsInfo!
 
     var adPosY: CGFloat = 30.0
 
     override init(frame frameRect: NSRect) {
-        closeButton = NSButton(frame: NSRect(x: frameRect.size.width - 30, y: frameRect.size.height - 30, width: 30, height: 30))
-        adsWebView = WKWebView(frame: frameRect)
-        
         super.init(frame: frameRect)
         
         wantsLayer = true
         self.frame = NSRect(x: 0, y: 0, width: kAD_View_Width, height: kAD_View_Height)
         autoresizingMask = [.minXMargin, .maxXMargin]
 
-        adsWebView.navigationDelegate = self
-        adsWebView.autoresizingMask = [.width, .height]
-        addSubview(adsWebView)
+        adsImageView = NSImageView.init(frame: self.bounds)
+        adsImageView.autoresizingMask = [.width, .height]
+        addSubview(adsImageView)
 
         adPosY = 30.0
-
+        
+        clickButton = NSButton.init(frame: self.bounds)
+        clickButton.isHidden = false
+        clickButton.autoresizingMask = [.width, .height]
+        clickButton.isBordered = false
+        clickButton.title = ""
+        clickButton.target = self
+        clickButton.action = #selector(buttonItemClicked(_:))
+        addSubview(clickButton)
+        
+        closeButton = NSButton.init(frame: NSRect(x: frameRect.size.width - 30, y: frameRect.size.height - 30, width: 30, height: 30))
         closeButton.isHidden = false
         closeButton.imagePosition = .imageOnly
-//        closeButton.cell?.highlightsBy = .contentsCellMask
         closeButton.imageScaling = .scaleProportionallyUpOrDown
+        closeButton.autoresizingMask = [.maxXMargin, .minYMargin]
         closeButton.image = NSImage(named: "ad_cancel_button00")
         closeButton.isBordered = false
         closeButton.target = self
@@ -65,8 +74,7 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
 
     deinit {
         adDelegate = nil
-        adsWebView.navigationDelegate = nil
-        adsWebView.stopLoading()
+        
         timer?.invalidate()
         timer = nil
         completionHandler = nil
@@ -133,17 +141,20 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
     }
 
     func startAdsDataRequest() {
-        adsWebView.navigationDelegate = self
+
         if adsData.count > 0 {
-            let url = URL(string: adsData[currentPage])
-            adsWebView.load(URLRequest(url: url!))
             KMAdsManager.defaultManager.refreshLoadingDate()
         }
     }
+    
+    func reloadData() {
+        DispatchQueue.main.async {
+            self.adsImageView.image = self.adsInfo.adsImage
+        }
+    }
 
     func stopLoading() {
-        adsWebView.navigationDelegate = nil
-        adsWebView.stopLoading()
+
     }
 
     func resizeWithOldSuperviewSize(oldSize: NSSize) {
@@ -156,7 +167,7 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
         }
         
         self.frame = NSRect(x: (superview?.frame.size.width ?? 0 - width) / 2.0, y: frame.origin.y, width: width, height: height)
-        adsWebView.frame = bounds
+
     }
 
     func beginSheetModalForView(view: NSView, directions: KMADViewDirections, animated: Bool, completionHandler handler: ((Int) -> Void)?) {
@@ -193,7 +204,8 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
             }
         }
 
-        adsWebView.frame = bounds
+        adsImageView.frame = bounds
+        closeButton.frame = NSRect(x: self.bounds.size.width - 30, y: self.bounds.size.height - 30, width: 30, height: 30)
 
         currentPage = 0
         startAdsDataRequest()
@@ -242,7 +254,7 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
             }
 
             let url = URL(string: self.adsData[self.currentPage])
-            self.adsWebView.load(URLRequest(url: url!))
+     
             KMAdsManager.defaultManager.refreshLoadingDate()
         }
     }
@@ -262,7 +274,24 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
         }
         removeFromSuperview()
     }
+    
+    @objc func buttonItemClicked(_ sender: Any) {
+        
+        guard let newURL = NSURL(string: self.adsInfo.adsURLLink) else {
+            return
+        }
 
+        NSWorkspace.shared.open(newURL as URL)
+
+        adDelegate?.kmAdViewClicked(self)
+
+        if let completionHandler = self.completionHandler {
+            completionHandler(currentPage + 1)
+            self.completionHandler = nil
+        }
+        removeFromSuperview()
+    }
+    
     @objc func buttonItemClicked_Close(_ sender: Any) {
         adDelegate?.kmAdViewClose(self)
 
@@ -301,39 +330,11 @@ class KMAdsWebView: NSView, WKNavigationDelegate, CAAnimationDelegate {
 
         closeButton.alphaValue = 1.0
 
-        adsWebView.frame = bounds
+        adsImageView.frame = bounds
     }
 
     // MARK: - WKNavigationDelegate
-
-    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
-        if navigationAction.navigationType == .linkActivated {
-            let tURL = navigationAction.request.url
-            if tURL != nil {
-                buttonItemClicked_Open(tURL as Any)
-                decisionHandler(.cancel)
-                return
-            }
-        }
-
-        decisionHandler(.allow)
-    }
-
-    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
-        webView.evaluateJavaScript("document.body.scrollHeight") { [weak self] (result, error) in
-            if let height = result as? CGFloat, height > 0 {
-                let newHeight = min(height, kAD_View_Height)
-                self?.adsWebView.frame = NSRect(x: 0, y: 0, width: (self?.adsWebView.frame.size.width)!, height: newHeight)
-                self?.frame.size.height = newHeight
-                self?.closeButton.frame = NSRect(x: (self?.frame.size.width)! - 30, y: (self?.frame.size.height)! - 30, width: 30, height: 30)
-            }
-        }
-    }
-
-    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
-        print(error)
-    }
-
+ 
     @objc func handleUserHaveClickRateUsNotification(_ notification: Notification) {
         adsWebView_Switch()
     }

+ 14 - 0
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift

@@ -205,6 +205,20 @@ import Cocoa
                     }
                 }
                 advertisementShowView.inputData = data!.advertisement
+                
+                if KMAdvertisementManager.manager.infoDict.allKeys.count > 0 {
+                    var infoDict: NSDictionary = KMAdvertisementManager.manager.infoDict["adsInfo"] as! NSDictionary
+                    let array: [[String: Any]] = infoDict["content"] as! [[String : Any]]
+                    
+                    var arrM = NSMutableArray.init()
+                    for dict in array {
+                        var adsInfo = KMAdsInfo.init()
+                        let mutableDictionary = NSMutableDictionary(dictionary: dict)
+                        adsInfo.infoDict = mutableDictionary
+                        arrM.add(adsInfo)
+                    }
+                    KMAdsInfoManager.shareInstance.adsInfoArrM = arrM
+                }
             }
         }
     }

+ 13 - 0
PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift

@@ -11,6 +11,7 @@
     @objc public var configuration: KMAdvertisementConfig = KMAdvertisementConfig()
     
     var info: KMAdvertisementInfo = KMAdvertisementInfo()
+    var infoDict: NSDictionary = NSDictionary()
     
     /**
      @abstract 测试模式,默认为false
@@ -75,6 +76,12 @@ extension KMAdvertisementManager {
         //先拿缓存数据 再请求新数据
         let cacheData = KMAdvertisementCache.default.readData()
         if cacheData.count != 0 {
+            for model in cacheData {
+                let jsonString: String = (model["detail"] as? String) ?? ""
+                let jsonData: Data = jsonString.data(using: .utf8)!
+                let dict = try?JSONSerialization.jsonObject(with: jsonData)
+                infoDict = dict as! NSDictionary
+            }
             self.parseData(data: cacheData, isNeedLocalComparison: false) { result in
                 if result.count != 0 {
                     info = result.first!
@@ -98,6 +105,12 @@ extension KMAdvertisementManager {
                             completion(data.first, responseObject, nil)
                         }
                     }
+                    for model in array as! [NSDictionary] {
+                        let jsonString: String = (model["detail"] as? String) ?? ""
+                        let jsonData: Data = jsonString.data(using: .utf8)!
+                        let dict = try?JSONSerialization.jsonObject(with: jsonData)
+                        infoDict = dict as! NSDictionary
+                    }
                 } else {
                     print("解析数据失败array")
                     completion(nil, responseObject, error)

BIN
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ComPDFKit_EN.imageset/ComPDFKit_EN.png


+ 12 - 0
PDF Office/PDF Master/Class/KMAdvertisement/Source/KMAdvertisement.xcassets/ComPDFKit_EN.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ComPDFKit_EN.png",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 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

+ 133 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/KMAdsInfo.swift

@@ -0,0 +1,133 @@
+//
+//  KMAdsInfo.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/2/28.
+//
+
+import Cocoa
+
+@objcMembers class KMAdsInfoManager: NSObject {
+    
+    public static let shareInstance = KMAdsInfoManager.init()
+    
+    public var adsInfoArrM: NSMutableArray!
+    
+    override init() {
+        super.init()
+        
+        
+    }
+    
+    func getRandomAdsInfo() -> KMAdsInfo? {
+        let randomValue = Int(arc4random()%100)
+        
+        for idObject in self.adsInfoArrM {
+            let adsInfo = idObject as! KMAdsInfo
+            
+            let percentValue = adsInfo.percentValue
+            let minValue = Int(percentValue.components(separatedBy: "-").first!)
+            let maxValue = Int(percentValue.components(separatedBy: "-").last!)
+            if minValue! <= randomValue && randomValue <= maxValue! {
+                return adsInfo
+            }
+        }
+        return nil
+    }
+    
+    
+    
+    
+}
+
+@objcMembers class KMAdsInfo: NSObject {
+
+    var infoDict: NSMutableDictionary!
+    
+    var percentValue: String {
+        get {
+            return self.infoDict["percent"] as! String
+        }
+    }
+    
+    var show: Bool {
+        get {
+            let showString = self.infoDict.object(forKey: "show") as! String
+            if let showValue = Bool(showString) {
+                if showValue == false {
+                    return false
+                }
+            }
+            
+            var startTime = Double(self.infoDict["startTime"] as! String)!
+            var endTime = Double(self.infoDict["endTime"] as! String)!
+            if startTime > 1000000000 {
+                startTime = startTime / 1000
+            }
+            if endTime > 1000000000 {
+                endTime = endTime / 1000
+            }
+            let startDate = NSDate(timeIntervalSince1970: startTime)
+            let endDate = NSDate(timeIntervalSince1970: endTime)
+            if startDate.compare(Date()) == .orderedAscending &&
+                endDate.compare(Date()) == .orderedDescending{
+                return true
+            }
+            return false
+        }
+    }
+    
+    var adsImage: NSImage {
+        get {
+            
+            let imageDict: [String: Any] = self.infoDict["image"] as! [String : Any]
+            let imageURLString = imageDict[self.languageKey] as! NSString
+            
+            var imageName = self.versionKey
+            imageName.append(String(format: "_%@.%@", self.languageKey, imageURLString.lastPathComponent))
+ 
+            let kImageCacheFilePath: String = NSTemporaryDirectory() + "Advertisement/ImageCache"
+            let imgSavePath = kImageCacheFilePath + "/" + imageName
+            if FileManager.default.fileExists(atPath: imgSavePath) {
+                return NSImage(contentsOfFile: imgSavePath)!
+            }
+             
+            DispatchQueue.global().async {
+                if let url = URL(string: imageURLString as String),
+                   let imageData = try? Data(contentsOf: url) {
+                    if imageData.isEmpty == false {
+                        DispatchQueue.main.async {
+                            try?imageData.write(to: URL(fileURLWithPath: imgSavePath))
+                            NotificationCenter.default.post(name: Notification.Name(rawValue: "KMRecommondInfoUpdateNoti"), object: ["unique":self.versionKey])
+                        }
+                    }
+                }
+            }
+             
+            return NSImage(named: "ComPDFKit_EN")!
+        }
+    }
+    
+    var adsURLLink: String {
+        get {
+            let linkDict: [String: Any] = self.infoDict["linkURL"] as! [String : Any]
+            return linkDict[self.languageKey] as! String
+        }
+    }
+    
+    var languageKey: String {
+        let language = Bundle.main.preferredLocalizations[0]
+        if language == "zh_CN" {
+            return "zh_CN"
+        } else if language == "zh_TW" {
+            return "zh_TW"
+        }
+        return "en"
+    }
+    
+    var versionKey: String {
+        return self.infoDict["version"] as! String
+    }
+    
+    
+}

+ 8 - 0
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -4353,6 +4353,9 @@
 		BBB7B4912A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4902A03AD2A00B58A5A /* KMPDFEditToolbar.swift */; };
 		BBB7B4922A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4902A03AD2A00B58A5A /* KMPDFEditToolbar.swift */; };
 		BBB7B4932A03AD2A00B58A5A /* KMPDFEditToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB7B4902A03AD2A00B58A5A /* KMPDFEditToolbar.swift */; };
+		BBB9428B2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */; };
+		BBB9428C2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */; };
+		BBB9428D2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */; };
 		BBB9B30D299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B2F2299A5D6C004F3235 /* KMCloudUploadOperationQueue.m */; };
 		BBB9B30E299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B2F2299A5D6C004F3235 /* KMCloudUploadOperationQueue.m */; };
 		BBB9B30F299A5D6D004F3235 /* KMCloudUploadOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = BBB9B2F2299A5D6C004F3235 /* KMCloudUploadOperationQueue.m */; };
@@ -6901,6 +6904,7 @@
 		BBB7B4882A033F6200B58A5A /* KMThumbnailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMThumbnailView.swift; sourceTree = "<group>"; };
 		BBB7B48C2A0384E100B58A5A /* NSCollectionViewItem+KMExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSCollectionViewItem+KMExtension.swift"; sourceTree = "<group>"; };
 		BBB7B4902A03AD2A00B58A5A /* KMPDFEditToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditToolbar.swift; sourceTree = "<group>"; };
+		BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAdsInfo.swift; sourceTree = "<group>"; };
 		BBB9B2EA299A5D6C004F3235 /* DropboxModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DropboxModel.h; sourceTree = "<group>"; };
 		BBB9B2EB299A5D6C004F3235 /* KMCloudDownloadOperationQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMCloudDownloadOperationQueue.h; sourceTree = "<group>"; };
 		BBB9B2EC299A5D6C004F3235 /* KMCloudOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMCloudOperation.h; sourceTree = "<group>"; };
@@ -12076,6 +12080,7 @@
 				BB8810C92B4F97CF00AFA63E /* VerificationManager.m */,
 				BB0FE05E2B7351AA001E0F88 /* AIInfoManager.h */,
 				BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */,
+				BBB9428A2BA2CB6A00542373 /* KMAdsInfo.swift */,
 			);
 			path = VerificationManager;
 			sourceTree = "<group>";
@@ -15972,6 +15977,7 @@
 				ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				BB897271294DB6BE0045787C /* KMWatermarkAdjectivePlainView.swift in Sources */,
 				ADBC2D37299F0A5A006280C8 /* KMPrintHelpViewController.swift in Sources */,
+				BBB9428B2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */,
 				9FBC48BF299E23B100CA39D7 /* NSViewController+DesignToken.swift in Sources */,
 				BB6B4C0C292F62B20071CA06 /* KMPDFThumbnialPageView.swift in Sources */,
 				9FCFEC682AC2EAD500EAD2CB /* CPDFListViewColorMenuItemView.swift in Sources */,
@@ -16877,6 +16883,7 @@
 				BB8B99FE2B355E7600A066EC /* KMLeftSideViewController+Action.swift in Sources */,
 				9F1FE4C729406E4700E952CA /* CTUtil.m in Sources */,
 				BBD1F799296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
+				BBB9428C2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */,
 				9FAAA33F290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
 				ADE3C1E529A5ABC200793B13 /* KMLoginWindowController.swift in Sources */,
 				9F0CB4D62986551600007028 /* KMDesignToken+Spacing.swift in Sources */,
@@ -18653,6 +18660,7 @@
 				9F0CB49129683DEE00007028 /* KMPropertiesPanelLineSubVC.swift in Sources */,
 				BB49ECEB293F32A400C82CA2 /* KMConvertWordSettingView.swift in Sources */,
 				9F8539C829430AC400DF644E /* KMToolbarRightView.swift in Sources */,
+				BBB9428D2BA2CB6A00542373 /* KMAdsInfo.swift in Sources */,
 				ADA910302A272CEA003352F0 /* KMImageOptimization.swift in Sources */,
 				BB49ECEF293F3B0D00C82CA2 /* KMConvertOCRSettingItemView.swift in Sources */,
 				9F0CB4D72986551600007028 /* KMDesignToken+Spacing.swift in Sources */,

File diff suppressed because it is too large
+ 17 - 1102
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist