mirror of
https://github.com/wanderer-industries/wanderer
synced 2026-03-23 11:58:03 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a06df968a2 | ||
|
|
965df31da0 | ||
|
|
171591f07d | ||
|
|
9a63700dfb | ||
|
|
092fdb01e5 | ||
|
|
0ae9b54e3f | ||
|
|
d4928c0195 | ||
|
|
f00deb1556 | ||
|
|
11b0ba4018 |
18
CHANGELOG.md
18
CHANGELOG.md
@@ -2,6 +2,24 @@
|
||||
|
||||
<!-- changelog -->
|
||||
|
||||
## [v1.97.2](https://github.com/wanderer-industries/wanderer/compare/v1.97.1...v1.97.2) (2026-03-23)
|
||||
|
||||
|
||||
|
||||
|
||||
### Bug Fixes:
|
||||
|
||||
* core: Fixed tracking issues & adding systems to map from routes
|
||||
|
||||
## [v1.97.1](https://github.com/wanderer-industries/wanderer/compare/v1.97.0...v1.97.1) (2026-03-21)
|
||||
|
||||
|
||||
|
||||
|
||||
### Bug Fixes:
|
||||
|
||||
* Add new Pochven medium wormholes (I078, L687, O546). Change lifetime to 12H from 16H for X450, U372, R081, F216.
|
||||
|
||||
## [v1.97.0](https://github.com/wanderer-industries/wanderer/compare/v1.96.6...v1.97.0) (2026-03-14)
|
||||
|
||||
|
||||
|
||||
@@ -49,9 +49,9 @@ export const useContextMenuSystemInfoHandlers = () => {
|
||||
}
|
||||
|
||||
outCommand({
|
||||
type: OutCommand.addSystem,
|
||||
type: OutCommand.manualAddSystem,
|
||||
data: {
|
||||
system_id: solarSystemId,
|
||||
solar_system_id: parseInt(solarSystemId),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -115,9 +115,11 @@ defmodule WandererApp.Character.TrackingUtils do
|
||||
end)}
|
||||
end
|
||||
|
||||
# Filter characters to only include those with actual tracking permission
|
||||
# This prevents showing characters in the tracking dialog that will fail when toggled
|
||||
defp filter_characters_with_tracking_permission(characters, %{id: map_id, owner_id: owner_id}) do
|
||||
@doc """
|
||||
Filters a list of characters to only include those with actual tracking permission on a map.
|
||||
This prevents showing characters in the tracking dialog that will fail when toggled.
|
||||
"""
|
||||
def filter_characters_with_tracking_permission(characters, %{id: map_id, owner_id: owner_id}) do
|
||||
# Load ACLs with members properly (same approach as get_map_characters)
|
||||
acls = load_map_acls_with_members(map_id)
|
||||
|
||||
|
||||
@@ -789,8 +789,7 @@ defmodule WandererApp.Map.Server.SystemsImpl do
|
||||
defp do_add_system(
|
||||
map_id,
|
||||
%{
|
||||
solar_system_id: solar_system_id,
|
||||
coordinates: coordinates
|
||||
solar_system_id: solar_system_id
|
||||
} = system_info,
|
||||
user_id,
|
||||
character_id
|
||||
@@ -803,19 +802,14 @@ defmodule WandererApp.Map.Server.SystemsImpl do
|
||||
rtree_name = "rtree_#{map_id}"
|
||||
|
||||
%{"x" => x, "y" => y} =
|
||||
coordinates
|
||||
system_info
|
||||
|> Map.get(:coordinates)
|
||||
|> case do
|
||||
%{"x" => x, "y" => y} ->
|
||||
%{"x" => x, "y" => y}
|
||||
|
||||
_ ->
|
||||
%{x: x, y: y} =
|
||||
WandererApp.Map.PositionCalculator.get_new_system_position(
|
||||
nil,
|
||||
rtree_name,
|
||||
map_opts
|
||||
)
|
||||
|
||||
{:ok, %{x: x, y: y}} = calc_new_system_position(map_id, nil, rtree_name, map_opts)
|
||||
%{"x" => x, "y" => y}
|
||||
end
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ defmodule WandererAppWeb.CharactersTrackingLive do
|
||||
selected_map_slug: map_slug
|
||||
)
|
||||
|> assign_async(:characters, fn ->
|
||||
WandererApp.Maps.load_characters(selected_map, current_user.id)
|
||||
load_trackable_characters(selected_map, current_user.id)
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -100,37 +100,55 @@ defmodule WandererAppWeb.CharactersTrackingLive do
|
||||
selected_map = socket.assigns.selected_map
|
||||
%{result: characters} = socket.assigns.characters
|
||||
|
||||
case characters |> Enum.find(&(&1.id == character_id)) do
|
||||
%{tracked: current_tracked, eve_id: eve_id} ->
|
||||
# Use TrackingUtils.update_tracking to properly set/unset the tracking_start_time
|
||||
# cache key, which is required for the character to appear in get_tracked_character_ids
|
||||
case TrackingUtils.update_tracking(
|
||||
selected_map.id,
|
||||
eve_id,
|
||||
current_user.id,
|
||||
not current_tracked,
|
||||
self(),
|
||||
false
|
||||
) do
|
||||
{:ok, _tracking_data, _event} ->
|
||||
:ok
|
||||
result =
|
||||
case characters |> Enum.find(&(&1.id == character_id)) do
|
||||
%{tracked: current_tracked, eve_id: eve_id} ->
|
||||
# Use TrackingUtils.update_tracking to properly set/unset the tracking_start_time
|
||||
# cache key, which is required for the character to appear in get_tracked_character_ids
|
||||
case TrackingUtils.update_tracking(
|
||||
selected_map.id,
|
||||
eve_id,
|
||||
current_user.id,
|
||||
not current_tracked,
|
||||
self(),
|
||||
false
|
||||
) do
|
||||
{:ok, _tracking_data, _event} ->
|
||||
:ok
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.error(
|
||||
"Failed to toggle tracking for character #{character_id} on map #{selected_map.id}: #{inspect(reason)}"
|
||||
)
|
||||
end
|
||||
{:error, reason} ->
|
||||
Logger.error(
|
||||
"Failed to toggle tracking for character #{character_id} on map #{selected_map.id}: #{inspect(reason)}"
|
||||
)
|
||||
|
||||
nil ->
|
||||
Logger.warning(
|
||||
"Character #{character_id} not found in available characters for map #{selected_map.id}"
|
||||
)
|
||||
end
|
||||
{:error, reason}
|
||||
end
|
||||
|
||||
nil ->
|
||||
Logger.warning(
|
||||
"Character #{character_id} not found in available characters for map #{selected_map.id}"
|
||||
)
|
||||
|
||||
{:error, "Character not found"}
|
||||
end
|
||||
|
||||
socket =
|
||||
case result do
|
||||
{:error, _reason} ->
|
||||
put_flash(
|
||||
socket,
|
||||
:error,
|
||||
"Failed to toggle tracking. Character may not have sufficient permissions on this map."
|
||||
)
|
||||
|
||||
_ ->
|
||||
socket
|
||||
end
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign_async(:characters, fn ->
|
||||
WandererApp.Maps.load_characters(selected_map, current_user.id)
|
||||
load_trackable_characters(selected_map, current_user.id)
|
||||
end)}
|
||||
end
|
||||
|
||||
@@ -154,10 +172,21 @@ defmodule WandererAppWeb.CharactersTrackingLive do
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign_async(:characters, fn ->
|
||||
WandererApp.Maps.load_characters(selected_map, current_user.id)
|
||||
load_trackable_characters(selected_map, current_user.id)
|
||||
end)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_info(_event, socket), do: {:noreply, socket}
|
||||
|
||||
defp load_trackable_characters(map, user_id) do
|
||||
case WandererApp.Maps.load_characters(map, user_id) do
|
||||
{:ok, %{characters: characters}} ->
|
||||
filtered = TrackingUtils.filter_characters_with_tracking_permission(characters, map)
|
||||
{:ok, %{characters: filtered}}
|
||||
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -128,6 +128,33 @@ defmodule WandererAppWeb.MapSystemsEventHandler do
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_ui_event(
|
||||
"manual_add_system",
|
||||
%{"solar_system_id" => solar_system_id} = _event,
|
||||
%{
|
||||
assigns: %{
|
||||
current_user: %{id: current_user_id},
|
||||
has_tracked_characters?: true,
|
||||
map_id: map_id,
|
||||
main_character_id: main_character_id,
|
||||
user_permissions: %{add_system: true}
|
||||
}
|
||||
} =
|
||||
socket
|
||||
)
|
||||
when not is_nil(main_character_id) do
|
||||
WandererApp.Map.Server.add_system(
|
||||
map_id,
|
||||
%{
|
||||
solar_system_id: solar_system_id
|
||||
},
|
||||
current_user_id,
|
||||
main_character_id
|
||||
)
|
||||
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
def handle_ui_event(
|
||||
"manual_paste_systems_and_connections",
|
||||
%{
|
||||
|
||||
2
mix.exs
2
mix.exs
@@ -3,7 +3,7 @@ defmodule WandererApp.MixProject do
|
||||
|
||||
@source_url "https://github.com/wanderer-industries/wanderer"
|
||||
|
||||
@version "1.97.0"
|
||||
@version "1.97.2"
|
||||
|
||||
def project do
|
||||
[
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
"src": ["c2", "c3", "c4", "c5", "c6"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 375000000,
|
||||
"lifetime": "16",
|
||||
"lifetime": "12",
|
||||
"total_mass": 1000000000,
|
||||
"name": "F216",
|
||||
"respawn": ["wandering", "reverse"]
|
||||
@@ -698,7 +698,7 @@
|
||||
"src": ["pochven"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 375000000,
|
||||
"lifetime": "16",
|
||||
"lifetime": "12",
|
||||
"total_mass": 1000000000,
|
||||
"name": "R081",
|
||||
"respawn": ["wandering"]
|
||||
@@ -830,7 +830,7 @@
|
||||
"src": ["ns"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 375000000,
|
||||
"lifetime": "16",
|
||||
"lifetime": "12",
|
||||
"total_mass": 1000000000,
|
||||
"name": "U372",
|
||||
"respawn": ["wandering", "reverse"]
|
||||
@@ -929,7 +929,7 @@
|
||||
"src": ["pochven"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 62000000,
|
||||
"lifetime": "16",
|
||||
"lifetime": "12",
|
||||
"total_mass": 1000000000,
|
||||
"name": "X450",
|
||||
"respawn": ["wandering"]
|
||||
@@ -1065,5 +1065,38 @@
|
||||
"total_mass": "",
|
||||
"name": "K162",
|
||||
"respawn": []
|
||||
},
|
||||
{
|
||||
"mass_regen": 0,
|
||||
"dest": "pochven",
|
||||
"src": ["pochven"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 62000000,
|
||||
"lifetime": "4.5",
|
||||
"total_mass": 100000000,
|
||||
"name": "I078",
|
||||
"respawn": ["wandering"]
|
||||
},
|
||||
{
|
||||
"mass_regen": 0,
|
||||
"dest": "pochven",
|
||||
"src": ["pochven"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 62000000,
|
||||
"lifetime": "4.5",
|
||||
"total_mass": 100000000,
|
||||
"name": "L687",
|
||||
"respawn": ["wandering"]
|
||||
},
|
||||
{
|
||||
"mass_regen": 0,
|
||||
"dest": "pochven",
|
||||
"src": ["pochven"],
|
||||
"static": false,
|
||||
"max_mass_per_jump": 62000000,
|
||||
"lifetime": "4.5",
|
||||
"total_mass": 100000000,
|
||||
"name": "O546",
|
||||
"respawn": ["wandering"]
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user