Merge branch 'main' into copy-past-roles

This commit is contained in:
Dmitry Popov
2025-10-20 11:33:45 +02:00
4 changed files with 34 additions and 22 deletions
+9 -7
View File
@@ -173,12 +173,11 @@ defmodule WandererApp.Character.TrackingUtils do
%{
id: character_id,
eve_id: eve_id
},
} = _character,
map_id,
is_track_allowed,
caller_pid
)
when not is_nil(caller_pid) do
) do
WandererAppWeb.Presence.update(caller_pid, map_id, character_id, %{
tracked: is_track_allowed,
from: DateTime.utc_now()
@@ -217,13 +216,16 @@ defmodule WandererApp.Character.TrackingUtils do
end
defp track_character(
_character,
character,
_map_id,
_is_track_allowed,
_caller_pid
) do
Logger.error("caller_pid is required for tracking characters")
{:error, "caller_pid is required"}
Logger.error(
"Invalid character data for tracking - character must have :id and :eve_id fields, got: #{inspect(character)}"
)
{:error, "Invalid character data"}
end
def untrack(characters, map_id, caller_pid) do
@@ -243,7 +245,7 @@ defmodule WandererApp.Character.TrackingUtils do
:ok
else
true ->
Logger.error("caller_pid is required for untracking characters")
Logger.error("caller_pid is required for untracking characters 2")
{:error, "caller_pid is required"}
end
end
@@ -365,15 +365,19 @@ defmodule WandererAppWeb.MapCharactersEventHandler do
end
defp handle_tracking_event({:track_characters, map_characters, track_character}, socket, map_id) do
:ok =
WandererApp.Character.TrackingUtils.track(
map_characters,
map_id,
track_character,
self()
)
case WandererApp.Character.TrackingUtils.track(
map_characters,
map_id,
track_character,
self()
) do
:ok ->
socket
socket
{:error, reason} ->
Logger.error("Failed to track characters: #{inspect(reason)}")
socket
end
end
defp handle_tracking_event(:invalid_token_message, socket, _map_id) do
@@ -557,7 +557,12 @@ defmodule WandererAppWeb.MapCoreEventHandler do
# in case user has not tracked any character track his main character as viewer
track_character && not has_tracked_characters? ->
main_character = Enum.find(current_user.characters, &(&1.id == main_character_id))
events ++ [{:track_characters, [main_character], false}]
if main_character do
events ++ [{:track_characters, [main_character], false}]
else
events
end
track_character && not character_limit_reached? ->
events ++ [{:track_characters, tracked_characters, track_character}]
@@ -568,7 +573,12 @@ defmodule WandererAppWeb.MapCoreEventHandler do
# in case user has view only permissions track his main character as viewer
not track_character ->
main_character = Enum.find(current_user.characters, &(&1.id == main_character_id))
events ++ [{:track_characters, [main_character], track_character}]
if main_character do
events ++ [{:track_characters, [main_character], track_character}]
else
events
end
true ->
events
@@ -73,11 +73,7 @@ defmodule WandererAppWeb.PresenceGracePeriodManager do
# Update cache with final character IDs (includes grace period logic)
WandererApp.Cache.insert("map_#{map_id}:presence_character_ids", final_character_ids)
# Only update presence_data if the character IDs actually changed
if final_character_ids != previous_tracked_character_ids do
WandererApp.Cache.insert("map_#{map_id}:presence_data", presence_data)
end
WandererApp.Cache.insert("map_#{map_id}:presence_data", presence_data)
WandererApp.Cache.insert("map_#{map_id}:presence_updated", true)
{:noreply, state}