From 2a49b7aaed9e1fc35f8cf9b93c06ee19b40a742c Mon Sep 17 00:00:00 2001 From: TanninOne Date: Wed, 14 Sep 2016 13:52:12 +0200 Subject: [PATCH] fixed problems in release-packageing --- app/package.json | 3 +++ package.json | 7 +++++-- src/main.ts | 4 ++-- src/renderer.tsx | 3 +++ src/types/Extension.ts | 4 ++-- src/util/ExtensionProvider.ts | 6 +++--- src/util/i18n.ts | 14 ++++++++++++-- src/views/MainWindow.tsx | 35 +++++++++++++++++++++++------------ 8 files changed, 53 insertions(+), 23 deletions(-) diff --git a/app/package.json b/app/package.json index fb606a3ee..735bcebdc 100644 --- a/app/package.json +++ b/app/package.json @@ -17,11 +17,14 @@ "bluebird": "^3.4.6", "electron-squirrel-startup": "^1.0.0", "fs-extra-promise": "^0.4.0", + "i18next": "^3.4.1", + "i18next-node-fs-backend": "^0.1.2", "react": "^15.3.0", "react-addons-update": "^15.3.1", "react-bootstrap": "^0.30.2", "react-dom": "^15.3.0", "react-fontawesome": "^1.1.0", + "react-i18next": "^1.8.0", "react-layout-pane": "^0.1.16", "react-redux": "^4.4.5", "redux": "^3.5.2", diff --git a/package.json b/package.json index c20c095b8..a28adecae 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "_theme_out": "copyup -f node_modules/font-awesome/css/font-awesome.min.css out/assets/css && copyup -f node_modules/font-awesome/fonts/fontawesome-webfont.woff2 out/assets/fonts", "_theme_app": "copyup -f node_modules/font-awesome/css/font-awesome.min.css app/assets/css && copyup -f node_modules/font-awesome/fonts/fontawesome-webfont.woff2 app/assets/fonts", "_assets_out": "copyup src/index.html out && copyfiles assets/fonts/* out && copyfiles locales/*/* out && copyfiles assets/images/* out && copyfiles -f extensions/*/dist/*.js out/extensions", - "_assets_app": "copyup src/index.html app && copyfiles assets/fonts/* app && copyfiles locales/*/* app && copyfiles assets/images/* app && copyfiles -f extensions/*/dist/*.js app/extensions", + "_assets_app": "copyup src/index.html app && copyfiles assets/fonts/* app && copyfiles assets/images/* app && copyfiles -f extensions/*/dist/*.js app/extensions", "_babel_out": "cross-env BABEL_ENV=development babel out -d out", "_babel_app": "cross-env BABEL_ENV=development babel app -d app --ignore node_modules", "_less_out": "lessc --clean-css --include-path=node_modules/bootswatch:node_modules/bootstrap-less src/less/index.less out/assets/css/theme.css", @@ -37,7 +37,10 @@ "win": { "target": "squirrel", "iconUrl": "https://staticdelivery.nexusmods.com/contents/Templates/110/favicon.ico" - } + }, + "extraResources": [ + "locales" + ] }, "parserOptions": { "ecmaFeatures": { diff --git a/src/main.ts b/src/main.ts index 191c45172..676ac3bbb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -96,7 +96,7 @@ persistStore(store, { // auto updater function setupAutoUpdate() { - autoUpdater.setFeedURL(`http://localhost/download/${app.getVersion()}`); + autoUpdater.setFeedURL(`http://localhost:6000/download/${app.getVersion()}`); try { autoUpdater.checkForUpdates(); } catch (e) { @@ -140,7 +140,7 @@ function createWindow() { mainWindow.loadURL(`file://${__dirname}/index.html`); // opening the devtools automatically can be very useful if the renderer has // trouble loading the page - // mainWindow.webContents.openDevTools(); + mainWindow.webContents.openDevTools(); mainWindow.once('ready-to-show', () => { log('info', 'ready to show'); diff --git a/src/renderer.tsx b/src/renderer.tsx index 4f44a91fd..62bb76074 100644 --- a/src/renderer.tsx +++ b/src/renderer.tsx @@ -52,7 +52,10 @@ let extReducers = getReducers(extensions); const store: Store = createStore(reducer(extReducers), enhancer); +const { remote } = require('electron'); log('info', 'renderer connected to store'); +console.log(`using ${remote.app.getPath('userData')} as the storage directory`); +console.log(`what about ${remote.app.getPath('appData')}`); const i18n = getI18n(store.getState().settings.interface.language); diff --git a/src/types/Extension.ts b/src/types/Extension.ts index 0fcfde530..819a7ffe8 100644 --- a/src/types/Extension.ts +++ b/src/types/Extension.ts @@ -6,14 +6,14 @@ interface IRegisterSettings { } interface IRegisterIcon { - (group: string, icon: string, title: string, action: any): void; + (group: string, icon: string, title: string, action: () => void): void; } export interface IExtensionContext { registerSettings: IRegisterSettings; registerIcon: IRegisterIcon; - registerReducer: any; + registerReducer: (path: string[], Function) => void; } diff --git a/src/util/ExtensionProvider.ts b/src/util/ExtensionProvider.ts index f6037b9f4..7c9874e5f 100644 --- a/src/util/ExtensionProvider.ts +++ b/src/util/ExtensionProvider.ts @@ -26,7 +26,7 @@ export class ExtensionProvider extends React.Component { } } -function emptyContext(): IExtensionContext { +function emptyExtensionContext(): IExtensionContext { return { registerSettings: (title: string, component: React.ComponentClass) => undefined, registerIcon: (group: string, icon: string, title: string, action: any) => undefined, @@ -42,7 +42,7 @@ interface IExtensibleProps { export function getReducers(extensions: IExtensionInit[]) { let reducers = []; - let context = emptyContext(); + let context = emptyExtensionContext(); context.registerReducer = (path: string[], reducer: any) => { reducers.push({ path, reducer }); @@ -76,7 +76,7 @@ export function extension(registerFunc: Function) { public componentWillMount(): void { this.mExtensions = this.props.staticElements || []; - let extContext = emptyContext(); + let extContext = emptyExtensionContext(); extContext[registerFunc.name] = (...args) => { const res = registerFunc(this, ...args); if (res !== undefined) { diff --git a/src/util/i18n.ts b/src/util/i18n.ts index 2d5df5e46..b2c1c5a38 100644 --- a/src/util/i18n.ts +++ b/src/util/i18n.ts @@ -1,6 +1,16 @@ import i18n = require('i18next'); import FSBackend = require('i18next-node-fs-backend'); +import * as path from 'path'; + +let dirName = path.dirname(__dirname); +if (dirName.endsWith('.asar')) { + // locales are not packed so users can update/change them + dirName = path.dirname(dirName); +} + +const basePath = path.normalize(path.join(dirName, 'locales')); + export default function (language: string): I18next.I18n { return i18n .use(FSBackend) @@ -20,8 +30,8 @@ export default function (language: string): I18next.I18n { }, backend: { - loadPath: `${__dirname}/../locales/{{lng}}/{{ns}}.json`, - addPath: `${__dirname}/../locales/{{lng}}/{{ns}}.missing.json`, + loadPath: path.join(basePath, '{{lng}}', '{{ns}}.json'), + addPath: path.join(basePath, '{{lng}}', '{{ns}}.missing.json'), }, }); } diff --git a/src/views/MainWindow.tsx b/src/views/MainWindow.tsx index 9536b6445..c5fa4268a 100644 --- a/src/views/MainWindow.tsx +++ b/src/views/MainWindow.tsx @@ -1,6 +1,5 @@ import { II18NProps } from '../types/II18NProps'; import { IIconDefinition } from '../types/IIconDefinition'; -import Developer from './Developer'; import IconBar from './IconBar'; import Settings from './Settings'; import { Button } from './TooltipControls'; @@ -12,6 +11,11 @@ import { Fixed, Flex, Layout } from 'react-layout-pane'; import update = require('react-addons-update'); +let Developer = undefined; +if (process.env.NODE_ENV === 'development') { + Developer = require('./Developer').default; +} + interface IMainWindowProps { className: string; } @@ -41,7 +45,7 @@ class MainWindow extends React.Component this.showLayer('settings') }, ]; - if (process.env.NODE_ENV === 'development') { + if (Developer !== undefined) { this.buttonsRight.push( { icon: 'wrench', title: 'Developer', action: () => this.showLayer('developer') } ); @@ -66,27 +70,21 @@ class MainWindow extends React.Component - {t('Settings') } + { t('Settings') } - - - - {t('Developer')} - - - - - + { this.renderDeveloperModal() } ); + } private showLayer = (layer: string) => this.showLayerImpl(layer); @@ -95,6 +93,19 @@ class MainWindow extends React.Component + + Developer + + + + + + ); + } } export default translate(['common'], { wait: true })(MainWindow);