diff options
| author | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2024-10-19 16:28:00 +0300 |
|---|---|---|
| committer | Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> | 2024-10-19 16:28:00 +0300 |
| commit | be5313fa0092688cea04f7f1f115574765847c22 (patch) | |
| tree | d3760749ffb6942577afe92182f6fdbd3aa89d4b /frontend/src | |
| parent | backend: optimize create record (diff) | |
| download | lphub-be5313fa0092688cea04f7f1f115574765847c22.tar.gz lphub-be5313fa0092688cea04f7f1f115574765847c22.tar.bz2 lphub-be5313fa0092688cea04f7f1f115574765847c22.zip | |
backend: fix run ranks
Diffstat (limited to 'frontend/src')
| -rw-r--r-- | frontend/src/components/UploadRunDialog.tsx | 99 |
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 @@ | |||
| 1 | import React from 'react'; | 1 | import React from 'react'; |
| 2 | import { UploadRunContent } from '../types/Content'; | 2 | import { UploadRunContent } from '../types/Content'; |
| 3 | import { DemoMessages, ScoreboardTempUpdate, SourceDemoParser, UserMessage } from '@nekz/sdp'; | ||
| 4 | import fs from 'fs'; | ||
| 5 | |||
| 6 | |||
| 3 | 7 | ||
| 4 | import '../css/UploadRunDialog.css'; | 8 | import '../css/UploadRunDialog.css'; |
| 5 | import { Game } from '../types/Game'; | 9 | import { Game } from '../types/Game'; |
| 6 | import { Map } from '../types/Map'; | 10 | import { Map } from '../types/Map'; |
| 7 | import { API } from '../api/Api'; | 11 | import { API } from '../api/Api'; |
| 8 | import { useNavigate } from 'react-router-dom'; | 12 | import { useNavigate } from 'react-router-dom'; |
| 13 | import { SvcUserMessage } from '@nekz/sdp/script/src/types/NetMessages'; | ||
| 9 | 14 | ||
| 10 | interface UploadRunDialogProps { | 15 | interface 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 | } |