Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 35 additions & 42 deletions arclight_installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,19 @@ import (
)

type (
ArclightInstaller struct {
ArclightInstaller struct {}

ArclightAssets struct {
AssetsUrl string `json:"url"`
AssetsName string `json:"name"`
DownloadUrl string `json:"browser_download_url"`
}
Comment thread
Fellsoul marked this conversation as resolved.

ArclightRelease struct {
Assets []ArclightAssets `json:"assets"`
IsExpired bool
PublishTime string `json:"published_at"`
Comment thread
Fellsoul marked this conversation as resolved.
}

ArclightAssets struct {
AssetsUrl string `json:"url"`
AssetsName string `json:"name"`
DownloadUrl string `json:"browser_download_url"`
}
)

var DefaultArclightInstaller = &ArclightInstaller{}
Expand Down Expand Up @@ -61,52 +60,48 @@ func (r *ArclightInstaller) InstallWithLoader(path, name string, target string,
}
if !alreadyFind {
loger.Info("not find the suitable builder, the version should be included in the following list:")
for i := 0; i < len(allVersions); i += 1 {
if versions[allVersions[i]].IsExpired {
loger.Info("versions:", allVersions[i], " EXPIRED, DO NOT SUPPORT")
for _, version := range allVersions {
if versions[version].IsExpired {
loger.Info("versions:", version, " EXPIRED, DO NOT SUPPORT")
} else {
loger.Info("versions:", allVersions[i])
loger.Info("versions:", version)
}
}
return "", &VersionNotFoundErr{target}
}
}
ExactDownloadeName := versions[loader].Assets[0].AssetsName
exactDownloadeName := versions[loader].Assets[0].AssetsName
ArclightInstallerUrl := versions[loader].Assets[0].DownloadUrl
if version, ok := versions[loader]; ok && version.IsExpired {
loger.Fatal("Sorry, the one you choose has already expired, try another version.")
return "", &VersionNotFoundErr{target}
}
var buildJar string
if buildJar, err = DefaultHTTPClient.DownloadDirect(ArclightInstallerUrl, ExactDownloadeName, downloadingCallback(ArclightInstallerUrl)); err != nil {
if buildJar, err = DefaultHTTPClient.DownloadDirect(ArclightInstallerUrl, exactDownloadeName, downloadingCallback(ArclightInstallerUrl)); err != nil {
return
}
installed, err = r.Runbuilder(buildJar, ExactDownloadeName, path)
installed, err = r.Runbuilder(buildJar, exactDownloadeName, path)
if err != nil {
loger.Info("an error occurred while running the server jar file, but you can still do that manually.")
loger.Error(err)
}
return
}

func (r *ArclightInstaller) ListVersions(snapshot bool) (versions []string, err error) {
data, err := r.GetInstallerVersions()
func (r *ArclightInstaller) ListVersions(snapshot bool) ([]string, error) {
additionalVersions, err := r.GetInstallerVersions()
if err != nil {
return
}
var dataVersions []string = r.GetOnlyVersions(data)
for _, v := range dataVersions {
versions = append(versions, v)
return nil, err
}
return
return r.GetOnlyVersions(additionalVersions), err
}

func (r *ArclightInstaller) GetLatestVersion() (version string, err error) {
data, err := r.GetInstallerVersions()
additionalVersions, err := r.GetInstallerVersions()
if err != nil {
return
}
var dataVersions []string = r.GetOnlyVersions(data)
var dataVersions []string = r.GetOnlyVersions(additionalVersions)
var v0, v1 Version
for _, v := range dataVersions {
if v1, err = VersionFromString(v); err != nil {
Expand All @@ -121,51 +116,49 @@ func (r *ArclightInstaller) GetLatestVersion() (version string, err error) {
}

func (r *ArclightInstaller) GetInstallerVersions() (map[string]ArclightRelease, error) {
data := make(map[string]ArclightRelease)
additionalVersions := make(map[string]ArclightRelease)
link := "https://api.github.com/repos/IzzelAliz/Arclight/releases"
var releases []*ArclightRelease
err := DefaultHTTPClient.GetJson(link, &releases)
if err != nil {
return data, err
return additionalVersions, err
}
for _, release := range releases {
details := strings.Split(release.Assets[0].AssetsName, "-")
//details should be ["arclight","forge","{VERSION}","{BUILDNUM}.jar"], so append value of index 2
// details should be ["arclight","forge","{VERSION}","{BUILDNUM}.jar"], so append value of index 2
timeDetails := strings.Split(release.PublishTime, "-")
Comment thread
Fellsoul marked this conversation as resolved.
Outdated
//time should be "{YEAR}-{MONTH}-{DATE}T{CLOCK}}"
// time should be "{YEAR}-{MONTH}-{DATE}T{CLOCK}}"
year, err := strconv.Atoi(timeDetails[0])
if err != nil {
return data, err
return additionalVersions, err
}
month, err := strconv.Atoi(timeDetails[1])
if err != nil {
return data, err
return additionalVersions, err
}
if year < 2024 || (year == 2024 && month < 2) {
release.IsExpired = true
} else {
release.IsExpired = false
}
if len(data[details[2]].Assets) == 0 {
data[details[2]] = *release
if len(additionalVersions[details[2]].Assets) == 0 {
additionalVersions[details[2]] = *release
}
//to get the newest builder for each version
// to get the newest builder for each version
}
return data, err
return additionalVersions, err
}

func (r *ArclightInstaller) GetOnlyVersions(data map[string]ArclightRelease) (versions []string) {
for k, _ := range data {
func (r *ArclightInstaller) GetOnlyVersions(additionalVersions map[string]ArclightRelease) (versions []string) {
for k, _ := range additionalVersions {
versions = append(versions, k)
}
return
}

func (r *ArclightInstaller) Runbuilder(buildJar string, ExactDownloadName string, path string) (installed string, err error) {
if err != nil {
return
}
NameWithoutSuffix := ExactDownloadName[0 : len(ExactDownloadName)-4]
const SUFFIX_LENGTH int = 4
NameWithoutSuffix := ExactDownloadName[0 : len(ExactDownloadName)-SUFFIX_LENGTH]
serverDirectory := filepath.Join(".", "server-"+NameWithoutSuffix)
os.RemoveAll(serverDirectory)
err = os.MkdirAll(serverDirectory, os.ModePerm)
Expand All @@ -185,13 +178,13 @@ func (r *ArclightInstaller) Runbuilder(buildJar string, ExactDownloadName string
return
}
cmd := exec.CommandContext(ctx, javapath, "-jar", buildJar)
cmd.Dir = filepath.Join(path, "server-"+ExactDownloadName[0:len(ExactDownloadName)-4])
cmd.Dir = filepath.Join(path, "server-"+ExactDownloadName[0 : len(ExactDownloadName)-SUFFIX_LENGTH])
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stdout
loger.Infof("Running %q...", cmd.String())
if err = cmd.Run(); err != nil {
return
}
installed = buildJar + "\n"
installed = buildJar
return
}