Restructure ffmpeg (#2392)

* Refactor transcode generation
* Move phash generation into separate package
* Refactor image thumbnail generation
* Move JSONTime to separate package
* Ffmpeg refactoring
* Refactor live transcoding
* Refactor scene marker preview generation
* Refactor preview generation
* Refactor screenshot generation
* Refactor sprite generation
* Change ffmpeg.IsStreamable to return error
* Move frame rate calculation into ffmpeg
* Refactor file locking
* Refactor title set during scan
* Add missing lockmanager instance
* Return error instead of logging in MatchContainer
This commit is contained in:
WithoutPants
2022-04-18 10:50:10 +10:00
committed by GitHub
parent cdaa191155
commit aacf07feef
89 changed files with 3208 additions and 2004 deletions

View File

@@ -0,0 +1,50 @@
package json
import (
"fmt"
"strings"
"time"
"github.com/stashapp/stash/pkg/utils"
)
var currentLocation = time.Now().Location()
type JSONTime struct {
time.Time
}
func (jt *JSONTime) UnmarshalJSON(b []byte) error {
s := strings.Trim(string(b), "\"")
if s == "null" {
jt.Time = time.Time{}
return nil
}
// #731 - returning an error here causes the entire JSON parse to fail for ffprobe.
jt.Time, _ = utils.ParseDateStringAsTime(s)
return nil
}
func (jt *JSONTime) MarshalJSON() ([]byte, error) {
if jt.Time.IsZero() {
return []byte("null"), nil
}
return []byte(fmt.Sprintf("\"%s\"", jt.Time.Format(time.RFC3339))), nil
}
func (jt JSONTime) GetTime() time.Time {
if currentLocation != nil {
if jt.IsZero() {
return time.Now().In(currentLocation)
} else {
return jt.Time.In(currentLocation)
}
} else {
if jt.IsZero() {
return time.Now()
} else {
return jt.Time
}
}
}