123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package figtree
- import (
- "log"
- "os"
- "time"
- "path"
- "math/rand"
- "database/sql"
- _ "github.com/mattn/go-sqlite3"
- )
- var FIGS = "/home/jord/figs/"
- var tree *sql.DB
- func init() {
- rand.Seed(time.Now().UnixNano())
- treePlanted := isPlanted()
- if ! treePlanted {
- plant()
- }
- mytree, err := sql.Open("sqlite3", "figtree.db")
- if err != nil {
- log.Fatal(err.Error())
- }
- tree = mytree
- }
- func main() {
- defer tree.Close()
- }
- func isPlanted() bool {
- _, err := os.Stat("figtree.db")
- isTree := !os.IsNotExist(err)
- return isTree
- }
- func plant() {
- log.Println("planting fig tree 🌿")
- file, err := os.Create("figtree.db")
- if err != nil {
- log.Fatal(err.Error())
- }
- file.Close()
- log.Println("fig tree planted")
- log.Println("sprouting tree")
- treeSchema := `CREATE TABLE tree (
- "id" string primary key not null,
- "name" string,
- "desc" string,
- "type" string not null,
- "ext" string,
- "birth" string
- );`
- mytree, err := sql.Open("sqlite3", "figtree.db")
- defer mytree.Close()
- _, err = mytree.Exec(treeSchema)
- if err != nil {
- log.Fatal(err.Error())
- }
- log.Println("tree sprouted :)")
- }
- func nameAFig() string {
- name := newName()
- for nameExists(name) {
- name = newName()
- }
- return name
- }
- func newName() string {
- NAMELEN := 6
- CHARS := []rune("abcdefghijklmnopqrstuvwxyz0123456789")
- figname := make([]rune, NAMELEN)
- for i := range figname {
- figname[i] = CHARS[rand.Intn(len(CHARS))]
- }
- return string(figname)
- }
- func nameExists(figname string) bool {
- check := "select name from tree where name like '%" + figname + "%'"
- rows, err := tree.Query(check)
- if err != nil {
- log.Fatal(err.Error())
- }
- defer rows.Close()
- return rows.Next()
- }
- func DryFig(fig Fig) error {
- addFig := `insert into tree (id, name, desc, type, ext, birth) values (?, ?, ?, ?, ?, ?);`
- statement, err := tree.Prepare(addFig)
- if err != nil {
- return err
- }
- _, err = statement.Exec(fig.Id, fig.Name, fig.Desc, fig.Type, fig.Ext, fig.Birth)
- if err != nil {
- return err
- }
- return nil
- }
- func AllFigsFancy() ([]FancyFig, error) {
- var figs []FancyFig
- row, err := tree.Query("select * from tree")
- if err != nil {
- return nil, err
- }
- defer row.Close()
- for row.Next() {
- var id, name, desc, figtype, ext, birth string
- row.Scan(&id, &name, &desc, &figtype, &ext, &birth)
- f := Fig{id, name, desc, figtype, ext, birth}
- figs = append(figs, f.Fancy())
- }
- return figs, nil
- }
- func HarvestFig(name, desc, figtype, ext, birth string) (string, Fig, error) {
- if len(figtype) == 0 {
- figtype = "untyped"
- }
- figBranch := path.Join(FIGS, figtype)
- _, err := os.Stat(figBranch)
- if os.IsNotExist(err) {
- err = os.Mkdir(figBranch, 0774)
- if err != nil {
- return "", Fig{}, err
- }
- }
- newfig := Fig{
- nameAFig(),
- name,
- desc,
- figtype,
- ext,
- birth}
- figid := newfig.Id + "." + newfig.Ext
- figBlossom := path.Join(figBranch, figid)
- return figBlossom, newfig, nil
- }
|