98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"git.leaktechnologies.dev/stu/VideoTools/internal/logging"
|
|
)
|
|
|
|
type mergeConfig struct {
|
|
Format string `json:"format"`
|
|
KeepAllStreams bool `json:"keepAllStreams"`
|
|
Chapters bool `json:"chapters"`
|
|
CodecMode string `json:"codecMode"`
|
|
DVDRegion string `json:"dvdRegion"`
|
|
DVDAspect string `json:"dvdAspect"`
|
|
FrameRate string `json:"frameRate"`
|
|
MotionInterpolation bool `json:"motionInterpolation"`
|
|
}
|
|
|
|
func defaultMergeConfig() mergeConfig {
|
|
return mergeConfig{
|
|
Format: "mkv-copy",
|
|
KeepAllStreams: false,
|
|
Chapters: true,
|
|
CodecMode: "",
|
|
DVDRegion: "NTSC",
|
|
DVDAspect: "16:9",
|
|
FrameRate: "Source",
|
|
MotionInterpolation: false,
|
|
}
|
|
}
|
|
|
|
func loadPersistedMergeConfig() (mergeConfig, error) {
|
|
var cfg mergeConfig
|
|
path := moduleConfigPath("merge")
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
if err := json.Unmarshal(data, &cfg); err != nil {
|
|
return cfg, err
|
|
}
|
|
if cfg.Format == "" {
|
|
cfg.Format = "mkv-copy"
|
|
}
|
|
if cfg.DVDRegion == "" {
|
|
cfg.DVDRegion = "NTSC"
|
|
}
|
|
if cfg.DVDAspect == "" {
|
|
cfg.DVDAspect = "16:9"
|
|
}
|
|
if cfg.FrameRate == "" {
|
|
cfg.FrameRate = "Source"
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
func savePersistedMergeConfig(cfg mergeConfig) error {
|
|
path := moduleConfigPath("merge")
|
|
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
|
return err
|
|
}
|
|
data, err := json.MarshalIndent(cfg, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, data, 0o644)
|
|
}
|
|
|
|
func (s *appState) applyMergeConfig(cfg mergeConfig) {
|
|
s.mergeFormat = cfg.Format
|
|
s.mergeKeepAll = cfg.KeepAllStreams
|
|
s.mergeChapters = cfg.Chapters
|
|
s.mergeCodecMode = cfg.CodecMode
|
|
s.mergeDVDRegion = cfg.DVDRegion
|
|
s.mergeDVDAspect = cfg.DVDAspect
|
|
s.mergeFrameRate = cfg.FrameRate
|
|
s.mergeMotionInterpolation = cfg.MotionInterpolation
|
|
}
|
|
|
|
func (s *appState) persistMergeConfig() {
|
|
cfg := mergeConfig{
|
|
Format: s.mergeFormat,
|
|
KeepAllStreams: s.mergeKeepAll,
|
|
Chapters: s.mergeChapters,
|
|
CodecMode: s.mergeCodecMode,
|
|
DVDRegion: s.mergeDVDRegion,
|
|
DVDAspect: s.mergeDVDAspect,
|
|
FrameRate: s.mergeFrameRate,
|
|
MotionInterpolation: s.mergeMotionInterpolation,
|
|
}
|
|
if err := savePersistedMergeConfig(cfg); err != nil {
|
|
logging.Debug(logging.CatSystem, "failed to persist merge config: %v", err)
|
|
}
|
|
}
|