Skip to content

Commit 77587df

Browse files
authored
Merge branch 'develop' into drgs
2 parents b2e169c + 6f67d4b commit 77587df

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1552
-816
lines changed

docs/Adding a game.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,6 @@
5656
- EG: RoR2, NASB, TABS, etc.
5757
- Pattern is lowercase although likely isn't necessary.
5858

59-
### Update SettingsDexieStore
60-
You'll find a line similar to:
61-
```ts
62-
this.version(33).stores(store);
63-
```
64-
Bump this by one each time a game is added to GameManager.
65-
6659
### Creating new installation rules
6760
- See all files under `/src/r2mm/installing/default_installation_rules/`
6861
- `game_rules` stores all game specific rules.

src/App.vue

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import LinkProvider from './providers/components/LinkProvider';
3030
import LinkImpl from './r2mm/component_override/LinkImpl';
3131
import FsProvider from './providers/generic/file/FsProvider';
3232
import NodeFs from './providers/generic/file/NodeFs';
33+
import { DataFolderProvider } from './providers/ror2/system/DataFolderProvider';
34+
import { DataFolderProviderImpl } from './r2mm/system/DataFolderProviderImpl';
3335
import InteractionProvider from './providers/ror2/system/InteractionProvider';
3436
import InteractionProviderImpl from './r2mm/system/InteractionProviderImpl';
3537
import ZipProvider from './providers/generic/zip/ZipProvider';
@@ -117,6 +119,7 @@ export default class App extends mixins(UtilityMixin) {
117119
LoggerProvider.provide(() => new Logger());
118120
LinkProvider.provide(() => new LinkImpl());
119121
InteractionProvider.provide(() => new InteractionProviderImpl());
122+
DataFolderProvider.provide(() => new DataFolderProviderImpl());
120123
121124
PlatformInterceptorProvider.provide(() => new PlatformInterceptorImpl());
122125
62.3 KB
Loading
56.1 KB
Loading
79.3 KB
Loading
56.5 KB
Loading
54.9 KB
Loading
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<script lang='ts'>
2+
import Vue from 'vue';
3+
import Component from 'vue-class-component';
4+
5+
import sanitize from "sanitize-filename";
6+
7+
@Component
8+
export default class ProfilesMixin extends Vue {
9+
10+
get profileList(): string[] {
11+
return this.$store.state.profiles.profileList;
12+
}
13+
14+
get activeProfileName(): string {
15+
return this.$store.getters['profile/activeProfileName'];
16+
}
17+
18+
set activeProfileName(value: string) {
19+
this.$store.dispatch('profiles/setSelectedProfile', {profileName: value, prewarmCache: false});
20+
}
21+
22+
doesProfileExist(nameToCheck: string): boolean {
23+
if ((nameToCheck.match(new RegExp('^([a-zA-Z0-9])(\\s|[a-zA-Z0-9]|_|-|[.])*$'))) === null) {
24+
return true;
25+
}
26+
const safe: string = this.makeProfileNameSafe(nameToCheck);
27+
return (this.profileList.some(function (profile: string) {
28+
return profile.toLowerCase() === safe.toLowerCase()
29+
}));
30+
}
31+
32+
makeProfileNameSafe(nameToSanitize: string): string {
33+
return sanitize(nameToSanitize);
34+
}
35+
36+
}
37+
</script>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<script lang="ts">
2+
import { Component } from 'vue-property-decorator';
3+
import { ModalCard } from "../all";
4+
import R2Error from "../../model/errors/R2Error";
5+
import ProfilesMixin from "../../components/mixins/ProfilesMixin.vue";
6+
7+
@Component({
8+
components: {ModalCard}
9+
})
10+
export default class CreateProfileModal extends ProfilesMixin {
11+
12+
private newProfileName = '';
13+
14+
get isOpen(): boolean {
15+
return this.$store.state.modals.isCreateProfileModalOpen;
16+
}
17+
18+
closeModal() {
19+
this.newProfileName = '';
20+
this.$store.commit('closeCreateProfileModal');
21+
}
22+
23+
// User confirmed creation of a new profile with a name that didn't exist before.
24+
async createProfile() {
25+
const safeName = this.makeProfileNameSafe(this.newProfileName);
26+
if (safeName !== '') {
27+
try {
28+
await this.$store.dispatch('profiles/addProfile', safeName);
29+
this.closeModal();
30+
} catch (e) {
31+
const err = R2Error.fromThrownValue(e, 'Error whilst creating a profile');
32+
this.$store.commit('error/handleError', err);
33+
}
34+
}
35+
}
36+
}
37+
38+
</script>
39+
<template>
40+
<ModalCard v-if="isOpen" :is-active="isOpen" @close-modal="closeModal">
41+
42+
<template v-slot:header>
43+
<p class="modal-card-title">Create a profile</p>
44+
</template>
45+
46+
<template v-slot:body>
47+
<p>This profile will store its own mods independently from other profiles.</p>
48+
<br/>
49+
<input
50+
class="input"
51+
v-model="newProfileName"
52+
@keyup.enter="!doesProfileExist(newProfileName) && createProfile(newProfileName)"
53+
id="create-profile-modal-new-profile-name"
54+
ref="nameInput"
55+
/>
56+
<br/><br/>
57+
<span class="tag is-dark" v-if="newProfileName === '' || makeProfileNameSafe(newProfileName) === ''">
58+
Profile name required
59+
</span>
60+
<span class="tag is-success" v-else-if="!doesProfileExist(newProfileName)">
61+
"{{makeProfileNameSafe(newProfileName)}}" is available
62+
</span>
63+
<span class="tag is-danger" v-else-if="doesProfileExist(newProfileName)">
64+
"{{makeProfileNameSafe(newProfileName)}}" is either already in use, or contains invalid characters
65+
</span>
66+
</template>
67+
68+
<template v-slot:footer>
69+
<button id="modal-create-profile-invalid" class="button is-danger" v-if="doesProfileExist(newProfileName)" disabled>Create</button>
70+
<button id="modal-create-profile" class="button is-info" @click="createProfile(newProfileName)" v-else>Create</button>
71+
</template>
72+
73+
</ModalCard>
74+
</template>

src/components/profiles-modals/DeleteProfileModal.vue

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
<script lang="ts">
2-
import { Vue, Component } from 'vue-property-decorator';
2+
import { Component } from 'vue-property-decorator';
33
import { ModalCard } from "../all";
44
import R2Error from "../../model/errors/R2Error";
5+
import ProfilesMixin from "../../components/mixins/ProfilesMixin.vue";
56
67
@Component({
78
components: {ModalCard}
89
})
9-
export default class DeleteProfileModal extends Vue {
10+
export default class DeleteProfileModal extends ProfilesMixin {
1011
get isOpen(): boolean {
1112
return this.$store.state.modals.isDeleteProfileModalOpen;
1213
}
1314
14-
get profileList(): string[] {
15-
return this.$store.state.profiles.profileList;
16-
}
17-
1815
closeDeleteProfileModal() {
1916
this.$store.commit('closeDeleteProfileModal');
2017
}

0 commit comments

Comments
 (0)