diff --git a/cmd/find-sticker.go b/cmd/find-sticker.go new file mode 100644 index 0000000..d81a74b --- /dev/null +++ b/cmd/find-sticker.go @@ -0,0 +1,44 @@ +/* +Copyright © 2023 NAME HERE +*/ +package cmd + +import ( + "fmt" + + "codeberg.org/danjones000/mpc-extra/mpd" + "github.com/spf13/cobra" +) + +// stickerCmd represents the sticker command +var stickerCmd = &cobra.Command{ + Use: "sticker", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: func(cmd *cobra.Command, args []string) { + name := args[0] + songs, _ := mpd.StickerFind(name) + for _, song := range songs { + fmt.Println(song.Path, name, ":", song.GetSticker(name)) + } + }, +} + +func init() { + findCmd.AddCommand(stickerCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // stickerCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // stickerCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} diff --git a/mpd/song.go b/mpd/song.go index 36e589c..351aa75 100644 --- a/mpd/song.go +++ b/mpd/song.go @@ -2,6 +2,7 @@ package mpd import ( "fmt" + "github.com/akrennmair/slice" "github.com/fhs/gompd/v2/mpd" ) @@ -43,5 +44,29 @@ func (s *Song) PrintAll(withStickers bool) { fmt.Println(v.Name, "*:", v.Value) } } - +} + +func (s *Song) GetSticker(name string) string { + if s.stickers != nil { + ret := slice.Filter(s.stickers, func(sticker mpd.Sticker) bool { + return sticker.Name == name + }) + if ret != nil && len(ret) > 0 { + first := ret[0] + return first.Value + } + } + + if connerror != nil { + return "" + } + + found, err := conn.StickerGet(s.Path, name) + if err != nil { + return "" + } + + s.stickers = append(s.stickers, *found) + + return found.Value } diff --git a/mpd/stickers.go b/mpd/stickers.go index 30058b8..16b487d 100644 --- a/mpd/stickers.go +++ b/mpd/stickers.go @@ -9,3 +9,22 @@ func StickersGetFor(file string) ([]mpd.Sticker, error) { return conn.StickerList(file) } + +func StickerFind(name string) ([]*Song, error) { + if connerror != nil { + return nil, connerror + } + + paths, sticks, err := conn.StickerFind("", name) + if err != nil { + return nil, err + } + + ret := make([]*Song, len(paths)) + for i := 0; i < len(paths); i++ { + ret[i] = newSong(mpd.Attrs{"file": paths[i]}) + ret[i].stickers = []mpd.Sticker{sticks[i]} + } + + return ret, nil +}