未定义的 ICS 文件名

{“content”:"## :information_source: 概述
当点击事件预览模态框(点击事件日期后出现的那个)中的“添加到日历”时:

下载的 .ics 文件被命名为 undefined.ics,日历文件中的事件标题也设置为 SUMMARY:undefined。然而,通过事件的 3 点菜单中的“添加到日历”选项下载日历可以正常工作,它会使用事件标题作为文件名和日历摘要。

:walking_woman: 复现步骤

  1. 创建或打开一个包含事件的主题
  2. 点击帖子中显示的事件日期以展开预览模态框
  3. 在模态框中,点击添加到日历
  4. 保存生成的 .ics 文件。
  5. 可选地,通过点击事件的 3 点菜单并从中选择添加到日历进行比较

:white_check_mark: 预期结果

  • 下载的 .ics 文件应以事件标题命名
  • 日历文件内容应具有正确的 SUMMARY: 和事件标题

:x: 观察到的结果

  • 下载的文件被命名为 undefined.ics
  • 日历文件中的事件标题为 SUMMARY:undefined
  • (从 3 点菜单下载时,文件名和摘要均正确。)

:books: 附加信息

  • 格式错误的 ICS 内容示例:
    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID:-//Discourse//EN
    BEGIN:VEVENT
    UID:1762794000000_1762801200000
    DTSTAMP:20251105T173754Z
    DTSTART:20251110T170000Z
    DTEND:20251110T190000Z
    SUMMARY:undefined
    END:VEVENT
    END:VCALENDAR
    

在 Meta 和其他几个 Discourse 站点上测试,结果相同。",“target_locale”:“zh_CN”}

3 个赞

这是一个棘手的问题,Dax,这是我们管道的一个副作用。

我们在这里生成日期的 bbcode:

并在这里进行处理:

因此,在处理后的 HTML 块的上下文中,“下载 ics”不知道它实际所在的帖子(或事件)。

我们还有另一个用于 ics 生成的不同管道:

因此,从工程角度来看,我们需要决定:

  1. 我们是否教会“日期处理”如何将 ics 生成重新路由到 Discourse Calendar。

或者

  1. 我们是否向 Discourse Local Dates 提供足够的信息,以便它可以独立生成 ics 并保持代码的零散。

我不确定在这里做什么才是正确的,但我已经优先处理了它,以便团队可以进行分类和解决。

5 个赞

大家好,为了提供一些背景信息,如果点击事件上的三个点,会出现“添加到日历”选项,并且这个功能确实可用。我不知道这是否有助于你们的调查,但似乎这个问题在代码的其他地方已经解决了。

6 个赞

这里有很多内容:

今天是星期五(至少在某些地方是这样;p),所以我将等到周一再合并。

这个更改非常广泛,应该能显著改善我们的 ICS 支持。

  • 统一 ICS 生成管道 - 我们只使用一种机制来处理“添加到日历”和点击日期
  • 修正了 ICS 格式中的许多细微之处
    • 我们传递 RRULE,因此如果您获取一个重复事件
    • 正确的 CRLF 换行符和对 ICS 格式的普遍遵守
    • 时区支持,因此当您获取事件的 ICS 时,它将显示正确的时区,而不是 UTC 事件 - 这意味着重复事件将起作用。
  • 扩展了本地日期格式以支持可选编码的 ICS

我有一个悬而未决的问题:是,rrule 还是 否,rrule

如果您点击这里:

我们是打算添加重复事件吗?还是只添加事件的单个实例?

同样,这里怎么样:

@lindsey 我在这两者之间摇摆不定,我能理解两种观点的论据。

  1. 我点击了一个重复事件,并想将重复事件添加到我的日历中

或者

  1. 我点击了一个重复事件的实例,并且只想添加它。

我实现了 (1),因为我倾向于认为它更正确,但如果您愿意,我也愿意将其更改为 (2)。

7 个赞

一个帖子被合并到一个现有主题:Upcoming events page broken after recent update

我能理解这两种观点,但我更倾向于 1。我认为它既更正确,也更容易“修复”——如果它不是用户想要的,因为大多数日历软件都可以轻松地通过单个操作(例如 Google 日历)删除额外的事件:

所以,以下麻烦:

  • 我不想回复所有事件,所以我需要删除多余的事件

比以下麻烦要小得多:

  • 确实想回复所有事件,所以我需要每周回来这里,并确保继续将它们添加到我的日历中
5 个赞

好的,我已将 RSVP 设置为全部。

今天已合并 :confetti_ball:

5 个赞

该主题在 4 天后自动关闭。不再允许回复。