shift73k/lib/shift73k_web/live/shift_import_live/index.ex

63 lines
1.6 KiB
Elixir

defmodule Shift73kWeb.ShiftImportLive.Index do
use Shift73kWeb, :live_view
@impl true
def mount(_params, session, socket) do
HTTPoison.start()
socket
|> assign_defaults(session)
|> live_okreply()
end
@impl true
def handle_event("save", %{"ics_import" => %{"ics_url" => ics_url}}, socket) do
ics_url
|> IO.inspect(label: "given ical url :")
|> HTTPoison.get!()
|> handle_http_ics_response(socket)
end
defp handle_http_ics_response(%HTTPoison.Response{status_code: 200} = resp, socket) do
case content_type_calendar?(resp.headers) do
false ->
handle_http_ics_response(false, socket)
true ->
resp.body
|> ICalendar.from_ics()
|> handle_parsed_ics_data(socket)
end
end
defp handle_http_ics_response(_, socket) do
socket
|> put_flash(:error, "Bad data, bad URL, or some other error")
|> live_noreply()
end
defp handle_parsed_ics_data([], socket), do: handle_http_ics_response(false, socket)
defp handle_parsed_ics_data(events, socket) do
IO.inspect(events, label: "We got some ical events! :")
socket
|> put_flash(:success, "We got some ical events")
|> live_noreply()
end
def ical_request(ics_url) do
# ics_url = "https://calendar.google.com/calendar/ical/l44mcggj2rsoqq7prlakvitqfo%40group.calendar.google.com/private-66f4cf8b340bdd6e9de8c60b2ae36528/basic.ics"
end
defp content_type_calendar?(headers) do
headers
|> List.keyfind("Content-Type", 0)
|> elem(1)
|> String.contains?("text/calendar")
end
def shift_from_event(%ICalendar.Event{} = event) do
%{}
end
end