diff --git a/main.go b/main.go index 0e83cc7..72143f9 100644 --- a/main.go +++ b/main.go @@ -35,6 +35,7 @@ var ( historyList = kingpin.Command("history", "List history") historyListItems = historyList.Arg("items", "Amount of items").Int64() + historyListAll = historyList.Flag("all", "Show all items").Bool() ) func parseLink(db *sql.DB, oldPage, value string, req *http.Request) (htmlPage string, err error) { @@ -90,6 +91,8 @@ func parseLinks(db *sql.DB, body []byte, req *http.Request) (htmlPage string, er } func cmd_url(db *sql.DB, url string) { + storage.AddHistoryURL(db, url) + client := &http.Client{} // TODO Full url encoding @@ -142,6 +145,35 @@ func cmd_link(db *sql.DB, linkID int64) { cmd_url(db, url) } +func cmd_history(db *sql.DB, argAmount, defaultAmount int64, all bool) { + history, err := storage.GetHistory(db) + if err != nil { + panic(err) + } + + var amount int64 + + if all { + amount = int64(len(history)) + } else if argAmount == 0 { + if int64(len(history)) < defaultAmount { + amount = int64(len(history)) + } else { + amount = defaultAmount + } + } else { + if amount > int64(len(history)) { + amount = int64(len(history)) + } else { + amount = argAmount + } + } + + for _, h := range history[int64(len(history))-amount:] { + fmt.Println(h.ID, h.URL) + } +} + func main() { db, err := storage.OpenDB("/tmp/wi.db") if err != nil { @@ -155,6 +187,6 @@ func main() { case "link": cmd_link(db, *linkNo) case "history": - fmt.Println("not implemented") + cmd_history(db, *historyListItems, 20, *historyListAll) } } diff --git a/storage/storage.go b/storage/storage.go index a3b03ea..8b03599 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -21,6 +21,12 @@ func OpenDB(path string) (db *sql.DB, err error) { _, err = db.Exec("CREATE TABLE IF NOT EXISTS `links` " + "( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `url` TEXT );") + if err != nil { + return + } + + _, err = db.Exec("CREATE TABLE IF NOT EXISTS `history` " + + "( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `url` TEXT );") return } @@ -65,3 +71,41 @@ func GetLinkID(db *sql.DB, url string) (linkID int64, err error) { return } + +func AddHistoryURL(db *sql.DB, url string) (err error) { + stmt, err := db.Prepare("INSERT INTO `history` (`url`) VALUES ($1);") + if err != nil { + return + } + defer stmt.Close() + + _, err = stmt.Exec(url) + + return +} + +type HistoryItem struct { + ID int64 + URL string +} + +func GetHistory(db *sql.DB) (history []HistoryItem, err error) { + rows, err := db.Query("SELECT `id`, `url` FROM `history`;") + if err != nil { + return + } + defer rows.Close() + + for rows.Next() { + var h HistoryItem + + err = rows.Scan(&h.ID, &h.URL) + if err != nil { + return + } + + history = append(history, h) + } + + return +}