55 "context"
66 "errors"
77 "fmt"
8- "os "
8+ "io "
99 "regexp"
1010 "strconv"
1111 "strings"
@@ -51,7 +51,7 @@ func (s Status) String() string {
5151
5252type Feeder struct {
5353 deviceName string
54- fileName string
54+ gcode io. Reader
5555 printerAck chan bool
5656 progress int
5757 status Status
@@ -65,10 +65,10 @@ type Feeder struct {
6565 cancelFunc context.CancelFunc
6666}
6767
68- func NewFeeder (deviceName , fileName string ) (* Feeder , error ) {
68+ func NewFeeder (deviceName string , gcode io. Reader ) (* Feeder , error ) {
6969 f := Feeder {
7070 deviceName : deviceName ,
71- fileName : fileName ,
71+ gcode : gcode ,
7272 printerAck : make (chan bool ),
7373 progressRegexp : regexp .MustCompile ("M73 P([0-9]+).*" ),
7474 }
@@ -79,11 +79,6 @@ func NewFeeder(deviceName, fileName string) (*Feeder, error) {
7979 return nil , fmt .Errorf ("failed to connect to %s: %w" , deviceName , err )
8080 }
8181 f .status = Ready
82-
83- if _ , err := os .Stat (fileName ); os .IsNotExist (err ) {
84- return nil , fmt .Errorf ("failed to open %s: %w" , fileName , err )
85- }
86-
8782 return & f , nil
8883}
8984
@@ -211,7 +206,7 @@ func (f *Feeder) write(ctx context.Context, command string) error {
211206 case <- f .printerAck :
212207 break
213208 case <- ctx .Done ():
214- return errors .New ("Context is Done" )
209+ return errors .New ("context is Done" )
215210 }
216211 return nil
217212}
@@ -235,27 +230,20 @@ func (f *Feeder) Feed() error {
235230 <- f .printerAck
236231 f .Start ()
237232
238- file , err := os .Open (f .fileName )
239- if err != nil {
240- f .status = Error
241- return err
242- }
243- defer file .Close ()
244-
245- scanner := bufio .NewScanner (file )
233+ scanner := bufio .NewScanner (f .gcode )
246234 for scanner .Scan () {
247235 line := scanner .Text ()
248236 for f .status == ManuallyPaused {
249237 select {
250238 case <- ctx .Done ():
251- return errors .New ("Context is Done" )
239+ return errors .New ("context is Done" )
252240 default :
253241 time .Sleep (5 * time .Second )
254242 log .Info ("Feeder: paused manually" )
255243 }
256244 }
257245 f .status = Printing
258- err = f .write (ctx , line )
246+ err : = f .write (ctx , line )
259247 if err != nil {
260248 f .status = Error
261249 return err
0 commit comments