fix: progress always at 0% and context cancelled before sendDocument
All checks were successful
CI / build (push) Successful in 50s
All checks were successful
CI / build (push) Successful in 50s
- Fix progress template: remove spurious stderr: prefix and switch to _percent_str/_speed_str/_eta_str keys (progress.percent outputs NA for HLS streams with unknown total size) - Update progress regex to match new template format: DLPROG| 45.2%| 1.05MiB/s|00:45 - Fix context cancellation bug: clearActiveJob was cancelling dlCtx before handleDownloadCompletion could send the document - Update progress test cases to match new template output format
This commit is contained in:
@@ -12,7 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var progressRE = regexp.MustCompile(`\[\w+\]\s+([\d.]+)%\s+of\s+~?([\d.]+)(\w+)`)
|
var progressRE = regexp.MustCompile(`\[\w+\]\s+([\d.]+)%\s+of\s+~?([\d.]+)(\w+)`)
|
||||||
var progressTemplateRE = regexp.MustCompile(`^DLPROG\|([\d.]+)\|(.*?)\|(.*)$`)
|
var progressTemplateRE = regexp.MustCompile(`^DLPROG\|\s*([\d.]+)%\|\s*(.*?)\s*\|(.*)$`)
|
||||||
|
|
||||||
type progressUpdate struct {
|
type progressUpdate struct {
|
||||||
pct float64
|
pct float64
|
||||||
|
|||||||
@@ -109,21 +109,21 @@ func TestParseProgressTemplate(t *testing.T) {
|
|||||||
hasRes bool
|
hasRes bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
line: "DLPROG|45.2|2.34MiB/s|00:45",
|
line: "DLPROG| 45.2%| 2.34MiB/s|00:45",
|
||||||
pct: 45.2,
|
pct: 45.2,
|
||||||
speed: "2.34MiB/s",
|
speed: "2.34MiB/s",
|
||||||
eta: "00:45",
|
eta: "00:45",
|
||||||
hasRes: true,
|
hasRes: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
line: "DLPROG|100.0|5.00MiB/s|00:00",
|
line: "DLPROG|100.0%| 5.00MiB/s|00:00",
|
||||||
pct: 100.0,
|
pct: 100.0,
|
||||||
speed: "5.00MiB/s",
|
speed: "5.00MiB/s",
|
||||||
eta: "00:00",
|
eta: "00:00",
|
||||||
hasRes: true,
|
hasRes: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
line: "DLPROG|0.0||",
|
line: "DLPROG| 0.0%||",
|
||||||
pct: 0.0,
|
pct: 0.0,
|
||||||
speed: "",
|
speed: "",
|
||||||
eta: "",
|
eta: "",
|
||||||
@@ -142,12 +142,26 @@ func TestParseProgressTemplate(t *testing.T) {
|
|||||||
hasRes: false,
|
hasRes: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
line: "DLPROG|50.0|Unknown|Unknown",
|
line: "DLPROG| 50.0%| Unknown|Unknown",
|
||||||
pct: 50.0,
|
pct: 50.0,
|
||||||
speed: "",
|
speed: "",
|
||||||
eta: "",
|
eta: "",
|
||||||
hasRes: true,
|
hasRes: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
line: "DLPROG| 16.7%| 1.05KiB/s|Unknown",
|
||||||
|
pct: 16.7,
|
||||||
|
speed: "1.05KiB/s",
|
||||||
|
eta: "",
|
||||||
|
hasRes: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
line: "DLPROG| 11.1%| 754.59KiB/s|00:08",
|
||||||
|
pct: 11.1,
|
||||||
|
speed: "754.59KiB/s",
|
||||||
|
eta: "00:08",
|
||||||
|
hasRes: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
got := parseProgressTemplate(tt.line)
|
got := parseProgressTemplate(tt.line)
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ func (c *Client) StartDownload(job *domain.DownloadJob, downloadDir string) (<-c
|
|||||||
|
|
||||||
// Progress reporting using progress-template for machine-readable output
|
// Progress reporting using progress-template for machine-readable output
|
||||||
args = append(args, "--newline")
|
args = append(args, "--newline")
|
||||||
args = append(args, "--progress-template", "stderr:DLPROG|%(progress.percent)s|%(progress.speed)s|%(progress.eta)s")
|
args = append(args, "--progress-template", "DLPROG|%(progress._percent_str)s|%(progress._speed_str)s|%(progress._eta_str)s")
|
||||||
|
|
||||||
// Language selection if specified
|
// Language selection if specified
|
||||||
if job.Language != "" {
|
if job.Language != "" {
|
||||||
|
|||||||
@@ -400,11 +400,11 @@ func (h *Handler) runDownload(ctx context.Context, job *domain.DownloadJob) {
|
|||||||
|
|
||||||
h.trackDownloadProgress(ctx, job, updates)
|
h.trackDownloadProgress(ctx, job, updates)
|
||||||
|
|
||||||
h.clearActiveJob(job.UserID)
|
|
||||||
|
|
||||||
if job.Status == domain.StatusCompleted {
|
if job.Status == domain.StatusCompleted {
|
||||||
h.handleDownloadCompletion(ctx, job)
|
h.handleDownloadCompletion(ctx, job)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h.clearActiveJob(job.UserID)
|
||||||
}
|
}
|
||||||
|
|
||||||
// trackDownloadProgress reads progress updates from yt-dlp and updates the Telegram message.
|
// trackDownloadProgress reads progress updates from yt-dlp and updates the Telegram message.
|
||||||
|
|||||||
Reference in New Issue
Block a user