| 
									
										
										
										
											2024-09-18 10:27:53 +02:00
										 |  |  | from typing import Any, Dict | 
					
						
							|  |  |  | from uuid import UUID | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from flask import abort, url_for | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-16 10:34:28 -05:00
										 |  |  | from WebHostLib import to_url | 
					
						
							| 
									
										
										
										
											2024-09-18 10:27:53 +02:00
										 |  |  | import worlds.Files | 
					
						
							|  |  |  | from . import api_endpoints, get_players | 
					
						
							|  |  |  | from ..models import Room | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @api_endpoints.route('/room_status/<suuid:room_id>') | 
					
						
							|  |  |  | def room_info(room_id: UUID) -> Dict[str, Any]: | 
					
						
							|  |  |  |     room = Room.get(id=room_id) | 
					
						
							|  |  |  |     if room is None: | 
					
						
							|  |  |  |         return abort(404) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def supports_apdeltapatch(game: str) -> bool: | 
					
						
							|  |  |  |         return game in worlds.Files.AutoPatchRegister.patch_types | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     downloads = [] | 
					
						
							|  |  |  |     for slot in sorted(room.seed.slots): | 
					
						
							|  |  |  |         if slot.data and not supports_apdeltapatch(slot.game): | 
					
						
							|  |  |  |             slot_download = { | 
					
						
							|  |  |  |                 "slot": slot.player_id, | 
					
						
							|  |  |  |                 "download": url_for("download_slot_file", room_id=room.id, player_id=slot.player_id) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             downloads.append(slot_download) | 
					
						
							|  |  |  |         elif slot.data: | 
					
						
							|  |  |  |             slot_download = { | 
					
						
							|  |  |  |                 "slot": slot.player_id, | 
					
						
							|  |  |  |                 "download": url_for("download_patch", patch_id=slot.id, room_id=room.id) | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             downloads.append(slot_download) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return { | 
					
						
							| 
									
										
										
										
											2025-07-16 10:34:28 -05:00
										 |  |  |         "tracker": to_url(room.tracker), | 
					
						
							| 
									
										
										
										
											2024-09-18 10:27:53 +02:00
										 |  |  |         "players": get_players(room.seed), | 
					
						
							|  |  |  |         "last_port": room.last_port, | 
					
						
							|  |  |  |         "last_activity": room.last_activity, | 
					
						
							|  |  |  |         "timeout": room.timeout, | 
					
						
							|  |  |  |         "downloads": downloads, | 
					
						
							|  |  |  |     } |