Skip to content

Commit 878babe

Browse files
committed
🐛 [redesign] fix profiles not being loaded
1 parent d4868b3 commit 878babe

File tree

1 file changed

+25
-64
lines changed

1 file changed

+25
-64
lines changed

src/modules/redesign/parsers/profile.ts

Lines changed: 25 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1-
import { full } from 'acorn-walk';
2-
import { type Node as AcornNode, parse } from 'acorn';
3-
4-
import type { BuildingMarkerAdd } from 'typings/Ingame';
51
import type { RedesignParser } from 'typings/modules/Redesign';
62

7-
type Building = BuildingMarkerAdd;
3+
interface Building {
4+
id: number;
5+
user_id: number;
6+
name: string;
7+
longitude: number;
8+
latitude: number;
9+
icon: string;
10+
icon_other: string;
11+
lbid: number;
12+
show_vehicles_at_startpage: boolean;
13+
level: number;
14+
personal_count: number;
15+
building_type: number;
16+
filter_id: string;
17+
detail_button: string;
18+
}
819

920
interface Award {
1021
caption: string;
@@ -35,26 +46,11 @@ export interface ProfileWindow {
3546
alliance_ignored: boolean;
3647
}
3748

38-
interface CallExpressionNode extends AcornNode {
39-
expression: {
40-
type: 'CallExpression';
41-
callee: AcornNode & { name: string };
42-
arguments: (AcornNode & {
43-
properties: (AcornNode & {
44-
key: { value: string };
45-
value:
46-
| {
47-
type: 'UnaryExpression';
48-
operator: string;
49-
argument: AcornNode & { value: number };
50-
}
51-
| { type: 'Literal'; value: number | string };
52-
})[];
53-
})[];
54-
};
55-
}
56-
57-
export default <RedesignParser<ProfileWindow>>(({ LSSM, doc, href = '' }) => {
49+
export default <RedesignParser<ProfileWindow>>(async ({
50+
LSSM,
51+
doc,
52+
href = '',
53+
}) => {
5854
const id = parseInt(
5955
new URL(href, window.location.origin).pathname.match(
6056
/\d+(?=\/?$)/u
@@ -124,45 +120,10 @@ export default <RedesignParser<ProfileWindow>>(({ LSSM, doc, href = '' }) => {
124120
?.textContent?.trim() ?? '',
125121
})),
126122
has_map: !!doc.querySelector<HTMLDivElement>('#profile_map'),
127-
buildings: Array.from(doc.scripts)
128-
.filter(script =>
129-
script.textContent?.includes('buildingMarkerAddSingle')
130-
)
131-
.flatMap(script => {
132-
const tree = parse(script.textContent ?? '', {
133-
ecmaVersion: 'latest',
134-
});
135-
136-
const markerNodes: CallExpressionNode[] = [];
137-
full(
138-
tree,
139-
(node: AcornNode | CallExpressionNode) =>
140-
node.type === 'ExpressionStatement' &&
141-
'expression' in node &&
142-
node.expression.type === 'CallExpression' &&
143-
node.expression.callee.type === 'Identifier' &&
144-
node.expression.callee.name ===
145-
'buildingMarkerAddSingle' &&
146-
markerNodes.push(node)
147-
);
148-
149-
return markerNodes.map(
150-
node =>
151-
Object.fromEntries(
152-
node.expression.arguments[0].properties.map(
153-
prop => [
154-
prop.key.value,
155-
prop.value.type === 'UnaryExpression'
156-
? parseFloat(
157-
prop.value.operator +
158-
prop.value.argument.value
159-
)
160-
: prop.value.value,
161-
]
162-
)
163-
) as unknown as Building
164-
);
165-
}),
123+
buildings: await fetch(`/building/buildings_json?user_to_load_id=${id}`)
124+
.then(res => res.json())
125+
.then<Building[]>(p => p.buildings ?? [])
126+
.then(b => b.filter(({user_id}) => user_id === id)),
166127
ignored: !!doc.querySelector<HTMLAnchorElement>(
167128
'a[href^="/ignoriert/entfernen/"]'
168129
),

0 commit comments

Comments
 (0)