5 Commits

6 changed files with 32 additions and 8 deletions

View File

@@ -1,3 +1,5 @@
# ffmpeg-gui
Простенький интерфейс к программе ffmpeg.
<img src="images/screenshot-ffmpeg-gui.png">

BIN
images/screenshot-ffmpeg-gui.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -17,6 +17,7 @@ type ServiceContract interface {
GetFFprobeVersion() (string, error)
ChangeFFmpegPath(path string) (bool, error)
ChangeFFprobePath(path string) (bool, error)
GetRunningProcesses() map[int]*exec.Cmd
}
type ProgressContract interface {
@@ -29,8 +30,14 @@ type FFPathUtilities struct {
FFprobe string
}
type runningProcesses struct {
items map[int]*exec.Cmd
numberOfStarts int
}
type Service struct {
ffPathUtilities *FFPathUtilities
runningProcesses runningProcesses
}
type File struct {
@@ -52,6 +59,7 @@ type ConvertData struct {
func NewService(ffPathUtilities FFPathUtilities) *Service {
return &Service{
ffPathUtilities: &ffPathUtilities,
runningProcesses: runningProcesses{items: map[int]*exec.Cmd{}, numberOfStarts: 0},
}
}
@@ -77,10 +85,14 @@ func (s Service) RunConvert(setting ConvertSetting, progress ProgressContract) e
if err != nil {
return err
}
index := s.runningProcesses.numberOfStarts
s.runningProcesses.numberOfStarts++
s.runningProcesses.items[index] = cmd
errProgress := progress.Run(stdOut, stdErr)
err = cmd.Wait()
delete(s.runningProcesses.items, index)
if errProgress != nil {
return errProgress
}
@@ -155,3 +167,7 @@ func (s Service) ChangeFFprobePath(path string) (bool, error) {
s.ffPathUtilities.FFprobe = path
return true, nil
}
func (s Service) GetRunningProcesses() map[int]*exec.Cmd {
return s.runningProcesses.items
}

View File

@@ -98,7 +98,6 @@ func (v View) Main(
v.w.SetContent(widget.NewCard("Конвертор видео файлов в mp4", "", container.NewVBox(form, conversionMessage, progress)))
form.Disable()
progress.Hide()
}
func (v View) getButtonFileVideoForConversion(form *widget.Form, progress *widget.ProgressBar, conversionMessage *canvas.Text) (*widget.Button, *canvas.Text, *File) {
@@ -128,7 +127,8 @@ func (v View) getButtonFileVideoForConversion(form *widget.Form, progress *widge
setStringSuccessStyle(fileVideoForConversionMessage)
form.Enable()
progress.Hide()
progress.Value = 0
progress.Refresh()
conversionMessage.Text = ""
}, v.w)
fileDialog.Show()

View File

@@ -153,7 +153,6 @@ func (p progress) Run(stdOut io.ReadCloser, stdErr io.ReadCloser) error {
p.progressbar.Value = 0
p.progressbar.Max = p.totalDuration
p.progressbar.Show()
p.progressbar.Refresh()
progress := 0.0

View File

@@ -38,7 +38,7 @@ func main() {
return
}
defer appClose(db)
defer appCloseWithDb(db)
err = migration.Run(db)
if err != nil {
@@ -66,6 +66,7 @@ func main() {
convertorView := convertor.NewView(w)
settingView := setting.NewView(w)
convertorService := convertor.NewService(ffPathUtilities)
defer appCloseWithConvert(convertorService)
mainHandler := handler.NewConvertorHandler(convertorService, convertorView, settingView, settingRepository)
mainHandler.GetConvertor()
@@ -73,13 +74,19 @@ func main() {
w.ShowAndRun()
}
func appClose(db *gorm.DB) {
func appCloseWithDb(db *gorm.DB) {
sqlDB, err := db.DB()
if err == nil {
_ = sqlDB.Close()
}
}
func appCloseWithConvert(convertorService convertor.ServiceContract) {
for _, cmd := range convertorService.GetRunningProcesses() {
_ = cmd.Process.Kill()
}
}
func canCreateFile(path string) bool {
file, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {