Add an icon-refresh button

This commit is contained in:
Aaron Bieber 2023-07-25 07:20:09 -06:00
parent 5374830887
commit 402749adb4
No known key found for this signature in database
5 changed files with 92 additions and 41 deletions

View File

@ -92,6 +92,10 @@
ul li span { ul li span {
cursor: pointer; cursor: pointer;
} }
footer {
text-align: center;
}
</style> </style>
</head> </head>
<body> <body>

2
assets/main.min.js vendored

File diff suppressed because one or more lines are too long

52
icons.go Normal file
View File

@ -0,0 +1,52 @@
package main
import (
"fmt"
"io"
"log"
"net/http"
"suah.dev/gostart/data"
)
func updateIcons() {
links, err := app.queries.GetAllLinks(app.ctx)
if err != nil {
log.Println("can't get links: ", err)
}
for _, link := range links {
fmt.Println(link.LogoUrl)
if link.LogoUrl == "" {
continue
}
resp, err := http.Get(link.LogoUrl)
if err != nil {
log.Println(err)
continue
}
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Println(err)
continue
}
err = resp.Body.Close()
if err != nil {
log.Println(err)
continue
}
contentType := resp.Header.Get("Content-Type")
err = app.queries.AddIcon(app.ctx, data.AddIconParams{
OwnerID: link.OwnerID,
LinkID: link.ID,
ContentType: contentType,
Data: body,
})
if err != nil {
log.Println("can't add icon: ", err)
}
}
}

49
main.go
View File

@ -7,7 +7,6 @@ import (
"embed" "embed"
"flag" "flag"
"fmt" "fmt"
"io"
"io/fs" "io/fs"
"log" "log"
"net/http" "net/http"
@ -162,6 +161,14 @@ func main() {
r.Use(IconCacher) r.Use(IconCacher)
r.Get("/{linkID:[0-9]+}", iconGET) r.Get("/{linkID:[0-9]+}", iconGET)
}) })
r.Route("/update-icons", func(r chi.Router) {
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
updateIcons()
w.Header().Add("Content-type", "application/json")
w.WriteHeader(200)
w.Write([]byte(`{"update": true}`))
})
})
go func() { go func() {
for { for {
@ -182,45 +189,7 @@ func main() {
go func() { go func() {
if dbExists { if dbExists {
for { for {
links, err := app.queries.GetAllLinks(app.ctx) updateIcons()
if err != nil {
log.Println("can't get links: ", err)
}
for _, link := range links {
fmt.Println(link.LogoUrl)
if link.LogoUrl == "" {
continue
}
resp, err := http.Get(link.LogoUrl)
if err != nil {
log.Println(err)
continue
}
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Println(err)
continue
}
err = resp.Body.Close()
if err != nil {
log.Println(err)
continue
}
contentType := resp.Header.Get("Content-Type")
err = app.queries.AddIcon(app.ctx, data.AddIconParams{
OwnerID: link.OwnerID,
LinkID: link.ID,
ContentType: contentType,
Data: body,
})
if err != nil {
log.Println("can't add icon: ", err)
}
}
time.Sleep(24 * time.Hour) time.Sleep(24 * time.Hour)
} }
} else { } else {

View File

@ -89,6 +89,8 @@ type Msg
| ReloadWatches | ReloadWatches
| SubmitLink | SubmitLink
| SubmitWatch | SubmitWatch
| FetchIcons
| LoadIcons (Result Http.Error ())
type Status type Status
@ -199,6 +201,14 @@ addWatch model =
} }
fetchIcons : Cmd Msg
fetchIcons =
Http.get
{ url = "/update-icons"
, expect = Http.expectWhatever LoadIcons
}
deleteLink : Int -> Cmd Msg deleteLink : Int -> Cmd Msg
deleteLink linkId = deleteLink linkId =
Http.request Http.request
@ -228,6 +238,15 @@ deleteWatch watchId =
update : Msg -> Model -> ( Model, Cmd Msg ) update : Msg -> Model -> ( Model, Cmd Msg )
update msg model = update msg model =
case msg of case msg of
LoadIcons (Ok _) ->
( model, getLinks )
LoadIcons (Err _) ->
( { model | status = Errored "Server error reloading icons!" }, Cmd.none )
FetchIcons ->
( model, fetchIcons )
DeleteLink linkId -> DeleteLink linkId ->
( model, deleteLink linkId ) ( model, deleteLink linkId )
@ -359,6 +378,13 @@ view model =
text "" text ""
] ]
] ]
, footer []
[ details []
[ summary []
[ b [] [ text "Maintenence" ] ]
, button [ onClick FetchIcons ] [ text "Update Icons" ]
]
]
] ]