mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-02 21:24:20 -04:00
Transcoder: More sturdy fix for faulty chapter parsing
This commit is contained in:
parent
be0bd81107
commit
9222b2e2d3
@ -310,21 +310,7 @@ func getInfo(path string) (*MediaInfo, error) {
|
|||||||
Link: link,
|
Link: link,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
Chapters: Filter(Map(make([]Chapter, max(chapters_end-chapters_begin, 1)-1), func(_ Chapter, i int) Chapter {
|
Chapters: getChapters(chapters_begin, chapters_end, mi),
|
||||||
startTime := mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i, mediainfo.InfoName)
|
|
||||||
// We expect `startTime` to be something like `00:00:00`
|
|
||||||
if len(startTime) > 0 && !unicode.IsDigit(rune(startTime[0])) {
|
|
||||||
return Chapter{}
|
|
||||||
}
|
|
||||||
return Chapter{
|
|
||||||
StartTime: ParseTime(startTime),
|
|
||||||
// +1 is safe, the value at chapters_end contains the right duration
|
|
||||||
EndTime: ParseTime(mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i+1, mediainfo.InfoName)),
|
|
||||||
Name: mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i, mediainfo.InfoText),
|
|
||||||
}
|
|
||||||
}), func(chapter Chapter, i int) bool {
|
|
||||||
return chapter != Chapter{}
|
|
||||||
}),
|
|
||||||
Fonts: Map(
|
Fonts: Map(
|
||||||
attachments,
|
attachments,
|
||||||
func(font string, _ int) string {
|
func(font string, _ int) string {
|
||||||
@ -354,3 +340,33 @@ func getInfo(path string) (*MediaInfo, error) {
|
|||||||
}
|
}
|
||||||
return &ret, nil
|
return &ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func chapterTimeIsValid(chapterTime string) bool {
|
||||||
|
return len(chapterTime) > 0 && unicode.IsDigit(rune(chapterTime[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func getChapters(chapters_begin uint32, chapters_end uint32, mi *mediainfo.File) []Chapter {
|
||||||
|
chapterCount := max(chapters_end-chapters_begin, 1) - 1
|
||||||
|
chapterIterationCount := chapterCount
|
||||||
|
|
||||||
|
for i := uint32(0); i < chapterIterationCount; i++ {
|
||||||
|
startTime := mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin+i), mediainfo.InfoName)
|
||||||
|
if !chapterTimeIsValid(startTime) {
|
||||||
|
chapterIterationCount = chapterIterationCount + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Filter(Map(make([]Chapter, chapterIterationCount), func(_ Chapter, i int) Chapter {
|
||||||
|
startTime := mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i, mediainfo.InfoName)
|
||||||
|
if !chapterTimeIsValid(startTime) {
|
||||||
|
return Chapter{}
|
||||||
|
}
|
||||||
|
return Chapter{
|
||||||
|
StartTime: ParseTime(startTime),
|
||||||
|
// +1 is safe, the value at chapters_end contains the right duration
|
||||||
|
EndTime: ParseTime(mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i+1, mediainfo.InfoName)),
|
||||||
|
Name: mi.GetI(mediainfo.StreamMenu, 0, int(chapters_begin)+i, mediainfo.InfoText),
|
||||||
|
}
|
||||||
|
}), func(chapter Chapter, i int) bool {
|
||||||
|
return chapter != Chapter{}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user