lingxia_platform/traits/
media_interaction.rs1use crate::error::PlatformError;
2
3#[derive(Debug, Clone)]
4pub struct PreviewMediaItem {
5 pub path: String,
6 pub media_type: MediaKind,
7 pub cover_path: Option<String>,
8}
9
10#[derive(Debug, Clone, Default)]
11pub struct PreviewMediaRequest {
12 pub items: Vec<PreviewMediaItem>,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub enum MediaKind {
17 Image,
18 Video,
19 Unknown,
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23pub enum ChooseMediaMode {
24 Images,
25 Videos,
26 Mix,
27}
28
29#[derive(Debug, Clone, Copy, PartialEq, Eq)]
30pub enum MediaSource {
31 Album,
32 Camera,
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq)]
36pub enum CameraFacing {
37 Front,
38 Back,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq)]
42pub enum MediaQuality {
43 Original,
44 Compressed,
45}
46
47#[derive(Debug, Clone)]
48pub struct ChooseMediaRequest {
49 pub max_count: u32,
50 pub mode: ChooseMediaMode,
51 pub source_types: Vec<MediaSource>,
52 pub max_duration_seconds: Option<u32>,
53 pub camera_facing: Option<CameraFacing>,
54 pub callback_id: u64,
55}
56
57impl Default for ChooseMediaRequest {
58 fn default() -> Self {
59 Self {
60 max_count: 9,
61 mode: ChooseMediaMode::Images,
62 source_types: vec![MediaSource::Album, MediaSource::Camera],
63 max_duration_seconds: None,
64 camera_facing: None,
65 callback_id: 0,
66 }
67 }
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
71pub enum ScanType {
72 BarCode,
73 QrCode,
74 DataMatrix,
75 Pdf417,
76}
77
78#[derive(Debug, Clone)]
79pub struct ScanCodeRequest {
80 pub scan_types: Vec<ScanType>,
81 pub only_from_camera: bool,
82 pub callback_id: u64,
83}
84
85impl Default for ScanCodeRequest {
86 fn default() -> Self {
87 Self {
88 scan_types: Vec::new(),
89 only_from_camera: true,
90 callback_id: 0,
91 }
92 }
93}
94
95#[derive(Debug, Clone)]
96pub struct SaveMediaRequest {
97 pub file_uri: String,
98 pub callback_id: u64,
99}
100
101pub trait MediaInteraction: Send + Sync + 'static {
102 fn preview_media(&self, request: PreviewMediaRequest) -> Result<(), PlatformError>;
103 fn choose_media(&self, request: ChooseMediaRequest) -> Result<(), PlatformError>;
104 fn scan_code(&self, request: ScanCodeRequest) -> Result<(), PlatformError>;
105 fn save_image_to_photos_album(&self, request: SaveMediaRequest) -> Result<(), PlatformError>;
106 fn save_video_to_photos_album(&self, request: SaveMediaRequest) -> Result<(), PlatformError>;
107}