aboutsummaryrefslogtreecommitdiff
path: root/steam/status.go
diff options
context:
space:
mode:
authorMitch Riedstra <mitch@riedstra.us>2021-08-04 23:53:36 -0400
committerMitch Riedstra <mitch@riedstra.us>2021-08-04 23:53:36 -0400
commitc202f2eca32e1ab2e313417168351df1c58ee062 (patch)
tree6540629b337d2d769581baec26096ac0555f71f9 /steam/status.go
parent742938b00222c7ad57ad11eb24850d9202c2503d (diff)
downloadsteam-export-c202f2eca32e1ab2e313417168351df1c58ee062.tar.gz
steam-export-c202f2eca32e1ab2e313417168351df1c58ee062.tar.xz
More major changes. Web UI works. Downloading games works. Status works. extractFile needs work
Diffstat (limited to 'steam/status.go')
-rw-r--r--steam/status.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/steam/status.go b/steam/status.go
index 12f5e3b..9d70655 100644
--- a/steam/status.go
+++ b/steam/status.go
@@ -1,10 +1,28 @@
package steam
import (
+ "encoding/json"
"sync"
"time"
+
+ "fmt"
+ "os"
)
+var debuglogging = false
+
+func debugLogJob(s string, args ...interface{}) {
+ if debuglogging {
+ fmt.Fprintf(os.Stderr, s, args...)
+ }
+}
+
+func debugLogJobs(s string, args ...interface{}) {
+ if debuglogging {
+ fmt.Fprintf(os.Stderr, s, args...)
+ }
+}
+
// JobStatus provides specific information about an individual job
type Job struct {
action string
@@ -21,10 +39,36 @@ type Job struct {
m sync.Mutex
}
+func (j Job) MarshalJSON() ([]byte, error) {
+ return json.Marshal(
+ struct {
+ Action string `json:"action"`
+ Target *Game `json:"Target"`
+ Running bool `json:"Running"`
+ Start *time.Time `json:"Start"`
+ Errors []error `json:"Errors"`
+
+ // If applicablle
+ Size *int64 `json:"Size"`
+ Transferred *int64 `json:"Transferred"`
+ Eta *time.Duration `json:"ETA"`
+ }{
+ Action: j.action,
+ Target: j.target,
+ Running: j.running,
+ Start: j.start,
+ Errors: j.errors,
+ Size: j.size,
+ Transferred: j.transferred,
+ Eta: j.eta,
+ })
+}
+
// Action is a short string describing the action, i.e. "packaging", "deleting"
func (j *Job) Action() string {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("Action on: '%s'\n", *j)
return j.action
}
@@ -32,6 +76,7 @@ func (j *Job) Action() string {
func (j *Job) Target() *Game {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("Target on: '%s'\n", *j)
return j.target
}
@@ -39,6 +84,7 @@ func (j *Job) Target() *Game {
func (j *Job) IsRunning() bool {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("IsRunning on: '%s'\n", *j)
return j.running
}
@@ -46,17 +92,20 @@ func (j *Job) IsRunning() bool {
func (j *Job) StartTime() *time.Time {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("StartTime on: '%s'\n", *j)
return j.start
}
func (j *Job) Errors() []error {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("errors on: '%s'\n", *j)
return j.errors
}
// newJob sets up a job of action for the target Game
func newJob(action string, target *Game) *Job {
+ debugLogJob("New job: '%s' target: '%s'\n", action, target)
t := time.Now()
return &Job{
action: action,
@@ -69,6 +118,7 @@ func newJob(action string, target *Game) *Job {
func (j *Job) setSize(size int64) {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("setSize on: '%s'\n", *j)
j.size = &size
}
@@ -76,12 +126,14 @@ func (j *Job) setSize(size int64) {
func (j *Job) GetSize() *int64 {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("getSize on: '%s'\n", *j)
return j.size
}
func (j *Job) setTransferred(transferred int64) {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("setTransferred on: '%s'\n", *j)
j.transferred = &transferred
}
@@ -89,6 +141,7 @@ func (j *Job) setTransferred(transferred int64) {
func (j *Job) GetTransferred() *int64 {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("GetTransferred on: '%s'\n", *j)
return j.transferred
}
@@ -96,6 +149,7 @@ func (j *Job) GetTransferred() *int64 {
func (j *Job) setETA(d time.Duration) {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("setETA on: '%s'\n", *j)
j.eta = &d
}
@@ -104,6 +158,7 @@ func (j *Job) setETA(d time.Duration) {
func (j *Job) GetETA() *time.Duration {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("GetETA on: '%s'\n", *j)
return j.eta
}
@@ -118,6 +173,7 @@ func (j *Job) done() {
func (j *Job) addError(err error) {
j.m.Lock()
defer j.m.Unlock()
+ debugLogJob("add error on: '%s'\n", *j)
j.errors = append(j.errors, err)
}
@@ -131,9 +187,30 @@ type Jobs struct {
m sync.Mutex
}
+func (jobs Jobs) MarshalJSON() ([]byte, error) {
+ jobs.scan()
+ return json.Marshal(
+ struct {
+ Running []*Job `json:"Running"`
+ Previous []*Job `json:"Previous"`
+ }{
+ Running: jobs.running,
+ Previous: jobs.previous,
+ })
+}
+
+func (jobs Jobs) String() string {
+ b, err := json.Marshal(jobs)
+ if err != nil {
+ panic(err)
+ }
+ return string(b)
+}
+
func (jobs *Jobs) scan() {
jobs.m.Lock()
defer jobs.m.Unlock()
+ debugLogJobs("scan on: '%s'\n", *jobs)
running := []*Job{}
notrunning := []*Job{}
@@ -164,6 +241,7 @@ func (jobs *Jobs) Running() bool {
if len(jobs.running) == 0 {
return false
}
+ debugLogJobs("running on: '%s'\n", *jobs)
return true
}
@@ -172,6 +250,7 @@ func (jobs *Jobs) GetJobs() []*Job {
jobs.scan()
jobs.m.Lock()
defer jobs.m.Unlock()
+ debugLogJobs("GetJobs on: '%s'\n", *jobs)
return append(jobs.running, jobs.previous...)
}
@@ -180,6 +259,7 @@ func (jobs *Jobs) GetRunningJobs() []*Job {
jobs.scan()
jobs.m.Lock()
defer jobs.m.Unlock()
+ debugLogJobs("GetRunningJobs on: '%s'\n", *jobs)
return jobs.running
}
@@ -188,6 +268,7 @@ func (jobs *Jobs) GetStoppedJobs() []*Job {
jobs.scan()
jobs.m.Lock()
defer jobs.m.Unlock()
+ debugLogJobs("GetStoppedJobs on: '%s'\n", *jobs)
return jobs.previous
}
@@ -195,6 +276,7 @@ func (jobs *Jobs) GetStoppedJobs() []*Job {
func (jobs *Jobs) addJob(j *Job) {
jobs.m.Lock()
jobs.running = append(jobs.running, j)
+ debugLogJobs("addJob on: '%s'\n", *jobs)
jobs.m.Unlock()
jobs.scan()
}