Now actually use Thumbnail that was loaded from db, instead of re downloading it every time. Also save Thumbnail to Manga if it couldnt be saved before

This commit is contained in:
Pablu23
2024-03-01 16:46:19 +01:00
parent b7f2a389cd
commit ad1fcbc68a
3 changed files with 32 additions and 10 deletions

View File

@@ -136,10 +136,23 @@ func (dbMgr *Manager) Save() error {
} }
} }
} else { } 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 { if err != nil {
return err 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 { if err = rows.Scan(&manga.Id, &manga.Title, &manga.TimeStampUnix, &thumbnail); err != nil {
return err return err
} }
if len(thumbnail) != 0 {
manga.Thumbnail = bytes.NewBuffer(thumbnail) 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) latestChapter := db.QueryRow("SELECT Id, Url, Name, Number, TimeStampUnixEpoch FROM Chapter where MangaID = ? ORDER BY TimeStampUnixEpoch desc LIMIT 1", manga.Id)
chapter := Chapter{} chapter := Chapter{}

View File

@@ -59,7 +59,7 @@ func (s *Server) HandleMenu(w http.ResponseWriter, _ *http.Request) {
t1 := time.Now().UnixNano() 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 //TODO: Add default picture instead of not showing Manga at all
if err != nil { if err != nil {
continue continue
@@ -71,8 +71,9 @@ func (s *Server) HandleMenu(w http.ResponseWriter, _ *http.Request) {
thumbNs += t2 - t1 thumbNs += t2 - t1
t1 = time.Now().UnixNano() t1 = time.Now().UnixNano()
// This is very slow
// This is very slow
// TODO: put this into own Method
if manga.LastChapterNum == 0 { if manga.LastChapterNum == 0 {
l, err := s.Provider.GetChapterList("/title/" + strconv.Itoa(manga.Id)) l, err := s.Provider.GetChapterList("/title/" + strconv.Itoa(manga.Id))
if err != nil { if err != nil {
@@ -275,7 +276,7 @@ func (s *Server) HandleImage(w http.ResponseWriter, r *http.Request) {
//go:embed favicon.ico //go:embed favicon.ico
var ico []byte 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") w.Header().Set("Content-Type", "image/webp")
_, err := w.Write(ico) _, err := w.Write(ico)
if err != nil { if err != nil {

View File

@@ -157,16 +157,21 @@ func (s *Server) LoadCurr() {
fmt.Println("Loaded current") fmt.Println("Loaded current")
} }
func (s *Server) LoadThumbnail(mangaId int) (path string, err error) { func (s *Server) LoadThumbnail(manga *database.Manga) (path string, err error) {
strId := strconv.Itoa(mangaId) strId := strconv.Itoa(manga.Id)
//s.Mutex.Lock() s.Mutex.Lock()
//defer s.Mutex.Unlock() defer s.Mutex.Unlock()
if s.ImageBuffers[strId] != nil { if s.ImageBuffers[strId] != nil {
return 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 { if err != nil {
return "", err return "", err
} }
@@ -174,6 +179,7 @@ func (s *Server) LoadThumbnail(mangaId int) (path string, err error) {
if err != nil { if err != nil {
return "", err return "", err
} }
manga.Thumbnail = ram
s.ImageBuffers[strId] = ram s.ImageBuffers[strId] = ram
return strId, nil return strId, nil
} }