Compare commits

..

18 Commits

Author SHA1 Message Date
achichenkov
b549189644 fix(Map): fixed U210, K346 for C4 shattered systems 2024-12-16 17:13:33 +03:00
achichenkov
35279d17b4 fix(Map): fixed U210, K346 for shattered systems. Fixed mass of mediums chains. Fixed size of some capital chains from 3M to 3.3M. Based on https://whtype.info/ data. 2024-12-16 16:48:53 +03:00
achichenkov
bb403aa0c5 fix(Map): removed unnecessary log 2024-12-16 12:45:51 +03:00
achichenkov
04327c288b fix(Map): Uncomment what should not be commented 2024-12-16 12:43:26 +03:00
achichenkov
94d60e40d0 feat(Map): Fixed incorrect wrapping labels of checkboxes in System Signatures, Local and Routes. Also changed dotlan links for k-spacem now it leads to region map before, for wh all stay as it was. Added ability to chane to softer background and remove dots on background of map. Also some small design issues. #2 2024-12-16 12:42:24 +03:00
achichenkov
8505fcb6b7 feat(Map): Fixed incorrect wrapping labels of checkboxes in System Signatures, Local and Routes. Also changed dotlan links for k-spacem now it leads to region map before, for wh all stay as it was. Added ability to chane to softer background and remove dots on background of map. Also some small design issues. 2024-12-16 12:42:03 +03:00
CI
9aec57166d chore: release version v1.29.5
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (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 / 🏷 Create Release (push) Has been cancelled
2024-12-14 22:32:16 +00:00
Dmitry Popov
a3739f2950 Merge branch 'main' of github.com:wanderer-industries/wanderer 2024-12-14 23:31:47 +01:00
Dmitry Popov
3d3b152758 fix(Core): Fix character trackers cleanup 2024-12-14 23:31:42 +01:00
CI
0e03730543 chore: release version v1.29.4
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (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 / 🏷 Create Release (push) Has been cancelled
2024-12-10 11:01:09 +00:00
Dmitry Popov
97e07a6511 Merge branch 'main' of github.com:wanderer-industries/wanderer 2024-12-10 12:00:38 +01:00
Dmitry Popov
a77a51ba15 fix(Core): Small fixes 2024-12-10 12:00:34 +01:00
CI
42e706e1c2 chore: release version v1.29.3
Some checks failed
Build / 🚀 Deploy to test env (fly.io) (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 / 🏷 Create Release (push) Has been cancelled
2024-12-07 18:02:05 +00:00
Dmitry Popov
025dd06053 Merge branch 'main' of github.com:wanderer-industries/wanderer 2024-12-07 19:01:36 +01:00
Dmitry Popov
bcb421d879 fix(Core): Increased eve DB data download timeout 2024-12-07 19:01:32 +01:00
CI
66056ab54b chore: release version v1.29.2
Some checks are pending
Build / 🚀 Deploy to test env (fly.io) (push) Waiting to run
Build / 🛠 Build (1.17, 18.x, 27) (push) Waiting to run
Build / 🛠 Build Docker Images (linux/amd64) (push) Blocked by required conditions
Build / 🏷 Create Release (push) Blocked by required conditions
2024-12-07 08:32:58 +00:00
Dmitry Popov
bb92f76ceb Merge branch 'main' of github.com:wanderer-industries/wanderer 2024-12-07 09:32:28 +01:00
Dmitry Popov
84076b340b fix(Core): Fix unpkg CDN issues, fix Abyssals sites adding as systems on map 2024-12-07 09:32:24 +01:00
33 changed files with 266 additions and 97 deletions

View File

@@ -2,6 +2,42 @@
<!-- changelog -->
## [v1.29.5](https://github.com/wanderer-industries/wanderer/compare/v1.29.4...v1.29.5) (2024-12-14)
### Bug Fixes:
* Core: Fix character trackers cleanup
## [v1.29.4](https://github.com/wanderer-industries/wanderer/compare/v1.29.3...v1.29.4) (2024-12-10)
### Bug Fixes:
* Core: Small fixes
## [v1.29.3](https://github.com/wanderer-industries/wanderer/compare/v1.29.2...v1.29.3) (2024-12-07)
### Bug Fixes:
* Core: Increased eve DB data download timeout
## [v1.29.2](https://github.com/wanderer-industries/wanderer/compare/v1.29.1...v1.29.2) (2024-12-07)
### Bug Fixes:
* Core: Fix unpkg CDN issues, fix Abyssals sites adding as systems on map
## [v1.29.1](https://github.com/wanderer-industries/wanderer/compare/v1.29.0...v1.29.1) (2024-12-05)

View File

@@ -8,6 +8,7 @@ import { useWaypointMenu } from '@/hooks/Mapper/components/contexts/hooks';
import { FastSystemActions } from '@/hooks/Mapper/components/contexts/components';
import { useMapCheckPermissions } from '@/hooks/Mapper/mapRootProvider/hooks/api';
import { UserPermission } from '@/hooks/Mapper/types/permissions.ts';
import { isWormholeSpace } from '@/hooks/Mapper/components/map/helpers/isWormholeSpace.ts';
export const useContextMenuSystemItems = ({
onDeleteSystem,
@@ -44,6 +45,8 @@ export const useContextMenuSystemItems = ({
<FastSystemActions
systemId={systemId}
systemName={system.system_static_info.solar_system_name}
regionName={system.system_static_info.region_name}
isWH={isWormholeSpace(system.system_static_info.system_class)}
showEdit
onOpenSettings={onOpenSettings}
/>

View File

@@ -10,6 +10,7 @@ import { WaypointSetContextHandler } from '@/hooks/Mapper/components/contexts/ty
import { FastSystemActions } from '@/hooks/Mapper/components/contexts/components';
import { useJumpPlannerMenu } from '@/hooks/Mapper/components/contexts/hooks';
import { Route } from '@/hooks/Mapper/types/routes.ts';
import { isWormholeSpace } from '@/hooks/Mapper/components/map/helpers/isWormholeSpace.ts';
export interface ContextMenuSystemInfoProps {
systemStatics: Map<number, SolarSystemStaticInfoRaw>;
@@ -48,7 +49,6 @@ export const ContextMenuSystemInfo: React.FC<ContextMenuSystemInfoProps> = ({
if (!systemId || !system) {
return [];
}
return [
{
className: classes.FastActions,
@@ -57,6 +57,8 @@ export const ContextMenuSystemInfo: React.FC<ContextMenuSystemInfoProps> = ({
<FastSystemActions
systemId={systemId}
systemName={system.solar_system_name}
regionName={system.region_name}
isWH={isWormholeSpace(system.system_class)}
onOpenSettings={onOpenSettings}
/>
);

View File

@@ -9,13 +9,22 @@ import { PrimeIcons } from 'primereact/api';
export interface FastSystemActionsProps {
systemId: string;
systemName: string;
regionName: string;
isWH: boolean;
showEdit?: boolean;
onOpenSettings(): void;
}
export const FastSystemActions = ({ systemId, systemName, onOpenSettings, showEdit }: FastSystemActionsProps) => {
const ref = useRef({ systemId, systemName });
ref.current = { systemId, systemName };
export const FastSystemActions = ({
systemId,
systemName,
regionName,
isWH,
onOpenSettings,
showEdit,
}: FastSystemActionsProps) => {
const ref = useRef({ systemId, systemName, regionName, isWH });
ref.current = { systemId, systemName, regionName, isWH };
const handleOpenZKB = useCallback(
() => window.open(`https://zkillboard.com/system/${ref.current.systemId}`, '_blank'),
@@ -27,10 +36,17 @@ export const FastSystemActions = ({ systemId, systemName, onOpenSettings, showEd
[],
);
const handleOpenDotlan = useCallback(
() => window.open(`https://evemaps.dotlan.net/system/${ref.current.systemName}`, '_blank'),
[],
);
const handleOpenDotlan = useCallback(() => {
if (ref.current.isWH) {
window.open(`https://evemaps.dotlan.net/system/${ref.current.systemName}`, '_blank');
return;
}
return window.open(
`https://evemaps.dotlan.net/map/${ref.current.regionName.replace(/ /gim, '_')}/${ref.current.systemName}#jumps`,
'_blank',
);
}, []);
const copySystemNameToClipboard = useCallback(async () => {
try {
@@ -43,9 +59,9 @@ export const FastSystemActions = ({ systemId, systemName, onOpenSettings, showEd
return (
<LayoutEventBlocker className={clsx('flex px-2 gap-2 justify-between items-center h-full')}>
<div className={clsx('flex gap-2 items-center h-full', classes.Links)}>
<WdImgButton source={ZKB_ICON} onClick={handleOpenZKB} />
<WdImgButton source={ANOIK_ICON} onClick={handleOpenAnoikis} />
<WdImgButton source={DOTLAN_ICON} onClick={handleOpenDotlan} />
<WdImgButton tooltip={{ content: 'Open zkillboard' }} source={ZKB_ICON} onClick={handleOpenZKB} />
<WdImgButton tooltip={{ content: 'Open Anoikis' }} source={ANOIK_ICON} onClick={handleOpenAnoikis} />
<WdImgButton tooltip={{ content: 'Open Dotlan' }} source={DOTLAN_ICON} onClick={handleOpenDotlan} />
</div>
<div className="flex gap-2 items-center pl-1">

View File

@@ -14,6 +14,9 @@ export const useSystemInfo = ({ systemId }: UseSystemInfoProps) => {
const { systems: systemStatics } = useLoadSystemStatic({ systems: [systemId] });
// eslint-disable-next-line no-console
console.log('JOipP', `systemStatics`, systemStatics);
return useMemo(() => {
const staticInfo = systemStatics.get(parseInt(systemId));
const dynamicInfo = getSystemById(systems, systemId);

View File

@@ -2,3 +2,7 @@
width: 100%;
height: 100%;
}
.BackgroundAlternateColor {
}

View File

@@ -34,6 +34,7 @@ import { SESSION_KEY } from '@/hooks/Mapper/constants.ts';
import { SolarSystemConnection, SolarSystemRawType } from '@/hooks/Mapper/types';
import { ctxManager } from '@/hooks/Mapper/utils/contextManager.ts';
import { NodeSelectionMouseHandler } from '@/hooks/Mapper/components/contexts/types.ts';
import clsx from 'clsx';
const DEFAULT_VIEW_PORT = { zoom: 1, x: 0, y: 0 };
@@ -97,6 +98,8 @@ interface MapCompProps {
onSystemContextMenu: (event: MouseEvent<Element>, systemId: string) => void;
showKSpaceBG?: boolean;
isThickConnections?: boolean;
isShowBackgroundPattern?: boolean;
isSoftBackground?: boolean;
}
const MapComp = ({
@@ -111,6 +114,8 @@ const MapComp = ({
isShowMinimap,
showKSpaceBG,
isThickConnections,
isShowBackgroundPattern,
isSoftBackground,
}: MapCompProps) => {
const { getNode } = useReactFlow();
const [nodes, , onNodesChange] = useNodesState<Node<SolarSystemRawType>>(initialNodes);
@@ -216,7 +221,7 @@ const MapComp = ({
return (
<>
<div className={classes.MapRoot}>
<div className={clsx(classes.MapRoot, { ['bg-neutral-900']: isSoftBackground })}>
<ReactFlow
nodes={nodes}
edges={edges}
@@ -263,7 +268,7 @@ const MapComp = ({
selectionMode={SelectionMode.Partial}
>
{isShowMinimap && <MiniMap pannable zoomable ariaLabel="Mini map" className={minimapClasses} />}
<Background />
{isShowBackgroundPattern && <Background />}
</ReactFlow>
{/* <button className="z-auto btn btn-primary absolute top-20 right-20" onClick={handleGetPassages}>
Test // DON NOT REMOVE

View File

@@ -1,4 +1,4 @@
import { useCallback, useMemo } from 'react';
import { useCallback, useMemo, useRef } from 'react';
import { Widget } from '@/hooks/Mapper/components/mapInterface/components';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import { VirtualScroller, VirtualScrollerTemplateOptions } from 'primereact/virtualscroller';
@@ -10,6 +10,8 @@ import { sortCharacters } from '@/hooks/Mapper/components/mapInterface/helpers/s
import useLocalStorageState from 'use-local-storage-state';
import { useMapCheckPermissions, useMapGetOption } from '@/hooks/Mapper/mapRootProvider/hooks/api';
import { UserPermission } from '@/hooks/Mapper/types/permissions.ts';
import useMaxWidth from '@/hooks/Mapper/hooks/useMaxWidth.ts';
import { WdTooltipWrapper } from '@/hooks/Mapper/components/ui-kit/WdTooltipWrapper';
type CharItemProps = {
compact: boolean;
@@ -92,21 +94,26 @@ export const LocalCharacters = () => {
const isNotSelectedSystem = selectedSystems.length !== 1;
const showList = sorted.length > 0 && selectedSystems.length === 1;
const ref = useRef<HTMLDivElement>(null);
const compact = useMaxWidth(ref, 145);
return (
<Widget
label={
<div className="flex justify-between items-center text-xs w-full">
<div className="flex justify-between items-center text-xs w-full" ref={ref}>
<span className="select-none">Local{showList ? ` [${sorted.length}]` : ''}</span>
<LayoutEventBlocker className="flex items-center gap-2">
{showOffline && (
<WdCheckbox
size="xs"
labelSide="left"
label={'Show offline'}
value={settings.showOffline}
classNameLabel="text-stone-400 hover:text-stone-200 transition duration-300"
onChange={() => setSettings(() => ({ ...settings, showOffline: !settings.showOffline }))}
/>
<WdTooltipWrapper content="Show offline characters in system">
<WdCheckbox
size="xs"
labelSide="left"
label={compact ? '' : 'Show offline'}
value={settings.showOffline}
classNameLabel="text-stone-400 hover:text-stone-200 transition duration-300"
onChange={() => setSettings(() => ({ ...settings, showOffline: !settings.showOffline }))}
/>
</WdTooltipWrapper>
)}
<span

View File

@@ -19,6 +19,8 @@ import { PrimeIcons } from 'primereact/api';
import { RoutesSettingsDialog } from './RoutesSettingsDialog';
import { RoutesProvider, useRouteProvider } from './RoutesProvider.tsx';
import { ContextMenuSystemInfo, useContextMenuSystemInfoHandlers } from '@/hooks/Mapper/components/contexts';
import useMaxWidth from '@/hooks/Mapper/hooks/useMaxWidth.ts';
import { WdTooltipWrapper } from '@/hooks/Mapper/components/ui-kit/WdTooltipWrapper';
const sortByDist = (a: Route, b: Route) => {
const distA = a.has_connection ? a.systems?.length || 0 : Infinity;
@@ -170,20 +172,25 @@ export const RoutesWidgetComp = () => {
});
}, [data, update]);
const ref = useRef<HTMLDivElement>(null);
const compact = useMaxWidth(ref, 155);
return (
<Widget
label={
<div className="flex justify-between items-center text-xs w-full">
<div className="flex justify-between items-center text-xs w-full" ref={ref}>
<span className="select-none">Routes</span>
<LayoutEventBlocker className="flex items-center gap-2">
<WdCheckbox
size="xs"
labelSide="left"
label={'Show shortest'}
value={!isSecure}
onChange={handleSecureChange}
classNameLabel={clsx('text-red-400')}
/>
<WdTooltipWrapper content="Show shortest route">
<WdCheckbox
size="xs"
labelSide="left"
label={compact ? '' : 'Show shortest'}
value={!isSecure}
onChange={handleSecureChange}
classNameLabel={clsx('text-red-400')}
/>
</WdTooltipWrapper>
<WdImgButton className={PrimeIcons.SLIDERS_H} onClick={() => setRouteSettingsVisible(true)} />
</LayoutEventBlocker>
</div>

View File

@@ -20,12 +20,14 @@ import {
} from './SystemSignatureSettingsDialog';
import { SignatureGroup } from '@/hooks/Mapper/types';
import React, { useCallback, useEffect, useState, useMemo } from 'react';
import React, { useCallback, useEffect, useState, useMemo, useRef } from 'react';
import { PrimeIcons } from 'primereact/api';
import { useMapRootState } from '@/hooks/Mapper/mapRootProvider';
import { CheckboxChangeEvent } from 'primereact/checkbox';
import useMaxWidth from '@/hooks/Mapper/hooks/useMaxWidth.ts';
import { WdTooltipWrapper } from '@/hooks/Mapper/components/ui-kit/WdTooltipWrapper';
const SIGNATURE_SETTINGS_KEY = 'wanderer_system_signature_settings_v5_2';
export const SHOW_DESCRIPTION_COLUMN_SETTING = 'show_description_column_setting';
@@ -96,21 +98,26 @@ export const SystemSignatures = () => {
}
}, []);
const ref = useRef<HTMLDivElement>(null);
const compact = useMaxWidth(ref, 260);
return (
<Widget
label={
<div className="flex justify-between items-center text-xs w-full h-full">
<div className="flex gap-1">System Signatures</div>
<div className="flex justify-between items-center text-xs w-full h-full" ref={ref}>
<div className="flex gap-1 whitespace-nowrap text-ellipsis overflow-hidden">System Signatures</div>
<LayoutEventBlocker className="flex gap-2.5">
<WdCheckbox
size="xs"
labelSide="left"
label={'Lazy delete'}
value={lazyDeleteValue}
classNameLabel="text-stone-400 hover:text-stone-200 transition duration-300"
onChange={(event: CheckboxChangeEvent) => handleLazyDeleteChange(!!event.checked)}
/>
<WdTooltipWrapper content="Enable Lazy delete">
<WdCheckbox
size="xs"
labelSide="left"
label={compact ? '' : 'Lazy delete'}
value={lazyDeleteValue}
classNameLabel="text-stone-400 hover:text-stone-200 transition duration-300 whitespace-nowrap text-ellipsis overflow-hidden"
onChange={(event: CheckboxChangeEvent) => handleLazyDeleteChange(!!event.checked)}
/>
</WdTooltipWrapper>
<WdImgButton
className={PrimeIcons.QUESTION_CIRCLE}

View File

@@ -63,6 +63,8 @@ const CONNECTIONS_CHECKBOXES_PROPS: CheckboxesList = [
const UI_CHECKBOXES_PROPS: CheckboxesList = [
{ prop: InterfaceStoredSettingsProps.isShowMenu, label: 'Enable compact map menu bar' },
{ prop: InterfaceStoredSettingsProps.isThickConnections, label: 'Thicker connections' },
{ prop: InterfaceStoredSettingsProps.isShowBackgroundPattern, label: 'Show background pattern' },
{ prop: InterfaceStoredSettingsProps.isSoftBackground, label: 'Enable soft background' },
];
export const MapSettings = ({ show, onHide }: MapSettingsProps) => {

View File

@@ -17,7 +17,25 @@ const getPossibleWormholes = (systemStatic: SolarSystemStaticInfoRaw, wormholes:
// @ts-ignore
const spawnClassGroup = SOLAR_SYSTEM_CLASSES_TO_CLASS_GROUPS[whType];
const possibleWHTypes = wormholes.filter(x => x.src.includes(spawnClassGroup));
const possibleWHTypes = wormholes.filter(x => {
return x.src.some(x => {
const [group, type] = x.split('-');
// eslint-disable-next-line no-console
console.log('JOipP', `group, type`, group, type);
if (type === 'shattered') {
return systemStatic.is_shattered && group === spawnClassGroup;
}
return group === spawnClassGroup;
});
});
// eslint-disable-next-line no-console
console.log('JOipP', `possibleWHTypes`, possibleWHTypes);
// debugger;
return {
statics: possibleWHTypes

View File

@@ -34,6 +34,8 @@ export const MapWrapper = () => {
isShowMinimap = STORED_INTERFACE_DEFAULT_VALUES.isShowMinimap,
isShowKSpace,
isThickConnections,
isShowBackgroundPattern,
isSoftBackground,
},
} = useMapRootState();
const { deleteSystems } = useDeleteSystems();
@@ -135,6 +137,8 @@ export const MapWrapper = () => {
showKSpaceBG={isShowKSpace}
onManualDelete={handleManualDelete}
isThickConnections={isThickConnections}
isShowBackgroundPattern={isShowBackgroundPattern}
isSoftBackground={isSoftBackground}
/>
{openSettings != null && (

View File

@@ -18,7 +18,7 @@ const Topbar = ({ children }: WithChildren) => {
<nav
className={clsx(
'px-2 flex items-center justify-center min-w-0 h-12 pointer-events-auto',
'border-b border-gray-900 bg-gray-800 bg-opacity-5',
'border-b border-stone-800 bg-gray-800 bg-opacity-5',
'bg-opacity-70 bg-neutral-900',
)}
>

View File

@@ -35,6 +35,8 @@ export enum InterfaceStoredSettingsProps {
isShowKSpace = 'isShowKSpace',
isThickConnections = 'isThickConnections',
isShowUnsplashedSignatures = 'isShowUnsplashedSignatures',
isShowBackgroundPattern = 'isShowBackgroundPattern',
isSoftBackground = 'isSoftBackground',
}
export type InterfaceStoredSettings = {
@@ -43,6 +45,8 @@ export type InterfaceStoredSettings = {
isShowKSpace: boolean;
isThickConnections: boolean;
isShowUnsplashedSignatures: boolean;
isShowBackgroundPattern: boolean;
isSoftBackground: boolean;
};
export const STORED_INTERFACE_DEFAULT_VALUES: InterfaceStoredSettings = {
@@ -51,6 +55,8 @@ export const STORED_INTERFACE_DEFAULT_VALUES: InterfaceStoredSettings = {
isShowKSpace: false,
isThickConnections: false,
isShowUnsplashedSignatures: false,
isShowBackgroundPattern: true,
isSoftBackground: false,
};
export interface MapRootContextProps {

View File

@@ -12,11 +12,16 @@ defmodule WandererApp.Api.MapCharacterSettings do
code_interface do
define(:create, action: :create)
define(:destroy, action: :destroy)
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
)
@@ -38,6 +43,13 @@ defmodule WandererApp.Api.MapCharacterSettings do
defaults [:create, :read, :update, :destroy]
read :by_map_filtered do
argument(:map_id, :string, allow_nil?: false)
argument(:character_ids, {:array, :uuid}, allow_nil?: false)
filter(expr(map_id == ^arg(:map_id) and character_id in ^arg(:character_ids)))
end
read :tracked_by_map_filtered do
argument(:map_id, :string, allow_nil?: false)
argument(:character_ids, {:array, :uuid}, allow_nil?: false)

View File

@@ -446,8 +446,13 @@ defmodule WandererApp.Character.Tracker do
|> Map.merge(%{alliance_id: alliance_id, corporation_id: corporation_id})
|> maybe_update_alliance()
_error ->
Logger.warning("Failed to get corporation info for #{corporation_id}")
error ->
Logger.warning(
"Failed to get corporation info for character #{character_id}: #{inspect(error)}",
character_id: character_id,
corporation_id: corporation_id
)
state
end
end

View File

@@ -49,7 +49,7 @@ defmodule WandererApp.EveDataService do
end)
end)
Task.await_many(tasks, :timer.minutes(1))
Task.await_many(tasks, :timer.minutes(30))
end
def download_file(file_name) do

View File

@@ -191,7 +191,7 @@ defmodule WandererApp.Map do
case characters |> Enum.member?(character_id) do
true ->
map_id
|> update_map(%{characters: Enum.reject(characters, fn id -> id == character_id end)})
|> update_map(%{characters: characters |> Enum.reject(fn id -> id == character_id end)})
:ok

View File

@@ -89,6 +89,11 @@ defmodule WandererApp.Map.Server.CharactersImpl do
[]
)
acls =
map_id
|> WandererApp.Map.get_map!()
|> Map.get(:acls, [])
invalidate_character_ids
|> Task.async_stream(
fn character_id ->
@@ -96,11 +101,6 @@ defmodule WandererApp.Map.Server.CharactersImpl do
|> WandererApp.Character.get_character()
|> case do
{:ok, character} ->
acls =
map_id
|> WandererApp.Map.get_map!()
|> Map.get(:acls, [])
[character_permissions] =
WandererApp.Permissions.check_characters_access([character], acls)
@@ -157,12 +157,12 @@ defmodule WandererApp.Map.Server.CharactersImpl do
|> untrack_characters(character_ids)
map_id
|> WandererApp.MapCharacterSettingsRepo.get_tracked_by_map_filtered(character_ids)
|> WandererApp.MapCharacterSettingsRepo.get_by_map_filtered(character_ids)
|> case do
{:ok, settings} ->
settings
|> Enum.each(fn s ->
WandererApp.MapCharacterSettingsRepo.untrack(s)
WandererApp.MapCharacterSettingsRepo.destroy!(s)
remove_character(map_id, s.character_id)
end)

View File

@@ -356,8 +356,6 @@ defmodule WandererApp.Map.Server.ConnectionsImpl do
def can_add_location(_scope, nil), do: false
def can_add_location(:all, _solar_system_id), do: true
def can_add_location(:none, _solar_system_id), do: false
def can_add_location(scope, solar_system_id) do
@@ -380,6 +378,9 @@ defmodule WandererApp.Map.Server.ConnectionsImpl do
not (@prohibited_system_classes |> Enum.member?(system_static_info.system_class)) and
@known_space |> Enum.member?(system_static_info.system_class)
:all ->
not (@prohibited_system_classes |> Enum.member?(system_static_info.system_class))
_ ->
false
end

View File

@@ -486,7 +486,7 @@ defmodule WandererApp.Map.Server.SystemsImpl do
state
else
error ->
Logger.error("Fail ed to update system: #{inspect(error, pretty: true)}")
Logger.error("Failed to update system: #{inspect(error, pretty: true)}")
state
end
end

View File

@@ -11,6 +11,13 @@ defmodule WandererApp.MapCharacterSettingsRepo do
character_ids: character_ids
})
def get_by_map_filtered(map_id, character_ids),
do:
WandererApp.Api.MapCharacterSettings.by_map_filtered(%{
map_id: map_id,
character_ids: character_ids
})
def get_all_by_map(map_id),
do: WandererApp.Api.MapCharacterSettings.read_by_map(%{map_id: map_id})
@@ -22,4 +29,6 @@ defmodule WandererApp.MapCharacterSettingsRepo do
def track!(settings), do: settings |> WandererApp.Api.MapCharacterSettings.track!()
def untrack!(settings), do: settings |> WandererApp.Api.MapCharacterSettings.untrack!()
def destroy!(settings), do: settings |> WandererApp.Api.MapCharacterSettings.destroy!()
end

View File

@@ -9,7 +9,7 @@
>
<%= @inner_content %>
</main>
<aside class="h-full w-14 left-0 absolute bg-gray-400 bg-opacity-5 text-gray-200 shadow-lg border-r border-gray-900 bg-opacity-70 bg-neutral-900">
<aside class="h-full w-14 left-0 absolute bg-gray-400 bg-opacity-5 text-gray-200 shadow-lg border-r border-stone-800 bg-opacity-70 bg-neutral-900">
<.sidebar_nav_links
active_tab={@active_tab}
show_admin={@show_admin}

View File

@@ -32,14 +32,22 @@
/>
<script
crossorigin="anonymous"
src="https://unpkg.com/react@18/umd/react.production.min.js"
integrity={integrity_hash("https://unpkg.com/react@18/umd/react.production.min.js")}
src="https://cdn.jsdelivr.net/npm/react@18/umd/react.production.min.js"
integrity={
integrity_hash(
"https://cdn.jsdelivr.net/npm/react-dom@16/umd/react-dom.development.js https://unpkg.com/react@18/umd/react.production.min.js"
)
}
>
</script>
<script
crossorigin="anonymous"
src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"
integrity={integrity_hash("https://unpkg.com/react-dom@18/umd/react-dom.production.min.js")}
src="https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"
integrity={
integrity_hash(
"https://cdn.jsdelivr.net/npm/react-dom@18/umd/react-dom.production.min.js"
)
}
>
</script>

View File

@@ -1,4 +1,4 @@
<nav class="px-6 flex items-center justify-between w-full h-12 pointer-events-auto border-b border-gray-900 bg-opacity-70 bg-neutral-900">
<nav class="px-6 flex items-center justify-between w-full h-12 pointer-events-auto border-b border-stone-800 bg-opacity-70 bg-neutral-900">
<span className="w-full"></span>
<span className="mr-2"></span>
<div class="flex gap-2">

View File

@@ -15,7 +15,7 @@
/>
</div>
</main>
<nav class="fixed top-0 z-100 px-6 pl-20 flex items-center justify-between w-full h-12 pointer-events-auto border-b border-gray-900 bg-opacity-70 bg-neutral-900">
<nav class="fixed top-0 z-100 px-6 pl-20 flex items-center justify-between w-full h-12 pointer-events-auto border-b border-stone-800 bg-opacity-70 bg-neutral-900">
<span className="w-full font-medium text-sm">
<.link navigate={~p"/#{@map_slug}"} class="text-neutral-100">
<%= @map_name %>

View File

@@ -197,11 +197,13 @@ defmodule WandererAppWeb.MapsLive do
{:noreply, socket}
end
def handle_event("validate", %{"form" => params} = _params, socket) do
def handle_event("validate", %{"form" => form} = _params, socket) do
form =
AshPhoenix.Form.validate(
socket.assigns.form,
params |> Map.put("acls", params["acls"] || [])
form
|> Map.put("acls", form["acls"] || [])
|> Map.put("only_tracked_characters", form["only_tracked_characters"] || false)
)
{:noreply, socket |> assign(form: form)}

View File

@@ -57,6 +57,7 @@ defmodule WandererAppWeb.Router do
@script_src,
~w('unsafe-inline'),
~w(https://unpkg.com),
~w(https://cdn.jsdelivr.net),
~w(https://w.appzi.io),
~w(https://www.googletagmanager.com),
~w(https://cdnjs.cloudflare.com)

9
m
View File

@@ -15,6 +15,15 @@ case $COMMAND in
deps)
MIX_ENV=dev mix deps.get
;;
setup)
MIX_ENV=dev mix setup
;;
createdb)
MIX_ENV=dev mix ecto.create
;;
testdb)
MIX_ENV=dev mix ash.codegen test111
;;
depsf)
MIX_ENV=dev mix deps.compile syslog --force
;;

View File

@@ -2,7 +2,7 @@ defmodule WandererApp.MixProject do
use Mix.Project
@source_url "https://github.com/wanderer-industries/wanderer"
@version "1.29.1"
@version "1.29.5"
def project do
[

View File

@@ -4417,7 +4417,8 @@
],
"solarSystemID": 31002576,
"statics": [
"W237"
"W237",
"K346"
],
"systemName": "J010366",
"effectName": null
@@ -13395,7 +13396,6 @@
],
"solarSystemID": 31002559,
"statics": [
"D792",
"K346",
"M267"
],
@@ -13718,7 +13718,8 @@
],
"solarSystemID": 31002566,
"statics": [
"E175"
"E175",
"K346"
],
"systemName": "J012773",
"effectName": "Wolf-Rayet Star"
@@ -23262,7 +23263,8 @@
],
"solarSystemID": 31002568,
"statics": [
"U210"
"U210",
"H296"
],
"systemName": "J005663",
"effectName": null
@@ -37631,4 +37633,4 @@
"systemName": "J130650",
"effectName": "Cataclysmic Variable"
}
]
]

View File

@@ -114,7 +114,7 @@
"dest": "c2",
"src": ["c1"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 1000000000,
"name": "C125",
@@ -127,7 +127,7 @@
"static": false,
"max_mass_per_jump": 1350000000,
"lifetime": "24",
"total_mass": 3000000000,
"total_mass": 3300000000,
"name": "C140",
"respawn": ["wandering"]
},
@@ -149,7 +149,7 @@
"static": false,
"max_mass_per_jump": 1350000000,
"lifetime": "24",
"total_mass": 3000000000,
"total_mass": 3300000000,
"name": "C248",
"respawn": ["wandering"]
},
@@ -160,7 +160,7 @@
"static": false,
"max_mass_per_jump": 1000000000,
"lifetime": "48",
"total_mass": 3000000000,
"total_mass": 3300000000,
"name": "C391",
"respawn": ["wandering"]
},
@@ -301,7 +301,7 @@
"dest": "thera",
"src": ["c1"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 100000000,
"name": "F353",
@@ -334,7 +334,7 @@
"dest": "c1",
"src": ["c1"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "H121",
@@ -378,7 +378,7 @@
"dest": "ls",
"src": ["c1"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "24",
"total_mass": 1000000000,
"name": "J244",
@@ -409,7 +409,7 @@
{
"mass_regen": 0,
"dest": "ns",
"src": ["c3"],
"src": ["c3", "c4-shattered", "c5-shattered", "c6-shattered"],
"static": true,
"max_mass_per_jump": 300000000,
"lifetime": "16",
@@ -455,7 +455,7 @@
"dest": "c5",
"src": ["c1", "ns"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "24",
"total_mass": 1000000000,
"name": "L614",
@@ -510,7 +510,7 @@
"dest": "c4",
"src": ["c1"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 1000000000,
"name": "M609",
@@ -532,7 +532,7 @@
"dest": "hs",
"src": ["c1"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "24",
"total_mass": 1000000000,
"name": "N110",
@@ -631,7 +631,7 @@
"dest": "c3",
"src": ["c1", "ns"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 1000000000,
"name": "O883",
@@ -642,7 +642,7 @@
"dest": "c1",
"src": ["c4"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "P060",
@@ -664,7 +664,7 @@
"dest": "hs",
"src": ["thera"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "Q063",
@@ -675,7 +675,7 @@
"dest": "c1",
"src": ["c6"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "Q317",
@@ -763,7 +763,7 @@
"dest": "c6",
"src": ["c1", "ns"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "24",
"total_mass": 1000000000,
"name": "S804",
@@ -796,7 +796,7 @@
"dest": "thera",
"src": ["hs"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "T458",
@@ -805,7 +805,7 @@
{
"mass_regen": 0,
"dest": "ls",
"src": ["c3"],
"src": ["c3", "c4-shattered", "c5-shattered"],
"static": true,
"max_mass_per_jump": 300000000,
"lifetime": "24",
@@ -862,7 +862,7 @@
"dest": "c1",
"src": ["c3", "thera"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "V301",
@@ -972,7 +972,7 @@
"dest": "c1",
"src": ["c5"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "Y790",
@@ -994,7 +994,7 @@
"dest": "ns",
"src": ["c1"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 1000000000,
"name": "Z060",
@@ -1027,7 +1027,7 @@
"dest": "c1",
"src": ["c2", "drifter"],
"static": true,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 500000000,
"name": "Z647",
@@ -1038,7 +1038,7 @@
"dest": "c1",
"src": ["hs", "ls", "ns"],
"static": false,
"max_mass_per_jump": 20000000,
"max_mass_per_jump": 62000000,
"lifetime": "16",
"total_mass": 100000000,
"name": "Z971",