feat: package updater
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
cd1ea5495e
commit
e9aafd0cea
@ -9,7 +9,41 @@ import (
|
||||
)
|
||||
|
||||
|
||||
// Create a new updater. Invoke Run().
|
||||
func InitPkgUpdater() (PackageUpdater, error) {
|
||||
|
||||
alpine := isAlpine()
|
||||
|
||||
if alpine {
|
||||
log.Println("Detected Alpine. Setting up Alpine Package Updater.")
|
||||
return NewAlpineLinuxPackageUpdater(
|
||||
time.Hour * 24,
|
||||
[]string{"yt-dlp", "ffmpeg"},
|
||||
), nil
|
||||
}
|
||||
|
||||
log.Println("OS not known. Using dummy Package Updater")
|
||||
return NewDummyPackageUpdater(), nil
|
||||
}
|
||||
|
||||
// Returns true if the os running the application
|
||||
// is using Alpine Linux. If an error occurs it
|
||||
// returns false
|
||||
func isAlpine() bool {
|
||||
|
||||
cmd := exec.Command("grep", "Alpine", "/etc/os-release")
|
||||
_, err := cmd.Output()
|
||||
if err != nil || cmd.ProcessState.ExitCode() != 0 { return false }
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
/*
|
||||
Provides a package updater to run along side
|
||||
Application. It updates a set of packages at
|
||||
runtime. Run() starts a goroutine and returns.
|
||||
Stop() signals stop to the running goroutine.
|
||||
*/
|
||||
type PackageUpdater interface {
|
||||
Update()
|
||||
Run()
|
||||
@ -70,8 +104,8 @@ func (u *AlpineLinuxPackageUpdate) Stop() {
|
||||
func NewAlpineLinuxPackageUpdater (
|
||||
interval time.Duration,
|
||||
packages []string,
|
||||
) AlpineLinuxPackageUpdate {
|
||||
return AlpineLinuxPackageUpdate{
|
||||
) PackageUpdater {
|
||||
return &AlpineLinuxPackageUpdate{
|
||||
Interval: interval,
|
||||
Packages: packages,
|
||||
doneChan: make(chan string),
|
||||
@ -79,3 +113,13 @@ func NewAlpineLinuxPackageUpdater (
|
||||
}
|
||||
}
|
||||
|
||||
type DummyPackageUpdater struct {}
|
||||
func (u *DummyPackageUpdater) Run() {}
|
||||
func (u *DummyPackageUpdater) Stop() {}
|
||||
func (u *DummyPackageUpdater) ValidPackages() bool { return true }
|
||||
func (u *DummyPackageUpdater) Update() {}
|
||||
|
||||
func NewDummyPackageUpdater() PackageUpdater {
|
||||
return &DummyPackageUpdater{}
|
||||
}
|
||||
|
||||
|
11
main.go
11
main.go
@ -11,6 +11,8 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gitea.hbanafa.com/hesham/viddl/apkupdater"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -154,6 +156,13 @@ func init() {
|
||||
|
||||
func main() {
|
||||
|
||||
updater, err := apkupdater.InitPkgUpdater()
|
||||
if err != nil {
|
||||
log.Println("Could not init Package Updater!\n", err.Error())
|
||||
}
|
||||
|
||||
updater.Run()
|
||||
|
||||
handler := http.NewServeMux()
|
||||
handler.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(PublicFS))))
|
||||
handler.Handle("/assets/", http.FileServer(http.FS(AssetsFS)))
|
||||
@ -369,6 +378,8 @@ func main() {
|
||||
|
||||
log.Printf("Starting HTTP on %s", DEFAULT_HTTP_PORT)
|
||||
log.Fatalln(srv.ListenAndServe())
|
||||
log.Println("HTTP server stopped")
|
||||
updater.Stop()
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user