* feat: sftp
test: add tests for ftp and sftp
* chore: ci fixes
* chore: potential race fix
* fix: simplify existence checks
* fix: split path differently for ftp
* fix: 🤷
* chore: add debug print
* chore: lint
* chore: idk dude
* chore: ?
* chore: more logs
* chore: wipe mods before tests
* chore: logs
* chore: wat
* chore: wait?
* chore: no errors
* chore: gh actions are 💩
* fix: always sync after copy
* chore: remove some test logs
* chore: remove test progress watcher
* refactor: change progress to writer
* chore: logs
* chore: different logs
* chore: whoops
* chore: moar logs
* chore: even moar logs
* chore: what is life
* chore: why are we here
* chore: we are just bags of water floating through space
* chore: are you real?
* chore: ?
* chore: if you get a single update now I call bs
* chore: ok what if we just do one?
* chore: ok what if we do two?
* chore: this should not work
* chore: wait no, this one
* chore: fml
* chore: remove logs
* chore: what if we just wait a little
* chore: retry
* chore: move error
* chore: verbose log
* chore: remove explicit sleep
* chore: remove debug
* fix: linux pathing on windows
* fix: clean paths properly
* fix: fuck ftp
* fix: send update on vanilla
* feat: parallel ftp
* fix: remove potential credential leak
* feat: parallel apply command
fix: show general help for --help flag
fix: don't append channel if it doesn't exist
chore: build against windows and linux
* chore: lint
* feat: use mod version targets
* chore: lint
* chore: remove unused
* chore: target dev on ci
* fix: rename WindowsNoEditor target to Windows
fix: close file reader
* fix: ensure closure of downloaded mod
* fix: ensure all important events are sent
* fix: lock adding files to cache
---------
Co-authored-by: mircearoata <mircearoatapalade@gmail.com>
* chore: move mod downloading to cli/cache
* feat: data providers, ficsit and local
* feat: keep cache in memory, load on init
* feat: log invalid cache files instead of returning error
* chore: make linter happy
* feat: fill cached mod Authors field from CreatedBy
* chore: make linter happy again
* feat: add icon and size to cached mods
* feat: cache the cached file hashes
* fix: change to new provider access style
---------
Co-authored-by: Vilsol <me@vil.so>
* feat: vanilla toggle per install
* fix: update set-vanilla cmd description
* fix: use viper for the set-vanilla off flag
* fix: writing lockfile when the directory didn't exist
* fix: check for nil selected install in header vanilla message
---------
Co-authored-by: Vilsol <me@vil.so>
* refactor: separate resolving tests
* feat: use pubgrub to resolve dependencies
* feat: show friendly mod name in error message
* feat: show single version in error message when only one matches
* ci: update go version to match go.mod
* feat: format FactoryGame incompatibility and term
* chore: fetch all necessary data of the version at once
* chore: upgrade pubgrub
* chore: upgrade pubgrub
* ci: update golangci-lint version for go 1.21
* chore: lint
* chore: update go version in readme
* chore: readme update to include relevant paths
* chore: clarify log message
* fix: stop loading unrelated mod data in Installed Mods screen when no mods are installed