@@ -5,7 +5,7 @@ import { httpGet, httpGetWithStreamCheck } from "../utils/http-util.js";
55import { parseDanmakuBase64 , md5 , convertToAsciiSum , decodeHtmlEntities } from "../utils/codec-util.js" ;
66import { generateValidStartDate } from "../utils/time-util.js" ;
77import { addAnime , removeEarliestAnime } from "../utils/cache-util.js" ;
8- import { titleMatches , getExplicitSeasonNumber , extractSeasonNumberFromAnimeTitle } from "../utils/common-util.js" ;
8+ import { titleMatches , getExplicitSeasonNumber , extractSeasonNumberFromAnimeTitle , extractEpisodeNumberFromTitle } from "../utils/common-util.js" ;
99import { SegmentListResponse } from '../models/dandan-model.js' ;
1010import { simplized } from "../utils/zh-util.js" ;
1111import { getTmdbJaOriginalTitle , smartTitleReplace } from "../utils/tmdb-util.js" ;
@@ -679,8 +679,14 @@ export default class BilibiliSource extends BaseSource {
679679 } ;
680680 } ) ;
681681
682- // 依据底层数据主键 ep_id 进行时间序列升序排列
683- links . sort ( ( a , b ) => a . _id - b . _id ) ;
682+ // 优先从 index_title 提取集号排序,任一无法提取则退回到 ep_id 排序
683+ const sortKeys = links . map ( l => extractEpisodeNumberFromTitle ( l . name ) ) ;
684+ if ( sortKeys . every ( k => k !== null ) ) {
685+ links . forEach ( ( l , i ) => l . _sortKey = sortKeys [ i ] ) ;
686+ links . sort ( ( a , b ) => a . _sortKey - b . _sortKey ) ;
687+ } else {
688+ links . sort ( ( a , b ) => a . _id - b . _id ) ;
689+ }
684690
685691 log ( "info" , `[Bilibili] 直接使用搜索结果中的 ${ links . length } 集分集` ) ;
686692 } else {
0 commit comments