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_loader
andcheck_game_version
fromMod
- Added
filters
toProfile
andMod
, addedoverride_filters
option toMod
- Added
pin
toMod
- Rewrote
upgrade::check
to use filters instead - The method
Filter::filter
will 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_channel
toDownloadFile
- Switched to
std::sync:LazyLock
and removed theonce_cell
dependency - Added
MODRINTH_API
,GITHUB_API
, andCURSEFORGE_API
as lazily initialised global variables so that they don't need to be passed around everywhere- Removed
APIs
- Removed
- Changed
Downloadable
intoDownloadFile
and added game version and loader data so that it can be used to perform platform agnostic filtering - Made functions in
upgrade::check
platform agnostic - Added
ModIdentifier::fetch_version_likes
method to fetch platform agnosticDownloadFiles
from its platform dependant enum variants- Replaces the
get_compatible_downloadable
function inupgrade::mod_downloadable
- Replaces the
gorilla-devs/ferium#422
: Fix a crash when identical files are scanned- Replace
tokio
IO withstd::io
, andasync_zip
withzip
- Use
zip-extensions
for compressing and extracting to directories- Replace
modpack::extract_zip
modpack::compress_dir
with re-exports ofzip_extract
andzip_create_from_directory
fromzip_extensions
- Replace
- Make many functions not
async
- Downloading modpacks from
upgrade::modpack_downloadable
no longer returns the file, it returns the path instead
- Made argument and return type in
add::parse_id()
owned - Made
add()
takeModIdentifier
s instead ofString
s, so the function itself doesn't parse IDs - Remove duplicate curseforge and modrinth IDs in
add()
- Added
scan
module scan()
reads the files in the provided directory, sends their hashes to modrinth and curseforge, and return the project/mod IDs provided
- Add
APIs
struct to store and pass ferinth, furse, and octocrab clients together - Make
ModIdentifierRef::GitHubRepository
have the references inside the tuple ModIdentifierRef
is nowCopy
- Replace many instances of
&str
withimpl 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
AsRef
in as many places as possible - Replace functions generics with direct
impl
s as much as possible - Added
add_multiple
andadd_single
functions toadd
from 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>
withbool
for whether or not to check game version or mod loader - Added
ModIdentifierRef
andModIdentifier.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_versions
andloaders
specified in the ModrinthProject
struct 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_PATH
which usesLazy
- Extract the file opening to
open_config_file()
- Move
config::read_file()
toread_wrapper()
since it is not specific to theconfig
module - Derive and use
Default
for theconfig::Config
when creating an empty config - Skip serialising the active index and profiles/modpacks vectors if they're zero or empty
- Remove the
Option
incheck_game_version
andcheck_mod_loader
fields forMod
- Replace
TryFrom<&str>
withFromStr
forModLoader
- Derive
Copy
forModLoader
- 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::check
to 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_zip
to the latest version0.0.16
- Switch to
async_zip
- Add
name
argument topick_folder()
- Move
get_minecraft_dir()
to root folder, removemisc
module 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_ext
andforce_lock()
- Only use required features for
zip
- Switch to
once_cell
and 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
urlencoding
andsize
- Remove unnecessary
Arc
s - Use the website URL to determine that a project is a a mod/modpack on CF
- Simplify
config
module methods - Remove redundant doc-comments
- File picker now uses sync dialogue on all platforms
- Edit
file_picker.rs
to 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
check
functions - Change
Downloadable
'ssize
field intolength
, remove theOption
, and make it a number - Remove the
total
closure inDownloadable::download()
- Remove
Downloadable::from_file_id()
- Edit functions in
mod_downloadable.rs
to 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
Downloadable
useurl::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
DistributionDeniedError
now 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_overrides
field toModpack
in config - Change
get_curseforge_manifest
andget_modrinth_manifest
todownload_curseforge_modpack
anddownload_modrinth_modpack
respectively
- Added Modrinth modpacks
- Modpack add commands only return the project struct now
- Change
Downloadable::filename
tooutput
which will include the path from the instance directory - Added
Downloadable::size
for 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
progress
closure is now atotal
andupdate
closure Downloadable::from_ids()
now properly decodes percent characters (e.g.%20
->
- Update to Furse
1.1.2
- Add
from_ids
to create a downloadable from a curseforge project and file id
- Added minor versions to all dependencies
- Moved
check
andupgrade
toupgrade::check
andupgrade::mod_downloadable
- Moved the
Downloadable
toupgrade
, it also has a newdownload()
function - Added modpacks to the config
- Added
modpack
with 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::Incompatible
to 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
upgrade
functions have been slightly updated - Removed unnecessary
async
s - Replaced many
Vec<_>
s with&[_]
- The add functions now check if mods have the same name too
- This fixes #53
- Rename the
upgrade
module 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
prompt
to file pickers - Used the
default
provided 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_version
andshould_check_mod_loader
- They also use this when adding the mod to the config
- Replace the
for
loop 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_check
andmod_loader_to_check
provided
- 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_loader
andcheck_game_version
flag to each mod - They are
None
by default - If they are
Some(false)
then the corresponding checks are skipped inupgrade.rs
- Removed
no_patch_check
,remove_semver_patch()
,SemVerError
, and thesemver
dependency
- Remove
config
from 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.rs
from 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.rs
from ferium to libium- Added improved custom error handling
- Extracted file dialogues to
file_picker.rs