Fixed Thumbnail Db Entry not loading, added favicon.ico, added going back to menu, if no more Chapters exist, added auto start of default browser with url, added dark mode to main Menu (doesnt save state), added Constructor for Server
This commit is contained in:
@@ -190,9 +190,11 @@ func (dbMgr *Manager) load() error {
|
||||
|
||||
for rows.Next() {
|
||||
manga := Manga{}
|
||||
if err = rows.Scan(&manga.Id, &manga.Title, &manga.TimeStampUnix, &manga.Thumbnail); err != nil {
|
||||
var thumbnail []byte
|
||||
if err = rows.Scan(&manga.Id, &manga.Title, &manga.TimeStampUnix, &thumbnail); err != nil {
|
||||
return err
|
||||
}
|
||||
manga.Thumbnail = bytes.NewBuffer(thumbnail)
|
||||
dbMgr.Mangas[manga.Id] = &manga
|
||||
}
|
||||
|
||||
|
||||
BIN
internal/server/favicon.ico
Normal file
BIN
internal/server/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
@@ -212,13 +212,20 @@ func (s *Server) HandleNext(w http.ResponseWriter, r *http.Request) {
|
||||
}(*s.PrevViewModel, s)
|
||||
}
|
||||
|
||||
if s.NextViewModel == nil || s.NextSubUrl == "" {
|
||||
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
|
||||
err := s.DbMgr.Save()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
s.PrevViewModel = s.CurrViewModel
|
||||
s.CurrViewModel = s.NextViewModel
|
||||
s.PrevSubUrl = s.CurrSubUrl
|
||||
s.CurrSubUrl = s.NextSubUrl
|
||||
|
||||
<-s.NextReady
|
||||
|
||||
go s.LoadNext()
|
||||
|
||||
http.Redirect(w, r, "/current/", http.StatusTemporaryRedirect)
|
||||
@@ -236,13 +243,20 @@ func (s *Server) HandlePrev(w http.ResponseWriter, r *http.Request) {
|
||||
}(*s.NextViewModel, s)
|
||||
}
|
||||
|
||||
if s.PrevViewModel == nil || s.PrevSubUrl == "" {
|
||||
http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
|
||||
err := s.DbMgr.Save()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
s.NextViewModel = s.CurrViewModel
|
||||
s.CurrViewModel = s.PrevViewModel
|
||||
s.NextSubUrl = s.CurrSubUrl
|
||||
s.CurrSubUrl = s.PrevSubUrl
|
||||
|
||||
<-s.PrevReady
|
||||
|
||||
go s.LoadPrev()
|
||||
|
||||
http.Redirect(w, r, "/current/", http.StatusTemporaryRedirect)
|
||||
|
||||
@@ -2,6 +2,7 @@ package server
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"io"
|
||||
"mangaGetter/internal/database"
|
||||
@@ -32,35 +33,51 @@ type Server struct {
|
||||
IsLast bool
|
||||
|
||||
DbMgr *database.Manager
|
||||
}
|
||||
|
||||
// I'm not even sure if this helps.
|
||||
// If you press next and then prev too fast you still lock yourself out
|
||||
NextReady chan bool
|
||||
PrevReady chan bool
|
||||
func New(provider provider.Provider, db *database.Manager) *Server {
|
||||
s := Server{
|
||||
ImageBuffers: make(map[string]*bytes.Buffer),
|
||||
Provider: provider,
|
||||
DbMgr: db,
|
||||
Mutex: &sync.Mutex{},
|
||||
}
|
||||
|
||||
s.AddIco()
|
||||
|
||||
return &s
|
||||
}
|
||||
|
||||
func (s *Server) LoadNext() {
|
||||
c, err := s.Provider.GetHtml(s.CurrSubUrl)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.NextSubUrl = ""
|
||||
s.NextViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
next, err := s.Provider.GetNext(c)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.NextSubUrl = ""
|
||||
s.NextViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
html, err := s.Provider.GetHtml(next)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.NextSubUrl = ""
|
||||
s.NextViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
imagesNext, err := s.AppendImagesToBuf(html)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.NextSubUrl = ""
|
||||
s.NextViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
@@ -73,32 +90,38 @@ func (s *Server) LoadNext() {
|
||||
full := strings.Replace(title, "-", " ", -1) + " - " + strings.Replace(chapter, "_", " ", -1)
|
||||
|
||||
s.NextViewModel = &view.ImageViewModel{Images: imagesNext, Title: full}
|
||||
|
||||
s.NextSubUrl = next
|
||||
fmt.Println("Loaded next")
|
||||
s.NextReady <- true
|
||||
}
|
||||
|
||||
func (s *Server) LoadPrev() {
|
||||
c, err := s.Provider.GetHtml(s.CurrSubUrl)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.PrevSubUrl = ""
|
||||
s.PrevViewModel = nil
|
||||
return
|
||||
}
|
||||
prev, err := s.Provider.GetPrev(c)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.PrevSubUrl = ""
|
||||
s.PrevViewModel = nil
|
||||
return
|
||||
}
|
||||
html, err := s.Provider.GetHtml(prev)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.PrevSubUrl = ""
|
||||
s.PrevViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
imagesNext, err := s.AppendImagesToBuf(html)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
s.PrevSubUrl = ""
|
||||
s.PrevViewModel = nil
|
||||
return
|
||||
}
|
||||
|
||||
@@ -114,7 +137,6 @@ func (s *Server) LoadPrev() {
|
||||
|
||||
s.PrevSubUrl = prev
|
||||
fmt.Println("Loaded prev")
|
||||
s.PrevReady <- true
|
||||
}
|
||||
|
||||
func (s *Server) LoadCurr() {
|
||||
@@ -187,6 +209,16 @@ func (s *Server) AppendImagesToBuf(html string) ([]view.Image, error) {
|
||||
return images, nil
|
||||
}
|
||||
|
||||
//go:embed favicon.ico
|
||||
var ico []byte
|
||||
|
||||
func (s *Server) AddIco() {
|
||||
buf := bytes.NewBuffer(ico)
|
||||
s.Mutex.Lock()
|
||||
s.ImageBuffers["favicon.ico"] = buf
|
||||
s.Mutex.Unlock()
|
||||
}
|
||||
|
||||
func addFileToRam(url string) (*bytes.Buffer, error) {
|
||||
// Get the data
|
||||
resp, err := http.Get(url)
|
||||
|
||||
@@ -3,7 +3,22 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Main Menu</title>
|
||||
|
||||
<link href="/img/favicon.ico" rel="icon" type="image/x-icon">
|
||||
|
||||
<style>
|
||||
body {
|
||||
padding: 25px;
|
||||
background-color: white;
|
||||
color: black;
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
.dark-mode {
|
||||
background-color: #171717;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.button-36 {
|
||||
background-image: linear-gradient(92.88deg, #455EB5 9.16%, #5643CC 43.89%, #673FD7 64.72%);
|
||||
border-radius: 8px;
|
||||
@@ -90,6 +105,12 @@
|
||||
|
||||
|
||||
</style>
|
||||
<script>
|
||||
function myFunction() {
|
||||
var element = document.body;
|
||||
element.classList.toggle("dark-mode");
|
||||
}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
@@ -100,6 +121,7 @@
|
||||
</label>
|
||||
<input type="submit" value="Open" class="button-36">
|
||||
</form>
|
||||
<button onclick="myFunction()">Toggle dark mode</button>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
<meta charset="UTF-8">
|
||||
<title>{{.Title}}</title>
|
||||
|
||||
<link href="/img/favicon.ico" rel="icon" type="image/x-icon">
|
||||
|
||||
<style>
|
||||
body {background-color: #171717}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user