Skip to content

Commit

Permalink
Merge pull request #1549 from ebkr/develop
Browse files Browse the repository at this point in the history
Develop - 3.1.53
  • Loading branch information
ebkr authored Nov 13, 2024
2 parents 3238331 + 5e73a77 commit 2462817
Show file tree
Hide file tree
Showing 46 changed files with 638 additions and 159 deletions.
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
### 3.1.53
#### Games added
- WEBFISHING

#### Other changes
- BONELAB support should now function correctly
- Assemblies will no longer be regenerated on every launch
- "Preloader fix" has been replaced with "Reset \<game\> installation"
- This will delete the entire game directory and prompt Steam to re-validate files
- The preloader fix was originally a solution for old Risk of Rain 2 modded installations using SeikoML failing to
launch

### 3.1.52
#### Small quality of life changes
- Upgraded from Electron v11 to v24
Expand All @@ -6,6 +18,10 @@
- Fixed sorting by download count
- Reduced time taken to install when a mod has a large number of dependencies

#### Games added
- Old Market Simulator
- Subterranauts

### 3.1.51
#### Memory and performance improvements
The TS team have been working hard to improve the following:
Expand Down
1 change: 0 additions & 1 deletion docs/Adding a game.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
- An array of different executable names (for all platforms). For `StorePlatform` types such as `OTHER` and `STEAM_DIRECT` then the first found executable is used and called when the game is launched.
- **DataFolderName**
- Required for Unreal games relying on unreal-shimloader.
- Relevant for Mono (C#) Unity games, which use it for the `Preloader Fix` in the manager settings.
- **TsUrl**
- The Thunderstore API endpoint for the listing.
- **ExclusionsUrl**
Expand Down
4 changes: 3 additions & 1 deletion modExclusions.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
"L4rs-QuickFSR",
"MPModTeam-Boneworks_MP",
"MADH95Mods-JSONRenameUtility",
"GamefaceGamers-Mod_Sync"
"GamefaceGamers-Mod_Sync",
"Pyoid-Hook_Line_and_Sinker",
"GardenGals-Hatchery"
]
}
4 changes: 4 additions & 0 deletions modExclusions.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ codengine-SOTFEdit
DevLeon-SonsOfTheForestMap

Kesomannen-GaleModManager

Pyoid-Hook_Line_and_Sinker

GardenGals-Hatchery
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "r2modman",
"version": "3.1.52",
"version": "3.1.53",
"description": "A simple and easy to use mod manager for many games using Thunderstore.",
"productName": "r2modman",
"author": "ebkr",
Expand Down Expand Up @@ -109,6 +109,7 @@
"sinon": "^11.1.1",
"ts-node": "^8.10.2",
"typescript": "^4.5.5",
"vue": "2.7.16",
"vue-jest": "^3.0.0",
"wallaby-vue-compiler": "^1.0.3"
},
Expand Down
2 changes: 2 additions & 0 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,8 @@ export default class App extends mixins(UtilityMixin) {
this.$watch('$q.dark.isActive', () => {
document.documentElement.classList.toggle('html--dark', this.$q.dark.isActive);
});
this.$store.commit('updateModLoaderPackageNames');
}
beforeCreate() {
Expand Down
2 changes: 1 addition & 1 deletion src/_managerinf/ManagerInformation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import VersionNumber from '../model/VersionNumber';

export default class ManagerInformation {
public static VERSION: VersionNumber = new VersionNumber('3.1.52');
public static VERSION: VersionNumber = new VersionNumber('3.1.53');
public static IS_PORTABLE: boolean = false;
public static APP_NAME: string = "r2modman";
}
Binary file added src/assets/images/game_selection/SULFUR.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/game_selection/WEBFISHING.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 9 additions & 2 deletions src/components/profiles-modals/CreateProfileModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ProfilesMixin from "../../components/mixins/ProfilesMixin.vue";
})
export default class CreateProfileModal extends ProfilesMixin {
private creatingInProgress: boolean = false;
private newProfileName = '';
get isOpen(): boolean {
Expand All @@ -17,17 +18,23 @@ export default class CreateProfileModal extends ProfilesMixin {
closeModal() {
this.newProfileName = '';
this.creatingInProgress = false;
this.$store.commit('closeCreateProfileModal');
}
// User confirmed creation of a new profile with a name that didn't exist before.
async createProfile() {
if (this.creatingInProgress) {
return;
}
const safeName = this.makeProfileNameSafe(this.newProfileName);
if (safeName !== '') {
try {
this.creatingInProgress = true;
await this.$store.dispatch('profiles/addProfile', safeName);
this.closeModal();
} catch (e) {
this.creatingInProgress = false;
const err = R2Error.fromThrownValue(e, 'Error whilst creating a profile');
this.$store.commit('error/handleError', err);
}
Expand All @@ -49,7 +56,7 @@ export default class CreateProfileModal extends ProfilesMixin {
<input
class="input"
v-model="newProfileName"
@keyup.enter="!doesProfileExist(newProfileName) && createProfile(newProfileName)"
@keyup.enter="!doesProfileExist(newProfileName) && createProfile()"
id="create-profile-modal-new-profile-name"
ref="nameInput"
/>
Expand All @@ -67,7 +74,7 @@ export default class CreateProfileModal extends ProfilesMixin {

<template v-slot:footer>
<button id="modal-create-profile-invalid" class="button is-danger" v-if="doesProfileExist(newProfileName)" disabled>Create</button>
<button id="modal-create-profile" class="button is-info" @click="createProfile(newProfileName)" v-else>Create</button>
<button id="modal-create-profile" class="button is-info" @click="createProfile()" :disabled="creatingInProgress" v-else>Create</button>
</template>

</ModalCard>
Expand Down
8 changes: 8 additions & 0 deletions src/components/profiles-modals/DeleteProfileModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,23 @@ import ProfilesMixin from "../../components/mixins/ProfilesMixin.vue";
components: {ModalCard}
})
export default class DeleteProfileModal extends ProfilesMixin {
private deletingInProgress: boolean = false;
get isOpen(): boolean {
return this.$store.state.modals.isDeleteProfileModalOpen;
}
closeDeleteProfileModal() {
this.deletingInProgress = false;
this.$store.commit('closeDeleteProfileModal');
}
async removeProfile() {
if (this.deletingInProgress) {
return;
}
try {
this.deletingInProgress = true;
await this.$store.dispatch('profiles/removeSelectedProfile');
} catch (e) {
const err = R2Error.fromThrownValue(e, 'Error whilst deleting profile');
Expand All @@ -41,6 +48,7 @@ export default class DeleteProfileModal extends ProfilesMixin {
</template>
<template v-slot:footer>
<button
:disabled="deletingInProgress"
class="button is-danger"
@click="removeProfile()"
>Delete profile</button>
Expand Down
29 changes: 19 additions & 10 deletions src/components/profiles-modals/ImportProfileModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -117,19 +117,28 @@ export default class ImportProfileModal extends mixins(ProfilesMixin) {
return;
}
let read: string | null = await ProfileUtils.readProfileFile(files[0]);
let read: string = '';
try {
read = await ProfileUtils.readProfileFile(files[0]);
} catch (e: unknown) {
const err = R2Error.fromThrownValue(e);
this.$store.commit('error/handleError', err);
this.closeModal();
return;
}
if (read !== null) {
this.profileImportFilePath = files[0];
this.profileImportFilePath = files[0];
try {
this.profileImportContent = await ProfileUtils.parseYamlToExportFormat(read);
if (this.profileToOnlineMods.length === 0) {
this.activeStep = 'NO_PACKAGES_IN_IMPORT';
return;
}
this.activeStep = 'REVIEW_IMPORT';
} catch (e: unknown) {
const err = R2Error.fromThrownValue(e);
this.$store.commit('error/handleError', err)
this.closeModal();
return;
}
this.activeStep = this.profileToOnlineMods.length ? 'REVIEW_IMPORT' : 'NO_PACKAGES_IN_IMPORT';
return;
}
// Fired when user has accepted the mods to be imported in the review phase.
Expand Down
10 changes: 8 additions & 2 deletions src/components/profiles-modals/RenameProfileModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import ProfilesMixin from "../../components/mixins/ProfilesMixin.vue";
export default class RenameProfileModal extends ProfilesMixin {
@Ref() readonly nameInput: HTMLInputElement | undefined;
private newProfileName: string = '';
private renamingInProgress: boolean = false;
@Watch('$store.state.profile.activeProfile')
activeProfileChanged(newProfile: Profile, oldProfile: Profile|null) {
Expand Down Expand Up @@ -41,12 +42,17 @@ export default class RenameProfileModal extends ProfilesMixin {
}
closeModal() {
this.renamingInProgress = false;
this.newProfileName = this.$store.state.profile.activeProfile.getProfileName();
this.$store.commit('closeRenameProfileModal');
}
async performRename() {
if (this.renamingInProgress) {
return;
}
try {
this.renamingInProgress = true;
await this.$store.dispatch('profiles/renameProfile', {newName: this.newProfileName});
} catch (e) {
const err = R2Error.fromThrownValue(e, 'Error whilst renaming profile');
Expand All @@ -69,7 +75,7 @@ export default class RenameProfileModal extends ProfilesMixin {
<input
class="input"
v-model="newProfileName"
@keyup.enter="!doesProfileExist(newProfileName) && performRename(newProfileName)"
@keyup.enter="!doesProfileExist(newProfileName) && performRename()"
ref="nameInput"
/>

Expand All @@ -85,7 +91,7 @@ export default class RenameProfileModal extends ProfilesMixin {
</template>
<template v-slot:footer>
<button class="button is-danger" v-if="doesProfileExist(newProfileName)" disabled>Rename</button>
<button class="button is-info" @click="performRename(newProfileName)" v-else>Rename</button>
<button class="button is-info" @click="performRename()" :disabled="renamingInProgress" v-else>Rename</button>
</template>

</ModalCard>
Expand Down
18 changes: 9 additions & 9 deletions src/components/settings-components/SettingsView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ import CdnProvider from '../../providers/generic/connection/CdnProvider';
),
new SettingsRow(
'Locations',
'Change data folder folder',
'Change data folder',
'Change the folder where mods are stored for all games and profiles. The folder will not be deleted, and existing profiles will not carry across.',
async () => {
return PathResolver.ROOT;
Expand Down Expand Up @@ -170,14 +170,6 @@ import CdnProvider from '../../providers/generic/connection/CdnProvider';
'fa-exchange-alt',
() => this.emitInvoke('ToggleDownloadCache')
),
new SettingsRow(
'Debugging',
'Run preloader fix',
'Run this to fix most errors mentioning the preloader, or about duplicate assemblies.',
async () => `This will delete the ${this.activeGame.dataFolderName}/Managed folder, and verify the files through Steam`,
'fa-wrench',
() => this.emitInvoke('RunPreloaderFix')
),
new SettingsRow(
'Debugging',
'Set launch parameters',
Expand Down Expand Up @@ -388,6 +380,14 @@ import CdnProvider from '../../providers/generic/connection/CdnProvider';
},
'fa-folder-open',
() => this.emitInvoke('ChangeSteamDirectory')
),
new SettingsRow(
'Debugging',
`Reset ${this.activeGame.displayName} installation`,
'Fix problems caused by corrupted files or files left over from manual modding attempts.',
async () => `This will delete all contents of the ${this.activeGame.steamFolderName} folder, and verify the files through Steam`,
'fa-wrench',
() => this.emitInvoke('ValidateSteamInstallation')
)
)
}
Expand Down
24 changes: 24 additions & 0 deletions src/components/v2/Hero.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<template>
<section :class="['hero', heroType]" ref="section">
<div class="hero-body non-selectable">
<div class="container">
<h1 class="title" ref="title">
{{title}}
</h1>
<h2 class="subtitle" ref="subtitle">
{{subtitle}}
</h2>
</div>
</div>
</section>
</template>

<script lang="ts" setup>
interface HeroProps {
title: string;
subtitle: string;
heroType?: string;
}
const heroProps = defineProps<HeroProps>();
</script>
17 changes: 13 additions & 4 deletions src/components/views/DownloadModModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ let assignId = 0;
const existing = DownloadModModal.allVersions[assignIndex]
existing[1].failed = true;
DownloadModModal.allVersions[assignIndex] = [currentAssignId, existing[1]];
DownloadModModal.addCdnSolutionToError(err);
DownloadModModal.addSolutionsToError(err);
return reject(err);
}
} else if (status === StatusEnum.PENDING) {
Expand Down Expand Up @@ -306,7 +306,7 @@ let assignId = 0;
const existing = DownloadModModal.allVersions[assignIndex]
existing[1].failed = true;
this.$set(DownloadModModal.allVersions, assignIndex, [currentAssignId, existing[1]]);
DownloadModModal.addCdnSolutionToError(err);
DownloadModModal.addSolutionsToError(err);
this.$store.commit('error/handleError', err);
return;
}
Expand Down Expand Up @@ -348,7 +348,7 @@ let assignId = 0;
const existing = DownloadModModal.allVersions[assignIndex]
existing[1].failed = true;
this.$set(DownloadModModal.allVersions, assignIndex, [currentAssignId, existing[1]]);
DownloadModModal.addCdnSolutionToError(err);
DownloadModModal.addSolutionsToError(err);
this.$store.commit('error/handleError', err);
return;
}
Expand Down Expand Up @@ -432,13 +432,22 @@ let assignId = 0;
});
}
static addCdnSolutionToError(err: R2Error): void {
static addSolutionsToError(err: R2Error): void {
// Sanity check typing.
if (!(err instanceof R2Error)) {
return;
}
if (
err.name.includes("Failed to download mod") ||
err.name.includes("System.Net.WebException")
) {
err.solution = "Try toggling the preferred Thunderstore CDN in the settings";
}
if (err.message.includes("System.IO.PathTooLongException")) {
err.solution = 'Using "Change data folder" option in the settings to select a shorter path might solve the issue';
}
}
}
Expand Down
Loading

0 comments on commit 2462817

Please sign in to comment.