Add avorion ship copier
This commit is contained in:
3
avorion-ship-design-copy/go.mod
Normal file
3
avorion-ship-design-copy/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module avorion-ship-design-copier
|
||||
|
||||
go 1.23.0
|
143
avorion-ship-design-copy/main.go
Normal file
143
avorion-ship-design-copy/main.go
Normal file
@@ -0,0 +1,143 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var Error *log.Logger
|
||||
var Warning *log.Logger
|
||||
|
||||
func init() {
|
||||
log.SetFlags(log.Ldate | log.Lshortfile)
|
||||
logFile, err := os.Create("main.log")
|
||||
if err != nil {
|
||||
log.Printf("Error creating log file: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
logger := io.MultiWriter(os.Stdout, logFile)
|
||||
log.SetOutput(logger)
|
||||
|
||||
Error = log.New(io.MultiWriter(logFile, os.Stderr, os.Stdout),
|
||||
fmt.Sprintf("%sERROR:%s ", "\033[0;101m", "\033[0m"),
|
||||
log.Ldate|log.Lshortfile)
|
||||
Warning = log.New(io.MultiWriter(logFile, os.Stdout),
|
||||
fmt.Sprintf("%sWarning:%s ", "\033[0;93m", "\033[0m"),
|
||||
log.Ldate|log.Lshortfile)
|
||||
}
|
||||
|
||||
var steamWorkshopContentDir = `C:/Users/Administrator/Seafile/Projects-Go/GoProjects/steamcmd-api/steamcmd/steamapps/workshop/content/445220`
|
||||
var avorionRoaming = `C:/Users/Administrator/AppData/Roaming/Avorion`
|
||||
|
||||
func main() {
|
||||
steamWorkshopContentDir, _ = filepath.Abs(steamWorkshopContentDir)
|
||||
files, err := os.ReadDir(steamWorkshopContentDir)
|
||||
if err != nil {
|
||||
Error.Printf("Error reading steam workshop content dir: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
for _, file := range files {
|
||||
wg.Add(1)
|
||||
go func(file os.DirEntry) {
|
||||
defer wg.Done()
|
||||
|
||||
if !file.IsDir() {
|
||||
return
|
||||
}
|
||||
|
||||
src := filepath.Join(steamWorkshopContentDir, file.Name())
|
||||
modFile := filepath.Join(steamWorkshopContentDir, file.Name(), "modinfo.lua")
|
||||
fileHandle, err := os.Open(modFile)
|
||||
if err != nil {
|
||||
if !os.IsNotExist(err) {
|
||||
Error.Printf("Error opening mod file '%s': '%v'", modFile, err)
|
||||
return
|
||||
} else {
|
||||
log.Printf("Mod '%s' is a ship!", src)
|
||||
dst := filepath.Join(avorionRoaming, "ships", "workshop", file.Name())
|
||||
err2 := Copy(src, dst)
|
||||
if err2 != nil {
|
||||
Error.Printf("Error copying '%s' to '%s': '%v'", src, dst, err2)
|
||||
return
|
||||
}
|
||||
|
||||
shipFileSrc := filepath.Join(steamWorkshopContentDir, file.Name(), "design.xml")
|
||||
planFileSrc := filepath.Join(steamWorkshopContentDir, file.Name(), "plan.xml")
|
||||
turretFileSrc := filepath.Join(steamWorkshopContentDir, file.Name(), "turretdesign.xml")
|
||||
|
||||
shipFileDst := filepath.Join(avorionRoaming, "ships", "ships", file.Name()+".ship.xml")
|
||||
planFileDst := filepath.Join(avorionRoaming, "ships", "plans", file.Name()+".plan.xml")
|
||||
turretFileDst := filepath.Join(avorionRoaming, "ships", "turrets", file.Name()+".turret.xml")
|
||||
|
||||
if FileExists(shipFileSrc) {
|
||||
err := Copy(shipFileSrc, shipFileDst)
|
||||
if err != nil {
|
||||
Error.Printf("Error copying '%s' to '%s': '%v'", shipFileSrc, shipFileDst, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if FileExists(planFileSrc) {
|
||||
err := Copy(planFileSrc, planFileDst)
|
||||
if err != nil {
|
||||
Error.Printf("Error copying '%s' to '%s': '%v'", planFileSrc, planFileDst, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if FileExists(turretFileSrc) {
|
||||
err := Copy(turretFileSrc, turretFileDst)
|
||||
if err != nil {
|
||||
Error.Printf("Error copying '%s' to '%s': '%v'", turretFileSrc, turretFileDst, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
log.Printf("'%s' is a mod, not a ship, skipping", src)
|
||||
fileHandle.Close()
|
||||
return
|
||||
}
|
||||
}(file)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func Copy(src, dst string) error {
|
||||
cmd := exec.Command("cp", "-a", src, dst)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error copying '%s' to '%s': %v\n%s", src, dst, err, string(out))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func FileExists(path string) bool {
|
||||
fileHandle, err := os.Open(path)
|
||||
if err == nil {
|
||||
fileHandle.Close()
|
||||
return true
|
||||
}
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
_, err2 := os.Stat(path)
|
||||
if err == nil {
|
||||
return true
|
||||
}
|
||||
if os.IsNotExist(err2) {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
20
avorion-ship-design-copy/main.log
Normal file
20
avorion-ship-design-copy/main.log
Normal file
@@ -0,0 +1,20 @@
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2448424958' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547911644' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2448461336' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2448470414' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2448426634' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2870507130' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547912835' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547904213' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547927481' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547918360' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547910789' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547929251' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547919133' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547926761' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2832727474' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2448476238' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547881665' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547891637' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2842358106' is a ship!
|
||||
2024/09/17 main.go:63: Mod 'C:\Users\Administrator\Seafile\Projects-Go\GoProjects\steamcmd-api\steamcmd\steamapps\workshop\content\445220\2547890050' is a ship!
|
Reference in New Issue
Block a user