From cc7009c10650caaede04faaa3ea8edd19951120c Mon Sep 17 00:00:00 2001 From: Pablu23 Date: Wed, 21 Feb 2024 23:32:46 +0100 Subject: [PATCH] Works now, Mutex whatever --- database.go | 17 +++++++++++++---- main.go | 17 ----------------- server.go | 8 +++++++- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/database.go b/database.go index 6caf9bb..a335c17 100644 --- a/database.go +++ b/database.go @@ -3,6 +3,7 @@ package main import ( "database/sql" _ "embed" + "sync" _ "github.com/mattn/go-sqlite3" ) @@ -28,16 +29,18 @@ type Chapter struct { type DatabaseManager struct { ConnectionString string db *sql.DB - Mangas map[int]*Manga - Chapters map[int]*Chapter + + rw *sync.Mutex + Mangas map[int]*Manga + Chapters map[int]*Chapter CreateIfNotExists bool } func NewDatabase(connectionString string, createIfNotExists bool) DatabaseManager { return DatabaseManager{ - ConnectionString: connectionString, - + ConnectionString: connectionString, + rw: &sync.Mutex{}, Mangas: make(map[int]*Manga), Chapters: make(map[int]*Chapter), CreateIfNotExists: createIfNotExists, @@ -75,6 +78,8 @@ func (dbMgr *DatabaseManager) Close() error { func (dbMgr *DatabaseManager) Save() error { db := dbMgr.db + dbMgr.rw.Lock() + defer dbMgr.rw.Unlock() for _, m := range dbMgr.Mangas { count := 0 err := db.QueryRow("SELECT COUNT(*) FROM Manga where ID = ?", m.Id).Scan(&count) @@ -128,6 +133,10 @@ func (dbMgr *DatabaseManager) createDatabaseIfNotExists() error { func (dbMgr *DatabaseManager) load() error { db := dbMgr.db + + dbMgr.rw.Lock() + defer dbMgr.rw.Unlock() + rows, err := db.Query("SELECT * FROM Manga") if err != nil { return err diff --git a/main.go b/main.go index cb0b8a6..5d956d1 100644 --- a/main.go +++ b/main.go @@ -37,19 +37,6 @@ func main() { return } - //var latestTimeStamp int64 = 0 - //var latestUrl string - //for _, m := range db.Mangas { - // if latestTimeStamp < m.LatestChapter.TimeStampUnix { - // latestTimeStamp = m.LatestChapter.TimeStampUnix - // latestUrl = m.LatestChapter.Url - // } - //} - // - //if latestUrl == "" { - // latestUrl = "/title/80381-i-stan-the-prince/1539086-ch_16" - //} - server := Server{ ImageBuffers: make(map[string]*bytes.Buffer), NextReady: make(chan bool), @@ -68,10 +55,6 @@ func main() { } }() - //server.LoadCurr() - //go server.LoadPrev() - //go server.LoadNext() - http.HandleFunc("/", server.HandleMenu) http.HandleFunc("/new/title/{title}/{chapter}", server.HandleNew) http.HandleFunc("/current/", server.HandleCurrent) diff --git a/server.go b/server.go index 43213c3..797b110 100644 --- a/server.go +++ b/server.go @@ -188,7 +188,10 @@ func (s *Server) HandlePrev(w http.ResponseWriter, r *http.Request) { } func (s *Server) HandleCurrent(w http.ResponseWriter, _ *http.Request) { - tmpl := template.Must(template.ParseFiles("test.gohtml")) + tmpl := template.Must(template.ParseFiles("viewer.gohtml")) + + s.DbMgr.rw.Lock() + defer s.DbMgr.rw.Unlock() mangaId, chapterId, err := getMangaIdAndChapterId(s.CurrSubUrl) if err != nil { @@ -311,6 +314,9 @@ func (s *Server) AppendImagesToBuf(html string) ([]Image, error) { func (s *Server) HandleMenu(w http.ResponseWriter, r *http.Request) { tmpl := template.Must(template.ParseFiles("menu.gohtml")) + s.DbMgr.rw.Lock() + defer s.DbMgr.rw.Unlock() + all := s.DbMgr.Mangas l := len(all) mangaViewModels := make([]MangaViewModel, l)