Add -message-id flag to export-messages command

This commit is contained in:
Simon Ser 2020-09-15 10:37:01 +02:00
parent bd861cdb00
commit fce7129990
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 40 additions and 19 deletions

View File

@ -340,13 +340,14 @@ func main() {
log.Fatal(err)
}
case "export-messages":
var convID string
// TODO: allow specifying multiple IDs
var convID, msgID string
exportMessagesCmd.StringVar(&convID, "conversation-id", "", "conversation ID")
exportMessagesCmd.StringVar(&msgID, "message-id", "", "message ID")
exportMessagesCmd.Parse(flag.Args()[1:])
username := exportMessagesCmd.Arg(0)
log.Println(convID, username)
if convID == "" || username == "" {
log.Fatal("usage: hydroxide export-messages -conversation-id <id> <username>")
if (convID == "" && msgID == "") || username == "" {
log.Fatal("usage: hydroxide export-messages [-conversation-id <id>] [-message-id <id>] <username>")
}
var bridgePassword string
@ -364,8 +365,15 @@ func main() {
mboxWriter := mbox.NewWriter(os.Stdout)
if err := exports.ExportConversation(c, privateKeys, mboxWriter, convID); err != nil {
log.Fatal(err)
if convID != "" {
if err := exports.ExportConversationMbox(c, privateKeys, mboxWriter, convID); err != nil {
log.Fatal(err)
}
}
if msgID != "" {
if err := exports.ExportMessageMbox(c, privateKeys, mboxWriter, msgID); err != nil {
log.Fatal(err)
}
}
if err := mboxWriter.Close(); err != nil {

View File

@ -15,12 +15,7 @@ import (
"github.com/emersion/hydroxide/protonmail"
)
func ExportMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Writer, id string) error {
msg, err := c.GetMessage(id)
if err != nil {
return fmt.Errorf("failed to fetch message: %v", err)
}
func writeMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Writer, msg *protonmail.Message) error {
mimeType := msg.MIMEType
if mimeType == "" {
mimeType = "text/html"
@ -55,19 +50,37 @@ func ExportMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Write
return mw.Close()
}
func ExportConversation(c *protonmail.Client, privateKeys openpgp.KeyRing, mbox *mbox.Writer, id string) error {
func ExportMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Writer, id string) error {
msg, err := c.GetMessage(id)
if err != nil {
return fmt.Errorf("failed to fetch message: %v", err)
}
return writeMessage(c, privateKeys, w, msg)
}
func ExportMessageMbox(c *protonmail.Client, privateKeys openpgp.KeyRing, mbox *mbox.Writer, id string) error {
msg, err := c.GetMessage(id)
if err != nil {
return fmt.Errorf("failed to fetch message: %v", err)
}
w, err := mbox.CreateMessage(msg.Sender.Address, msg.Time.Time())
if err != nil {
return fmt.Errorf("failed to create mbox message: %v", err)
}
return writeMessage(c, privateKeys, w, msg)
}
func ExportConversationMbox(c *protonmail.Client, privateKeys openpgp.KeyRing, mbox *mbox.Writer, id string) error {
_, msgs, err := c.GetConversation(id, "")
if err != nil {
return fmt.Errorf("failed to fetch conversation: %v", err)
}
for _, msg := range msgs {
w, err := mbox.CreateMessage(msg.Sender.Address, msg.Time.Time())
if err != nil {
return fmt.Errorf("failed to create mbox message: %v", err)
}
if err := ExportMessage(c, privateKeys, w, msg.ID); err != nil {
if err := ExportMessageMbox(c, privateKeys, mbox, msg.ID); err != nil {
return fmt.Errorf("failed to export conversation message: %v", err)
}
}