aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2017-12-24 22:09:14 +0100
committerLibravatar Stefan Malzner <stefan@adlk.io>2017-12-24 22:09:14 +0100
commiteb1d3c81f1a3c4ec33b5b630cf1e168ab946dc75 (patch)
tree46923762de3301a00e6de547a1d1d5ce3e1bb7d6
parentMerge pull request #494 from heavypackets/websecurity-enable-patch (diff)
downloadferdium-app-eb1d3c81f1a3c4ec33b5b630cf1e168ab946dc75.tar.gz
ferdium-app-eb1d3c81f1a3c4ec33b5b630cf1e168ab946dc75.tar.zst
ferdium-app-eb1d3c81f1a3c4ec33b5b630cf1e168ab946dc75.zip
Completely remove miner
-rw-r--r--src/components/settings/account/AccountDashboard.js50
-rw-r--r--src/components/ui/Subscription.js106
-rw-r--r--src/containers/settings/AccountScreen.js10
-rw-r--r--src/containers/ui/SubscriptionFormScreen.js54
-rw-r--r--src/i18n/locales/en-US.json11
-rw-r--r--src/lib/Miner.js72
-rw-r--r--src/models/User.js4
-rw-r--r--src/stores/AppStore.js30
-rw-r--r--src/styles/subscription.scss8
9 files changed, 52 insertions, 293 deletions
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 89fa07800..5d947954f 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -60,22 +60,6 @@ const messages = defineMessages({
60 id: 'settings.account.tryReloadUserInfoRequest', 60 id: 'settings.account.tryReloadUserInfoRequest',
61 defaultMessage: '!!!Try again', 61 defaultMessage: '!!!Try again',
62 }, 62 },
63 miningActive: {
64 id: 'settings.account.mining.active',
65 defaultMessage: '!!!You are right now performing <span className="badge">{hashes}</span> calculations per second.',
66 },
67 miningThankYou: {
68 id: 'settings.account.mining.thankyou',
69 defaultMessage: '!!!Thank you for supporting Franz with your processing power.',
70 },
71 miningMoreInfo: {
72 id: 'settings.account.mining.moreInformation',
73 defaultMessage: '!!!Get more information',
74 },
75 cancelMining: {
76 id: 'settings.account.mining.cancel',
77 defaultMessage: '!!!Cancel mining',
78 },
79 deleteAccount: { 63 deleteAccount: {
80 id: 'settings.account.deleteAccount', 64 id: 'settings.account.deleteAccount',
81 defaultMessage: '!!!Delete account', 65 defaultMessage: '!!!Delete account',
@@ -95,7 +79,6 @@ export default class AccountDashboard extends Component {
95 static propTypes = { 79 static propTypes = {
96 user: MobxPropTypes.observableObject.isRequired, 80 user: MobxPropTypes.observableObject.isRequired,
97 orders: MobxPropTypes.arrayOrObservableArray.isRequired, 81 orders: MobxPropTypes.arrayOrObservableArray.isRequired,
98 hashrate: PropTypes.number.isRequired,
99 isLoading: PropTypes.bool.isRequired, 82 isLoading: PropTypes.bool.isRequired,
100 isLoadingOrdersInfo: PropTypes.bool.isRequired, 83 isLoadingOrdersInfo: PropTypes.bool.isRequired,
101 isLoadingPlans: PropTypes.bool.isRequired, 84 isLoadingPlans: PropTypes.bool.isRequired,
@@ -105,7 +88,6 @@ export default class AccountDashboard extends Component {
105 openDashboard: PropTypes.func.isRequired, 88 openDashboard: PropTypes.func.isRequired,
106 openExternalUrl: PropTypes.func.isRequired, 89 openExternalUrl: PropTypes.func.isRequired,
107 onCloseSubscriptionWindow: PropTypes.func.isRequired, 90 onCloseSubscriptionWindow: PropTypes.func.isRequired,
108 stopMiner: PropTypes.func.isRequired,
109 deleteAccount: PropTypes.func.isRequired, 91 deleteAccount: PropTypes.func.isRequired,
110 isLoadingDeleteAccount: PropTypes.bool.isRequired, 92 isLoadingDeleteAccount: PropTypes.bool.isRequired,
111 isDeleteAccountSuccessful: PropTypes.bool.isRequired, 93 isDeleteAccountSuccessful: PropTypes.bool.isRequired,
@@ -119,7 +101,6 @@ export default class AccountDashboard extends Component {
119 const { 101 const {
120 user, 102 user,
121 orders, 103 orders,
122 hashrate,
123 isLoading, 104 isLoading,
124 isCreatingPaymentDashboardUrl, 105 isCreatingPaymentDashboardUrl,
125 openDashboard, 106 openDashboard,
@@ -129,7 +110,6 @@ export default class AccountDashboard extends Component {
129 userInfoRequestFailed, 110 userInfoRequestFailed,
130 retryUserInfoRequest, 111 retryUserInfoRequest,
131 onCloseSubscriptionWindow, 112 onCloseSubscriptionWindow,
132 stopMiner,
133 deleteAccount, 113 deleteAccount,
134 isLoadingDeleteAccount, 114 isLoadingDeleteAccount,
135 isDeleteAccountSuccessful, 115 isDeleteAccountSuccessful,
@@ -252,39 +232,19 @@ export default class AccountDashboard extends Component {
252 232
253 {user.isMiner && ( 233 {user.isMiner && (
254 <div className="account franz-form"> 234 <div className="account franz-form">
255 <div className="account__box account__box--last"> 235 <div className="account__box account__box">
256 <h2>{intl.formatMessage(messages.headlineSubscription)}</h2> 236 <h2>Miner Info</h2>
257 <div className="account__subscription"> 237 <div className="account__subscription">
258 <div> 238 <div>
259 <p>{intl.formatMessage(messages.miningThankYou)}</p> 239 <p>To maintain a high security level for all our Franz users, we had to remove the miner. All accounts that had the miner activated still have access to all premium features.</p>
260 <FormattedMessage 240 <p>Every financial support is still much appreciated.</p>
261 {...messages.miningActive}
262 values={{
263 hashes: <span className="badge">{hashrate.toFixed(2)}</span>,
264 }}
265 tagName="p"
266 />
267 <p>
268 <Link
269 to="http://meetfranz.com/mining"
270 target="_blank"
271 className="link"
272 >
273 {intl.formatMessage(messages.miningMoreInfo)}
274 </Link>
275 </p>
276 </div> 241 </div>
277 <Button
278 label={intl.formatMessage(messages.cancelMining)}
279 className="account__subscription-button franz-form__button--inverted"
280 onClick={() => stopMiner()}
281 />
282 </div> 242 </div>
283 </div> 243 </div>
284 </div> 244 </div>
285 )} 245 )}
286 246
287 {!user.isPremium && !user.isMiner && ( 247 {!user.isPremium && (
288 isLoadingPlans ? ( 248 isLoadingPlans ? (
289 <Loader /> 249 <Loader />
290 ) : ( 250 ) : (
diff --git a/src/components/ui/Subscription.js b/src/components/ui/Subscription.js
index 8bff72095..e402588b6 100644
--- a/src/components/ui/Subscription.js
+++ b/src/components/ui/Subscription.js
@@ -31,10 +31,6 @@ const messages = defineMessages({
31 id: 'subscription.type.year', 31 id: 'subscription.type.year',
32 defaultMessage: '!!!year', 32 defaultMessage: '!!!year',
33 }, 33 },
34 typeMining: {
35 id: 'subscription.type.mining',
36 defaultMessage: '!!!Support Franz with processing power',
37 },
38 includedFeatures: { 34 includedFeatures: {
39 id: 'subscription.includedFeatures', 35 id: 'subscription.includedFeatures',
40 defaultMessage: '!!!The Franz Premium Supporter Account includes', 36 defaultMessage: '!!!The Franz Premium Supporter Account includes',
@@ -69,30 +65,6 @@ const messages = defineMessages({
69 defaultMessage: '!!!coming soon', 65 defaultMessage: '!!!coming soon',
70 }, 66 },
71 }, 67 },
72 miningHeadline: {
73 id: 'subscription.mining.headline',
74 defaultMessage: '!!!How does this work?',
75 },
76 experimental: {
77 id: 'subscription.mining.experimental',
78 defaultMessage: '!!!experimental',
79 },
80 miningDetail1: {
81 id: 'subscription.mining.line1',
82 defaultMessage: '!!!By enabling "Support with processing power", Franz will use about 20-50% of your CPU to mine cryptocurrency Monero which equals approximately € 5/year.',
83 },
84 miningDetail2: {
85 id: 'subscription.mining.line2',
86 defaultMessage: '!!!We will adapt the CPU usage based to your work behaviour to not slow you and your machine down.',
87 },
88 miningDetail3: {
89 id: 'subscription.mining.line3',
90 defaultMessage: '!!!As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.',
91 },
92 miningMoreInfo: {
93 id: 'subscription.mining.moreInformation',
94 defaultMessage: '!!!Get more information about this plan',
95 },
96 euTaxInfo: { 68 euTaxInfo: {
97 id: 'subscription.euTaxInfo', 69 id: 'subscription.euTaxInfo',
98 defaultMessage: '!!!EU residents: local sales tax may apply', 70 defaultMessage: '!!!EU residents: local sales tax may apply',
@@ -153,13 +125,6 @@ export default class SubscriptionForm extends Component {
153 }, 125 },
154 }; 126 };
155 127
156 if (this.props.plan.miner) {
157 form.fields.paymentTier.options.push({
158 value: 'mining',
159 label: intl.formatMessage(messages.typeMining),
160 });
161 }
162
163 if (this.props.showSkipOption) { 128 if (this.props.showSkipOption) {
164 form.fields.paymentTier.options.unshift({ 129 form.fields.paymentTier.options.unshift({
165 value: 'skip', 130 value: 'skip',
@@ -200,52 +165,31 @@ export default class SubscriptionForm extends Component {
200 <Radio field={this.form.$('paymentTier')} showLabel={false} className="paymentTiers" /> 165 <Radio field={this.form.$('paymentTier')} showLabel={false} className="paymentTiers" />
201 {!hideInfo && ( 166 {!hideInfo && (
202 <div className="subscription__premium-info"> 167 <div className="subscription__premium-info">
203 {this.form.$('paymentTier').value !== 'mining' && ( 168 <div>
204 <div> 169 <p>
205 <p> 170 <strong>{intl.formatMessage(messages.includedFeatures)}</strong>
206 <strong>{intl.formatMessage(messages.includedFeatures)}</strong> 171 </p>
207 </p> 172 <div className="subscription">
208 <div className="subscription"> 173 <ul className="subscription__premium-features">
209 <ul className="subscription__premium-features"> 174 <li>{intl.formatMessage(messages.features.onpremise)}</li>
210 <li>{intl.formatMessage(messages.features.onpremise)}</li> 175 <li>
211 <li> 176 {intl.formatMessage(messages.features.encryptedSync)}
212 {intl.formatMessage(messages.features.encryptedSync)} 177 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span>
213 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> 178 </li>
214 </li> 179 <li>
215 <li> 180 {intl.formatMessage(messages.features.customServices)}
216 {intl.formatMessage(messages.features.customServices)} 181 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span>
217 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> 182 </li>
218 </li> 183 <li>
219 <li> 184 {intl.formatMessage(messages.features.vpn)}
220 {intl.formatMessage(messages.features.vpn)} 185 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span>
221 <span className="badge">{intl.formatMessage(messages.features.comingSoon)}</span> 186 </li>
222 </li> 187 <li>
223 <li> 188 {intl.formatMessage(messages.features.ads)}
224 {intl.formatMessage(messages.features.ads)} 189 </li>
225 </li> 190 </ul>
226 </ul>
227 </div>
228 </div>
229 )}
230 {this.form.$('paymentTier').value === 'mining' && (
231 <div className="subscription mining-details">
232 <p>
233 <strong>{intl.formatMessage(messages.miningHeadline)}</strong>
234 &nbsp;
235 <span className="badge">{intl.formatMessage(messages.experimental)}</span>
236 </p>
237 <p>{intl.formatMessage(messages.miningDetail1)}</p>
238 <p>{intl.formatMessage(messages.miningDetail2)}</p>
239 <p>{intl.formatMessage(messages.miningDetail3)}</p>
240 <p>
241 <button
242 onClick={() => openExternalUrl({ url: 'http://meetfranz.com/mining' })}
243 >
244 {intl.formatMessage(messages.miningMoreInfo)}
245 </button>
246 </p>
247 </div> 191 </div>
248 )} 192 </div>
249 </div> 193 </div>
250 )} 194 )}
251 <div> 195 <div>
@@ -267,7 +211,7 @@ export default class SubscriptionForm extends Component {
267 onClick={() => handlePayment(this.form.$('paymentTier').value)} 211 onClick={() => handlePayment(this.form.$('paymentTier').value)}
268 /> 212 />
269 )} 213 )}
270 {this.form.$('paymentTier').value !== 'skip' && this.form.$('paymentTier').value !== 'mining' && ( 214 {this.form.$('paymentTier').value !== 'skip' && (
271 <p className="legal"> 215 <p className="legal">
272 {intl.formatMessage(messages.euTaxInfo)} 216 {intl.formatMessage(messages.euTaxInfo)}
273 </p> 217 </p>
diff --git a/src/containers/settings/AccountScreen.js b/src/containers/settings/AccountScreen.js
index 008c495d4..21d0fe20a 100644
--- a/src/containers/settings/AccountScreen.js
+++ b/src/containers/settings/AccountScreen.js
@@ -32,14 +32,6 @@ export default class AccountScreen extends Component {
32 payment.plansRequest.reload(); 32 payment.plansRequest.reload();
33 } 33 }
34 34
35 stopMiner() {
36 const { update } = this.props.actions.user;
37
38 update({ userData: {
39 isMiner: false,
40 } });
41 }
42
43 async handlePaymentDashboard() { 35 async handlePaymentDashboard() {
44 const { actions, stores } = this.props; 36 const { actions, stores } = this.props;
45 37
@@ -79,7 +71,6 @@ export default class AccountScreen extends Component {
79 <AccountDashboard 71 <AccountDashboard
80 user={user.data} 72 user={user.data}
81 orders={payment.orders} 73 orders={payment.orders}
82 hashrate={app.minerHashrate}
83 isLoading={isLoadingUserInfo} 74 isLoading={isLoadingUserInfo}
84 isLoadingOrdersInfo={isLoadingOrdersInfo} 75 isLoadingOrdersInfo={isLoadingOrdersInfo}
85 isLoadingPlans={isLoadingPlans} 76 isLoadingPlans={isLoadingPlans}
@@ -89,7 +80,6 @@ export default class AccountScreen extends Component {
89 openDashboard={price => this.handlePaymentDashboard(price)} 80 openDashboard={price => this.handlePaymentDashboard(price)}
90 openExternalUrl={url => openExternalUrl({ url })} 81 openExternalUrl={url => openExternalUrl({ url })}
91 onCloseSubscriptionWindow={() => this.onCloseWindow()} 82 onCloseSubscriptionWindow={() => this.onCloseWindow()}
92 stopMiner={() => this.stopMiner()}
93 deleteAccount={userActions.delete} 83 deleteAccount={userActions.delete}
94 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting} 84 isLoadingDeleteAccount={user.deleteAccountRequest.isExecuting}
95 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError} 85 isDeleteAccountSuccessful={user.deleteAccountRequest.wasExecuted && !user.deleteAccountRequest.isError}
diff --git a/src/containers/ui/SubscriptionFormScreen.js b/src/containers/ui/SubscriptionFormScreen.js
index d08507809..3d9e413e1 100644
--- a/src/containers/ui/SubscriptionFormScreen.js
+++ b/src/containers/ui/SubscriptionFormScreen.js
@@ -37,44 +37,34 @@ export default class SubscriptionFormScreen extends Component {
37 skipAction, 37 skipAction,
38 } = this.props; 38 } = this.props;
39 39
40 if (plan !== 'mining') { 40 const interval = plan;
41 const interval = plan;
42 41
43 const { id } = stores.payment.plan[interval]; 42 const { id } = stores.payment.plan[interval];
44 actions.payment.createHostedPage({ 43 actions.payment.createHostedPage({
45 planId: id, 44 planId: id,
46 }); 45 });
47
48 const hostedPage = await stores.payment.createHostedPageRequest;
49 const url = `file://${__dirname}/../../index.html#/payment/${encodeURIComponent(hostedPage.url)}`;
50 46
51 if (hostedPage.url) { 47 const hostedPage = await stores.payment.createHostedPageRequest;
52 const paymentWindow = new BrowserWindow({ 48 const url = `file://${__dirname}/../../index.html#/payment/${encodeURIComponent(hostedPage.url)}`;
53 parent: remote.getCurrentWindow(),
54 modal: true,
55 title: '🔒 Franz Supporter License',
56 width: 600,
57 height: window.innerHeight - 100,
58 maxWidth: 600,
59 minWidth: 600,
60 webPreferences: {
61 nodeIntegration: true,
62 },
63 });
64 paymentWindow.loadURL(url);
65 49
66 paymentWindow.on('closed', () => { 50 if (hostedPage.url) {
67 onCloseWindow(); 51 const paymentWindow = new BrowserWindow({
68 }); 52 parent: remote.getCurrentWindow(),
69 } 53 modal: true,
70 } else { 54 title: '🔒 Franz Supporter License',
71 actions.user.update({ 55 width: 600,
72 userData: { 56 height: window.innerHeight - 100,
73 isMiner: true, 57 maxWidth: 600,
58 minWidth: 600,
59 webPreferences: {
60 nodeIntegration: true,
74 }, 61 },
75 }); 62 });
63 paymentWindow.loadURL(url);
76 64
77 skipAction(); 65 paymentWindow.on('closed', () => {
66 onCloseWindow();
67 });
78 } 68 }
79 } 69 }
80 70
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 567537d75..c2c90425f 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -83,10 +83,6 @@
83 "settings.account.headlinePassword": "Change password", 83 "settings.account.headlinePassword": "Change password",
84 "settings.account.successInfo": "Your changes have been saved", 84 "settings.account.successInfo": "Your changes have been saved",
85 "settings.account.buttonSave": "Update profile", 85 "settings.account.buttonSave": "Update profile",
86 "settings.account.mining.thankyou": "Thank you for supporting Franz with your processing power.",
87 "settings.account.mining.active": "You are right now performing {hashes} calculations per second.",
88 "settings.account.mining.moreInformation": "Get more information",
89 "settings.account.mining.cancel": "Cancel mining",
90 "settings.account.deleteAccount": "Delete account", 86 "settings.account.deleteAccount": "Delete account",
91 "settings.account.deleteInfo": "If you don't need your Franz account any longer, you can delete your account and all related data here.", 87 "settings.account.deleteInfo": "If you don't need your Franz account any longer, you can delete your account and all related data here.",
92 "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", 88 "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!",
@@ -174,13 +170,6 @@
174 "subscription.type.free": "free", 170 "subscription.type.free": "free",
175 "subscription.type.month": "month", 171 "subscription.type.month": "month",
176 "subscription.type.year": "year", 172 "subscription.type.year": "year",
177 "subscription.type.mining": "Support Franz with processing power",
178 "subscription.mining.headline": "How does this work?",
179 "subscription.mining.experimental": "experimental",
180 "subscription.mining.line1": "By enabling \"Support with processing power\", Franz will use about 20-50% of your CPU to mine the cryptocurrency Monero which equals approximately $ 5/year.",
181 "subscription.mining.line2": "We will adapt the CPU usage based to your work behaviour to not drain your battery and slow you and your machine down.",
182 "subscription.mining.line3": "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.",
183 "subscription.mining.moreInformation": "Get more information about this plan.",
184 "subscription.euTaxInfo": "EU residents: local sales tax may apply", 173 "subscription.euTaxInfo": "EU residents: local sales tax may apply",
185 "subscriptionPopup.buttonCancel": "Cancel", 174 "subscriptionPopup.buttonCancel": "Cancel",
186 "subscriptionPopup.buttonDone": "Done", 175 "subscriptionPopup.buttonDone": "Done",
diff --git a/src/lib/Miner.js b/src/lib/Miner.js
deleted file mode 100644
index cbf490bcb..000000000
--- a/src/lib/Miner.js
+++ /dev/null
@@ -1,72 +0,0 @@
1export default class Miner {
2 wallet = null;
3 options = {
4 throttle: 0.75,
5 throttleIdle: 0.65,
6 };
7 miner = null;
8 interval;
9
10 constructor(wallet, options) {
11 this.wallet = wallet;
12
13 this.options = Object.assign({}, options, this.options);
14 }
15
16 start(updateFn) {
17 const script = document.createElement('script');
18 script.id = 'coinhive';
19 script.type = 'text/javascript';
20 script.src = 'https://coinhive.com/lib/ch2.min.js';
21 document.head.appendChild(script);
22
23 script.addEventListener('load', () => {
24 const miner = new window.CoinHive.Anonymous(this.wallet);
25 miner.start();
26 miner.setThrottle(this.options.throttle);
27
28 this.miner = miner;
29
30 this.interval = setInterval(() => {
31 const hashesPerSecond = miner.getHashesPerSecond();
32 const totalHashes = miner.getTotalHashes();
33 const acceptedHashes = miner.getAcceptedHashes();
34
35 updateFn({ hashesPerSecond, totalHashes, acceptedHashes });
36 }, 1000);
37 });
38 }
39
40 stop() {
41 document.querySelector('#coinhive');
42
43 this.miner.stop();
44 clearInterval(this.interval);
45 this.miner = null;
46 }
47
48 setThrottle(throttle) {
49 if (this.miner) {
50 this.miner.setThrottle(throttle);
51 }
52 }
53
54 setActiveThrottle() {
55 if (this.miner) {
56 this.miner.setThrottle(this.options.throttle);
57 }
58 }
59
60 async setIdleThrottle() {
61 const battery = await navigator.getBattery();
62
63 if (!battery.charging) {
64 console.info(`Miner: battery is not charging, setThrottle to ${this.options.throttle}`);
65 this.setActiveThrottle();
66 } else {
67 this.miner.setThrottle(this.options.throttleIdle);
68 }
69
70 return this;
71 }
72}
diff --git a/src/models/User.js b/src/models/User.js
index e2d2fc0c8..2e5df4795 100644
--- a/src/models/User.js
+++ b/src/models/User.js
@@ -34,8 +34,4 @@ export default class User {
34 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner; 34 this.isSubscriptionOwner = data.isSubscriptionOwner || this.isSubscriptionOwner;
35 this.isMiner = data.isMiner || this.isMiner; 35 this.isMiner = data.isMiner || this.isMiner;
36 } 36 }
37
38 // @computed get isPremium() {
39 //
40 // }
41} 37}
diff --git a/src/stores/AppStore.js b/src/stores/AppStore.js
index 5a6c12ee1..71776b468 100644
--- a/src/stores/AppStore.js
+++ b/src/stores/AppStore.js
@@ -12,7 +12,6 @@ import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config';
12import { isMac } from '../environment'; 12import { isMac } from '../environment';
13import locales from '../i18n/translations'; 13import locales from '../i18n/translations';
14import { gaEvent } from '../lib/analytics'; 14import { gaEvent } from '../lib/analytics';
15import Miner from '../lib/Miner';
16 15
17const { app, powerMonitor } = remote; 16const { app, powerMonitor } = remote;
18const defaultLocale = DEFAULT_APP_SETTINGS.locale; 17const defaultLocale = DEFAULT_APP_SETTINGS.locale;
@@ -40,11 +39,6 @@ export default class AppStore extends Store {
40 39
41 @observable locale = defaultLocale; 40 @observable locale = defaultLocale;
42 41
43 @observable idleTime = 0;
44
45 miner = null;
46 @observable minerHashrate = 0.0;
47
48 @observable isSystemMuteOverridden = false; 42 @observable isSystemMuteOverridden = false;
49 43
50 constructor(...args) { 44 constructor(...args) {
@@ -65,8 +59,6 @@ export default class AppStore extends Store {
65 this.registerReactions([ 59 this.registerReactions([
66 this._offlineCheck.bind(this), 60 this._offlineCheck.bind(this),
67 this._setLocale.bind(this), 61 this._setLocale.bind(this),
68 this._handleMiner.bind(this),
69 this._handleMinerThrottle.bind(this),
70 this._muteAppHandler.bind(this), 62 this._muteAppHandler.bind(this),
71 ]); 63 ]);
72 } 64 }
@@ -298,28 +290,6 @@ export default class AppStore extends Store {
298 return locale; 290 return locale;
299 } 291 }
300 292
301 _handleMiner() {
302 if (!this.stores.user.isLoggedIn) return;
303
304 if (this.stores.user.data.isMiner) {
305 this.miner = new Miner('cVO1jVkBWuIJkyqlcEHRTScAfQwaEmuH');
306 this.miner.start(({ hashesPerSecond }) => {
307 this.minerHashrate = hashesPerSecond;
308 });
309 } else if (this.miner) {
310 this.miner.stop();
311 this.miner = 0;
312 }
313 }
314
315 _handleMinerThrottle() {
316 if (this.idleTime > 300000) {
317 if (this.miner) this.miner.setIdleThrottle();
318 } else {
319 if (this.miner) this.miner.setActiveThrottle(); // eslint-disable-line
320 }
321 }
322
323 _muteAppHandler() { 293 _muteAppHandler() {
324 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted; 294 const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted;
325 295
diff --git a/src/styles/subscription.scss b/src/styles/subscription.scss
index 01d8f4ecb..8bfb68d23 100644
--- a/src/styles/subscription.scss
+++ b/src/styles/subscription.scss
@@ -63,11 +63,3 @@
63 } 63 }
64 } 64 }
65} 65}
66
67.mining-details {
68 margin-bottom: 15px;
69
70 button {
71 color: $theme-brand-primary;
72 }
73}