diff --git a/cmd/video/delete.go b/cmd/video/delete.go new file mode 100644 index 0000000..e6b669c --- /dev/null +++ b/cmd/video/delete.go @@ -0,0 +1,23 @@ +package video + +import ( + "github.com/eat-pray-ai/yutu/pkg/yutuber/video" + "github.com/spf13/cobra" +) + +var deleteCmd = &cobra.Command{ + Use: "delete", + Short: "delete a video on Youtube", + Long: "delete a video on Youtube", + Run: func(cmd *cobra.Command, args []string) { + v := video.NewVideo(video.WithId(id)) + v.Delete() + }, +} + +func init() { + videoCmd.AddCommand(deleteCmd) + + deleteCmd.Flags().StringVarP(&id, "id", "i", "", "ID of the video to delete") + deleteCmd.MarkFlagRequired("id") +} diff --git a/pkg/yutuber/video/video.go b/pkg/yutuber/video/video.go index 3258eb8..de192a1 100644 --- a/pkg/yutuber/video/video.go +++ b/pkg/yutuber/video/video.go @@ -21,6 +21,7 @@ var ( errSetThumbnail = errors.New("failed to set thumbnail") errRating = errors.New("failed to rate video") errGetRating = errors.New("failed to get rating") + errDeleteVideo = errors.New("failed to delete video") ) type video struct { @@ -62,6 +63,7 @@ type Video interface { Update() Rate() GetRating() + Delete() get([]string) []*youtube.Video setThumbnail(string, *youtube.Service) } @@ -288,6 +290,19 @@ func (v *video) GetRating() { utils.PrintYAML(res) } +func (v *video) Delete() { + call := service.Videos.Delete(v.id) + if v.onBehalfOfContentOwner != "" { + call = call.OnBehalfOfContentOwner(v.onBehalfOfContentOwner) + } + + err := call.Do() + if err != nil { + log.Fatalln(errors.Join(errDeleteVideo, err)) + } + fmt.Printf("Video %s deleted", v.id) +} + func (v *video) setThumbnail(thumbnail string, service *youtube.Service) { file, err := os.Open(thumbnail) if err != nil {