Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v0.8.2 41 lines 1.2 kB view raw
1package media 2 3import ( 4 "context" 5 "fmt" 6 "io" 7 "sort" 8 "time" 9 10 "stream.place/streamplace/pkg/aqtime" 11 "stream.place/streamplace/pkg/config" 12 "stream.place/streamplace/pkg/model" 13) 14 15func ClipUser(ctx context.Context, mod model.Model, cli *config.CLI, user string, writer io.Writer, before *time.Time, after *time.Time) error { 16 segments, err := mod.LatestSegmentsForUser(user, -1, before, after) 17 if err != nil { 18 return fmt.Errorf("unable to get segments: %w", err) 19 } 20 if len(segments) == 0 { 21 return fmt.Errorf("no segments found") 22 } 23 // Sort segments by StartTime, oldest first 24 sort.Slice(segments, func(i, j int) bool { 25 return segments[i].StartTime.Before(segments[j].StartTime) 26 }) 27 segmentFiles := []string{} 28 for _, segment := range segments { 29 aqt := aqtime.FromTime(segment.StartTime) 30 fpath, err := cli.SegmentFilePath(user, fmt.Sprintf("%s.%s", aqt.FileSafeString(), "mp4")) 31 if err != nil { 32 return fmt.Errorf("unable to get segment file path: %w", err) 33 } 34 segmentFiles = append(segmentFiles, fpath) 35 } 36 err = Clip(ctx, segmentFiles, writer) 37 if err != nil { 38 return fmt.Errorf("unable to clip segments: %w", err) 39 } 40 return nil 41}