Fix path to ffmpeg and ffprobe.
Added the ability to select the path to ffmpeg and ffprobe.
This commit is contained in:
		@@ -1,8 +1,9 @@
 | 
			
		||||
package handler
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"ffmpegGui/convertor"
 | 
			
		||||
	myError "ffmpegGui/error"
 | 
			
		||||
	"ffmpegGui/setting"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"fyne.io/fyne/v2/widget"
 | 
			
		||||
	"log"
 | 
			
		||||
@@ -11,31 +12,39 @@ import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ConvertorHandler struct {
 | 
			
		||||
	convertorService convertor.ServiceContract
 | 
			
		||||
	convertorView    convertor.ViewContract
 | 
			
		||||
	errorView        myError.ViewContract
 | 
			
		||||
	convertorService  convertor.ServiceContract
 | 
			
		||||
	convertorView     convertor.ViewContract
 | 
			
		||||
	settingView       setting.ViewContract
 | 
			
		||||
	settingRepository setting.RepositoryContract
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewConvertorHandler(
 | 
			
		||||
	convertorService convertor.ServiceContract,
 | 
			
		||||
	convertorView convertor.ViewContract,
 | 
			
		||||
	errorView myError.ViewContract,
 | 
			
		||||
	settingView setting.ViewContract,
 | 
			
		||||
	settingRepository setting.RepositoryContract,
 | 
			
		||||
) *ConvertorHandler {
 | 
			
		||||
	return &ConvertorHandler{
 | 
			
		||||
		convertorService,
 | 
			
		||||
		convertorView,
 | 
			
		||||
		errorView,
 | 
			
		||||
		settingView,
 | 
			
		||||
		settingRepository,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h ConvertorHandler) GetConvertor() {
 | 
			
		||||
	h.convertorView.Main(h.runConvert, h.getSockPath)
 | 
			
		||||
	if h.checkingFFPathUtilities() == true {
 | 
			
		||||
		h.convertorView.Main(h.runConvert, h.getSockPath)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	h.settingView.SelectFFPath(h.saveSettingFFPath)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h ConvertorHandler) getSockPath(file *convertor.File, progressbar *widget.ProgressBar) (string, error) {
 | 
			
		||||
@@ -104,3 +113,68 @@ func (h ConvertorHandler) runConvert(setting convertor.HandleConvertSetting) err
 | 
			
		||||
func (h ConvertorHandler) getTotalDuration(file *convertor.File) (float64, error) {
 | 
			
		||||
	return h.convertorService.GetTotalDuration(file)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h ConvertorHandler) checkingFFPathUtilities() bool {
 | 
			
		||||
	if h.checkingFFPath() == true {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var pathsToFF []convertor.FFPathUtilities
 | 
			
		||||
	if runtime.GOOS == "windows" {
 | 
			
		||||
		pathsToFF = []convertor.FFPathUtilities{{"ffmpeg/bin/ffmpeg.exe", "ffmpeg/bin/ffprobe.exe"}}
 | 
			
		||||
	} else {
 | 
			
		||||
		pathsToFF = []convertor.FFPathUtilities{{"ffmpeg/bin/ffmpeg", "ffmpeg/bin/ffprobe"}, {"ffmpeg", "ffprobe"}}
 | 
			
		||||
	}
 | 
			
		||||
	for _, item := range pathsToFF {
 | 
			
		||||
		ffmpegChecking, _ := h.convertorService.ChangeFFmpegPath(item.FFmpeg)
 | 
			
		||||
		if ffmpegChecking == false {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		ffprobeChecking, _ := h.convertorService.ChangeFFprobePath(item.FFprobe)
 | 
			
		||||
		if ffprobeChecking == false {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		ffmpegEntity := setting.Setting{Code: "ffmpeg", Value: item.FFmpeg}
 | 
			
		||||
		h.settingRepository.Create(ffmpegEntity)
 | 
			
		||||
		ffprobeEntity := setting.Setting{Code: "ffprobe", Value: item.FFprobe}
 | 
			
		||||
		h.settingRepository.Create(ffprobeEntity)
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h ConvertorHandler) saveSettingFFPath(ffmpegPath string, ffprobePath string) error {
 | 
			
		||||
	ffmpegChecking, _ := h.convertorService.ChangeFFmpegPath(ffmpegPath)
 | 
			
		||||
	if ffmpegChecking == false {
 | 
			
		||||
		return errors.New("Это не FFmpeg")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ffprobeChecking, _ := h.convertorService.ChangeFFprobePath(ffprobePath)
 | 
			
		||||
	if ffprobeChecking == false {
 | 
			
		||||
		return errors.New("Это не FFprobe")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ffmpegEntity := setting.Setting{Code: "ffmpeg", Value: ffmpegPath}
 | 
			
		||||
	h.settingRepository.Create(ffmpegEntity)
 | 
			
		||||
	ffprobeEntity := setting.Setting{Code: "ffprobe", Value: ffprobePath}
 | 
			
		||||
	h.settingRepository.Create(ffprobeEntity)
 | 
			
		||||
 | 
			
		||||
	h.GetConvertor()
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h ConvertorHandler) checkingFFPath() bool {
 | 
			
		||||
	_, err := h.convertorService.GetFFmpegVesrion()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = h.convertorService.GetFFprobeVersion()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user