aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/components/UploadRunDialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/UploadRunDialog.tsx')
-rw-r--r--frontend/src/components/UploadRunDialog.tsx99
1 files changed, 57 insertions, 42 deletions
diff --git a/frontend/src/components/UploadRunDialog.tsx b/frontend/src/components/UploadRunDialog.tsx
index d42ffe7..9f417b5 100644
--- a/frontend/src/components/UploadRunDialog.tsx
+++ b/frontend/src/components/UploadRunDialog.tsx
@@ -1,11 +1,16 @@
1import React from 'react'; 1import React from 'react';
2import { UploadRunContent } from '../types/Content'; 2import { UploadRunContent } from '../types/Content';
3import { DemoMessages, ScoreboardTempUpdate, SourceDemoParser, UserMessage } from '@nekz/sdp';
4import fs from 'fs';
5
6
3 7
4import '../css/UploadRunDialog.css'; 8import '../css/UploadRunDialog.css';
5import { Game } from '../types/Game'; 9import { Game } from '../types/Game';
6import { Map } from '../types/Map'; 10import { Map } from '../types/Map';
7import { API } from '../api/Api'; 11import { API } from '../api/Api';
8import { useNavigate } from 'react-router-dom'; 12import { useNavigate } from 'react-router-dom';
13import { SvcUserMessage } from '@nekz/sdp/script/src/types/NetMessages';
9 14
10interface UploadRunDialogProps { 15interface UploadRunDialogProps {
11 token?: string; 16 token?: string;
@@ -103,6 +108,16 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
103 return 108 return
104 } 109 }
105 } 110 }
111 const demo = SourceDemoParser.default()
112 .setOptions({ packets: true })
113 .parse(await uploadRunContent.host_demo.arrayBuffer());
114
115 const scoreboardPacket = demo.findPacket(ScoreboardTempUpdate)
116 if (scoreboardPacket) {
117 console.log(scoreboardPacket)
118 } else {
119 console.log("couldnt find scoreboard packet")
120 }
106 if (window.confirm("Are you sure you want to submit this run to LPHUB?")) { 121 if (window.confirm("Are you sure you want to submit this run to LPHUB?")) {
107 const message = await API.post_record(token, uploadRunContent); 122 const message = await API.post_record(token, uploadRunContent);
108 alert(message); 123 alert(message);
@@ -114,7 +129,7 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
114 129
115 React.useEffect(() => { 130 React.useEffect(() => {
116 if (open) { 131 if (open) {
117 _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?. 132 _handle_game_select("1", "Portal 2 - Singleplayer"); // a different approach?.
118 } 133 }
119 }, [open]); 134 }, [open]);
120 135
@@ -125,15 +140,15 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
125 <div id='upload-run-menu'> 140 <div id='upload-run-menu'>
126 <div id='upload-run-menu-add'> 141 <div id='upload-run-menu-add'>
127 <div id='upload-run-route-category'> 142 <div id='upload-run-route-category'>
128 <div style={{padding: "15px 0px"}} className='upload-run-dropdown-container'> 143 <div style={{ padding: "15px 0px" }} className='upload-run-dropdown-container'>
129 <h1 style={{paddingBottom: "14px"}}>Select Game</h1> 144 <h1 style={{ paddingBottom: "14px" }}>Select Game</h1>
130 <div onClick={() => _handle_dropdowns(1)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}> 145 <div onClick={() => _handle_dropdowns(1)} style={{ display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between" }}>
131 <div className='dropdown-cur'>{selectedGameName}</div> 146 <div className='dropdown-cur'>{selectedGameName}</div>
132 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i> 147 <i style={{ rotate: "-90deg", transform: "translate(-5px, 10px)" }} className="triangle"></i>
133 </div> 148 </div>
134 <div className={dropdown1Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}> 149 <div className={dropdown1Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
135 {games.map((game) => ( 150 {games.map((game) => (
136 <div onClick={() => {_handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1)}} key={game.id}>{game.name}</div> 151 <div onClick={() => { _handle_game_select(game.id.toString(), game.name); _handle_dropdowns(1) }} key={game.id}>{game.name}</div>
137 ))} 152 ))}
138 </div> 153 </div>
139 </div> 154 </div>
@@ -141,45 +156,45 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose,
141 !loading && 156 !loading &&
142 ( 157 (
143 <> 158 <>
144 <div className='upload-run-map-container' style={{paddingBottom: "10px"}}> 159 <div className='upload-run-map-container' style={{ paddingBottom: "10px" }}>
145 <div style={{padding: "15px 0px"}}> 160 <div style={{ padding: "15px 0px" }}>
146 <h1 style={{paddingBottom: "14px"}}>Select Map</h1> 161 <h1 style={{ paddingBottom: "14px" }}>Select Map</h1>
147 <div onClick={() => _handle_dropdowns(2)} style={{display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between"}}> 162 <div onClick={() => _handle_dropdowns(2)} style={{ display: "flex", alignItems: "center", cursor: "pointer", justifyContent: "space-between" }}>
148 <span style={{userSelect: "none"}}>{currentMap}</span> 163 <span style={{ userSelect: "none" }}>{currentMap}</span>
149 <i style={{rotate: "-90deg", transform: "translate(-5px, 10px)"}} className="triangle"></i> 164 <i style={{ rotate: "-90deg", transform: "translate(-5px, 10px)" }} className="triangle"></i>
165 </div>
150 </div> 166 </div>
151 </div> 167 <div>
152 <div> 168 <div id='dropdown2' className={dropdown2Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}>
153 <div id='dropdown2' className={dropdown2Vis ? "upload-run-dropdown" : "upload-run-dropdown hidden"}> 169 {selectedGameMaps && selectedGameMaps.map((gameMap) => (
154 {selectedGameMaps && selectedGameMaps.map((gameMap) => ( 170 <div onClick={() => { setUploadRunContent({ ...uploadRunContent, map_id: gameMap.id }); _set_current_map(gameMap.name); _handle_dropdowns(2); }} key={gameMap.id}>{gameMap.name}</div>
155 <div onClick={() => { setUploadRunContent({...uploadRunContent, map_id: gameMap.id}); _set_current_map(gameMap.name); _handle_dropdowns(2); }} key={gameMap.id}>{gameMap.name}</div> 171 ))}
156 ))} 172 </div>
173 </div>
174 <span>Host Demo</span>
175 <input type="file" name="host_demo" id="host_demo" accept=".dem" onChange={(e) => _handle_file_change(e, true)} />
176 {
177 games[selectedGameID].is_coop &&
178 (
179 <>
180 <span>Partner Demo</span>
181 <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} />
182 <span>Partner ID</span>
183 <input type="text" name="partner_id" id="partner_id" onChange={(e) => setUploadRunContent({
184 ...uploadRunContent,
185 partner_id: e.target.value,
186 })} />
187 </>
188 )
189 }
190 <div className='search-container'>
191
192 </div>
193 <div className='upload-run-buttons-container'>
194 <button onClick={_upload_run}>Submit</button>
195 <button onClick={() => onClose()}>Cancel</button>
157 </div> 196 </div>
158 </div> 197 </div>
159 <span>Host Demo</span>
160 <input type="file" name="host_demo" id="host_demo" accept=".dem" onChange={(e) => _handle_file_change(e, true)} />
161 {
162 games[selectedGameID].is_coop &&
163 (
164 <>
165 <span>Partner Demo</span>
166 <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} />
167 <span>Partner ID</span>
168 <input type="text" name="partner_id" id="partner_id" onChange={(e) => setUploadRunContent({
169 ...uploadRunContent,
170 partner_id: e.target.value,
171 })} />
172 </>
173 )
174 }
175 <div className='search-container'>
176
177 </div>
178 <div className='upload-run-buttons-container'>
179 <button onClick={_upload_run}>Submit</button>
180 <button onClick={() => onClose()}>Cancel</button>
181 </div>
182 </div>
183 </> 198 </>
184 ) 199 )
185 } 200 }