Add directory selection for saving converted files

Introduce logic and UI for selecting and persisting a directory to save converted files. Extend existing components with directory selection buttons, message updates, and storage preferences.
This commit is contained in:
2025-06-08 00:18:56 +05:00
parent 394824ce88
commit 6c0abac1c5
4 changed files with 123 additions and 4 deletions

View File

@@ -17,8 +17,18 @@ import (
"path/filepath"
)
func Convertor(window window.WindowContract, addFileForConversion func(file ffmpeg.File)) fyne.CanvasObject {
form := newFormConvertor(window, addFileForConversion)
func Convertor(
window window.WindowContract,
addFileForConversion func(file ffmpeg.File),
directoryForSavingPath string,
directoryForSaving func(path string),
) fyne.CanvasObject {
form := newFormConvertor(
window,
addFileForConversion,
directoryForSavingPath,
directoryForSaving,
)
converterVideoFilesTitle := lang.L("converterVideoFilesTitle")
return widget.NewCard(converterVideoFilesTitle, "", container.NewVScroll(form.getForm()))
@@ -30,9 +40,15 @@ type formConvertor struct {
window window.WindowContract
addFileForConversion func(file ffmpeg.File)
directoryForSaving func(path string)
}
func newFormConvertor(window window.WindowContract, addFileForConversion func(file ffmpeg.File)) *formConvertor {
func newFormConvertor(
window window.WindowContract,
addFileForConversion func(file ffmpeg.File),
directoryForSavingPath string,
directoryForSaving func(path string),
) *formConvertor {
f := widget.NewForm()
f.SubmitText = lang.L("converterVideoFilesSubmitTitle")
@@ -40,9 +56,11 @@ func newFormConvertor(window window.WindowContract, addFileForConversion func(fi
form: f,
window: window,
addFileForConversion: addFileForConversion,
directoryForSaving: directoryForSaving,
}
fileForConversion := formConvertor.newFileForConversion()
directoryForSavingButton := formConvertor.newDirectoryForSaving(directoryForSavingPath)
items := []*widget.FormItem{
{
@@ -52,6 +70,14 @@ func newFormConvertor(window window.WindowContract, addFileForConversion func(fi
{
Widget: container.NewHScroll(fileForConversion.message),
},
{
Text: lang.L("buttonForSelectedDirTitle"),
Widget: directoryForSavingButton.button,
},
{
Widget: container.NewHScroll(directoryForSavingButton.message),
},
}
formConvertor.form.Items = items
formConvertor.items = items
@@ -161,6 +187,57 @@ func (f *formConvertor) newFileForConversion() *fileForConversion {
return fileForConversion
}
type directoryForSaving struct {
button *widget.Button
message *canvas.Text
path string
}
func (f *formConvertor) newDirectoryForSaving(directoryForSavingPath string) *directoryForSaving {
directoryForSaving := &directoryForSaving{
path: "",
}
directoryForSaving.message = canvas.NewText("", color.RGBA{R: 255, G: 0, B: 0, A: 255})
directoryForSaving.message.TextSize = 16
directoryForSaving.message.TextStyle = fyne.TextStyle{Bold: true}
buttonTitle := lang.L("choose")
locationURI, err := utils.PathToListableURI(directoryForSavingPath)
if err == nil {
directoryForSaving.path = locationURI.Path()
directoryForSaving.message.Text = locationURI.Path()
utils.SetStringSuccessStyle(directoryForSaving.message)
}
directoryForSaving.button = widget.NewButton(buttonTitle, func() {
f.window.NewFolderOpen(func(r fyne.ListableURI, err error) {
if err != nil {
directoryForSaving.message.Text = err.Error()
utils.SetStringErrorStyle(directoryForSaving.message)
return
}
if r == nil {
return
}
directoryForSaving.path = r.Path()
directoryForSaving.message.Text = r.Path()
utils.SetStringSuccessStyle(directoryForSaving.message)
locationURI, err = storage.ListerForURI(r)
if err == nil {
f.directoryForSaving(locationURI.Path())
}
}, locationURI)
})
return directoryForSaving
}
func (c *fileForConversion) addChangeCallback(callback func(err error)) {
c.changeCallbacks[len(c.changeCallbacks)] = callback
}