Browse Source

【综合】补充绑定设备

tangchao 4 months ago
parent
commit
ed29cbd18a
26 changed files with 806 additions and 41 deletions
  1. 2 0
      PDF Office/PDF Master/Class/Account/Manager/AccountManager.swift
  2. 47 1
      PDF Office/PDF Master/Class/Account/Tools/AccountTools.swift
  3. 26 1
      PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.swift
  4. 28 0
      PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateImageToPDFViewController.swift
  5. 4 0
      PDF Office/PDF Master/Class/GuideInfo/KMFunctionGuideWindowController.swift
  6. 120 14
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController+Action.swift
  7. 8 0
      PDF Office/PDF Master/Class/PDFTools/AddPassword/New/View/KMSecurityView.swift
  8. 221 13
      PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift
  9. 15 1
      PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/SplitWindowController.swift
  10. 9 0
      PDF Office/PDF Master/Class/PDFTools/Print/KMPrintWindowController.swift
  11. 25 0
      PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.m
  12. 9 0
      PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/View/KMRemovePasswordView.swift
  13. 8 0
      PDF Office/PDF Master/Class/PDFTools/RemovePassword/VC/KMBatchOperateRemovePasswordViewController.swift
  14. 8 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift
  15. 61 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/Base/KMPDFThumbViewBaseController.swift
  16. 14 1
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayPropertiesViewController.swift
  17. 6 1
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMSignatureAnnotationViewController.m
  18. 16 4
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMAnnotationStampViewController.swift
  19. 9 0
      PDF Office/PDF Master/Class/PDFWindowController/TabWindowController/KMTabbingHintWindowController.swift
  20. 45 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift
  21. 58 2
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift
  22. 19 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift
  23. 16 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift
  24. 5 0
      PDF Office/PDF Master/Class/Preference/Controller/KMGeneralPreferences.swift
  25. 7 0
      PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m
  26. 20 0
      PDF Office/PDF Master/Class/Tools/Search/Window/KMSearchReplaceWindowController.swift

+ 2 - 0
PDF Office/PDF Master/Class/Account/Manager/AccountManager.swift

@@ -12,4 +12,6 @@ import Cocoa
     static let manager = AccountManager()
     
     var isVip = false
+    
+    var canUseAdvanceFlag = false
 }

+ 47 - 1
PDF Office/PDF Master/Class/Account/Tools/AccountTools.swift

@@ -7,7 +7,7 @@
 
 import Cocoa
 
-class AccountTools: NSObject {
+@objcMembers class AccountTools: NSObject {
 
     @available(macOS 10.15.0, iOS 13.0, *)
     public class func canUseAdvance() async -> Bool {
@@ -22,6 +22,12 @@ class AccountTools: NSObject {
         guard let token = KMDataManager.ud_string(forKey: kAccountTokenKey), token.isEmpty == false else {
             return callback(false, nil)
         }
+        let state = Self._isConnectionAvailable()
+        if !state {
+//            self._showHud(msg: NSLocalizedString("Unable to connect to server, please check your connection.", comment: ""))
+            return callback(false, nil)
+        }
+        
         let header = ["Token" : token]
             
         let uuid = GetHardwareUUID()
@@ -31,4 +37,44 @@ class AccountTools: NSObject {
             callback(success, "")
         }
     }
+    
+    public class func canUseAdvance_success(callback: @escaping ((Bool)->Void)) {
+        guard let token = KMDataManager.ud_string(forKey: kAccountTokenKey), token.isEmpty == false else {
+            self.gotoCompare()
+            return callback(false)
+        }
+        let state = Self._isConnectionAvailable()
+        if !state {
+//            self._showHud(msg: NSLocalizedString("Unable to connect to server, please check your connection.", comment: ""))
+            self.gotoCompare()
+            return callback(false)
+        }
+        
+        let header = ["Token" : token]
+            
+        let uuid = GetHardwareUUID()
+        let params = ["device_code" : uuid]
+        // 绑定设备
+        KMHTTP.OEM_POST(urlString: kURLAPI_oemBind, parameter: params, headers: header) { success, dataModel, err in
+            if success == false {
+                self.gotoCompare()
+            }
+            callback(success)
+        }
+    }
+    
+    class func gotoCompare() {
+        KMMainThreadExecute {
+            let winC = KMPurchaseCompareWindowController.sharedInstance()
+            winC?.showWindow(nil)
+        }
+    }
+
+    
+    private class func _isConnectionAvailable() -> Bool {
+        if Reachability.forInternetConnection().currentReachabilityStatus().rawValue == 0 {
+            return false
+        }
+        return true
+    }
 }

+ 26 - 1
PDF Office/PDF Master/Class/Batch/WindowController/KMBatchOperateLeftViewController.swift

@@ -163,6 +163,20 @@ class KMBatchOperateLeftViewController: NSViewController,NSTableViewDelegate,NST
     }
     
     func chooseFile() {
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_chooseFile()
+                return
+            }
+            
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_chooseFile() {
 #if VERSION_FREE
         if !IAPProductsManager.default().isAvailableAllFunction() {
             if files.count >= 1 {
@@ -478,8 +492,19 @@ class KMBatchOperateLeftViewController: NSViewController,NSTableViewDelegate,NST
                 return
             }
         }
-        addFilesToList(addArray: pdfArray)
+        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.addFilesToList(addArray: pdfArray)
+                return
+            }
+            
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
     }
+    
     func numberOfRows(in tableView: NSTableView) -> Int {
         NotificationCenter.default.post(name: NSNotification.Name(rawValue: "KMBatchFilesCountNotification"), object: self.files, userInfo: [kObjectKey : self])
         self.deleteFileButton.isEnabled = self.files.count > 0

+ 28 - 0
PDF Office/PDF Master/Class/Batch/WindowController/VC/KMBatchOperateImageToPDFViewController.swift

@@ -383,6 +383,20 @@ class KMBatchOperateImageToPDFViewController: KMBatchOperateBaseViewController,
             self.ocrSelectBtn.state = .off
             return
         }
+        
+        AccountTools.canUseAdvance { success , err in
+            if success {
+                self.oem_buttonClicked_OCRSelect(sender)
+                return
+            }
+            
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_buttonClicked_OCRSelect(_ sender: NSButton) {
         if (sender.state == .on) {
             self.languageButton.isEnabled = true
             self.planButton.isEnabled = true
@@ -427,6 +441,20 @@ class KMBatchOperateImageToPDFViewController: KMBatchOperateBaseViewController,
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        
+        AccountTools.canUseAdvance { can , err in
+            if can {
+                self.oem_buttonClicked_ImageToPDF(sender)
+                return
+            }
+            
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_buttonClicked_ImageToPDF(_ sender: NSButton) {
         if sender.tag == 1 {
             self.choosePath = ""
             var hasTask = false

+ 4 - 0
PDF Office/PDF Master/Class/GuideInfo/KMFunctionGuideWindowController.swift

@@ -131,6 +131,10 @@ class KMFunctionGuideWindowController: NSWindowController {
                             singleTon.showWindow(nil)
                             singleTon.window?.center()
                         }
+                        
+                        AccountTools.canUseAdvance_success { can in
+                            
+                        }
                     }
 #endif
                     self?.closeAction()

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

@@ -987,23 +987,40 @@ extension KMHomeViewController {
     }
     
     func fastTool_Batch() { // Batch
-//        KMBatchWindowController.openFile(nil, .Batch)
+        //        KMBatchWindowController.openFile(nil, .Batch)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_Batch()
+            }
+        }
+    }
+    
+    func oem_fastTool_Batch() {
         let batchWindowController = KMBatchOperateWindowController.sharedWindowController
         batchWindowController.window?.makeKeyAndOrderFront("")
     }
     
     func fastTool_OCR() {   // OCR
-//        KMOCRWindowController.openFiles(window: self.view.window!)
+        //        KMOCRWindowController.openFiles(window: self.view.window!)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.kEventName = "Onbrd_OCR_BuyNow"
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_OCR()
+            }
+        }
+    }
+    
+    func oem_fastTool_OCR() {   // OCR
+    
         let openPanel = NSOpenPanel()
        
         var arr = KMImageToPDFMethod.supportedImageTypes()
@@ -1328,6 +1345,14 @@ extension KMHomeViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_FileCompare()
+            }
+        }
+    }
+    
+    func oem_fastTool_FileCompare() {    // 文件对比
         let openPanel = NSOpenPanel()
         openPanel.allowsMultipleSelection = false
         openPanel.allowedFileTypes = ["pdf"]
@@ -1427,13 +1452,21 @@ extension KMHomeViewController {
     }
     
     func fastTool_Watermark() { // 水印
-//        KMBatchWindowController.openFile(nil, .Watermark)
+        //        KMBatchWindowController.openFile(nil, .Watermark)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.kEventName = "Onbrd_Watermard_BuyNow"
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_Watermark()
+            }
+        }
+    }
+    
+    func oem_fastTool_Watermark() { // 水印
         
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = ["pdf","PDF"]
@@ -1475,13 +1508,21 @@ extension KMHomeViewController {
     }
     
     func fastTool_Background() {    // 背景
-//        KMBatchWindowController.openFile(nil, .Background)
+        //        KMBatchWindowController.openFile(nil, .Background)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.kEventName = "Onbrd_Background_BuyNow"
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_Background()
+            }
+        }
+    }
+    
+    func oem_fastTool_Background() {    // 背景
 
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = ["pdf","PDF"]
@@ -1523,13 +1564,22 @@ extension KMHomeViewController {
     }
     
     func fastTool_HeaderAndFooter() {   // 页眉页脚
-//        KMBatchWindowController.openFile(nil, .HeaderAndFooter)
+        //        KMBatchWindowController.openFile(nil, .HeaderAndFooter)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.kEventName = "Onbrd_HeaderFooter_BuyNow"
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_HeaderAndFooter()
+            }
+        }
+    }
+    
+    func oem_fastTool_HeaderAndFooter() {   // 页眉页脚
+    
 
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = ["pdf","PDF"]
@@ -1572,14 +1622,21 @@ extension KMHomeViewController {
     
     
     func fastTool_BatesCode() { // 贝茨码
-//        KMBatchWindowController.openFile(nil, .BatesCode)
+        //        KMBatchWindowController.openFile(nil, .BatesCode)
         if !IAPProductsManager.default().isAvailableAllFunction(){
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             winC?.kEventName = "Onbrd_Bates_BuyNow"
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_BatesCode()
+            }
+        }
+    }
 
+    func oem_fastTool_BatesCode() { // 贝茨码
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = ["pdf","PDF"]
         //MARK: 允许多选还是单选,如果是付费用户允许多选
@@ -1632,6 +1689,14 @@ extension KMHomeViewController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_Insert()
+            }
+        }
+    }
+    
+    func oem_fastTool_Insert() {    // 插入
 
         let openPanel = NSOpenPanel()
         openPanel.prompt = NSLocalizedString("Insert", comment: "")
@@ -1708,17 +1773,25 @@ extension KMHomeViewController {
 //    }
     
     func fastTool_BreakUp() {   // 拆分
-//        [[FMTrackEventManager manager] trackEvent:@"Onbrd" withProperties:@{@"HP_Tools":@"Split"}];
-//
-//        if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
-//            [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
-//            return;
-//        }
-//        self.isDragEntered = YES;
+        //        [[FMTrackEventManager manager] trackEvent:@"Onbrd" withProperties:@{@"HP_Tools":@"Split"}];
+        //
+        //        if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
+        //            [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+        //            return;
+        //        }
+        //        self.isDragEntered = YES;
         if !IAPProductsManager.default().isAvailableAllFunction(){
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_BreakUp()
+            }
+        }
+    }
+    
+    func oem_fastTool_BreakUp() {   // 拆分
 
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = ["pdf"]
@@ -1756,6 +1829,15 @@ extension KMHomeViewController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_MarkCipher()
+            }
+        }
+    }
+    
+    func oem_fastTool_MarkCipher() {    // 标记密文
+    
         
         let openPanel = NSOpenPanel()
         openPanel.allowsMultipleSelection = false
@@ -1835,6 +1917,14 @@ extension KMHomeViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_printBooklet()
+            }
+        }
+    }
+    func oem_fastTool_printBooklet() {
+    
 
         let openPanel = NSOpenPanel()
         openPanel.allowsMultipleSelection = false
@@ -1875,7 +1965,15 @@ extension KMHomeViewController {
             winC?.showWindow(nil)
             return
         }
-
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_printPoster()
+            }
+        }
+    }
+    
+    
+    func oem_fastTool_printPoster() {
         let openPanel = NSOpenPanel()
         openPanel.allowsMultipleSelection = false
         openPanel.allowedFileTypes = ["pdf"]
@@ -1915,6 +2013,14 @@ extension KMHomeViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_fastTool_printMultple()
+            }
+        }
+    }
+    
+    func oem_fastTool_printMultple() {
 
         let openPanel = NSOpenPanel()
         openPanel.allowsMultipleSelection = false

+ 8 - 0
PDF Office/PDF Master/Class/PDFTools/AddPassword/New/View/KMSecurityView.swift

@@ -163,6 +163,14 @@ extension KMSecurityView {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_batchButtonAction(sender)
+            }
+        }
+    }
+    
+    func oem_batchButtonAction(_ sender: Any) {
         guard let callBack = batchAction else { return }
         
         callBack(self, files)

+ 221 - 13
PDF Office/PDF Master/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -514,6 +514,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_cutAction()
+                return
+            }
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    override func oem_cutAction() {
         let pageCnt = self.pdfDocument?.pageCount ?? 0
         if (self.thumbnailView.selectionIndexPaths.count == pageCnt) {
             self._progressHUD(message: NSLocalizedString("Can not delete all pages.", comment: ""))
@@ -540,6 +553,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             return
         }
         
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_deleteAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_deleteAction() {
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
@@ -579,7 +605,18 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
-        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_leftRotateAction()
+                return
+            }
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+     
+    func oem_leftRotateAction() {
         self.trackEvent(type: .leftRotate)
         
         super.leftRotateAction()
@@ -607,6 +644,20 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             return
         }
         
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_rightRotateAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_rightRotateAction() {
+        
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
@@ -643,6 +694,18 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             return
         }
         
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_pasteAction()
+                return
+            }
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    override func oem_pasteAction() {
         if (self.canPaste()) {
             super.pasteAction()
             
@@ -671,7 +734,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
-        
+            
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_pastePage(at: index)
+                return
+            }
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_pastePage(at index: Int) {
         super.pastePage(at: index)
     }
     
@@ -686,6 +761,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_extractAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_extractAction() {
         
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
@@ -712,7 +800,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
-        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.replaceAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    override func oem_replaceAction() {
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
@@ -754,7 +854,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_splitAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
         
+    func oem_splitAction() {
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
@@ -777,7 +889,18 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
-        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_splitMethod(windowC: windowC, model: model, limit: limit)
+                return
+            }
+            KMMainThreadExecute {
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_splitMethod(windowC: KMPageEditSplitWindowController, model: KMPageEditSplitSettingModel, limit: Bool = false) {
         if self.isEmptySelection() {
             self._progressHUD(message: KMLocalizedString(Self.kNoPagesSelectedTipMessage))
             return
@@ -787,15 +910,15 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
     }
     
     func splitMenuAction() {
-//        if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
-//    #if VERSION_DMG
-//            [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
-//    #else
-//            KMToolCompareWindowController * vc = [KMToolCompareWindowController toolCompareWithType:KMCompareWithToolType_PageEdit setSelectIndex:1];
-//            [vc startModal:nil];
-//    #endif
-//            return;
-//        }
+        //        if (![IAPProductsManager defaultManager].isAvailableAllFunction) {
+        //    #if VERSION_DMG
+        //            [[KMPurchaseCompareWindowController sharedInstance] showWindow:nil];
+        //    #else
+        //            KMToolCompareWindowController * vc = [KMToolCompareWindowController toolCompareWithType:KMCompareWithToolType_PageEdit setSelectIndex:1];
+        //            [vc startModal:nil];
+        //    #endif
+        //            return;
+        //        }
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             let winC = KMPurchaseCompareWindowController.sharedInstance()
             if self.kEventTag == 1 {
@@ -806,6 +929,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_splitMenuAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_splitMenuAction() {
         
         let pdf = self.thumbnailView.document
         let pages = self.thumbnailView.selectionIndexPaths
@@ -887,6 +1023,20 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_reverseAction()
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_reverseAction() {
+    
         
         let cnt = self.thumbnailView.selectionIndexPaths.count
         if cnt < 2 {
@@ -1379,6 +1529,19 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_item_insertCustomPage(sender: sender)
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_item_insertCustomPage(sender: NSMenuItem?) {
         
         guard let doc = self.pdfDocument else {
             NSSound.beep()
@@ -1440,6 +1603,20 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_item_insertFromImage(sender: sender)
+                return
+            }
+            
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_item_insertFromImage(sender: NSMenuItem?) {
         
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = KMImageToPDFMethod.supportedImageTypes()
@@ -1502,6 +1679,20 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_item_insertFromClipboard(sender: sender)
+                return
+            }
+            KMMainThreadExecute {
+                let winC = KMPurchaseCompareWindowController.sharedInstance()
+                winC?.showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_item_insertFromClipboard(sender: NSMenuItem?) {
+    
 //        self.choosePositionWindow {[weak self] index in
             /// 插入位置
             var error: NSError?
@@ -1529,6 +1720,15 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_item_insertFromScanner(sender: sender)
+            }
+        }
+    }
+    
+    func oem_item_insertFromScanner(sender: NSMenuItem?) {
+        
         let vc = KMDeviceBrowserWindowController.shared
         vc.type = .scanner
         vc.importScannerFileCallback = { [weak self](url: NSURL) -> Void in
@@ -1606,6 +1806,14 @@ class KMPDFEditViewController: KMPDFThumbViewBaseController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_extractSelectPageItemAction()
+            }
+        }
+    }
+    
+    func oem_extractSelectPageItemAction() {
         
         let indexs = self.thumbnailView.selectionIndexPaths
         if indexs.isEmpty {

+ 15 - 1
PDF Office/PDF Master/Class/PDFTools/PageEdit/Window/SplitWindowController.swift

@@ -162,7 +162,21 @@ class SplitWindowController: KMBaseWindowController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return;
         }
-
+        
+        AccountTools.canUseAdvance { can, err in
+            if can {
+                self.oem_buttonItemClicked_ByRange(sender)
+                return
+            }
+            
+            KMMainThreadExecute {
+                self.pageFromButton.state = .off
+                KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            }
+        }
+    }
+    
+    func oem_buttonItemClicked_ByRange(_ sender: AnyObject) {
         self.byFileButton.state = .off
         self.byPageButton.state = .off
         self.byPageText.isEditable = false

+ 9 - 0
PDF Office/PDF Master/Class/PDFTools/Print/KMPrintWindowController.swift

@@ -191,6 +191,15 @@ extension KMPrintWindowController {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_showNewPrintWindowControll(inputDocument: inputDocument, inputType: inputType, inputPageRange: inputPageRange, printType: printType)
+            }
+        }
+    }
+    
+    static func oem_showNewPrintWindowControll(inputDocument: CPDFDocument?, inputType: DataNavigationViewButtonActionType = .Print, inputPageRange: KMPrintPageRange, printType: KMPrintModelType = .size) {
+        
         if inputDocument != nil {
             if !inputDocument!.allowsCopying || !inputDocument!.allowsPrinting {
                 let alert = NSAlert()

+ 25 - 0
PDF Office/PDF Master/Class/PDFTools/Print/PrintHelper/PrintManage/KMPDFPrintManageWindowController.m

@@ -606,6 +606,14 @@ typedef NS_ENUM(NSUInteger, kPageSelectStyle) {
         return;
     }
     
+    [AccountTools canUseAdvance_successWithCallback:^(BOOL can) {
+            if (can) {
+                [self oem_buttonItemClicked_Poster:sender];
+            }
+    }];
+}
+
+- (void)oem_buttonItemClicked_Poster:(NSButton *)sender {
     [self close];
     _posterVC = [[KMPDFPosterPrintWindowController alloc] initWithPDFDocument:self.pdfDocument];
     [[NSApp mainWindow] beginSheet:_posterVC.window completionHandler:^(NSModalResponse returnCode) {
@@ -624,6 +632,15 @@ typedef NS_ENUM(NSUInteger, kPageSelectStyle) {
         [winC showWindow:nil];
         return;
     }
+    [AccountTools canUseAdvance_successWithCallback:^(BOOL can) {
+            if (can) {
+                [self oem_buttonItemClicked_Multiple:sender];
+            }
+    }];
+}
+
+
+- (void)oem_buttonItemClicked_Multiple:(NSButton *)sender {
     [self close];
     _multipleVC = [[KMPDFMultiplePrintWindowController alloc] initWithPDFDocument:self.pdfDocument];
 //    [multipleVC beginSheetModalForWindow:[NSApp mainWindow] completionHandler:nil];
@@ -642,6 +659,14 @@ typedef NS_ENUM(NSUInteger, kPageSelectStyle) {
         [winC showWindow:nil];
         return;
     }
+    [AccountTools canUseAdvance_successWithCallback:^(BOOL can) {
+            if (can) {
+                [self oem_buttonItemClicked_Booklet:sender];
+            }
+    }];
+}
+
+- (void)oem_buttonItemClicked_Booklet:(NSButton *)sender {
     
     [self close];
     _bookletVC = [[KMPDFBookletWindowController alloc] initWithDocument:self.pdfDocument];

+ 9 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/New/View/KMRemovePasswordView.swift

@@ -76,6 +76,15 @@ extension KMRemovePasswordView {
             winC?.showWindow(nil)
             return
         }
+        
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_removeButtonAction(sender)
+            }
+        }
+    }
+    
+    func oem_removeButtonAction(_ sender: Any) {
 
         guard let callBack = removeAction else { return }
         

+ 8 - 0
PDF Office/PDF Master/Class/PDFTools/RemovePassword/VC/KMBatchOperateRemovePasswordViewController.swift

@@ -126,6 +126,14 @@ class KMBatchOperateRemovePasswordViewController: KMBatchOperateBaseViewControll
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_buttonAction_RemovePassword(sender)
+            }
+        }
+    }
+    
+    func oem_buttonAction_RemovePassword(_ sender: Any) {
         //MARK: 判断是否能用pro功能
         for i in 0..<self.files!.count {
             let file = self.files?[i]

+ 8 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift

@@ -905,6 +905,14 @@ extension KMLeftSideViewController: KMBotaTableViewDelegate {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_tableView(aTableView, pasteFromPasteboard: pboard)
+            }
+        }
+    }
+    
+    func oem_tableView(_ aTableView: NSTableView, pasteFromPasteboard pboard: NSPasteboard?) {
         
         if aTableView.isEqual(to: self.thumbnailTableView) {
             if self._copysPages.count > 0 {

+ 61 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Thumbnail/Base/KMPDFThumbViewBaseController.swift

@@ -162,6 +162,14 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_insertFileAction()
+            }
+        }
+    }
+    
+    func oem_insertFileAction() {
         
         let panel = NSOpenPanel()
         panel.allowedFileTypes = ["pdf"]
@@ -216,6 +224,14 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_insertBlankPageAction()
+            }
+        }
+    }
+    
+    func oem_insertBlankPageAction() {
         
         let index = self.getInsertIndex()
         guard let page = self.thumbnailView.document?.page(at: UInt(index)) else {
@@ -272,6 +288,15 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_cutAction()
+            }
+        }
+    }
+    
+    func oem_cutAction() {
+    
         let indexpaths = self.thumbnailView.selectionIndexPaths
         self._cutPages(indexpaths: indexpaths)
         self.cutAfter(indexpaths: indexpaths)
@@ -288,6 +313,14 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_copyAction()
+            }
+        }
+    }
+    
+    func oem_copyAction() {
         
         let indexpaths = self.thumbnailView.selectionIndexPaths
         self._copyPages(indexpaths: indexpaths)
@@ -321,6 +354,14 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_pasteAction()
+            }
+        }
+    }
+    
+    func oem_pasteAction() {
         
         if (!self.canPaste()) {
             KMPrint("no can paste.")
@@ -358,14 +399,23 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
     
     // 提取 指定的item
     public func extractActionIndexpaths(indexpaths: Set<IndexPath>) {
-//        let pageIndexs = self.indexpathsToIndexs(indexpaths: indexpaths)
-//        var fileName = self.thumbnailView.document?.documentURL.deletingPathExtension().lastPathComponent
-//        fileName?.append(KMPageRangeTools.newParseSelectedIndexs(selectedIndex: pageIndexs.sorted()))
+        //        let pageIndexs = self.indexpathsToIndexs(indexpaths: indexpaths)
+        //        var fileName = self.thumbnailView.document?.documentURL.deletingPathExtension().lastPathComponent
+        //        fileName?.append(KMPageRangeTools.newParseSelectedIndexs(selectedIndex: pageIndexs.sorted()))
         if IAPProductsManager.default().isAvailableAllFunction() == false {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_extractActionIndexpaths(indexpaths: indexpaths)
+            }
+        }
+    }
+    
+    func oem_extractActionIndexpaths(indexpaths: Set<IndexPath>) {
+        
         var ips: [Int] = []
         for ip in self.thumbnailView.selectionIndexPaths.sorted() {
             ips.append(ip.item)
@@ -395,6 +445,14 @@ class KMPDFThumbViewBaseController: KMBaseViewController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_replaceAction()
+            }
+        }
+    }
+    
+    func oem_replaceAction() {
         self.km_open_file_multi {  [unowned self] index, params in
             if (self.fetchProgressBlockParamsIsPasswordFile(params: params)) { // 加密文档进度回调
                 return

+ 14 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayPropertiesViewController.swift

@@ -564,7 +564,7 @@ class KMPageDisplayPropertiesButton: NSButton {
     }
     
     @IBAction private func splitViewButtonAction(_ sender: KMPageDisplayPropertiesButton) {
-//        [[FMTrackEventManager manager] trackEvent:@"SubTbr_PageDisplay" withProperties:@{@"SubTbr_Btn":@"Btn_SubTbr_PageDisplay_ViewSetting_SplitView"}];
+        //        [[FMTrackEventManager manager] trackEvent:@"SubTbr_PageDisplay" withProperties:@{@"SubTbr_Btn":@"Btn_SubTbr_PageDisplay_ViewSetting_SplitView"}];
         FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_PageDisplay", withProperties: ["SubTbr_Btn": "Btn_SubTbr_PageDisplay_ViewSetting_SplitView"])
         
         if sender.tag > 0 && IAPProductsManager.default().isAvailableAllFunction() == false {
@@ -574,6 +574,19 @@ class KMPageDisplayPropertiesButton: NSButton {
             return
         }
         
+        if sender.tag > 0 {
+            AccountTools.canUseAdvance_success { can in
+                if can {
+                    self.oem_splitViewButtonAction(sender)
+                }
+            }
+            return
+        }
+        self.oem_splitViewButtonAction(sender)
+    }
+    
+    func oem_splitViewButtonAction(_ sender: KMPageDisplayPropertiesButton) {
+        
         let menuItem = NSMenuItem()
         switch sender.tag {
         case 0:

+ 6 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Signature/KMSignatureAnnotationViewController.m

@@ -157,7 +157,12 @@ KMSigntureViewItemDelegate>
         [winC showWindow:nil];
         return;
     }
-    [self showSignatureWindow];
+    
+    [AccountTools canUseAdvance_successWithCallback:^(BOOL can) {
+        if (can) {
+            [self showSignatureWindow];
+        }
+    }];
 }
 
 - (void)showSignatureWindow{

+ 16 - 4
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/StampList/KMAnnotationStampViewController.swift

@@ -293,10 +293,14 @@ let KMPDFDynamicStampNeedAuthorKey1 = "km_pdfview_dynamic_stamp_need_author"
                 winC?.showWindow(nil)
                 return
             }
-            if downEntered && (blockSelf.stampType != .dynamic) {
-                blockSelf.leftImageView.isHidden = false
-                blockSelf.rightImageView.isHidden = true
-                blockSelf.stampType = .dynamic
+            AccountTools.canUseAdvance_success { can in
+                if can {
+                    if downEntered && (blockSelf.stampType != .dynamic) {
+                        blockSelf.leftImageView.isHidden = false
+                        blockSelf.rightImageView.isHidden = true
+                        blockSelf.stampType = .dynamic
+                    }
+                }
             }
         }
 //        dynamicLabel.stringValue = NSLocalizedString("Dynamic", comment: "")
@@ -1031,6 +1035,14 @@ let KMPDFDynamicStampNeedAuthorKey1 = "km_pdfview_dynamic_stamp_need_author"
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_addButtonAction(sender)
+            }
+        }
+    }
+    
+    func oem_addButtonAction(_ sender: NSButton) {
         
         addButtonLayer?.frame = CGRect(x: 0, y: 0, width: addButton.bounds.width, height: addButton.bounds.height)
         addButtonLayer?.isHidden = false

+ 9 - 0
PDF Office/PDF Master/Class/PDFWindowController/TabWindowController/KMTabbingHintWindowController.swift

@@ -93,6 +93,15 @@ class KMTabbingHintWindowController: NSWindowController{
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_buttonClicked_NewTabInWindowButton(sender)
+            }
+        }
+    }
+    
+    func oem_buttonClicked_NewTabInWindowButton(_ sender: NSButton) {
+    
         sender.state = NSControl.StateValue.on
         self.newWindowButton.state = .off
     }

+ 45 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -3048,6 +3048,16 @@ extension KMMainViewController {
             winC?.showWindow(nil)
             return
         }
+        
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_showOCRWindow()
+            }
+        }
+    }
+    
+    func oem_showOCRWindow() {
+    
         let com = KMOCRPDFWindowController(cpdfDocument: self.listView.document!, pwd: self.listView.document?.password ?? "")
         com.currentIndexPage = self.listView.currentPageIndex
         self.km_beginSheet(windowC: com)
@@ -3062,6 +3072,15 @@ extension KMMainViewController {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_extractImageAction(num: num)
+            }
+        }
+    }
+    func oem_extractImageAction(num: Int) {
+    
+        
         if !(self.listView.document.allowsPrinting || self.listView.document.allowsCopying) {
             let alert = NSAlert()
             alert.alertStyle = .critical
@@ -3226,6 +3245,15 @@ extension KMMainViewController {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_imageAnnotation(sender)
+            }
+        }
+    }
+    
+    func oem_imageAnnotation(_ sender: Any) {
+        
         let accessoryCtr = KMImageAccessoryController()
         let openPanel = NSOpenPanel()
         openPanel.allowedFileTypes = KMImageAccessoryController.supportedImageTypes()
@@ -3293,6 +3321,14 @@ extension KMMainViewController {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_tableAnnotation(sender)
+            }
+        }
+    }
+    func oem_tableAnnotation(_ sender: Any) {
+    
         listView.addAnnotationWithTable()
         openRightPane()
     }
@@ -3792,6 +3828,15 @@ extension KMMainViewController : KMToolbarViewControllerDelegate {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_toolbarViewController(viewController, shareFlatten: item)
+            }
+        }
+    }
+    
+    func oem_toolbarViewController(_ viewController: KMToolbarViewController, shareFlatten item: NSMenuItem) {
+    
         self.shareFlatten(sender: viewController)
     }
     

+ 58 - 2
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -99,7 +99,13 @@ extension KMMainViewController: KMSystemFileMenuProtocol {
                 KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
                 return
             }
-            self.saveAsFlattenedPDFAction()
+            
+            AccountTools.canUseAdvance_success { can in
+                if can {
+                    self.saveAsFlattenedPDFAction()
+                }
+            }
+            
         }
     }
     
@@ -397,7 +403,12 @@ extension KMMainViewController {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
-        self.splitView(withTag: item.tag)
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.splitView(withTag: item.tag)
+            }
+        }
+        
     }
     
     @IBAction func themesColor(_ sender: Any?) {
@@ -412,6 +423,18 @@ extension KMMainViewController {
                 return
             }
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_themesColor(sender)
+            }
+        }
+    }
+    func oem_themesColor(_ sender: Any?) {
+        guard let item = sender as? NSMenuItem else {
+            NSSound.beep()
+            return
+        }
+        let mode = item.tag
         if mode == 0 {
             self.listView.displayMode = .normal
         } else if mode == 1 {
@@ -1225,6 +1248,14 @@ extension KMMainViewController: KMSystemToolMenuProtocol {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_rotateLeft(sender)
+            }
+        }
+    }
+    
+    func oem_rotateLeft(_ sender: Any?) {
         
         Task { @MainActor in
             let page : CPDFPage = self.listView?.currentPage() ?? CPDFPage()
@@ -1244,6 +1275,14 @@ extension KMMainViewController: KMSystemToolMenuProtocol {
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_rotateRight(sender)
+            }
+        }
+    }
+    
+    func oem_rotateRight(_ sender: Any?) {
         
         Task { @MainActor in
             let page : CPDFPage = self.listView?.currentPage() ?? CPDFPage()
@@ -1260,6 +1299,14 @@ extension KMMainViewController: KMSystemToolMenuProtocol {
             KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_rotateAllLeft(sender)
+            }
+        }
+    }
+    
+    func oem_rotateAllLeft(_ sender: Any?) {
         
         Task { @MainActor in
             var pageItems: [KMThumbnailPageItem] = []
@@ -1281,6 +1328,15 @@ extension KMMainViewController: KMSystemToolMenuProtocol {
             return
         }
         
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_rotateAllRight(sender)
+            }
+        }
+    }
+    
+    func oem_rotateAllRight(_ sender: Any?) {
+        
         Task { @MainActor in
             var pageItems: [KMThumbnailPageItem] = []
             for index in 0 ... self.listView.document.pageCount - 1 {

+ 19 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift

@@ -342,6 +342,13 @@ extension KMMainViewController: KMToolbarControllerDelegate {
                 winC?.showWindow(nil)
                 return
             }
+            
+            AccountTools.canUseAdvance_success { can in
+                if can {
+                    self.oem_changeAnnotationModeAction(item: item)
+                }
+            }
+            return
         } else {
             let type = CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown
             if type == .signature {
@@ -351,9 +358,21 @@ extension KMMainViewController: KMToolbarControllerDelegate {
                     winC?.showWindow(nil)
                     return
                 }
+                
+                AccountTools.canUseAdvance_success { can in
+                    if can {
+                        self.oem_changeAnnotationModeAction(item: item)
+                    }
+                }
+                return
             }
         }
         
+        self.oem_changeAnnotationModeAction(item: item)
+    }
+    
+    func oem_changeAnnotationModeAction(item: KMToolbarClickButton) {
+        
         if (self.model.rightMouseEventing) {
             self.model.rightMouseEventing = false
         }

+ 16 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -708,6 +708,14 @@ import Cocoa
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_enterRedact()
+            }
+        }
+    }
+    
+    func oem_enterRedact() {
         
         if self.listView.document?.allowsPrinting == false || self.listView.document?.allowsCopying == false {
             Task {
@@ -1263,6 +1271,14 @@ import Cocoa
             winC?.showWindow(nil)
             return
         }
+        AccountTools.canUseAdvance_success { can in
+            if can {
+                self.oem_showDigitalSignWindow(withFilePathURL: fileURL)
+            }
+        }
+    }
+    
+    func oem_showDigitalSignWindow(withFilePathURL fileURL: URL) {
         
         if hasShowDigitalSign() {
             self.exitDigitalSign()

+ 5 - 0
PDF Office/PDF Master/Class/Preference/Controller/KMGeneralPreferences.swift

@@ -212,6 +212,11 @@ class KMGeneralPreferences: NSViewController {
         }
     }
     
+    func oem_openTabButtonAction(_ sender: AnyObject?) {
+        
+    }
+        
+    
     @IBAction func showConvertMenuButtonAction(_ sender: AnyObject?) {
         if self.showConvertMenuButton.state == .on {
             KMStatusBar.system().isShow = true

+ 7 - 0
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m

@@ -533,6 +533,13 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
     if ([AccountManager manager].isVip) {
         return true;
     }
+    
+//    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
+//    [AccountTools canUseAdvanceWithCallback:^(BOOL success, NSString * _Nullable err) {
+//        dispatch_semaphore_signal(sema);
+//    }];
+//    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
+    
     VerificationManager *tManager = [VerificationManager manager];
     BOOL tLicenseOK = NO;
     switch ([tManager status]) {

+ 20 - 0
PDF Office/PDF Master/Class/Tools/Search/Window/KMSearchReplaceWindowController.swift

@@ -419,6 +419,26 @@ class KMSearchReplaceWindowController: NSWindowController {
                 self.window?.addChildWindow(win, ordered: .above)
                 return
             }
+            
+            if AccountManager.manager.canUseAdvanceFlag == false {
+                Task {
+                    let canUseAdvance = await AccountTools.canUseAdvance()
+                    AccountManager.manager.canUseAdvanceFlag = canUseAdvance
+                    
+                    if canUseAdvance {
+                        self.switchType(type, animate: animate)
+                        AccountManager.manager.canUseAdvanceFlag = false
+                    } else {
+                        let winC = KMPurchaseCompareWindowController.sharedInstance()
+                        winC?.showWindow(nil)
+                        guard let win = winC?.window else {
+                            return
+                        }
+                        self.window?.addChildWindow(win, ordered: .above)
+                    }
+                }
+                return
+            }
         }
         
         self.type_ = type