[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.event == SubmenuIndexDelete) { | ||||
|             if(subghz_file_available(subghz)) { | ||||
|                 scene_manager_set_scene_state( | ||||
|                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerNoSet); | ||||
|                 scene_manager_set_scene_state( | ||||
|                     subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexDelete); | ||||
|                 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) { | ||||
|             if(subghz_file_available(subghz)) { | ||||
|                 furi_string_reset(subghz->file_path_tmp); | ||||
|                 scene_manager_set_scene_state( | ||||
|                     subghz->scene_manager, SubGhzSceneMoreRAW, SubmenuIndexEdit); | ||||
|                 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; | ||||
|  | ||||
| @ -198,6 +198,7 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | ||||
|             break; | ||||
| 
 | ||||
|         case SubGhzCustomEventViewReadRAWMore: | ||||
|             if(subghz_file_available(subghz)) { | ||||
|                 if(subghz_scene_read_raw_update_filename(subghz)) { | ||||
|                     scene_manager_set_scene_state( | ||||
|                         subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSet); | ||||
| @ -207,11 +208,18 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | ||||
|                 } else { | ||||
|                     furi_crash("SubGhz: RAW file name update error."); | ||||
|                 } | ||||
|             } 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); | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
| 
 | ||||
|         case SubGhzCustomEventViewReadRAWSendStart: | ||||
| 
 | ||||
|             if(subghz_scene_read_raw_update_filename(subghz)) { | ||||
|             if(subghz_file_available(subghz) && subghz_scene_read_raw_update_filename(subghz)) { | ||||
|                 //start send
 | ||||
|                 subghz->state_notifications = SubGhzNotificationStateIDLE; | ||||
|                 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; | ||||
|                     } | ||||
|                 } | ||||
|             } 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; | ||||
|             break; | ||||
| @ -314,11 +328,17 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { | ||||
|             break; | ||||
| 
 | ||||
|         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( | ||||
|                     subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSetRAW); | ||||
|                 subghz->txrx->rx_key_state = SubGhzRxKeyStateBack; | ||||
|                 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; | ||||
|             break; | ||||
|  | ||||
| @ -490,6 +490,23 @@ bool subghz_rename_file(SubGhz* subghz) { | ||||
|     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) { | ||||
|     furi_assert(subghz); | ||||
| 
 | ||||
|  | ||||
| @ -124,6 +124,7 @@ bool subghz_save_protocol_to_file( | ||||
|     const char* dev_file_name); | ||||
| bool subghz_load_protocol_from_file(SubGhz* subghz); | ||||
| bool subghz_rename_file(SubGhz* subghz); | ||||
| bool subghz_file_available(SubGhz* subghz); | ||||
| bool subghz_delete_file(SubGhz* subghz); | ||||
| void subghz_file_name_clear(SubGhz* subghz); | ||||
| bool subghz_path_is_file(FuriString* path); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Skorpionm
						Skorpionm