diff --git a/printBacklinks.go b/printBacklinks.go new file mode 100644 index 0000000..c19a743 --- /dev/null +++ b/printBacklinks.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" + "log" + "os" + "path/filepath" + "regexp" + "strings" +) + +// TODO this should not search a bleve index +// TODO this should really only return md/txt/org files? +// TODO this should handle arguments intelligently +func main() { + // TODO this should be the second argument + // TODO how can I make this work for symlinks? + dir := "/home/ryan/Sync/Notes" + note_path := "journal.teacher.preperation" + + all_files := note_paths(dir) + matching_files := note_matches(note_path, all_files) + + for key, value := range matching_files { + _ = key + fmt.Println(value) + } + + // fmt.Println(matching_files) + + // var note_path string + // if len(os.Args) > 1 { + // note_path := os.Args[1] + // check_file(note_path) + // } else { + // note_path = os.Args[2] + // } + +} + +// TODO +func check_file(note_path string) { + fmt.Println("Is it the path to a file, on the disk, that I can find?, If not stop and ask for user input") + fmt.Println("I need to check if the file is actually a file and otherwise print a warning") + os.Stdout.WriteString("Warning: This has not been implemented") +} + +// Walk through a directory and append all files and directories to an array +func note_paths(dir string) []string { + var files_list []string + + err := filepath.WalkDir(dir, + func(path string, d os.DirEntry, err error) error { + if err != nil { + return err + } + // if !strings.Contains(path, ".git") { + // No dotFiles + Is_matchedQ, _ := regexp.MatchString(".git.*|^[.].*|zap*|~$", path) + if !Is_matchedQ { + files_list = append(files_list, path) + } + return nil + }) + if err != nil { + log.Println(err) + } + // return []string{"g", "h", "i"} + return files_list +} + +func note_matches(target_string string, all_strings []string) []string { + var matching_files []string + for _, file := range all_strings { + content, err := os.ReadFile(file) + if err != nil { + continue + } + content_string := string(content) + matchedQ := strings.Contains(content_string, target_string) + + if matchedQ { + matching_files = append(matching_files, file) + } + } + + return matching_files +}