66 tostring ,
77)
88
9+ from fastapi import Request
10+
911from config import FRONTEND_RESOURCES_PATH , YOUTUBE_BASE_URL
1012from handler .database import db_platform_handler , db_rom_handler
1113from handler .filesystem import fs_platform_handler
1618class GamelistExporter :
1719 """Export RomM collections to ES-DE gamelist.xml format"""
1820
21+ def __init__ (self , local_export : bool = False ):
22+ self .local_export = local_export
23+
1924 def _format_release_date (self , timestamp : int ) -> str :
2025 """Format release date to YYYYMMDDTHHMMSS format"""
2126 return datetime .fromtimestamp (timestamp / 1000 ).strftime ("%Y%m%dT%H%M%S" )
2227
23- def _create_game_element (self , rom : Rom , request = None ) -> Element :
28+ def _create_game_element (self , rom : Rom , request : Request ) -> Element :
2429 """Create a <game> element for a ROM"""
2530 game = Element ("game" )
2631
2732 # Basic game info
28- if request :
33+ if self .local_export :
34+ SubElement (game , "path" ).text = f"./{ rom .fs_name } "
35+ else :
2936 SubElement (game , "path" ).text = str (
3037 request .url_for (
3138 "get_rom_content" ,
3239 id = rom .id ,
3340 file_name = rom .fs_name ,
3441 )
3542 )
36- else :
37- SubElement (game , "path" ).text = f"./{ rom .fs_name } "
43+
3844 SubElement (game , "name" ).text = rom .name or rom .fs_name
3945
4046 if rom .summary :
4147 SubElement (game , "desc" ).text = rom .summary
4248
4349 # Media files
44- if rom .path_cover_large :
45- SubElement (game , "cover " ).text = (
46- f"{ FRONTEND_RESOURCES_PATH } /{ rom .path_cover_large } "
50+ if rom .path_cover_l :
51+ SubElement (game , "thumbnail " ).text = (
52+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .path_cover_l } "
4753 )
4854
4955 if rom .youtube_video_id :
@@ -91,26 +97,40 @@ def _create_game_element(self, rom: Rom, request=None) -> Element:
9197
9298 # Provider specific metadata
9399 if rom .ss_metadata :
94- if rom .ss_metadata .get ("box3d" ):
95- SubElement (game , "box3d" ).text = rom .ss_metadata ["box3d" ]
96- if rom .ss_metadata .get ("box2d_back" ):
97- SubElement (game , "backcover" ).text = rom .ss_metadata ["box2d_back" ]
98- if rom .ss_metadata .get ("fanart" ):
99- SubElement (game , "fanart" ).text = rom .ss_metadata ["fanart" ]
100- if rom .ss_metadata .get ("marquee" ):
101- SubElement (game , "marquee" ).text = rom .ss_metadata ["marquee" ]
102- if rom .ss_metadata .get ("miximage" ):
103- SubElement (game , "miximage" ).text = rom .ss_metadata ["miximage" ]
104- if rom .ss_metadata .get ("physical" ):
105- SubElement (game , "physicalmedia" ).text = rom .ss_metadata ["physical" ]
100+ if rom .ss_metadata .get ("box3d_path" ):
101+ SubElement (game , "box3d" ).text = (
102+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["box3d_path" ]} "
103+ )
104+ if rom .ss_metadata .get ("box2d_back_path" ):
105+ SubElement (game , "boxback" ).text = (
106+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["box2d_back_path" ]} "
107+ )
108+ if rom .ss_metadata .get ("fanart_path" ):
109+ SubElement (game , "fanart" ).text = (
110+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["fanart_path" ]} "
111+ )
112+ if rom .ss_metadata .get ("logo_path" ):
113+ SubElement (game , "marquee" ).text = (
114+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["logo_path" ]} "
115+ )
116+ if rom .ss_metadata .get ("miximage_path" ):
117+ SubElement (game , "miximage" ).text = (
118+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["miximage_path" ]} "
119+ )
120+ if rom .ss_metadata .get ("physical_path" ):
121+ SubElement (game , "physicalmedia" ).text = (
122+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["physical_path" ]} "
123+ )
106124 if rom .ss_metadata .get ("title_screen" ):
107- SubElement (game , "title_screen" ).text = rom .ss_metadata ["title_screen" ]
125+ SubElement (game , "title_screen" ).text = (
126+ f"{ FRONTEND_RESOURCES_PATH } /{ rom .ss_metadata ["title_screen" ]} "
127+ )
108128
109129 if rom .gamelist_metadata :
110130 if rom .gamelist_metadata .get ("box3d" ):
111131 SubElement (game , "box3d" ).text = rom .gamelist_metadata ["box3d" ]
112132 if rom .gamelist_metadata .get ("box2d_back" ):
113- SubElement (game , "backcover " ).text = rom .gamelist_metadata ["box2d_back" ]
133+ SubElement (game , "boxback " ).text = rom .gamelist_metadata ["box2d_back" ]
114134 if rom .gamelist_metadata .get ("fanart" ):
115135 SubElement (game , "fanart" ).text = rom .gamelist_metadata ["fanart" ]
116136 if rom .gamelist_metadata .get ("marquee" ):
@@ -135,7 +155,7 @@ def _create_game_element(self, rom: Rom, request=None) -> Element:
135155
136156 return game
137157
138- def export_platform_to_xml (self , platform_id : int , request = None ) -> str :
158+ def export_platform_to_xml (self , platform_id : int , request : Request ) -> str :
139159 """Export a platform's ROMs to gamelist.xml format
140160
141161 Args:
@@ -154,7 +174,7 @@ def export_platform_to_xml(self, platform_id: int, request=None) -> str:
154174 root = Element ("gameList" )
155175
156176 for rom in roms :
157- if rom and not rom .missing_from_fs :
177+ if rom and not rom .missing_from_fs and rom . fs_name != "gamelist.xml" :
158178 game_element = self ._create_game_element (rom , request = request )
159179 root .append (game_element )
160180
@@ -168,7 +188,7 @@ def export_platform_to_xml(self, platform_id: int, request=None) -> str:
168188 async def export_platform_to_file (
169189 self ,
170190 platform_id : int ,
171- request = None ,
191+ request : Request ,
172192 ) -> bool :
173193 """Export platform ROMs to gamelist.xml file in the platform's directory
174194
0 commit comments