Skip to content

Commit

Permalink
--editor -> --edit & allow multiple tags
Browse files Browse the repository at this point in the history
  • Loading branch information
kitesi committed Nov 12, 2022
1 parent d3781c5 commit 5578c14
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 35 deletions.
10 changes: 5 additions & 5 deletions commands/play/play.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ type PlayArgs struct {
persist bool
appendToPlaylist bool
live bool
editor bool
edit bool
tags []string
addToTag string
setToTag string
Expand All @@ -52,7 +52,7 @@ func addFlags(playCmd *cobra.Command, args *PlayArgs) {
playCmd.Flags().BoolVarP(&args.persist, "persist", "", false, "persist the command instance")
playCmd.Flags().BoolVar(&args.appendToPlaylist, "append", false, "append to playlist rather than jumping")
playCmd.Flags().BoolVar(&args.live, "live", false, "go into live query results mode")
playCmd.Flags().BoolVarP(&args.editor, "editor", "e", false, "pipe to $EDITOR for song selection before playing")
playCmd.Flags().BoolVarP(&args.edit, "edit", "e", false, "pipe to $EDITOR for song selection before playing")

playCmd.Flags().StringVarP(&args.addToTag, "add-to-tag", "a", "", "add returned songs to tag")
playCmd.Flags().StringVar(&args.setToTag, "set-to-tag", "", "set returned songs to tag")
Expand Down Expand Up @@ -112,7 +112,7 @@ func playRunner(args *PlayArgs, terms []string) error {
return err
}

if len(terms) == 0 && args.limit != 0 && !args.dryPaths && !args.playNewFirst && !args.new && !args.editor && len(args.tags) == 0 {
if len(terms) == 0 && args.limit != 0 && !args.dryPaths && !args.playNewFirst && !args.new && !args.edit && len(args.tags) == 0 {
fmt.Println("Playing all songs")
return runVLC(args, []string{"--recursive=expand", args.musicPath})
}
Expand Down Expand Up @@ -148,7 +148,7 @@ func playRunner(args *PlayArgs, terms []string) error {
return nil
}

isPlayingAll := args.limit == -1 && len(terms) == 0 && len(args.tags) == 0 && !args.editor
isPlayingAll := args.limit == -1 && len(terms) == 0 && len(args.tags) == 0 && !args.edit

if isPlayingAll {
fmt.Println("Playing all songs")
Expand Down Expand Up @@ -240,7 +240,7 @@ func getSongs(args *PlayArgs, terms []string) ([]string, error) {
flatSongs[i] = s.path
}

if args.editor {
if args.edit {
editedSongs, err := editSongList(flatSongs)

if err != nil {
Expand Down
67 changes: 37 additions & 30 deletions commands/tags/tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
)

type TagsCommandArgs struct {
editor bool
edit bool
shouldDelete bool
musicPath string
}
Expand Down Expand Up @@ -59,10 +59,9 @@ func Setup(rootCmd *cobra.Command) {
args := TagsCommandArgs{}

tagsCmd := &cobra.Command{
Use: "tags [tag]",
Use: "tags [tags..]",
Short: "Manage tags",
Long: "Manage tags. Lists all the tags by default. If a tag is provided, this will list all the songs in that tag.",
Args: cobra.MaximumNArgs(1),
Run: func(cmd *cobra.Command, positional []string) {
if err := tagsCommandRunner(&args, positional); err != nil {
log.SetFlags(0)
Expand All @@ -71,26 +70,20 @@ func Setup(rootCmd *cobra.Command) {
},
}

tagsCmd.Flags().BoolVarP(&args.editor, "editor", "e", false, "edit tags.json or a specific tag with $EDITOR")
tagsCmd.Flags().BoolVarP(&args.edit, "editor", "e", false, "edit tags.json or a specific tag with $EDITOR")
tagsCmd.Flags().BoolVarP(&args.shouldDelete, "delete", "d", false, "delete a tag")
tagsCmd.Flags().StringVarP(&args.musicPath, "music-path", "m", "", "the music path to use")

rootCmd.AddCommand(tagsCmd)
}

func tagsCommandRunner(args *TagsCommandArgs, positional []string) error {
requestedTagName := ""

if len(positional) > 0 {
requestedTagName = positional[0]
}

if args.shouldDelete {
if args.editor {
if args.edit {
return errors.New("can't have --delete and --editor together")
}

if requestedTagName == "" {
if len(positional) == 0 {
return errors.New("can't use --delete without a tag")
}
}
Expand All @@ -105,8 +98,8 @@ func tagsCommandRunner(args *TagsCommandArgs, positional []string) error {
args.musicPath = defaultMusicPath
}

if requestedTagName == "" {
if args.editor {
if len(positional) == 0 {
if args.edit {
_, err := editor.EditFile(GetTagPath(args.musicPath))
return err
}
Expand All @@ -130,29 +123,43 @@ func tagsCommandRunner(args *TagsCommandArgs, positional []string) error {
return err
}

tag, ok := storedTags[requestedTagName]
for _, requestedTagName := range positional {
tag, ok := storedTags[requestedTagName]

if args.editor {
content, err := editor.CreateAndModifyTemp("", requestedTagName+"-*.txt", strings.Join(tag.Songs, "\n"))
if args.edit {
content, err := editor.CreateAndModifyTemp("", requestedTagName+"-*.txt", strings.Join(tag.Songs, "\n"))

if err != nil {
return err
if err != nil {
fmt.Fprintln(os.Stderr, err)
continue
}

if err = ChangeSongsInTag(args.musicPath, requestedTagName, strings.Split(content, "\n"), false); err != nil {
fmt.Fprintln(os.Stderr, err)
}

continue
}

return ChangeSongsInTag(args.musicPath, requestedTagName, strings.Split(content, "\n"), false)
}
if !ok {
fmt.Fprintf(os.Stderr, "Error: tag \"%s\" does not exist\n", requestedTagName)
continue
}

if !ok {
return fmt.Errorf("Tag \"%s\" does not exist", requestedTagName)
}
if args.shouldDelete {
delete(storedTags, requestedTagName)

if args.shouldDelete {
delete(storedTags, requestedTagName)
return updateTagsFile(&storedTags, args.musicPath)
}
if err := updateTagsFile(&storedTags, args.musicPath); err != nil {
fmt.Fprintln(os.Stderr, err)
}

continue
}

fmt.Printf("Amount: %d, Creation: %s, Modified: %s\n", len(tag.Songs), formatTime(tag.ModifiedTime), formatTime(tag.CreationTime))
fmt.Println(strings.Join(tag.Songs, "\n"))
fmt.Printf("Name: %s, Amount: %d, Creation: %s, Modified: %s\n", requestedTagName, len(tag.Songs), formatTime(tag.ModifiedTime), formatTime(tag.CreationTime))
fmt.Println(strings.Join(tag.Songs, "\n"))

}
return nil
}

Expand Down

0 comments on commit 5578c14

Please sign in to comment.