Files
BABA_YAGA/Assets/D.A. Assets/Figma-Converter-for-Unity/Scripts/Runtime/Web/DaGoogleFontsApi.cs
2026-05-13 23:02:02 +07:00

169 lines
5.5 KiB
C#

using DA_Assets.DAI;
using DA_Assets.Extensions;
using DA_Assets.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;
namespace DA_Assets.FCU
{
[Serializable]
public class DaGoogleFontsApi : MonoBehaviourLinkerRuntime<FigmaConverterUnity>
{
[SerializeField] FontSubset fontSubsets = FontSubset.Latin;
[SerializeProperty(nameof(fontSubsets))]
public FontSubset FontSubsets
{
get
{
return fontSubsets;
}
set
{
value |= FontSubset.Latin;
SetValue(ref fontSubsets, value);
}
}
public List<FontSubset> SelectedFontAssets
{
get
{
List<FontSubset> selectedSubsets = Enum.GetValues(fontSubsets.GetType())
.Cast<FontSubset>()
.Where(x => fontSubsets.HasFlag(x))
.ToList();
return selectedSubsets;
}
}
private Dictionary<FontSubset, List<FontItem>> googleFontsBySubset = new Dictionary<FontSubset, List<FontItem>>();
public async Task GetGoogleFontsBySubset(FontSubset fontSubset)
{
List<FontSubset> selectedSubsets = Enum.GetValues(fontSubsets.GetType())
.Cast<FontSubset>()
.Where(x => fontSubsets.HasFlag(x))
.ToList();
List<FontSubset> missingSubsets = new List<FontSubset>();
foreach (FontSubset subset in Enum.GetValues(fontSubsets.GetType()))
{
if (fontSubsets.HasFlag(subset) == false)
continue;
if (googleFontsBySubset.TryGetValue(subset, out var _) == false)
{
missingSubsets.Add(subset);
}
}
if (missingSubsets.Count == 0)
{
return;
}
foreach (FontSubset missingSubset in missingSubsets)
{
string missingSubsetName = missingSubset.ToLower();
if (missingSubsetName == FontSubset.LatinExt.ToLower())
{
missingSubsetName = "latin-ext";
}
DALogger.Log(FcuLocKey.loading_google_fonts.Localize(missingSubset.ToString()));
string gfontsUrl = "https://content-webfonts.googleapis.com/v1/webfonts?subset={0}&key={1}";
string url = string.Format(gfontsUrl, missingSubsetName, FcuConfig.Instance.GoogleFontsApiKey);
DARequest request = new DARequest
{
RequestType = RequestType.Get,
Query = url
};
DAResult<FontRoot> return0 = await monoBeh.RequestSender.SendRequest<FontRoot>(request);
if (@return0.Success)
{
googleFontsBySubset.Add(missingSubset, @return0.Object.Items);
}
else
{
DALogger.LogError($"Can't get '{missingSubset}' fonts from Google repository.");
}
}
}
public string GetUrlByWeight(FontItem fontItem, int weight, FontStyle fontStyle)
{
try
{
if (fontStyle == FontStyle.Normal)
{
switch (weight)
{
case 100: return fontItem.Files["100"];
case 200: return fontItem.Files["200"];
case 300: return fontItem.Files["300"];
case 400: return fontItem.Files["regular"];
case 500: return fontItem.Files["500"];
case 600: return fontItem.Files["600"];
case 700: return fontItem.Files["700"];
case 800: return fontItem.Files["800"];
case 900: return fontItem.Files["900"];
}
}
else if (fontStyle == FontStyle.Italic)
{
switch (weight)
{
case 100: return fontItem.Files["100italic"];
case 200: return fontItem.Files["200italic"];
case 300: return fontItem.Files["300italic"];
case 400: return fontItem.Files["italic"];
case 500: return fontItem.Files["500italic"];
case 600: return fontItem.Files["600italic"];
case 700: return fontItem.Files["700italic"];
case 800: return fontItem.Files["800italic"];
case 900: return fontItem.Files["900italic"];
}
}
}
catch
{
}
return null;
}
public FontItem GetFontItem(FontMetadata fontMetadata, FontSubset fontSubset)
{
try
{
googleFontsBySubset.TryGetValue(fontSubset, out var googleFonts);
foreach (FontItem item in googleFonts)
{
if (item.Family.ToLower() == fontMetadata.Family.ToLower())
{
return item;
}
}
}
catch
{
}
return default;
}
}
}