apkupdater
This commit is contained in:
parent
c36275d07b
commit
fea50ca37e
70
apkupdater/apkupdater.go
Normal file
70
apkupdater/apkupdater.go
Normal file
@ -0,0 +1,70 @@
|
||||
package apkupdater
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
||||
|
||||
type PackageUpdater interface {
|
||||
Update()
|
||||
Run()
|
||||
Stop()
|
||||
ValidPackages() bool
|
||||
}
|
||||
|
||||
type AlpineLinuxPackageUpdate struct {
|
||||
Interval time.Duration
|
||||
Packages []string
|
||||
doneChan chan string
|
||||
apkLock *sync.Mutex
|
||||
}
|
||||
|
||||
func (u *AlpineLinuxPackageUpdate) Update() {
|
||||
u.apkLock.Lock()
|
||||
log.Println("Updating packages...")
|
||||
u.apkLock.Unlock()
|
||||
log.Println("Done updating packges")
|
||||
}
|
||||
|
||||
func (u *AlpineLinuxPackageUpdate) Run() {
|
||||
|
||||
go func() {
|
||||
mainloop:
|
||||
for {
|
||||
select {
|
||||
case <- u.doneChan:
|
||||
fmt.Println("Stopping updater...")
|
||||
break mainloop
|
||||
case <- time.After(u.Interval):
|
||||
u.Update()
|
||||
}
|
||||
}
|
||||
fmt.Println("Updater stopped")
|
||||
}()
|
||||
log.Println("Started apline linux package updater")
|
||||
}
|
||||
|
||||
func (u *AlpineLinuxPackageUpdate) ValidPackages() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (u *AlpineLinuxPackageUpdate) Stop() {
|
||||
u.doneChan <- ""
|
||||
}
|
||||
|
||||
func NewAlpineLinuxPackageUpdater (
|
||||
interval time.Duration,
|
||||
packages []string,
|
||||
) AlpineLinuxPackageUpdate {
|
||||
return AlpineLinuxPackageUpdate{
|
||||
Interval: interval,
|
||||
Packages: packages,
|
||||
doneChan: make(chan string),
|
||||
apkLock: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
|
55
apkupdater/apkupdater_test.go
Normal file
55
apkupdater/apkupdater_test.go
Normal file
@ -0,0 +1,55 @@
|
||||
package apkupdater
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNewUpdater(t *testing.T) {
|
||||
interval := time.Second * 1
|
||||
packages := []string{"yt-dlp", "ffmpeg"}
|
||||
|
||||
updater := NewAlpineLinuxPackageUpdater(
|
||||
interval,
|
||||
packages,
|
||||
)
|
||||
|
||||
errs := make([]string, 0)
|
||||
for _, p := range packages {
|
||||
contains := false
|
||||
inner:
|
||||
for _, pp := range updater.Packages {
|
||||
if p == pp {
|
||||
contains = true
|
||||
break inner
|
||||
}
|
||||
}
|
||||
if !contains {
|
||||
errs = append(errs, p + "Not found")
|
||||
}
|
||||
}
|
||||
|
||||
if len(errs) != 0 {
|
||||
|
||||
for _, e := range errs {
|
||||
t.Log(e)
|
||||
}
|
||||
t.Fail()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestRunStop(t *testing.T) {
|
||||
interval := time.Second * 1
|
||||
packages := []string{"yt-dlp", "ffmpeg"}
|
||||
|
||||
updater := NewAlpineLinuxPackageUpdater(
|
||||
interval,
|
||||
packages,
|
||||
)
|
||||
|
||||
updater.Run()
|
||||
updater.Stop()
|
||||
// TODO: Wie teste ich das?
|
||||
|
||||
}
|
3
apkupdater/go.mod
Normal file
3
apkupdater/go.mod
Normal file
@ -0,0 +1,3 @@
|
||||
module gitea.hbanafa.com/hesham/viddl/apkupdater
|
||||
|
||||
go 1.21.1
|
Loading…
Reference in New Issue
Block a user