Skip to content

Commit ccf103d

Browse files
committed
use a backup file to mitigate canceling flameshot
1 parent 22c2295 commit ccf103d

File tree

2 files changed

+65
-7
lines changed

2 files changed

+65
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ hellocontest*.AppImage
1212
.debpkg/usr
1313
.config_backup
1414
ui/glade/#contest.glade#
15+
docs/screenshots/*.bak.png

script/screenshots.go

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,11 @@ func TriggerScreenshot(filename string) Step {
166166

167167
func 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

Comments
 (0)