From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: thunk2@arcor.de (Thomas Plass) Newsgroups: gmane.emacs.bugs Subject: bug#34315: [PATCH] icalendar.el: DURATION fix + more robust timezone handling Date: Wed, 12 Aug 2020 15:08:18 +0200 Message-ID: <24371.59842.984273.402129@AGAME7.local> References: <23640.9851.562972.730234@AGAME7.local> <875ztog7hx.fsf@panama> <87wom1otsw.fsf@panama> <87zh7267sy.fsf@gnus.org> <87pn7yo54t.fsf@panama> <83o8ni4fhu.fsf@gnu.org> <24369.32256.954408.774614@AGAME7.local> <87y2mlxx8r.fsf@gnus.org> <87d03x43kz.fsf@panama> Reply-To: Thomas Plass Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="HQeW33IGhA" Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23913"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Lars Ingebrigtsen , 34315@debbugs.gnu.org, Thomas Plass To: Ulf Jasper Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Aug 12 15:09:12 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k5qVD-000656-7N for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 12 Aug 2020 15:09:11 +0200 Original-Received: from localhost ([::1]:46326 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k5qVC-0002LI-AB for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 12 Aug 2020 09:09:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:41738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k5qV4-0002JI-Bx for bug-gnu-emacs@gnu.org; Wed, 12 Aug 2020 09:09:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:59951) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k5qV4-0000WS-2J for bug-gnu-emacs@gnu.org; Wed, 12 Aug 2020 09:09:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1k5qV3-0002DA-TQ for bug-gnu-emacs@gnu.org; Wed, 12 Aug 2020 09:09:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: thunk2@arcor.de (Thomas Plass) Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 12 Aug 2020 13:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 34315 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 34315-submit@debbugs.gnu.org id=B34315.15972377368488 (code B ref 34315); Wed, 12 Aug 2020 13:09:01 +0000 Original-Received: (at 34315) by debbugs.gnu.org; 12 Aug 2020 13:08:56 +0000 Original-Received: from localhost ([127.0.0.1]:43264 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k5qUy-0002Cp-0u for submit@debbugs.gnu.org; Wed, 12 Aug 2020 09:08:56 -0400 Original-Received: from vsmx009.vodafonemail.xion.oxcs.net ([153.92.174.87]:54014) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1k5qUw-0002Cc-9M for 34315@debbugs.gnu.org; Wed, 12 Aug 2020 09:08:54 -0400 Original-Received: from vsmx001.vodafonemail.xion.oxcs.net (unknown [192.168.75.191]) by mta-5-out.mta.xion.oxcs.net (Postfix) with ESMTP id 5556D159EB9A; Wed, 12 Aug 2020 13:08:48 +0000 (UTC) Original-Received: from agame7.arcor.de (unknown [2.205.18.233]) by mta-5-out.mta.xion.oxcs.net (Postfix) with ESMTPA id 7CF00159EB98; Wed, 12 Aug 2020 13:08:37 +0000 (UTC) In-Reply-To: Your message of Tuesday, August 11 2020 17:14:36 (ID: <87d03x43kz.fsf@panama>). X-VADE-STATUS: LEGIT X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:184786 Archived-At: --HQeW33IGhA Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Attached is an updated ZIP containing the respun patch and the unmodified samples. The patch is against https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/calendar/icalendar.el blob: d76c11050312b4a04ac1cbda436b3c08fc6f2cc5 Hopefully, this is OK as it is. I also extended the README in the ZIP to clarify what the patch is about: The aim of the patch is to support robust date-time conversions based on the VTIMEZONE sections in the iCalendar data. VTIMEZONE specifies the source timezone while the target timezone is supplied externally (by the OS, environment, user, etc). Assuming a target timezone of Europe/Berlin, the local start time of all events defined in the sample files is November 3, 2018 20:15h (20181103T201500). Aside: the clerical (?) error in `icalendar--decode-isoduration' is also part of the patch but has nothing to do with conversions. Ulf Jasper wrote at 17:14 on August 11, 2020: : Am 11.08.2020 um 13:01 (+0200) schrieb Lars Ingebrigtsen: : : Thomas, could you please provide the expected results for the test files, : one for each ics file? Thanks! Well, the expected result depends on: - The local timezone of the person running the code. Where I'm sitting, it is November 3, 2018 20:15h for all samples. Europe_Berlin-20181103T201500_no_in-calendar_VTIMEZONE.ics contains no VTIMEZONE and thus has a somewhat undefined result. The user agent is assumed to do the right thing based on OS/environment/user/AI. Note: this particular date+time is carefully chosen as it is subject to DST adjustments. Under MS-Windows, it exercises Emacs' buggy DST handling. But this fact is just incidental and not addressed by the patch. - Expectations as to how the conversion result is to be rendered. In my case rendering of the iCal data is done by a MIME handler I cooked up for VM. This is mainly used for rendering incoming meeting requests necessitating accurate date calculations. Technical note: The concept of "target zone" is implemented by an additional optional argument to `icalendar--decode-isodatetime'. My VM plugin's function for getting the event dates (inspired by `icalendar--convert-ical-to-diary') says: (icalendar--decode-isodatetime dtstart nil dtstart-zone local-zone) where there is a lot of apparatus for computing 'dtstart-zone and 'local-zone. If you'd like to know more, I can send the code. --HQeW33IGhA Content-Type: application/zip; name="icalendar-patch+testcases_20200812.zip" Content-Disposition: attachment; filename="icalendar-patch+testcases_20200812.zip" Content-Transfer-Encoding: base64 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 FwSlZlhdJsFYFqpBKWQ0FApLb4k1MZaFalDpTPFgWEBNtdRAqUJZmxqUmhFFDRIwoqjZBKiyYpsC VTzYBoIdo1ATYplCe60erFYPdqsaA6rUl6E2Dwy3eWCkTY3RthXDfmrxwMy6h08MCKVpab1pw3rX wjY0ibrh2qmFoJPqfhqb6JIfev3AMsy2ul+gFuqd6v6JTa0M0IubGuYRVib3BQqNjy/Mc/nndJj/ Odz5E4+ENgzcNHXGkwGcz0fhe3nc98/OaIcgbMMgoAIeTMjvCUh6TeCkujnMyohOI2IGaDHfrLLl PJ9VLmeHK8Xsdb0rtvka3t+tF7vSYDiWIgxhaG8shzu44ekw8ceHu8VyXqx0qdHBuIPorV6s3yRw sKlPxPAG3+o1Rb1S1Oc7PV8Vmr7Ps9VS//FLv/JyA+kWm/1ynb3oJ7uQarHNlzstnYShm0z/15Y0 pelfZ+vQEmULHB6rS+FvUEsDBBQAAAAIAM9oUU7aDZvU9QAAAMABAAA6ABwARXVyb3BlX0Jlcmxp bi0yMDE4MTEwM1QyMDE1MDBfbm9faW4tY2FsZW5kYXJfVlRJTUVaT05FLmljc1VUCQADRU5pXI89 aVx1eAsAAQQgAgAABAECAwCl0U1rgzAYB/B7PkWOG5gusS3bcosaRsA3kmi7XSRUD4IvQ+v3X1LX Mtrjbg9/wu95ScA/RErLkMU8jZgEJZdKZCn1NxjkMotERHszLKYDR3SQSIuEf2Upp3yZxu/mJWim rh1AsCq85KkGYcyUonkRxCIEkbYu9TF5IwRvtS32GNtUaSb1Q17YdqtcrTK6e1ENY2XTk+maoTZT VV4H2rSneWWT3LHvmPivmuzwzrXjKpQi126x2pwb6FRECMJbD57b3gWU7D04jPCPDm+6B6/7AniZ Cz4VOkTkGZp5XvqmBqpIEiY//8s7HMBH3h3x97yX8vZfP1BLAwQUAAAACAC4oFFOLWu1jZcBAAAN BAAAUAAcAEFtZXJpY2FfQ3Jlc3Rvbi0yMDE4MTEwM1QxMjE1MDBfaW4tY2FsZW5kYXJfVlRJTUVa T05FX3R6dXJsX2hpc3RvcmljYWxfUkRBVEUuaWNzVVQJAAOLsGlcQ0ZpXHV4CwABBCACAAAEAQID AKWT306DMBTG7/sUfQAZPYgbq/Gig86Q8C+lLOoNwQ2VZGOGsQt9els2t8li1MhV+fqd/k75DhN+ 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 XAlnzTKbhtfcU0+yXODuGe+g+XzkVq34CUbgI5CwkPEQcJVEzu+UmT2uG7x+bD+zZFhjybFSsFCQ /x92tao73/bkVcO/zonvEVDaf0TKRjUt0/pIVXmUk68xscbLcdP7G1BLAQIeAxQAAAAIAK5wDFE5 BcI0tAIAAN8FAAAGABgAAAAAAAEAAAD4gQAAAABSRUFETUVVVAUAAwjbM191eAsAAQQgAgAABAEC AwBQSwECHgMUAAAACACcoFFOukbGPLQBAADYAwAARgAYAAAAAAABAAAA+IH0AgAARXVyb3BlX0Jl cmxpbi0yMDE4MTEwM1QyMDE1MDBfaW4tY2FsZW5kYXJfVlRJTUVaT05FX3R6dXJsX3N0YW5kYXJk Lmljc1VUBQADV7BpXHV4CwABBCACAAAEAQIDAFBLAQIeAxQAAAAIAKSgUU45F0TB2wIAACUKAABI ABgAAAAAAAEAAAD4gSgFAABFdXJvcGVfQmVybGluLTIwMTgxMTAzVDIwMTUwMF9pbi1jYWxlbmRh cl9WVElNRVpPTkVfdHp1cmxfaGlzdG9yaWNhbC5pY3NVVAUAA2OwaVx1eAsAAQQgAgAABAECAwBQ SwECHgMUAAAACADPaFFO2g2b1PUAAADAAQAAOgAYAAAAAAABAAAA+IGFCAAARXVyb3BlX0Jlcmxp bi0yMDE4MTEwM1QyMDE1MDBfbm9faW4tY2FsZW5kYXJfVlRJTUVaT05FLmljc1VUBQADRU5pXHV4 CwABBCACAAAEAQIDAFBLAQIeAxQAAAAIALigUU4ta7WNlwEAAA0EAABQABgAAAAAAAEAAAD4ge4J AABBbWVyaWNhX0NyZXN0b24tMjAxODExMDNUMTIxNTAwX2luLWNhbGVuZGFyX1ZUSU1FWk9ORV90 enVybF9oaXN0b3JpY2FsX1JEQVRFLmljc1VUBQADi7BpXHV4CwABBCACAAAEAQIDAFBLAQIeAxQA AAAIALSgUU7NmN5dZwEAABMDAABIABgAAAAAAAEAAAD4gQ8MAABBbWVyaWNhX0NyZXN0b24tMjAx ODExMDNUMTIxNTAwX2luLWNhbGVuZGFyX1ZUSU1FWk9ORV90enVybF9zdGFuZGFyZC5pY3NVVAUA A4OwaVx1eAsAAQQgAgAABAECAwBQSwECHgMUAAAACABFbQxRyYE6KH0HAAAJFgAAEgAYAAAAAAAB AAAAtIH4DQAAaWNhbGVuZGFyLmVsLnBhdGNoVVQFAAOS1TNfdXgLAAEE6AMDAAQBAgMAUEsFBgAA AAAHAAcAYgMAAMEVAAAAAA== --HQeW33IGhA--