Add finished flag to response and clean up html templates
This commit is contained in:
parent
a9002162f1
commit
5cc2e609ae
37
main.go
37
main.go
@ -26,6 +26,7 @@ type download struct {
|
||||
Pid int `json:"pid"`
|
||||
ExitCode int `json:"exit_code"`
|
||||
State string `json:"state"`
|
||||
Finished bool `json:"finished"`
|
||||
Files []string `json:"files"`
|
||||
Eta string `json:"eta"`
|
||||
Percent float32 `json:"percent"`
|
||||
@ -78,7 +79,7 @@ func HomeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
bookmarkletURL := "javascript:(function(f,s,n,o){window.open(f+encodeURIComponent(s),n,o)}('http://localhost:8000/fetch?url=',window.location,'yourform','width=500,height=500'));"
|
||||
|
||||
t, err := template.ParseFS(webFS, "web/index.html")
|
||||
t, err := template.ParseFS(webFS, "web/layout.tmpl", "web/index.html")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -94,7 +95,7 @@ func HomeHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
log.Printf("%s", info.BookmarkletURL)
|
||||
err = t.Execute(w, info)
|
||||
err = t.ExecuteTemplate(w, "layout", info)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -131,12 +132,13 @@ func FetchHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// XXX should be atomic!
|
||||
downloadId++
|
||||
newDownload := download{
|
||||
Id: downloadId,
|
||||
Url: url[0],
|
||||
State: "starting",
|
||||
Eta: "?",
|
||||
Percent: 0.0,
|
||||
Log: make([]string, 0, 1000),
|
||||
Id: downloadId,
|
||||
Url: url[0],
|
||||
State: "starting",
|
||||
Finished: false,
|
||||
Eta: "?",
|
||||
Percent: 0.0,
|
||||
Log: make([]string, 0, 1000),
|
||||
}
|
||||
downloads[downloadId] = &newDownload
|
||||
// XXX atomic ^^
|
||||
@ -145,11 +147,11 @@ func FetchHandler(w http.ResponseWriter, r *http.Request) {
|
||||
go func() {
|
||||
queue(&newDownload)
|
||||
}()
|
||||
t, err := template.ParseFS(webFS, "web/popup.html")
|
||||
t, err := template.ParseFS(webFS, "web/layout.tmpl", "web/popup.html")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = t.Execute(w, newDownload)
|
||||
err = t.ExecuteTemplate(w, "layout", newDownload)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -170,21 +172,24 @@ func queue(dl *download) {
|
||||
|
||||
stdout, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
dl.State = "ended"
|
||||
dl.State = "failed"
|
||||
dl.Finished = true
|
||||
dl.Log = append(dl.Log, fmt.Sprintf("error setting up stdout pipe: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
stderr, err := cmd.StderrPipe()
|
||||
if err != nil {
|
||||
dl.State = "ended"
|
||||
dl.State = "failed"
|
||||
dl.Finished = true
|
||||
dl.Log = append(dl.Log, fmt.Sprintf("error setting up stderr pipe: %v", err))
|
||||
return
|
||||
}
|
||||
|
||||
err = cmd.Start()
|
||||
if err != nil {
|
||||
dl.State = "ended"
|
||||
dl.State = "failed"
|
||||
dl.Finished = true
|
||||
dl.Log = append(dl.Log, fmt.Sprintf("error starting youtube-dl: %v", err))
|
||||
return
|
||||
}
|
||||
@ -204,13 +209,13 @@ func queue(dl *download) {
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
cmd.Wait()
|
||||
|
||||
dl.State = "ended"
|
||||
dl.State = "complete"
|
||||
dl.Finished = true
|
||||
dl.ExitCode = cmd.ProcessState.ExitCode()
|
||||
|
||||
fmt.Printf("OBJ %#v\n", dl)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func updateDownload(r io.Reader, dl *download) {
|
||||
|
@ -1,29 +1,41 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>index</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/pure-min.css" integrity="sha384-Uu6IeWbM+gzNVXJcM9XV3SohHtmWE+3VGi496jvgX1jyvDTXfdK+rfZc8C1Aehk5" crossorigin="anonymous">
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Drag this bookmarklet: <a href="{{ .BookmarkletURL }}">Gropple</a> to your bookmark bar, and click it
|
||||
on any page you want to grab the video from.
|
||||
</p>
|
||||
{{ range $k, $v := .Downloads }}
|
||||
<div>
|
||||
<h4>{{ $v.Url }}</h4>
|
||||
<table>
|
||||
<tr><th>state</th><td>{{ $v.State }}</td></tr>
|
||||
<tr><th>percent</th><td>{{ $v.Percent }}</td></tr>
|
||||
<tr><th>files</th><td>{{ range $i, $f := $v.Files }}{{ $f }}<br>{{ end }}</td></tr>
|
||||
<tr><th>exit code</th><td>{{ $v.ExitCode }}</td></tr>
|
||||
{{ define "content" }}
|
||||
<p>
|
||||
Drag this bookmarklet: <a href="{{ .BookmarkletURL }}">Gropple</a> to your bookmark bar, and click it
|
||||
on any page you want to grab the video from.
|
||||
</p>
|
||||
|
||||
</table>
|
||||
<pre>
|
||||
{{ range $i, $l := $v.Log }}
|
||||
line: {{ $l }}
|
||||
{{- end -}}
|
||||
</pre>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ range $k, $v := .Downloads }}
|
||||
<div>
|
||||
<h4>{{ $v.Url }}</h4>
|
||||
<table>
|
||||
<tr>
|
||||
<th>state</th>
|
||||
<td>{{ $v.State }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>percent</th>
|
||||
<td>{{ $v.Percent }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>files</th>
|
||||
<td>{{ range $i, $f := $v.Files }}{{ $f }} {{ end }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>exit code</th>
|
||||
<td>{{ $v.ExitCode }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
<pre>
|
||||
{{ range $i, $l := $v.Log }}
|
||||
line: {{ $l }}
|
||||
{{- end -}}
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
|
||||
{{ define "js" }}
|
||||
{{ end }}
|
16
web/layout.tmpl
Normal file
16
web/layout.tmpl
Normal file
@ -0,0 +1,16 @@
|
||||
{{ define "layout" }}
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>gropple</title>
|
||||
<script src="//unpkg.com/alpinejs" defer></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/pure-min.css" integrity="sha384-Uu6IeWbM+gzNVXJcM9XV3SohHtmWE+3VGi496jvgX1jyvDTXfdK+rfZc8C1Aehk5" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/grids-responsive-min.css">
|
||||
</head>
|
||||
<body>
|
||||
{{ template "content" . }}
|
||||
</body>
|
||||
{{ template "js" . }}
|
||||
</html>
|
||||
{{ end }}
|
@ -1,13 +1,4 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>fetching {{ .Url }}</title>
|
||||
<script src="//unpkg.com/alpinejs" defer></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/pure-min.css" integrity="sha384-Uu6IeWbM+gzNVXJcM9XV3SohHtmWE+3VGi496jvgX1jyvDTXfdK+rfZc8C1Aehk5" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://unpkg.com/purecss@2.0.6/build/grids-responsive-min.css">
|
||||
</head>
|
||||
<body>
|
||||
{{ define "content" }}
|
||||
<div id="layout" class="pure-g pure-u-1">
|
||||
<p>Fetching <tt>{{ .Url }}</tt></p>
|
||||
<table class="pure-table" x-data="popup()" x-init="fetch_data()">
|
||||
@ -16,13 +7,14 @@
|
||||
<tr><th>progress</th><td x-text="percent"></td></tr>
|
||||
<tr><th>ETA</th><td x-text="eta"></td></tr>
|
||||
</table>
|
||||
<p><a href="/" target="_grobbler">Status page</a> </p>
|
||||
<p><a href="/" target="_gropple_status">Status page</a> </p>
|
||||
</div>
|
||||
</body>
|
||||
{{ end }}
|
||||
{{ define "js" }}
|
||||
<script>
|
||||
function popup() {
|
||||
return {
|
||||
eta: '', percent: 0.0, state: '??', filename: '',
|
||||
eta: '', percent: 0.0, state: '??', filename: '', finished: false,
|
||||
fetch_data() {
|
||||
fetch('/fetch/info/{{ .Id }}')
|
||||
.then(response => response.json())
|
||||
@ -30,17 +22,18 @@
|
||||
this.eta = info.eta;
|
||||
this.percent = info.percent + "%";
|
||||
this.state = info.state;
|
||||
this.finished = info.finished;
|
||||
if (info.files && info.files.length > 0) {
|
||||
this.filename = info.files[info.files.length - 1];
|
||||
}
|
||||
if (this.state != "ended") {
|
||||
console.log('finish?', this.finished);
|
||||
if (! this.finished) {
|
||||
setTimeout(() => { this.fetch_data() }, 100);
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
</html>
|
||||
{{ end }}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user