1
0
mirror of https://github.com/RyanGreenup/cadmus.git synced 2025-07-31 19:30:12 +02:00

Print Backlinks from Notes

This commit is contained in:
ryangreenup
2021-04-28 23:22:08 +10:00
parent e71b9c12fb
commit 1db79ee20e

88
printBacklinks.go Normal file
View File

@@ -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
}