Added filters
- Structs are defined in
config::filter - 6 types: mod loader (prefer and any), game version, minor game version, release channel, and filename regex
- Removed game version and mod loader from
Profile - Removed
check_mod_loaderandcheck_game_versionfromMod - Added
filterstoProfileandMod, addedoverride_filtersoption toMod - Added
pintoMod - Rewrote
upgrade::checkto use filters instead - The method
Filter::filterwill return indices of the matching files - Mod resolution will now fail with detailed error messages, including if any of the filters produced an empty set, or if intersecting the filtered sets failed
- Added
release_channeltoDownloadFile
- Switched to
std::sync:LazyLockand removed theonce_celldependency - Added
MODRINTH_API,GITHUB_API, andCURSEFORGE_APIas lazily initialised global variables so that they don't need to be passed around everywhere- Removed
APIs
- Removed
- Changed
DownloadableintoDownloadFileand added game version and loader data so that it can be used to perform platform agnostic filtering - Made functions in
upgrade::checkplatform agnostic - Added
ModIdentifier::fetch_version_likesmethod to fetch platform agnosticDownloadFilesfrom its platform dependant enum variants- Replaces the
get_compatible_downloadablefunction inupgrade::mod_downloadable
- Replaces the
gorilla-devs/ferium#422: Fix a crash when identical files are scanned- Replace
tokioIO withstd::io, andasync_zipwithzip - Use
zip-extensionsfor compressing and extracting to directories- Replace
modpack::extract_zipmodpack::compress_dirwith re-exports ofzip_extractandzip_create_from_directoryfromzip_extensions
- Replace
- Make many functions not
async - Downloading modpacks from
upgrade::modpack_downloadableno longer returns the file, it returns the path instead
- Made argument and return type in
add::parse_id()owned - Made
add()takeModIdentifiers instead ofStrings, so the function itself doesn't parse IDs - Remove duplicate curseforge and modrinth IDs in
add() - Added
scanmodule scan()reads the files in the provided directory, sends their hashes to modrinth and curseforge, and return the project/mod IDs provided
- Add
APIsstruct to store and pass ferinth, furse, and octocrab clients together - Make
ModIdentifierRef::GitHubRepositoryhave the references inside the tuple ModIdentifierRefis nowCopy- Replace many instances of
&strwithimpl AsRef<str> - Change
upgrade::check::github()to accept a list of asset names instead- This is so that both REST and GraphQL responses can be used
- Improved error messages for custom error types
- Simplify error handling since custom catching of "not found" errors is no longer needed
- Added a function to parse a string into either a curseforge, github, or modrinth identifier
- Required information about projects is now sent batched to the relevent APIs
- GitHub batched queries use GraphQL
github(),curseforge(), andmodrinth()do not perform any network requests, they solely use the data provided in their arguments- All of these functions now perform compatibility checks by themselves, again without any additional network requests
- Update dependencies
- Replace references with
AsRefin as many places as possible - Replace functions generics with direct
impls as much as possible - Added
add_multipleandadd_singlefunctions toaddfrom ferium to facilitate adding of multiple mods
Add Fabric backwards compatibility for Quilt when adding Modrinth mods.
Fix a bug where the directory to which a file was being downloaded would not be created.
- Replace
Option<bool>withboolfor whether or not to check game version or mod loader - Added
ModIdentifierRefandModIdentifier.as_ref()for comparing mod identifiers without cloning - Replaced many procedural loops with functional alternatives
- Added
Profile.get_version(check_game_version)andProfile.get_loader(check_mod_loader)to replace this common pattern:if check_(game_version | mod_loader) { Some(&profile.(game_version | mod_loader)) } else { None }
- Use the
game_versionsandloadersspecified in the ModrinthProjectstruct instead of using version resolution - Only use
.to_string()instead of.into<String>()when converting a value to aString - Replace
config::file_path()withDEFAULT_CONFIG_PATHwhich usesLazy - Extract the file opening to
open_config_file() - Move
config::read_file()toread_wrapper()since it is not specific to theconfigmodule - Derive and use
Defaultfor theconfig::Configwhen creating an empty config - Skip serialising the active index and profiles/modpacks vectors if they're zero or empty
- Remove the
Optionincheck_game_versionandcheck_mod_loaderfields forMod - Replace
TryFrom<&str>withFromStrforModLoader - Derive
CopyforModLoader - Determine
get_minecraft_dir()at compile-time - Set the UNIX permissions when compressing a directory
- Replace
curseforge::read_manifest_file()andmodrinth::read_metadata_file()withread_file_from_zip() - Refactor
upgrade::checkto make it more readable - Remove the subdirectory classification done when converting to a
Downloadable, modpack installers can do this manually
Support for NeoForge
- Fix #343; When checking github assets, check that the name ends with
.jar, and strip it before splitting the string - Tweak the distribution denied error message
Fix compilation on linux
- In
add.rs, add mods to the profile and return only the mod name - Add option to override compatibility checks when adding
- Update
async_zipto the latest version0.0.16
- Switch to
async_zip - Add
nameargument topick_folder() - Move
get_minecraft_dir()to root folder, removemiscmodule andget_major_mc_versions() - Reading manifest or metadata files now returns an optional result
- Removed the rather redundant
deser_manifest()anddeser_metadata()functions - Add a recursive
compress_dir()function - Tweak Modrinth modpack structs to use ferinth's types
- Tweak
Downloadable's file length field's type - Wrap
Downloadable::download()'s opened file in aBufWriter - Only update the progress bar after the write is finished
- Remove
mutex_extandforce_lock()
- Only use required features for
zip - Switch to
once_celland removelazy_static
Loosen dependency specification and remove unnecessary bytes dependency
Fixed a bug where the file returned from config::get_file() is not readable if it's newly created
- Update dependencies, remove
urlencodingandsize - Remove unnecessary
Arcs - Use the website URL to determine that a project is a a mod/modpack on CF
- Simplify
configmodule methods - Remove redundant doc-comments
- File picker now uses sync dialogue on all platforms
- Edit
file_picker.rsto use the updated feature flags, fixes gorilla-devs/ferium#228 - The file picker function will now resolve
~and.to the home and cwd respectively - Added the android PojavLauncher to the default minecraft directory function
- Change the function signature of
checkfunctions - Change
Downloadable'ssizefield intolength, remove theOption, and make it a number - Remove the
totalclosure inDownloadable::download() - Remove
Downloadable::from_file_id() - Edit functions in
mod_downloadable.rsto match those ofcheck.rs
- Update dependencies
- Clean up imports in
add.rs - Switch to only XDG backend for
rfd add::modrinth()andadd::curseforge()now directly accept the project struct
Fix a bug where the file is not rewound after being written to
Fixes gorilla-devs/ferium#87
Update dependencies
- Update dependencies
- Make
Downloadableuseurl::Url
Update ferinth minor version
- Update dependencies
- gorilla-devs/ferium#113 Make dependencies use
~so that only minor versions are auto updated - Many small clippy lint fixes
- Improve error messages
- Add functions no longer add the mod to the config
- Modpack manifests will now accept unknown fields
DistributionDeniedErrornow has mod_id and file_id fields
Implemented CurseForge's third party distribution restrictions
modpack::add no longer adds the project to the config
- Add
install_overridesfield toModpackin config - Change
get_curseforge_manifestandget_modrinth_manifesttodownload_curseforge_modpackanddownload_modrinth_modpackrespectively
- Added Modrinth modpacks
- Modpack add commands only return the project struct now
- Change
Downloadable::filenametooutputwhich will include the path from the instance directory - Added
Downloadable::sizefor the file size
Downloadable::download()now directly downloads to the output file as a.part, it will rename it back to the actual filename after it finishes downloading- The
progressclosure is now atotalandupdateclosure Downloadable::from_ids()now properly decodes percent characters (e.g.%20->)
- Update to Furse
1.1.2 - Add
from_idsto create a downloadable from a curseforge project and file id
- Added minor versions to all dependencies
- Moved
checkandupgradetoupgrade::checkandupgrade::mod_downloadable - Moved the
Downloadabletoupgrade, it also has a newdownload()function - Added modpacks to the config
- Added
modpackwith a curseforge modpack and a function to add that to the config
- Changed
misc::get_mods_dir()tomisc::get_minecraft_dir(), the new function only returns the default Minecraft instance directory - Added
config::read_file()andconfig::deserialise() - The add commands now return the latest compatible _ of the mod
- Added
Error::Incompatibleto go along with this
- Added
- The curseforge add command checks if the project is a mod using the same method as the github add command
Revert back to octocrab
- Move from octocrab to octorust
- This fixes #52
- (I later realise that even though it does, octocrab was fine)
- Many GitHub related functions have had their signatures changed
- The
upgradefunctions have been slightly updated - Removed unnecessary
asyncs - Replaced many
Vec<_>s with&[_] - The add functions now check if mods have the same name too
- This fixes #53
- Rename the
upgrademodule tocheck - Changes in
check- Removed error
write_mod_file()now takes an output directory rather than a whole file- The functions now take a vector of items to search and return a reference to the latest compatible one using an
Option - The modrinth function now return the primary version file along side the version
- Create a new upgrade module which actually does upgrading stuff
- Functions to get the latest compatible 'item' for each mod source. These functions also implement the Quilt->Fabric backwards compatibility
- A function to use the previously mentioned functions from a mod identifier to return a downloadable
- Do not check the release name when checking the game version for github releases
- This fixes Ferium #47
- Added
promptto file pickers - Used the
defaultprovided to the no-gui pick folder
Change macOS default mods directory from using the ApplicationSupport shortcut to the actual Application Support directory
- Updated to Ferinth
2.2 - Add commands now accept
should_check_game_versionandshould_check_mod_loader - They also use this when adding the mod to the config
- Replace the
forloop incheck_mod_loader()with an iterator call - The upgrade functions no longer deal with Quilt -> Fabric backwards compatibility
- Upgrade functions (again) return only the compatibile asset they found
- Upgrade functions no longer take a
profile, they check for compatibility with thegame_version_to_checkandmod_loader_to_checkprovided
- Added minor versions to
Cargo.toml - Update to Furse
1.1- Implemented new error type
- Simplified checking if a project had already been added
upgrade::github()now checks that the asset isn't a sources jar
- Added Quilt to
ModLoader - Added
check_mod_loader()to check mod loader compatibility - The upgrade functions now return additional info, whether the mod was deemed compatible through backwards compatibility (e.g. Fabric mod on Quilt)
- Generally improved code in
upgrade
- Added a
check_mod_loaderandcheck_game_versionflag to each mod - They are
Noneby default - If they are
Some(false)then the corresponding checks are skipped inupgrade.rs - Removed
no_patch_check,remove_semver_patch(),SemVerError, and thesemverdependency
- Remove
configfrom function names in config module - Upgrade functions no longer download and write the mod file
write_mod_file()is now public
Update the config struct format
- Moved
upgrade.rsfrom ferium to libium- Added improved custom error handling
- Improved doc comments
- Made functions return the file/version/asset downloaded (similar to
add.rs) - Changed some variable names
- Moved
add.rsfrom ferium to libium- Added improved custom error handling
- Extracted file dialogues to
file_picker.rs