019f8fd211
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15c
git-subtree-split:24f5a642af
Change-Id: I6105b3762b79126b3488359c95978cadb3efa789
89 lines
2.3 KiB
Go
89 lines
2.3 KiB
Go
// Author: wpcarro@gmail.com
|
|
//
|
|
// Wirelessly transfer RFC documents to your Kindle to device for an alternative
|
|
// medium for reading.
|
|
//
|
|
// Usage:
|
|
// ```shell
|
|
// > go run rfcToKindle.go -document rfc6479 -recipient username@kindle.com
|
|
// ```
|
|
//
|
|
// This uses `sendgmr` to send the file to the Kindle. Make sure:
|
|
// 1. That `sendgmr` is installed and available on $PATH.
|
|
// 2. That it is configured to work with your preferred email address.
|
|
// 3. That the email address `sendgmr` is configured to use is whitelisted in
|
|
// your Kindle "Personal Document Settings".
|
|
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
document := flag.String("document", "", "(Required) The name of the document to fetch. For example \"RFC6479\".")
|
|
recipient := flag.String("recipient", "", "(Required) The email address of the Kindle device.")
|
|
subject := flag.String("subject", "", "(Optional) The email address of the Kindle device.")
|
|
flag.Parse()
|
|
|
|
if *document == "" {
|
|
// TODO: Is log.Fatal the best function to use here?
|
|
log.Fatal("-document cannot be empty. See -help for more information.")
|
|
}
|
|
|
|
if *recipient == "" {
|
|
log.Fatal("-recipient cannot be empty. See -help for more information.")
|
|
}
|
|
|
|
*document = strings.ToLower(*document)
|
|
|
|
url := fmt.Sprintf("https://www.ietf.org/rfc/%s.txt", *document)
|
|
resp, err := http.Get(url)
|
|
fmt.Printf("Downloading %s ... ", url)
|
|
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
f, err := ioutil.TempFile("", fmt.Sprintf("%s-*.txt", *document))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
// TODO: Verify if this is cleaning up or not.
|
|
defer os.Remove(f.Name())
|
|
|
|
_, err = io.Copy(f, resp.Body)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println("done.")
|
|
|
|
if *subject == "" {
|
|
*subject = fmt.Sprintf("%s - Sent from rfcToKindle.go", *document)
|
|
}
|
|
|
|
// Although I couldn't find it documented anywhere, the email sent to the
|
|
// Kindle must have a body, even if the body isn't used for anything.
|
|
fmt.Printf("Emailing %s to %s ... ", f.Name(), *recipient)
|
|
cmd := exec.Command("sendgmr",
|
|
fmt.Sprintf("--to=%s", *recipient),
|
|
fmt.Sprintf("--body_file=%s", f.Name()),
|
|
fmt.Sprintf("--subject=%s", *subject),
|
|
fmt.Sprintf("--attachment_files=%s", f.Name()))
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println("done.")
|
|
|
|
os.Exit(0)
|
|
}
|