update: make things work with the new package system

This commit is contained in:
ngn
2024-08-13 03:01:00 +03:00
parent 528df304e9
commit a556ed08aa
14 changed files with 556 additions and 373 deletions

162
main.go
View File

@ -1,6 +1,6 @@
/*
* tracker | MatterLinux Package Tracker
* tracker | MatterLinux package tracker
* MatterLinux 2023-2024 (https://matterlinux.xyz)
* This program is free software: you can redistribute it and/or modify
@ -21,107 +21,91 @@
package main
import (
"log"
"strings"
"time"
"git.matterlinux.xyz/matter/tracker/lib"
"git.matterlinux.xyz/matter/tracker/log"
"git.matterlinux.xyz/matter/tracker/routes"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/template/html/v2"
)
var lastupdate time.Time
var updatetick = time.NewTicker(time.Hour)
var stopchan = make(chan struct{})
func UpdateLoop() {
UpdatePackages()
for {
select {
case <- updatetick.C:
UpdatePackages()
case <- stopchan:
updatetick.Stop()
return
}
}
type tracker struct {
Channel chan struct{}
Config lib.Config
Last time.Time
List []lib.Package
Tick time.Ticker
}
func UpdatePackages() {
lib.LoadAllPkgs()
lastupdate = time.Now()
func (t *tracker) Reload() error {
t.List = []lib.Package{}
err := t.Config.Load(&t.List, "config.json")
t.Last = time.Now()
return err
}
func GETIndex(c *fiber.Ctx) error {
repo := c.Query("r")
name := c.Query("n")
exact := c.Query("e")
isjson := c.Query("j")
if repo == "" && name == "" {
if isjson == "1" {
return c.JSON(lib.Packages)
}
return c.Render("index", fiber.Map{
"last": lib.GetTimePassed(lastupdate),
"repos": lib.Repos,
"pkgs": lib.Packages,
})
}
func (t *tracker) Loop() {
var err error
name = lib.CleanString(name)
var res []lib.Package
if err = t.Reload(); err != nil {
log.Error("Failed to update packages: %s", err.Error())
}
for _, p := range lib.Packages {
if(repo != "all" && p.Repo != repo){
continue
}
if(exact == ""){
if(strings.Contains(p.Name, name)){
res = append(res, p)
}
}else {
if (p.Name == name) {
res = append(res, p)
}
}
}
if isjson == "1" {
return c.JSON(res)
}
return c.Render("index", fiber.Map{
"search": name,
"last": lib.GetTimePassed(lastupdate),
"repos": lib.Repos,
"pkgs": res,
})
for {
select {
case <-t.Tick.C:
if err = t.Reload(); err != nil {
log.Error("Failed to update packages: %s", err.Error())
}
case <-t.Channel:
t.Tick.Stop()
return
}
}
}
func main(){
log.SetFlags(log.Ltime | log.Lshortfile)
engine := html.New("./templates", ".html")
app := fiber.New(fiber.Config{
DisableStartupMessage: true,
Views: engine,
})
app.Static("/", "./public")
app.Get("/", GETIndex)
app.Get("*", func(c *fiber.Ctx) error {
return lib.RenderError(c, 404)
})
go UpdateLoop()
log.Println("Starting MatterLinux Package Tracker on port 9877")
err := app.Listen(":9877")
if err != nil {
log.Printf("Error starting server: %s", err)
}
close(stopchan)
func (t *tracker) Stop() {
close(t.Channel)
}
func main() {
var (
tracker tracker
engine *html.Engine
app *fiber.App
)
engine = html.New("./templates", ".html")
app = fiber.New(fiber.Config{
DisableStartupMessage: true,
Views: engine,
})
app.Static("/", "./public")
app.All("*", func(c *fiber.Ctx) error {
c.Locals("config", &tracker.Config)
c.Locals("list", &tracker.List)
c.Locals("last", &tracker.Last)
return c.Next()
})
app.Get("/", routes.GET_index)
app.Get("/p/:name", routes.GET_package)
app.Get("*", func(c *fiber.Ctx) error {
return lib.RenderError(c, 404)
})
go tracker.Loop()
log.Info("Starting MatterLinux package tracker on port 9877")
err := app.Listen(":9877")
if err != nil {
log.Error("Error starting server: %s", err.Error())
}
tracker.Stop()
}