Ikon: cari per domain/URL gambar + semua format dikonversi ke PNG
- Dialog ikon: nama aplikasi -> Iconify; domain (mikrotik.com) -> ikon resmi situs (manifest 512, apple-touch-icon, favicon) + layanan favicon; URL gambar -> langsung - Contoh kasus: 'winbox' cuma punya 1 ikon tidak nyambung di Iconify, tapi 'mikrotik.com' memberi ikon resminya (5 pilihan, semuanya PNG) - Decoder ICO: entri BMP 24/32-bit (favicon.ico lama) ikut didukung, bukan cuma PNG - FromURL/Fetch selalu mengembalikan PNG; hasil raster/konversi seragam 512px - Tes: deteksi URL gambar/domain, daftar ikon situs, decode ICO BMP, konversi format
This commit is contained in:
1 parent
cad41caaee
commit
59145910b5
9 files changed
+441
-33
No files matched your search
@@ -56,6 +56,7 @@ func (ui *app) showIconSearch(query string, onPick func(icon.Result, []byte)) {
|
||||
entry.SetPlaceHolder("whatsapp")
|
||||
|
||||
status := muted(T("search_hint"))
|
||||
entry.SetPlaceHolder("whatsapp / mikrotik.com")
|
||||
grid := container.NewGridWithColumns(6)
|
||||
results := container.NewVScroll(container.NewPadded(grid))
|
||||
slots := make(chan struct{}, 3)
|
||||
@@ -69,7 +70,7 @@ func (ui *app) showIconSearch(query string, onPick func(icon.Result, []byte)) {
|
||||
status.SetText(T("searching"))
|
||||
grid.RemoveAll()
|
||||
go func() {
|
||||
list, err := icon.SearchBest(entry.Text, 24)
|
||||
list, err := lookupIcons(entry.Text)
|
||||
fyne.Do(func() {
|
||||
if err != nil {
|
||||
status.SetText(T("search_failed"))
|
||||
@@ -102,6 +103,22 @@ func (ui *app) showIconSearch(query string, onPick func(icon.Result, []byte)) {
|
||||
search()
|
||||
}
|
||||
|
||||
// lookupIcons memilih sumber sesuai yang diketik user:
|
||||
// URL gambar → dipakai langsung, domain situs → ikon resmi situs itu,
|
||||
// selain itu → pencarian nama di Iconify.
|
||||
func lookupIcons(query string) ([]icon.Result, error) {
|
||||
query = strings.TrimSpace(query)
|
||||
if icon.IsImageURL(query) {
|
||||
return []icon.Result{{Name: "URL ikon", URL: query}}, nil
|
||||
}
|
||||
if domain := icon.Domain(query); domain != "" {
|
||||
if list, err := icon.SiteIcons(domain); err == nil && len(list) > 0 {
|
||||
return list, nil
|
||||
}
|
||||
}
|
||||
return icon.SearchBest(query, 24)
|
||||
}
|
||||
|
||||
// iconChoice adalah satu ikon hasil pencarian. Gambarnya diunduh di latar belakang
|
||||
// dan digambar sebagai PNG: SVG dari internet kadang tidak bisa digambar sehingga
|
||||
// thumbnail tidak muncul atau proses menggambar berhenti.
|
||||
|
||||
Reference in new issue
Block a user