@@ -166,13 +166,11 @@ func TriggerScreenshot(filename string) Step {
166166
167167func  TriggerScreenshotWithDelay (name  string , delay  time.Duration ) Step  {
168168	return  func (_  context.Context , _  * Runtime ) time.Duration  {
169- 		filename  :=  filepath .Join (ScreenshotsFolder , name + ".png" )
170- 		backupFilename  :=  filepath .Join (ScreenshotsFolder , name + ".bak.png" )
171- 		_  =  backupFilename 
172- 		// TODO: do not delete the filename, but rename it to backupFilename; if the later already exists, delete it first 
173- 		err  :=  os .RemoveAll (filename )
169+ 		filename , _  :=  screenshotFilenames (name )
170+ 
171+ 		err  :=  backupScreenshot (name )
174172		if  err  !=  nil  {
175- 			log .Printf ("Cannot delete  %s: %v" , filename , err )
173+ 			log .Printf ("Cannot backup screenshot  %s: %v" , filename , err )
176174		}
177175
178176		// TODO: evaluate ctx.Done() and stop the flameshot process 
@@ -189,8 +187,67 @@ func TriggerScreenshotWithDelay(name string, delay time.Duration) Step {
189187			log .Printf ("Screenshot %s successful" , name )
190188		}
191189
192- 		// TODO: if the filename does not exist, flameshot was canceled; rename backupFilename to filename in order to restore the screenshot 
190+ 		if  ! fileExists (filename ) {
191+ 			log .Printf ("restoring screenhot %s" , name )
192+ 			err  =  restoreScreenshot (name )
193+ 		} else  {
194+ 			log .Printf ("removing screenshot backup %s" , name )
195+ 			err  =  removeBackup (name )
196+ 		}
197+ 		if  err  !=  nil  {
198+ 			log .Printf ("Screenshot %s backup handling failed: %v" , name , err )
199+ 		}
193200
194201		return  0 
195202	}
196203}
204+ 
205+ func  screenshotFilenames (name  string ) (string , string ) {
206+ 	return  filepath .Join (ScreenshotsFolder , name + ".png" ), filepath .Join (ScreenshotsFolder , name + ".bak.png" )
207+ 
208+ }
209+ 
210+ func  fileExists (filename  string ) bool  {
211+ 	_ , err  :=  os .Stat (filename )
212+ 	return  err  ==  nil 
213+ }
214+ 
215+ func  backupScreenshot (name  string ) error  {
216+ 	filename , backupFilename  :=  screenshotFilenames (name )
217+ 	if  ! fileExists (filename ) {
218+ 		return  nil 
219+ 	}
220+ 
221+ 	if  fileExists (backupFilename ) {
222+ 		err  :=  os .Remove (backupFilename )
223+ 		if  err  !=  nil  {
224+ 			return  err 
225+ 		}
226+ 	}
227+ 
228+ 	return  os .Rename (filename , backupFilename )
229+ }
230+ 
231+ func  restoreScreenshot (name  string ) error  {
232+ 	filename , backupFilename  :=  screenshotFilenames (name )
233+ 	if  fileExists (filename ) {
234+ 		err  :=  os .Remove (filename )
235+ 		if  err  !=  nil  {
236+ 			return  err 
237+ 		}
238+ 	}
239+ 
240+ 	if  fileExists (backupFilename ) {
241+ 		return  os .Rename (backupFilename , filename )
242+ 	}
243+ 
244+ 	return  nil 
245+ }
246+ 
247+ func  removeBackup (name  string ) error  {
248+ 	_ , backupFilename  :=  screenshotFilenames (name )
249+ 	if  fileExists (backupFilename ) {
250+ 		return  os .Remove (backupFilename )
251+ 	}
252+ 	return  nil 
253+ }
0 commit comments