folder_ios.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //go:build ios
  2. // +build ios
  3. package mobile
  4. /*
  5. #cgo CFLAGS: -x objective-c
  6. #cgo LDFLAGS: -framework Foundation
  7. #import <stdlib.h>
  8. #import <stdbool.h>
  9. bool iosCanList(const char* url);
  10. bool iosCreateListable(const char* url);
  11. char* iosList(const char* url);
  12. */
  13. import "C"
  14. import (
  15. "errors"
  16. "strings"
  17. "unsafe"
  18. "fyne.io/fyne/v2"
  19. "fyne.io/fyne/v2/storage"
  20. )
  21. func canListURI(uri fyne.URI) bool {
  22. uriStr := C.CString(uri.String())
  23. defer C.free(unsafe.Pointer(uriStr))
  24. return bool(C.iosCanList(uriStr))
  25. }
  26. func createListableURI(uri fyne.URI) error {
  27. uriStr := C.CString(uri.String())
  28. defer C.free(unsafe.Pointer(uriStr))
  29. ok := bool(C.iosCreateListable(uriStr))
  30. if ok {
  31. return nil
  32. }
  33. return errors.New("failed to create directory")
  34. }
  35. func listURI(uri fyne.URI) ([]fyne.URI, error) {
  36. uriStr := C.CString(uri.String())
  37. defer C.free(unsafe.Pointer(uriStr))
  38. str := C.iosList(uriStr)
  39. parts := strings.Split(C.GoString(str), "|")
  40. var list []fyne.URI
  41. for _, part := range parts {
  42. if len(part) == 0 {
  43. continue
  44. }
  45. list = append(list, storage.NewURI(part))
  46. }
  47. return list, nil
  48. }