Humble Bundle support
[GameHub.git] / src / ui / windows / WebAuthWindow.vala
blobd8f7c53cc7e7331b288934993343284472150a8b
1 using Gtk;
2 using GLib;
3 using WebKit;
4 using Soup;
5 using GameHub.Utils;
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);
22 title = source;
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);
30 set_modal(true);
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("\""))
54 is_finished = true;
55 finished(cookie.value);
56 destroy();
57 break;
60 });
63 if(!is_finished && success_url_prefix != null && uri.has_prefix(success_url_prefix))
65 is_finished = true;
66 finished(uri.substring(success_url_prefix.length));
67 destroy();
69 });
71 webview.load_uri(url);
73 add(webview);
75 destroy.connect(() => { if(!is_finished) canceled(); });