@@ -189,20 +189,42 @@ impl AppManager {
189189
190190 for ( app, ( _, maybe_release) ) in simple_apps. iter ( ) . zip ( latest_results. iter ( ) ) {
191191 if let Some ( release) = maybe_release {
192- let mut maps = version_maps. write ( ) . await ;
193- let vm = maps. entry ( app. id . clone ( ) ) . or_insert_with ( || {
194- VersionMap :: new (
195- app. invalid_version_number_field_regex . clone ( ) ,
196- app. include_version_number_field_regex . clone ( ) ,
192+ let new_status = {
193+ let mut maps = version_maps. write ( ) . await ;
194+ let vm = maps. entry ( app. id . clone ( ) ) . or_insert_with ( || {
195+ VersionMap :: new (
196+ app. invalid_version_number_field_regex . clone ( ) ,
197+ app. include_version_number_field_regex . clone ( ) ,
198+ )
199+ } ) ;
200+ vm. add_single_release ( & hub. uuid , release. clone ( ) ) ;
201+ let local_version: Option < String > =
202+ match android_api:: get_android_api ( ) {
203+ Some ( api) => api. get_local_version ( & app. app_id ) . await ,
204+ None => None ,
205+ } ;
206+ get_release_status (
207+ vm,
208+ local_version. as_deref ( ) ,
209+ app. ignore_version_number . as_deref ( ) ,
210+ true ,
197211 )
198- } ) ;
199- vm. add_single_release ( & hub. uuid , release. clone ( ) ) ;
212+ } ;
200213 let done =
201214 completed. fetch_add ( 1 , std:: sync:: atomic:: Ordering :: SeqCst ) + 1 ;
202215 if let Some ( ref f) = cb {
203216 f ( done, total) ;
204217 }
205218 notify_if_registered ( ManagerEvent :: RenewProgress { done, total } ) . await ;
219+ if new_status != AppStatus :: AppPending {
220+ notify_if_registered ( ManagerEvent :: AppStatusChanged {
221+ record_id : app. id . clone ( ) ,
222+ app_id : app. app_id . clone ( ) ,
223+ old_status : AppStatus :: AppPending ,
224+ new_status,
225+ } )
226+ . await ;
227+ }
206228 } else {
207229 // Batch returned nothing for this app — escalate to full list.
208230 need_full. push ( app. clone ( ) ) ;
@@ -212,30 +234,44 @@ impl AppManager {
212234
213235 // --- Full release-list path ---
214236 for app in need_full {
215- if let Some ( releases) = getter. get_release_list ( & hub, & app. app_id ) . await {
216- let mut maps = version_maps. write ( ) . await ;
217- let vm = maps. entry ( app. id . clone ( ) ) . or_insert_with ( || {
218- VersionMap :: new (
219- app. invalid_version_number_field_regex . clone ( ) ,
220- app. include_version_number_field_regex . clone ( ) ,
221- )
222- } ) ;
223- vm. add_release_list ( & hub. uuid , releases) ;
224- } else {
237+ let new_status = {
225238 let mut maps = version_maps. write ( ) . await ;
226239 let vm = maps. entry ( app. id . clone ( ) ) . or_insert_with ( || {
227240 VersionMap :: new (
228241 app. invalid_version_number_field_regex . clone ( ) ,
229242 app. include_version_number_field_regex . clone ( ) ,
230243 )
231244 } ) ;
232- vm. set_error ( & hub. uuid ) ;
233- }
245+ if let Some ( releases) = getter. get_release_list ( & hub, & app. app_id ) . await {
246+ vm. add_release_list ( & hub. uuid , releases) ;
247+ } else {
248+ vm. set_error ( & hub. uuid ) ;
249+ }
250+ let local_version: Option < String > = match android_api:: get_android_api ( ) {
251+ Some ( api) => api. get_local_version ( & app. app_id ) . await ,
252+ None => None ,
253+ } ;
254+ get_release_status (
255+ vm,
256+ local_version. as_deref ( ) ,
257+ app. ignore_version_number . as_deref ( ) ,
258+ true ,
259+ )
260+ } ;
234261 let done = completed. fetch_add ( 1 , std:: sync:: atomic:: Ordering :: SeqCst ) + 1 ;
235262 if let Some ( ref f) = cb {
236263 f ( done, total) ;
237264 }
238265 notify_if_registered ( ManagerEvent :: RenewProgress { done, total } ) . await ;
266+ if new_status != AppStatus :: AppPending {
267+ notify_if_registered ( ManagerEvent :: AppStatusChanged {
268+ record_id : app. id . clone ( ) ,
269+ app_id : app. app_id . clone ( ) ,
270+ old_status : AppStatus :: AppPending ,
271+ new_status,
272+ } )
273+ . await ;
274+ }
239275 }
240276 } ) ;
241277 handles. push ( handle) ;
0 commit comments