diff --git a/lib/wanderer_app/maps.ex b/lib/wanderer_app/maps.ex index cc8103b4..37d278ff 100644 --- a/lib/wanderer_app/maps.ex +++ b/lib/wanderer_app/maps.ex @@ -55,18 +55,33 @@ defmodule WandererApp.Maps do def get_available_maps(current_user) do case WandererApp.Api.Map.available(%{}, actor: current_user) do - {:ok, maps} -> {:ok, maps |> _filter_blocked_maps(current_user)} + {:ok, maps} -> {:ok, maps |> filter_blocked_maps(current_user)} _ -> {:ok, []} end end + def get_tracked_map_characters(map_id, current_user) do + case WandererApp.MapCharacterSettingsRepo.get_tracked_by_map_filtered( + map_id, + current_user.characters |> Enum.map(& &1.id) + ) do + {:ok, settings} -> + {:ok, + settings + |> Enum.map(fn s -> s |> Ash.load!(:character) |> Map.get(:character) end)} + + _ -> + {:ok, []} + end + end + def load_characters(map, character_settings, user_id) do {:ok, user_characters} = WandererApp.Api.Character.active_by_user(%{user_id: user_id}) characters = map - |> _get_map_available_characters(user_characters) + |> get_map_available_characters(user_characters) |> Enum.map(fn c -> map_character(c, character_settings |> Enum.find(&(&1.character_id == c.id))) end) @@ -146,7 +161,7 @@ defmodule WandererApp.Maps do }} end - defp _get_map_available_characters(map, user_characters) do + defp get_map_available_characters(map, user_characters) do {:ok, %{ map_acl_owner_ids: map_acl_owner_ids, @@ -164,7 +179,7 @@ defmodule WandererApp.Maps do end) end - defp _filter_blocked_maps(maps, current_user) do + defp filter_blocked_maps(maps, current_user) do user_character_ids = current_user.characters |> Enum.map(& &1.id) user_character_eve_ids = current_user.characters |> Enum.map(& &1.eve_id) diff --git a/lib/wanderer_app_web/components/user_activity.ex b/lib/wanderer_app_web/components/user_activity.ex index 1ec7fc29..5f548e6f 100644 --- a/lib/wanderer_app_web/components/user_activity.ex +++ b/lib/wanderer_app_web/components/user_activity.ex @@ -74,7 +74,7 @@ defmodule WandererAppWeb.UserActivity do

- <%= _get_event_name(@activity.event_type) %> + <%= get_event_name(@activity.event_type) %>

<.activity_event event_type={@activity.event_type} event_data={@activity.event_data} /> @@ -115,7 +115,7 @@ defmodule WandererAppWeb.UserActivity do
- <%= _get_event_data(@event_type, Jason.decode!(@event_data) |> Map.drop(["character_id"])) %> + <%= get_event_data(@event_type, Jason.decode!(@event_data) |> Map.drop(["character_id"])) %>
@@ -129,27 +129,33 @@ defmodule WandererAppWeb.UserActivity do {:noreply, socket} end - defp _get_event_name(:hub_added), do: "Hub Added" - defp _get_event_name(:hub_removed), do: "Hub Removed" - defp _get_event_name(:map_connection_added), do: "Connection Added" - defp _get_event_name(:map_connection_updated), do: "Connection Updated" - defp _get_event_name(:map_connection_removed), do: "Connection Removed" - defp _get_event_name(:map_acl_added), do: "Acl Added" - defp _get_event_name(:map_acl_removed), do: "Acl Removed" - defp _get_event_name(:system_added), do: "System Added" - defp _get_event_name(:system_updated), do: "System Updated" - defp _get_event_name(:systems_removed), do: "System(s) Removed" - defp _get_event_name(name), do: name + defp get_event_name(:hub_added), do: "Hub Added" + defp get_event_name(:hub_removed), do: "Hub Removed" + defp get_event_name(:map_connection_added), do: "Connection Added" + defp get_event_name(:map_connection_updated), do: "Connection Updated" + defp get_event_name(:map_connection_removed), do: "Connection Removed" + defp get_event_name(:map_acl_added), do: "Acl Added" + defp get_event_name(:map_acl_removed), do: "Acl Removed" + defp get_event_name(:system_added), do: "System Added" + defp get_event_name(:system_updated), do: "System Updated" + defp get_event_name(:systems_removed), do: "System(s) Removed" + defp get_event_name(name), do: name - # defp _get_event_data(:hub_added, data), do: Jason.encode!(data) - # defp _get_event_data(:hub_removed, data), do: data + defp get_event_data(:map_acl_added, %{"acl_id" => acl_id}) do + {:ok, acl} = WandererApp.AccessListRepo.get(acl_id) + "#{acl.name}" + end - # defp _get_event_data(:map_acl_added, data), do: data - # defp _get_event_data(:map_acl_removed, data), do: data - # defp _get_event_data(:system_added, data), do: data + defp get_event_data(:map_acl_removed, %{"acl_id" => acl_id}) do + {:ok, acl} = WandererApp.AccessListRepo.get(acl_id) + "#{acl.name}" + end + + # defp get_event_data(:map_acl_removed, data), do: data + # defp get_event_data(:system_added, data), do: data # - defp _get_event_data(:system_updated, %{ + defp get_event_data(:system_updated, %{ "key" => "labels", "solar_system_id" => solar_system_id, "value" => value @@ -166,22 +172,22 @@ defmodule WandererAppWeb.UserActivity do end end - defp _get_event_data(:system_added, %{ + defp get_event_data(:system_added, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) - defp _get_event_data(:hub_added, %{ + defp get_event_data(:hub_added, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) - defp _get_event_data(:hub_removed, %{ + defp get_event_data(:hub_removed, %{ "solar_system_id" => solar_system_id }), do: _get_system_name(solar_system_id) - defp _get_event_data(:system_updated, %{ + defp get_event_data(:system_updated, %{ "key" => key, "solar_system_id" => solar_system_id, "value" => value @@ -190,7 +196,7 @@ defmodule WandererAppWeb.UserActivity do "#{system_name} #{key} - #{inspect(value)}" end - defp _get_event_data(:systems_removed, %{ + defp get_event_data(:systems_removed, %{ "solar_system_ids" => solar_system_ids }), do: @@ -198,7 +204,7 @@ defmodule WandererAppWeb.UserActivity do |> Enum.map(&_get_system_name/1) |> Enum.join(", ") - defp _get_event_data(:map_connection_added, %{ + defp get_event_data(:map_connection_added, %{ "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id }) do @@ -207,7 +213,7 @@ defmodule WandererAppWeb.UserActivity do "[#{source_system_name}:#{target_system_name}]" end - defp _get_event_data(:map_connection_removed, %{ + defp get_event_data(:map_connection_removed, %{ "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id }) do @@ -216,7 +222,7 @@ defmodule WandererAppWeb.UserActivity do "[#{source_system_name}:#{target_system_name}]" end - defp _get_event_data(:map_connection_updated, %{ + defp get_event_data(:map_connection_updated, %{ "key" => key, "solar_system_source_id" => solar_system_source_id, "solar_system_target_id" => solar_system_target_id, @@ -227,7 +233,7 @@ defmodule WandererAppWeb.UserActivity do "[#{source_system_name}:#{target_system_name}] #{key} - #{inspect(value)}" end - defp _get_event_data(_name, data), do: Jason.encode!(data) + defp get_event_data(_name, data), do: Jason.encode!(data) defp _get_system_name(solar_system_id) do case WandererApp.CachedInfo.get_system_static_info(solar_system_id) do diff --git a/lib/wanderer_app_web/live/maps/event_handlers/map_characters_event_handler.ex b/lib/wanderer_app_web/live/maps/event_handlers/map_characters_event_handler.ex index 4f8dfd7e..065cda66 100644 --- a/lib/wanderer_app_web/live/maps/event_handlers/map_characters_event_handler.ex +++ b/lib/wanderer_app_web/live/maps/event_handlers/map_characters_event_handler.ex @@ -156,7 +156,7 @@ defmodule WandererAppWeb.MapCharactersEventHandler do %{result: characters} = socket.assigns.characters - {:ok, map_characters} = get_tracked_map_characters(map_id, current_user) + {:ok, map_characters} = WandererApp.Maps.get_tracked_map_characters(map_id, current_user) user_character_eve_ids = map_characters |> Enum.map(& &1.eve_id) @@ -204,7 +204,7 @@ defmodule WandererAppWeb.MapCharactersEventHandler do {:ok, all_settings} = WandererApp.MapCharacterSettingsRepo.get_all_by_map(map_id) # Find and filter user's characters - {:ok, user_characters} = get_tracked_map_characters(map_id, current_user) + {:ok, user_characters} = WandererApp.Maps.get_tracked_map_characters(map_id, current_user) user_char_ids = Enum.map(user_characters, & &1.id) my_settings = @@ -251,7 +251,7 @@ defmodule WandererAppWeb.MapCharactersEventHandler do # re-fetch or re-map to confirm final results in UI %{result: characters} = socket.assigns.characters - {:ok, tracked_characters} = get_tracked_map_characters(map_id, current_user) + {:ok, tracked_characters} = WandererApp.Maps.get_tracked_map_characters(map_id, current_user) user_eve_ids = Enum.map(tracked_characters, & &1.eve_id) {:ok, final_settings} = WandererApp.MapCharacterSettingsRepo.get_all_by_map(map_id) @@ -316,21 +316,6 @@ defmodule WandererAppWeb.MapCharactersEventHandler do def has_tracked_characters?([]), do: false def has_tracked_characters?(_user_characters), do: true - def get_tracked_map_characters(map_id, current_user) do - case WandererApp.MapCharacterSettingsRepo.get_tracked_by_map_filtered( - map_id, - current_user.characters |> Enum.map(& &1.id) - ) do - {:ok, settings} -> - {:ok, - settings - |> Enum.map(fn s -> s |> Ash.load!(:character) |> Map.get(:character) end)} - - _ -> - {:ok, []} - end - end - def map_ui_character(character), do: character diff --git a/lib/wanderer_app_web/live/maps/event_handlers/map_core_event_handler.ex b/lib/wanderer_app_web/live/maps/event_handlers/map_core_event_handler.ex index 1f10e5d0..f2fa2e90 100644 --- a/lib/wanderer_app_web/live/maps/event_handlers/map_core_event_handler.ex +++ b/lib/wanderer_app_web/live/maps/event_handlers/map_core_event_handler.ex @@ -119,10 +119,9 @@ defmodule WandererAppWeb.MapCoreEventHandler do ), do: socket - def handle_server_event(%{event: :structures_updated, payload: _solar_system_id}, socket) do - socket - end - + def handle_server_event(%{event: :structures_updated, payload: _solar_system_id}, socket) do + socket + end def handle_server_event(event, socket) do Logger.warning(fn -> "unhandled map core event: #{inspect(event)} #{inspect(socket)} " end) @@ -337,7 +336,7 @@ defmodule WandererAppWeb.MapCoreEventHandler do with {:ok, _} <- current_user |> WandererApp.Api.User.update_last_map(%{last_map_id: map_id}), {:ok, map_user_settings} <- WandererApp.MapUserSettingsRepo.get(map_id, current_user.id), {:ok, tracked_map_characters} <- - MapCharactersEventHandler.get_tracked_map_characters(map_id, current_user), + WandererApp.Maps.get_tracked_map_characters(map_id, current_user), {:ok, characters_limit} <- map_id |> WandererApp.Map.get_characters_limit(), {:ok, present_character_ids} <- WandererApp.Cache.lookup("map_#{map_id}:presence_character_ids", []), @@ -543,21 +542,6 @@ defmodule WandererAppWeb.MapCoreEventHandler do } end - defp get_tracked_map_characters(map_id, current_user) do - case WandererApp.MapCharacterSettingsRepo.get_tracked_by_map_filtered( - map_id, - current_user.characters |> Enum.map(& &1.id) - ) do - {:ok, settings} -> - {:ok, - settings - |> Enum.map(fn s -> s |> Ash.load!(:character) |> Map.get(:character) end)} - - _ -> - {:ok, []} - end - end - defp filter_map_characters( characters, user_character_eve_ids, diff --git a/lib/wanderer_app_web/live/maps/map_audit_live.html.heex b/lib/wanderer_app_web/live/maps/map_audit_live.html.heex index 176354de..e8fcd584 100644 --- a/lib/wanderer_app_web/live/maps/map_audit_live.html.heex +++ b/lib/wanderer_app_web/live/maps/map_audit_live.html.heex @@ -1,20 +1,3 @@ -
-
- <.live_component - module={UserActivity} - id="user-activity" - notify_to={self()} - can_undo_types={@can_undo_types} - stream={@streams.activity} - page={@page} - end_of_stream?={@end_of_stream?} - event_name="activity_event" - /> -
-
+
+
+ <.live_component + module={UserActivity} + id="user-activity" + notify_to={self()} + can_undo_types={@can_undo_types} + stream={@streams.activity} + page={@page} + end_of_stream?={@end_of_stream?} + event_name="activity_event" + /> +
+
diff --git a/lib/wanderer_app_web/live/maps/maps_live.ex b/lib/wanderer_app_web/live/maps/maps_live.ex index 5d64cd2f..4ba5dba7 100644 --- a/lib/wanderer_app_web/live/maps/maps_live.ex +++ b/lib/wanderer_app_web/live/maps/maps_live.ex @@ -636,6 +636,33 @@ defmodule WandererAppWeb.MapsLive do {:map_acl_updated, added_acls, removed_acls} ) + {:ok, tracked_characters} = + WandererApp.Maps.get_tracked_map_characters(map.id, current_user) + + first_tracked_character_id = Enum.map(tracked_characters, & &1.id) |> List.first() + + added_acls + |> Enum.each(fn acl_id -> + {:ok, _} = + WandererApp.User.ActivityTracker.track_map_event(:map_acl_added, %{ + character_id: first_tracked_character_id, + user_id: current_user.id, + map_id: map.id, + acl_id: acl_id + }) + end) + + removed_acls + |> Enum.each(fn acl_id -> + {:ok, _} = + WandererApp.User.ActivityTracker.track_map_event(:map_acl_removed, %{ + character_id: first_tracked_character_id, + user_id: current_user.id, + map_id: map.id, + acl_id: acl_id + }) + end) + {:noreply, socket |> assign_async(:maps, fn ->