Compare commits

..

3 Commits

Author SHA1 Message Date
DBras 094671c654 move email request from inbox when video is downloaded 2025-03-02 20:06:16 +01:00
DBras b874389ed2 download video, then email sender 2025-03-02 19:47:45 +01:00
DBras b0442e619c Partial feature: send email 2025-03-02 19:38:09 +01:00
1 changed files with 33 additions and 6 deletions

39
main.go
View File

@ -6,9 +6,9 @@ import (
"log"
"os"
"strings"
"os/exec"
"path/filepath"
"encoding/base64"
"os/exec"
"golang.org/x/oauth2/google"
"google.golang.org/api/gmail/v1"
@ -19,6 +19,7 @@ const CREDENTIALS_DIR = "creds"
const TOKEN_FILE = "token.json"
const CREDENTIALS_FILE = "credentials.json"
const USER = "me"
const EMAILADDR = "downloader.kasernen@gmail.com"
func getEmail(service *gmail.Service, msgID string) *gmail.Message {
r, err := service.Users.Messages.Get(USER, msgID).Format("FULL").Do()
@ -56,7 +57,7 @@ func main() {
log.Fatalf("Unable to read client secret file: %v", err)
}
config, err := google.ConfigFromJSON(creds_b, gmail.GmailReadonlyScope)
config, err := google.ConfigFromJSON(creds_b, gmail.GmailModifyScope)
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
@ -76,17 +77,43 @@ func main() {
fmt.Println("No messages found")
return
}
fmt.Println("Messages:")
for _, msg := range r.Messages {
fmt.Printf("- %s\n", msg.Id)
mail := getEmail(service, msg.Id)
fromAddr, msgBody := getEmailPlaintext(mail)
fmt.Printf("From: %s\n", fromAddr)
fmt.Printf("Message:\n%s\n", msgBody)
fmt.Printf("Link: %s", msgBody)
cmd := exec.Command("yt-dlp", msgBody)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
_ = cmd.Run()
err = cmd.Run()
if err != nil {
log.Fatalf("Video download failed: %v", err)
}
var modifications gmail.ModifyMessageRequest
modifications.AddLabelIds = []string{"Label_6181251506395195727"}
modifications.RemoveLabelIds = []string{"INBOX"}
_, err = service.Users.Messages.Modify(USER, msg.Id, &modifications).Do()
if err != nil {
log.Fatalf("Unable to move email request from inbox: %v", err)
}
var message gmail.Message
messageStr := fmt.Sprintf(
"From: %s\r\n" +
"To: %s\r\n" +
"Subject: Request received\r\n\r\n" +
"Message body",
EMAILADDR,
fromAddr)
message.Raw = base64.URLEncoding.EncodeToString([]byte(messageStr))
_, err = service.Users.Messages.Send(USER, &message).Do()
if err != nil {
log.Fatalf("Unable to send email: %v", err)
}
fmt.Printf("Download completed, confirmation sent to: %s\n", fromAddr)
fmt.Println()
}
}