]> Sergey Matveev's repositories - glocate.git/blobdiff - printers.go
Improved version
[glocate.git] / printers.go
diff --git a/printers.go b/printers.go
new file mode 100644 (file)
index 0000000..d080508
--- /dev/null
@@ -0,0 +1,72 @@
+package main
+
+import (
+       "fmt"
+       "strconv"
+       "strings"
+       "time"
+
+       "github.com/dustin/go-humanize"
+)
+
+func printerSimple(ents chan Ent) {
+       for ent := range ents {
+               fmt.Println(nameJoin(ent.name))
+       }
+}
+
+func printerMachine(ents chan Ent) {
+       for ent := range ents {
+               fmt.Println(
+                       strconv.FormatUint(uint64(ent.size), 10),
+                       time.Unix(int64(ent.mtime), 0).Format("2006-01-02T15:04:05"),
+                       nameJoin(ent.name),
+               )
+       }
+}
+
+type TreePrintEnt struct {
+       ent    Ent
+       isLast bool
+}
+
+func laster(ents chan Ent, trees chan TreePrintEnt) {
+       entPrev := <-ents
+       for ent := range ents {
+               tree := TreePrintEnt{ent: entPrev}
+               if len(ent.name) < len(entPrev.name) {
+                       tree.isLast = true
+               }
+               trees <- tree
+               entPrev = ent
+       }
+       trees <- TreePrintEnt{ent: entPrev}
+       close(trees)
+}
+
+func printerTree(ents chan Ent) {
+       trees := make(chan TreePrintEnt, 1<<10)
+       go laster(ents, trees)
+       first := true
+       var box string
+       for ent := range trees {
+               if first {
+                       fmt.Printf(
+                               "%s\t[%s]\n", nameJoin(ent.ent.name),
+                               humanize.IBytes(uint64(ent.ent.size)),
+                       )
+                       first = false
+                       continue
+               }
+               if ent.isLast {
+                       box = "└"
+               } else {
+                       box = "├"
+               }
+               fmt.Printf("%s%s %s\t[%s] %s\n",
+                       strings.Repeat("│ ", len(ent.ent.name)-2), box,
+                       nameJoin(ent.ent.name), humanize.IBytes(uint64(ent.ent.size)),
+                       time.Unix(ent.ent.mtime, 0).Format("2006-01-02"),
+               )
+       }
+}