ebitengine updater

This commit is contained in:
2026-01-30 08:35:30 +01:00
parent 27131b3029
commit 499f27f91c
3 changed files with 129 additions and 4 deletions
+6 -1
View File
@@ -30,7 +30,12 @@ func NewDomain() Domain {
file_repository,
)
software_updater_service := NewSoftwareUpdaterService(tic80_updater)
ebitengine_updater := NewSoftwareUpdaterEbitengineService(
software_repository,
release_repository,
file_repository,
)
software_updater_service := NewSoftwareUpdaterService(tic80_updater, ebitengine_updater)
download_service := NewDownloadService(software_repository, release_repository)
+10 -3
View File
@@ -9,16 +9,23 @@ type SoftwareUpdaterServiceInterface interface {
}
type SoftwareUpdaterService struct {
tic80Updater SoftwareUpdaterTIC80ServiceInterface
tic80Updater SoftwareUpdaterTIC80ServiceInterface
ebitengineUpdater SoftwareUpdaterEbitengineServiceInterface
}
func NewSoftwareUpdaterService(tic80_updater SoftwareUpdaterTIC80ServiceInterface) *SoftwareUpdaterService {
return &SoftwareUpdaterService{tic80Updater: tic80_updater}
func NewSoftwareUpdaterService(tic80_updater SoftwareUpdaterTIC80ServiceInterface, ebitengine_updater SoftwareUpdaterEbitengineServiceInterface) *SoftwareUpdaterService {
return &SoftwareUpdaterService{
tic80Updater: tic80_updater,
ebitengineUpdater: ebitengine_updater,
}
}
func (s *SoftwareUpdaterService) Update(platform, name, version string) error {
if platform == "tic80" {
return s.tic80Updater.Update(name, version)
}
if platform == "ebitengine" {
return s.ebitengineUpdater.Update(name, version)
}
return fmt.Errorf("unsupported platform: %s", platform)
}
@@ -0,0 +1,113 @@
package domain
import (
"encoding/json"
"fmt"
"os"
)
type SoftwareUpdaterEbitengineMetadata struct {
Name string `json:"name"`
Title string `json:"title"`
Author string `json:"author"`
Desc string `json:"desc"`
Site string `json:"site"`
License string `json:"license"`
}
type SoftwareUpdaterEbitengineServiceInterface interface {
Update(name, version string) error
}
type SoftwareUpdaterEbitengineService struct {
softwareRepository SoftwareRepositoryInterface
releaseRepository ReleaseRepositoryInterface
fileRepository FileRepositoryInterface
}
func NewSoftwareUpdaterEbitengineService(
software_repository SoftwareRepositoryInterface,
release_repository ReleaseRepositoryInterface,
file_repository FileRepositoryInterface,
) *SoftwareUpdaterEbitengineService {
return &SoftwareUpdaterEbitengineService{
softwareRepository: software_repository,
releaseRepository: release_repository,
fileRepository: file_repository,
}
}
func (s *SoftwareUpdaterEbitengineService) Update(name, version string) error {
fmt.Printf("Ebitengine Updater: Starting update for name: %s, version: %s\n", name, version)
versioned_name := name + "-" + version
zip_filename := versioned_name + ".html.zip"
metadata_filename := versioned_name + ".meta.json"
html_dirname := versioned_name
if s.fileRepository.FileExists(html_dirname) {
s.fileRepository.DeleteDir(html_dirname)
}
s.fileRepository.CreateDir(html_dirname)
s.fileRepository.UnzipFile(zip_filename, html_dirname)
html_dir_path := s.fileRepository.GetPath(html_dirname)
metadata_path := s.fileRepository.GetPath(metadata_filename)
var err error
meta_data, err := s.GetMetadata(metadata_path)
if err != nil {
return err
}
software := s.BuildSoftware(meta_data)
err = s.softwareRepository.UpdateOrCreate(software)
if err != nil {
return err
}
release := Release{
SoftwareID: software.ID,
Version: version,
CartridgePath: "",
SourcePath: "",
HTMLFolderPath: html_dir_path,
}
s.releaseRepository.CreateIfNotExist(&release)
fmt.Printf("Ebitengine Updater: Successfully processed Lua cartridge: %s\n", name)
return nil
}
func (s *SoftwareUpdaterEbitengineService) BuildSoftware(metadata SoftwareUpdaterEbitengineMetadata) *Software {
software := &Software{
Name: metadata.Name,
Title: metadata.Title,
Author: metadata.Author,
Desc: metadata.Desc,
Site: metadata.Site,
License: metadata.License,
Platform: "ebitengine",
}
return software
}
func (s *SoftwareUpdaterEbitengineService) GetMetadata(metadata_path string) (SoftwareUpdaterEbitengineMetadata, error) {
var metadata SoftwareUpdaterEbitengineMetadata
data, err := os.ReadFile(metadata_path)
if err != nil {
return metadata, err
}
if err := json.Unmarshal(data, &metadata); err != nil {
return metadata, err
}
return metadata, nil
}