update: make things work with the new package system
This commit is contained in:
162
main.go
162
main.go
@ -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()
|
||||
}
|
||||
|
Reference in New Issue
Block a user