diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/settings/account/AccountDashboard.js | 50 | ||||
-rw-r--r-- | src/components/ui/Subscription.js | 106 | ||||
-rw-r--r-- | src/containers/settings/AccountScreen.js | 10 | ||||
-rw-r--r-- | src/containers/ui/SubscriptionFormScreen.js | 54 | ||||
-rw-r--r-- | src/i18n/locales/en-US.json | 11 | ||||
-rw-r--r-- | src/lib/Miner.js | 72 | ||||
-rw-r--r-- | src/models/User.js | 4 | ||||
-rw-r--r-- | src/stores/AppStore.js | 31 | ||||
-rw-r--r-- | src/styles/subscription.scss | 8 |
9 files changed, 52 insertions, 294 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 | | ||
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 7fc9eac1c..63d7ce60b 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json | |||
@@ -84,10 +84,6 @@ | |||
84 | "settings.account.headlinePassword": "Change password", | 84 | "settings.account.headlinePassword": "Change password", |
85 | "settings.account.successInfo": "Your changes have been saved", | 85 | "settings.account.successInfo": "Your changes have been saved", |
86 | "settings.account.buttonSave": "Update profile", | 86 | "settings.account.buttonSave": "Update profile", |
87 | "settings.account.mining.thankyou": "Thank you for supporting Franz with your processing power.", | ||
88 | "settings.account.mining.active": "You are right now performing {hashes} calculations per second.", | ||
89 | "settings.account.mining.moreInformation": "Get more information", | ||
90 | "settings.account.mining.cancel": "Cancel mining", | ||
91 | "settings.account.deleteAccount": "Delete account", | 87 | "settings.account.deleteAccount": "Delete account", |
92 | "settings.account.deleteInfo": "If you don't need your Franz account any longer, you can delete your account and all related data here.", | 88 | "settings.account.deleteInfo": "If you don't need your Franz account any longer, you can delete your account and all related data here.", |
93 | "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", | 89 | "settings.account.deleteEmailSent": "You have received an email with a link to confirm your account deletion. Your account and data cannot be restored!", |
@@ -181,13 +177,6 @@ | |||
181 | "subscription.type.free": "free", | 177 | "subscription.type.free": "free", |
182 | "subscription.type.month": "month", | 178 | "subscription.type.month": "month", |
183 | "subscription.type.year": "year", | 179 | "subscription.type.year": "year", |
184 | "subscription.type.mining": "Support Franz with processing power", | ||
185 | "subscription.mining.headline": "How does this work?", | ||
186 | "subscription.mining.experimental": "experimental", | ||
187 | "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.", | ||
188 | "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.", | ||
189 | "subscription.mining.line3": "As long as the miner is active, you will have unlimited access to all the Franz Premium Supporter Features.", | ||
190 | "subscription.mining.moreInformation": "Get more information about this plan.", | ||
191 | "subscription.euTaxInfo": "EU residents: local sales tax may apply", | 180 | "subscription.euTaxInfo": "EU residents: local sales tax may apply", |
192 | "subscriptionPopup.buttonCancel": "Cancel", | 181 | "subscriptionPopup.buttonCancel": "Cancel", |
193 | "subscriptionPopup.buttonDone": "Done", | 182 | "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 @@ | |||
1 | export 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 e33f50f05..a05bfc055 100644 --- a/src/stores/AppStore.js +++ b/src/stores/AppStore.js | |||
@@ -3,7 +3,6 @@ import { action, computed, observable } from 'mobx'; | |||
3 | import moment from 'moment'; | 3 | import moment from 'moment'; |
4 | import key from 'keymaster'; | 4 | import key from 'keymaster'; |
5 | import { getDoNotDisturb } from '@meetfranz/electron-notification-state'; | 5 | import { getDoNotDisturb } from '@meetfranz/electron-notification-state'; |
6 | import idleTimer from '@paulcbetts/system-idle-time'; | ||
7 | import AutoLaunch from 'auto-launch'; | 6 | import AutoLaunch from 'auto-launch'; |
8 | import prettyBytes from 'pretty-bytes'; | 7 | import prettyBytes from 'pretty-bytes'; |
9 | 8 | ||
@@ -13,7 +12,6 @@ import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; | |||
13 | import { isMac } from '../environment'; | 12 | import { isMac } from '../environment'; |
14 | import locales from '../i18n/translations'; | 13 | import locales from '../i18n/translations'; |
15 | import { gaEvent } from '../lib/analytics'; | 14 | import { gaEvent } from '../lib/analytics'; |
16 | import Miner from '../lib/Miner'; | ||
17 | 15 | ||
18 | import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; | 16 | import { getServiceIdsFromPartitions, removeServicePartitionDirectory } from '../helpers/service-helpers.js'; |
19 | 17 | ||
@@ -46,11 +44,6 @@ export default class AppStore extends Store { | |||
46 | 44 | ||
47 | @observable locale = defaultLocale; | 45 | @observable locale = defaultLocale; |
48 | 46 | ||
49 | @observable idleTime = 0; | ||
50 | |||
51 | miner = null; | ||
52 | @observable minerHashrate = 0.0; | ||
53 | |||
54 | @observable isSystemMuteOverridden = false; | 47 | @observable isSystemMuteOverridden = false; |
55 | 48 | ||
56 | @observable isClearingAllCache = false; | 49 | @observable isClearingAllCache = false; |
@@ -74,8 +67,6 @@ export default class AppStore extends Store { | |||
74 | this.registerReactions([ | 67 | this.registerReactions([ |
75 | this._offlineCheck.bind(this), | 68 | this._offlineCheck.bind(this), |
76 | this._setLocale.bind(this), | 69 | this._setLocale.bind(this), |
77 | this._handleMiner.bind(this), | ||
78 | this._handleMinerThrottle.bind(this), | ||
79 | this._muteAppHandler.bind(this), | 70 | this._muteAppHandler.bind(this), |
80 | ]); | 71 | ]); |
81 | } | 72 | } |
@@ -336,28 +327,6 @@ export default class AppStore extends Store { | |||
336 | return locale; | 327 | return locale; |
337 | } | 328 | } |
338 | 329 | ||
339 | _handleMiner() { | ||
340 | if (!this.stores.user.isLoggedIn) return; | ||
341 | |||
342 | if (this.stores.user.data.isMiner) { | ||
343 | this.miner = new Miner('cVO1jVkBWuIJkyqlcEHRTScAfQwaEmuH'); | ||
344 | this.miner.start(({ hashesPerSecond }) => { | ||
345 | this.minerHashrate = hashesPerSecond; | ||
346 | }); | ||
347 | } else if (this.miner) { | ||
348 | this.miner.stop(); | ||
349 | this.miner = 0; | ||
350 | } | ||
351 | } | ||
352 | |||
353 | _handleMinerThrottle() { | ||
354 | if (this.idleTime > 300000) { | ||
355 | if (this.miner) this.miner.setIdleThrottle(); | ||
356 | } else { | ||
357 | if (this.miner) this.miner.setActiveThrottle(); // eslint-disable-line | ||
358 | } | ||
359 | } | ||
360 | |||
361 | _muteAppHandler() { | 330 | _muteAppHandler() { |
362 | const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted; | 331 | const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted; |
363 | 332 | ||
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 | } | ||