同步上游 zip:合并任务后台化 + 合并整剧可直接播放;保留 ultrafast+4线程 转码优化与 .gitignore 本地规则

This commit is contained in:
yvan
2026-09-18 10:16:15 +08:00
parent 80485e9dba
commit b96363d787
21 changed files with 1173 additions and 172 deletions
+21 -9
View File
@@ -51,6 +51,7 @@ type playbackSession struct {
}
type playbackEpisode struct {
Merged bool `json:"merged,omitempty"`
VIP bool `json:"vip,omitempty"`
Index int `json:"index"`
Episode string `json:"episode"`
@@ -190,15 +191,22 @@ func (app *UIApp) handlePlaybackOpen(writer http.ResponseWriter, request *http.R
var collectionErr error
app.mu.Lock()
if input.FromHistory && previous.Mode == "collection" && downloadAllowed(request.Context()) {
candidate := app.tasks[previous.TaskID]
if isPlayableDownloadTask(candidate) && candidate.DramaID == previous.DramaID {
input.TaskID = candidate.ID
} else {
for _, taskID := range app.taskOrder {
candidate = app.tasks[taskID]
if isPlayableDownloadTask(candidate) && candidate.DramaID == previous.DramaID {
input.TaskID = candidate.ID
break
if strings.HasPrefix(previous.TaskID, mergedPlaybackPrefix) && previous.TaskID == mergedPlaybackPrefix+previous.DramaID {
if _, _, err := app.mergedPlaybackTaskLocked(previous.TaskID); err == nil {
input.TaskID = previous.TaskID
}
}
if input.TaskID == "" {
candidate := app.tasks[previous.TaskID]
if isPlayableDownloadTask(candidate) && candidate.DramaID == previous.DramaID {
input.TaskID = candidate.ID
} else {
for _, taskID := range app.taskOrder {
candidate = app.tasks[taskID]
if isPlayableDownloadTask(candidate) && candidate.DramaID == previous.DramaID {
input.TaskID = candidate.ID
break
}
}
}
}
@@ -310,6 +318,10 @@ func (app *UIApp) handlePlaybackOpen(writer http.ResponseWriter, request *http.R
_, _, episode.Danmaku = hongguoPlaybackIDs(task)
if len(downloadIDs) > 0 {
episode.TaskID = downloadIDs[index]
episode.Merged = strings.HasPrefix(episode.TaskID, mergedPlaybackPrefix)
if episode.Merged {
episode.Danmaku = false
}
}
episodes = append(episodes, episode)
}