Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) by mail.sr.ht (Postfix) with ESMTPS id DC5A34022F for <~sircmpwn/aerc@lists.sr.ht>; Thu, 11 Jul 2019 13:49:40 +0000 (UTC) Authentication-Results: mail.sr.ht; dkim=pass (2048-bit key) header.d=benburwell.com header.i=@benburwell.com header.b=kDVZr4zG; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=xD7QwKPp Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id C147D2215D; Thu, 11 Jul 2019 09:49:40 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Thu, 11 Jul 2019 09:49:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=benburwell.com; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm3; bh=F1lrEjw2VdkYT a3CIwIIvCixlaUHdqPLaqEdifU2ytw=; b=kDVZr4zG1CtO/kTJWPTfpu8qE4uAb yywlFd/PPNCyU7Jae+AX795ifYVEBdEjXdco6zDajfqxtByGw5E8q+Oqpg/Ph7DM sUEXL+EdEkxzOTUR4qUHGm8CBmocQEhBlMZD5RQMkOXkN2i3Hp/Pd8PInxypvhZw SQgf6c69hO3gweTH9CHo/xIaxzTXHnuNP7hpsh7x/S6SzoZ7hWvK+eRnlWoRYG7M sek07qwnrkcc6u+uy5M17jg9H7XfNH8QZ030tLAr3nHBadZxEyHukT5p03CbELd3 1GPYaDLD1utNKKO9oaY7fCr+crceuwKbBrs4yEiPuCVbYrp8QMs00ATIw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=F1lrEjw2VdkYTa3CIwIIvCixlaUHdqPLaqEdifU2ytw=; b=xD7QwKPp BRslrhoi5GExHp+J/43zLwIiJvDAo5NH9Jzc6aqFtp7NMJipT6bqQzCrodljqIwX eeGlfSHrsf/ho99FJybLTM/jKLGuTj1OCUS8kMjVfeZlGCyPGJAorjBpfwTHeNR1 AyiFK3wtYVhZUDOrp9EDZEXFfYscJdwDP/mBwUdqSkGN0QoefR2OUNYiUbSOgY6o hTJYZSX21vURES4q0x00OgtVdFFWK7dk1KQvEeD4lFWs8nQRQ+cL+2XpOEJ0Om/h YR3mgYaGj6Gv+I9fW3u5q+gGukn/no4Y2qz1wORE8RyYkEIl2Lec0RzDtnOH0tKn HxSwRIMDl9LV0g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrgeekgdejtdcutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhephffvufffkffojghfggfgsedtkeertd ertddtnecuhfhrohhmpeeuvghnuceuuhhrfigvlhhluceosggvnhessggvnhgsuhhrfigv lhhlrdgtohhmqeenucfkphepudegiedrudduhedrgedvrddutdenucfrrghrrghmpehmrg hilhhfrhhomhepsggvnhessggvnhgsuhhrfigvlhhlrdgtohhmnecuvehluhhsthgvrhfu ihiivgeptd X-ME-Proxy: Received: from localhost (146-115-42-10.s4872.c3-0.abr-cbr1.sbo-abr.ma.cable.rcncustomer.com [146.115.42.10]) by mail.messagingengine.com (Postfix) with ESMTPA id 6B762380075; Thu, 11 Jul 2019 09:49:40 -0400 (EDT) From: Ben Burwell To: ~sircmpwn/aerc@lists.sr.ht Cc: Ben Burwell Subject: [PATCH v2 4/5] Implement maildir copy Date: Thu, 11 Jul 2019 09:44:53 -0400 Message-Id: <20190711134454.80318-5-ben@benburwell.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190711134454.80318-1-ben@benburwell.com> References: <20190711134454.80318-1-ben@benburwell.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Create a delivery in the destination directory with the content of the source message. --- worker/maildir/container.go | 38 +++++++++++++++++++++++++++++++++++++ worker/maildir/worker.go | 5 +++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/worker/maildir/container.go b/worker/maildir/container.go index 351afed..aa14575 100644 --- a/worker/maildir/container.go +++ b/worker/maildir/container.go @@ -2,6 +2,7 @@ package maildir =20 import ( "fmt" + "io" "io/ioutil" "log" "path/filepath" @@ -103,3 +104,40 @@ func (c *Container) DeleteAll(d maildir.Dir, uids []= uint32) ([]uint32, error) { } return success, nil } + +func (c *Container) CopyAll( + dest maildir.Dir, src maildir.Dir, uids []uint32) error { + for _, uid :=3D range uids { + if err :=3D c.copyMessage(dest, src, uid); err !=3D nil { + return fmt.Errorf("could not copy message %d: %v", uid, err) + } + } + return nil +} + +func (c *Container) copyMessage( + dest maildir.Dir, src maildir.Dir, uid uint32) error { + key, ok :=3D c.uids.GetKey(uid) + if !ok { + return fmt.Errorf("could not find key for message id %d", uid) + } + + f, err :=3D src.Open(key) + if err !=3D nil { + return fmt.Errorf("could not open source message: %v", err) + } + + del, err :=3D dest.NewDelivery() + if err !=3D nil { + return fmt.Errorf("could not initialize delivery: %v") + } + defer del.Close() + + if _, err =3D io.Copy(del, f); err !=3D nil { + return fmt.Errorf("could not copy message to delivery: %v") + } + + // TODO: preserve flags + + return nil +} diff --git a/worker/maildir/worker.go b/worker/maildir/worker.go index f0c92ed..a5416cc 100644 --- a/worker/maildir/worker.go +++ b/worker/maildir/worker.go @@ -327,8 +327,9 @@ func (w *Worker) handleReadMessages(msg *types.ReadMe= ssages) error { } =20 func (w *Worker) handleCopyMessages(msg *types.CopyMessages) error { - // TODO: this. - return nil + defer w.done(msg) + dest :=3D w.c.Dir(msg.Destination) + return w.c.CopyAll(dest, *w.selected, msg.Uids) } =20 func (w *Worker) handleAppendMessage(msg *types.AppendMessage) error { --=20 2.22.0