[FL-2961] SubGhz: properly handle storage loss (#1990)
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									aec36e7041
								
							
						
					
					
						commit
						721ab717d7
					
				| @ -38,18 +38,34 @@ bool subghz_scene_more_raw_on_event(void* context, SceneManagerEvent event) { | |||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == SubmenuIndexDelete) { |         if(event.event == SubmenuIndexDelete) { | ||||||
|             scene_manager_set_scene_state( |             if(subghz_file_available(subghz)) { | ||||||
|                 subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerNoSet); |                 scene_manager_set_scene_state( | ||||||
|             scene_manager_set_scene_state( |                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerNoSet); | ||||||
|                 subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexDelete); |                 scene_manager_set_scene_state( | ||||||
|             scene_manager_next_scene(subghz->scene_manager, SubGhzSceneDeleteRAW); |                     subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexDelete); | ||||||
|             return true; |                 scene_manager_next_scene(subghz->scene_manager, SubGhzSceneDeleteRAW); | ||||||
|  |                 return true; | ||||||
|  |             } else { | ||||||
|  |                 if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                        subghz->scene_manager, SubGhzSceneStart)) { | ||||||
|  |                     scene_manager_stop(subghz->scene_manager); | ||||||
|  |                     view_dispatcher_stop(subghz->view_dispatcher); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } else if(event.event == SubmenuIndexEdit) { |         } else if(event.event == SubmenuIndexEdit) { | ||||||
|             furi_string_reset(subghz->file_path_tmp); |             if(subghz_file_available(subghz)) { | ||||||
|             scene_manager_set_scene_state( |                 furi_string_reset(subghz->file_path_tmp); | ||||||
|                 subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexEdit); |                 scene_manager_set_scene_state( | ||||||
|             scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); |                     subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexEdit); | ||||||
|             return true; |                 scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); | ||||||
|  |                 return true; | ||||||
|  |             } else { | ||||||
|  |                 if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                        subghz->scene_manager, SubGhzSceneStart)) { | ||||||
|  |                     scene_manager_stop(subghz->scene_manager); | ||||||
|  |                     view_dispatcher_stop(subghz->view_dispatcher); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
|  | |||||||
| @ -198,20 +198,28 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | |||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case SubGhzCustomEventViewReadRAWMore: |         case SubGhzCustomEventViewReadRAWMore: | ||||||
|             if(subghz_scene_read_raw_update_filename(subghz)) { |             if(subghz_file_available(subghz)) { | ||||||
|                 scene_manager_set_scene_state( |                 if(subghz_scene_read_raw_update_filename(subghz)) { | ||||||
|                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSet); |                     scene_manager_set_scene_state( | ||||||
|                 subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad; |                         subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSet); | ||||||
|                 scene_manager_next_scene(subghz->scene_manager, SubGhzSceneMoreRAW); |                     subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad; | ||||||
|                 consumed = true; |                     scene_manager_next_scene(subghz->scene_manager, SubGhzSceneMoreRAW); | ||||||
|  |                     consumed = true; | ||||||
|  |                 } else { | ||||||
|  |                     furi_crash("SubGhz: RAW file name update error."); | ||||||
|  |                 } | ||||||
|             } else { |             } else { | ||||||
|                 furi_crash("SubGhz: RAW file name update error."); |                 if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                        subghz->scene_manager, SubGhzSceneStart)) { | ||||||
|  |                     scene_manager_stop(subghz->scene_manager); | ||||||
|  |                     view_dispatcher_stop(subghz->view_dispatcher); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case SubGhzCustomEventViewReadRAWSendStart: |         case SubGhzCustomEventViewReadRAWSendStart: | ||||||
| 
 | 
 | ||||||
|             if(subghz_scene_read_raw_update_filename(subghz)) { |             if(subghz_file_available(subghz) && subghz_scene_read_raw_update_filename(subghz)) { | ||||||
|                 //start send
 |                 //start send
 | ||||||
|                 subghz->state_notifications = SubGhzNotificationStateIDLE; |                 subghz->state_notifications = SubGhzNotificationStateIDLE; | ||||||
|                 if(subghz->txrx->txrx_state == SubGhzTxRxStateRx) { |                 if(subghz->txrx->txrx_state == SubGhzTxRxStateRx) { | ||||||
| @ -238,6 +246,12 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | |||||||
|                         subghz->state_notifications = SubGhzNotificationStateTx; |                         subghz->state_notifications = SubGhzNotificationStateTx; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |             } else { | ||||||
|  |                 if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                        subghz->scene_manager, SubGhzSceneStart)) { | ||||||
|  |                     scene_manager_stop(subghz->scene_manager); | ||||||
|  |                     view_dispatcher_stop(subghz->view_dispatcher); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|             break; |             break; | ||||||
| @ -314,11 +328,17 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | |||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case SubGhzCustomEventViewReadRAWSave: |         case SubGhzCustomEventViewReadRAWSave: | ||||||
|             if(subghz_scene_read_raw_update_filename(subghz)) { |             if(subghz_file_available(subghz) && subghz_scene_read_raw_update_filename(subghz)) { | ||||||
|                 scene_manager_set_scene_state( |                 scene_manager_set_scene_state( | ||||||
|                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSetRAW); |                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSetRAW); | ||||||
|                 subghz->txrx->rx_key_state = SubGhzRxKeyStateBack; |                 subghz->txrx->rx_key_state = SubGhzRxKeyStateBack; | ||||||
|                 scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); |                 scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); | ||||||
|  |             } else { | ||||||
|  |                 if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                        subghz->scene_manager, SubGhzSceneStart)) { | ||||||
|  |                     scene_manager_stop(subghz->scene_manager); | ||||||
|  |                     view_dispatcher_stop(subghz->view_dispatcher); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|             break; |             break; | ||||||
|  | |||||||
| @ -490,6 +490,23 @@ bool subghz_rename_file(SubGhz* subghz) { | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool subghz_file_available(SubGhz* subghz) { | ||||||
|  |     furi_assert(subghz); | ||||||
|  |     bool ret = true; | ||||||
|  |     Storage* storage = furi_record_open(RECORD_STORAGE); | ||||||
|  | 
 | ||||||
|  |     FS_Error fs_result = | ||||||
|  |         storage_common_stat(storage, furi_string_get_cstr(subghz->file_path), NULL); | ||||||
|  | 
 | ||||||
|  |     if(fs_result != FSE_OK) { | ||||||
|  |         dialog_message_show_storage_error(subghz->dialogs, "File not available\n file/directory"); | ||||||
|  |         ret = false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     furi_record_close(RECORD_STORAGE); | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| bool subghz_delete_file(SubGhz* subghz) { | bool subghz_delete_file(SubGhz* subghz) { | ||||||
|     furi_assert(subghz); |     furi_assert(subghz); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -124,6 +124,7 @@ bool subghz_save_protocol_to_file( | |||||||
|     const char* dev_file_name); |     const char* dev_file_name); | ||||||
| bool subghz_load_protocol_from_file(SubGhz* subghz); | bool subghz_load_protocol_from_file(SubGhz* subghz); | ||||||
| bool subghz_rename_file(SubGhz* subghz); | bool subghz_rename_file(SubGhz* subghz); | ||||||
|  | bool subghz_file_available(SubGhz* subghz); | ||||||
| bool subghz_delete_file(SubGhz* subghz); | bool subghz_delete_file(SubGhz* subghz); | ||||||
| void subghz_file_name_clear(SubGhz* subghz); | void subghz_file_name_clear(SubGhz* subghz); | ||||||
| bool subghz_path_is_file(FuriString* path); | bool subghz_path_is_file(FuriString* path); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Skorpionm
						Skorpionm