Perbaiki ikon internet yang kadang hilang / bikin crash

- Semua SVG diraster ke PNG lebih dulu (install, sync, thumbnail). SVG dari
  internet sebagian memakai fitur yang tidak didukung renderer sehingga ikon
  tidak muncul atau proses menggambar berhenti.
- fill="currentColor" diganti warna brand (penyebab tersering ikon Material/
  Remix gagal diraster), rasterisasi dibungkus recover
- Thumbnail pencarian: placeholder + cache unduhan + batas 3 unduhan bersamaan
- Kandidat ikon yang gagal dilewati, install tetap lanjut ke ikon default
- Race pada data ikon pilihan diperbaiki (mutex); tes -race hijau
- Baris status modal pencarian dipindah ke barisnya sendiri (tidak bertabrakan
  dengan tombol Back/Search di layar berskala besar)
This commit is contained in:
oxpoe committed 2026-10-13 08:00:12 +07:00
1 parent 0885d69015
commit 6e6f9afea9
9 files changed
+312 -72

No files matched your search

+11 -8
View File
@@ -73,10 +73,19 @@ func fromFile(src, slug string) (string, error) {
}
// SaveBytes menulis data ikon ke direktori ikon XDG.
// SVG diraster dulu ke PNG: sebagian ikon internet memakai fitur SVG yang membuat
// proses menggambar berhenti (panic) atau tidak tampil di UI/desktop.
func SaveBytes(data []byte, ext, slug string) (string, error) {
if ext == "" {
ext = ".png"
}
if ext == ".svg" {
raster, err := Rasterize(data, 256)
if err != nil {
return "", err
}
data, ext = raster, ".png"
}
if err := os.MkdirAll(xdg.IconsDir(), 0o755); err != nil {
return "", err
}
@@ -86,14 +95,8 @@ func SaveBytes(data []byte, ext, slug string) (string, error) {
return dest, os.WriteFile(dest, data, 0o644)
}
// SaveData menyimpan ikon yang sudah ada di memori (mis. hasil pencarian online).
func SaveData(data []byte, slug string) (string, error) {
ext := sniffExt(data)
if ext == "" {
return "", errors.New("unsupported icon format")
}
return SaveBytes(data, ext, slug)
}
// Ext menebak ekstensi file dari isi data (dipakai untuk ikon yang sudah diunduh UI).
func Ext(data []byte) string { return sniffExt(data) }
// IconBytes adalah ikon default LazyRun.
func IconBytes() []byte { return assets.Icon }