dialogs-api.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "dialogs-i.h"
  2. #include "dialogs-api-lock.h"
  3. /****************** File select ******************/
  4. bool dialog_file_select_show(
  5. DialogsApp* context,
  6. const char* path,
  7. const char* extension,
  8. char* result,
  9. uint8_t result_size,
  10. const char* preselected_filename) {
  11. FuriApiLock lock = API_LOCK_INIT_LOCKED();
  12. furi_check(lock != NULL);
  13. DialogsAppData data = {
  14. .file_select = {
  15. .path = path,
  16. .extension = extension,
  17. .result = result,
  18. .result_size = result_size,
  19. .preselected_filename = preselected_filename,
  20. }};
  21. DialogsAppReturn return_data;
  22. DialogsAppMessage message = {
  23. .lock = lock,
  24. .command = DialogsAppCommandFileOpen,
  25. .data = &data,
  26. .return_data = &return_data,
  27. };
  28. furi_check(osMessageQueuePut(context->message_queue, &message, 0, osWaitForever) == osOK);
  29. API_LOCK_WAIT_UNTIL_UNLOCK_AND_FREE(lock);
  30. return return_data.bool_value;
  31. }
  32. /****************** Message ******************/
  33. DialogMessageButton dialog_message_show(DialogsApp* context, const DialogMessage* dialog_message) {
  34. FuriApiLock lock = API_LOCK_INIT_LOCKED();
  35. furi_check(lock != NULL);
  36. DialogsAppData data = {
  37. .dialog = {
  38. .message = dialog_message,
  39. }};
  40. DialogsAppReturn return_data;
  41. DialogsAppMessage message = {
  42. .lock = lock,
  43. .command = DialogsAppCommandDialog,
  44. .data = &data,
  45. .return_data = &return_data,
  46. };
  47. furi_check(osMessageQueuePut(context->message_queue, &message, 0, osWaitForever) == osOK);
  48. API_LOCK_WAIT_UNTIL_UNLOCK_AND_FREE(lock);
  49. return return_data.dialog_value;
  50. }
  51. /****************** Storage error ******************/
  52. void dialog_message_show_storage_error(DialogsApp* context, const char* error_text) {
  53. DialogMessage* message = dialog_message_alloc();
  54. dialog_message_set_text(message, error_text, 88, 32, AlignCenter, AlignCenter);
  55. dialog_message_set_icon(message, &I_SDQuestion_35x43, 5, 6);
  56. dialog_message_set_buttons(message, "Back", NULL, NULL);
  57. dialog_message_show(context, message);
  58. dialog_message_free(message);
  59. }