Skip to content
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

Merged
merged 135 commits into from
Oct 21, 2024
Merged

3.1.51 #1501

merged 135 commits into from
Oct 21, 2024

Commits on Sep 13, 2024

  1. 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.
    anttimaki committed Sep 13, 2024
    Configuration menu
    Copy the full SHA
    42fce1d View commit details
    Browse the repository at this point in the history
  2. 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.
    anttimaki committed Sep 13, 2024
    Configuration menu
    Copy the full SHA
    3863c5b View commit details
    Browse the repository at this point in the history

Commits on Sep 17, 2024

  1. Merge pull request #1438 from ebkr/fix-date-field-types

    Fix ThunderstoreMod date field typing
    anttimaki authored Sep 17, 2024
    Configuration menu
    Copy the full SHA
    5dbd21a View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1439 from ebkr/fix-online-modlist-watching

    Fix watching online mod list for changes
    anttimaki authored Sep 17, 2024
    Configuration menu
    Copy the full SHA
    232551a View commit details
    Browse the repository at this point in the history
  3. 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.
    anttimaki committed Sep 17, 2024
    Configuration menu
    Copy the full SHA
    2291879 View commit details
    Browse the repository at this point in the history

Commits on Sep 19, 2024

  1. Add 3 games

    Add Hard Time III
    Add Paquerette Down the Bunburrows
    Add Shapez 2
    Oksamies committed Sep 19, 2024
    Configuration menu
    Copy the full SHA
    966386d View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    351a5b2 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    03729ae View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1450 from ebkr/separate-zip-extraction-from-ui-co…

    …mponent
    
    Separate Zip extraction function from Profile Import Ui component
    anttimaki authored Sep 19, 2024
    Configuration menu
    Copy the full SHA
    968b792 View commit details
    Browse the repository at this point in the history

Commits on Sep 24, 2024

  1. Configuration menu
    Copy the full SHA
    b389e76 View commit details
    Browse the repository at this point in the history

Commits on Sep 26, 2024

  1. Add 3 games

    Distance
    FNAF Into The Pit
    Tank Team
    Oksamies committed Sep 26, 2024
    Configuration menu
    Copy the full SHA
    30bd6d5 View commit details
    Browse the repository at this point in the history
  2. Separate installModAfterDownload function from UI component and use e…

    …arly return pattern consistently
    VilppeRiskidev committed Sep 26, 2024
    Configuration menu
    Copy the full SHA
    0ea5e3a View commit details
    Browse the repository at this point in the history

Commits on Sep 27, 2024

  1. Merge pull request #1451 from ebkr/separate-parse-yaml-from-component

    Separate parseYamlToExportFormat function from ImportProfileModal UI …
    anttimaki authored Sep 27, 2024
    Configuration menu
    Copy the full SHA
    4d091c1 View commit details
    Browse the repository at this point in the history
  2. 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]>
    VilppeRiskidev and anttimaki authored Sep 27, 2024
    Configuration menu
    Copy the full SHA
    96e607a View commit details
    Browse the repository at this point in the history
  3. Merge pull request #1453 from thunderstore-io/add-3-games-tt-fnafitp-…

    …distance
    
    Add 3 games
    anttimaki authored Sep 27, 2024
    Configuration menu
    Copy the full SHA
    d8efcd2 View commit details
    Browse the repository at this point in the history
  4. Update TankTeam cover image

    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    bacb86c View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1455 from ebkr/tank-team-cover

    Update TankTeam cover image
    anttimaki authored Sep 27, 2024
    Configuration menu
    Copy the full SHA
    b1352c5 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    490aff7 View commit details
    Browse the repository at this point in the history
  7. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    c581dbc View commit details
    Browse the repository at this point in the history
  8. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    a0d5ef4 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    e2d311c View commit details
    Browse the repository at this point in the history
  10. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    5ef034a View commit details
    Browse the repository at this point in the history
  11. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    4cbfb1d View commit details
    Browse the repository at this point in the history
  12. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    fc61ab3 View commit details
    Browse the repository at this point in the history
  13. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    452ba46 View commit details
    Browse the repository at this point in the history
  14. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    92e3210 View commit details
    Browse the repository at this point in the history
  15. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    8aeaaad View commit details
    Browse the repository at this point in the history
  16. 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.
    anttimaki committed Sep 27, 2024
    Configuration menu
    Copy the full SHA
    45b8b20 View commit details
    Browse the repository at this point in the history

Commits on Sep 30, 2024

  1. Configuration menu
    Copy the full SHA
    7bc0283 View commit details
    Browse the repository at this point in the history

Commits on Oct 1, 2024

  1. Merge pull request #1454 from ebkr/separate-install-mod-from-component

    Separate installModAfterDownload function from UI component
    anttimaki authored Oct 1, 2024
    Configuration menu
    Copy the full SHA
    680aa41 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1447 from ebkr/disable-mac-build

    Disable MacOS from CI pipeline
    anttimaki authored Oct 1, 2024
    Configuration menu
    Copy the full SHA
    87b84ee View commit details
    Browse the repository at this point in the history

Commits on Oct 2, 2024

  1. Configuration menu
    Copy the full SHA
    1dac1b4 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    ea70a0c View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    413acb8 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    868f998 View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1459 from ebkr/import-modal-refactoring-continued

    ImportProfileModal improvements
    anttimaki authored Oct 2, 2024
    Configuration menu
    Copy the full SHA
    4ce5ede View commit details
    Browse the repository at this point in the history
  6. Merge pull request #1460 from ebkr/move-readprofile-away-from-ui-comp…

    …onent
    
    Move readProfileFile function away from the UI component
    anttimaki authored Oct 2, 2024
    Configuration menu
    Copy the full SHA
    9176b94 View commit details
    Browse the repository at this point in the history

Commits on Oct 7, 2024

  1. Merge pull request #1345 from ebkr/chunky

    Use new Thunderstore API to fetch community's package list
    anttimaki authored Oct 7, 2024
    Configuration menu
    Copy the full SHA
    e28d874 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1429 from ebkr/chunky-pt2

    Skip unnecessary steps when package list hasn't changed
    anttimaki authored Oct 7, 2024
    Configuration menu
    Copy the full SHA
    4d6914c View commit details
    Browse the repository at this point in the history
  3. Merge pull request #1456 from ebkr/chunky-pt3

    Use fflate to decompress package list chunks
    anttimaki authored Oct 7, 2024
    Configuration menu
    Copy the full SHA
    b7ba72f View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1457 from ebkr/chunky-pt4

    Harden chunked package list API requests against CDN problems
    anttimaki authored Oct 7, 2024
    Configuration menu
    Copy the full SHA
    8055464 View commit details
    Browse the repository at this point in the history

Commits on Oct 8, 2024

  1. 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.
    anttimaki committed Oct 8, 2024
    Configuration menu
    Copy the full SHA
    fc0bedc View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1467 from ebkr/fix-data-folders

    Fix regression in Lethal Company/Content Warning data folder settings
    anttimaki authored Oct 8, 2024
    Configuration menu
    Copy the full SHA
    4f44766 View commit details
    Browse the repository at this point in the history
  3. Add GoreBox

    VilppeRiskidev committed Oct 8, 2024
    Configuration menu
    Copy the full SHA
    fd3318f View commit details
    Browse the repository at this point in the history
  4. 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.
    anttimaki committed Oct 8, 2024
    Configuration menu
    Copy the full SHA
    6a8a17c View commit details
    Browse the repository at this point in the history

Commits on Oct 9, 2024

  1. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    82c63d5 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    9946dc8 View commit details
    Browse the repository at this point in the history
  3. Use Profile.joinToProfilePath()

    In retrospect IDK if this cleaned up the code as I thought it would.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    00cfc03 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    00ccb25 View commit details
    Browse the repository at this point in the history
  5. Add helper methods for casting a Profile to ImmutableProfile

    These can be used to take an immutable snapshot of the currently active
    profile.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    c91312b View commit details
    Browse the repository at this point in the history
  6. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    7bb084f View commit details
    Browse the repository at this point in the history
  7. Refactor ProfileModList.getModList to use ImmutableProfile

    To prevent mega commit, call sites still use Profile for now.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    cc27ecb View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    152024d View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    d0e96b3 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    5c4d412 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    3cc8c3e View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    88ca5d1 View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    3268022 View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    e7fd48a View commit details
    Browse the repository at this point in the history
  15. Refactor ProfileModList.exportModListAsCode to use ImmutableProfile

    This completes refactoring ProfileModList, which no longer relies on
    the state tracking Profile object.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    d37bb71 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    46913e0 View commit details
    Browse the repository at this point in the history
  17. Drop ProfileInstallProvider.getDescendantFiles

    The method is not used anywhere, at least anymore.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    26928b8 View commit details
    Browse the repository at this point in the history
  18. Make ProfileInstallerProvider.applyModMode private

    The method isn't called from the outside and looks more like an
    implementation detail for enableMod/disableMod methods.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    f68e0ed View commit details
    Browse the repository at this point in the history
  19. ProfileInstallerProvider: drop unused FileTree argument

    applyModModeForSubdir creates FileTree objects internally and
    applyModModeForState doesn't use FileTrees at all.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    78fbc08 View commit details
    Browse the repository at this point in the history
  20. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    6b623ea View commit details
    Browse the repository at this point in the history
  21. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    993c374 View commit details
    Browse the repository at this point in the history
  22. Configuration menu
    Copy the full SHA
    4ad93ce View commit details
    Browse the repository at this point in the history
  23. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    c724da7 View commit details
    Browse the repository at this point in the history
  24. Configuration menu
    Copy the full SHA
    08075d8 View commit details
    Browse the repository at this point in the history
  25. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    3c2c87e View commit details
    Browse the repository at this point in the history
  26. Configuration menu
    Copy the full SHA
    32b4184 View commit details
    Browse the repository at this point in the history
  27. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    cd39266 View commit details
    Browse the repository at this point in the history
  28. Simplify arguments of profileCreatedCallback

    This makes the code easier to read and might make it easier to refactor
    the profileCreatedCallback further.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    14d4c08 View commit details
    Browse the repository at this point in the history
  29. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    8a047b5 View commit details
    Browse the repository at this point in the history
  30. Configuration menu
    Copy the full SHA
    2431010 View commit details
    Browse the repository at this point in the history
  31. profileCreatedCallback: reduce nesting by checking error state earlier

    As a bonus this now handless the unlikely error properly instead of
    just ignoring it silently.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    8435e8e View commit details
    Browse the repository at this point in the history
  32. profileCreatedCallback: reduce nesting by making the method async

    This requires slight changes to addEventListener, but these changes are
    probably an improvements by themselves.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    8755f0c View commit details
    Browse the repository at this point in the history
  33. 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
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    d386f47 View commit details
    Browse the repository at this point in the history
  34. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    444fdf6 View commit details
    Browse the repository at this point in the history
  35. Configuration menu
    Copy the full SHA
    adac1f5 View commit details
    Browse the repository at this point in the history
  36. Configuration menu
    Copy the full SHA
    612d010 View commit details
    Browse the repository at this point in the history
  37. Configuration menu
    Copy the full SHA
    0e9d8da View commit details
    Browse the repository at this point in the history
  38. 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
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    f9044c9 View commit details
    Browse the repository at this point in the history
  39. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    153b7d8 View commit details
    Browse the repository at this point in the history
  40. Refactor ImportProfileModal.installModsToProfile

    - Don't handle errors here, let them flow to call site instead
    - Reduce looping by gathering list of disabled mods separately
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    f686ddc View commit details
    Browse the repository at this point in the history
  41. 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
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    6b5e8a1 View commit details
    Browse the repository at this point in the history
  42. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    6e3df4c View commit details
    Browse the repository at this point in the history
  43. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    69a2eb5 View commit details
    Browse the repository at this point in the history
  44. 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
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    0356a35 View commit details
    Browse the repository at this point in the history
  45. 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.
    anttimaki committed Oct 9, 2024
    Configuration menu
    Copy the full SHA
    865b8c6 View commit details
    Browse the repository at this point in the history

Commits on Oct 14, 2024

  1. Merge pull request #1471 from ebkr/immutable-profile

    Add new ImmutableProfile class that doesn't track the active profile
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    6015233 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1472 from ebkr/immutable-profile-pt2-modlinker

    Refactor ModLinker to use ImmutableProfile
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    748473a View commit details
    Browse the repository at this point in the history
  3. Merge pull request #1473 from ebkr/immutable-profile-pt3-profilemodlist

    Refactor ProfileModList to use ImmutableProfile
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    ffe8f09 View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1474 from ebkr/immutable-profile-pt4-downloadprov…

    …ider
    
    Refactor download method of download provider to use ImmutableProfile
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    9eec207 View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1475 from ebkr/immutable-profile-pt5-profileinsta…

    …llprovider-mode
    
    Refactor ProfileInstallerProvider to use ImmutableProfile when enabling/disabling mods
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    c761737 View commit details
    Browse the repository at this point in the history
  6. Merge pull request #1476 from ebkr/immutable-profile-pt6-profileinsta…

    …llprovider-install
    
    Refactor ProfileInstallerProvider to use ImmutableProfile when installing mods
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    401093e View commit details
    Browse the repository at this point in the history
  7. Merge pull request #1477 from ebkr/importprofilemodal-refactor-pt517

    Continue refactoring ProfileImportModal to eventually separate business logic from UI
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    328abf5 View commit details
    Browse the repository at this point in the history
  8. Merge pull request #1478 from ebkr/callbackless-downloadImportedProfi…

    …leMods
    
    Refactor download provider's downloadImportedMods to work with less callbacks
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    86e4b9a View commit details
    Browse the repository at this point in the history
  9. Merge pull request #1479 from ebkr/importprofilemodal-refactor-pt518

    Complete ImportProfileModal.profileCreatedCallback refactoring
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    907bdba View commit details
    Browse the repository at this point in the history
  10. Merge pull request #1480 from ebkr/import-progress-details

    Show progress of each step in the profile import modal
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    d32a82f View commit details
    Browse the repository at this point in the history
  11. Merge pull request #1469 from ebkr/wrapper-functions

    Add wrapper functions to make it easier for TSMM to inject extra code
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    3088c24 View commit details
    Browse the repository at this point in the history
  12. Merge pull request #1468 from thunderstore-io/gorebox

    Add GoreBox
    anttimaki authored Oct 14, 2024
    Configuration menu
    Copy the full SHA
    8ebc925 View commit details
    Browse the repository at this point in the history

Commits on Oct 15, 2024

  1. Unify folder term

    VilppeRiskidev committed Oct 15, 2024
    Configuration menu
    Copy the full SHA
    7ba0b3b View commit details
    Browse the repository at this point in the history

Commits on Oct 16, 2024

  1. 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
    anttimaki committed Oct 16, 2024
    Configuration menu
    Copy the full SHA
    14dfada View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    842dcbc View commit details
    Browse the repository at this point in the history
  3. 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.
    anttimaki committed Oct 16, 2024
    Configuration menu
    Copy the full SHA
    678288d View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1481 from ebkr/unify-folder-term

    Unify folder term
    anttimaki authored Oct 16, 2024
    Configuration menu
    Copy the full SHA
    5daf993 View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1494 from ebkr/profile-import-performance

    Improve profile import performance
    anttimaki authored Oct 16, 2024
    Configuration menu
    Copy the full SHA
    e3bca5b View commit details
    Browse the repository at this point in the history
  6. Merge pull request #1495 from ebkr/profile-import-cleanup

    Discard profile if importing fails midway through the process
    anttimaki authored Oct 16, 2024
    Configuration menu
    Copy the full SHA
    576d654 View commit details
    Browse the repository at this point in the history

Commits on Oct 17, 2024

  1. 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
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    9d71ae7 View commit details
    Browse the repository at this point in the history
  2. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    f6cc73d View commit details
    Browse the repository at this point in the history
  3. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    5d11a1f View commit details
    Browse the repository at this point in the history
  4. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    3e2f750 View commit details
    Browse the repository at this point in the history
  5. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    3a240c9 View commit details
    Browse the repository at this point in the history
  6. Reduce code duplication

    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    a7813cd View commit details
    Browse the repository at this point in the history
  7. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    04be4c5 View commit details
    Browse the repository at this point in the history
  8. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    0df0f5f View commit details
    Browse the repository at this point in the history
  9. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    416c96e View commit details
    Browse the repository at this point in the history
  10. 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.
    anttimaki committed Oct 17, 2024
    Configuration menu
    Copy the full SHA
    6b652e1 View commit details
    Browse the repository at this point in the history

Commits on Oct 18, 2024

  1. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    04451bf View commit details
    Browse the repository at this point in the history
  2. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    a4889be View commit details
    Browse the repository at this point in the history
  3. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    5373b5c View commit details
    Browse the repository at this point in the history
  4. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    f4fa74c View commit details
    Browse the repository at this point in the history
  5. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    b092517 View commit details
    Browse the repository at this point in the history
  6. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    598486f View commit details
    Browse the repository at this point in the history
  7. 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.
    anttimaki committed Oct 18, 2024
    Configuration menu
    Copy the full SHA
    4c2db6c View commit details
    Browse the repository at this point in the history
  8. Merge pull request #1482 from ebkr/memory-optimization-pt1-DownloadPr…

    …ovider
    
    Decouple download provider from full list of ThunderstoreMod objects
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    b1936a4 View commit details
    Browse the repository at this point in the history
  9. Merge pull request #1483 from ebkr/memory-optimization-pt2-modInstall…

    …Protocol
    
    Don't require complete package list to install mods via URL protocol
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    5f829b4 View commit details
    Browse the repository at this point in the history
  10. Merge pull request #1484 from ebkr/memory-optimization-pt3-ProfileUtils

    Use getCombosByDependencyStrings in ProfileUtils
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    a543e32 View commit details
    Browse the repository at this point in the history
  11. Merge pull request #1485 from ebkr/memory-optimization-pt4-DownloadMo…

    …dModal
    
    Don't depend on ThunderstoreMod containing all ThunderstoreVersions in components
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    aac4c16 View commit details
    Browse the repository at this point in the history
  12. Merge pull request #1486 from ebkr/memory-optimization-pt5-TsModsModule

    Don't depend on ThunderstoreMod containing all ThunderstoreVersions in Vuex
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    ea7643f View commit details
    Browse the repository at this point in the history
  13. Merge pull request #1487 from ebkr/memory-optimization-pt6-Thundersto…

    …reMod
    
    Drop ThunderstoreVersion references from ThunderstoreMod
    anttimaki authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    805d5bc View commit details
    Browse the repository at this point in the history
  14. Add TCG Card Shop Simulator (#1492)

    Add TCG Card Shop Simulator
    SaxbyMod authored Oct 18, 2024
    Configuration menu
    Copy the full SHA
    a40e585 View commit details
    Browse the repository at this point in the history

Commits on Oct 21, 2024

  1. Updated versions and CHANGELOG

    ebkr committed Oct 21, 2024
    Configuration menu
    Copy the full SHA
    7ff9c20 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1500 from ebkr/release-3.1.51

    Updated versions and CHANGELOG
    ebkr authored Oct 21, 2024
    Configuration menu
    Copy the full SHA
    5864c14 View commit details
    Browse the repository at this point in the history