add event image in iCal export (#842)

This commit is contained in:
Laurent GAY
2025-07-31 13:43:15 +02:00
committed by setop
parent 35b73eb20c
commit d2ce0de020
4 changed files with 26 additions and 5 deletions

View File

@@ -149,6 +149,16 @@ defmodule Mobilizon.Service.Export.ICalendar do
icalendar_event
end
icalendar_event =
if event.picture do
%ICalendar.Event{
icalendar_event
| attach: {event.picture.file.url, event.picture.file.content_type}
}
else
icalendar_event
end
icalendar_event
end

View File

@@ -155,7 +155,7 @@ defmodule Mobilizon.Mixfile do
{:geo, "~> 3.0"},
{:geo_postgis, "~> 3.1"},
{:timex, "~> 3.0"},
{:icalendar, github: "tcitworld/icalendar"},
{:icalendar, github: "mobilizon-tools/icalendar"},
{:exgravatar, "~> 2.0.1"},
# {:json_ld, "~> 0.3"},
{:jason, "~> 1.2"},

View File

@@ -74,7 +74,7 @@
"html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"},
"http_signatures": {:hex, :http_signatures, "0.1.2", "ed1cc7043abcf5bb4f30d68fb7bad9d618ec1a45c4ff6c023664e78b67d9c406", [:mix], [], "hexpm", "f08aa9ac121829dae109d608d83c84b940ef2f183ae50f2dd1e9a8bc619d8be7"},
"httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},
"icalendar": {:git, "https://github.com/tcitworld/icalendar.git", "1033d922c82a7223db0ec138e2316557b70ff49f", []},
"icalendar": {:git, "https://github.com/mobilizon-tools/icalendar.git", "b8fc5360b1755f60f2768d40f6aca949ef598a00", []},
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"inet_cidr": {:hex, :inet_cidr, "1.0.8", "d26bb7bdbdf21ae401ead2092bf2bb4bf57fe44a62f5eaa5025280720ace8a40", [:mix], [], "hexpm", "d5b26da66603bb56c933c65214c72152f0de9a6ea53618b56d63302a68f6a90e"},
"ip_reserved": {:hex, :ip_reserved, "0.1.1", "e5112d71f1abf05207f82fd9597d369a5fde1e0b6d1bbe77c02a99bb26ecdc33", [:mix], [{:inet_cidr, "~> 1.0.0", [hex: :inet_cidr, repo: "hexpm", optional: false]}], "hexpm", "55fcd2b6e211caef09ea3f54ef37d43030bec486325d12fe865ab5ed8140a4fe"},

View File

@@ -19,6 +19,7 @@ defmodule Mobilizon.Service.ICalendarTest do
VERSION:2.0
PRODID:-//Elixir ICalendar//Mobilizon #{Mobilizon.Config.instance_version()}//EN
BEGIN:VEVENT
ATTACH;FMTTYPE=#{event.picture.file.content_type}:#{event.picture.file.url}
CATEGORIES:#{Enum.map_join(event.tags, ",", & &1.title)}
DESCRIPTION:Ceci est une description avec une première phrase assez longue\\,\\n puis sur une seconde ligne
DTEND:#{Value.to_ics(event.ends_on)}Z
@@ -41,16 +42,26 @@ defmodule Mobilizon.Service.ICalendarTest do
describe "export the instance's public events" do
test "succeds" do
%Event{} = event = insert(:event, title: "I'm public")
%Event{} = event1 = insert(:event, title: "I'm public")
%Event{} = event2 = insert(:event, visibility: :private, title: "I'm private")
%Event{} = event3 = insert(:event, title: "Another public")
%Event{} = event3 = insert(:event, title: "Another public", picture: nil)
%Event{} = event4 = insert(:event, title: "No description", description: nil)
{:commit, ics} = ICalendarService.create_cache("instance")
assert ics =~ event.title
assert ics =~ event1.title
refute ics =~ event2.title
assert ics =~ event3.title
assert ics =~ event4.title
assert Enum.sort(Regex.scan(~r|ATTACH;FMTTYPE=image.*|, ics)) ==
Enum.sort([
[
"ATTACH;FMTTYPE=#{event1.picture.file.content_type}:#{event1.picture.file.url}"
],
[
"ATTACH;FMTTYPE=#{event4.picture.file.content_type}:#{event4.picture.file.url}"
]
])
end
test "with 50 events" do