Extended `FFprobeContract` with `GetVersion` to fetch FFprobe version. Implemented version extraction in `utilities` and `ffprobe` to support version retrieval functionality.
208 lines
3.7 KiB
Go
208 lines
3.7 KiB
Go
package ffmpeg
|
|
|
|
import (
|
|
"errors"
|
|
"fyne.io/fyne/v2/lang"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/setting"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/ffmpeg/encoder"
|
|
)
|
|
|
|
type File struct {
|
|
Path string
|
|
Name string
|
|
Ext string
|
|
}
|
|
|
|
type ConvertSetting struct {
|
|
FileInput File
|
|
FileOut File
|
|
OverwriteOutputFiles bool
|
|
Encoder encoder.EncoderContract
|
|
}
|
|
|
|
type UtilitiesContract interface {
|
|
UtilityCheck() bool
|
|
|
|
GetFFmpeg() (FFmpegContract, error)
|
|
GetFFmpegVersion() string
|
|
GetFFmpegPath() string
|
|
ChangeFFmpeg(path string) error
|
|
|
|
GetFFprobe() (FFprobeContract, error)
|
|
GetFFprobeVersion() string
|
|
GetFFprobePath() string
|
|
ChangeFFprobe(path string) error
|
|
|
|
GetFFplay() (FFplayContract, error)
|
|
GetFFplayPath() string
|
|
ChangeFFplay(path string) error
|
|
}
|
|
|
|
type utilities struct {
|
|
setting setting.SettingContract
|
|
ffmpeg FFmpegContract
|
|
ffprobe FFprobeContract
|
|
ffplay FFplayContract
|
|
}
|
|
|
|
func NewUtilities(setting setting.SettingContract) UtilitiesContract {
|
|
return &utilities{
|
|
setting: setting,
|
|
}
|
|
}
|
|
|
|
func (u *utilities) UtilityCheck() bool {
|
|
var err error
|
|
|
|
_, err = u.GetFFmpeg()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
_, err = u.GetFFprobe()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
_, err = u.GetFFplay()
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (u *utilities) GetFFmpeg() (FFmpegContract, error) {
|
|
if u.ffmpeg == nil {
|
|
createFFmpeg, err := newFFmpeg(u.setting.GetFFmpegPath())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
u.ffmpeg = createFFmpeg
|
|
}
|
|
|
|
return u.ffmpeg, nil
|
|
}
|
|
|
|
func (u *utilities) GetFFmpegVersion() string {
|
|
ffmpegService, err := u.GetFFmpeg()
|
|
if err != nil {
|
|
return lang.L("errorFFmpegVersion")
|
|
}
|
|
|
|
version, err := ffmpegService.GetVersion()
|
|
if err != nil {
|
|
return lang.L("errorFFmpegVersion")
|
|
}
|
|
return version
|
|
}
|
|
|
|
func (u *utilities) GetFFmpegPath() string {
|
|
ffmpegService, err := u.GetFFmpeg()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return ffmpegService.GetPath()
|
|
}
|
|
|
|
func (u *utilities) ChangeFFmpeg(path string) error {
|
|
if path == "" {
|
|
return errors.New(lang.L("errorFFmpeg"))
|
|
}
|
|
|
|
createFFmpeg, err := newFFmpeg(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u.ffmpeg = createFFmpeg
|
|
u.setting.SetFFmpegPath(path)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (u *utilities) GetFFprobe() (FFprobeContract, error) {
|
|
if u.ffprobe == nil {
|
|
createFFprobe, err := newFFprobe(u.setting.GetFFprobePath())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
u.ffprobe = createFFprobe
|
|
}
|
|
|
|
return u.ffprobe, nil
|
|
}
|
|
|
|
func (u *utilities) GetFFprobeVersion() string {
|
|
ffprobeService, err := u.GetFFprobe()
|
|
if err != nil {
|
|
return lang.L("errorFFprobeVersion")
|
|
}
|
|
|
|
ffprobeVersion, err := ffprobeService.GetVersion()
|
|
if err != nil {
|
|
return lang.L("errorFFprobeVersion")
|
|
}
|
|
return ffprobeVersion
|
|
}
|
|
|
|
func (u *utilities) GetFFprobePath() string {
|
|
ffprobeService, err := u.GetFFprobe()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return ffprobeService.GetPath()
|
|
}
|
|
|
|
func (u *utilities) ChangeFFprobe(path string) error {
|
|
if path == "" {
|
|
return errors.New(lang.L("errorFFprobe"))
|
|
}
|
|
|
|
createFFprobe, err := newFFprobe(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u.ffprobe = createFFprobe
|
|
u.setting.SetFFprobePath(path)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (u *utilities) GetFFplay() (FFplayContract, error) {
|
|
if u.ffplay == nil {
|
|
createFFplay, err := newFFplay(u.setting.GetFFplayPath())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
u.ffplay = createFFplay
|
|
}
|
|
|
|
return u.ffplay, nil
|
|
}
|
|
|
|
func (u *utilities) GetFFplayPath() string {
|
|
ffplayService, err := u.GetFFplay()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return ffplayService.GetPath()
|
|
}
|
|
|
|
func (u *utilities) ChangeFFplay(path string) error {
|
|
if path == "" {
|
|
return errors.New(lang.L("errorFFplay"))
|
|
}
|
|
|
|
createFFplay, err := newFFplay(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u.ffplay = createFFplay
|
|
u.setting.SetFFplayPath(path)
|
|
|
|
return nil
|
|
}
|