@@ -250,15 +250,23 @@ async def check_installed_mod_updates(client: PanelClient, server_id: str) -> di
250250 server = server if isinstance (server , dict ) else {}
251251 listing = await list_installed_mods (client , server_id , identify = True )
252252 version , loader = server .get ("version" ), server .get ("loader" )
253- results = []
253+ results , unidentified , seen = [], [], set ()
254254 for mod in listing .get ("mods" , [])[:25 ]:
255- project_id = mod .get ("projectId" ) if isinstance (mod , dict ) else None
256- if not project_id or not version :
255+ if not isinstance (mod , dict ):
256+ continue
257+ project_id = mod .get ("projectId" )
258+ if not project_id :
259+ unidentified .append ({"name" : mod .get ("name" )})
260+ continue
261+ if project_id in seen :
262+ continue
263+ seen .add (project_id )
264+ if not version :
257265 continue
258266 compatible = await check_mod_compatibility (client , project_id , version , loader )
259267 target = compatible .get ("versionId" )
260- results .append (drop_empty ({"name" : mod . get ( "name" ), " projectId" : project_id , "currentVersionId" : mod .get ("versionId" ), "currentVersionNumber" : mod .get ("versionNumber" ), "targetVersionId " : target , "targetVersionNumber " : compatible .get ("versionNumber" ), "updateAvailable " : bool ( target and target != mod .get ("versionId" )), "compatible" : compatible .get ("compatible" )}))
261- return {"minecraftVersion" : version , "loader" : loader , "updates " : results , "identified" : listing .get ("identified" , False ), "truncated" : len (listing .get ("mods" , [])) > 25 }
268+ results .append (drop_empty ({"projectId" : project_id , "currentVersionId" : mod .get ("versionId" ), "currentVersionNumber" : mod .get ("versionNumber" ), "candidateVersionId " : target , "candidateVersionNumber " : compatible .get ("versionNumber" ), "state " : "no-compatible-version" if not compatible . get ( "compatible" ) else ( "current-for- target" if target == mod .get ("versionId" ) else "different-compatible-version" ), "compatible" : compatible .get ("compatible" )}))
269+ return {"minecraftVersion" : version , "loader" : loader , "mods " : results , "unidentified" : unidentified , "identified" : listing .get ("identified" , False ), "truncated" : len (listing .get ("mods" , [])) > 25 }
262270
263271
264272async def get_server_runtime_diagnostics (client : PanelClient , server_id : str ) -> dict [str , Any ]:
0 commit comments