Skip to main content

nnsdk/nn/
web.rs

1#[allow(unused_imports)]
2use self::super::root;
3pub mod offlinewebsession;
4
5#[repr(C)]
6pub struct ShowOfflineHtmlPageArg {
7    data: [u8; 0x2000],
8}
9#[repr(C)]
10#[derive(Copy, Clone, Debug, PartialEq)]
11pub enum OfflineBootDisplayKind {
12    Default,
13    White,
14    Black,
15    Screenshot,
16    BlurredScreenshot,
17}
18#[repr(C)]
19#[derive(Copy, Clone, Debug, PartialEq)]
20pub enum OfflineBackgroundKind {
21    Default,
22    Screenshot,
23    BlurredScreenshot,
24}
25#[repr(C)]
26#[derive(Copy, Clone, Debug, PartialEq)]
27pub enum WebSessionBootMode {
28    Default,
29    InitiallyHidden,
30}
31extern "C" {
32    #[link_name = "\u{1}_ZN2nn3web19ShowOfflineHtmlPageEPNS0_26OfflineHtmlPageReturnValueERKNS0_22ShowOfflineHtmlPageArgE"]
33    pub fn ShowOfflineHtmlPage(
34        return_value: *mut OfflineHtmlPageReturnValue,
35        arg: *const ShowOfflineHtmlPageArg,
36    ) -> u32;
37}
38extern "C" {
39    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArgC2EPKc"]
40    pub fn ShowOfflineHtmlPageArg(
41        this: *mut ShowOfflineHtmlPageArg,
42        page_path: *const u8,
43    );
44}
45extern "C" {
46    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg21SetJsExtensionEnabledEb"]
47    pub fn SetOfflineJsExtensionEnabled(
48        this: *mut ShowOfflineHtmlPageArg,
49        enabled: bool,
50    );
51}
52extern "C" {
53    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg16SetFooterEnabledEb"]
54    pub fn SetOfflineFooterEnabled(this: *mut ShowOfflineHtmlPageArg, enabled: bool);
55}
56extern "C" {
57    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg17SetPointerEnabledEb"]
58    pub fn SetOfflinePointerEnabled(this: *mut ShowOfflineHtmlPageArg, enabled: bool);
59}
60extern "C" {
61    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg25SetBootLoadingIconEnabledEb"]
62    pub fn SetOfflineBootLoadingIconEnabled(
63        this: *mut ShowOfflineHtmlPageArg,
64        enabled: bool,
65    );
66}
67extern "C" {
68    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg18SetWebAudioEnabledEb"]
69    pub fn SetOfflineWebAudioEnabled(this: *mut ShowOfflineHtmlPageArg, enabled: bool);
70}
71extern "C" {
72    /// On a scale of 0.0 to 4.0
73    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg22OverrideWebAudioVolumeEf"]
74    pub fn OverrideOfflineWebAudioVolume(
75        this: *mut ShowOfflineHtmlPageArg,
76        volume: f32,
77    );
78}
79extern "C" {
80    /// On a scale of 0.0 to 4.0
81    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg24OverrideMediaAudioVolumeEf"]
82    pub fn OverrideOfflineMediaAudioVolume(
83        this: *mut ShowOfflineHtmlPageArg,
84        volume: f32,
85    );
86}
87extern "C" {
88    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg20SetBootAsMediaPlayerEb"]
89    pub fn SetOfflineBootAsMediaPlayer(
90        this: *mut ShowOfflineHtmlPageArg,
91        enabled: bool,
92    );
93}
94extern "C" {
95    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg18SetPageFadeEnabledEb"]
96    pub fn SetOfflinePageFadeEnabled(this: *mut ShowOfflineHtmlPageArg, enabled: bool);
97}
98extern "C" {
99    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg19SetPageCacheEnabledEb"]
100    pub fn SetOfflinePageCacheEnabled(this: *mut ShowOfflineHtmlPageArg, enabled: bool);
101}
102extern "C" {
103    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg18SetBootDisplayKindENS0_22OfflineBootDisplayKindE"]
104    pub fn SetOfflineBootDisplayKind(
105        this: *mut ShowOfflineHtmlPageArg,
106        boot_display_kind: OfflineBootDisplayKind,
107    );
108}
109extern "C" {
110    #[link_name = "\u{1}_ZN2nn3web22ShowOfflineHtmlPageArg17SetBackgroundKindERKNS0_21OfflineBackgroundKindE"]
111    pub fn SetOfflineBackgroundKind(
112        this: *mut ShowOfflineHtmlPageArg,
113        background_kind: *const OfflineBackgroundKind,
114    );
115}
116extern "C" {
117    #[link_name = "\u{1}_ZN2nn3web11SetBootModeEPNS0_22ShowOfflineHtmlPageArgENS0_18WebSessionBootModeE"]
118    pub fn SetBootMode(webpage_arg: &ShowOfflineHtmlPageArg, mode: WebSessionBootMode);
119}
120impl ShowOfflineHtmlPageArg {
121    #[cfg(not(feature = "rustc-dep-of-std"))]
122    #[inline]
123    pub fn new<T: AsRef<[u8]>>(page_path: T) -> Result<Self, core::str::Utf8Error> {
124        let mut path_bytes = page_path.as_ref().to_vec();
125
126        if path_bytes.len() > 3072 {
127            path_bytes.truncate(3071);
128        }
129
130        path_bytes.append(&mut "\0".as_bytes().to_vec());
131
132        unsafe {
133            let mut instance = ShowOfflineHtmlPageArg { data: [0; 0x2000] };
134            ShowOfflineHtmlPageArg(&mut instance, path_bytes.as_ptr());
135            Ok(instance)
136        }
137    }
138
139    pub fn set_background_kind(&mut self, kind: OfflineBackgroundKind) {
140        unsafe { SetOfflineBackgroundKind(self, &kind) }
141    }
142
143    pub fn set_boot_display_kind(&mut self, kind: OfflineBootDisplayKind) {
144        unsafe { SetOfflineBootDisplayKind(self, kind) }
145    }
146
147    pub fn display_footer(&mut self, enabled: bool) {
148        unsafe { SetOfflineFooterEnabled(self, enabled) }
149    }
150
151    pub fn enable_javascript(&mut self, enabled: bool) {
152        unsafe { SetOfflineJsExtensionEnabled(self, enabled) }
153    }
154
155    pub fn enable_pointer(&mut self, enabled: bool) {
156        unsafe { SetOfflinePointerEnabled(self, enabled) }
157    }
158
159    pub fn enable_boot_loading_icon(&mut self, enabled: bool) {
160        unsafe { SetOfflineBootLoadingIconEnabled(self, enabled) }
161    }
162
163    pub fn enable_web_audio(&mut self, enabled: bool) {
164        unsafe { SetOfflineWebAudioEnabled(self, enabled) }
165    }
166
167    pub fn set_boot_mode(&mut self, mode: WebSessionBootMode) {
168        unsafe { SetBootMode(self, mode) }
169    }
170}
171#[repr(C)]
172pub struct OfflineHtmlPageReturnValue {
173    exit_reason: u64,
174    last_url: [u8; 4096],
175    last_url_size: u64,
176}
177#[repr(C)]
178#[derive(Copy, Clone, Debug, PartialEq)]
179pub enum OfflineExitReason {
180    ExitPressed = 0,
181    BackPressed = 1,
182    Requested = 2,
183    LastUrl = 3,
184    ErrorDialog = 7,
185    Unexpected = 20,
186}
187extern "C" {
188    #[link_name = "\u{1}_ZN2nn3web26OfflineHtmlPageReturnValueC1Ev"]
189    pub fn OfflineHtmlPageReturnValue(this: *mut OfflineHtmlPageReturnValue);
190}
191extern "C" {
192    #[link_name = "\u{1}_ZNK2nn3web26OfflineHtmlPageReturnValue20GetOfflineExitReasonEv"]
193    pub fn GetOfflineExitReason(
194        this: *const OfflineHtmlPageReturnValue,
195    ) -> OfflineExitReason;
196}
197extern "C" {
198    #[link_name = "\u{1}_ZNK2nn3web26OfflineHtmlPageReturnValue10GetLastUrlEv"]
199    pub fn GetLastUrl(this: *const OfflineHtmlPageReturnValue) -> *const u8;
200}
201extern "C" {
202    #[link_name = "\u{1}_ZNK2nn3web26OfflineHtmlPageReturnValue14GetLastUrlSizeEv"]
203    pub fn GetLastUrlSize(this: *const OfflineHtmlPageReturnValue) -> usize;
204}
205impl OfflineHtmlPageReturnValue {
206    pub fn new() -> Self {
207        let mut instance = OfflineHtmlPageReturnValue {
208            exit_reason: 0,
209            last_url: [0; 4096],
210            last_url_size: 0,
211        };
212
213        unsafe {
214            OfflineHtmlPageReturnValue(&mut instance);
215        }
216
217        instance
218    }
219
220    pub fn get_exit_reason(&self) -> OfflineExitReason {
221        unsafe { GetOfflineExitReason(self) }
222    }
223}