Skip to main content

lingxia_platform/traits/
media_interaction.rs

1use 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}