diff --git a/internal/database/database.go b/internal/database/database.go index 284888d..0fe6924 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -136,10 +136,23 @@ func (dbMgr *Manager) Save() error { } } } else { - _, err := db.Exec("UPDATE Manga set Title = ?, TimeStampUnixEpoch = ? WHERE ID = ?", m.Title, m.TimeStampUnix, m.Id) + tSet := 0 + err := db.QueryRow("SELECT COUNT(*) from Manga where ID = ? and Thumbnail IS NOT NULL", m.Id).Scan(&tSet) if err != nil { return err } + + if tSet != 0 { + _, err = db.Exec("UPDATE Manga set Title = ?, TimeStampUnixEpoch = ? WHERE ID = ?", m.Title, m.TimeStampUnix, m.Id) + if err != nil { + return err + } + } else { + _, err = db.Exec("UPDATE Manga set Title = ?, TimeStampUnixEpoch = ?, Thumbnail = ? WHERE ID = ?", m.Title, m.TimeStampUnix, m.Thumbnail.Bytes(), m.Id) + if err != nil { + return err + } + } } } @@ -195,7 +208,9 @@ func (dbMgr *Manager) load() error { if err = rows.Scan(&manga.Id, &manga.Title, &manga.TimeStampUnix, &thumbnail); err != nil { return err } - manga.Thumbnail = bytes.NewBuffer(thumbnail) + if len(thumbnail) != 0 { + manga.Thumbnail = bytes.NewBuffer(thumbnail) + } latestChapter := db.QueryRow("SELECT Id, Url, Name, Number, TimeStampUnixEpoch FROM Chapter where MangaID = ? ORDER BY TimeStampUnixEpoch desc LIMIT 1", manga.Id) chapter := Chapter{} diff --git a/internal/server/handler.go b/internal/server/handler.go index 4658eca..cb07657 100644 --- a/internal/server/handler.go +++ b/internal/server/handler.go @@ -59,7 +59,7 @@ func (s *Server) HandleMenu(w http.ResponseWriter, _ *http.Request) { t1 := time.Now().UnixNano() - thumbnail, err := s.LoadThumbnail(manga.Id) + thumbnail, err := s.LoadThumbnail(manga) //TODO: Add default picture instead of not showing Manga at all if err != nil { continue @@ -71,8 +71,9 @@ func (s *Server) HandleMenu(w http.ResponseWriter, _ *http.Request) { thumbNs += t2 - t1 t1 = time.Now().UnixNano() - // This is very slow + // This is very slow + // TODO: put this into own Method if manga.LastChapterNum == 0 { l, err := s.Provider.GetChapterList("/title/" + strconv.Itoa(manga.Id)) if err != nil { @@ -275,7 +276,7 @@ func (s *Server) HandleImage(w http.ResponseWriter, r *http.Request) { //go:embed favicon.ico var ico []byte -func (s *Server) HandleFavicon(w http.ResponseWriter, r *http.Request) { +func (s *Server) HandleFavicon(w http.ResponseWriter, _ *http.Request) { w.Header().Set("Content-Type", "image/webp") _, err := w.Write(ico) if err != nil { diff --git a/internal/server/server.go b/internal/server/server.go index 97fbead..f2abcc7 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -157,16 +157,21 @@ func (s *Server) LoadCurr() { fmt.Println("Loaded current") } -func (s *Server) LoadThumbnail(mangaId int) (path string, err error) { - strId := strconv.Itoa(mangaId) +func (s *Server) LoadThumbnail(manga *database.Manga) (path string, err error) { + strId := strconv.Itoa(manga.Id) - //s.Mutex.Lock() - //defer s.Mutex.Unlock() + s.Mutex.Lock() + defer s.Mutex.Unlock() if s.ImageBuffers[strId] != nil { return strId, nil } - url, err := s.Provider.GetThumbnail(strconv.Itoa(mangaId)) + if manga.Thumbnail != nil { + s.ImageBuffers[strId] = manga.Thumbnail + return strId, nil + } + + url, err := s.Provider.GetThumbnail(strId) if err != nil { return "", err } @@ -174,6 +179,7 @@ func (s *Server) LoadThumbnail(mangaId int) (path string, err error) { if err != nil { return "", err } + manga.Thumbnail = ram s.ImageBuffers[strId] = ram return strId, nil }