7 namespace GameHub
.UI
.Windows
9 public class WebAuthWindow
: Window
11 private WebView webview
;
13 private bool is_finished
= false;
15 public signal void finished(string url
);
16 public signal void canceled();
18 public WebAuthWindow(string source
, string url
, string? success_url_prefix
, string? success_cookie_name
=null)
20 Object(transient_for
: Windows
.MainWindow
.instance
);
23 var titlebar
= new
HeaderBar();
24 titlebar
.title
= title
;
25 titlebar
.show_close_button
= true;
26 set_titlebar(titlebar
);
28 set_size_request(640, 800);
32 webview
= new
WebView();
34 var cookies_file
= FSUtils
.expand(FSUtils
.Paths
.Cache
.Cookies
);
35 webview
.web_context
.get_cookie_manager().set_persistent_storage(cookies_file
, CookiePersistentStorage
.TEXT
);
37 webview
.get_settings().enable_mediasource
= true;
38 webview
.get_settings().enable_smooth_scrolling
= true;
40 webview
.load_changed
.connect(e
=> {
41 var uri
= webview
.get_uri();
42 titlebar
.title
= webview
.title
;
43 titlebar
.subtitle
= uri
.split("?")[0];
44 titlebar
.tooltip_text
= uri
;
46 if(!is_finished
&& success_cookie_name
!= null)
48 webview
.web_context
.get_cookie_manager().get_cookies
.begin(uri
, null, (obj
, res
) => {
49 var cookies
= webview
.web_context
.get_cookie_manager().get_cookies
.end(res
);
50 foreach(var cookie
in cookies
)
52 if(!is_finished
&& cookie
.name
== success_cookie_name
&& !cookie
.value
.contains("\""))
55 finished(cookie
.value
);
63 if(!is_finished
&& success_url_prefix
!= null && uri
.has_prefix(success_url_prefix
))
66 finished(uri
.substring(success_url_prefix
.length
));
71 webview
.load_uri(url
);
75 destroy
.connect(() => { if(!is_finished
) canceled(); });