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

Develop #1286

Merged
merged 68 commits into from
Apr 6, 2024
Merged

Develop #1286

merged 68 commits into from
Apr 6, 2024

Commits on Feb 22, 2024

  1. DisableModModal: assimilate dependants list

    There's no need to pass dependants list as a prop since it can be as
    easily be determined internally.
    
    Dependency list prop was dropped altogether since it's not used.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    df2ad26 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    5baca5e View commit details
    Browse the repository at this point in the history
  3. ProfileModule: add support for disabling mods via Vuex store

    The implementation imitates what's currently being done by
    LocalModList.performDisable().
    
    This helps remove business logic and driect references to providers
    from components, hopefully supporting reuse and easier refactoring.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    359f57e View commit details
    Browse the repository at this point in the history
  4. DisableModModal: assimilate rest of the props

    The modal now handles disabling of mods entirely internally.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    72afea0 View commit details
    Browse the repository at this point in the history
  5. LocalModCard: don't delegate mod disabling to LocalModList

    LocalModCard now disables mods without dependants internally, and
    delegates mods with dependants to DisableModModal, effectively cutting
    out the middleman LocalModList.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    578ab72 View commit details
    Browse the repository at this point in the history
  6. Use Vuex when disabling all mods from settings page

    This significantly speeds up the process.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    156e0e5 View commit details
    Browse the repository at this point in the history
  7. Simplify Manager.setAllModsEnabled

    Now that the same method is no longer used to disable mods too, it can
    be cleaned up quite nicely.
    
    The whole implementation will end up being replaced with one that's
    located in the Vuex store, like the disabling counterpart, but it's
    beyond the scope of this PR.
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    59da3bf View commit details
    Browse the repository at this point in the history
  8. Merge pull request #1216 from ebkr/disable-mod-modal

    Make DisableModModal more self-sustained
    anttimaki authored Feb 22, 2024
    Configuration menu
    Copy the full SHA
    54bcab7 View commit details
    Browse the repository at this point in the history
  9. Merge pull request #1219 from ebkr/disable-all-setting

    Use Vuex when disabling all mods from settings page
    anttimaki authored Feb 22, 2024
    Configuration menu
    Copy the full SHA
    0ab6a03 View commit details
    Browse the repository at this point in the history
  10. Use Vuex to manage error modal

    - Main benefit is that emitted errors no longer need to bubble all the
      way to the App.vue to get shown. This should prevent situations where
      refactoring components distrupts the emit chain and leaves the error
      unshown
    - Refactors the modal to a single standalone component
    - Fixes the odd naming where R2Error's "name" was stored in variable
      called "message", and "message" was stored in "stack" variable
    - Unifies some logged messages from "name\n-> message" format to
      "[name]: message" format
    anttimaki committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    781f23c View commit details
    Browse the repository at this point in the history
  11. fix invalid votv game def and ue4ss settings link behavior

    - Fix the VotV game definition to target the correct top-level game binary.
    - Fix invalid UE4SS-settings.ini runtime file linkage. Prior to this change this file
      was incorrectly moved into the root-most game dir, instead of alongside the other UE4SS
      and shimloader files within 'GAME/Binaries/Win64'.
    ethangreen-dev committed Feb 22, 2024
    Configuration menu
    Copy the full SHA
    a7af39b View commit details
    Browse the repository at this point in the history

Commits on Feb 23, 2024

  1. Move localModList from main Vuex store to ProfileModule

    "local" in the variable name refers to locally installed mods, i.e.
    the mods currently included in the profile. It therefore makes sense
    for the mod list to be part of the ProfileModule.
    anttimaki committed Feb 23, 2024
    Configuration menu
    Copy the full SHA
    25d0c82 View commit details
    Browse the repository at this point in the history
  2. Replace GameManager.unsetGame() with renamed getter

    The old name was a bit confusing since it could be read as a method
    that resets the active game stored in GameManager's internal state.
    anttimaki committed Feb 23, 2024
    Configuration menu
    Copy the full SHA
    45826dd View commit details
    Browse the repository at this point in the history
  3. Store active game and settings in Vuex store

    Set the game when user proceeds (or is automatically redirected) from
    game selection screen. Update the settings whenever game is changed
    properly via action. To ensure the settings are properly loaded, they
    should be accessed via getter rather than directly from the state. This
    is not ideal but we're constrained by the fact that actions are the
    only part of Vuex that supports async operations and provides access to
    both local and root state/getters/mutations/actions.
    
    The change means that the GameManager is no longer the single source of
    truth in the matter. This is a trade-off with eventually being able to
    do more business logic in Vuex store instead of the UI components.
    anttimaki committed Feb 23, 2024
    Configuration menu
    Copy the full SHA
    1a96bc4 View commit details
    Browse the repository at this point in the history
  4. Move loading and updating ordering settings from component to Vuex

    SearchAndSort now accesses only Vuex, which handles updating the local
    state and the persistent settings storage.
    anttimaki committed Feb 23, 2024
    Configuration menu
    Copy the full SHA
    6431f97 View commit details
    Browse the repository at this point in the history
  5. Move Vuex initiazer calls to Manager component's beforeCreate

    - If profile/loadOrderingSettings is called in SearchAndSort, its
      sibling component LocalModList has already tried to access related
      settings
    - Move resetting mod list when changing between profiles from Profiles
      component to Manager, since that seems to work too and feels like a
      more correct place for it
    - Move modFilters/reset call from Manager's created to beforeCreate.
      The location doesn't really matter since the components that use the
      related settings aren't mounted initially, but for consistency's
      sake it's called in the same place as the rest
    anttimaki committed Feb 23, 2024
    Configuration menu
    Copy the full SHA
    b17d878 View commit details
    Browse the repository at this point in the history
  6. Merge pull request #1228 from ebkr/move-local-mod-list-store

    Move localModList from main Vuex store to ProfileModule
    anttimaki authored Feb 23, 2024
    Configuration menu
    Copy the full SHA
    559c89a View commit details
    Browse the repository at this point in the history

Commits on Feb 29, 2024

  1. Merge pull request #1225 from ebkr/vuex-error-modal

    Use Vuex to manage error modal
    MythicManiac authored Feb 29, 2024
    Configuration menu
    Copy the full SHA
    c5238fe View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1230 from ebkr/vuex-active-game

    Duplicate active game and settings instance in Vuex
    MythicManiac authored Feb 29, 2024
    Configuration menu
    Copy the full SHA
    c823c70 View commit details
    Browse the repository at this point in the history
  3. Merge pull request #1232 from ethangreen-dev/votv-fixes

    Fix invalid VotV game definition and invalid UE4SS-settings link behavior
    MythicManiac authored Feb 29, 2024
    Configuration menu
    Copy the full SHA
    da996d9 View commit details
    Browse the repository at this point in the history

Commits on Mar 4, 2024

  1. add Plasma

    ethangreen-dev committed Mar 4, 2024
    Configuration menu
    Copy the full SHA
    d78a014 View commit details
    Browse the repository at this point in the history
  2. Move resetting mod list back to Profiles.vue

    Commit b17d878 moved this bit of code from Profiles.vue to Manager.vue
    since it makes for the latter to handle the state manipulation that
    affects its own contents.
    
    However, Vue doesn't await beforeCreate(), which opened up a race
    condition where it's technically possible for the updating of the mod
    list with an empty array to complete last, causing the view to render
    an empty state.
    
    While placing this bit of code in Profiles.vue is not ideal, at least
    it works since the method is awaited there.
    anttimaki committed Mar 4, 2024
    Configuration menu
    Copy the full SHA
    267ab0b View commit details
    Browse the repository at this point in the history
  3. Remove code that's never executed

    The if-branch checks a variable that has been set to false just two
    lines ago. I'm not sure if this is a bug that should be handled some
    other way, but at least this part of the code has remained the same for
    four years, so probably it's not very critical bug at least.
    anttimaki committed Mar 4, 2024
    Configuration menu
    Copy the full SHA
    a55a59e View commit details
    Browse the repository at this point in the history
  4. Store active profile in Vuex

    Do changes to active profile via Vuex methods. Reading values from Vuex
    are covered in separate commits.
    
    This commit covers all cases where the active profile is changed,
    except for:
    
    - CacheUtil.clean(): I considered this not required at this time as the
      method only iterates over profiles and sets back the original profile
      in the end. This can be revisited if we want to decommission the
      current implementation in Profile.ts completely
    - Test cases
    
    I'm not particularly happy with the fact that setActiveProfile mutator
    accepts profile name as a string instead of a profile object. This too
    can be revisited once the refactoring has progressed a bit. Now there
    were some cases where the active profile was changed without updating
    the persistent settings, and having separate actions or one action with
    a more complex payload seemed like overkill.
    anttimaki committed Mar 4, 2024
    Configuration menu
    Copy the full SHA
    08a6b02 View commit details
    Browse the repository at this point in the history
  5. Change the relation between selectedProfile and active profile

    - Profiles.vue stored selectedProfile ("selected in the UI from the
      list of available profiles") internally
    - Sometimes when the selectedProfile changed, activeProfile (stored in
      Profile.ts and Vuex) was updated, and sometimes not. Sometimes the
      last selected profile setting in persistent storage was updated and
      sometimes not
    - This was changed so that updating the selectedProfile always updates
      activeProfile and the persistent setting. I assume this is more
      correct behaviour, if not for any other reason, then to make the
      behaviour consistent and predictable
      - One exception to this is the temporary folder when renaming a
        profile is not saved to persitent settings
    - One issue with the approach is that the synchronous setter method now
      calls an async dispatch operation. I tested all the flows I could
      think of, and they all worked fine
    - Fixed an issue where the selected profile was no longer highlighted
      in the profile list after it was renamed
    anttimaki committed Mar 4, 2024
    Configuration menu
    Copy the full SHA
    4f64064 View commit details
    Browse the repository at this point in the history

Commits on Mar 5, 2024

  1. Add FileUtils.humanReadableSize

    Allows pretty printing file sizes for human digestion.
    anttimaki committed Mar 5, 2024
    Configuration menu
    Copy the full SHA
    eb40e58 View commit details
    Browse the repository at this point in the history
  2. Limit the size of the profiles exported as a code to 20MB

    If the zipped payload of the profile exceeds the limit, the process is
    cancelled before the B64 encoding and upload steps, and an error modal
    is shown to the user.
    
    The size is limited firstly because there shouldn't be need for larger
    profiles, and exceeding the limit is a symptom of something being
    wrong, e.g. unintended contents in the BepInEx config folder.
    
    Second reason is that too large profiles will crash on the B64 encoding
    step on TSMM, which uses different file operation implementation than
    r2mm.
    anttimaki committed Mar 5, 2024
    Configuration menu
    Copy the full SHA
    519f40c View commit details
    Browse the repository at this point in the history
  3. Handle errors thrown by profile export zip creation

    One identified source for errors when exporting a profile as a code is
    when the zip file is already open in another app. This doesn't affect
    export as a file operations, since the zip used there is timestamped.
    I assume the zip in code export is not to avoid bloating the data
    directory with multiple archives of the same profile over time.
    anttimaki committed Mar 5, 2024
    Configuration menu
    Copy the full SHA
    b155286 View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1242 from ebkr/revert-profile-reset-move

    Move resetting mod list back to Profiles.vue
    MythicManiac authored Mar 5, 2024
    Configuration menu
    Copy the full SHA
    8ad8c8a View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1245 from ebkr/code-export-size-limit

    Limit the size of the profiles exported as a code to 20MB
    MythicManiac authored Mar 5, 2024
    Configuration menu
    Copy the full SHA
    24f760e View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    6c98fca View commit details
    Browse the repository at this point in the history
  7. Merge pull request #1246 from ebkr/code-export-file-busy

    Handle errors thrown by profile export zip creation
    MythicManiac authored Mar 5, 2024
    Configuration menu
    Copy the full SHA
    ad01b03 View commit details
    Browse the repository at this point in the history
  8. Merge pull request #1243 from ebkr/vuex-active-profile

    Duplicate active profile in Vuex
    MythicManiac authored Mar 5, 2024
    Configuration menu
    Copy the full SHA
    fcb21a7 View commit details
    Browse the repository at this point in the history

Commits on Mar 6, 2024

  1. Configuration menu
    Copy the full SHA
    3dd43f4 View commit details
    Browse the repository at this point in the history
  2. UninstallModModal: assimilate dependants list

    There's no need to pass dependants list as a prop since it can be as
    easily be determined internally.
    
    Dependency list prop was dropped altogether since it's not used.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    fa16c8c View commit details
    Browse the repository at this point in the history
  3. UninstallModModal: manage open/clise state in Vuex

    While the mod itself would be enough to determine the state without a
    separate boolean value, I decided to use both to stay consistent with
    the other modals handled by ModalsModule store.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    5deff74 View commit details
    Browse the repository at this point in the history
  4. ProfileModule: add support for uninstalling mods via Vuex store

    The implementation imitates what's currently being done by
    LocalModList.performUninstallMod().
    
    This helps remove business logic and direct references to providers
    from components, hopefully supporting reuse and easier refactoring.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    8c0ca93 View commit details
    Browse the repository at this point in the history
  5. UninstallModModal: assimilate rest of the props

    The modal now handles uninstalling of mods entirely internally.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    76cadf4 View commit details
    Browse the repository at this point in the history
  6. LocalModCard: don't delegate mod uninstallation to LocalModList

    LocalModCard now uninstalls mods without dependants internally, and
    delegates mods with dependants to UninstallModModal, effectively
    cutting out the middleman LocalModList.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    133b284 View commit details
    Browse the repository at this point in the history
  7. AssociatedModsModal: assimilate dependency and dependants lists

    There's no need to pass these lists as props since they can be as
    easily determined internally.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    de03cc9 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    dc39a7f View commit details
    Browse the repository at this point in the history
  9. ProfileModule: add support for enabling mods via Vuex store

    The implementation imitates what's currently being done by
    LocalModList.performEnable(). Execption is that the new implementation
    supports similar "progress indicator" as the disabling method does,
    even though it's not currently used since mods are never enabled via
    modal where the progress could be shown, even if multiple mods are
    enabled at once.
    
    This helps remove business logic and direct references to providers
    from components, hopefully supporting reuse and easier refactoring.
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    938d63e View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    e3de2fd View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    d99339e View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    d8f6b5c View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    889fc8c View commit details
    Browse the repository at this point in the history
  14. Fix unit test for ExpandableCard

    - I'm not sure if this is the proper way to test components that rely
      on state stored in Vuex, but it's the first of many ways I tried that
      worked
    - Tests need to await $nextTick() so the async created() method is done
      before the test cases continue
    anttimaki committed Mar 6, 2024
    Configuration menu
    Copy the full SHA
    d0087c7 View commit details
    Browse the repository at this point in the history
  15. Configuration menu
    Copy the full SHA
    c724c02 View commit details
    Browse the repository at this point in the history
  16. Configuration menu
    Copy the full SHA
    7fe3d42 View commit details
    Browse the repository at this point in the history

Commits on Mar 7, 2024

  1. Delegate enabling all mods to Vuex from settings view

    This cleans up the Manager component and speeds up feature since the
    old implementation updated the mod list after each mod was enabled,
    whereas the new one does it only once at the end.
    anttimaki committed Mar 7, 2024
    Configuration menu
    Copy the full SHA
    420e41c View commit details
    Browse the repository at this point in the history

Commits on Mar 10, 2024

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

Commits on Mar 14, 2024

  1. Configuration menu
    Copy the full SHA
    71b0903 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1259 from cspotcode/patch-1

    Add MS Store version of Bomb Rush Cyberfunk
    MythicManiac authored Mar 14, 2024
    Configuration menu
    Copy the full SHA
    c2f2878 View commit details
    Browse the repository at this point in the history

Commits on Mar 28, 2024

  1. Merge pull request #1247 from ebkr/uninstall-mod-modal

    Make UninstallModModal more self-sustained
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    3d6e614 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1248 from ebkr/associated-mods-modal

    Make AssociatedModsModal more self-sustained
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    a8d2695 View commit details
    Browse the repository at this point in the history
  3. Merge pull request #1249 from ebkr/local-mod-card

    Make LocalModCard more self-sustained
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    ebd872a View commit details
    Browse the repository at this point in the history
  4. Merge pull request #1250 from ebkr/local-mod-list

    LocalModList cleanup
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    8a952b0 View commit details
    Browse the repository at this point in the history
  5. Merge pull request #1251 from ebkr/enable-all-from-settings

    Delegate enabling all mods to Vuex from settings view
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    478dcd4 View commit details
    Browse the repository at this point in the history
  6. Use Vuex-stored game, profile and settings in App.vue and UtilityMixin

    Change the Vuex setter for active game to also update the value into
    GameManager to ensure better sync. The setter now returns settings for
    the newly activated game for convenience.
    anttimaki committed Mar 28, 2024
    Configuration menu
    Copy the full SHA
    a6abd8b View commit details
    Browse the repository at this point in the history
  7. Refactor how online mod list is updated in background

    Originally the code first updated the list of available mods from
    Thunderstore API and then loaded the local mod list from disk. In
    commit dee959f yours truly (probably by mistake) changed this so that
    both operations are executed independently on 5 minute intervals. this
    probably leads to situations where the local mod list is loaded before
    the online mod list is updated, which makes no sense, so revert to do
    these operations in sequence.
    
    (IDK why we load the mod list from the disk here in the first place but
    that's outside the scope of this commit.)
    
    Since refreshThunderstoreModList now also loads the mod list from disk,
    this doesn't need to be separately handled in Manager/Settings view.
    
    Loading the profile's mod list from disk was moved to Vuex action.
    refreshThunderstoreModList could also be refactored into Vuex but since
    it's used elsewhere too, it's not done within this commit.
    anttimaki committed Mar 28, 2024
    Configuration menu
    Copy the full SHA
    d420df9 View commit details
    Browse the repository at this point in the history
  8. Merge pull request #1252 from ebkr/vuex-in-App

    Utilise Vuex-based methods in App.vue and related UtilityMixin
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    2505ebf View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    ea1b4c5 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    1c66a36 View commit details
    Browse the repository at this point in the history
  11. Merge pull request #1253 from ebkr/vuex-in-profiles

    Use Vuex to access active game and settings in Profiles.vue
    anttimaki authored Mar 28, 2024
    Configuration menu
    Copy the full SHA
    6e8a583 View commit details
    Browse the repository at this point in the history

Commits on Apr 2, 2024

  1. Add Content Warning

    Oksamies committed Apr 2, 2024
    Configuration menu
    Copy the full SHA
    9a1b8e3 View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1282 from thunderstore-io/content-warning

    Add Content Warning
    anttimaki authored Apr 2, 2024
    Configuration menu
    Copy the full SHA
    0eb2380 View commit details
    Browse the repository at this point in the history

Commits on Apr 6, 2024

  1. Updated versions and CHANGELOG

    ebkr committed Apr 6, 2024
    Configuration menu
    Copy the full SHA
    968a89e View commit details
    Browse the repository at this point in the history
  2. Merge pull request #1285 from ebkr/release-3.1.48

    Updated versions and CHANGELOG
    ebkr authored Apr 6, 2024
    Configuration menu
    Copy the full SHA
    0652d70 View commit details
    Browse the repository at this point in the history