Skip to content

Commit

Permalink
feat: enable client module to manage mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
ci010 committed Jul 26, 2019
1 parent d287939 commit 0a4ac03
Show file tree
Hide file tree
Showing 10 changed files with 144 additions and 28 deletions.
46 changes: 46 additions & 0 deletions src/main/store/modules/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import base from 'universal/store/modules/client';
import fs from 'fs';
import { join } from 'path';

/**
* @type {import('universal/store/modules/client').ClientModule}
*/
const mod = {
...base,
actions: {
async load(context) {
const protocolFile = context.rootGetters.path('protocol.json');
if (fs.existsSync(protocolFile)) {
const buf = await fs.promises.readFile(protocolFile);
const object = JSON.parse(buf.toString());
if (object.eTag) {
// request server for new one
}
/**
* @type any
*/
const mcversionMapping = {};
for (const [mc, prot] of Object.values(object.protocol)) {
if (!mcversionMapping[mc]) mcversionMapping[mc] = [];
mcversionMapping[mc].push(prot);
}
context.commit('protocolMapping', {
protocol: object.protocol,
mcversion: mcversionMapping,
});
} else {
const rev = await fs.promises.readFile(join(__static, 'protocol.json'))
.then(b => b.toString()).then(JSON.parse);
const forward = await fs.promises.readFile(join(__static, 'mc-protocol.json'))
.then(b => b.toString()).then(JSON.parse);

context.commit('protocolMapping', {
protocol: forward,
mcversion: rev,
});
}
},
},
};

export default mod;
8 changes: 0 additions & 8 deletions src/main/store/modules/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import { autoUpdater, UpdaterSignal } from 'electron-updater';
import Task from 'treelike-task';
import base from 'universal/store/modules/config';
import isInGFW from 'in-gfw';
import { overrideNet, unoverrideNet } from 'main/utils/dns-override';
import dnsOverrideMapping from 'static/dns-override.json';

/**
* @type {import('universal/store/modules/config').ConfigModule}
Expand Down Expand Up @@ -71,14 +69,9 @@ const mod = {

async downloadUpdate(context) {
const task = Task.create('downloadUpdate', async (ctx) => {
const inGFW = isInGFW();

if (!context.state.autoDownload) {
context.commit('downloadingUpdate', true);
await new Promise((resolve, reject) => {
if (inGFW) {
overrideNet(dnsOverrideMapping);
}
autoUpdater.downloadUpdate().catch(reject);
const signal = new UpdaterSignal(autoUpdater);
signal.updateDownloaded((info) => {
Expand All @@ -98,7 +91,6 @@ const mod = {
}).catch(() => {
context.commit('readyToUpdate', false);
}).finally(() => {
unoverrideNet();
context.commit('downloadingUpdate', false);
});
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/main/store/modules/diagnose.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { ArtifactVersion, VersionRange } from 'maven-artifact-version';
import { Forge, ForgeWebPage, Version } from 'ts-minecraft';
import packFormatMapping from 'universal/utils/packFormatMapping.json';
import base from 'universal/store/modules/diagnose';
/**
*
Expand Down Expand Up @@ -233,6 +232,7 @@ const mod = {
}
}

const packFormatMapping = context.rootState.client.packFormatMapping.mcversion;
for (const pack of resourcepacks) {
if (pack.metadata.format in packFormatMapping) {
const acceptVersion = packFormatMapping[pack.metadata.format];
Expand Down
7 changes: 3 additions & 4 deletions src/main/store/modules/profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@ import { compressZipTo, includeAllToZip } from 'main/utils/zip';
import { tmpdir } from 'os';
import paths, { basename, join } from 'path';
import { latestMcRelease } from 'static/dummy.json';
import protocolToVersion from 'static/protocol.json';
import { GameSetting, Server, TextComponent, Version, World } from 'ts-minecraft';
import base, { createTemplate } from 'universal/store/modules/profile';
import { fitin, willBaselineChange } from 'universal/utils/object';
import uuid from 'uuid';
import { createExtractStream } from 'yauzlw';
import { ZipFile } from 'yazl';
import { PINGING_STATUS, createFailureServerStatus } from 'universal/utils/server-status';

/**
* @type {import('universal/store/modules/profile').ProfileModule}
*/
Expand Down Expand Up @@ -425,7 +424,7 @@ const mod = {
await context.dispatch('diagnoseProfile');
}
},

async pingServer(context, payload) {
const { host, port = 25565, protocol } = payload;
return Server.fetchStatusFrame({ host, port, name: '' }, { protocol });
Expand Down Expand Up @@ -477,7 +476,7 @@ const mod = {
} else if (typeof info.status.description === 'object') {
options.description = TextComponent.from(info.status.description).formatted;
}
options.mcversion = protocolToVersion[info.status.version.protocol][0];
options.mcversion = context.rootState.client.protocolMapping.mcversion[info.status.version.protocol][0];
if (info.status.modinfo && info.status.modinfo.type === 'FML') {
options.forge = {
mods: info.status.modinfo.modList.map(m => `${m.modid}:${m.version}`),
Expand Down
10 changes: 5 additions & 5 deletions src/renderer/windows/main/components/AddServerWizard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,6 @@
</template>

<script>
import protocolToVersion from 'static/protocol.json';
import mcToProtocol from 'static/mc-protocol.json';
import unknownServer from 'renderer/assets/unknown_server.png';
export default {
Expand Down Expand Up @@ -193,7 +190,7 @@ export default {
return this.status.favicon || unknownServer;
},
acceptingMcVersion() {
return protocolToVersion[this.status.version.protocol] || [];
return this.$repo.state.client.protocolMapping.mcversion[this.status.version.protocol] || [];
},
ready() {
return this.valid && this.javaValid;
Expand Down Expand Up @@ -260,7 +257,10 @@ export default {
ping: 0,
};
this.pinging = true;
this.$repo.dispatch('pingServer', { host: this.host, port: 25565, protocol: Number.parseInt(mcToProtocol[this.mcversion], 10) }).then((frame) => {
this.$repo.dispatch('pingServer', {
host: this.host,
port: 25565,
protocol: Number.parseInt(this.$repo.state.client.protocolMapping.protocol[this.mcversion], 10) }).then((frame) => {
this.status = frame;
}).finally(() => {
this.pinging = false;
Expand Down
3 changes: 1 addition & 2 deletions src/renderer/windows/main/components/ResourcePackCard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

<script>
import { isCompatible } from 'universal/utils/versions';
import packFormatMapping from 'universal/utils/packFormatMapping.json';
export default {
props: {
Expand All @@ -48,7 +47,7 @@ export default {
return this.$repo.getters.selectedProfile.mcversion;
},
acceptedRange() {
return packFormatMapping[this.data.format];
return this.$repo.state.client.packFormatMapping.mcversion[this.data.format];
},
compatible() {
return isCompatible(this.acceptedRange, this.mcversion);
Expand Down
51 changes: 51 additions & 0 deletions src/universal/store/modules/client.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@


import { Module, Context } from "../store";

export declare namespace ClientModule {
type ProtocolToVersion = {
[protocol: string]: string[];
};
type PackFormatToVersioRange = {
[range: string]: string;
};

type Protocol = string;
type MinecraftVersion = string;

interface ResourcePackFormatMapping {
mcversion: {
[format: number]: string;
};
}
interface ClientProtocolMapping {
mcversion: {
[mcversion: string]: Protocol;
};
protocol: {
[protocol: Protocol]: MinecraftVersion[];
};
}

interface State {
protocolMapping: ClientProtocolMapping;
packFormatMapping: ResourcePackFormatMapping;
}

interface Getters {
isResourcePackCompatible(format: number, mcversion: string): boolean;
}

interface Mutations {
packFormatMapping(state: State, mapping: ResourcePackFormatMapping): void;
protocolMapping(state: State, mapping: ClientProtocolMapping): void;
}
type C = Context<State, Getters, Mutations, Actions>;
interface Actions {
}
}
export interface ClientModule extends Module<"client", ClientModule.State, ClientModule.Getters, ClientModule.Mutations, ClientModule.Actions> { }

declare const mod: ClientModule;

export default mod;
34 changes: 34 additions & 0 deletions src/universal/store/modules/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { isCompatible } from 'universal/utils/versions';
/**
* @type {import('./client').ClientModule}
*/
const mod = {
state: {
protocolMapping: {
protocol: {},
mcversion: {},
},
packFormatMapping: {
mcversion: Object.freeze({
1: '[1.6, 1.9)',
2: '[1.9, 1.11)',
3: '[1.11, 1.13)',
4: '[1.13,]',
}),
},
},
getters: {
isResourcePackCompatible: state => (format, mcversion) => isCompatible(mcversion,
state.packFormatMapping.mcversion[format]),
},
mutations: {
protocolMapping(state, p) {
state.protocolMapping = Object.freeze(p);
},
packFormatMapping(state, m) {
state.packFormatMapping = Object.freeze(m);
},
},
};

export default mod;
5 changes: 3 additions & 2 deletions src/universal/store/store.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { Library } from 'ts-minecraft/dest/libs/version';
import { IOModule, Actions as IOActions } from './modules/io';
import modules from './modules/base';
import { LauncherModule, State as LaunchState, Mutations as LaunchMutations } from './modules/launch';
import { ClientModule } from './modules/client';

export type TaskHandle = string;

Expand Down Expand Up @@ -45,8 +46,8 @@ interface BaseMutations {
platform(state: State, platform: NodeJS.Platform): void
}

type AllModules = VersionModule | ProfileModule | JavaModule | ResourceModule | TaskModule | ConfigModule | UserModule | LauncherModule | IOModule | DiagnoseModule | CurseForgeModule;
type ModulesIntersection = VersionModule & ProfileModule & JavaModule & ResourceModule & TaskModule & ConfigModule & UserModule & LauncherModule & IOModule & DiagnoseModule & CurseForgeModule;
type AllModules = VersionModule | ProfileModule | JavaModule | ResourceModule | TaskModule | ConfigModule | UserModule | LauncherModule | IOModule | DiagnoseModule | CurseForgeModule | ClientModule;
type ModulesIntersection = VersionModule & ProfileModule & JavaModule & ResourceModule & TaskModule & ConfigModule & UserModule & LauncherModule & IOModule & DiagnoseModule & CurseForgeModule & ClientModule;
interface ModulesCollection extends ModulesIntersection { }

type Mutations =
Expand Down
6 changes: 0 additions & 6 deletions src/universal/utils/packFormatMapping.json

This file was deleted.

0 comments on commit 0a4ac03

Please sign in to comment.