@@ -67,10 +67,13 @@ const (
6767 UnknownType MessageType = ""
6868 ProgressType MessageType = "progress"
6969 InfoType MessageType = "info"
70+ DebugType MessageType = "debug"
71+ WarningType MessageType = "warning"
7072 ErrorType MessageType = "error"
7173)
7274
7375type StreamMessage struct {
76+ Type MessageType
7477 data string
7578 error error
7679 progress * Progress
@@ -81,74 +84,73 @@ type Progress struct {
8184 Progress float32
8285}
8386
84- func (p * StreamMessage ) IsData () bool { return p .data != "" }
87+ func (p * StreamMessage ) IsInfo () bool { return p .Type == InfoType }
88+ func (p * StreamMessage ) IsDebug () bool { return p .Type == DebugType }
89+ func (p * StreamMessage ) IsWarning () bool { return p .Type == WarningType }
8590func (p * StreamMessage ) IsError () bool { return p .error != nil }
8691func (p * StreamMessage ) IsProgress () bool { return p .progress != nil }
8792func (p * StreamMessage ) GetData () string { return p .data }
8893func (p * StreamMessage ) GetError () error { return p .error }
8994func (p * StreamMessage ) GetProgress () * Progress { return p .progress }
9095func (p * StreamMessage ) GetType () MessageType {
91- if p .IsData () {
92- return InfoType
93- }
94- if p .IsError () {
95- return ErrorType
96- }
97- if p .IsProgress () {
98- return ProgressType
99- }
100- return UnknownType
96+ return p .Type
10197}
10298
10399func StartApp (ctx context.Context , docker * dockerClient.Client , provisioner * Provision , modelsIndex * modelsindex.ModelsIndex , bricksIndex * bricksindex.BricksIndex , app app.ArduinoApp ) iter.Seq [StreamMessage ] {
104100 return func (yield func (StreamMessage ) bool ) {
105101 ctx , cancel := context .WithCancel (ctx )
106102 defer cancel ()
107103
104+ if ! yield (StreamMessage {Type : DebugType , data : "Checking for already running apps..." }) {
105+ cancel ()
106+ return
107+ }
108108 running , err := getRunningApp (ctx , docker )
109109 if err != nil {
110- yield (StreamMessage {error : err })
110+ yield (StreamMessage {Type : ErrorType , error : err })
111111 return
112112 }
113113 if running != nil {
114- yield (StreamMessage {error : fmt .Errorf ("app %q is running" , running .Name )})
114+ err := fmt .Errorf ("app %q is already running" , running .Name )
115+ yield (StreamMessage {Type : ErrorType , error : err })
115116 return
116117 }
117118
118119 callbackWriter := NewCallbackWriter (func (line string ) {
119- if ! yield (StreamMessage {data : line }) {
120+ if ! yield (StreamMessage {Type : DebugType , data : line }) {
120121 cancel ()
121122 return
122123 }
123124 })
124125
125126 if app .MainSketchPath != nil {
126- if ! yield (StreamMessage {data : "compiling and updating sketch..." }) {
127+ if ! yield (StreamMessage {Type : InfoType , data : "Compiling and updating sketch..." }) {
127128 cancel ()
128129 return
129130 }
130131 if err := compileUploadSketch (ctx , & app , callbackWriter ); err != nil {
131- yield (StreamMessage {error : err })
132+ yield (StreamMessage {Type : ErrorType , error : err })
132133 return
133134 }
134135 }
135136 if app .MainPythonFile != nil {
136- if ! yield (StreamMessage {data : "Provisioning app..." }) {
137+ if ! yield (StreamMessage {Type : InfoType , data : "Provisioning app..." }) {
137138 cancel ()
138139 return
139140 }
140141 if err := ProvisionApp (ctx , provisioner , bricksIndex , & app ); err != nil {
141- yield (StreamMessage {error : err })
142+ yield (StreamMessage {Type : ErrorType , error : err })
142143 return
143144 }
144- if ! yield (StreamMessage {data : "Starting app..." }) {
145+
146+ if ! yield (StreamMessage {Type : InfoType , data : "Starting app..." }) {
145147 cancel ()
146148 return
147149 }
148150
149151 provisioningStateDir , err := getProvisioningStateDir (app )
150152 if err != nil {
151- yield (StreamMessage {error : err })
153+ yield (StreamMessage {Type : ErrorType , error : err })
152154 return
153155 }
154156
@@ -176,17 +178,17 @@ func StartApp(ctx context.Context, docker *dockerClient.Client, provisioner *Pro
176178 commands = append (commands , "up" , "-d" , "--remove-orphans" , "--pull" , "missing" )
177179 process , err := paths .NewProcess (envs , commands ... )
178180 if err != nil {
179- yield (StreamMessage {error : err })
181+ yield (StreamMessage {Type : ErrorType , error : err })
180182 return
181183 }
182184 process .RedirectStderrTo (callbackWriter )
183185 process .RedirectStdoutTo (callbackWriter )
184186 if err := process .RunWithinContext (ctx ); err != nil {
185- yield (StreamMessage {error : err })
187+ yield (StreamMessage {Type : ErrorType , error : err })
186188 return
187189 }
188190 }
189- _ = yield (StreamMessage {progress : & Progress {Name : "" , Progress : 100.0 }})
191+ _ = yield (StreamMessage {Type : ProgressType , progress : & Progress {Name : "" , Progress : 100.0 }})
190192 }
191193}
192194
0 commit comments