-
Notifications
You must be signed in to change notification settings - Fork 189
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
3.1.51 #1501
Commits on Sep 13, 2024
-
Fix ThunderstoreMod date field typing
The date fields denoting creation and last update date are in fact strings, not dates. IDK if it has always been this way or if e.g. moving the online mod list from disk to IndexedDB changed this. Luckily the date fields are only used for newer/older than comparisons, and the ISO 8601 date strings yield the same results for those operations as the Date objects would.
Configuration menu - View commit details
-
Copy full SHA for 42fce1d - Browse repository at this point
Copy the full SHA 42fce1dView commit details -
Fix watching online mod list for changes
Online mod list was watching a wrong variable, and wouldn't fire an autoupdate if the main mod list changed, i.e. if there was a background update from Thunderstore API while user had the online mod list open. This was broken some 6 months ago by yours truly while moving the mod list into Vuex store.
Configuration menu - View commit details
-
Copy full SHA for 3863c5b - Browse repository at this point
Copy the full SHA 3863c5bView commit details
Commits on Sep 17, 2024
-
Merge pull request #1438 from ebkr/fix-date-field-types
Fix ThunderstoreMod date field typing
Configuration menu - View commit details
-
Copy full SHA for 5dbd21a - Browse repository at this point
Copy the full SHA 5dbd21aView commit details -
Merge pull request #1439 from ebkr/fix-online-modlist-watching
Fix watching online mod list for changes
Configuration menu - View commit details
-
Copy full SHA for 232551a - Browse repository at this point
Copy the full SHA 232551aView commit details -
Disable MacOS from CI pipeline
GitHub actions dropped the support for MacOS 11, causing all CI jobs to fail. Updating to MacOS 12 would require updating 3rd party dependencies, namely electron-builder (see PR #1409). MacOS isn't officially supported by this project, and it was added to CI pipeline just because doing so was easy and only required a few lines of config code. Now keeping MacOS on the CI pipeline would require testing that updating electron-builder has no ill side-effects. That work seems to have a low return of investment, so changes are it won't get done anytime soon.
Configuration menu - View commit details
-
Copy full SHA for 2291879 - Browse repository at this point
Copy the full SHA 2291879View commit details
Commits on Sep 19, 2024
-
Add Hard Time III Add Paquerette Down the Bunburrows Add Shapez 2
Configuration menu - View commit details
-
Copy full SHA for 966386d - Browse repository at this point
Copy the full SHA 966386dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 351a5b2 - Browse repository at this point
Copy the full SHA 351a5b2View commit details -
Configuration menu - View commit details
-
Copy full SHA for 03729ae - Browse repository at this point
Copy the full SHA 03729aeView commit details -
Merge pull request #1450 from ebkr/separate-zip-extraction-from-ui-co…
…mponent Separate Zip extraction function from Profile Import Ui component
Configuration menu - View commit details
-
Copy full SHA for 968b792 - Browse repository at this point
Copy the full SHA 968b792View commit details
Commits on Sep 24, 2024
-
Configuration menu - View commit details
-
Copy full SHA for b389e76 - Browse repository at this point
Copy the full SHA b389e76View commit details
Commits on Sep 26, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 30bd6d5 - Browse repository at this point
Copy the full SHA 30bd6d5View commit details -
Separate installModAfterDownload function from UI component and use e…
…arly return pattern consistently
Configuration menu - View commit details
-
Copy full SHA for 0ea5e3a - Browse repository at this point
Copy the full SHA 0ea5e3aView commit details
Commits on Sep 27, 2024
-
Merge pull request #1451 from ebkr/separate-parse-yaml-from-component
Separate parseYamlToExportFormat function from ImportProfileModal UI …
Configuration menu - View commit details
-
Copy full SHA for 4d091c1 - Browse repository at this point
Copy the full SHA 4d091c1View commit details -
Reset Vuex state when returning to game selection to free up memory (#…
…1385) Additionally this avoids some internally inconsistent states, e.g. when the game is changed but the mod list still contains mods for the old game. --------- Co-authored-by: Antti Mäki <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 96e607a - Browse repository at this point
Copy the full SHA 96e607aView commit details -
Merge pull request #1453 from thunderstore-io/add-3-games-tt-fnafitp-…
…distance Add 3 games
Configuration menu - View commit details
-
Copy full SHA for d8efcd2 - Browse repository at this point
Copy the full SHA d8efcd2View commit details -
Configuration menu - View commit details
-
Copy full SHA for bacb86c - Browse repository at this point
Copy the full SHA bacb86cView commit details -
Merge pull request #1455 from ebkr/tank-team-cover
Update TankTeam cover image
Configuration menu - View commit details
-
Copy full SHA for b1352c5 - Browse repository at this point
Copy the full SHA b1352c5View commit details -
Configuration menu - View commit details
-
Copy full SHA for 490aff7 - Browse repository at this point
Copy the full SHA 490aff7View commit details -
Add helpers for processing compressed JSON blob files
Thunderstore API uses blob files to serve immutable data, as this can be efficiently cached via CDN. The blobs contain stringified JSON that is compressed with gzip to save storage space.
Configuration menu - View commit details
-
Copy full SHA for c581dbc - Browse repository at this point
Copy the full SHA c581dbcView commit details -
Use new Thunderstore API to fetch community's package list
Fetching Lethal Company's package list containing 30k+ mods in one request has been pushing the limits for a while now. For users with slower connections the request timeouts, and the ICP message size limit is soon starting to cause problems. To address these problems, the package list is now downloaded in chunks. Each chunk is a separate blob file that can be heavily cached on CDN level. Chunks are downloaded serially to support slower connections. Caching to IndexedDB is done only when all chunks have been downloaded so transaction can used to make the operation atomic.
Configuration menu - View commit details
-
Copy full SHA for a0d5ef4 - Browse repository at this point
Copy the full SHA a0d5ef4View commit details -
Configuration menu - View commit details
-
Copy full SHA for e2d311c - Browse repository at this point
Copy the full SHA e2d311cView commit details -
Add index chunk hashes to PackageDexieStore
The hash identifies the last seen package list index, allowing us to skip updating the database from file cache if there's no changes to the package list. The new table contains 0..1 rows for each game (because community identifiers aren't available on the mod manager currently). Internal game identifier acts as the primary key to prevent duplicates. Compound index of game+hash is added for performance, and to silence "warnings" that Dexie would otherwise log into the console. Dexie's put method, i.e. upsert, is used to update the hash to the database.
Configuration menu - View commit details
-
Copy full SHA for 5ef034a - Browse repository at this point
Copy the full SHA 5ef034aView commit details -
Calculate content hashes when downloading blob files
The hashes will be used to identify previously seen package list indices. The Thunderstore API uses the same hash to identify blobs. The hash is recalculated on the mod manager because: - The API returns a redirect response, and we can't access the headers of the original response, only the result of redirect from the CDN - The redirect can't be prevented and handled manually in the browser environment - The response from the CDN does contain the hash as its used in the file name, but the only place Axios stores it in the response is a field that looks like it could easily change in the future versions Since hashing the amount of data we're handling should be in a scale of single digit milliseconds per chunk, this shouldn't be a problem.
Configuration menu - View commit details
-
Copy full SHA for 4cbfb1d - Browse repository at this point
Copy the full SHA 4cbfb1dView commit details -
Refactor the package list loading flow in SplashMixin
While this makes some parts of the code (updating the progress text and percentage shown on the UI) harder to follow, I feel this improves the readability of the code overall. Especially when the upcoming additions to the flow are taken into account.
Configuration menu - View commit details
-
Copy full SHA for fc61ab3 - Browse repository at this point
Copy the full SHA fc61ab3View commit details -
Skip unnecessary steps when downloading an unchanged mod list
In SplashMixin, skip downloading the chunks and updating them into the IndexedDB if the index file indicates the packages haven't changed. If downloading the index file itself fails, try to load earlier mod list from the IndexedDB like it did earlier. In UtilityMixin, skip the whole process if the index file indicates the packages haven't changed, as at this point we already have the mod list loaded in to Vuex. If loading the index file itself fails, the error is caught by the caller, which handles retries as it did earlier.
Configuration menu - View commit details
-
Copy full SHA for 452ba46 - Browse repository at this point
Copy the full SHA 452ba46View commit details -
Change where and how the "mods last updated" timestamp is updated
Old approach used to read the timestamp from the package list table since it wasn't available elsewhere. This approach no longer works when we don't update the package list into database if it didn't change. Instead, store the information in the same table as the community's last seen index chunk hash. This timestamp is updated whenever the same index hash is seen again, or when the hash changes AND the new package list is successfully written to DB. Old approach loaded the timestamp into Vuex when the package list was read to Vuex state. With the new approach we need to take into account that UtilityMixin skips updating the package list in memory if the list didn't change. Instead, we need to update the timestamp manually.
Configuration menu - View commit details
-
Copy full SHA for 92e3210 - Browse repository at this point
Copy the full SHA 92e3210View commit details -
Use fflate to decompress package list chunks
While r2modman used Node's zlib as intended, TSMM used a library that happened to be present as a 2nd degree dependency. While it worked, the library had poor performance, taking ~3s to decompress each chunk, while zlib and fflate takes next to no time at all. Using DecompressionStream instead was considered, but based on a single google result it seems that would require updating the TypeScript version, which is a side quest for another time. It was also considered sniffing the app version and using fflate only on TSMM, so it wouldn't need to be added as a dependency on r2modman. In the end gut feeling decided that would be unnecessarily complex and prone to break due to future changes.
Configuration menu - View commit details
-
Copy full SHA for 8aeaaad - Browse repository at this point
Copy the full SHA 8aeaaadView commit details -
Harden chunked package list API request against CDN problems
Thunderstore's main CDN regularly just fails to respond to requests. Now that package list chunks are downloaded from the CDN, the issue also affects this part of the program. While the only real fix is to migrate to more reliable service provider, ETA on that is unknown. Meanwhile do what can be done to mitigate the issue. - Increase the number of retries and reduce the interval between them when loading the index chunk. Sometimes spamming the same request makes the CDN "wake up" and serve the file - Add "preferred CDN" query parameter to index chunk request. If the Thunderstore API endpoint supports the received value, it will uses that CDN when returning the redirect response. Intercepting the redirect response to manipulate the redirect URL in the browser environment has proven hacky in the past and is avoided here - Change the CDN on the fly on client when requesting the package list chunks. Since these request point directly to the CDN rather than Thunderstore API, manipulating them directly is feasible.
Configuration menu - View commit details
-
Copy full SHA for 45b8b20 - Browse repository at this point
Copy the full SHA 45b8b20View commit details
Commits on Sep 30, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 7bc0283 - Browse repository at this point
Copy the full SHA 7bc0283View commit details
Commits on Oct 1, 2024
-
Merge pull request #1454 from ebkr/separate-install-mod-from-component
Separate installModAfterDownload function from UI component
Configuration menu - View commit details
-
Copy full SHA for 680aa41 - Browse repository at this point
Copy the full SHA 680aa41View commit details -
Merge pull request #1447 from ebkr/disable-mac-build
Disable MacOS from CI pipeline
Configuration menu - View commit details
-
Copy full SHA for 87b84ee - Browse repository at this point
Copy the full SHA 87b84eeView commit details
Commits on Oct 2, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 1dac1b4 - Browse repository at this point
Copy the full SHA 1dac1b4View commit details -
Configuration menu - View commit details
-
Copy full SHA for ea70a0c - Browse repository at this point
Copy the full SHA ea70a0cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 413acb8 - Browse repository at this point
Copy the full SHA 413acb8View commit details -
Configuration menu - View commit details
-
Copy full SHA for 868f998 - Browse repository at this point
Copy the full SHA 868f998View commit details -
Merge pull request #1459 from ebkr/import-modal-refactoring-continued
ImportProfileModal improvements
Configuration menu - View commit details
-
Copy full SHA for 4ce5ede - Browse repository at this point
Copy the full SHA 4ce5edeView commit details -
Merge pull request #1460 from ebkr/move-readprofile-away-from-ui-comp…
…onent Move readProfileFile function away from the UI component
Configuration menu - View commit details
-
Copy full SHA for 9176b94 - Browse repository at this point
Copy the full SHA 9176b94View commit details
Commits on Oct 7, 2024
-
Merge pull request #1345 from ebkr/chunky
Use new Thunderstore API to fetch community's package list
Configuration menu - View commit details
-
Copy full SHA for e28d874 - Browse repository at this point
Copy the full SHA e28d874View commit details -
Merge pull request #1429 from ebkr/chunky-pt2
Skip unnecessary steps when package list hasn't changed
Configuration menu - View commit details
-
Copy full SHA for 4d6914c - Browse repository at this point
Copy the full SHA 4d6914cView commit details -
Merge pull request #1456 from ebkr/chunky-pt3
Use fflate to decompress package list chunks
Configuration menu - View commit details
-
Copy full SHA for b7ba72f - Browse repository at this point
Copy the full SHA b7ba72fView commit details -
Merge pull request #1457 from ebkr/chunky-pt4
Harden chunked package list API requests against CDN problems
Configuration menu - View commit details
-
Copy full SHA for 8055464 - Browse repository at this point
Copy the full SHA 8055464View commit details
Commits on Oct 8, 2024
-
Fix regression in Lethal Company/Content Warning data folder settings
The folder paths had been fixed earlier, but merging a long running dev branch brought back the old, incorrect values.
Configuration menu - View commit details
-
Copy full SHA for fc0bedc - Browse repository at this point
Copy the full SHA fc0bedcView commit details -
Merge pull request #1467 from ebkr/fix-data-folders
Fix regression in Lethal Company/Content Warning data folder settings
Configuration menu - View commit details
-
Copy full SHA for 4f44766 - Browse repository at this point
Copy the full SHA 4f44766View commit details -
Configuration menu - View commit details
-
Copy full SHA for fd3318f - Browse repository at this point
Copy the full SHA fd3318fView commit details -
Add wrapper functions to make it easier for TSMM to inject extra code
TSMM can now override the methods locally without having to duplicate the main implementation.
Configuration menu - View commit details
-
Copy full SHA for 6a8a17c - Browse repository at this point
Copy the full SHA 6a8a17cView commit details
Commits on Oct 9, 2024
-
Add new ImmutableProfile class that doesn't track the active profile
This is part of a larger refactoring effort aiming to remove the business login from components so it can eventually be exported to be a responsibility of a CLI tool. Instead of inheritance, both classes only implement an interface defining the common methods. This was done so that when a function expects one of the classes, it won't accept the other. Being strict about this makes it easier to see which part of the code base depend on the active profile, and might reduce cases where passing wrong type of object results in unexpected behaviour. The code duplication caused by this within the classes seems like a small price to pay. The static method for accessing the root dir of all profiles was renamed to getRootDir() to make it clearer what directory it actually returns. The method is not available on ImmutableProfile, since it depends on the state of the app (active game) via PathResolver. We'll likely add a non-static method to ImmutableProfile in a later commit to reduce the dependency to app state where it's not required.
Configuration menu - View commit details
-
Copy full SHA for 82c63d5 - Browse repository at this point
Copy the full SHA 82c63d5View commit details -
Configuration menu - View commit details
-
Copy full SHA for 9946dc8 - Browse repository at this point
Copy the full SHA 9946dc8View commit details -
Use Profile.joinToProfilePath()
In retrospect IDK if this cleaned up the code as I thought it would.
Configuration menu - View commit details
-
Copy full SHA for 00cfc03 - Browse repository at this point
Copy the full SHA 00cfc03View commit details -
Configuration menu - View commit details
-
Copy full SHA for 00ccb25 - Browse repository at this point
Copy the full SHA 00ccb25View commit details -
Add helper methods for casting a Profile to ImmutableProfile
These can be used to take an immutable snapshot of the currently active profile.
Configuration menu - View commit details
-
Copy full SHA for c91312b - Browse repository at this point
Copy the full SHA c91312bView commit details -
Refactor ModLinker to use ImmutableProfile
Once starter, the outcome of mod linking operation shouldn't change if the active profile is changed for whatever reason.
Configuration menu - View commit details
-
Copy full SHA for 7bb084f - Browse repository at this point
Copy the full SHA 7bb084fView commit details -
Refactor ProfileModList.getModList to use ImmutableProfile
To prevent mega commit, call sites still use Profile for now.
Configuration menu - View commit details
-
Copy full SHA for cc27ecb - Browse repository at this point
Copy the full SHA cc27ecbView commit details -
Configuration menu - View commit details
-
Copy full SHA for 152024d - Browse repository at this point
Copy the full SHA 152024dView commit details -
Configuration menu - View commit details
-
Copy full SHA for d0e96b3 - Browse repository at this point
Copy the full SHA d0e96b3View commit details -
Configuration menu - View commit details
-
Copy full SHA for 5c4d412 - Browse repository at this point
Copy the full SHA 5c4d412View commit details -
Configuration menu - View commit details
-
Copy full SHA for 3cc8c3e - Browse repository at this point
Copy the full SHA 3cc8c3eView commit details -
Configuration menu - View commit details
-
Copy full SHA for 88ca5d1 - Browse repository at this point
Copy the full SHA 88ca5d1View commit details -
Configuration menu - View commit details
-
Copy full SHA for 3268022 - Browse repository at this point
Copy the full SHA 3268022View commit details -
Configuration menu - View commit details
-
Copy full SHA for e7fd48a - Browse repository at this point
Copy the full SHA e7fd48aView commit details -
Refactor ProfileModList.exportModListAsCode to use ImmutableProfile
This completes refactoring ProfileModList, which no longer relies on the state tracking Profile object.
Configuration menu - View commit details
-
Copy full SHA for d37bb71 - Browse repository at this point
Copy the full SHA d37bb71View commit details -
Configuration menu - View commit details
-
Copy full SHA for 46913e0 - Browse repository at this point
Copy the full SHA 46913e0View commit details -
Drop ProfileInstallProvider.getDescendantFiles
The method is not used anywhere, at least anymore.
Configuration menu - View commit details
-
Copy full SHA for 26928b8 - Browse repository at this point
Copy the full SHA 26928b8View commit details -
Make ProfileInstallerProvider.applyModMode private
The method isn't called from the outside and looks more like an implementation detail for enableMod/disableMod methods.
Configuration menu - View commit details
-
Copy full SHA for f68e0ed - Browse repository at this point
Copy the full SHA f68e0edView commit details -
ProfileInstallerProvider: drop unused FileTree argument
applyModModeForSubdir creates FileTree objects internally and applyModModeForState doesn't use FileTrees at all.
Configuration menu - View commit details
-
Copy full SHA for 78fbc08 - Browse repository at this point
Copy the full SHA 78fbc08View commit details -
ProfileInstallerProvider: drop unused location argument
The location is always derived from the Profile object, which is passed as an argument anyway. Furthermore, applyModModeForSubdir doesn't even use the argument.
Configuration menu - View commit details
-
Copy full SHA for 6b623ea - Browse repository at this point
Copy the full SHA 6b623eaView commit details -
ConflictManagementProvider.isFileActive: accept ImmutableProfile args
Ideally only ImmutableProfiles would be used, but settle for supporting both Profiles and ImmutableProfiles for now to limit the scope of this refactoring effort.
Configuration menu - View commit details
-
Copy full SHA for 993c374 - Browse repository at this point
Copy the full SHA 993c374View commit details -
Configuration menu - View commit details
-
Copy full SHA for 4ad93ce - Browse repository at this point
Copy the full SHA 4ad93ceView commit details -
ProfileModule: edge towards using ImmutableProfile
Now that the methods called by the actions which enable/disable mods accept ImmutableProfiles as arguments, it makes sense for the actions themselves to also use ImmutableProfiles.
Configuration menu - View commit details
-
Copy full SHA for c724da7 - Browse repository at this point
Copy the full SHA c724da7View commit details -
Configuration menu - View commit details
-
Copy full SHA for 08075d8 - Browse repository at this point
Copy the full SHA 08075d8View commit details -
Use ImmutableProfiles in installation rules and related code
This is a preparation step before GenericProfileInstaller.installMod is changed to use ImmutableProfile as well. GenericProfileInstaller.getInstallArgs will accept either profile object for now to avoid needing to touch uninstall methods at this time.
Configuration menu - View commit details
-
Copy full SHA for 3c2c87e - Browse repository at this point
Copy the full SHA 3c2c87eView commit details -
Configuration menu - View commit details
-
Copy full SHA for 32b4184 - Browse repository at this point
Copy the full SHA 32b4184View commit details -
installProfileHandler: sanity check state before proceeding
Avoid unnecessary non-null assertions as that's a bad habit. Throw an error if components local state is invalid before starting the import.
Configuration menu - View commit details
-
Copy full SHA for cd39266 - Browse repository at this point
Copy the full SHA cd39266View commit details -
Simplify arguments of profileCreatedCallback
This makes the code easier to read and might make it easier to refactor the profileCreatedCallback further.
Configuration menu - View commit details
-
Copy full SHA for 14d4c08 - Browse repository at this point
Copy the full SHA 14d4c08View commit details -
Drop checking file extension when extracting imported profile
Profiles imported as code are always .r2z files. Previously user could choose the older .r2x format when importing profile from a file, but support for this was dropped recently, and only .r2z is supported now.
Configuration menu - View commit details
-
Copy full SHA for 8a047b5 - Browse repository at this point
Copy the full SHA 8a047b5View commit details -
Configuration menu - View commit details
-
Copy full SHA for 2431010 - Browse repository at this point
Copy the full SHA 2431010View commit details -
profileCreatedCallback: reduce nesting by checking error state earlier
As a bonus this now handless the unlikely error properly instead of just ignoring it silently.
Configuration menu - View commit details
-
Copy full SHA for 8435e8e - Browse repository at this point
Copy the full SHA 8435e8eView commit details -
profileCreatedCallback: reduce nesting by making the method async
This requires slight changes to addEventListener, but these changes are probably an improvements by themselves.
Configuration menu - View commit details
-
Copy full SHA for 8755f0c - Browse repository at this point
Copy the full SHA 8755f0cView commit details -
profileCreatedCallback: reduce nesting by removing unnecessary check
- Earlier step has checked there's importable mods in the profile - Download provider has another, less user-friendly check for the same thing to prevent the mod profile from getting stuck - It doesn't seem anything catastrophic would happen even if the rest of the code is executed using an empty mod list
Configuration menu - View commit details
-
Copy full SHA for d386f47 - Browse repository at this point
Copy the full SHA d386f47View commit details -
profileCreatedCallback: reduce nesting by removing setTimeout
I don't see any reason for to wrap the code in the timeout. This might have been relevant when the import step was started right away after a new profile was created, by there now exists a preview window between these steps so the folder should always exists. If it doesn't, the 100ms wait won't change things.
Configuration menu - View commit details
-
Copy full SHA for 444fdf6 - Browse repository at this point
Copy the full SHA 444fdf6View commit details -
Configuration menu - View commit details
-
Copy full SHA for adac1f5 - Browse repository at this point
Copy the full SHA adac1f5View commit details -
Configuration menu - View commit details
-
Copy full SHA for 612d010 - Browse repository at this point
Copy the full SHA 612d010View commit details -
Configuration menu - View commit details
-
Copy full SHA for 0e9d8da - Browse repository at this point
Copy the full SHA 0e9d8daView commit details -
Refactor downloading imported mods to work without relying on callbacks
ThunderstoreDownloadProvider.downloadImportedMods: - Drop completedCallback argument and return the comboList on success instead - Rename callback argument to totalProgressCallback for clarity's sake and simplify it's signature. The other params are no longer needed since the errors aren't handled via the callback anymore BetterThunderstoreDownloader - Throw errors instead of reporting them via the callback system. While this is now inconsistent with other parts of the code base, the simplified error handling is deemed good enough reason to do so this simplifies the error handling on call site - Define singleModProcessCallback internally. This also fixed an off-by-one (mod) in the progress percentage calculation, and doesn't mark a mod fully processed when it's downloaded, but only when it's also saved to disk - The mods are now downloaded and saved using the internal helper methods instead of public downloadAndSave method which was previously called via public queueDownloadDependencies. The new functionality should be otherwise identical to downloadAndSave, except the steps can be awaited separately instead of relying on a callback to save the mod to disk ImportProfileModal.vue - Use the refactored downloadImportedProfileMods - Expect errors to be thrown and handle them accordingly - Drop downloadProgressCallback since a simple oneliner will do now - Change downloadCompletedCallback to not use callbacks of its own
Configuration menu - View commit details
-
Copy full SHA for f9044c9 - Browse repository at this point
Copy the full SHA f9044c9View commit details -
ImportProfileModal: rename methods to be more descriptive
Some of the method names weren't very good to start with, and others no longer fit the functionality after the recent refactoring.
Configuration menu - View commit details
-
Copy full SHA for 153b7d8 - Browse repository at this point
Copy the full SHA 153b7d8View commit details -
Refactor ImportProfileModal.installModsToProfile
- Don't handle errors here, let them flow to call site instead - Reduce looping by gathering list of disabled mods separately
Configuration menu - View commit details
-
Copy full SHA for f686ddc - Browse repository at this point
Copy the full SHA f686ddcView commit details -
Move installModsToProfile to ProfileUtils
- Change the method to accept ImmutableProfile as a parameter to separate it from the UI component state - Move the method to ProfileUtils as a standalone function - Include installModAfterDownload functionality in installModsToProfile as the former is no longer needed
Configuration menu - View commit details
-
Copy full SHA for 6b5e8a1 - Browse repository at this point
Copy the full SHA 6b5e8a1View commit details -
ImportProfileModal: rely less on tracking the active profile
Use ImmutableProfile for installing the mods. Especially when updating an existing profile this saves us from switching between the temporary and target profiles. Active profile is now only updated if the import process finishes successfully.
Configuration menu - View commit details
-
Copy full SHA for 6e3df4c - Browse repository at this point
Copy the full SHA 6e3df4cView commit details -
Extract object type conversion from DownloadProvider method
Download provider will now handle only the downloading, as fitting its moniker. Casting one type of object presenting a mod to another type is done in a separate helper function. This will eventually reduce the number of arguments passed around between different functions.
Configuration menu - View commit details
-
Copy full SHA for 69a2eb5 - Browse repository at this point
Copy the full SHA 69a2eb5View commit details -
Complete ImportProfileModal.profileCreatedCallback refactoring
- Move parts of profileCreatedCallback to ProfileUtils - Absorp the functionality from downloadAndSaveMods directly into profileCreatedCallback, as the method has been greatly reduced in size by previous refactoring, and the readability of the code no longer warrants this separation - As far as I'm concerned, the refactoring of this particular method is now completed: all that remains in the method is reading and updating the state of the component and the app, and all business logic has been moved behind three external methods. While the three could be combined into one, it would IMO then become too big of a function - Rename the method to importProfile, since it's not really a callback function
Configuration menu - View commit details
-
Copy full SHA for 0356a35 - Browse repository at this point
Copy the full SHA 0356a35View commit details -
Show progress of each step in the profile import modal
Initially progress was based purely on downloading the mods. It was recently changed so that extracting the downloaded mod to cache is allocated 20% of the progress of processing the mod in this step. However, this still leaves users hanging on 100% completion while the mods from the cache and configs from the imported profile zip are copied to the profile folder. These steps now have their own progress indicators.
Configuration menu - View commit details
-
Copy full SHA for 865b8c6 - Browse repository at this point
Copy the full SHA 865b8c6View commit details
Commits on Oct 14, 2024
-
Merge pull request #1471 from ebkr/immutable-profile
Add new ImmutableProfile class that doesn't track the active profile
Configuration menu - View commit details
-
Copy full SHA for 6015233 - Browse repository at this point
Copy the full SHA 6015233View commit details -
Merge pull request #1472 from ebkr/immutable-profile-pt2-modlinker
Refactor ModLinker to use ImmutableProfile
Configuration menu - View commit details
-
Copy full SHA for 748473a - Browse repository at this point
Copy the full SHA 748473aView commit details -
Merge pull request #1473 from ebkr/immutable-profile-pt3-profilemodlist
Refactor ProfileModList to use ImmutableProfile
Configuration menu - View commit details
-
Copy full SHA for ffe8f09 - Browse repository at this point
Copy the full SHA ffe8f09View commit details -
Merge pull request #1474 from ebkr/immutable-profile-pt4-downloadprov…
…ider Refactor download method of download provider to use ImmutableProfile
Configuration menu - View commit details
-
Copy full SHA for 9eec207 - Browse repository at this point
Copy the full SHA 9eec207View commit details -
Merge pull request #1475 from ebkr/immutable-profile-pt5-profileinsta…
…llprovider-mode Refactor ProfileInstallerProvider to use ImmutableProfile when enabling/disabling mods
Configuration menu - View commit details
-
Copy full SHA for c761737 - Browse repository at this point
Copy the full SHA c761737View commit details -
Merge pull request #1476 from ebkr/immutable-profile-pt6-profileinsta…
…llprovider-install Refactor ProfileInstallerProvider to use ImmutableProfile when installing mods
Configuration menu - View commit details
-
Copy full SHA for 401093e - Browse repository at this point
Copy the full SHA 401093eView commit details -
Merge pull request #1477 from ebkr/importprofilemodal-refactor-pt517
Continue refactoring ProfileImportModal to eventually separate business logic from UI
Configuration menu - View commit details
-
Copy full SHA for 328abf5 - Browse repository at this point
Copy the full SHA 328abf5View commit details -
Merge pull request #1478 from ebkr/callbackless-downloadImportedProfi…
…leMods Refactor download provider's downloadImportedMods to work with less callbacks
Configuration menu - View commit details
-
Copy full SHA for 86e4b9a - Browse repository at this point
Copy the full SHA 86e4b9aView commit details -
Merge pull request #1479 from ebkr/importprofilemodal-refactor-pt518
Complete ImportProfileModal.profileCreatedCallback refactoring
Configuration menu - View commit details
-
Copy full SHA for 907bdba - Browse repository at this point
Copy the full SHA 907bdbaView commit details -
Merge pull request #1480 from ebkr/import-progress-details
Show progress of each step in the profile import modal
Configuration menu - View commit details
-
Copy full SHA for d32a82f - Browse repository at this point
Copy the full SHA d32a82fView commit details -
Merge pull request #1469 from ebkr/wrapper-functions
Add wrapper functions to make it easier for TSMM to inject extra code
Configuration menu - View commit details
-
Copy full SHA for 3088c24 - Browse repository at this point
Copy the full SHA 3088c24View commit details -
Configuration menu - View commit details
-
Copy full SHA for 8ebc925 - Browse repository at this point
Copy the full SHA 8ebc925View commit details
Commits on Oct 15, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 7ba0b3b - Browse repository at this point
Copy the full SHA 7ba0b3bView commit details
Commits on Oct 16, 2024
-
Improve profile import performance
- Don't track the profile status to mods.yml file as the mods are installed. The old implementation that did this was wildly inefficient with the number of disk operations it used. In the end the work is in vain, as the mods.yml will be copied from the imported profile in a later step - Rename the two helper methods to clarify they're to be used when importing a profile, and to unify the naming
Configuration menu - View commit details
-
Copy full SHA for 14dfada - Browse repository at this point
Copy the full SHA 14dfadaView commit details -
Configuration menu - View commit details
-
Copy full SHA for 842dcbc - Browse repository at this point
Copy the full SHA 842dcbcView commit details -
Discard profile if importing fails midway through the process
If importing a profile fails while copying files, the resulting profile is unlikely to be what the user expects it to be, so delete the profile folder. The process can't be resumed, so any retry will do all the work (besides downloading the mods) again anyway. When creating a new profile, it's the newly created profile folder. When updating an existing profile, it's the temporary work folder. On the UI/state management side, we need to check if the profile exists or not, and update the profile list accordingly.
Configuration menu - View commit details
-
Copy full SHA for 678288d - Browse repository at this point
Copy the full SHA 678288dView commit details -
Merge pull request #1481 from ebkr/unify-folder-term
Unify folder term
Configuration menu - View commit details
-
Copy full SHA for 5daf993 - Browse repository at this point
Copy the full SHA 5daf993View commit details -
Merge pull request #1494 from ebkr/profile-import-performance
Improve profile import performance
Configuration menu - View commit details
-
Copy full SHA for e3bca5b - Browse repository at this point
Copy the full SHA e3bca5bView commit details -
Merge pull request #1495 from ebkr/profile-import-cleanup
Discard profile if importing fails midway through the process
Configuration menu - View commit details
-
Copy full SHA for 576d654 - Browse repository at this point
Copy the full SHA 576d654View commit details
Commits on Oct 17, 2024
-
Add PackageDexieStore.getCombosByDependencyStrings
The helper is used to convert an array of dependency strings to ThunderstoreCombo objects using data from the IndexedDB. This is a preliminary step for changes to reduce the need to have a full list of community's mods and their versions in memory at all times. read the data required to build an arrayy dependency tree (well, an array at least
Configuration menu - View commit details
-
Copy full SHA for 9d71ae7 - Browse repository at this point
Copy the full SHA 9d71ae7View commit details -
Read dependency data used by buildDependencySet from IndexedDB
Reading the data from DB allows eventually dropping the reference to whole list of ThunderstoreMods passed as an argument. Unfortunately this requires bringing in a dependency to GameManager. It's required currently to know which community's package list should be used to look for the mods. Ideally the packages and listings would be separated, but that's outside of the scope of the current task. Additionally it would change the behaviour, as currently inter-community dependencies aren't allowed.
Configuration menu - View commit details
-
Copy full SHA for f6cc73d - Browse repository at this point
Copy the full SHA f6cc73dView commit details -
Read dependency data used by buildDependencySetUsingLatest from Index…
…edDB Reading the data from DB allows eventually dropping the reference to whole list of ThunderstoreMods passed as an argument. Unfortunately this requires bringing in a dependency to GameManager. It's required currently to know which community's package list should be used to look for the mods. Ideally the packages and listings would be separated, but that's outside of the scope of the current task. Additionally it would change the behaviour, as currently inter-community dependencies aren't allowed.
Configuration menu - View commit details
-
Copy full SHA for 5d11a1f - Browse repository at this point
Copy the full SHA 5d11a1fView commit details -
ThunderstoreDownloaderProvider: drop dependency on allMods
None of the provider's methods no longer need to have access to full list of mods available on Thunderstore API. The same data is read directly from IndexedDB when it's needed.
Configuration menu - View commit details
-
Copy full SHA for 3e2f750 - Browse repository at this point
Copy the full SHA 3e2f750View commit details -
Make usage of argument by reference unambigious
The result array was both returned from the function, but also mutated in place. I assume this is done to avoid having to create multiple copies when the callstack gets deep. Stop returning the array to make it clear it's used by reference.
Configuration menu - View commit details
-
Copy full SHA for 3a240c9 - Browse repository at this point
Copy the full SHA 3a240c9View commit details -
Configuration menu - View commit details
-
Copy full SHA for a7813cd - Browse repository at this point
Copy the full SHA a7813cdView commit details -
Change ThunderstoreDownloaderProvider based on review feedback
Default parameters are considered harmful as someone might forget to use them. Required Enum parameters are considered better for readability.
Configuration menu - View commit details
-
Copy full SHA for 04be4c5 - Browse repository at this point
Copy the full SHA 04be4c5View commit details -
Don't require complete package list to install mods via URL protocol
Check the existence of the target package and version directly from the IndexedDB cache. After the change the Manager component no longer needs access to the complete package list of the selected community.
Configuration menu - View commit details
-
Copy full SHA for 0df0f5f - Browse repository at this point
Copy the full SHA 0df0f5fView commit details -
Use getCombosByDependencyStrings in ProfileUtils
The recently added helper is more suitable for the use case. This also means the implementation doesn't depend on ThunderstoreMod containing references to all related ThunderstoreVersions anymore - a change we want to introduce to reduce the apps memory footprint.
Configuration menu - View commit details
-
Copy full SHA for 416c96e - Browse repository at this point
Copy the full SHA 416c96eView commit details -
Simplify the logic for choosing recommended and selected mod version
Set the default values in the beginning and overwrite them only if suitable overwrite values are found.
Configuration menu - View commit details
-
Copy full SHA for 6b652e1 - Browse repository at this point
Copy the full SHA 6b652e1View commit details
Commits on Oct 18, 2024
-
Fetch package version strings from IndexedDB when download modal opens
Do not depend on ThunderstoreMod containing information about all the related ThunderstoreVersions, as the connection will be severed in an attempt to reduce memory footprint of the app.
Configuration menu - View commit details
-
Copy full SHA for 04451bf - Browse repository at this point
Copy the full SHA 04451bfView commit details -
Fetch package version from IndexedDB when downloading mod starts
Do not depend on ThunderstoreMod containing information about all the related ThunderstoreVersions, as the connection will be severed in an attempt to reduce memory footprint of the app.
Configuration menu - View commit details
-
Copy full SHA for a4889be - Browse repository at this point
Copy the full SHA a4889beView commit details -
Access mod's latest version through custom helper
This hides the latest version's data behind a method so we can change the internal implementation of how ThunderstoreMod handles version information.
Configuration menu - View commit details
-
Copy full SHA for 5373b5c - Browse repository at this point
Copy the full SHA 5373b5cView commit details -
Unify modsWithUpdates Vuex getters
Having the method only in one store module makes refactoring it easier. ProfileModule is more natural place since it tracks the list of locally installed mods, and modsWithUpdates answers the question of which of those mods are outdated.
Configuration menu - View commit details
-
Copy full SHA for f4fa74c - Browse repository at this point
Copy the full SHA f4fa74cView commit details -
Split getter of mods to update into two
Synchronous getter will now return an array of ThunderstoreMods rather than ThunderstoreCombos. This way the function can stay synchronous even when ThunderstoreMods no longer contain reference to ThunderstoreVersions. ThunderstoreMod is sufficient to most use cases - in fact all but one only care about the number of returned items and therefore required no changes in call sites. Asynchronous action returns an array of ThunderstoreCombos to the only place where the combos are actually needed.
Configuration menu - View commit details
-
Copy full SHA for b092517 - Browse repository at this point
Copy the full SHA b092517View commit details -
Drop .fromReactive() from ThunderstoreMod and ThunderstoreVersion
As far as I can tell, the conversion isn't really needed. The doc strings of ReactiveObjectConverterInterface claims that access to class methods is lost, but based on testing this is not true. Another claim is that this grants access to object's private fields. The fields can be accessed, but same is true to any ThunderstoreMod object, even if they aren't passed through Vue's methods. Aside from getting a clear TypeScript warning about accessing a private field in IDE (compile time) nothing prevents accessing the field in JS files (run time). Ideally this might speed up OnlineModList rendering, as the unnecessary object creation is skipped.
Configuration menu - View commit details
-
Copy full SHA for 598486f - Browse repository at this point
Copy the full SHA 598486fView commit details -
Drop ThunderstoreVersion references from ThunderstoreMod
Commonly used version-specific data - latest version number, icon and description are now stored in the ThunderstoreMod object. Rest of the version info needs to be fetched separately where it's actually used. This change drastically reduces memory usage for larger communities like Lethal Company.
Configuration menu - View commit details
-
Copy full SHA for 4c2db6c - Browse repository at this point
Copy the full SHA 4c2db6cView commit details -
Merge pull request #1482 from ebkr/memory-optimization-pt1-DownloadPr…
…ovider Decouple download provider from full list of ThunderstoreMod objects
Configuration menu - View commit details
-
Copy full SHA for b1936a4 - Browse repository at this point
Copy the full SHA b1936a4View commit details -
Merge pull request #1483 from ebkr/memory-optimization-pt2-modInstall…
…Protocol Don't require complete package list to install mods via URL protocol
Configuration menu - View commit details
-
Copy full SHA for 5f829b4 - Browse repository at this point
Copy the full SHA 5f829b4View commit details -
Merge pull request #1484 from ebkr/memory-optimization-pt3-ProfileUtils
Use getCombosByDependencyStrings in ProfileUtils
Configuration menu - View commit details
-
Copy full SHA for a543e32 - Browse repository at this point
Copy the full SHA a543e32View commit details -
Merge pull request #1485 from ebkr/memory-optimization-pt4-DownloadMo…
…dModal Don't depend on ThunderstoreMod containing all ThunderstoreVersions in components
Configuration menu - View commit details
-
Copy full SHA for aac4c16 - Browse repository at this point
Copy the full SHA aac4c16View commit details -
Merge pull request #1486 from ebkr/memory-optimization-pt5-TsModsModule
Don't depend on ThunderstoreMod containing all ThunderstoreVersions in Vuex
Configuration menu - View commit details
-
Copy full SHA for ea7643f - Browse repository at this point
Copy the full SHA ea7643fView commit details -
Merge pull request #1487 from ebkr/memory-optimization-pt6-Thundersto…
…reMod Drop ThunderstoreVersion references from ThunderstoreMod
Configuration menu - View commit details
-
Copy full SHA for 805d5bc - Browse repository at this point
Copy the full SHA 805d5bcView commit details -
Configuration menu - View commit details
-
Copy full SHA for a40e585 - Browse repository at this point
Copy the full SHA a40e585View commit details
Commits on Oct 21, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 7ff9c20 - Browse repository at this point
Copy the full SHA 7ff9c20View commit details -
Merge pull request #1500 from ebkr/release-3.1.51
Updated versions and CHANGELOG
Configuration menu - View commit details
-
Copy full SHA for 5864c14 - Browse repository at this point
Copy the full SHA 5864c14View commit details