I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
		
			
				
	
	
		
			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)
 | 
						|
}
 |