Версия 0.1.1 #1
@ -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
|
||||
ffPathUtilities *FFPathUtilities
|
||||
runningProcesses runningProcesses
|
||||
}
|
||||
|
||||
type File struct {
|
||||
@ -51,7 +58,8 @@ type ConvertData struct {
|
||||
|
||||
func NewService(ffPathUtilities FFPathUtilities) *Service {
|
||||
return &Service{
|
||||
ffPathUtilities: &ffPathUtilities,
|
||||
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
|
||||
}
|
||||
|
11
src/main.go
11
src/main.go
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user