Implement displaying breaking changes

This commit is contained in:
2025-01-11 23:40:57 +01:00
parent ba690091fb
commit d5d9819233
6 changed files with 21 additions and 18 deletions

View File

@@ -74,14 +74,13 @@ func UpdateFile(localPath string, data []byte) (err error) {
return nil return nil
} }
func (a *Addon) Update(body []byte) (err error) { func (a *Addon) Update(body []byte) (hasBreakingChanges bool, err error) {
log.Printf("Updating %s", a.Name) log.Printf("Updating %s", a.Name)
zipReader, err := zip.NewReader(bytes.NewReader(body), int64(len(body))) zipReader, err := zip.NewReader(bytes.NewReader(body), int64(len(body)))
if err != nil { if err != nil {
return fmt.Errorf("error creating zip reader: %w", err) return false, fmt.Errorf("error creating zip reader: %w", err)
} }
log.Printf("Found %d files", len(zipReader.File)) log.Printf("Found %d files", len(zipReader.File))
hasBreakingChanges := false
for _, file := range zipReader.File { for _, file := range zipReader.File {
if file.FileInfo().IsDir() { if file.FileInfo().IsDir() {
continue continue
@@ -89,11 +88,11 @@ func (a *Addon) Update(body []byte) (err error) {
log.Printf("Found file %s", file.Name) log.Printf("Found file %s", file.Name)
fileHandle, err := file.Open() fileHandle, err := file.Open()
if err != nil { if err != nil {
return fmt.Errorf("error opening file: %w", err) return false, fmt.Errorf("error opening file: %w", err)
} }
fileData, err := io.ReadAll(fileHandle) fileData, err := io.ReadAll(fileHandle)
if err != nil { if err != nil {
return fmt.Errorf("error reading file: %w", err) return false, fmt.Errorf("error reading file: %w", err)
} }
if strings.HasSuffix(file.Name, ".toc") { if strings.HasSuffix(file.Name, ".toc") {
@@ -102,7 +101,7 @@ func (a *Addon) Update(body []byte) (err error) {
if os.IsNotExist(err) { if os.IsNotExist(err) {
localToc = []byte{} localToc = []byte{}
} else { } else {
return fmt.Errorf("error reading local toc: %w", err) return false, fmt.Errorf("error reading local toc: %w", err)
} }
} }
if a.HasBreakingChanges(string(localToc), string(fileData)) { if a.HasBreakingChanges(string(localToc), string(fileData)) {
@@ -115,13 +114,13 @@ func (a *Addon) Update(body []byte) (err error) {
log.Printf("Updating file %s", localPath) log.Printf("Updating file %s", localPath)
err = UpdateFile(localPath, fileData) err = UpdateFile(localPath, fileData)
if err != nil { if err != nil {
return fmt.Errorf("error updating file: %w", err) return false, fmt.Errorf("error updating file: %w", err)
} }
} }
if hasBreakingChanges { if hasBreakingChanges {
Warning.Printf("Has breaking changes") Warning.Printf("Has breaking changes")
} }
return nil return hasBreakingChanges, nil
} }
func (a *Addon) GetLocalTocPath() string { func (a *Addon) GetLocalTocPath() string {
return filepath.Join(settings.GamePath, "Interface", "AddOns", a.Name, a.Name+".toc") return filepath.Join(settings.GamePath, "Interface", "AddOns", a.Name, a.Name+".toc")

View File

@@ -36,18 +36,18 @@ func (a *AddonService) GetLocalVersion(name string) (string, error) {
return addon.GetLocalVersion() return addon.GetLocalVersion()
} }
func (a *AddonService) UpdateAddon(name string) (addon Addon, err error) { func (a *AddonService) UpdateAddon(name string) (hasBreakingChanges bool, err error) {
addon, err = a.GetAddon(name) addon, err := a.GetAddon(name)
if err != nil { if err != nil {
return return false, err
} }
release, err := addon.GetRemoteRelease() release, err := addon.GetRemoteRelease()
if err != nil { if err != nil {
return return
} }
err = addon.Update(release) hasBreakingChanges, err = addon.Update(release)
if err != nil { if err != nil {
return return
} }
return addon, nil return hasBreakingChanges, nil
} }

6
app.go
View File

@@ -76,9 +76,9 @@ func (a *App) GetAddonLocalVersion(name string) (res StringResponse) {
return res return res
} }
func (a *App) UpdateAddon(name string) (res AddonResponse) { func (a *App) UpdateAddon(name string) (res BoolResponse) {
addon, err := addonService.UpdateAddon(name) hasBreakingChanges, err := addonService.UpdateAddon(name)
res.Data = addon res.Data = hasBreakingChanges
if err != nil { if err != nil {
res.Error = err.Error() res.Error = err.Error()
} }

View File

@@ -5,6 +5,8 @@
let localVersion = "0.0.0"; let localVersion = "0.0.0";
let remoteVersion = "0.0.0"; let remoteVersion = "0.0.0";
let upToDate = true; let upToDate = true;
let breakingChanges = false;
let wasUpdated = false;
GetAddonLocalVersion(addon.name).then((res) => { GetAddonLocalVersion(addon.name).then((res) => {
localVersion = res.data; localVersion = res.data;
}); });
@@ -17,6 +19,9 @@
const res = await UpdateAddon(addon.name); const res = await UpdateAddon(addon.name);
if (res.error) { if (res.error) {
console.error(res.error); console.error(res.error);
} else {
breakingChanges = res.data;
wasUpdated = true;
} }
GetAddonLocalVersion(addon.name).then((res) => { GetAddonLocalVersion(addon.name).then((res) => {
localVersion = res.data; localVersion = res.data;

View File

@@ -12,7 +12,6 @@
} }
}); });
let gamePath = "";
let gamePathValid = false; let gamePathValid = false;
IsGamePathValid().then((res) => { IsGamePathValid().then((res) => {
if (res.error) { if (res.error) {

View File

@@ -20,4 +20,4 @@ export function SelectDirectory():Promise<main.StringResponse>;
export function SetGamePath(arg1:string):Promise<main.StringResponse>; export function SetGamePath(arg1:string):Promise<main.StringResponse>;
export function UpdateAddon(arg1:string):Promise<main.AddonResponse>; export function UpdateAddon(arg1:string):Promise<main.BoolResponse>;