func debugMenuItems() []trayhost.MenuItem { return []trayhost.MenuItem{ { Title: "Debug: Get Clipboard Content", Handler: func() { cc, err := trayhost.GetClipboardContent() log.Printf("GetClipboardContent() error: %v\n", err) log.Printf("Text: %q\n", cc.Text) log.Printf("Image: %v len(%v)\n", cc.Image.Kind, len(cc.Image.Bytes)) log.Printf("Files: len(%v) %v\n", len(cc.Files), cc.Files) }, }, { Title: "Debug: Set Clipboard Text", Handler: func() { trayhost.SetClipboardText("http://www.example.com/image.png") }, }, { Title: "Debug: Notification", Handler: func() { handler := func() { open.Open("http://www.example.com/image.png") } notification := trayhost.Notification{Title: "Success", Body: "http://www.example.com/image.png", Timeout: 3 * time.Second, Handler: handler} //trayhost.Notification{Title: "Upload Failed", Body: "error description goes here"}.Display() if cc, err := trayhost.GetClipboardContent(); err == nil && cc.Image.Kind != "" { notification.Image = cc.Image } notification.Display() }, }, } }
func instantShareHandler() { fmt.Println("request URL") resp, err := httpClient.Get(*hostFlag + "/api/getfilename?ext=" + clipboard.extension) if err != nil { trayhost.Notification{Title: "Upload Failed", Body: err.Error()}.Display() log.Println(err) return } defer resp.Body.Close() filename, err := ioutil.ReadAll(resp.Body) if err != nil { trayhost.Notification{Title: "Upload Failed", Body: err.Error()}.Display() log.Println(err) return } fmt.Println("display/put URL in clipboard") url := *hostFlag + "/" + string(filename) trayhost.SetClipboardText(url) trayhost.Notification{ Title: "Success", Body: url, Image: notificationThumbnail, Timeout: 3 * time.Second, Handler: func() { // On click, open the displayed URL. u4.Open(url) }, }.Display() fmt.Println("upload image in background of size", len(clipboard.bytes)) go func(b []byte) { req, err := http.NewRequest("PUT", url, bytes.NewReader(b)) if err != nil { log.Println(err) return } req.Header.Set("Content-Type", "application/octet-stream") resp, err := http.DefaultClient.Do(req) if err != nil { log.Println(err) return } _ = resp.Body.Close() fmt.Println("done") }(clipboard.bytes) }
func main() { flag.Parse() runtime.LockOSThread() menuItems := []trayhost.MenuItem{ trayhost.MenuItem{ Title: "Instant Share", Enabled: instantShareEnabled, Handler: instantShareHandler, }, trayhost.SeparatorMenuItem(), trayhost.MenuItem{ Title: "Quit", Handler: trayhost.Exit, }, } if *debugFlag { menuItems = append(menuItems, trayhost.SeparatorMenuItem(), trayhost.MenuItem{ Title: "Debug: Get Clipboard Content", Handler: func() { cc, err := trayhost.GetClipboardContent() fmt.Printf("GetClipboardContent() error: %v\n", err) fmt.Printf("Text: %q\n", cc.Text) fmt.Printf("Image: %v len(%v)\n", cc.Image.Kind, len(cc.Image.Bytes)) fmt.Printf("Files: len(%v) %v\n", len(cc.Files), cc.Files) }, }, trayhost.MenuItem{ Title: "Debug: Set Clipboard Text", Handler: func() { trayhost.SetClipboardText("http://www.example.com/image.png") }, }, trayhost.MenuItem{ Title: "Debug: Notification", Handler: func() { handler := func() { u4.Open("http://www.example.com/image.png") } notification := trayhost.Notification{Title: "Success", Body: "http://www.example.com/image.png", Timeout: 3 * time.Second, Handler: handler} //trayhost.Notification{Title: "Upload Failed", Body: "error description goes here"}.Display() if cc, err := trayhost.GetClipboardContent(); err == nil && cc.Image.Kind != "" { notification.Image = cc.Image } notification.Display() }, }, ) } // TODO: Create a real icon and bake it into the binary. // TODO: Optionally, if non-Retina pixel perfection is required, generate or load 1x image and supply that as a second representation. iconData, err := ioutil.ReadFile("./[email protected]") if err != nil { panic(err) } fmt.Println("Starting.") trayhost.Initialize("Instant Share", iconData, menuItems) trayhost.EnterLoop() fmt.Println("Exiting.") }