118 lines
4.3 KiB
C#
118 lines
4.3 KiB
C#
using Android.Content;
|
|
using Android.Webkit;
|
|
using Gallery.Droid.Renderers;
|
|
using Gallery.Login;
|
|
using Gallery.Utils;
|
|
using Xamarin.Forms;
|
|
using Xamarin.Forms.Platform.Android;
|
|
|
|
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
|
|
namespace Gallery.Droid.Renderers
|
|
{
|
|
public class HybridWebViewRenderer : WebViewRenderer
|
|
{
|
|
public HybridWebViewRenderer(Context context) : base(context)
|
|
{
|
|
}
|
|
|
|
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
|
|
{
|
|
base.OnElementChanged(e);
|
|
|
|
if (e.NewElement is HybridWebView webView)
|
|
{
|
|
Control.SetWebViewClient(new PixivWebViewClient(this));
|
|
Control.LoadUrl(webView.Uri);
|
|
}
|
|
}
|
|
|
|
private class PixivWebViewClient : FormsWebViewClient
|
|
{
|
|
private readonly HybridWebView webView;
|
|
|
|
public PixivWebViewClient(HybridWebViewRenderer renderer) : base(renderer)
|
|
{
|
|
if (renderer.Element is HybridWebView view)
|
|
{
|
|
webView = view;
|
|
}
|
|
}
|
|
|
|
//public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
|
|
//{
|
|
// var uri = request.Url;
|
|
// if (uri.Host == "www.pixiv.net" && uri.Path == "/")
|
|
// {
|
|
// var client = new HttpClient(new HttpClientHandler { UseCookies = false })
|
|
// {
|
|
// BaseAddress = new Uri($"{uri.Scheme}://{uri.Host}"),
|
|
// Timeout = TimeSpan.FromSeconds(30)
|
|
// };
|
|
// var pathAndQuery = uri.Path;
|
|
// if (!string.IsNullOrEmpty(uri.Query))
|
|
// {
|
|
// pathAndQuery += "?" + uri.EncodedQuery;
|
|
// }
|
|
// using (var req = new HttpRequestMessage(
|
|
// request.Method == "POST" ? HttpMethod.Post : HttpMethod.Get,
|
|
// pathAndQuery))
|
|
// {
|
|
// var headers = req.Headers;
|
|
// if (request.RequestHeaders != null)
|
|
// {
|
|
// foreach (var h in request.RequestHeaders)
|
|
// {
|
|
// headers.Add(h.Key, h.Value);
|
|
// }
|
|
// }
|
|
|
|
// using (var response = client.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).Result)
|
|
// {
|
|
// if (response.Headers.TryGetValues("x-userid", out var vals))
|
|
// {
|
|
// Configs.SetUserId(string.Join(';', vals), true);
|
|
// }
|
|
// }
|
|
// }
|
|
// return true;
|
|
// }
|
|
// return base.ShouldOverrideUrlLoading(view, request);
|
|
//}
|
|
|
|
public override void OnPageFinished(Android.Webkit.WebView view, string url)
|
|
{
|
|
base.OnPageFinished(view, url);
|
|
|
|
if (url == "https://www.pixiv.net/" ||
|
|
url == "https://www.pixiv.net/en/")
|
|
{
|
|
var cookieManager = CookieManager.Instance;
|
|
var cookie = cookieManager.GetCookie(url);
|
|
Configs.SetCookie(cookie, true);
|
|
|
|
// user-id
|
|
if (cookie != null)
|
|
{
|
|
var index = cookie.IndexOf("PHPSESSID=");
|
|
if (index >= 0)
|
|
{
|
|
var session = cookie.Substring(index + 10);
|
|
index = session.IndexOf('_');
|
|
if (index > 0)
|
|
{
|
|
session = session.Substring(0, index);
|
|
Configs.SetUserId(session, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (webView != null)
|
|
{
|
|
webView.OnLoginHandle();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|