From c202f2eca32e1ab2e313417168351df1c58ee062 Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Wed, 4 Aug 2021 23:53:36 -0400 Subject: More major changes. Web UI works. Downloading games works. Status works. extractFile needs work --- steam/status.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'steam/status.go') 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() } -- cgit v1.2.3