Correctly handle import/export of .disabled (optional disabled) mods

This commit is contained in:
comp500 2019-11-15 23:31:27 +00:00
parent a553c3ce08
commit b546141d34
4 changed files with 17 additions and 7 deletions

View File

@ -54,7 +54,11 @@ var exportCmd = &cobra.Command{
// TODO: how to handle files with CF metadata, but with different download path?
if ok {
p := projectRaw.(cfUpdateData)
cfFileRefs = append(cfFileRefs, packinterop.AddonFileReference{ProjectID: p.ProjectID, FileID: p.FileID})
cfFileRefs = append(cfFileRefs, packinterop.AddonFileReference{
ProjectID: p.ProjectID,
FileID: p.FileID,
OptionalDisabled: mod.Option != nil && mod.Option.Optional && !mod.Option.Default,
})
} else {
// If the mod doesn't have the metadata, save it into the zip
path, err := filepath.Rel(filepath.Dir(indexPath), mod.GetDestFilePath())

View File

@ -52,8 +52,9 @@ func (c cursePackMeta) Mods() []AddonFileReference {
list := make([]AddonFileReference, len(c.Files))
for i, v := range c.Files {
list[i] = AddonFileReference{
ProjectID: v.ProjectID,
FileID: v.FileID,
ProjectID: v.ProjectID,
FileID: v.FileID,
OptionalDisabled: !v.Required,
}
}
return list

View File

@ -21,6 +21,8 @@ type twitchInstalledPackMeta struct {
File struct {
// I've given up on using this cached data, just going to re-request it
ID int `json:"id"`
// Used to determine if the mod is optional-disabled
FileNameOnDisk string
} `json:"installedFile"`
} `json:"installedAddons"`
// Used to determine if modpackOverrides should be used or not
@ -51,8 +53,9 @@ func (m twitchInstalledPackMeta) Mods() []AddonFileReference {
list := make([]AddonFileReference, len(m.ModsInternal))
for i, v := range m.ModsInternal {
list[i] = AddonFileReference{
ProjectID: v.ID,
FileID: v.File.ID,
ProjectID: v.ID,
FileID: v.File.ID,
OptionalDisabled: strings.HasSuffix(v.File.FileNameOnDisk, ".disabled"),
}
}
return list

View File

@ -61,10 +61,12 @@ func ReadMetadata(s ImportPackSource) ImportPackMetadata {
return packImport
}
// AddonFileReference is a pair of Project ID and File ID to reference a single file on CurseForge
// AddonFileReference is a struct to reference a single file on CurseForge
type AddonFileReference struct {
ProjectID int
FileID int
// OptionalDisabled is true if the file is optional and disabled (turned off in Twitch launcher)
OptionalDisabled bool
}
func WriteManifestFromPack(pack core.Pack, fileRefs []AddonFileReference, out io.Writer) error {
@ -79,7 +81,7 @@ func WriteManifestFromPack(pack core.Pack, fileRefs []AddonFileReference, out io
ProjectID int `json:"projectID"`
FileID int `json:"fileID"`
Required bool `json:"required"`
}{ProjectID: fr.ProjectID, FileID: fr.FileID, Required: true}
}{ProjectID: fr.ProjectID, FileID: fr.FileID, Required: !fr.OptionalDisabled}
}
modLoaders := make([]modLoaderDef, 0, 1)