add ability to create a new document
This commit is contained in:
parent
6908fca110
commit
8b70804c6e
@ -7,10 +7,12 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/peterbourgon/ff/v2/ffcli"
|
"github.com/peterbourgon/ff/v2/ffcli"
|
||||||
"suah.dev/cromp/db"
|
"suah.dev/cromp/db"
|
||||||
|
cromp "suah.dev/cromp/internal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewEditor makes the "cromp edit" command
|
// NewEditor makes the "cromp edit" command
|
||||||
@ -33,35 +35,108 @@ func NewEditor() *ffcli.Command {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(*updatedEntry)
|
fmt.Printf("%#v\n", updatedEntry)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OpenInEditor opens a cromp doc in $EDITOR
|
// NewDoc opens a new doc in $EDITOR
|
||||||
func OpenInEditor(id uuid.UUID) (*string, error) {
|
func NewDoc() (*uuid.UUID, error) {
|
||||||
var err error
|
var s string
|
||||||
var params db.GetEntryParams
|
entry := &db.CreateEntryParams{}
|
||||||
resp := &db.Entry{}
|
editor, args := editorCmd()
|
||||||
|
|
||||||
|
entry.EntryID = uuid.New()
|
||||||
|
|
||||||
|
f, err := ioutil.TempFile("", fmt.Sprintf("cromp-%s", entry.EntryID.String()))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
args = append(args, f.Name())
|
||||||
|
|
||||||
|
defer os.Remove(f.Name())
|
||||||
|
|
||||||
|
// TODO populate with a user defined template here
|
||||||
|
f.Write([]byte(entry.Body))
|
||||||
|
|
||||||
|
cmd := exec.Command(editor, args...)
|
||||||
|
cmd.Stdin = os.Stdin
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
err = cmd.Run()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := ioutil.ReadFile(f.Name())
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
s = string(b)
|
||||||
|
|
||||||
|
header, err := cromp.ParseHeader(s)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.Title = header.Title
|
||||||
|
entry.Body = s
|
||||||
|
|
||||||
|
result := make(map[string]string)
|
||||||
|
|
||||||
|
err = Post("/entries/add", entry, result)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%#v\n", result)
|
||||||
|
|
||||||
|
return &entry.EntryID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func editorCmd() (string, []string) {
|
||||||
editor := "vi"
|
editor := "vi"
|
||||||
s := ""
|
|
||||||
|
|
||||||
params.EntryID = id
|
|
||||||
|
|
||||||
if c := os.Getenv("EDITOR"); c != "" {
|
if c := os.Getenv("EDITOR"); c != "" {
|
||||||
editor = c
|
editor = c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var args []string
|
||||||
|
if pos := strings.Index(editor, " "); pos != -1 {
|
||||||
|
args = strings.Fields(editor[pos+1:])
|
||||||
|
editor = editor[:pos]
|
||||||
|
}
|
||||||
|
|
||||||
|
return editor, args
|
||||||
|
}
|
||||||
|
|
||||||
|
// OpenInEditor opens an existing cromp doc in $EDITOR
|
||||||
|
func OpenInEditor(id uuid.UUID) (*string, error) {
|
||||||
|
var err error
|
||||||
|
var params db.GetEntryParams
|
||||||
|
var saveParams db.UpdateEntryParams
|
||||||
|
|
||||||
|
s := ""
|
||||||
|
resp := &db.Entry{}
|
||||||
|
|
||||||
|
params.EntryID = id
|
||||||
|
|
||||||
err = Post("/entries/get", params, resp)
|
err = Post("/entries/get", params, resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd, args := editorCmd()
|
||||||
|
|
||||||
if f, err := ioutil.TempFile("", fmt.Sprintf("cromp-%s", resp.EntryID.String())); err == nil {
|
if f, err := ioutil.TempFile("", fmt.Sprintf("cromp-%s", resp.EntryID.String())); err == nil {
|
||||||
|
args = append(args, f.Name())
|
||||||
|
|
||||||
defer os.Remove(f.Name())
|
defer os.Remove(f.Name())
|
||||||
f.Write([]byte(resp.Body))
|
f.Write([]byte(resp.Body))
|
||||||
cmd := exec.Command(editor, f.Name())
|
|
||||||
|
cmd := exec.Command(cmd, args...)
|
||||||
cmd.Stdin = os.Stdin
|
cmd.Stdin = os.Stdin
|
||||||
cmd.Stdout = os.Stdout
|
cmd.Stdout = os.Stdout
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
@ -76,5 +151,25 @@ func OpenInEditor(id uuid.UUID) (*string, error) {
|
|||||||
s = string(b)
|
s = string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &s, err
|
header, err := cromp.ParseHeader(s)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%#v\n", header)
|
||||||
|
|
||||||
|
saveParams.EntryID = params.EntryID
|
||||||
|
saveParams.Body = s
|
||||||
|
saveParams.Title = header.Title
|
||||||
|
|
||||||
|
result := make(map[string]string)
|
||||||
|
|
||||||
|
err = Post("/entries/update", saveParams, result)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("%#v\n", result)
|
||||||
|
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,12 @@ func NewLogin() *ffcli.Command {
|
|||||||
return fmt.Errorf("please specify -url")
|
return fmt.Errorf("please specify -url")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfg.URL = *urlConfFS
|
||||||
|
err = cfg.WriteConfig()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
user, err := Prompt("Login: ")
|
user, err := Prompt("Login: ")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -17,7 +17,7 @@ func main() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
root := &ffcli.Command{
|
root := &ffcli.Command{
|
||||||
ShortUsage: "cromp <subcommand>",
|
ShortUsage: "cromp",
|
||||||
FlagSet: rootFlagSet,
|
FlagSet: rootFlagSet,
|
||||||
Subcommands: []*ffcli.Command{
|
Subcommands: []*ffcli.Command{
|
||||||
NewConfig(),
|
NewConfig(),
|
||||||
@ -29,7 +29,14 @@ func main() {
|
|||||||
NewSimilar(),
|
NewSimilar(),
|
||||||
},
|
},
|
||||||
Exec: func(context.Context, []string) error {
|
Exec: func(context.Context, []string) error {
|
||||||
return flag.ErrHelp
|
entryID, err := NewDoc()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("Created entry: %s\n", entryID.String())
|
||||||
|
|
||||||
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user