use cli to create a decent command line app

master
Carlo Strub 7 years ago
parent 88a68aacb8
commit 7208399fac

14
glide.lock generated

@ -1,5 +1,5 @@
hash: 278ebf659dc6f1d5de92408300483b75e76c9f5d81febc25b83bfc585d7457ad
updated: 2017-03-10T22:33:54.628681045Z
hash: 1d7fb4b49ab9cebe25e4d605b7256849d2fb5550372e53dcf1a8dc030d32fce0
updated: 2017-03-11T20:05:25.966344527Z
imports:
- name: github.com/boltdb/bolt
version: 583e8937c61f1af6513608ccc75c97b6abdf4ff9
@ -9,11 +9,17 @@ imports:
version: 6a0bfdde8629a3a3a7418a7eae45c54154692514
- name: github.com/luksen/maildir
version: 5297d9c3091c7d4891c9d4f6fa743d500c038d6f
- name: github.com/urfave/cli
version: 9e5b04886c4bfee2ceba1465b8121057355c4e53
- name: golang.org/x/net
version: a6577fac2d73be281a500b310739095313165611
subpackages:
- html
- html/atom
- name: golang.org/x/sys
version: 99f16d856c9836c42d24e7ab64ea72916925fa97
subpackages:
- unix
testImports:
- name: github.com/onsi/ginkgo
version: ab07225d112dc7a93c289ac5b2e12735c2c46035
@ -48,9 +54,5 @@ testImports:
- matchers/support/goraph/node
- matchers/support/goraph/util
- types
- name: golang.org/x/sys
version: 99f16d856c9836c42d24e7ab64ea72916925fa97
subpackages:
- unix
- name: gopkg.in/yaml.v2
version: a3f3340b5840cee44f372bddb5880fcbc419b46a

@ -5,6 +5,7 @@ import:
- package: github.com/luksen/maildir
- package: github.com/boltdb/bolt
version: ^1.3.0
- package: github.com/urfave/cli
testImport:
- package: github.com/onsi/ginkgo
- package: github.com/onsi/gomega

@ -1,10 +1,12 @@
package main
import (
"flag"
"errors"
"fmt"
"log"
"os"
"github.com/urfave/cli"
)
var (
@ -13,29 +15,66 @@ var (
)
func main() {
// Get the Maildir to be handled and the DB
// Get working directory
wd, err := os.Getwd()
if err != nil {
return log.Fatalf("get working directory: %s", err)
}
maildir := flag.String("maildir", wd+"/Maildir", "Path to the Maildir")
database := flag.String("database", wd+"/sisyphus.db", "Path to the sisyphus database")
flag.Parse()
// Load the Maildir
mails, err := Index(*maildir)
if err != nil {
return log.Fatalf("load Maildir content: %s", err)
var maildir, database *string
// Define App
app := cli.NewApp()
app.Name = "sisyphus"
app.HelpName = "Intelligent Junk and Spam Mail Handler"
app.Version = "0.0.0"
app.Authors = []Author{
Author{
Name: "Carlo Strub",
Email: "cs@carlostrub.ch",
},
}
app.Flags = []cli.Flag{
cli.StringFlag{
Name: "maildir",
Value: wd + "/Maildir",
Usage: "Path to the Maildir directory",
Destination: &maildir,
},
cli.StringFlag{
Name: "database",
Value: wd + "/sisyphus.db",
Usage: "Path to the sisyphus database",
Destination: &database,
},
}
fmt.Println(mails)
app.Action = func(c *cli.Context) error {
if database == nil {
return errors.New("no database selected")
}
if maildir == nil {
return errors.New("no maildir selected")
}
// Open the database
db, err := openDB("sisyphus.db", 0600, nil)
if err != nil {
return log.Fatalf("open database: %s", err)
// Load the Maildir
mails, err := Index(*maildir)
if err != nil {
return log.Fatalf("load Maildir content: %s", err)
}
fmt.Println(mails)
// Open the database
db, err := openDB(*database, 0600, nil)
if err != nil {
return log.Fatalf("open database: %s", err)
}
defer db.Close()
return nil
}
defer db.Close()
app.Run(os.Args)
}

Loading…
Cancel
Save