dukuisong пре 17 часа
родитељ
комит
be139ff631
4 измењених фајлова са 52 додато и 17 уклоњено
  1. 9 4
      core/api_app.py
  2. 32 1
      core/monitor_file.py
  3. 3 5
      office_helper.py
  4. 8 7
      setup_wps/init_wps_plug.py

+ 9 - 4
core/api_app.py

@@ -1,7 +1,9 @@
+import gc
 import logging
 import os
 import shutil
 import socket
+import winreg
 
 import pythoncom
 import pywintypes
@@ -54,19 +56,22 @@ def open_file_by_wps(file_path):
     try:
         if ext in ['csv', 'xlsx', 'xls']:
             # wps = win32com.client.gencache.EnsureDispatch(file_type_map['xlsx'][0])
-            wps = win32com.client.Dispatch(file_type_map[ext][0])
-
+            wps = win32com.client.DispatchEx(file_type_map[ext][0])
             wps.Visible = True
             getattr(wps, file_type_map[ext][1]).Open(os.path.abspath(file_path))
         else:
-            wps = win32com.client.Dispatch(file_type_map[ext][0])
+            wps = win32com.client.DispatchEx(file_type_map[ext][0])
             wps.Visible = True
             getattr(wps, file_type_map[ext][1]).open(os.path.abspath(file_path))
     except pywintypes.com_error as e:
         logger.exception(e)
 
+    finally:
+        del wps
+        gc.collect()
+        pythoncom.CoUninitialize()
+
     bring_wps_window_to_front(file_path)
-    pythoncom.CoUninitialize()
 
     return jsonify({'code': 1000, 'msg': '操作完成'})
 

+ 32 - 1
core/monitor_file.py

@@ -3,7 +3,7 @@ import time
 from threading import Timer
 
 from watchdog.observers import Observer
-from watchdog.events import FileSystemEventHandler
+from watchdog.events import FileSystemEventHandler, FileSystemEvent
 from tools.logger_handle import logger
 
 
@@ -13,8 +13,30 @@ class FileSaveHandler(FileSystemEventHandler):
         self.debounce_timers = {}
         self.upload_cache = {}  # 文件路径 → 上次上传时间戳
         self.debounce_delay = 5  # 延迟秒数
+        self._event_cache = {}
         super().__init__()
 
+    def _should_process(self, event_path):
+        now = time.time()
+        last_time = self._event_cache.get(event_path, 0)
+        if now - last_time < 5:  # 5秒内重复事件,忽略
+            return False
+        self._event_cache[event_path] = now
+        return True
+
+    def on_created(self, event: FileSystemEvent) -> None:
+        if event.is_directory:
+            return
+        filepath = event.src_path
+        ext = os.path.splitext(event.src_path)[-1]
+        if '~$' in event.src_path:
+            return
+
+        if ext not in ['.docx', '.doc', '.ppt', '.pptx', '.xls', '.xlsx']:
+            return
+
+        self._should_process(event.src_path)
+
     def on_modified(self, event):
         if event.is_directory:
             return
@@ -26,6 +48,9 @@ class FileSaveHandler(FileSystemEventHandler):
         if ext not in ['.docx', '.doc', '.ppt', '.pptx', '.xls', '.xlsx']:
             return
 
+        if not self._should_process(event.src_path):
+            return
+
         def do_upload():
             if not os.path.exists(filepath):
                 return
@@ -37,6 +62,12 @@ class FileSaveHandler(FileSystemEventHandler):
 
             logger.info(f"[文件修改] 文件已保存: {filepath}, 执行上传操作。")
             res = self.serve_client.upload_file(filepath)
+            metadata = self.serve_client.load_metadata(filepath + '.metadata')
+            os.remove(filepath)
+            os.remove(filepath + '.metadata')
+            storage_path = os.path.dirname(filepath)
+            self.serve_client.download_file(metadata['file_id'], storage_path)
+
             if res:
                 logger.info(f'文件{filepath}上传成功')
             else:

+ 3 - 5
office_helper.py

@@ -2,14 +2,13 @@ import functools
 import json
 import os.path
 import sys
-
 import threading
 
+from config import dl_code
 from core.api_app import start_flask
 from core.monitor_file import start_watchdog
-from config import base_path, dl_code
-from tools.serve_client import ServerClient
 from tools.logger_handle import logger
+from tools.serve_client import ServerClient
 
 # 初始化 Flask 应用
 
@@ -46,8 +45,6 @@ def start_all_services(serve_client, work_path):
     threading.Thread(target=start_flask, args=[serve_client, work_path], daemon=True).start()
     # 启动文件监控
     threading.Thread(target=start_watchdog, args=[serve_client, work_path], daemon=True).start()
-    # 启动文档内容检查
-    # threading.Thread(target=check_for_changes, daemon=True).start()
     logger.info('server running')
     while True:
         a = 0
@@ -64,6 +61,7 @@ if __name__ == "__main__":
 
 
     with open(f'{dl_code}:\\ProgramData\\OfficeAssistant\\config.json', 'r', encoding='utf-8') as f:
+    # with open(f'config.json', 'r', encoding='utf-8') as f:
         args = json.load(f)
 
     client = ServerClient(args['server'], args['username'], args['password'])

+ 8 - 7
setup_wps/init_wps_plug.py

@@ -1,12 +1,16 @@
+import base64
 import json
+import os
 
 import requests
 
-import base64
+url = "ksowpscloudsvr://start=RelayHttpServer&serverId=aef5ac0d-d5a3-49ee-b02f-c31eeb063f9b"
+
+os.startfile(url)
 
-payload = {'data': {"cmd": "enable", "name": "wpsPlugin", "url": "http://172.10.3.110:3000/", "addonType": "wps",
+payload = {'data': {"cmd": "enable", "name": "jx_office", "url": "http://120.195.49.22:7212/", "addonType": "wps",
                     "online": "true"},
-           'serverId': '524ef80e-7ccd-43af-9fcb-69f3b0269730'}
+           'serverId': 'aef5ac0d-d5a3-49ee-b02f-c31eeb063f9b'}
 
 payload['data'] = base64.b64encode(json.dumps(payload['data']).encode('utf-8')).decode('utf-8')
 
@@ -16,7 +20,4 @@ headers = {
 }
 resp = requests.post('http://localhost:58890/deployaddons/runParams', data=json.dumps(payload), headers=headers)
 
-
-# print(resp.text)
-
-
+a = resp.text