diff --git a/app/modules/filemanager/storages/alipan.py b/app/modules/filemanager/storages/alipan.py index c9f13db4..457c8954 100644 --- a/app/modules/filemanager/storages/alipan.py +++ b/app/modules/filemanager/storages/alipan.py @@ -361,7 +361,8 @@ class AliPan(StorageBase): parent_fileid="root", type="dir", path="/资源库/", - name="资源库" + name="资源库", + basename="资源库" ), schemas.FileItem( storage=self.schema.value, @@ -370,9 +371,13 @@ class AliPan(StorageBase): parent_fileid="root", type="dir", path="/备份盘/", - name="备份盘" + name="备份盘", + basename="备份盘" ) ] + # 如果本身是文件 + if fileitem.type == "file": + return [fileitem] # 返回数据 ret_items = [] # 分页获取 @@ -413,6 +418,7 @@ class AliPan(StorageBase): type="dir" if fileinfo.get("type") == "folder" else "file", path=f"{fileitem.path}{fileinfo.get('name')}" + ("/" if fileinfo.get("type") == "folder" else ""), name=fileinfo.get("name"), + basename=Path(fileinfo.get("name")).stem, size=fileinfo.get("size"), extension=fileinfo.get("file_extension"), modify_time=StringUtils.str_to_timestamp(fileinfo.get("updated_at")), @@ -604,7 +610,14 @@ class AliPan(StorageBase): if not download_url: logger.warn(f"{fileitem.path} 未获取到下载链接") return None - res = RequestUtils().get_res(download_url) + res = RequestUtils(headers={ + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Referer": "https://www.alipan.com/", + "Sec-Fetch-Dest": "iframe", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "cross-site", + "User-Agent": settings.USER_AGENT + }).get_res(download_url) if res: path = settings.TEMP_PATH / fileitem.name with path.open("wb") as f: diff --git a/app/modules/filemanager/storages/rclone.py b/app/modules/filemanager/storages/rclone.py index 1e794cb5..fc95e9bf 100644 --- a/app/modules/filemanager/storages/rclone.py +++ b/app/modules/filemanager/storages/rclone.py @@ -96,15 +96,17 @@ class Rclone(StorageBase): logger.error(f"rclone存储检查失败:{err}") return False - def list(self, fileitm: schemas.FileItem) -> Optional[List[schemas.FileItem]]: + def list(self, fileitem: schemas.FileItem) -> Optional[List[schemas.FileItem]]: """ 浏览文件 """ + if fileitem.type == "file": + return [fileitem] try: ret = subprocess.run( [ 'rclone', 'lsjson', - f'MP:{fileitm.path}' + f'MP:{fileitem.path}' ], capture_output=True, startupinfo=self.__get_hidden_shell() diff --git a/app/modules/filemanager/storages/u115.py b/app/modules/filemanager/storages/u115.py index 50877049..89be5142 100644 --- a/app/modules/filemanager/storages/u115.py +++ b/app/modules/filemanager/storages/u115.py @@ -162,6 +162,8 @@ class U115Pan(StorageBase, metaclass=Singleton): if not self.__init_cloud(): return [] try: + if fileitem.type == "file": + return [fileitem] items = self.cloud.storage().list(dir_id=fileitem.fileid) return [schemas.FileItem( storage=self.schema.value, diff --git a/app/modules/webpush/__init__.py b/app/modules/webpush/__init__.py index 37d839b2..f158666b 100644 --- a/app/modules/webpush/__init__.py +++ b/app/modules/webpush/__init__.py @@ -48,9 +48,10 @@ class WebPushModule(_ModuleBase, _MessageBase): for conf in self._configs.values(): if not self.checkMessage(message, conf.name): continue - webpush_users = conf.config.get("WEBPUSH_USERNAME") + webpush_users = conf.config.get("WEBPUSH_USERNAME") or "" if webpush_users: - if message.username and message.username != message.userid: + # 设定了接收用户时,非该用户的消息不接收 + if not message.userid or message.userid not in webpush_users.split(","): continue if not message.title and not message.text: logger.warn("标题和内容不能同时为空")