1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT

use glib::translate::*;
use std::{fmt, ptr};

glib::wrapper! {
    ///
    #[doc(alias = "PopplerMedia")]
    pub struct Media(Object<ffi::PopplerMedia>);

    match fn {
        type_ => || ffi::poppler_media_get_type(),
    }
}

impl Media {
    /// Returns the auto-play parameter.
    ///
    /// # Returns
    ///
    /// [`true`] if media should auto-play, [`false`] otherwise
    #[cfg(feature = "v20_4")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v20_4")))]
    #[doc(alias = "poppler_media_get_auto_play")]
    #[doc(alias = "get_auto_play")]
    pub fn is_auto_play(&self) -> bool {
        unsafe { from_glib(ffi::poppler_media_get_auto_play(self.to_glib_none().0)) }
    }

    /// Returns the media clip filename, in case of non-embedded media. filename might be
    /// a local relative or absolute path or a URI
    ///
    /// # Returns
    ///
    /// a filename, return value is owned by [`Media`][crate::Media] and should not be freed
    #[doc(alias = "poppler_media_get_filename")]
    #[doc(alias = "get_filename")]
    pub fn filename(&self) -> Option<glib::GString> {
        unsafe { from_glib_none(ffi::poppler_media_get_filename(self.to_glib_none().0)) }
    }

    /// Returns the media clip mime-type
    ///
    /// # Returns
    ///
    /// the mime-type, return value is owned by [`Media`][crate::Media] and should not be freed
    #[doc(alias = "poppler_media_get_mime_type")]
    #[doc(alias = "get_mime_type")]
    pub fn mime_type(&self) -> Option<glib::GString> {
        unsafe { from_glib_none(ffi::poppler_media_get_mime_type(self.to_glib_none().0)) }
    }

    /// Returns the repeat count parameter.
    ///
    /// # Returns
    ///
    /// Repeat count parameter (float)
    #[cfg(feature = "v20_4")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v20_4")))]
    #[doc(alias = "poppler_media_get_repeat_count")]
    #[doc(alias = "get_repeat_count")]
    pub fn repeat_count(&self) -> f32 {
        unsafe { ffi::poppler_media_get_repeat_count(self.to_glib_none().0) }
    }

    /// Returns the show controls parameter.
    ///
    /// # Returns
    ///
    /// [`true`] if media should show controls, [`false`] otherwise
    #[cfg(feature = "v20_4")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v20_4")))]
    #[doc(alias = "poppler_media_get_show_controls")]
    #[doc(alias = "get_show_controls")]
    pub fn shows_controls(&self) -> bool {
        unsafe { from_glib(ffi::poppler_media_get_show_controls(self.to_glib_none().0)) }
    }

    /// Whether the media clip is embedded in the PDF. If the result is [`true`], the embedded stream
    /// can be saved with [`save()`][Self::save()] or `poppler_media_save_to_callback()` function.
    /// If the result is [`false`], the media clip filename can be retrieved with
    /// [`filename()`][Self::filename()] function.
    ///
    /// # Returns
    ///
    /// [`true`] if media clip is embedded, [`false`] otherwise
    #[doc(alias = "poppler_media_is_embedded")]
    pub fn is_embedded(&self) -> bool {
        unsafe { from_glib(ffi::poppler_media_is_embedded(self.to_glib_none().0)) }
    }

    /// Saves embedded stream of `self` to a file indicated by `filename`.
    /// If `error` is set, [`false`] will be returned.
    /// Possible errors include those in the `G_FILE_ERROR` domain
    /// and whatever the save function generates.
    /// ## `filename`
    /// name of file to save
    ///
    /// # Returns
    ///
    /// [`true`], if the file successfully saved
    #[doc(alias = "poppler_media_save")]
    pub fn save(&self, filename: &str) -> Result<(), glib::Error> {
        unsafe {
            let mut error = ptr::null_mut();
            let is_ok = ffi::poppler_media_save(
                self.to_glib_none().0,
                filename.to_glib_none().0,
                &mut error,
            );
            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
            if error.is_null() {
                Ok(())
            } else {
                Err(from_glib_full(error))
            }
        }
    }

    //#[doc(alias = "poppler_media_save_to_callback")]
    //pub fn save_to_callback<P: FnMut(&Vec<u8>, usize, Option<&glib::Error>) -> bool>(&self, save_func: P) -> Result<(), glib::Error> {
    //    unsafe { TODO: call ffi:poppler_media_save_to_callback() }
    //}

    /// Saves embedded stream of `self` to a file referred to by `fd`.
    /// If `error` is set, [`false`] will be returned.
    /// Possible errors include those in the `G_FILE_ERROR` domain
    /// and whatever the save function generates.
    /// Note that this function takes ownership of `fd`; you must not operate on it
    /// again, nor close it.
    /// ## `fd`
    /// a valid file descriptor open for writing
    ///
    /// # Returns
    ///
    /// [`true`], if the file successfully saved
    #[cfg(feature = "v21_12")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v21_12")))]
    #[doc(alias = "poppler_media_save_to_fd")]
    pub fn save_to_fd(&self, fd: i32) -> Result<(), glib::Error> {
        unsafe {
            let mut error = ptr::null_mut();
            let is_ok = ffi::poppler_media_save_to_fd(self.to_glib_none().0, fd, &mut error);
            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
            if error.is_null() {
                Ok(())
            } else {
                Err(from_glib_full(error))
            }
        }
    }
}

impl fmt::Display for Media {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        f.write_str("Media")
    }
}