love update

This commit is contained in:
2026-02-28 12:59:15 +01:00
parent fb4e589b09
commit 2bf56e3c1b
3 changed files with 139 additions and 2 deletions
+8 -1
View File
@@ -35,7 +35,14 @@ func NewDomain() Domain {
release_repository,
file_repository,
)
software_updater_service := NewSoftwareUpdaterService(tic80_updater, ebitengine_updater)
love_updater := NewSoftwareUpdaterLoveService(
software_repository,
release_repository,
file_repository,
)
software_updater_service := NewSoftwareUpdaterService(tic80_updater, ebitengine_updater, love_updater)
download_service := NewDownloadService(software_repository, release_repository)
+6 -1
View File
@@ -11,12 +11,14 @@ type SoftwareUpdaterServiceInterface interface {
type SoftwareUpdaterService struct {
tic80Updater SoftwareUpdaterTIC80ServiceInterface
ebitengineUpdater SoftwareUpdaterEbitengineServiceInterface
loveUpdater SoftwareUpdaterLoveServiceInterface
}
func NewSoftwareUpdaterService(tic80_updater SoftwareUpdaterTIC80ServiceInterface, ebitengine_updater SoftwareUpdaterEbitengineServiceInterface) *SoftwareUpdaterService {
func NewSoftwareUpdaterService(tic80_updater SoftwareUpdaterTIC80ServiceInterface, ebitengine_updater SoftwareUpdaterEbitengineServiceInterface, love_updater SoftwareUpdaterLoveServiceInterface) *SoftwareUpdaterService {
return &SoftwareUpdaterService{
tic80Updater: tic80_updater,
ebitengineUpdater: ebitengine_updater,
loveUpdater: love_updater,
}
}
@@ -27,5 +29,8 @@ func (s *SoftwareUpdaterService) Update(platform, name, version string) error {
if platform == "ebitengine" {
return s.ebitengineUpdater.Update(name, version)
}
if platform == "love" {
return s.loveUpdater.Update(name, version)
}
return fmt.Errorf("unsupported platform: %s", platform)
}
+125
View File
@@ -0,0 +1,125 @@
package domain
import (
"encoding/json"
"fmt"
"os"
)
type SoftwareUpdaterLoveMetadata 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 SoftwareUpdaterLoveServiceInterface interface {
Update(name, version string) error
}
type SoftwareUpdaterLoveService struct {
softwareRepository SoftwareRepositoryInterface
releaseRepository ReleaseRepositoryInterface
fileRepository FileRepositoryInterface
}
func NewSoftwareUpdaterLoveService(
software_repository SoftwareRepositoryInterface,
release_repository ReleaseRepositoryInterface,
file_repository FileRepositoryInterface,
) *SoftwareUpdaterLoveService {
return &SoftwareUpdaterLoveService{
softwareRepository: software_repository,
releaseRepository: release_repository,
fileRepository: file_repository,
}
}
func (s *SoftwareUpdaterLoveService) Update(name, version string) error {
fmt.Printf("Love 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 + ".metadata.json"
html_dirname := versioned_name
fmt.Printf("Love Updater: Processing zip file: %s\n", zip_filename)
fmt.Printf("Love Updater: Processing metadata file: %s\n", metadata_filename)
fmt.Printf("Love Updater: Processing HTML directory: %s\n", html_dirname)
if s.fileRepository.FileExists(html_dirname) {
fmt.Printf("Love Updater: Removing existing HTML directory: %s\n", html_dirname)
s.fileRepository.DeleteDir(html_dirname)
}
fmt.Printf("Love Updater: Creating HTML directory: %s\n", html_dirname)
s.fileRepository.CreateDir(html_dirname)
fmt.Printf("Love Updater: Unzipping file: %s to directory: %s\n", zip_filename, 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
fmt.Printf("Love Updater: Extracting metadata from metadata file: %s\n", metadata_path)
meta_data, err := s.GetMetadata(metadata_path)
if err != nil {
fmt.Printf("Love Updater: Error extracting metadata: %s\n", err.Error())
return err
}
fmt.Printf("Love Updater: Extracted metadata: %+v\n", meta_data)
software := s.BuildSoftware(meta_data)
err = s.softwareRepository.UpdateOrCreate(software)
if err != nil {
fmt.Printf("Love Updater: Error updating or creating software: %s\n", err.Error())
return err
}
release := Release{
SoftwareID: software.ID,
Version: version,
CartridgePath: "",
SourcePath: "",
HTMLFolderPath: html_dir_path,
}
fmt.Printf("Love Updater: Creating release for software ID: %d, version: %s\n", software.ID, version)
s.releaseRepository.CreateIfNotExist(&release)
fmt.Printf("Love Updater: Successfully processed Lua cartridge: %s\n", name)
return nil
}
func (s *SoftwareUpdaterLoveService) BuildSoftware(metadata SoftwareUpdaterLoveMetadata) *Software {
software := &Software{
Name: metadata.Name,
Title: metadata.Title,
Author: metadata.Author,
Desc: metadata.Desc,
Site: metadata.Site,
License: metadata.License,
Platform: "love",
}
return software
}
func (s *SoftwareUpdaterLoveService) GetMetadata(metadata_path string) (SoftwareUpdaterLoveMetadata, error) {
var metadata SoftwareUpdaterLoveMetadata
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
}