64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
using System;
|
|
using System.Text.RegularExpressions;
|
|
using System.Threading.Tasks;
|
|
using Gallery.Util;
|
|
using Gallery.Util.Interface;
|
|
using Gallery.Util.Model;
|
|
using Xamarin.Forms;
|
|
|
|
namespace Gallery.Danbooru
|
|
{
|
|
public class GallerySource : IGallerySource
|
|
{
|
|
public string Name => "Danbooru";
|
|
public string Route => "danbooru";
|
|
public string FlyoutIconKey => "Danbooru";
|
|
public string HomePage => "https://danbooru.donmai.us";
|
|
|
|
public async Task<GalleryItem[]> GetRecentItemsAsync(int page)
|
|
{
|
|
var url = $"https://danbooru.donmai.us/posts?page={page}";
|
|
var (result, error) = await NetHelper.RequestObject<GalleryItem[]>(url, contentHandler: ContentHandler);
|
|
|
|
if (result == null || !string.IsNullOrEmpty(error))
|
|
{
|
|
Log.Error("danbooru.content.load", $"failed to load content array, error: {error}");
|
|
return null;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
private string ContentHandler(string content)
|
|
{
|
|
var regex = new Regex(@"<article id=""post_\d+"".+?data-id=""(\d+)"".+?data-tags=""([^""]+?)"".+?data-width=""(\d+?)"" data-height=""(\d+?)"".+?data-source=""([^""]+?)"" data-uploader-id=""(\d+?)"" data-normalized-source=""([^""]+?)"".+?data-file-url=""([^""]+?)"".+?data-preview-file-url=""([^""]+?)""", RegexOptions.Multiline);
|
|
var matches = regex.Matches(content);
|
|
var array = new string[matches.Count];
|
|
for (var i = 0; i < array.Length; i++)
|
|
{
|
|
var g = matches[i].Groups;
|
|
var tags = g[2].Value.Replace(" ", "\",\"");
|
|
array[i] = $"{{\"Id\":{g[1].Value},\"Tags\":[\"{tags}\"],\"Width\":{g[3].Value},\"Height\":{g[4].Value},\"Source\":\"{g[7].Value}\",\"UserId\":\"{g[6].Value}\",\"RawUrl\":\"{g[8].Value}\",\"PreviewUrl\":\"{g[9].Value}\"}}";
|
|
}
|
|
return $"[{string.Join(',', array)}]";
|
|
}
|
|
|
|
public void SetCookie()
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
public void InitDynamicResources(string family, ResourceDictionary light, ResourceDictionary dark)
|
|
{
|
|
var icon = new FontImageSource
|
|
{
|
|
FontFamily = family,
|
|
Glyph = "\uf5d2",
|
|
Size = 18.0
|
|
};
|
|
light.Add(FlyoutIconKey, icon);
|
|
dark.Add(FlyoutIconKey, icon);
|
|
}
|
|
}
|
|
}
|