diff options
Diffstat (limited to 'frontend/src')
| -rw-r--r-- | frontend/src/api/Maps.tsx | 3 | ||||
| -rw-r--r-- | frontend/src/components/Sidebar.tsx | 2 | ||||
| -rw-r--r-- | frontend/src/components/UploadRunDialog.tsx | 24 | ||||
| -rw-r--r-- | frontend/src/types/Content.tsx | 1 |
4 files changed, 12 insertions, 18 deletions
diff --git a/frontend/src/api/Maps.tsx b/frontend/src/api/Maps.tsx index b6a6bad..2209788 100644 --- a/frontend/src/api/Maps.tsx +++ b/frontend/src/api/Maps.tsx | |||
| @@ -76,11 +76,10 @@ export const delete_map_discussion = async (token: string, map_id: string, discu | |||
| 76 | }; | 76 | }; |
| 77 | 77 | ||
| 78 | export const post_record = async (token: string, run: UploadRunContent): Promise<string> => { | 78 | export const post_record = async (token: string, run: UploadRunContent): Promise<string> => { |
| 79 | if (run.partner_demo && run.partner_id) { | 79 | if (run.partner_demo) { |
| 80 | const response = await axios.postForm(url(`maps/${run.map_id}/record`), { | 80 | const response = await axios.postForm(url(`maps/${run.map_id}/record`), { |
| 81 | "host_demo": run.host_demo, | 81 | "host_demo": run.host_demo, |
| 82 | "partner_demo": run.partner_demo, | 82 | "partner_demo": run.partner_demo, |
| 83 | "partner_id": run.partner_id, | ||
| 84 | }, { | 83 | }, { |
| 85 | headers: { | 84 | headers: { |
| 86 | "Authorization": token, | 85 | "Authorization": token, |
diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index c5c91db..5757183 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx | |||
| @@ -154,7 +154,7 @@ const Sidebar: React.FC<SidebarProps> = ({ setToken, profile, setProfile, onUplo | |||
| 154 | 154 | ||
| 155 | { | 155 | { |
| 156 | profile && profile.profile ? | 156 | profile && profile.profile ? |
| 157 | <button id='upload-run' className='submit-run-button' onClick={() => onUploadRun()}><img src={UploadIcon} alt="upload" /><span>Submit a Run</span></button> | 157 | <button id='upload-run' className='submit-run-button' onClick={() => onUploadRun()}><img src={UploadIcon} alt="upload" /><span>Upload Record</span></button> |
| 158 | : | 158 | : |
| 159 | <span></span> | 159 | <span></span> |
| 160 | } | 160 | } |
diff --git a/frontend/src/components/UploadRunDialog.tsx b/frontend/src/components/UploadRunDialog.tsx index f3258e8..a92a5fb 100644 --- a/frontend/src/components/UploadRunDialog.tsx +++ b/frontend/src/components/UploadRunDialog.tsx | |||
| @@ -18,8 +18,12 @@ interface UploadRunDialogProps { | |||
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, games }) => { | 20 | const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, games }) => { |
| 21 | |||
| 22 | const [confirmMessage, setConfirmMessage] = React.useState<string>("Are you sure you want to upload this demo?"); | ||
| 23 | |||
| 21 | const { message, MessageDialogComponent } = useMessage(); | 24 | const { message, MessageDialogComponent } = useMessage(); |
| 22 | const { confirm, ConfirmDialogComponent } = useConfirm("Upload demo?", "Are you sure you want to upload this demo?"); | 25 | const { confirm, ConfirmDialogComponent } = useConfirm("Upload demo?", confirmMessage); |
| 26 | |||
| 23 | 27 | ||
| 24 | const navigate = useNavigate(); | 28 | const navigate = useNavigate(); |
| 25 | 29 | ||
| @@ -27,7 +31,6 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, | |||
| 27 | map_id: 0, | 31 | map_id: 0, |
| 28 | host_demo: null, | 32 | host_demo: null, |
| 29 | partner_demo: null, | 33 | partner_demo: null, |
| 30 | partner_id: undefined, | ||
| 31 | }); | 34 | }); |
| 32 | 35 | ||
| 33 | const [currentMap, setCurrentMap] = React.useState<string>(""); | 36 | const [currentMap, setCurrentMap] = React.useState<string>(""); |
| @@ -65,7 +68,6 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, | |||
| 65 | map_id: gameMaps[0].id, | 68 | map_id: gameMaps[0].id, |
| 66 | host_demo: null, | 69 | host_demo: null, |
| 67 | partner_demo: null, | 70 | partner_demo: null, |
| 68 | partner_id: undefined, | ||
| 69 | }); | 71 | }); |
| 70 | _set_current_map(gameMaps[0].name); | 72 | _set_current_map(gameMaps[0].name); |
| 71 | setSelectedGameID(parseInt(game_id) - 1); | 73 | setSelectedGameID(parseInt(game_id) - 1); |
| @@ -98,9 +100,6 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, | |||
| 98 | } else if (uploadRunContent.partner_demo === null) { | 100 | } else if (uploadRunContent.partner_demo === null) { |
| 99 | message("Error", "You must select a partner demo to upload.") | 101 | message("Error", "You must select a partner demo to upload.") |
| 100 | return | 102 | return |
| 101 | } else if (uploadRunContent.partner_id === undefined) { | ||
| 102 | message("Error", "You must specify your partner.") | ||
| 103 | return | ||
| 104 | } | 103 | } |
| 105 | } else { | 104 | } else { |
| 106 | if (uploadRunContent.host_demo === null) { | 105 | if (uploadRunContent.host_demo === null) { |
| @@ -109,18 +108,20 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, | |||
| 109 | } | 108 | } |
| 110 | } | 109 | } |
| 111 | const demo = SourceDemoParser.default() | 110 | const demo = SourceDemoParser.default() |
| 112 | .setOptions({ packets: true }) | 111 | .setOptions({ packets: true, header: true }) |
| 113 | .parse(await uploadRunContent.host_demo.arrayBuffer()); | 112 | .parse(await uploadRunContent.host_demo.arrayBuffer()); |
| 114 | const scoreboard = demo.findPacket<NetMessages.SvcUserMessage>((message) => { | 113 | const scoreboard = demo.findPacket<NetMessages.SvcUserMessage>((message) => { |
| 115 | return message instanceof NetMessages.SvcUserMessage && message.userMessage instanceof ScoreboardTempUpdate; | 114 | return message instanceof NetMessages.SvcUserMessage && message.userMessage instanceof ScoreboardTempUpdate; |
| 116 | }) | 115 | }) |
| 117 | 116 | ||
| 118 | if (!scoreboard) { | 117 | if (!scoreboard) { |
| 119 | message("Error", "Error while processing demo: Unable to get scoreboard result. Is this not a CM demo?") | 118 | message("Error", "Error while processing demo: Unable to get scoreboard result. Either there is a demo that is corrupt or haven't been recorded in challenge mode.") |
| 120 | return | 119 | return |
| 121 | } | 120 | } |
| 122 | const { portalScore, timeScore } = scoreboard.userMessage?.as<ScoreboardTempUpdate>() ?? {}; | 121 | const { portalScore, timeScore } = scoreboard.userMessage?.as<ScoreboardTempUpdate>() ?? {}; |
| 123 | console.log(`Portal count: ${portalScore}. Ticks: ${timeScore}.`); | 122 | console.log(`Map Name: ${demo.mapName}. Portal count: ${portalScore}. Ticks: ${timeScore}.`); |
| 123 | |||
| 124 | setConfirmMessage(`Map Name: ${demo.mapName}\nPortal count: ${portalScore}\nTicks: ${timeScore}\n\nAre you sure you want to upload this demo?`) | ||
| 124 | 125 | ||
| 125 | const userConfirmed = await confirm(); | 126 | const userConfirmed = await confirm(); |
| 126 | 127 | ||
| @@ -190,11 +191,6 @@ const UploadRunDialog: React.FC<UploadRunDialogProps> = ({ token, open, onClose, | |||
| 190 | <> | 191 | <> |
| 191 | <span>Partner Demo</span> | 192 | <span>Partner Demo</span> |
| 192 | <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} /> | 193 | <input type="file" name="partner_demo" id="partner_demo" accept=".dem" onChange={(e) => _handle_file_change(e, false)} /> |
| 193 | <span>Partner ID</span> | ||
| 194 | <input type="text" name="partner_id" id="partner_id" onChange={(e) => setUploadRunContent({ | ||
| 195 | ...uploadRunContent, | ||
| 196 | partner_id: e.target.value, | ||
| 197 | })} /> | ||
| 198 | </> | 194 | </> |
| 199 | ) | 195 | ) |
| 200 | } | 196 | } |
diff --git a/frontend/src/types/Content.tsx b/frontend/src/types/Content.tsx index e6e0cb1..42a6917 100644 --- a/frontend/src/types/Content.tsx +++ b/frontend/src/types/Content.tsx | |||
| @@ -21,5 +21,4 @@ export interface UploadRunContent { | |||
| 21 | map_id: number; | 21 | map_id: number; |
| 22 | host_demo: File | null; | 22 | host_demo: File | null; |
| 23 | partner_demo: File | null; | 23 | partner_demo: File | null; |
| 24 | partner_id?: string; | ||
| 25 | }; | 24 | }; |