Hapus tombol kosong bawaan Fyne di modal + semua format ikon dikonversi ke PNG
- dialog.NewCustom selalu menambah tombol dismiss walau labelnya kosong; modal kita pakai baris tombol sendiri, jadi pindah ke NewCustomWithoutButtons (ditambah tes yang menolak pemakaian dialog.NewCustom lagi) - Ikon: SVG/webp/gif/bmp/ico/jpeg semuanya dikonversi ke PNG saat dipasang (desktop environment tidak konsisten membaca format lain), gambar besar diperkecil ke maksimal 512px - Filter file picker ikon menambah webp/gif/bmp - Perbaiki data race pada endpoint pencarian ikon (iconifyBase) yang ditemukan oleh go test -race; tes UI menunggu goroutine pencarian selesai - go test -race -count=1 ./... hijau untuk semua paket
This commit is contained in:
1 parent
6e6f9afea9
commit
cad41caaee
10 files changed
+269
-73
No files matched your search
+21
-4
@@ -7,14 +7,30 @@ import (
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
var iconifyBase = "https://api.iconify.design"
|
||||
var (
|
||||
iconifyMu sync.RWMutex
|
||||
iconifyBase = "https://api.iconify.design"
|
||||
)
|
||||
|
||||
// SetSearchEndpoint mengarahkan pencarian ikon ke endpoint lain (dipakai tes).
|
||||
func SetSearchEndpoint(base string) { iconifyBase = base }
|
||||
func SetSearchEndpoint(base string) {
|
||||
iconifyMu.Lock()
|
||||
defer iconifyMu.Unlock()
|
||||
iconifyBase = base
|
||||
}
|
||||
|
||||
// searchEndpoint dibaca setiap kali mencari, jadi harus lewat lock
|
||||
// (tes bisa mengganti endpoint sementara goroutine lain mencari).
|
||||
func searchEndpoint() string {
|
||||
iconifyMu.RLock()
|
||||
defer iconifyMu.RUnlock()
|
||||
return iconifyBase
|
||||
}
|
||||
|
||||
// Result adalah satu ikon dari pencarian online.
|
||||
type Result struct {
|
||||
@@ -41,7 +57,8 @@ func Search(query string, limit int) ([]Result, error) {
|
||||
limit = 32
|
||||
}
|
||||
|
||||
endpoint := fmt.Sprintf("%s/search?query=%s&limit=%d", iconifyBase, url.QueryEscape(query), limit)
|
||||
base := searchEndpoint()
|
||||
endpoint := fmt.Sprintf("%s/search?query=%s&limit=%d", base, url.QueryEscape(query), limit)
|
||||
data, err := get(endpoint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -63,7 +80,7 @@ func Search(query string, limit int) ([]Result, error) {
|
||||
// height=256 supaya SVG-nya punya ukuran eksplisit (bukan "1em")
|
||||
results = append(results, Result{
|
||||
Name: name,
|
||||
URL: fmt.Sprintf("%s/%s/%s.svg?height=256", iconifyBase, url.PathEscape(prefix), url.PathEscape(icon)),
|
||||
URL: fmt.Sprintf("%s/%s/%s.svg?height=256", base, url.PathEscape(prefix), url.PathEscape(icon)),
|
||||
})
|
||||
}
|
||||
if len(results) == 0 {
|
||||
|
||||
Reference in new issue
Block a user