-
-
diff --git a/media_servers/README.md b/plugins/README.md
similarity index 66%
rename from media_servers/README.md
rename to plugins/README.md
index 042282a..36fff6d 100644
--- a/media_servers/README.md
+++ b/plugins/README.md
@@ -1,21 +1,21 @@
-# 媒体库模块开发指南
+# 插件开发指南
-本指南介绍如何开发自定义媒体库模块,你可以通过添加新的媒体库模块来扩展项目功能。
+本指南介绍如何开发自定义插件,你可以通过添加新的插件来扩展项目功能。
## 基本结构
-* 模块位于 `media_servers` 目录下.
-* 每个模块是一个 `.py` 文件 (例如 `emby.py`, `plex.py`),文件名小写。
-* 每个模块文件包含一个与文件名对应的首字母大写命名类(例如 `emby.py` 中的 `Emby` 类)。
+* 插件位于 `media_servers` 目录下.
+* 每个插件是一个 `.py` 文件 (例如 `emby.py`, `plex.py`),文件名小写。
+* 每个插件文件包含一个与文件名对应的首字母大写命名类(例如 `emby.py` 中的 `Emby` 类)。
-## 模块要求
+## 插件要求
-每个模块类必须包含以下内容:
+每个插件类必须包含以下内容:
-* **`default_config`**:字典,包含模块所需参数及其默认值。例如:
+* **`default_config`**:字典,包含插件所需参数及其默认值。例如:
```python
- # 该模块必须配置的键,值可留空
+ # 该插件必须配置的键,值可留空
default_config = {"url": "", "token": ""}
```
@@ -25,11 +25,11 @@
1. 检查 `kwargs` 是否包含所有 `default_config` 中的参数,缺少参数则打印警告。
2. 若参数完整,尝试连接服务器并验证配置,成功则设置 `self.is_active = True`。
-* **`run(self, task)`**:整个模块入口函数,处理模块逻辑。
+* **`run(self, task, **kwargs)`**:整个插件入口函数,处理插件逻辑。
* `task` 是一个字典,包含任务信息。如果需要修改任务参数,返回修改后的 `task` 字典;
* 无修改则不返回或返回 `None`。
-## 模块示例
+## 插件示例
参考 [emby.py](emby.py)
@@ -43,7 +43,7 @@
### 最佳实践
-requests 部分使用 try-except 块,以防模块请求出错中断整个转存任务。
+requests 部分使用 try-except 块,以防插件请求出错中断整个转存任务。
```python
try:
@@ -56,7 +56,7 @@ except requests.exceptions.RequestException as e:
return False
```
-## 使用自定义模块
+## 使用自定义插件
放到 `/media_servers` 目录即可识别,如果你使用 docker 运行:
@@ -67,11 +67,11 @@ docker run -d \
# ...
```
-如果你有写自定义模块的能力,相信你也知道如何挂载自定义模块,算我啰嗦。🙃
+如果你有写自定义插件的能力,相信你也知道如何挂载自定义插件,算我啰嗦。🙃
## 配置文件
-在 `quark_config.json` 的 `media_servers` 中配置模块参数:
+在 `quark_config.json` 的 `media_servers` 中配置插件参数:
```json
{
@@ -84,10 +84,11 @@ docker run -d \
}
```
-当模块代码正确赋值 `default_config` 时,首次运行会自动补充缺失的键。
+当插件代码正确赋值 `default_config` 时,首次运行会自动补充缺失的键。
## 🤝 贡献者
-| 模块 | 说明 | 贡献者 |
+| 插件 | 说明 | 贡献者 |
| ------- | -------------------- | --------------------------------------- |
-| plex.py | 自动刷新 Plex 媒体库 | [zhazhayu](https://github.com/zhazhayu) |
\ No newline at end of file
+| plex.py | 自动刷新 Plex 媒体库 | [zhazhayu](https://github.com/zhazhayu) |
+| alist_strm_gen.py | 自动生成strm | [xiaoQQya](https://github.com/xiaoQQya) |
\ No newline at end of file
diff --git a/media_servers/_priority.json b/plugins/_priority.json
similarity index 100%
rename from media_servers/_priority.json
rename to plugins/_priority.json
diff --git a/media_servers/alist.py b/plugins/alist.py
similarity index 100%
rename from media_servers/alist.py
rename to plugins/alist.py
diff --git a/media_servers/alist_strm.py b/plugins/alist_strm.py
similarity index 100%
rename from media_servers/alist_strm.py
rename to plugins/alist_strm.py
diff --git a/media_servers/alist_strm_gen.py b/plugins/alist_strm_gen.py
similarity index 98%
rename from media_servers/alist_strm_gen.py
rename to plugins/alist_strm_gen.py
index bc57a51..5106a88 100644
--- a/media_servers/alist_strm_gen.py
+++ b/plugins/alist_strm_gen.py
@@ -40,7 +40,7 @@ class Alist_strm_gen:
if key in kwargs:
setattr(self, key, kwargs[key])
else:
- print(f"{self.__class__.__name__} 模块缺少必要参数: {key}")
+ print(f"{self.plugin_name} 模块缺少必要参数: {key}")
if self.url and self.token and self.storage_id:
success, result = self.storage_id_to_path(self.storage_id)
if success:
diff --git a/media_servers/emby.py b/plugins/emby.py
similarity index 96%
rename from media_servers/emby.py
rename to plugins/emby.py
index ef1e30f..09d9374 100644
--- a/media_servers/emby.py
+++ b/plugins/emby.py
@@ -16,11 +16,11 @@ class Emby:
def __init__(self, **kwargs):
self.plugin_name = self.__class__.__name__.lower()
if kwargs:
- for key, value in self.default_config.items():
+ for key, _ in self.default_config.items():
if key in kwargs:
setattr(self, key, kwargs[key])
else:
- print(f"{self.__class__.__name__} 模块缺少必要参数: {key}")
+ print(f"{self.plugin_name} 模块缺少必要参数: {key}")
if self.url and self.token:
if self.get_info():
self.is_active = True
diff --git a/media_servers/plex.py b/plugins/plex.py
similarity index 100%
rename from media_servers/plex.py
rename to plugins/plex.py
diff --git a/quark_auto_save.py b/quark_auto_save.py
index 85f2589..26fc86e 100644
--- a/quark_auto_save.py
+++ b/quark_auto_save.py
@@ -714,13 +714,13 @@ class Quark:
return is_rename_count > 0
-def load_media_servers(media_servers_config, media_servers_dir="media_servers"):
- media_servers = {}
+def load_plugins(plugins_config, plugins_dir="plugins"):
+ plugins = {}
all_modules = [
- f.replace(".py", "") for f in os.listdir(media_servers_dir) if f.endswith(".py")
+ f.replace(".py", "") for f in os.listdir(plugins_dir) if f.endswith(".py")
]
# 调整模块优先级
- priority_path = os.path.join(media_servers_dir, "_priority.json")
+ priority_path = os.path.join(plugins_dir, "_priority.json")
try:
with open(priority_path, encoding="utf-8") as f:
priority_modules = json.load(f)
@@ -730,21 +730,21 @@ def load_media_servers(media_servers_config, media_servers_dir="media_servers"):
] + [module for module in all_modules if module not in priority_modules]
except (FileNotFoundError, json.JSONDecodeError):
priority_modules = []
- print(f"🧩 载入媒体库模块")
+ print(f"🧩 载入插件")
for module_name in all_modules:
try:
- module = importlib.import_module(f"{media_servers_dir}.{module_name}")
+ module = importlib.import_module(f"{plugins_dir}.{module_name}")
ServerClass = getattr(module, module_name.capitalize())
# 检查配置中是否存在该模块的配置
- if module_name in media_servers_config:
- server_config = media_servers_config[module_name]
- media_servers[module_name] = ServerClass(**server_config)
+ if module_name in plugins_config:
+ server_config = plugins_config[module_name]
+ plugins[module_name] = ServerClass(**server_config)
else:
- media_servers_config[module_name] = ServerClass().default_config
+ plugins_config[module_name] = ServerClass().default_config
except (ImportError, AttributeError) as e:
print(f"载入模块 {module_name} 失败: {e}")
print()
- return media_servers
+ return plugins
def verify_account(account):
@@ -804,7 +804,7 @@ def do_sign(account):
def do_save(account, tasklist=[]):
- media_servers = load_media_servers(CONFIG_DATA.get("media_servers", {}))
+ plugins = load_plugins(CONFIG_DATA.get("plugins", {}))
print(f"转存账号: {account.nickname}")
# 获取全部保存目录fid
account.update_savepath_fid(tasklist)
@@ -835,30 +835,28 @@ def do_save(account, tasklist=[]):
print(f"正则替换: {task['replace']}")
if task.get("enddate"):
print(f"任务截止: {task['enddate']}")
- if task.get("media_id"):
- print(f"刷媒体库: {task['media_id']}")
if task.get("ignore_extension"):
print(f"忽略后缀: {task['ignore_extension']}")
if task.get("update_subdir"):
print(f"更子目录: {task['update_subdir']}")
print()
- is_new = account.do_save_task(task)
+ is_new_tree = account.do_save_task(task)
is_rename = account.do_rename_task(task)
- # 调用媒体库模块
- print(f"🧩 调用媒体库模块")
- for server_name, media_server in media_servers.items():
- if hasattr(media_server, "default_task_config") and not task.get(
+ # 调用插件
+ print(f"🧩 调用插件")
+ for plugin_name, plugin in plugins.items():
+ if hasattr(plugin, "default_task_config") and not task.get(
"addition", {}
- ).get(server_name):
+ ).get(plugin_name):
task.setdefault("addition", {})[
- server_name
- ] = media_server.default_task_config
- if media_server.is_active and (is_new or is_rename):
- task = media_server.run(task, account=account, tree=is_new) or task
+ plugin_name
+ ] = plugin.default_task_config
+ if plugin.is_active and (is_new_tree or is_rename):
+ task = plugin.run(task, account=account, tree=is_new_tree) or task
print()
-def reaking_change_update():
+def breaking_change_update():
global CONFIG_DATA
# print("Update config v0.3.6.1 to 0.3.7")
if CONFIG_DATA.get("emby"):
@@ -900,7 +898,7 @@ def main():
print(f"⚙️ 正从 {config_path} 文件中读取配置")
with open(config_path, "r", encoding="utf-8") as file:
CONFIG_DATA = json.load(file)
- reaking_change_update()
+ breaking_change_update()
cookie_val = CONFIG_DATA.get("cookie")
if not CONFIG_DATA.get("magic_regex"):
CONFIG_DATA["magic_regex"] = MAGIC_REGEX