Refactor package "convertor" "Main" method.
Moved the button for selecting a video file into a separate function.
This commit is contained in:
parent
97dd0f4b32
commit
dddbfa65bc
@ -1,6 +1,7 @@
|
||||
package convertor
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -8,7 +9,7 @@ import (
|
||||
|
||||
type ServiceContract interface {
|
||||
RunConvert(setting ConvertSetting) error
|
||||
GetTotalDuration(file File) (float64, error)
|
||||
GetTotalDuration(file *File) (float64, error)
|
||||
}
|
||||
|
||||
type Service struct {
|
||||
@ -23,7 +24,7 @@ type File struct {
|
||||
}
|
||||
|
||||
type ConvertSetting struct {
|
||||
VideoFileInput File
|
||||
VideoFileInput *File
|
||||
SocketPath string
|
||||
}
|
||||
|
||||
@ -67,12 +68,12 @@ func (s Service) RunConvert(setting ConvertSetting) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s Service) GetTotalDuration(file File) (duration float64, err error) {
|
||||
args := "-v error -select_streams v:0 -count_packets -show_entries stream=nb_read_packets -of csv=p=0 " + file.Path
|
||||
cmd := exec.Command(s.pathFFprobe, strings.Split(args, " ")...)
|
||||
func (s Service) GetTotalDuration(file *File) (duration float64, err error) {
|
||||
args := []string{"-v", "error", "-select_streams", "v:0", "-count_packets", "-show_entries", "stream=nb_read_packets", "-of", "csv=p=0", file.Path}
|
||||
cmd := exec.Command(s.pathFFprobe, args...)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
return 0, errors.New(strings.TrimSpace(string(out)))
|
||||
}
|
||||
return strconv.ParseFloat(strings.TrimSpace(string(out)), 64)
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import (
|
||||
type ViewContract interface {
|
||||
Main(
|
||||
runConvert func(setting HandleConvertSetting) error,
|
||||
getSocketPath func(File, *widget.ProgressBar) (string, error),
|
||||
getSocketPath func(*File, *widget.ProgressBar) (string, error),
|
||||
)
|
||||
}
|
||||
|
||||
@ -21,24 +21,24 @@ type View struct {
|
||||
}
|
||||
|
||||
type HandleConvertSetting struct {
|
||||
VideoFileInput File
|
||||
VideoFileInput *File
|
||||
SocketPath string
|
||||
}
|
||||
|
||||
type enableFormConversionStruct struct {
|
||||
fileVideoForConversion *widget.Button
|
||||
form *widget.Form
|
||||
}
|
||||
|
||||
func NewView(w fyne.Window) *View {
|
||||
return &View{w}
|
||||
}
|
||||
|
||||
func (v View) Main(
|
||||
runConvert func(setting HandleConvertSetting) error,
|
||||
getSocketPath func(File, *widget.ProgressBar) (string, error),
|
||||
getSocketPath func(*File, *widget.ProgressBar) (string, error),
|
||||
) {
|
||||
var fileInput File
|
||||
var form *widget.Form
|
||||
|
||||
fileVideoForConversionMessage := canvas.NewText("", color.RGBA{255, 0, 0, 255})
|
||||
fileVideoForConversionMessage.TextSize = 16
|
||||
fileVideoForConversionMessage.TextStyle = fyne.TextStyle{Bold: true}
|
||||
form := &widget.Form{}
|
||||
|
||||
conversionMessage := canvas.NewText("", color.RGBA{255, 0, 0, 255})
|
||||
conversionMessage.TextSize = 16
|
||||
@ -47,49 +47,29 @@ func (v View) Main(
|
||||
progress := widget.NewProgressBar()
|
||||
progress.Hide()
|
||||
|
||||
fileVideoForConversion := widget.NewButton("выбрать", func() {
|
||||
fileDialog := dialog.NewFileOpen(
|
||||
func(r fyne.URIReadCloser, err error) {
|
||||
if err != nil {
|
||||
fileVideoForConversionMessage.Text = err.Error()
|
||||
setStringErrorStyle(fileVideoForConversionMessage)
|
||||
return
|
||||
}
|
||||
fileVideoForConversion, fileVideoForConversionMessage, fileInput := v.getButtonFileVideoForConversion(form, progress, conversionMessage)
|
||||
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
|
||||
fileInput = File{
|
||||
Path: r.URI().Path(),
|
||||
Name: r.URI().Name(),
|
||||
Ext: r.URI().Extension(),
|
||||
}
|
||||
fileVideoForConversionMessage.Text = r.URI().Path()
|
||||
setStringSuccessStyle(fileVideoForConversionMessage)
|
||||
|
||||
form.Enable()
|
||||
}, v.w)
|
||||
fileDialog.Show()
|
||||
})
|
||||
|
||||
form = &widget.Form{
|
||||
Items: []*widget.FormItem{
|
||||
form.Items = []*widget.FormItem{
|
||||
{Text: "Файл для ковертации:", Widget: fileVideoForConversion},
|
||||
{Widget: fileVideoForConversionMessage},
|
||||
},
|
||||
SubmitText: "Конвертировать",
|
||||
OnSubmit: func() {
|
||||
}
|
||||
form.SubmitText = "Конвертировать"
|
||||
|
||||
enableFormConversionStruct := enableFormConversionStruct{
|
||||
fileVideoForConversion: fileVideoForConversion,
|
||||
form: form,
|
||||
}
|
||||
|
||||
form.OnSubmit = func() {
|
||||
fileVideoForConversion.Disable()
|
||||
form.Disable()
|
||||
|
||||
socketPath, err := getSocketPath(fileInput, progress)
|
||||
|
||||
if err != nil {
|
||||
conversionMessage.Text = err.Error()
|
||||
setStringErrorStyle(conversionMessage)
|
||||
fileVideoForConversion.Enable()
|
||||
form.Enable()
|
||||
showConversionMessage(conversionMessage, err)
|
||||
enableFormConversion(enableFormConversionStruct)
|
||||
return
|
||||
}
|
||||
|
||||
setting := HandleConvertSetting{
|
||||
@ -98,18 +78,53 @@ func (v View) Main(
|
||||
}
|
||||
err = runConvert(setting)
|
||||
if err != nil {
|
||||
conversionMessage.Text = err.Error()
|
||||
setStringErrorStyle(conversionMessage)
|
||||
showConversionMessage(conversionMessage, err)
|
||||
enableFormConversion(enableFormConversionStruct)
|
||||
return
|
||||
}
|
||||
fileVideoForConversion.Enable()
|
||||
form.Enable()
|
||||
},
|
||||
enableFormConversion(enableFormConversionStruct)
|
||||
}
|
||||
|
||||
v.w.SetContent(widget.NewCard("Конвертор видео файлов", "", container.NewVBox(form, conversionMessage, progress)))
|
||||
form.Disable()
|
||||
}
|
||||
|
||||
func (v View) getButtonFileVideoForConversion(form *widget.Form, progress *widget.ProgressBar, conversionMessage *canvas.Text) (*widget.Button, *canvas.Text, *File) {
|
||||
fileInput := &File{}
|
||||
|
||||
fileVideoForConversionMessage := canvas.NewText("", color.RGBA{255, 0, 0, 255})
|
||||
fileVideoForConversionMessage.TextSize = 16
|
||||
fileVideoForConversionMessage.TextStyle = fyne.TextStyle{Bold: true}
|
||||
|
||||
button := widget.NewButton("выбрать", func() {
|
||||
fileDialog := dialog.NewFileOpen(
|
||||
func(r fyne.URIReadCloser, err error) {
|
||||
if err != nil {
|
||||
fileVideoForConversionMessage.Text = err.Error()
|
||||
setStringErrorStyle(fileVideoForConversionMessage)
|
||||
return
|
||||
}
|
||||
if r == nil {
|
||||
return
|
||||
}
|
||||
|
||||
fileInput.Path = r.URI().Path()
|
||||
fileInput.Name = r.URI().Name()
|
||||
fileInput.Ext = r.URI().Extension()
|
||||
|
||||
fileVideoForConversionMessage.Text = r.URI().Path()
|
||||
setStringSuccessStyle(fileVideoForConversionMessage)
|
||||
|
||||
form.Enable()
|
||||
progress.Hide()
|
||||
conversionMessage.Text = ""
|
||||
}, v.w)
|
||||
fileDialog.Show()
|
||||
})
|
||||
|
||||
return button, fileVideoForConversionMessage, fileInput
|
||||
}
|
||||
|
||||
func setStringErrorStyle(text *canvas.Text) {
|
||||
text.Color = color.RGBA{255, 0, 0, 255}
|
||||
text.Refresh()
|
||||
@ -119,3 +134,13 @@ func setStringSuccessStyle(text *canvas.Text) {
|
||||
text.Color = color.RGBA{49, 127, 114, 255}
|
||||
text.Refresh()
|
||||
}
|
||||
|
||||
func showConversionMessage(conversionMessage *canvas.Text, err error) {
|
||||
conversionMessage.Text = err.Error()
|
||||
setStringErrorStyle(conversionMessage)
|
||||
}
|
||||
|
||||
func enableFormConversion(enableFormConversionStruct enableFormConversionStruct) {
|
||||
enableFormConversionStruct.fileVideoForConversion.Enable()
|
||||
enableFormConversionStruct.form.Enable()
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ func (h ConvertorHandler) GetConvertor() {
|
||||
h.convertorView.Main(h.runConvert, h.getSockPath)
|
||||
}
|
||||
|
||||
func (h ConvertorHandler) getSockPath(file convertor.File, progressbar *widget.ProgressBar) (string, error) {
|
||||
func (h ConvertorHandler) getSockPath(file *convertor.File, progressbar *widget.ProgressBar) (string, error) {
|
||||
totalDuration, err := h.getTotalDuration(file)
|
||||
|
||||
if err != nil {
|
||||
@ -101,6 +101,6 @@ func (h ConvertorHandler) runConvert(setting convertor.HandleConvertSetting) err
|
||||
)
|
||||
}
|
||||
|
||||
func (h ConvertorHandler) getTotalDuration(file convertor.File) (float64, error) {
|
||||
func (h ConvertorHandler) getTotalDuration(file *convertor.File) (float64, error) {
|
||||
return h.convertorService.GetTotalDuration(file)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user