It Actually Works!!!

This commit is contained in:
comp500 2019-06-12 21:35:44 +01:00
parent fa2f7e499e
commit 25747ad8bd
No known key found for this signature in database
GPG Key ID: 214C822FFEC586B5
3 changed files with 83 additions and 13 deletions

View File

@ -89,14 +89,13 @@ func getModIDFromString(mod string) (bool, int, error) {
return false, 0, nil return false, 0, nil
} }
func createModFile(flags core.Flags, modID int, fileID int, modInfo modInfo) error { func createModFile(flags core.Flags, modInfo modInfo, fileInfo modFileInfo) error {
fileInfo, err := getFileInfo(modID, fileID)
updateMap := make(map[string]map[string]interface{}) updateMap := make(map[string]map[string]interface{})
var err error
updateMap["curseforge"], err = cfUpdater{ updateMap["curseforge"], err = cfUpdater{
ProjectID: modID, ProjectID: modInfo.ID,
FileID: fileID, FileID: fileInfo.ID,
// TODO: determine update channel // TODO: determine update channel
ReleaseChannel: "release", ReleaseChannel: "release",
}.ToMap() }.ToMap()
@ -121,6 +120,7 @@ func createModFile(flags core.Flags, modID int, fileID int, modInfo modInfo) err
fmt.Printf("%#v\n", modMeta) fmt.Printf("%#v\n", modMeta)
// TODO: what to do if it already exists? // TODO: what to do if it already exists?
// TODO: add to index
return modMeta.Write() return modMeta.Write()
} }
@ -172,15 +172,29 @@ func cmdInstall(flags core.Flags, mod string, modArgsTail []string) error {
fmt.Println(mcVersion) fmt.Println(mcVersion)
modInfo, err := getModInfo(modID) modInfo, err := getModInfo(modID)
fmt.Println(err) if err != nil {
return cli.NewExitError(err, 1)
}
fmt.Println(modInfo) fmt.Println(modInfo)
_ = index _ = index
if fileID == 0 { if fileID == 0 {
fmt.Println("WIP: get an actual file ID!!!")
return nil return nil
} }
return createModFile(flags, modID, fileID, modInfo) fileInfo, err := getFileInfo(modID, fileID)
if err != nil {
return cli.NewExitError(err, 1)
}
err = createModFile(flags, modInfo, fileInfo)
if err != nil {
return cli.NewExitError(err, 1)
}
return nil
} }
type cfUpdateParser struct{} type cfUpdateParser struct{}

View File

@ -1,5 +1,12 @@
package curseforge package curseforge
import "github.com/comp500/packwiz/core" import (
"encoding/json"
"fmt"
"os"
"github.com/comp500/packwiz/core"
"github.com/urfave/cli"
)
type twitchPackMeta struct { type twitchPackMeta struct {
Name string `json:"name"` Name string `json:"name"`
@ -14,14 +21,59 @@ type twitchPackMeta struct {
Mods []struct { Mods []struct {
ID int `json:"addonID"` ID int `json:"addonID"`
File struct { File struct {
// TODO: this is exactly the same as fileInfo, but with capitalised // This is exactly the same as modFileInfo, but with capitalised
// FileNameOnDisk. Move requesting stuff out of createModFile? // FileNameOnDisk.
ID int `json:"id"`
FileName string `json:"FileNameOnDisk"`
FriendlyName string `json:"fileName"`
Date cfDateFormat `json:"fileDate"`
Length int `json:"fileLength"`
FileType int `json:"releaseType"`
// fileStatus? means latest/preferred?
DownloadURL string `json:"downloadUrl"`
GameVersions []string `json:"gameVersion"`
Fingerprint int `json:"packageFingerprint"`
Dependencies []struct {
ModID int `json:"addonId"`
Type int `json:"type"`
} `json:"dependencies"`
} `json:"installedFile"` } `json:"installedFile"`
} `json:"installedAddons"` } `json:"installedAddons"`
} }
func cmdImport(flags core.Flags, file string) error { func cmdImport(flags core.Flags, file string) error {
// TODO: implement // TODO: implement
var packMeta twitchPackMeta
// TODO: is this relative to something?
f, err := os.Open(file)
if err != nil {
return err
}
err = json.NewDecoder(f).Decode(&packMeta)
if err != nil {
return err
}
// TODO: magic involving existing files
for _, v := range packMeta.Mods {
// TODO: progress bar?
// TODO: batch requests?
modInfo, err := getModInfo(v.ID)
if err != nil {
// TODO: Fail more quietly?
return cli.NewExitError(err, 1)
}
fmt.Println(v)
fmt.Println(modFileInfo(v.File))
err = createModFile(flags, modInfo, modFileInfo(v.File))
if err != nil {
return cli.NewExitError(err, 1)
}
}
return nil return nil
} }

View File

@ -153,14 +153,18 @@ type cfDateFormat struct {
time.Time time.Time
} }
// Curse switched to proper RFC3339, but previously downloaded metadata still uses the old format :(
func (f *cfDateFormat) UnmarshalJSON(input []byte) error { func (f *cfDateFormat) UnmarshalJSON(input []byte) error {
trimmed := strings.Trim(string(input), `"`) trimmed := strings.Trim(string(input), `"`)
time, err := time.Parse(cfDateFormatString, trimmed) timeValue, err := time.Parse(time.RFC3339Nano, trimmed)
if err != nil {
timeValue, err = time.Parse(cfDateFormatString, trimmed)
if err != nil { if err != nil {
return err return err
} }
}
f.Time = time f.Time = timeValue
return nil return nil
} }