@@ -73,15 +73,16 @@ def _find_max_dir(client, parent_dir, prefix):
7373 except Exception :
7474 return f"{ prefix } 1"
7575
76- def _expand_targets (env_s ):
76+
77+ def _expand_targets (env_s , client ):
7778 arr = []
7879 if not env_s :
7980 return arr
8081 raw = [p .strip () for p in re .split (r"[,;:]" , env_s ) if p and p .strip () != '' ]
8182
82- # 兼容旧逻辑:先计算出默认的 /ODC 下的 tv/mov 前缀
83- tv_prefix_default = _find_max_dir (client , '/ODC ' , 'tv' )
84- mov_prefix_default = _find_max_dir (client , '/ODC ' , 'mov' )
83+ # 兼容旧逻辑:默认搜索根目录 / 下的 tv/mov 前缀
84+ tv_prefix_default = _find_max_dir (client , '/' , 'tv' )
85+ mov_prefix_default = _find_max_dir (client , '/' , 'mov' )
8586
8687 for base in raw :
8788 # 1. 处理通用 {max} 语法
@@ -93,14 +94,14 @@ def max_replacer(match):
9394 parent = match .group (1 ) # e.g. "/a/b/" or ""
9495 prefix = match .group (2 ) # e.g. "disk"
9596
96- # 如果没有父路径,默认使用 /ODC
97- search_dir = parent if parent else '/ODC '
97+ # 如果没有父路径,默认使用根目录 /
98+ search_dir = parent if parent else '/'
9899
99100 best_name = _find_max_dir (client , search_dir , prefix )
100101
101- # 如果父路径为空(隐含 /ODC ),则返回完整路径 /ODC /best_name
102+ # 如果父路径为空(隐含 /),则返回完整路径 /best_name
102103 if not parent :
103- return f"/ODC/ { best_name } "
104+ return f"/{ best_name } "
104105 # 否则返回 原父路径 + best_name
105106 return f"{ parent } { best_name } "
106107
@@ -114,10 +115,42 @@ def max_replacer(match):
114115 base = re .sub (r"/{2,}" , "/" , base ).rstrip ('/' )
115116 arr .append (base )
116117 return arr
118+
119+
120+ _recent_refresh = {}
121+
122+
123+ def refresh_after_task (job , status ):
124+ logger = logging .getLogger ()
125+ if status not in [2 , 3 ]:
126+ logger .info (f"Refresh skipped: status { status } not in [2, 3]" )
127+ return
128+ logger .info (f"Refresh start: job={ job .get ('remark' )} , status={ status } " )
129+
130+ openlistId = int (job ['openlistId' ])
131+ client = openlistService .getClientById (openlistId )
132+ remark = job .get ('remark' ) or ''
133+ src = job .get ('srcPath' ) or ''
134+ dsts = (job .get ('dstPath' ) or '' ).split (':' ) if job .get ('dstPath' ) else []
135+ src_norm = re .sub (r"/{2,}" , "/" , src ).rstrip ('/' ) + '/'
136+ tv_src_env = (os .getenv ('TVsource' ) or '' ).strip ()
137+ mov_src_env = (os .getenv ('MOVsource' ) or '' ).strip ()
138+ tv_src_norm = re .sub (r"/{2,}" , "/" , tv_src_env ).rstrip ('/' ) + '/' if tv_src_env else ''
139+ mov_src_norm = re .sub (r"/{2,}" , "/" , mov_src_env ).rstrip ('/' ) + '/' if mov_src_env else ''
140+ is_tv = bool (tv_src_norm and src_norm .startswith (tv_src_norm ))
141+ logger .info (f"Refresh context: is_tv={ is_tv } , src={ src } , dsts={ dsts } " )
142+ odc_prefix = None
143+ base_paths = []
144+ name = remark
145+ dedup = []
146+ seen = set ()
147+ tv_src = os .getenv ('TVsource' ) or ''
148+ mov_src = os .getenv ('MOVsource' ) or ''
149+
117150 dst_target_env = os .getenv ('DST_TV_TARGETS' ) if is_tv else os .getenv ('DST_MOV_TARGETS' )
118151 sync_target_env = os .getenv ('SYNC_TV_TARGETS' ) if is_tv else os .getenv ('SYNC_MOV_TARGETS' )
119- dst_bases = _expand_targets (dst_target_env )
120- sync_bases = _expand_targets (sync_target_env )
152+ dst_bases = _expand_targets (dst_target_env , client )
153+ sync_bases = _expand_targets (sync_target_env , client )
121154 dst_used = False
122155 for d in dsts :
123156 for b in dst_bases :
@@ -137,12 +170,10 @@ def max_replacer(match):
137170 env_refresh = os .getenv ('SYNC_REFRESH_MOV' ) or os .getenv ('REFRESH_MOV_TARGETS' )
138171
139172 logger .info (f"Refresh env config: dst_used={ dst_used } , env_refresh={ env_refresh } " )
140-
173+
141174 if env_refresh :
142175 # 使用通用展开逻辑处理刷新路径中的 {max}
143- # 注意:这里我们递归调用 _expand_targets 来处理 env_refresh 字符串
144- # 但 _expand_targets 内部会返回列表,我们需要处理这个列表
145- raw_refresh_paths = _expand_targets (env_refresh )
176+ raw_refresh_paths = _expand_targets (env_refresh , client )
146177 for base in raw_refresh_paths :
147178 path = f"{ base } /{ name } "
148179 if path not in seen :
@@ -207,4 +238,4 @@ def max_replacer(match):
207238 last = _recent_refresh .get (key )
208239 if last and now - last < 60 :
209240 return
210- _recent_refresh [key ] = now
241+ _recent_refresh [key ] = now
0 commit comments