Skip to content

Latest commit

 

History

History
874 lines (661 loc) · 37.4 KB

CHANGELOG.md

File metadata and controls

874 lines (661 loc) · 37.4 KB

Changelog for Ferium

v5.0.0

TBD

  • Features
  • Bug Fixes
  • Internal Changes

v4.7.1

17.09.2024

  • Internal Changes
    • Implement changes to libium, mainly the removal of async functions
      • #422 has been fixed
    • Also remove unnecessary async from code here
    • Consistently use FuturesUnordered for parallelising code

v4.7.0

11.06.2024

  • Features

    • Scan a directory (the profile's output directory by default) to automatically add the mods
    • Uses a maximum of 4 network requests! Unfortunately file hashing and searching for the file on the server take some time so it's not instant, especially with a large number of mods.
  • Internal Changes

    • Move code for displaying successes and failures to the add module

v4.6.0

10.06.2024

You can now add multiple mods at once! (#175)

  • Features

    • Adding mods has been significantly improved
    • No matter how many mods you add, there will only be a maximum of 3 network requests (for each platform)
    • The --ignore-game-version and --ignore-mod-loader flags will only work when adding a single mod, since these are meant for fine-tuning
  • Bug Fixes

    • Fix No such file or directory (os error 2) when downloading some specific modpacks (#402)
    • Fix issues with the active profile/modpack index changing when deleting profiles/modpacks
    • Fix --ignore-mod-loader not working with curseforge mods (#417)
    • Fix stack overflows on the Windows GNU build (#377)
  • Internal Changes

    • Use .eq_ignore_ascii_case() where appropriate
    • Use anyhow::ensure!() where appropriate
    • Use .ok_or_else() where appropriate
    • Replace !__.is_relative() with .is_absolute()

v4.5.2

23.02.2024

  • Pad the file sizes when downloading to the right so that the units line up
  • Only print the message Downloading Modpack when actually doing so
  • Properly pad the version-resolution messages based on the largest mod name instead of an arbitrary length
  • Many improvements to libium, including;
    • Omission of the active index and profiles/modpacks fields in the config file if they're zero or empty
    • Fix a bug where the directory to which a file was being downloaded would not be created (#402)
    • Faster Modrinth mod adding

v4.5.1

07.02.2024

  • Add support for the NeoForge mod loader (#392)
  • Fix coloured output not working in Windows conhost (#148)
  • Replace the slow, wasteful, and unreliable internet check with an appended warning when the program errors out due to a possible internet connection failure
  • Make markdown verbose listing use batch requests too
  • Make CurseForge mods use a batch request for verbose listing too
  • Properly update the cached names for Modrinth mods again
  • Make non-markdown verbose-listing display in alphabetical order (#315)
  • Fix a bug where the mod loader in a GitHub Release asset filename wasn't detected properly if it was at the end, i.e. something like *-<mod-loader>.jar (#343)

v4.5.0

30.01.2024

  • Added aliases for many commands and arguments
  • The --version/-v flags only work for the top-level command now (they do not propagate to subcommands)
  • Renamed --dont-check-game-version and --dont-check-mod-loader to --ignore-game-version and --ignore-mod-loader respectively
    • Also added a short hand -V and -M
    • The previous flags still work as a hidden alias, so scripts do not have to be edited
  • Added ferium profile info and ferium modpack info subcommands to print information about the current profile/modpack
    • These are aliased to ferium profile and ferium modpack
  • Added ferium profiles and ferium modpacks, which are aliases to their respective list commands
  • Added option to temporarily ignore game version and mod loader checks and force-add the mod anyways (#142)
  • Added an argument for providing a profile/modpack to switch to after deleting a profile/modpack (#390)
  • Fixed errors not getting caught when adding mods (e.g. HTTP error 404 instead of mod does not exist)
    • Moved a majority of the mod adding code to libium
  • Added a header with profile information in ferium list
  • Made ferium list display the source and mod ID first and mod name last to circumvent minor formatting issues
  • Added user agent to GitHub API check to make it more reliable
  • Added more information and coloured formatting to profile and modpack pickers (when deleting or switching)
  • Made the remove picker show the same information as ferium list but without colours
  • Fixed distribution denied errors not getting caught during mod resolution and causing the entire command to fail instead (#308)

v4.4.1

07.08.2023

  • Update dependencies
    • Fix #363 by updating ferinth
  • Defer GitHub client builder since a recent regression leads to build() taking a very long time on macOS
    • Commands like verbose listing, adding github mods, and upgrading will take longer to start up as a result
  • Include the new CurseForge API key
  • #310: Ping the APIs themselves to check for an internet connection instead of using online

v4.4.0

24.03.2023

  • Updated dependencies
  • Improved workflows
  • Moved clippy lints to be in-code
    • Removed lint just recipe
    • Removed lint flags from build.yml
  • Fixed #285
  • Refactor upgrade.rs
  • Fixed #274
  • Added dependency overrides to CurseForge too
  • Fixed #266
  • Improved CLI documentation
  • Tweaked integration tests
  • Made --threads global argument configure tokio worker thread count
  • Properly batched Modrinth verbose list requests
  • Updated local name cache when verbose listing

v4.3.4

15.01.2023

  • Update dependencies
  • Fix #262 by adding additional 'show more' options to the Minecraft version picker

v4.3.3

01.01.2023

Update dependencies and removed unnecessary ones

v4.3.2

30.12.2022

  • Remove more unnecessary Arcs
  • Tweak progress bar styles

v4.3.1

27.12.2022

Switch to once_cell

v4.3.0

26.12.2022

  • Use JoinSet instead of a hard-coded loop to slightly speed up parallel performance
  • Partially implement #127 by hard coding an override of Fabric API with QFAPI when Quilt is used
  • Loosen dependency specification to minor versions only
  • Use inline format variables
  • Fix #234 by not copying user mods when Quilt is used
  • Fix #230 by only copying jar files from the user folder

v4.2.2

14.11.2022

Fixed a bug where Bad file descriptor (os error 9) is returned when the config file is created.

v4.2.1

13.11.2022

  • Update dependencies
  • Removed unnecessary Arcs, clone()s, and asyncs
  • Set the download.rs progress bar length immediately
  • Use a common reqwest client for downloads
  • Fix #229
  • Fix #228 by updating to libium 1.21.0
  • Use the inc() method with progress bars when possible

v4.2.0

03.10.2022

  • Fix #184, switch all linux builds to use musl
  • Fix #134, add arm builds for linux
  • Make both the GitHub PAT and custom CF API key have a global flag and environment variable

v4.1.11

02.10.2022

  • Upgrade dependencies and corresponding code
  • Replaced unwraps with expects
  • Replaced CLI attribute helps/abouts with doc comments
  • Remove gtk feature and rename xdg feature to gui
  • Fix #173 and #158
  • Implement linter suggestions
  • Use batch requests for modrinth verbose listing

v4.1.10

25.07.2022

Properly enable file dialogue

v4.1.9

25.07.2022

  • Fix #181, create the backup directory before copying files over
  • Check that there are modpacks before listing them

v4.1.8

18.07.2022

Fix #87 by updating to libium 1.19.2

v4.1.7

17.07.2022

  • Fix #172
  • Actually fix #139 by moving the subcommand's code to the very top

v4.1.6

17.07.2022

  • Update dependencies and their respective breaking code
  • Fix #139, complete subcommand now runs without reading the config
  • Fix #169 by updating to ferinth 2.5.0
  • Fix #152 by catching all errors in optional dependencies and turning them into warnings
  • Added proper ueer agent information from the new ferinth update
  • Fix #157 added custom CF API key env var

v4.1.5

18.06.2022

  • Added a --markdown flag to the list verbose command to output in markdown format
    • This is useful for modpack mod lists for example
  • Updated dependencies

v4.1.4

12.06.2022

  • Fixed bug where if the slice is shorter than 2, the find dupe functions will panic
  • Added an env var to set the config file
  • Updated ferinth to 2.3.0

v4.1.3

11.06.2022

  • Clean up imports
  • Fix #131, clean up main.rs's fetching of the current profile and modpack
  • Fix #130
  • Fix #126. Removed sort subcommand, all profiles' mods are sorted when writing to config

v4.1.2

08.06.2022

  • Fix #113, dependencies will no longer be auto updated to minor versions
  • Fix #118, the --output-dir flag is now optional
  • Fix #111
  • Fix #121, the add command just shows a warning for optional mods that are incompatible
  • Fix #120, duplicate files are no longer downloaded. Also, a warning so that you remove the duplicate mod

v4.1.1

31.05.2022

Fix #103 by updating furse

v4.1.0

31.05.2022

  • #65 Adding mods and modpacks is now done with one command
  • Fixed #102
  • #74 Added complete command to generate shell auto completions
  • Improved command help messages

v4.0.3

30.05.2022

  • Improve add commands' output
  • Implement Libium's changed distribution denied error handling

v4.0.2

24.05.2022

  • Change the default feature to GTK (bug)
  • The donation suggestion will only pop up if the vector is not empty

v4.0.1

22.05.2022

  • #77 Implement Libium's new XDG gui backend
  • #91 Unhide the --config-file flag
  • Use Rust 1.61's newly stabilised std::process::ExitCode
  • Use semaphore in mods upgrade to fix #89
  • Batch request all the files in a CurseForge modpack at once
  • Show an error message when a file in a modpack can't be downloaded because of the monopolistic dystopia that has become the largest Minecraft mod distribution website
  • Improve third party restricted mods message when downloading a modpack

v4.0.0

19.05.2022

Support for Modrinth and CurseForge modpacks!

WARNING: The config file has had breaking changes. Add the following to the top of your config file at ~/.config/ferium/config.json to migrate it:

"active_modpack": 0,
"modpacks": [],
  • Build workflow now runs when Cargo.lock is changed
  • Improve README.md and add information about modpack subcommands
  • Update clippy lints to be stricter
  • Added modpack subcommand
    • Added integration tests for these too
  • Moved switch subcommand to profile switch
  • Added donation hints after adding a Modrinth mod
    • This is to sort of compensate for the fact that no ad revenue is given to mod authors if you use Ferium
  • Downloading now shows the file size rather than the number of mods
    • The progress bar is a liiiieeeeee (at first, but it stabilises later)
  • Downloads are now stable for 100> mods
  • Downloads now directly write to part files then rename the file to its proper name after downloading is finished. Part files will be deleted if found

v3.28.7

12.05.2022

  • Added the minor version to all dependencies because cargo install doesn't use the lockfile
  • Update to Libium 1.14.1
  • The CurseForge API key is now written in source, no more environment variable! This is allowed as explained in the source code
  • Added --dont-add-dependencies flag to add commands (#63)
  • Tweak progress bar style colours
  • Changed the way the progress bar status is updated so that the spinner is smooth
  • Added coloured formatting to profile listing too

v3.28.6

11.05.2022

  • add-github now accepts the theRookieCoder/ferium format (only one argument)
    • This makes it easier to copy paste the name from the URL
  • Fixed a bug when adding dependencies
  • Improved the non-verbose list command by showing the source and identifier

v3.28.5

11.05.2022

  • Added a progress bar that looks very cool when upgrading
    • Not that you can see it for that long anyways :P

v3.28.4

11.05.2022

  • Added project id to list verbose and some other small tweaks
  • Upgrading now deletes old files if moving the file failed (e.g. if it's already in .old)
    • This fixes #60

v3.28.3

11.05.2022

  • Update to Libium 1.14
    • This fixes #53
  • Update Releases description
  • Update the way the GitHub PAT is applied to the API
    • This fixes #52
  • Significantly improved verbose listing to be more colourful, consistent, and informative

v3.28.2

09.05.2022

  • Update to Libium 1.12
  • Improved upgrade code to be faster and more clean
  • Immediately fail if rate limit error occured
    • Somewhat fixes #51
  • Show the file size when downloading files

v3.28.1

08.05.2022

  • Adding github mods now checks tried to get the latest compatible version
  • Fixed #47 by using Libium 1.11.4

v3.28.0

08.05.2022

Upgrading and verbose listing of mods is now SUPER fast compared to before (14-20 times) due to multi threading

  • Added multi threading for getting latest mod versions and downloading mods
  • Added --threads options to limit the maximum number of additional threads
  • Used Arc in many locations to use the APIs without having to actually clone them
  • Added mutex_ext to (somewhat unsafely) recover from a poison error and lock a mutex
  • If a CurseForge request fails during version determination with a status code, then the request is tried again
    • Requests are sent so fast the CF API gives 500 internal server errors sometimes

v3.27.0

07.05.2022

  • Added a .old directory in the output directory to store 'deleted' mods
  • Update the output directory checking code so that the backup is only requested when there are files (because directories will not be deleted)
  • Added support for user installed mods
    • These are read from <output_dir>/user
  • There are now download and install messages when upgrading

v3.26.0

05.05.2022

  • The remove command now uses arguments instead of flags
    • Mod names with spaces have to be given in quotes (ferium remove "ok zoomer") or the spaces should be escaped (ferium remove ok\ zoomer)
  • Extracted minecraft version picking in configure and create into mod.rs
  • Removed checking of Minecraft version when creating profile using arguments
    • Also removed the related --force_game_version flag and integration test
  • Added an --import flag to profile create
    • If only --import is provided, then the profile to import mods from will be asked
    • If --import "Profile Name" is provided, the mods from the Profile Name profile will be imported
  • Only check internet connection for subcommands which need it
    • Extract internet connection check function
  • Created a check_output_directory() that uhhh.. checks the output directory
    • If it's not called mods, it will output a warning
    • If it contains stuff, it will ask if you want to create a backup
      • So that you don't lose the stuff in there when you upgrade
    • Along with the original relative directory check
  • Made sort command convert to lowercase when sorting

v3.25.1

  • Updated Libium and Ferinth, to fix 2 issues
  • CurseForge mods that have no logo no longer cause errors
  • The default mods directory now uses Application Support rather than a shortcut to it, ApplicationSupport (thanks douira!)

v3.25.0

04.05.2022

  • Added --dont_check_game_version and --dont_check_mod_loader flags to add commands
    • The check overrides are follow when checking for dependencies
    • These check overrides will be added to the config automatically
  • Added Quilt->Fabric backwards compatibility to the add commands' dependency checking

v3.24.0

03.05.2022

  • Updated to Libium 1.11
    • Quilt -> Fabric backwards compatibility is now handled by Ferium rather than Libium
  • Updated the integration tests to use Incendium rather than Terralith because the CF API currently has some problems with Terralith
  • Calls to libium::upgrade functions no longer provide a Profile, the game version and mod loader to check are given instead
  • Getting the primary file of a Modrinth Version has been moved to the conversion function
    • A workaround with vectors is being used to avoid a possible borrow checker bug
  • Ferium will now only rely on Fabric backwards compatibility if it can't find a native Quilt version. This fixes #30

v3.23.0

01.05.2022

  • All crates have their minor version specified in Crates.toml
  • The workflow will now publish to crates.io too
  • Update README
  • Move upgrading code in main.rs to subcommands::upgrade
  • Added dependency handling to subcommands::add
    • Required dependencies will automatically be added
    • Optional dependencies will be added after the user approves

v3.22.2

27.04.2022

Make GitHub Release downloads actually work

v3.22.1

25.04.2022

  • Add a GitHub personal access token option to the root command
  • The integration tests will use the GITHUB_TOKEN environment variable if it is available (e.g. during actions workflows)

v3.22.0

24.04.2022

  • Update to Libium 1.9
  • Added static variables for a yellow tick and the dialoguer colourful theme
  • Extracted the pick mod loader code to profile/mod.rs
  • Added a yellow tick if the mod was compatible due to backwards compatibility

[3.21.0] - 20.04.2022

  • Removed no_patch_check flag for the upgrade command
  • There are now overrides for game version and mod loader checks. For now there is no UI, you have to edit the config file manually

[3.20.1] - 16.04.2022

When picking a file from a version, Ferium will get the primary file rather than the first file

[3.20.0] - 16.04.2022

  • Added a Downloadable struct that represents (and be converted from) a mod file from Modrinth, GitHub Releases, or CurseForge
  • There is now also a constant for the cross too ("×")
  • Big changes to upgrading:
    • Does not empty the output directory
    • Checks if the latest compatible version is already downloaded, if so it does not download it again
    • If there are files that are not the latest compatible version of a mod, then they are deleted. So effectively the output directory is emptied

[3.19.1] - 03.04.2022

  • Added a sort command that sorts mods in alphabetical order
  • Edited the mod.rs files to make accessing functions better
  • Updated some user facing output such as command help pages, and errors
  • Reverted to the old output style in the add command

[3.19.0] - 02.04.2022

WARNING!

The config format has changed, your previous (pre-3.19) configs will not work! Use Frigate to update your old config to the new format

  • Updated to Libium 1.6
  • Improved the upgrading code in main.rs, taking advantage of the improved config format
  • Updated remove.rs to support the new libium version
  • Updated the test configs to the new format

[3.18.2] - 31.03.2022

  • Improved readme
  • Made commands ferium and ferium profile show the help page when not given any subcommands

[3.18.1] - 30.03.2022

Update to libium 1.5.1 to remove OpenSSL

[3.18.0] - 30.03.2022

  • Removed upgrade.rs and used libium::upgrade
  • Made errors print out red and bold
  • Made ticks green using a const
  • Significantly improved the output during upgrades

[3.17.0] - 28.03.2022

Removed error handling

  • Removed error.rs
  • Replaced thiserror with anyhow
  • return Err(Error::Quit("Error message)) has been replaced with bail!("Error message) from anyhow
  • Made upgrade command return an erraneous exit code if downloading failed

[3.16.0] - 28.03.2022

  • Moved add.rs to libium
  • Small edits to accomodate changes in libium 1.4
  • Massively simplified error handling, planning to replace with anyhow soon as it useless

[3.15.3] - 26.03.2022

Small tweaks to accomodate the changes in ferinth and libium

[3.15.2] - 26.03.2022

  • Added gui feature. This changes the file dialogue from a text input to a gui file dialogue
  • Tweaked formatting of profile list command

[3.15.1] - 25.03.2022

  • Added hidden config-file argument
  • Massively improved integration tests. They are now independant from each other and can run in parallel

[3.15.0] - 24.03.2022

Switched from make to just

  • Added back the verbose flag to the list command. The verbose version is the same as before, and the non-verbose version lists out all mod names only
  • Small edits to the add command to support the new config format
  • The list command now uses a more concise method to display lists of developers/categories (hence the new dependency itertools)
  • Many commands have been converted to work on one project at a time so there are less loops in functions and more in main.rs
  • The remove command has been significantly improved and is now much faster due to the new name storing format
  • The remove command now also requires argument provided names to be exactly the same
  • Simplified delete profile command

[3.14.0] - 06.03.2022

  • All print statements in add and upgrade functions have been removed, this means
  • Errors now only have the error and no formatting
  • Add GitHub repo function now accepts a RepoHandler rather than the repo name
  • All add functions now return the added item
  • Adding Modrinth mods now checks if the project is a mod
  • Writing to mod files has been extracted to write_mod_file()
  • All upgrade commands only download a single mod
  • Downloading GitHub mods no longer picks from multiple mods
  • The output directory is now emptied before mods are downloaded

[3.13.0] - 02.03.2022

  • Moved all the subcommand functions in main.rs to seperate files
  • Updated the settings in cli.rs Functionality should not have been changed

[3.12.1] - 11.02.2022

Refactor 'mod' to 'project'

[3.12.0] - 06.02.2022

Migrated to Libium!

  • Removed unneeded dependencies
  • Removed the following which were replaced by libium:
    • json.rs
    • launchermeta.rs
    • wrappers.rs
    • src/util
  • Moved util/cli.rs and util/ferium_error.rs to src/cli.rs and src/error.rs
  • Changed errors to the more typical style, Error and Result in a src/error.rs
  • Removed InvalidDeviceError, libium just panics instead as it should've never been compiled on an incompatible platform
  • Move the Profile::create_ui() function to the main.rs file
  • Upgrade to Ferinth v2
  • Add clean target to makefile
  • Add URLParseError from Ferinth
  • Switch to an asynchronous std using tokio
  • Removed verbose flag for list
  • Simplify switch profile
  • Use libium from crates.io

[3.11.1] - 28.01.2022

Windows MSVC support!

  • The makefile target build-win now builds for Windows MSVC
  • The makefile target build-linux now builds for GNU Linux and GNU Windows
  • The makefile targets install and install-dev now install to Cargo's bin directory
  • install-dev is now the default goal in the makefile
  • save_config.py and restore_config.py have been updated to use pathlib so that paths are cross platform and no long *NIX paths
  • Added handing for Ferinth's new error
  • The integration tests also don't use hardcoded *NIX paths anymore
  • check_empty_config() checks for curse_project now, this was a bug fixed by SolidTux in PR #2
  • Move Python scripts for testing to tests/scripts/

[3.11.0] - 23.01.2022

CURSEFORGE SUPPORT!

  • Renamed mod_ids and repos to modrinth_mods and github_repos in Profile
  • Added curse_projects to Profile
  • Added add-curseforge command
  • An API key is required to compile the application. Without this, the program will not compile. You can a provide blank value for this and the program will compile but anything using the CurseForge API will not work
  • Upgrading mods now uses the downloaded file's actual filename rather than the mod name
  • The remove command no long tries to remove the mod file (to be reintroduced later)
  • Added 2 flags to the upgrade command
    • no_picker When upgrading GitHub mods, if multiple assets are compatible a picker is normally shown. This option disables this and uses the first one
    • no_patch_check Normally, upgrading curse and modrinth mods will check for the full game version, but sometimes mods works between patch versions, so this option skips checking for the patch version. This doesn't affect upgrading GitHub mods
  • Made a test for the upgrade command. Will have to implement checking of the mods downloaded later
  • Some integration tests have been edited to test curse mods too
  • Upgrading GitHub mods now checks the releases' names for the game version too

[3.10.1] - 17.01.2022

Unreleased

  • Upgrading Modrinth mods now correctly check the mod loader by converting the mod loader name to lowercase

[3.10.0] - 16.01.2022

HUGE UPDATE

Project and Testing

  • Upgraded to Clap 3.0
  • Removed unit tests
  • Added every single sub(sub)command to the integration tests
  • The integration tests are now fully automatic because we can now pass options without the interactive UI

Main

  • Getting the config file no longer exits the program early when creating a new config file
  • A more helpful error message for when decoding the config file fails
  • The profile create subcommand now runs seperately before the current profile is read
  • Multiple new command have been created such as list_profiles(), and delete()
  • Many commands have been revamped to allow the arguments to be passed through the CLI rather than through a UI
  • The profile configure command's UI now has an option to change the profile's name

Arg Parsing

  • Removed cli.yaml and switched from the deprecated yaml parsing to #[derive] based arg parsing
  • Renamed add, add-repo, and config commands to add-modrinth, add-github, and configure
  • The create and config commands are now under a new subcommand profile
  • profile delete and profile list subsubcommands have been added
  • The following commands have had options added to them so now using the interactive UI is optional. This also allows for fully automatic tests
    • Remove
    • Switch
    • Configure
    • Create
    • Delete

Error handling

  • There are now 2 errors for quitting
    • The Quit error stores its error message as a tuple &'static str so that raw strings can be used
    • The QuitFormatted error stores its error message as a tuple String so that format!() can be used for more informative error messages

Configuration (json.rs)

  • The mod_loader field in Profile is now an enum
  • The Profile::new() is now Profile::create_ui()
  • create_ui() now checks that the name provided does not already exist, if so it will ask for a new name
  • Getting the path to the config file has been extracted to get_config_file_path()
  • If get_config_file() does not find a config file, it now just creates an empty config, writes to it, and continues to return the config file

[3.9.0] - 23.12.2021

Merry Christmas and a Happy New Year!

  • The previous Config is now a Profile. The Profile has a new field, name
  • The new Config contains a list of profiles and the index of the active profile
  • Added a create command to create a new profile
  • Added a switch command to switch between profiles
  • A remove command for profiles will be added in the next update
  • Switch back to Clap v2 because I'm rewriting the command system in the next update
  • Edited makefile to run clippy in make test and builds
  • Many code changes based on Clippy suggestions

[3.8.1] - 29.11.2021

  • Added rustfmt.toml and formatted code according to that
  • Upgraded dependencies
  • Some code has been modified to support the many more nullable fields in Octocrab (WHY ARE ALL OF THEM OptionS!?)

[3.8.0] - 19.11.2021

  • Switched to octocrab and removed octorok
  • Lots of code has been refactored and many comments and docs have been edited and improved
  • The name of config file fields have been edited so that they more accurately represent the data they hold. This breaks previous configs and requires editing field names to fix
  • In the config file, repos are now stored as tuples rather than structs
  • Added verbose option to the list command. So now the non-verbose list command gives less information, but is faster
  • Improved error handling
  • Tweaked semver patch remove function so that it works on semvers other than Minecraft's
  • Switched from fancy-regex to onig
  • Added integration tests (check the readme on how to properly run these) and some unit tests too. These tests run before makefile builds

[3.7.2] - 06.11.2021

  • Switched to thiserror for error handling

[3.7.1] - 06.11.2021

  • Ferium now compiles successfully on Linux
  • add_mod() now adds the mod_id to the config rather than the provided mod ID/slug

[3.7.0] - 04.11.2021

  • Migrated to Ferinth
  • Fixed a bug where GitHub API requests are using HTTP rather than HTTPS
  • Added developers field to ferium list
  • Tweaked ferium list formatting
  • Made internet connection check come after clap subcommand parsing so that ferium help and ferium version can be run without an internet connection
  • Tweaked upgrade_modrinth() version compatibility checking

[3.6.1] - 01.11.2021

  • Switched to Clap's GitHub repo to get Clap v3
  • Added starting directory argument to pick_folder()
  • Some wording changes in cli.yaml
  • Some small tweaks in cli.rs to support Clap v3
  • In json.rs, the first time config has been moved to Config::new()
  • Previously when using a dialouger picker, the message was printed using println!() then the picker was rendered. Now that message has been moved to the with_prompt() modifier
  • configure() now loops until Quit is selected
  • Some other small improvements to ferium config
  • Tweaked list()'s output

[3.6.0] - 30.10.2021

  • Added a check for mod loader compatibility in upgrade_modrinth() and upgrade_github()
  • Improved the GitHub Releases version and mod loader checking algorithm
  • download_release() and download_version() are now download_asset() and download_version_file() repectively
  • If multiple compatible assets were found, a selector is shown to let the user pick the latest version
  • The progress indicators updates now show the name of the asset being downloaded rather than the name of the Version or Release
  • Added function remove_minor_version() which is extracted from get_latest_mc_versions()

[3.5.1] - 28.10.2021

  • Migrated from native-dialog to rfd
  • Removed NativeDialogError as its no longer required
  • Removed wrappers::print() and replaced it with eprint!
  • Removed GitHub Actions workflow
  • FError now prints error messages in its custom implementation of std::fmt::Debug
  • Made the main function also return an FResult<()> which on error, prints the error message from FError's Debug and exits with code 1

[3.5.0] - 24.10.2021

Added

  • Build and release workflow
  • config command

Changed

  • Internet connection timeout
  • Improved remove command by showing mods and repos at once
  • ferium list formatting
  • get_config_file returns None, rather than erroring out, after first time setup
  • Select and MultiSelect use the colorful theme
  • Switched to Mozilla Public License 2.0
  • Functions which change config values now don't write to the config_file. The main function does so with those functions receiving a &mut Config instead
  • All the Todo list items have been moved to a GitHub Project and README.md's todo list section has been removed

Fixed

  • Mod files for Github Releases now use the correct names
  • Repositories which do not release anything no longer crash the program
  • Creation of output directory before upgradeing

[3.4.0] - 23.10.2021

  • Upgraded to 2021 edition
  • Added make install to compile and install ferium
  • Added proper error checking! (no more unwrap()s and panic!()s, only ?s)
  • Added check for an internet connection
  • Improved check for empty config file
  • Added remove command to remove to remove mods or repositories from config
  • Improved checking of releases for .jar assets
  • Removed does_exist for mod versions, use match get_mod(...) instead
  • Added checking of releases and versions for mc version and mod loader compatibility
  • Converted using format!()s for path manipulation to using pathbuf.join()
  • Made clap use version from crate_version rather than hardcoding it
  • Added FError and FResult for error checking support
  • Added first time setup where user selects mod loader, mc version, and mods directory
  • Added abstractions for Mojang's launcher_meta API
  • Added function to get n of the latest versions of Minecraft (using launcher_meta)

[3.3.0] - 17.08.2021

Added

  • Some metadata in cargo.toml
  • Improved CLI to use Clap's built in version and help subcommands

Changed

  • Renamed funcs.rs to calls.rs in Labrinth and Octorok
  • Removed glob imports where possible
  • Switched deserialisation of the file to Serde's built in from_reader
  • The relative flag in request has been replace with a relative_request function
  • Improved file manipulation in main.rs and wrappers.rs to use .join()s instead of format!()
  • Removed all match and exit() pairs to improve error handling in the future. For now these have been replaced with unwrap()s
  • Made print() accept impl Display to decrease String copies

[3.2.0] - 06.08.2021

Added

  • Support for GitHub Releases
  • Octorok, a Github API for Rust
  • Made the help page a 'copy' of the README file with suitable formatting
  • Version command for checking the version
  • Repositories to the configuration

Changed

  • Made HTTP calls non-blocking and asynchronous
  • Made all HTTP calls reuse a predefined client
  • Added more documentation
  • Made make builds timed

[3.1.2] - 06.08.2021

Added

  • Added a makefile for building this project
  • Added full documentation for Labrinth structs

Changed

  • Updated cli.yaml's documentation to match the help page
  • Moved around Labrinth struct definitions to match its documentation

[3.1.1] - 05.08.2021

Changed

  • Made the License struct's url field nullable

[3.1.0] - 05.08.2021

Added

  • This changelog
  • Command line interface and corresponding code (under cli.rs and cli.yaml)
  • Help page and command, add mod command, list mods command
  • Users struct for Labrinth
  • JSON file write
  • does_exist() function for checking if a mod exists
  • Error codes (see changed)

Changed

  • Moved utilities to util folder
  • Made all panics into println!s and exits (with descriptive error codes)
  • Commented code better