diff options
author | Vincent Ambo <mail@tazj.in> | 2021-12-13T22·51+0300 |
---|---|---|
committer | Vincent Ambo <mail@tazj.in> | 2021-12-13T23·15+0300 |
commit | 019f8fd2113df4c5247c3969c60fd4f0e08f91f7 (patch) | |
tree | 76a857f61aa88f62a30e854651e8439db77fd0ea /users/wpcarro/tools/rfcToKindle/main.go | |
parent | 464bbcb15c09813172c79820bcf526bb10cf4208 (diff) | |
parent | 6123e976928ca3d8d93f0b2006b10b5f659eb74d (diff) |
subtree(users/wpcarro): docking briefcase at '24f5a642' r/3226
git-subtree-dir: users/wpcarro git-subtree-mainline: 464bbcb15c09813172c79820bcf526bb10cf4208 git-subtree-split: 24f5a642af3aa1627bbff977f0a101907a02c69f Change-Id: I6105b3762b79126b3488359c95978cadb3efa789
Diffstat (limited to 'users/wpcarro/tools/rfcToKindle/main.go')
-rw-r--r-- | users/wpcarro/tools/rfcToKindle/main.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/users/wpcarro/tools/rfcToKindle/main.go b/users/wpcarro/tools/rfcToKindle/main.go new file mode 100644 index 000000000000..0f4f2dd9ec4f --- /dev/null +++ b/users/wpcarro/tools/rfcToKindle/main.go @@ -0,0 +1,89 @@ +// 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) +} |