Compare commits

...

8 Commits

Author SHA1 Message Date
CI
beb3077159 chore: release version v1.59.8
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-15 10:32:20 +00:00
Dmitry Popov
ecb3ca2b4e fix(Core): Fixed issues with main character & tracking
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-15 12:15:08 +02:00
CI
8412e3867d chore: release version v1.59.7
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-14 18:06:11 +00:00
Dmitry Popov
90c40100d1 fix(Core): Fixed auto-select splashed systems
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-14 19:56:23 +02:00
CI
92cb49da90 chore: release version v1.59.6
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-13 19:31:05 +00:00
Aleksei Chichenkov
abc09c067f fix(Map): Fix icons of main, follow and shattered (#321) 2025-04-13 22:59:56 +04:00
CI
edbd1e4bbc chore: release version v1.59.5
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (push) Has been cancelled
Build / Manual Approval (push) Has been cancelled
Build / 🛠 Build (1.17, 18.x, 27) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/amd64) (push) Has been cancelled
Build / 🛠 Build Docker Images (linux/arm64) (push) Has been cancelled
Build / merge (push) Has been cancelled
Build / 🏷 Create Release (push) Has been cancelled
2025-04-12 09:36:06 +00:00
Dmitry Popov
75edb91825 fix(Signatures): avoid signatures delete on wrong buffer 2025-04-12 11:23:46 +02:00
28 changed files with 235 additions and 160 deletions

View File

@@ -2,6 +2,42 @@
<!-- changelog -->
## [v1.59.8](https://github.com/wanderer-industries/wanderer/compare/v1.59.7...v1.59.8) (2025-04-15)
### Bug Fixes:
* Core: Fixed issues with main character & tracking
## [v1.59.7](https://github.com/wanderer-industries/wanderer/compare/v1.59.6...v1.59.7) (2025-04-14)
### Bug Fixes:
* Core: Fixed auto-select splashed systems
## [v1.59.6](https://github.com/wanderer-industries/wanderer/compare/v1.59.5...v1.59.6) (2025-04-13)
### Bug Fixes:
* Map: Fix icons of main, follow and shattered (#321)
## [v1.59.5](https://github.com/wanderer-industries/wanderer/compare/v1.59.4...v1.59.5) (2025-04-12)
### Bug Fixes:
* Signatures: avoid signatures delete on wrong buffer
## [v1.59.4](https://github.com/wanderer-industries/wanderer/compare/v1.59.3...v1.59.4) (2025-04-10)

View File

@@ -1,38 +1,3 @@
.MainCharacter,
.FollowingCharacter {
&::before, &::after {
content: " ";
display: inline-block;
width: 11px;
height: 11px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
position: absolute;
z-index: 1;
overflow: hidden;
border-radius: 1px;
}
}
.MainCharacter {
&::before {
background-image: url(/images/73_16_247.png);
left: 22px;
top: 0px;
transform: rotateZ(90deg);
}
}
.FollowingCharacter {
&::after {
background-image: url(/images/73_16_241.png);
left: 22px;
top: 22px;
transform: rotateZ(180deg);
}
}
.Docked {
content: " ";
display: inline-block;

View File

@@ -7,6 +7,7 @@ import { emitMapEvent } from '@/hooks/Mapper/events';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import classes from './Characters.module.scss';
import { isDocked } from '@/hooks/Mapper/helpers/isDocked.ts';
import { PrimeIcons } from 'primereact/api';
interface CharactersProps {
data: CharacterTypeRaw[];
@@ -34,18 +35,35 @@ export const Characters = ({ data }: CharactersProps) => {
>
<div
className={clsx(
'overflow-hidden relative',
'flex w-[35px] h-[35px] rounded-[4px] border-[1px] border-solid bg-transparent cursor-pointer',
'transition-colors duration-250',
{
['overflow-hidden relative']: true,
['border-stone-800/90']: !character.online,
['border-lime-600/70']: character.online,
[classes.MainCharacter]: mainCharacterEveId === character.eve_id,
[classes.FollowingCharacter]: followingCharacterEveId === character.eve_id,
},
)}
title={character.name}
>
{mainCharacterEveId === character.eve_id && (
<span
className={clsx(
'absolute top-[2px] left-[22px] w-[9px] h-[9px]',
'text-yellow-500 text-[9px] rounded-[1px] z-10',
'pi',
PrimeIcons.STAR_FILL,
)}
/>
)}
{followingCharacterEveId === character.eve_id && (
<span
className={clsx(
'absolute top-[23px] left-[22px] w-[10px] h-[10px]',
'text-sky-300 text-[10px] rounded-[1px] z-10',
'pi pi-angle-double-right',
)}
/>
)}
{isDocked(character.location) && <div className={classes.Docked} />}
<div
className={clsx(

View File

@@ -355,3 +355,15 @@ $tooltip-bg: #202020;
}
}
}
.ShatteredIcon {
position: relative;
//top: -1px;
left: -1px;
background-size: 100%;
background-repeat: no-repeat;
background-position: center;
background-image: url(/images/chart-network-svgrepo-com.svg)
}

View File

@@ -4,7 +4,7 @@ import { Handle, NodeProps, Position } from 'reactflow';
import clsx from 'clsx';
import classes from './SolarSystemNodeDefault.module.scss';
import { PrimeIcons } from 'primereact/api';
import { useLocalCounter, useSolarSystemNode, useNodeKillsCount } from '../../hooks';
import { useLocalCounter, useNodeKillsCount, useSolarSystemNode } from '../../hooks';
import {
EFFECT_BACKGROUND_STYLES,
MARKER_BOOKMARK_BG_STYLES,
@@ -14,6 +14,8 @@ import { WormholeClassComp } from '@/hooks/Mapper/components/map/components/Worm
import { UnsplashedSignature } from '@/hooks/Mapper/components/map/components/UnsplashedSignature';
import { LocalCounter } from './SolarSystemLocalCounter';
import { KillsCounter } from './SolarSystemKillsCounter';
import { TooltipSize } from '@/hooks/Mapper/components/ui-kit/WdTooltipWrapper/utils.ts';
import { TooltipPosition, WdTooltipWrapper } from '@/hooks/Mapper/components/ui-kit';
export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>) => {
const nodeVars = useSolarSystemNode(props);
@@ -31,8 +33,10 @@ export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>
)}
{nodeVars.isShattered && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered)}>
<span className={clsx('pi pi-chart-pie', classes.icon)} />
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered, '!pr-[2px]')}>
<WdTooltipWrapper content="Shattered" position={TooltipPosition.top}>
<span className={clsx('block w-[10px] h-[10px]', classes.ShatteredIcon)} />
</WdTooltipWrapper>
</div>
)}
@@ -40,7 +44,7 @@ export const SolarSystemNodeDefault = memo((props: NodeProps<MapSolarSystemType>
<KillsCounter
killsCount={localKillsCount}
systemId={nodeVars.solarSystemId}
size="lg"
size={TooltipSize.lg}
killsActivityType={nodeVars.killsActivityType}
className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES[nodeVars.killsActivityType!])}
>

View File

@@ -14,6 +14,8 @@ import { WormholeClassComp } from '@/hooks/Mapper/components/map/components/Worm
import { UnsplashedSignature } from '@/hooks/Mapper/components/map/components/UnsplashedSignature';
import { LocalCounter } from './SolarSystemLocalCounter';
import { KillsCounter } from './SolarSystemKillsCounter';
import { TooltipPosition, WdTooltipWrapper } from '@/hooks/Mapper/components/ui-kit';
import { TooltipSize } from '@/hooks/Mapper/components/ui-kit/WdTooltipWrapper/utils.ts';
export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>) => {
const nodeVars = useSolarSystemNode(props);
@@ -31,8 +33,10 @@ export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>)
)}
{nodeVars.isShattered && (
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered)}>
<span className={clsx('pi pi-chart-pie', classes.icon)} />
<div className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES.shattered, '!pr-[2px]')}>
<WdTooltipWrapper content="Shattered" position={TooltipPosition.top}>
<span className={clsx('block w-[10px] h-[10px]', classes.ShatteredIcon)} />
</WdTooltipWrapper>
</div>
)}
@@ -40,7 +44,7 @@ export const SolarSystemNodeTheme = memo((props: NodeProps<MapSolarSystemType>)
<KillsCounter
killsCount={localKillsCount}
systemId={nodeVars.solarSystemId}
size="lg"
size={TooltipSize.lg}
killsActivityType={nodeVars.killsActivityType}
className={clsx(classes.Bookmark, MARKER_BOOKMARK_BG_STYLES[nodeVars.killsActivityType!])}
>

View File

@@ -1,16 +1,16 @@
import { useCallback, useEffect, useState } from 'react';
import useRefState from 'react-usestateref';
import { useMapEventListener } from '@/hooks/Mapper/events';
import { parseSignatures } from '@/hooks/Mapper/helpers';
import { Commands, ExtendedSystemSignature, SignatureKind } from '@/hooks/Mapper/types';
import { OutCommand } from '@/hooks/Mapper/types/mapHandlers';
import { parseSignatures } from '@/hooks/Mapper/helpers';
import { useCallback, useEffect, useState } from 'react';
import useRefState from 'react-usestateref';
import { getActualSigs } from '../helpers';
import { useSignatureFetching } from './useSignatureFetching';
import { usePendingDeletions } from './usePendingDeletions';
import { UseSystemSignaturesDataProps } from './types';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import { SETTINGS_KEYS } from '@/hooks/Mapper/components/mapInterface/widgets/SystemSignatures/constants.ts';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import { getActualSigs } from '../helpers';
import { UseSystemSignaturesDataProps } from './types';
import { usePendingDeletions } from './usePendingDeletions';
import { useSignatureFetching } from './useSignatureFetching';
export const useSystemSignaturesData = ({
systemId,
@@ -47,6 +47,10 @@ export const useSystemSignaturesData = ({
Object.keys(settings).filter(skey => skey in SignatureKind),
) as ExtendedSystemSignature[];
if (incomingSignatures.length === 0) {
return;
}
const currentNonPending = lazyDeleteValue
? signaturesRef.current.filter(sig => !sig.pendingDeletion)
: signaturesRef.current.filter(sig => !sig.pendingDeletion || !sig.pendingAddition);

View File

@@ -9,23 +9,25 @@ export const useMapInit = () => {
const { addSystemStatic } = useLoadSystemStatic({ systems: [] });
return useCallback(
({
systems,
system_signatures,
connections,
effects,
wormholes,
system_static_infos,
characters,
user_characters,
present_characters,
hubs,
user_permissions,
options,
is_subscription_active,
main_character_eve_id,
following_character_eve_id,
}: CommandInit) => {
(props: CommandInit) => {
const {
systems,
system_signatures,
connections,
effects,
wormholes,
system_static_infos,
characters,
user_characters,
present_characters,
hubs,
user_permissions,
options,
is_subscription_active,
main_character_eve_id,
following_character_eve_id,
} = props;
const updateData: Partial<MapRootData> = {};
if (wormholes) {
@@ -87,7 +89,7 @@ export const useMapInit = () => {
updateData.mainCharacterEveId = main_character_eve_id;
}
if (following_character_eve_id) {
if ('following_character_eve_id' in props) {
updateData.followingCharacterEveId = following_character_eve_id;
}

View File

@@ -0,0 +1,7 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#ffffff">
<g id="SVGRepo_bgCarrier" stroke-width="0"/>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -17,6 +17,7 @@ defmodule WandererApp.Api.MapCharacterSettings do
define(:read_by_map, action: :read_by_map)
define(:by_map_filtered, action: :by_map_filtered)
define(:tracked_by_map_filtered, action: :tracked_by_map_filtered)
define(:tracked_by_character, action: :tracked_by_character)
define(:tracked_by_map_all, action: :tracked_by_map_all)
define(:track, action: :track)
@@ -61,6 +62,11 @@ defmodule WandererApp.Api.MapCharacterSettings do
filter(expr(map_id == ^arg(:map_id) and tracked == true))
end
read :tracked_by_character do
argument(:character_id, :uuid, allow_nil?: false)
filter(expr(character_id == ^arg(:character_id) and tracked == true))
end
update :track do
accept [:map_id, :character_id]
argument :map_id, :string, allow_nil?: false

View File

@@ -548,21 +548,12 @@ defmodule WandererApp.Character.Tracker do
solar_system_id,
structure_id,
station_id
)
do
IO.inspect("is_location_updated")
IO.inspect(solar_system_id)
IO.inspect(new_solar_system_id)
IO.inspect(structure_id)
IO.inspect(new_structure_id)
IO.inspect(station_id)
IO.inspect(new_station_id)
solar_system_id != new_solar_system_id ||
),
do:
solar_system_id != new_solar_system_id ||
solar_system_id != new_solar_system_id ||
structure_id != new_structure_id ||
station_id != new_station_id
end
defp maybe_update_corporation(
state,

View File

@@ -33,7 +33,7 @@ defmodule WandererApp.Esi.ApiClient do
@cache_opts [cache: true]
@retry_opts [max_retries: 1, retry_log_level: :warning]
@timeout_opts [receive_timeout: :timer.seconds(30)]
@timeout_opts [pool_timeout: 15_000, receive_timeout: :timer.seconds(30)]
@api_retry_count 1
@logger Application.compile_env(:wanderer_app, :logger)
@@ -490,7 +490,7 @@ defmodule WandererApp.Esi.ApiClient do
try do
case Req.get(
"#{@base_url}#{path}",
api_opts |> with_user_agent_opts() |> with_cache_opts() |> Keyword.merge(@retry_opts)
api_opts |> with_user_agent_opts() |> with_cache_opts() |> Keyword.merge(@retry_opts) |> Keyword.merge(@timeout_opts)
) do
{:ok, %{status: 200, body: body}} ->
{:ok, body}

View File

@@ -70,7 +70,7 @@ defmodule WandererApp.Map.Audit do
def track_acl_event(
event_type,
%{user_id: user_id, acl_id: acl_id} = metadata
),
) when not is_nil(user_id) and not is_nil(acl_id),
do:
WandererApp.Api.UserActivity.new(%{
user_id: user_id,
@@ -85,7 +85,7 @@ defmodule WandererApp.Map.Audit do
def track_map_event(
event_type,
%{character_id: character_id, user_id: user_id, map_id: map_id} = metadata
),
) when not is_nil(character_id) and not is_nil(user_id) and not is_nil(map_id),
do:
WandererApp.Api.UserActivity.new(%{
character_id: character_id,

View File

@@ -32,6 +32,7 @@ defmodule WandererApp.Map.Server do
map_id
nil ->
WandererApp.Cache.insert("map_#{map_id}:started", false)
throw("Map server not started")
end
end

View File

@@ -86,6 +86,25 @@ defmodule WandererApp.Map.Server.AclsImpl do
end
end
def handle_acl_deleted(map_id, acl_id) do
{:ok, map} =
WandererApp.MapRepo.get(map_id,
acls: [
:owner_id,
members: [:role, :eve_character_id, :eve_corporation_id, :eve_alliance_id]
]
)
WandererApp.Map.update_map(map_id, %{acls: map.acls})
character_ids =
map_id
|> WandererApp.Map.get_map!()
|> Map.get(:characters, [])
WandererApp.Cache.insert("map_#{map_id}:invalidate_character_ids", character_ids)
end
def track_acls([]), do: :ok
def track_acls([acl_id | rest]) do

View File

@@ -64,6 +64,16 @@ defmodule WandererApp.Map.Server.CharactersImpl do
map_tracked_character_ids
|> Enum.filter(fn character -> character in tracked_characters end)
{:ok, old_map_tracked_characters} = WandererApp.Cache.lookup("maps:#{map_id}:tracked_characters", [])
characters_to_remove = old_map_tracked_characters -- map_active_tracked_characters
{:ok, invalidate_character_ids} =
WandererApp.Cache.lookup(
"map_#{map_id}:invalidate_character_ids",
[]
)
WandererApp.Cache.insert("map_#{map_id}:invalidate_character_ids", (invalidate_character_ids ++ characters_to_remove) |> Enum.uniq())
WandererApp.Cache.insert("maps:#{map_id}:tracked_characters", map_active_tracked_characters)
:ok
@@ -98,6 +108,9 @@ defmodule WandererApp.Map.Server.CharactersImpl do
character_id
|> WandererApp.Character.get_character()
|> case do
{:ok, %{user_id: nil}} ->
{:remove_character, character_id}
{:ok, character} ->
[character_permissions] =
WandererApp.Permissions.check_characters_access([character], acls)

View File

@@ -377,12 +377,11 @@ defmodule WandererApp.Map.Server.ConnectionsImpl do
Impl.broadcast!(map_id, :add_connection, connection)
{:ok, character} = WandererApp.Character.get_character(character_id)
{:ok, character_with_user} = character |> Ash.load(:user)
{:ok, _} =
WandererApp.User.ActivityTracker.track_map_event(:map_connection_added, %{
character_id: character_id,
user_id: character_with_user.user_id,
user_id: character.user_id,
map_id: map_id,
solar_system_source_id: old_location.solar_system_id,
solar_system_target_id: location.solar_system_id

View File

@@ -261,6 +261,12 @@ defmodule WandererApp.Map.Server.Impl do
state
end
def handle_event({:acl_deleted, %{acl_id: acl_id}}, %{map_id: map_id} = state) do
AclsImpl.handle_acl_updated(map_id, acl_id)
state
end
def handle_event(:cleanup_connections, state) do
Process.send_after(self(), :cleanup_connections, @connections_cleanup_timeout)
@@ -299,7 +305,7 @@ defmodule WandererApp.Map.Server.Impl do
%{state | map_opts: map_options(options)}
end
def handle_event({ref, _result}, %{map_id: _map_id} = state) do
def handle_event({ref, _result}, %{map_id: _map_id} = state) when is_reference(ref) do
Process.demonitor(ref, [:flush])
state

View File

@@ -175,10 +175,6 @@ defmodule WandererApp.Zkb.KillsPreloader do
reduce_task_result(pass_type, task_result, acc_state, acc_map)
end)
if map_size(kills_map) > 0 do
broadcast_all_kills(kills_map, pass_type)
end
final_state
end
@@ -276,22 +272,6 @@ defmodule WandererApp.Zkb.KillsPreloader do
defp log_failed_task(:expanded, reason),
do: Logger.error("[KillsPreloader] Expanded fetch task failed => #{inspect(reason)}")
defp broadcast_all_kills(kills_map, pass_type) do
Logger.info(
"[KillsPreloader] Broadcasting kills => #{map_size(kills_map)} systems (#{pass_type})"
)
Phoenix.PubSub.broadcast!(
WandererApp.PubSub,
"zkb_preload",
%{
event: :detailed_kills_updated,
payload: kills_map,
fetch_type: pass_type
}
)
end
defp merge_calls_count(%{calls_count: c1} = st1, %{calls_count: c2}),
do: %{st1 | calls_count: c1 + c2}

View File

@@ -64,9 +64,22 @@ defmodule WandererAppWeb.CharactersLive do
@impl true
def handle_event("delete", %{"character_id" => character_id}, socket) do
socket.assigns.characters
|> Enum.find(&(&1.id == character_id))
|> WandererApp.Api.Character.mark_as_deleted!()
WandererApp.Character.TrackerManager.stop_tracking(character_id)
{:ok, map_user_settings} = WandererApp.Api.MapCharacterSettings.tracked_by_character(%{character_id: character_id})
map_user_settings
|> Enum.each(fn settings ->
settings
|> WandererApp.Api.MapCharacterSettings.untrack()
end)
{:ok, updated_character} =
socket.assigns.characters
|> Enum.find(&(&1.id == character_id))
|> WandererApp.Api.Character.mark_as_deleted()
WandererApp.Character.update_character(character_id, updated_character)
{:ok, characters} =
WandererApp.Api.Character.active_by_user(%{user_id: socket.assigns.user_id})

View File

@@ -79,7 +79,7 @@
</div>
</.link>
<div
:for={character <- @characters}
:for={character <- @characters |> Enum.sort_by(& &1.name, :asc)}
class="card rounded-none bg-gradient-to-l from-stone-950 to-stone-900 hover:text-white transform transition duration-500"
>
<figure class="avatar">

View File

@@ -74,12 +74,12 @@ defmodule WandererAppWeb.MapActivityEventHandler do
}
end)
{:activity_data, summarized_result}
{:character_activity_data, summarized_result}
rescue
e ->
Logger.error("Error processing character activity: #{inspect(e)}")
Logger.error("#{Exception.format_stacktrace()}")
{:activity_data, []}
{:character_activity_data, []}
end
end)

View File

@@ -240,12 +240,19 @@ defmodule WandererAppWeb.MapCharactersEventHandler do
{:ok, tracking_data} =
WandererApp.Character.TrackingUtils.build_tracking_data(map_id, current_user_id)
{:ok, main_character_id} =
{main_character_id, main_character_eve_id} =
WandererApp.Character.TrackingUtils.get_main_character(
map_user_settings,
current_user_characters,
current_user_characters
)
|> case do
{:ok, main_character} when not is_nil(main_character) ->
{main_character.id, main_character.eve_id}
_ ->
{nil, nil}
end
Process.send_after(self(), %{event: :refresh_user_characters}, 50)
@@ -254,7 +261,7 @@ defmodule WandererAppWeb.MapCharactersEventHandler do
|> assign(
map_user_settings: map_user_settings,
main_character_id: main_character_id,
main_character_eve_id: character_eve_id
main_character_eve_id: main_character_eve_id
)}
end

View File

@@ -335,12 +335,20 @@ defmodule WandererAppWeb.MapCoreEventHandler do
only_tracked_characters
)
{:ok, main_character} =
{main_character_id, main_character_eve_id} =
WandererApp.Character.TrackingUtils.get_main_character(
map_user_settings,
current_user_characters,
available_map_characters
)
|> case do
{:ok, main_character} when not is_nil(main_character) ->
{main_character.id, main_character.eve_id}
_ ->
{nil, nil}
end
following_character_eve_id = case map_user_settings do
nil -> nil
@@ -351,8 +359,8 @@ defmodule WandererAppWeb.MapCoreEventHandler do
%{
user_permissions: user_permissions,
map_user_settings: map_user_settings,
main_character_id: main_character.id,
main_character_eve_id: main_character.eve_id,
main_character_id: main_character_id,
main_character_eve_id: main_character_eve_id,
following_character_eve_id: following_character_eve_id,
tracked_characters: tracked_data.tracked_characters,
all_character_tracked?: tracked_data.all_tracked?,

View File

@@ -45,12 +45,20 @@ defmodule WandererAppWeb.MapKillsEventHandler do
)
end
def handle_server_event(%{event: :detailed_kills_updated, payload: payload}, socket) do
socket
|> MapEventHandler.push_map_event(
"detailed_kills_updated",
payload
)
def handle_server_event(%{event: :detailed_kills_updated, payload: payload}, %{
assigns: %{
map_id: map_id
}
} = socket) do
case WandererApp.Map.is_subscription_active?(map_id) do
{:ok, true} ->
socket
|> MapEventHandler.push_map_event(
"detailed_kills_updated",
payload
)
_ -> socket
end
end
def handle_server_event(

View File

@@ -35,14 +35,15 @@ defmodule WandererAppWeb.MapSystemsEventHandler do
%{
assigns: %{
current_user: current_user,
tracked_characters: tracked_characters,
map_id: map_id,
map_user_settings: map_user_settings
}
} = socket
) do
character =
current_user.characters
|> Enum.find(& &1.id)
tracked_characters
|> Enum.find(fn tracked_character -> tracked_character.id == character_id end)
is_user_character =
not is_nil(character)

View File

@@ -173,28 +173,10 @@ defmodule WandererAppWeb.MapEventHandler do
when event_name in @map_signatures_events,
do: MapSignaturesEventHandler.handle_server_event(event, socket)
def handle_event(
%{
assigns: %{
is_subscription_active?: true
}
} = socket,
%{event: event_name} = event
)
def handle_event(socket, %{event: event_name} = event)
when event_name in @map_kills_events,
do: MapKillsEventHandler.handle_server_event(event, socket)
def handle_event(
%{
assigns: %{
is_subscription_active?: false
}
} = socket,
%{event: event_name} = _event
)
when event_name in @map_kills_events,
do: socket
def handle_event(socket, {ref, result}) when is_reference(ref) do
Process.demonitor(ref, [:flush])
@@ -203,12 +185,6 @@ defmodule WandererAppWeb.MapEventHandler do
Process.send_after(self(), map_error, 100)
socket
{:activity_data, activity_data} ->
MapActivityEventHandler.handle_server_event(
%{event: :character_activity_data, payload: activity_data},
socket
)
{event, payload} ->
Process.send_after(
self(),
@@ -227,11 +203,6 @@ defmodule WandererAppWeb.MapEventHandler do
def handle_event(socket, {:DOWN, ref, :process, _pid, reason}) when is_reference(ref) do
# Task failed, log the error and update the client
Logger.error("Task failed: #{inspect(reason)}")
MapActivityEventHandler.handle_server_event(
%{event: :character_activity_data, payload: []},
socket
)
end
def handle_event(socket, event),

View File

@@ -3,7 +3,7 @@ defmodule WandererApp.MixProject do
@source_url "https://github.com/wanderer-industries/wanderer"
@version "1.59.4"
@version "1.59.8"
def project do
[