From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 15268 invoked from network); 31 May 2021 16:38:05 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 31 May 2021 16:38:05 -0000 Received: from mout.gmx.net ([212.227.15.15]) by 1ess; Mon May 31 08:23:02 -0400 2021 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1622463778; bh=eJOq60tji9oZc0UetJ2+AZ66BEVnQRRpDeo7qPLDjPg=; h=X-UI-Sender-Class:From:Date:To:Subject:In-Reply-To; b=WNeKa0mTzP9uIhO8zOYU6JILx+wD0YGBSQm9Sk9IeO4tC2BXjGueK5bWFzYOCjesH /OEu3t/Gdll4PlrkESYb3Y7IgiqM0iynuvGyNMv46b4RsPr///xVbg3YeAxIKmfJVI esWhVavuEFxmoJrQ7+Ju3yKWYQD/2eyKlamlQmhg= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from purple.my.domain ([84.248.3.213]) by mail.gmx.net (mrgmx004 [212.227.17.184]) with ESMTPSA (Nemesis) id 1Mf07E-1lCheV1uRu-00gZUi; Mon, 31 May 2021 13:41:57 +0200 Message-ID: From: Risto Salminen Date: Mon, 31 May 2021 14:41:33 +0300 To: 9front@9front.org In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:fQ8LVHawiAQ8RZeHK2LRdIK7xC4c80H6QnnZlL+FvoCG7UTs65j 9yy1U5as0Dxh7kRZZRtHtf2wgbHADPnsbO+58zHE7ewJe5rp+fKpfE+MZMc5HB3+Qfw+5W5 Mv2n2Nl4YiFcN1Cq1xW54OvHQAZnMkmhP0XxoGIh2nKz70JDFsnbV9HzQSXKNSWMoKIz16d RzYTg0v7gAdGh/YgkGc8w== X-UI-Out-Filterresults: notjunk:1;V03:K0:7ebBpPGrdnI=:da2HR2C3FF4/VrQcSxbLnz JdUK4UZZrg5kIgBoDmUOBTAyKR2rIiYBtI4ayS4gz34dNs+Zz8yIkoQEVmDNYZ7OoNxEUavIL AM/dirhMFPnp1IN/mw006GbUitFZOtDJ6KjJPEZ/7CGFpCj5t36qOuA8eaQ6cwdA4Yc0E8sZY 3TSc//QfHqX+MDl+jUGqha8VOxu+WwmiLWkku1NgaNlq41HOQARHzyVzlyMYRig5PZD5I2zUK BNssSd0sGDKbtEiQsbNbMd2SfNCJp7FRna5Lu/vDcdnJHMwGvOtOgT/kgWuAa87tlX4Rj0XSt VdW+8cmuMmIZPxDmysPtI1bVlQy8BPWUdmnuCg/Qq96crd3cKQkX3e6YC1R3AcLUYip751klo fQMjqeza4TAGIayqXAQpfvbLhGkjZwDb9xIK28m+VyTOoTEnBcBOW62xEHpcQSyqVVUyaU8dJ qhyVFS7GppOYFmXFAIGl2EldLFoUafZulN1B1G10h9iysgwwusyq5gle6g0L6BAxHGzOl9E/T MWyvyQknifhYWGpTvjdubCaSDdrVjrRZc19yGpkNimzX02bba+YANHH8wJU2JAjmj48jLOg4z ICj4BGJgDQ9Fkn/BblKe6WzzdaVHYIEwThLuuyxzl42lzj6WSlYrvdNn4WI+Dv49bBpRrpkSs 01qB6It+tN61OK77f7FJr6JeAifV/WNN6mG3htDRJuDEdyhRJgGlmCnlO9rxOdBixJSgG7tT/ Jj3v838rLNrShja5g2c9ASbJjihz9w3cAuieF4ADVIdapG2TIgclR/Va5WfoOUC4ytzc/hAQx RHC9okgBWTUlGmYFi3ukX5RKb4UJ1u1bRCHcT9hjpQbuR/k+fAU9/dWPFlq3P+7GINnx0FYeK PIGvcJ1MU+l3NmUJNF9hYz9kGsj1FXPKPOTZXG3881GTRVwteNw02XnToXU0GFW29OCG2f0QC 6gE32HeWu4DyQZxGfF00xbrDvdvTFiI9W98RfbiTJxU/Z5FkMoS2QHw2Vz9jFWKq1NLXTxsEA FUS3to/mCQXfCZ8mwN1y5YYr+8s66Ns3YDAm3+0Jq4rpjtB6AioUA/upRmbsQW8aKVTPMW5W2 kHOVTgfB7sFNiio4cluOSVoyIbSJksqflKMCjujA4O+wTUZebxsUgPkWKq7T9ew/nbQdLXOFk 4NvLTZVkNdgKS2TfFvLrC8SbWZuyPJ/qRpORfOzharJbP1gUA6jlJl/R5Dj/NhWoH7y+VMh9h xJ180EC/BikPApQ60 List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: private full-stack out-scaling generator Subject: Re: [9front] upas/fs: copy messages between IMAP folders Reply-To: 9front@9front.org Precedence: bulk Hello, another iteration of the patch only but simply allows one to move, and not copy, messages inside a IMAP server from a folder to another folder. This simplifies the MUA's, for example nedmail's, duties, as it does not have to separately delete the moved mail anymore. Would this be useful for the broader audience? Thanks, rsal diff -r 7c895ae504fa sys/man/4/upasfs =2D-- a/sys/man/4/upasfs Fri May 28 13:02:58 2021 +0200 +++ b/sys/man/4/upasfs Mon May 31 13:55:01 2021 +0300 @@ -206,7 +206,7 @@ .I fs to open, close, rename, create or remove new mailboxes, and also to -delete or flag groups of messages atomically. +delete, flag, or move groups of messages atomically. The messages that can be written to this file are: .TP 2i .PD 0 @@ -260,6 +260,13 @@ .TP .B "flag \fImboxname flags number ...\fP flag the given messages. +.TP +.B "move \fImboxname number ... target\fP +Move the given messages from +.IR mboxname +to mailbox named +.IR target. +At the moment only supported with IMAP mailboxes. .PD .PP The diff -r 7c895ae504fa sys/src/cmd/upas/fs/dat.h =2D-- a/sys/src/cmd/upas/fs/dat.h Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/dat.h Mon May 31 13:55:01 2021 +0300 @@ -174,6 +174,7 @@ void (*decache)(Mailbox*, Message*); int (*fetch)(Mailbox*, Message*, uvlong, ulong); void (*delete)(Mailbox*, Message*); + char *(*move)(Mailbox*, Message*, char*); char *(*ctl)(Mailbox*, int, char**); char *(*remove)(Mailbox *, int); char *(*rename)(Mailbox*, char*, int); @@ -215,6 +216,7 @@ void unnewmessage(Mailbox*, Message*, Message*); char* delmessages(int, char**); char *flagmessages(int, char**); +char* movemessages(int, char**); void digestmessage(Mailbox*, Message*); int wraptls(int, char*); diff -r 7c895ae504fa sys/src/cmd/upas/fs/fs.c =2D-- a/sys/src/cmd/upas/fs/fs.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/fs.c Mon May 31 13:55:01 2021 +0300 @@ -1242,6 +1242,11 @@ return nil; return flagmessages(argc - 1, argv + 1); } + if(strcmp(argv[0], "move") =3D=3D 0){ + if(argc < 4) + return nil; + return movemessages(argc - 1, argv + 1); + } if(strcmp(argv[0], "remove") =3D=3D 0){ v0 =3D argv0; flags =3D 0; diff -r 7c895ae504fa sys/src/cmd/upas/fs/imap.c =2D-- a/sys/src/cmd/upas/fs/imap.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/imap.c Mon May 31 13:55:01 2021 +0300 @@ -1025,6 +1025,29 @@ } static char* +imap4move(Mailbox *mb, Message *m, char *dest) +{ + char *r; + Imap *imap; + + imap =3D mb->aux; + imap4cmd(imap, "uid copy %lud %s", (ulong)m->imapuid, dest); + r =3D imap4resp(imap); + if(!isokay(r)) + return r; + imap4cmd(imap, "uid store %lud +flags (\\Deleted)", (ulong)m->imapuid); + r =3D imap4resp(imap); + if(!isokay(r)) + return r; + imap4cmd(imap, "expunge"); + r =3D imap4resp(imap); + if(!isokay(r)) + return r; + m->inmbox =3D 0; + return 0; +} + +static char* imap4sync(Mailbox *mb) { char *err; @@ -1183,6 +1206,7 @@ mb->delete =3D imap4delete; mb->rename =3D imap4rename; mb->modflags =3D imap4modflags; + mb->move =3D imap4move; mb->addfrom =3D 1; return nil; } diff -r 7c895ae504fa sys/src/cmd/upas/fs/mbox.c =2D-- a/sys/src/cmd/upas/fs/mbox.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/mbox.c Mon May 31 13:55:01 2021 +0300 @@ -1137,6 +1137,37 @@ return rerr; } +char* +movemessages(int argc, char **argv) +{ + char *err, *dest, *rerr; + int i, needwrite; + Mailbox *mb; + Message *m; + + rerr =3D 0; + for(mb =3D mbl; mb !=3D nil; mb =3D mb->next) + if(strcmp(*argv, mb->name) =3D=3D 0) + break; + if(mb =3D=3D nil) + return "no such mailbox"; + if(mb->move =3D=3D nil) + return "move not supported"; + dest =3D argv[argc - 1]; + needwrite =3D 0; + for(i =3D 1; i < argc - 1; i++) + for(m =3D mb->root->part; m; m =3D m->next) + if(strcmp(m->name, argv[i]) =3D=3D 0){ + if(err =3D mb->move(mb, m, dest)) + rerr =3D err; + else + needwrite =3D 1; + } + if(needwrite) + syncmbox(mb, 1); + return rerr; +} + void msgincref(Mailbox *mb, Message *m) { diff -r 7c895ae504fa sys/src/cmd/upas/fs/mdir.c =2D-- a/sys/src/cmd/upas/fs/mdir.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/mdir.c Mon May 31 13:55:01 2021 +0300 @@ -294,5 +294,6 @@ mb->idxread =3D idxr; mb->idxwrite =3D idxw; mb->ctl =3D mdirctl; + mb->move =3D nil; return nil; } diff -r 7c895ae504fa sys/src/cmd/upas/fs/plan9.c =2D-- a/sys/src/cmd/upas/fs/plan9.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/plan9.c Mon May 31 13:55:01 2021 +0300 @@ -411,5 +411,6 @@ mb->remove =3D localremove; mb->rename =3D localrename; mb->decache =3D plan9decache; + mb->move =3D nil; return nil; } diff -r 7c895ae504fa sys/src/cmd/upas/fs/pop3.c =2D-- a/sys/src/cmd/upas/fs/pop3.c Fri May 28 13:02:58 2021 +0200 +++ b/sys/src/cmd/upas/fs/pop3.c Mon May 31 13:55:01 2021 +0300 @@ -624,6 +624,7 @@ mb->sync =3D pop3sync; mb->close =3D pop3close; mb->ctl =3D pop3ctl; + mb->move =3D nil; mb->addfrom =3D 1; return nil; }