From 217cb8cdba811b93394811c6d616267cdf838eee Mon Sep 17 00:00:00 2001 From: Stefan Malzner Date: Sat, 24 Nov 2018 20:36:09 +0100 Subject: Add missing delayApp commit --- src/components/layout/AppLayout.js | 4 ++++ src/containers/layout/AppLayoutContainer.js | 3 +++ src/i18n/locales/en-US.json | 5 ++++- src/stores/AppStore.js | 14 ++++++++++++++ src/stores/FeaturesStore.js | 16 ++++++++++------ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js index a4003ef8e..4b20fc480 100644 --- a/src/components/layout/AppLayout.js +++ b/src/components/layout/AppLayout.js @@ -5,6 +5,7 @@ import { defineMessages, intlShape } from 'react-intl'; import { TitleBar } from 'electron-react-titlebar'; import InfoBar from '../ui/InfoBar'; +import { component as DelayApp } from '../../features/delayApp'; import globalMessages from '../../i18n/globalMessages'; import { isWindows } from '../../environment'; @@ -58,6 +59,7 @@ export default @observer class AppLayout extends Component { retryRequiredRequests: PropTypes.func.isRequired, areRequiredRequestsLoading: PropTypes.bool.isRequired, darkMode: PropTypes.bool.isRequired, + isDelayAppScreenVisible: PropTypes.bool.isRequired, }; static defaultProps = { @@ -86,6 +88,7 @@ export default @observer class AppLayout extends Component { retryRequiredRequests, areRequiredRequestsLoading, darkMode, + isDelayAppScreenVisible, } = this.props; const { intl } = this.context; @@ -152,6 +155,7 @@ export default @observer class AppLayout extends Component { )} + {isDelayAppScreenVisible && ()} {services} diff --git a/src/containers/layout/AppLayoutContainer.js b/src/containers/layout/AppLayoutContainer.js index c5c9c6850..ce7f89c42 100644 --- a/src/containers/layout/AppLayoutContainer.js +++ b/src/containers/layout/AppLayoutContainer.js @@ -19,6 +19,8 @@ import Sidebar from '../../components/layout/Sidebar'; import Services from '../../components/services/content/Services'; import AppLoader from '../../components/ui/AppLoader'; +import { state as delayAppState } from '../../features/delayApp'; + export default @inject('stores', 'actions') @observer class AppLayoutContainer extends Component { static defaultProps = { children: null, @@ -128,6 +130,7 @@ export default @inject('stores', 'actions') @observer class AppLayoutContainer e retryRequiredRequests={retryRequiredRequests} areRequiredRequestsLoading={requests.areRequiredRequestsLoading} darkMode={settings.all.app.darkMode} + isDelayAppScreenVisible={delayAppState.isDelayAppScreenVisible} > {React.Children.count(children) > 0 ? children : null} diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 66ec5af84..24e29df18 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -249,5 +249,8 @@ "validation.required": "{field} is required", "validation.email": "{field} is not valid", "validation.url": "{field} is not a valid URL", - "validation.minLength": "{field} should be at least {length} characters long" + "validation.minLength": "{field} should be at least {length} characters long", + "feature.delayApp.headline": "Please purchase a Franz Supporter License to skip waiting", + "feature.delayApp.action": "Get a Franz Supporter License", + "feature.delayApp.text": "Franz will continue in {seconds} seconds." } diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js index 9ad4cd531..3e8b18801 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js @@ -12,6 +12,7 @@ import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; import { isMac, isLinux, isWindows } from '../environment'; import locales from '../i18n/translations'; import { gaEvent } from '../lib/analytics'; +import { onVisibilityChange } from '../helpers/visibility-helper'; import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; @@ -56,6 +57,8 @@ export default class AppStore extends Store { @observable isFullScreen = mainWindow.isFullScreen(); + @observable isFocused = true; + constructor(...args) { super(...args); @@ -163,6 +166,17 @@ export default class AppStore extends Store { this._healthCheck(); this.isSystemDarkModeEnabled = systemPreferences.isDarkMode(); + + onVisibilityChange((isVisible) => { + this.isFocused = isVisible; + // debug('Last focus', moment().diff(this.timeLastFocusStart)); + + // if (isVisible) { + // this.timeLastFocusStart = moment(); + // } + + debug('Window is visible/focused', isVisible); + }); } @computed get cacheSize() { diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js index f788c347d..9740d078f 100644 --- a/src/stores/FeaturesStore.js +++ b/src/stores/FeaturesStore.js @@ -3,15 +3,19 @@ import { computed, observable } from 'mobx'; import Store from './lib/Store'; import CachedRequest from './lib/CachedRequest'; +import delayApp from '../features/delayApp'; + export default class FeaturesStore extends Store { @observable defaultFeaturesRequest = new CachedRequest(this.api.features, 'default'); @observable featuresRequest = new CachedRequest(this.api.features, 'features'); - setup() { + async setup() { this.registerReactions([ this._monitorLoginStatus.bind(this), - this._debugFeatures.bind(this), ]); + + await this.featuresRequest._promise; + setTimeout(this._enableFeatures.bind(this), 1); } @computed get features() { @@ -22,10 +26,6 @@ export default class FeaturesStore extends Store { return this.defaultFeaturesRequest.execute().result || {}; } - _debugFeatures() { - console.log(this.features); - } - _monitorLoginStatus() { if (this.stores.user.isLoggedIn) { this.featuresRequest.invalidate({ immediately: true }); @@ -33,4 +33,8 @@ export default class FeaturesStore extends Store { this.defaultFeaturesRequest.invalidate({ immediately: true }); } } + + _enableFeatures() { + delayApp(this.stores, this.actions); + } } -- cgit v1.2.3-70-g09d2