diff --git a/core/index.go b/core/index.go index b7e0805..21a7f29 100644 --- a/core/index.go +++ b/core/index.go @@ -276,9 +276,21 @@ func (in Index) FindMod(modName string) (string, bool) { _, file := filepath.Split(v.File) fileTrimmed := strings.TrimSuffix(file, ModExtension) if fileTrimmed == modName { - return v.File, true + return filepath.Join(filepath.Dir(in.indexFile), filepath.FromSlash(v.File)), true } } } return "", false } + +// GetAllMods finds paths to every metadata file (Mod) in the index +func (in Index) GetAllMods() []string { + var list []string + baseDir := filepath.Dir(in.indexFile) + for _, v := range in.Files { + if v.MetaFile { + list = append(list, filepath.Join(baseDir, filepath.FromSlash(v.File))) + } + } + return list +} diff --git a/main.go b/main.go index 0d5edce..4fc3065 100644 --- a/main.go +++ b/main.go @@ -144,34 +144,31 @@ func cmdUpdate(flags core.Flags, mod string) error { var singleUpdatedName string if len(mod) == 0 || mod == "*" { multiple = true - + updaterMap := make(map[string][]core.Mod) fmt.Println("Reading mod files...") - for _, v := range index.Files { - if v.MetaFile { - // TODO: check fromslash stuff aaa - modData, err := core.LoadMod(v.File) - if err != nil { - fmt.Printf("Error reading mod file: %s", err.Error()) - continue - } + for _, v := range index.GetAllMods() { + modData, err := core.LoadMod(v) + if err != nil { + fmt.Printf("Error reading mod file: %s", err.Error()) + continue + } - updaterFound := false - for k := range modData.Update { - slice, ok := updaterMap[k] + updaterFound := false + for k := range modData.Update { + slice, ok := updaterMap[k] + if !ok { + _, ok = core.Updaters[k] if !ok { - _, ok = core.Updaters[k] - if !ok { - continue - } - slice = []core.Mod{} + continue } - updaterFound = true - updaterMap[k] = append(slice, modData) - } - if !updaterFound { - fmt.Printf("A supported update system for \"%s\" cannot be found.", modData.Name) + slice = []core.Mod{} } + updaterFound = true + updaterMap[k] = append(slice, modData) + } + if !updaterFound { + fmt.Printf("A supported update system for \"%s\" cannot be found.", modData.Name) } } @@ -294,7 +291,7 @@ func cmdUpdate(flags core.Flags, mod string) error { } if !updaterFound { // TODO: use file name instead of Name when len(Name) == 0 in all places? - return cli.NewExitError("A supported update system for \""+ modData.Name +"\" cannot be found.", 1) + return cli.NewExitError("A supported update system for \""+modData.Name+"\" cannot be found.", 1) } }