Add -message-id flag to export-messages command
This commit is contained in:
parent
bd861cdb00
commit
fce7129990
|
@ -340,13 +340,14 @@ func main() {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
case "export-messages":
|
case "export-messages":
|
||||||
var convID string
|
// TODO: allow specifying multiple IDs
|
||||||
|
var convID, msgID string
|
||||||
exportMessagesCmd.StringVar(&convID, "conversation-id", "", "conversation ID")
|
exportMessagesCmd.StringVar(&convID, "conversation-id", "", "conversation ID")
|
||||||
|
exportMessagesCmd.StringVar(&msgID, "message-id", "", "message ID")
|
||||||
exportMessagesCmd.Parse(flag.Args()[1:])
|
exportMessagesCmd.Parse(flag.Args()[1:])
|
||||||
username := exportMessagesCmd.Arg(0)
|
username := exportMessagesCmd.Arg(0)
|
||||||
log.Println(convID, username)
|
if (convID == "" && msgID == "") || username == "" {
|
||||||
if convID == "" || username == "" {
|
log.Fatal("usage: hydroxide export-messages [-conversation-id <id>] [-message-id <id>] <username>")
|
||||||
log.Fatal("usage: hydroxide export-messages -conversation-id <id> <username>")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var bridgePassword string
|
var bridgePassword string
|
||||||
|
@ -364,9 +365,16 @@ func main() {
|
||||||
|
|
||||||
mboxWriter := mbox.NewWriter(os.Stdout)
|
mboxWriter := mbox.NewWriter(os.Stdout)
|
||||||
|
|
||||||
if err := exports.ExportConversation(c, privateKeys, mboxWriter, convID); err != nil {
|
if convID != "" {
|
||||||
|
if err := exports.ExportConversationMbox(c, privateKeys, mboxWriter, convID); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if msgID != "" {
|
||||||
|
if err := exports.ExportMessageMbox(c, privateKeys, mboxWriter, msgID); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := mboxWriter.Close(); err != nil {
|
if err := mboxWriter.Close(); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|
|
@ -15,12 +15,7 @@ import (
|
||||||
"github.com/emersion/hydroxide/protonmail"
|
"github.com/emersion/hydroxide/protonmail"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExportMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Writer, id string) error {
|
func writeMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Writer, msg *protonmail.Message) error {
|
||||||
msg, err := c.GetMessage(id)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to fetch message: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
mimeType := msg.MIMEType
|
mimeType := msg.MIMEType
|
||||||
if mimeType == "" {
|
if mimeType == "" {
|
||||||
mimeType = "text/html"
|
mimeType = "text/html"
|
||||||
|
@ -55,19 +50,37 @@ func ExportMessage(c *protonmail.Client, privateKeys openpgp.KeyRing, w io.Write
|
||||||
return mw.Close()
|
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, "")
|
_, msgs, err := c.GetConversation(id, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to fetch conversation: %v", err)
|
return fmt.Errorf("failed to fetch conversation: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, msg := range msgs {
|
for _, msg := range msgs {
|
||||||
w, err := mbox.CreateMessage(msg.Sender.Address, msg.Time.Time())
|
if err := ExportMessageMbox(c, privateKeys, mbox, msg.ID); err != nil {
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to create mbox message: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := ExportMessage(c, privateKeys, w, msg.ID); err != nil {
|
|
||||||
return fmt.Errorf("failed to export conversation message: %v", err)
|
return fmt.Errorf("failed to export conversation message: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue