mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Add SVG favicon support
This commit is contained in:
parent
f6740bce59
commit
cab0cb8e5a
1 changed files with 43 additions and 14 deletions
|
|
@ -161,13 +161,13 @@ public abstract class ChromiumBookmarkLoader : IBookmarkLoader
|
||||||
|
|
||||||
using var cmd = connection.CreateCommand();
|
using var cmd = connection.CreateCommand();
|
||||||
cmd.CommandText = @"
|
cmd.CommandText = @"
|
||||||
SELECT f.id, b.image_data
|
SELECT f.id, b.image_data
|
||||||
FROM favicons f
|
FROM favicons f
|
||||||
JOIN favicon_bitmaps b ON f.id = b.icon_id
|
JOIN favicon_bitmaps b ON f.id = b.icon_id
|
||||||
JOIN icon_mapping m ON f.id = m.icon_id
|
JOIN icon_mapping m ON f.id = m.icon_id
|
||||||
WHERE m.page_url LIKE @url
|
WHERE m.page_url LIKE @url
|
||||||
ORDER BY b.width DESC
|
ORDER BY b.width DESC
|
||||||
LIMIT 1";
|
LIMIT 1";
|
||||||
|
|
||||||
cmd.Parameters.AddWithValue("@url", $"%{domain}%");
|
cmd.Parameters.AddWithValue("@url", $"%{domain}%");
|
||||||
|
|
||||||
|
|
@ -212,14 +212,29 @@ public abstract class ChromiumBookmarkLoader : IBookmarkLoader
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var ms = new MemoryStream(imageData);
|
// SVG 파일 시그니처 확인 (SVG XML 헤더 또는 특수 마커 검사)
|
||||||
using var bitmap = SKBitmap.Decode(ms);
|
bool isSvg = IsSvgData(imageData);
|
||||||
if (bitmap != null)
|
|
||||||
|
if (isSvg)
|
||||||
{
|
{
|
||||||
using var image = SKImage.FromBitmap(bitmap);
|
// SVG 데이터는 있는 그대로 저장 (.svg 확장자 사용)
|
||||||
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
|
string svgOutputPath = Path.ChangeExtension(outputPath, ".svg");
|
||||||
using var fs = File.OpenWrite(outputPath);
|
File.WriteAllBytes(svgOutputPath, imageData);
|
||||||
data.SaveTo(fs);
|
// 원래 경로 대신 SVG 경로를 반환하도록 outputPath 변수를 업데이트
|
||||||
|
File.Copy(svgOutputPath, outputPath, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 기존 비트맵 처리 코드
|
||||||
|
using var ms = new MemoryStream(imageData);
|
||||||
|
using var bitmap = SKBitmap.Decode(ms);
|
||||||
|
if (bitmap != null)
|
||||||
|
{
|
||||||
|
using var image = SKImage.FromBitmap(bitmap);
|
||||||
|
using var data = image.Encode(SKEncodedImageFormat.Png, 100);
|
||||||
|
using var fs = File.OpenWrite(outputPath);
|
||||||
|
data.SaveTo(fs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
@ -227,4 +242,18 @@ public abstract class ChromiumBookmarkLoader : IBookmarkLoader
|
||||||
Log.Exception($"Failed to save image: {outputPath}", ex);
|
Log.Exception($"Failed to save image: {outputPath}", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsSvgData(byte[] data)
|
||||||
|
{
|
||||||
|
if (data == null || data.Length < 5)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// SVG 파일 시그니처 확인
|
||||||
|
// ASCII로 시작하는 SVG XML 헤더 확인
|
||||||
|
string header = System.Text.Encoding.ASCII.GetString(data, 0, Math.Min(data.Length, 200)).ToLower();
|
||||||
|
|
||||||
|
return header.Contains("<svg") ||
|
||||||
|
header.StartsWith("<?xml") && header.Contains("<svg") ||
|
||||||
|
header.Contains("image/svg+xml");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue