Skip to content

Commit 30ceed8

Browse files
committed
v0.9.0
- 配置文件版本号1.5.0 - 更新README - 配置文件中变量名可以省略__
1 parent 486e789 commit 30ceed8

File tree

13 files changed

+98
-42
lines changed

13 files changed

+98
-42
lines changed

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@
4444
- `setting.download_path`: 下载器下载保存位置。临时位置,移动后将会删除
4545
- `setting.save_path`: 重命名后移动到位置。此时将会改名
4646
- `plugin.feed`中的`builtin_mikan_rss.py`插件 : 可选,内置自动订阅插件
47-
- `vars.__url__`: 订阅地址,如Mikan的rss订阅地址
48-
- `vars.__cron__`: 订阅时间,Cron格式,参考[Feed订阅插件帮助](assets/plugin/feed/README.md)
47+
- `vars.__url`: 订阅地址,如Mikan的rss订阅地址
48+
- `vars.__cron`: 订阅时间,Cron格式,参考[Feed订阅插件帮助](assets/plugin/feed/README.md)
4949
- 其余配置项根据需求修改
5050

5151
### 3 启动程序
@@ -93,6 +93,17 @@
9393

9494
## 开发日志
9595

96+
## v0.9.0
97+
- **配置文件版本号为`1.5.0`**
98+
- 支持多内容torrent解析下载
99+
- 优化下载管理器流程
100+
- 预解析torrent文件
101+
- 单测改造
102+
- testdata统一路径
103+
- 更好的单测覆盖
104+
- 新增parser插件
105+
- 使用go1.20
106+
96107
### v0.8.4
97108
- 修改订阅流程
98109
- 移除多协程订阅功能

assets/plugin/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -178,22 +178,22 @@ log.errorf(format, ...)
178178
__url__: https://example.com/
179179
```
180180
`args`将会追加并覆盖 `builtin_mikan_rss.py` 中**入口函数**的参数`args['test']`
181-
`vars`将会追加并覆盖 `builtin_mikan_rss.py` 中的全局变量`__cron__`,`__name__`,`__url__`变量
181+
`vars`将会追加并覆盖 `builtin_mikan_rss.py` 中的全局变量`cron`,`name`,`url`变量
182182
其他字段参考配置文件中的注释
183183

184184
## 通用的内置变量和函数
185185
所有被AnimeGo载入的插件,都将拥有以下变量或方法
186-
### \_\_debug\_\_
187-
全局变量`__debug__`,bool类型,当前是否为debug模式
186+
### debug
187+
全局变量`debug`,bool类型,当前是否为debug模式
188188

189-
### \_\_plugin_name\_\_
190-
全局变量`__plugin_name__`,插件文件名,不含扩展名
189+
### plugin_name
190+
全局变量`plugin_name`,插件文件名,不含扩展名
191191

192-
### \_\_plugin_dir\_\_
193-
全局变量`__plugin_dir__`,插件所在目录,绝对路径
192+
### plugin_dir
193+
全局变量`plugin_dir`,插件所在目录,绝对路径
194194

195-
### \_\_animego_version\_\_
196-
全局变量`__animego_version__`,AnimeGo版本号,`vx.x.x`格式,如`v1.0.0`
195+
### animego_version
196+
全局变量`animego_version`,AnimeGo版本号,`vx.x.x`格式,如`v1.0.0`
197197

198198
### \_get_config()
199199
内置函数`_get_config`,获取插件配置

assets/plugin/feed/README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,31 @@
99
file: builtin_mikan_rss.py
1010
args: {}
1111
vars:
12-
__cron__: 0 0/20 * * * ?
13-
__name__: Example
14-
__url__: https://example.com/
12+
cron: 0 0/20 * * * ?
13+
name: Example
14+
url: https://example.com/
1515
```
1616
对于内置的自动订阅插件,其中`type`和`file`为固定写法
1717
启用自定订阅`enable`设置为`true`
18-
设置`__cron__`设置定时(cron表达式),设置`__url__`设置订阅地址
18+
设置`cron`设置定时(cron表达式),设置`url`设置订阅地址
1919

2020
## 插件设置
2121

22-
### \_\_name\_\_
23-
全局变量`__name__`,str类型,可选
22+
### name
23+
全局变量`name`,str类型,可选
2424
定时任务的名称,方便日志中区分
2525

26-
### \_\_url\_\_
27-
全局变量`__url__`,str类型,必要
26+
### url
27+
全局变量`url`,str类型,必要
2828
订阅地址,AnimeGo将会使用GET方式请求此地址,将结果转为str类型,传递给入口函数。
2929
其中`args['data']`为请求响应的body
3030

31-
### \_\_header\_\_
32-
全局变量`__header__`,dict类型,可选
31+
### header
32+
全局变量`header`,dict类型,可选
3333
请求订阅地址时所携带的header请求头,其中`user-agent`默认为AnimeGo信息,无法设置
3434

35-
### \_\_cron\_\_
36-
全局变量`__cron__`,str类型,必要
35+
### cron
36+
全局变量`cron`,str类型,必要
3737
订阅的定时规则,执行完毕后,将会把返回值传递给启用的**过滤器**([过滤器文档](../filter/README.md)),之后进行下载
3838
支持 [秒] [分] [小时] [日] [月] [周] 六项的Cron表达式
3939
[Cron表达式文档(维基百科,推荐)](https://zh.wikipedia.org/wiki/Cron)
@@ -53,7 +53,7 @@ args = {
5353
"data": "..."
5454
}
5555
```
56-
其中`args['data']`为`__url__`的请求结果,str类型
56+
其中`args['data']`为`url`的请求结果,str类型
5757
如果为mikan订阅地址,则可以使用`core.parse_mikan_rss(args['data'])`解析
5858
也可以选择自行解析
5959

assets/plugin/rename/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
## 插件设置
66

7-
### \_\_write_tvshow\_\_
8-
全局变量`__write_tvshow__`,bool类型,可选,默认`True`
7+
### write_tvshow
8+
全局变量`write_tvshow`,bool类型,可选,默认`True`
99
是否写入Jellyfin的`tvshow.nfo`文件
1010
启用后将会写入返回值中`tvshow_dir`所设置路径。如未返回`tvshow_dir`,将写入目标文件路径`filepath`**上上**层目录
1111

@@ -42,7 +42,7 @@ args = {
4242
#### 返回值
4343
`error`: 必要,错误信息,为None则没有错误
4444
`filepath`: 必要,重命名后的文件路径。最终将会保存到`save_path/{filepath}`
45-
`tvshow_dir`: 可选,全局变量`__write_tvshow__`开启后,将会把`tvshow.nfo`文件写到此文件夹中。如为空或文件夹不存在,将会使用`filepath`**上上**层目录
45+
`tvshow_dir`: 可选,全局变量`write_tvshow`开启后,将会把`tvshow.nfo`文件写到此文件夹中。如为空或文件夹不存在,将会使用`filepath`**上上**层目录
4646

4747
```python
4848
def rename(args):

assets/plugin/schedule/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Schedule定时任务插件
22
使用Cron表达式定时执行任务
33
## 插件设置
4-
### \_\_name\_\_
5-
全局变量`__name__`,str类型,可选
4+
### name
5+
全局变量`name`,str类型,可选
66
定时任务的名称,方便日志中区分
77

8-
### \_\_cron\_\_
9-
全局变量`__cron__`,str类型,必要
8+
### cron
9+
全局变量`cron`,str类型,必要
1010
定时任务的定时规则,支持 [] [] [小时] [] [] [] 六项的Cron表达式
1111
[Cron表达式文档(维基百科,推荐)](https://zh.wikipedia.org/wiki/Cron)
1212
[Cron表达式文档(百度百科)](https://baike.baidu.com/item/cron/10952601)

configs/config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func TestUpdateConfig_141(t *testing.T) {
6969
EqualFile(t, "data/animego.yaml", test.GetDataPath(testdata, "animego_141.yaml"))
7070
}
7171

72-
func TestUpdateConfig_151(t *testing.T) {
72+
func TestUpdateConfig_150(t *testing.T) {
7373
configs.ConfigVersion = "1.5.0"
7474
file := test.GetData(testdata, "animego_141.yaml")
7575
_ = os.WriteFile("data/animego.yaml", file, 0666)

configs/default.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ func defaultPluginComment() {
5656
type: 插件类型,目前仅支持 'python'(py) 和 'builtin' 插件类型。builtin为内置插件
5757
file: 插件文件,相对于 'data/plugin' 文件夹的路径,或内置插件名
5858
args: [可空]插件额外参数,字典类型,会覆盖同名参数
59-
vars: [可空]插件全局变量,字典类型,会覆盖插件脚本中同名变量,具体变量和作用参考订阅插件文档`
59+
vars: [可空]插件全局变量,字典类型,如果变量名前缀或后缀不是'__'将会自动补充,即在插件中变量名前后缀始终为'__',
60+
会覆盖插件脚本中同名变量,具体变量和作用参考订阅插件文档`
6061
}
6162

6263
func defaultPlugin() {
@@ -66,8 +67,8 @@ func defaultPlugin() {
6667
Type: "builtin",
6768
File: "builtin_mikan_rss.py",
6869
Vars: map[string]any{
69-
"__url__": "",
70-
"__cron__": "0 0/20 * * * ?",
70+
"url": "",
71+
"cron": "0 0/20 * * * ?",
7172
},
7273
},
7374
}

configs/update.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,21 @@ func update_141_150(file string) {
357357
File: "builtin_parser.py",
358358
},
359359
}
360+
for i, p := range newConfig.Plugin.Feed {
361+
fmt.Println(p)
362+
for key, val := range p.Vars {
363+
oldKey := key
364+
key = strings.TrimPrefix(key, "__")
365+
key = strings.TrimSuffix(key, "__")
366+
if key != oldKey {
367+
p.Vars[key] = val
368+
delete(p.Vars, oldKey)
369+
}
370+
}
371+
newConfig.Plugin.Feed[i] = p
372+
}
373+
log.Println("[清理] 清理缓存(data/cache/bolt.db)")
374+
_ = os.Remove(xpath.Join(oldConfig.DataPath, "cache", "bolt.db"))
360375
content, err := encodeConfig(newConfig)
361376
if err != nil {
362377
log.Fatal("配置文件升级失败:", err)

internal/animego/manager/manager_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ func TestManager_ReStart_NotDownloaded(t *testing.T) {
496496
time.Sleep(5 * time.Second)
497497
cancel()
498498
}()
499+
time.Sleep(300 * time.Millisecond)
499500
manager.Conf.Rename = "move"
500501
{
501502
log.Info("下载 1")
@@ -515,6 +516,7 @@ func TestManager_ReStart_NotDownloaded(t *testing.T) {
515516
time.Sleep(3 * time.Second)
516517
cancel()
517518
}()
519+
time.Sleep(300 * time.Millisecond)
518520
{
519521
log.Info("下载 1")
520522
file1, _, _ = download("动画1", 1, []int{1})
@@ -540,9 +542,8 @@ func TestManager_ReStart_NotDownloaded(t *testing.T) {
540542
"正常退出",
541543
"正常退出",
542544
"重启",
545+
2,
543546
"下载 1",
544-
"移动完成",
545-
"存在可能未下载完成的项目",
546547
"接收到下载项",
547548
"发现已下载",
548549
"取消下载,不允许重复",

internal/plugin/plugin.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,19 @@ func LoadPlugin(opts *LoadPluginOptions) (p api.Plugin) {
7272
break
7373
}
7474
}
75+
for key, val := range opts.Vars {
76+
oldKey := key
77+
if !strings.HasPrefix(key, "__") {
78+
key = "__" + key
79+
}
80+
if !strings.HasSuffix(key, "__") {
81+
key = key + "__"
82+
}
83+
if key != oldKey {
84+
opts.Vars[key] = val
85+
delete(opts.Vars, oldKey)
86+
}
87+
}
7588
p.Load(&plugin.LoadOptions{
7689
File: opts.File,
7790
Code: code,

0 commit comments

Comments
 (0)