From 7618d5665bf6e236551d916b1c920d74577c23fe Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Mon, 6 Nov 2023 10:35:01 -0700 Subject: [PATCH] split dump.go from main.go in cli --- cmd/pttodo-cli/dump.go | 106 +++++++++++++++++++ cmd/pttodo-cli/{cli.go => main.go} | 94 +--------------- cmd/pttodo-cli/{cli_test.go => main_test.go} | 0 3 files changed, 108 insertions(+), 92 deletions(-) create mode 100644 cmd/pttodo-cli/dump.go rename cmd/pttodo-cli/{cli.go => main.go} (66%) rename cmd/pttodo-cli/{cli_test.go => main_test.go} (100%) diff --git a/cmd/pttodo-cli/dump.go b/cmd/pttodo-cli/dump.go new file mode 100644 index 0000000..f1e4f76 --- /dev/null +++ b/cmd/pttodo-cli/dump.go @@ -0,0 +1,106 @@ +package main + +import ( + "fmt" + "io" + "io/ioutil" + "log" + "os" + "strings" + + "gogs.inhome.blapointe.com/bel/pttodo/pttodo" + "gopkg.in/yaml.v2" +) + +func dump(config config) error { + return _dump(os.Stdout, config.targets, config.tags, config.search, config.root) +} + +func _dump(writer io.Writer, filepaths []string, tags []string, search, rootDisplay string) error { + var root pttodo.Root + + for _, filepath := range filepaths { + reader, err := filePathReader(filepath) + if err != nil { + return err + } + + b, err := ioutil.ReadAll(reader) + if err != nil { + return err + } + + var root2, root2post pttodo.Root + if err := yaml.Unmarshal(b, &root2); err != nil { + return err + } + if err := yaml.Unmarshal(b, &root2post); err != nil { + return err + } + + root2.MoveScheduledToTodo() + + if !root2.Equals(root2post) { + log.Printf("refreshing %s", filepath) + b3, err := yaml.Marshal(root2) + if err != nil { + return err + } + if err := os.WriteFile(filepath, b3, os.ModePerm); err != nil { + return err + } + } else { + //log.Printf("not refreshing %s", filepath) + } + + root.MergeIn(root2) + } + + root.MoveScheduledToTodo() + + var v interface{} = root + switch rootDisplay { + case DUMP_ALL: + case DUMP_TODO: + v = root.Todo + case DUMP_SCHEDULED: + v = root.Scheduled + case DUMP_DONE: + v = root.Done + } + if todos, ok := v.([]pttodo.Todo); ok { + if len(tags) > 0 { + result := make([]pttodo.Todo, 0, len(todos)) + for _, todo := range todos { + skip := false + for _, tag := range tags { + positiveTag := strings.TrimLeft(tag, "-") + hasTag := strings.Contains(todo.Tags, positiveTag) + wantToHaveTag := !strings.HasPrefix(tag, "-") + skip = skip || !(hasTag == wantToHaveTag) + } + if !skip { + result = append(result, todo) + } + } + todos = result + } + if len(search) > 0 { + result := make([]pttodo.Todo, 0, len(todos)) + for _, todo := range todos { + if strings.Contains(strings.ToLower(fmt.Sprint(todo)), strings.ToLower(search)) { + result = append(result, todo) + } + } + todos = result + } + v = todos + } + + b2, err := yaml.Marshal(v) + if err != nil { + return err + } + fmt.Fprintf(writer, "%s\n", b2) + return nil +} diff --git a/cmd/pttodo-cli/cli.go b/cmd/pttodo-cli/main.go similarity index 66% rename from cmd/pttodo-cli/cli.go rename to cmd/pttodo-cli/main.go index cdcbdaa..c8668f1 100644 --- a/cmd/pttodo-cli/cli.go +++ b/cmd/pttodo-cli/main.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "io/ioutil" - "log" "os" "path" "sort" @@ -49,7 +48,7 @@ func _main() error { if err := edit(config); err != nil { return err } - return dump(os.Stdout, config.targets, config.tags, config.search, config.root) + return dump(config) } func getConfig() config { @@ -99,7 +98,7 @@ func verifyRoot(root pttodo.Root) error { } func verifyFile(path string) error { - if err := dump(io.Discard, []string{path}, nil, "", DUMP_ALL); err != nil { + if err := _dump(io.Discard, []string{path}, nil, "", DUMP_ALL); err != nil { return fmt.Errorf("failed verifying file %s: %w", path, err) } return nil @@ -160,95 +159,6 @@ func marshalRootToTempFile(root pttodo.Root) (string, error) { return filepath, err } -func dump(writer io.Writer, filepaths []string, tags []string, search, rootDisplay string) error { - var root pttodo.Root - - for _, filepath := range filepaths { - reader, err := filePathReader(filepath) - if err != nil { - return err - } - - b, err := ioutil.ReadAll(reader) - if err != nil { - return err - } - - var root2, root2post pttodo.Root - if err := yaml.Unmarshal(b, &root2); err != nil { - return err - } - if err := yaml.Unmarshal(b, &root2post); err != nil { - return err - } - - root2.MoveScheduledToTodo() - - if !root2.Equals(root2post) { - log.Printf("refreshing %s", filepath) - b3, err := yaml.Marshal(root2) - if err != nil { - return err - } - if err := os.WriteFile(filepath, b3, os.ModePerm); err != nil { - return err - } - } else { - //log.Printf("not refreshing %s", filepath) - } - - root.MergeIn(root2) - } - - root.MoveScheduledToTodo() - - var v interface{} = root - switch rootDisplay { - case DUMP_ALL: - case DUMP_TODO: - v = root.Todo - case DUMP_SCHEDULED: - v = root.Scheduled - case DUMP_DONE: - v = root.Done - } - if todos, ok := v.([]pttodo.Todo); ok { - if len(tags) > 0 { - result := make([]pttodo.Todo, 0, len(todos)) - for _, todo := range todos { - skip := false - for _, tag := range tags { - positiveTag := strings.TrimLeft(tag, "-") - hasTag := strings.Contains(todo.Tags, positiveTag) - wantToHaveTag := !strings.HasPrefix(tag, "-") - skip = skip || !(hasTag == wantToHaveTag) - } - if !skip { - result = append(result, todo) - } - } - todos = result - } - if len(search) > 0 { - result := make([]pttodo.Todo, 0, len(todos)) - for _, todo := range todos { - if strings.Contains(strings.ToLower(fmt.Sprint(todo)), strings.ToLower(search)) { - result = append(result, todo) - } - } - todos = result - } - v = todos - } - - b2, err := yaml.Marshal(v) - if err != nil { - return err - } - fmt.Fprintf(writer, "%s\n", b2) - return nil -} - func filePathReader(path string) (io.Reader, error) { if path == "-" { return os.Stdin, nil diff --git a/cmd/pttodo-cli/cli_test.go b/cmd/pttodo-cli/main_test.go similarity index 100% rename from cmd/pttodo-cli/cli_test.go rename to cmd/pttodo-cli/main_test.go