Skip to content

Commit 18e1da1

Browse files
committed
fix(App): Improve lost recipe connection handler
1 parent 0a5d1eb commit 18e1da1

File tree

4 files changed

+29
-19
lines changed

4 files changed

+29
-19
lines changed

src/actions/service.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,7 @@ export default {
9797
awake: {
9898
serviceId: PropTypes.string.isRequired,
9999
},
100+
resetLastPollTimer: {
101+
serviceId: PropTypes.string,
102+
},
100103
};

src/models/Service.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ export default class Service {
7878

7979
@observable lastUsed = Date.now(); // timestamp
8080

81-
@observable lastPoll = null;
81+
@observable lastPoll = Date.now();
8282

83-
@observable lastPollAnswer = null;
83+
@observable lastPollAnswer = Date.now();
8484

8585
@observable lostRecipeConnection = false;
8686

src/stores/AppStore.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -198,24 +198,12 @@ export default class AppStore extends Store {
198198
gaPage(pathname);
199199
});
200200

201-
powerMonitor.on('suspend', () => {
202-
debug('System suspended starting timer');
203-
204-
this.timeSuspensionStart = moment();
205-
});
206-
207201
powerMonitor.on('resume', () => {
208-
debug('System resumed, last suspended on', this.timeSuspensionStart.toString());
202+
debug('System resumed');
209203

210-
if (this.timeSuspensionStart.add(10, 'm').isBefore(moment())) {
211-
debug('Reloading services, user info and features');
204+
this.actions.service.resetLastPollTimer();
212205

213-
setTimeout(() => {
214-
window.location.reload();
215-
}, ms('2s'));
216-
217-
statsEvent('resumed-app');
218-
}
206+
statsEvent('resumed-app');
219207
});
220208

221209
// macOS catalina notifications hack

src/stores/ServicesStore.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export default class ServicesStore extends Store {
7474
this.actions.service.openDevToolsForActiveService.listen(this._openDevToolsForActiveService.bind(this));
7575
this.actions.service.hibernate.listen(this._hibernate.bind(this));
7676
this.actions.service.awake.listen(this._awake.bind(this));
77+
this.actions.service.resetLastPollTimer.listen(this._resetLastPollTimer.bind(this));
7778

7879
this.registerReactions([
7980
this._focusServiceReaction.bind(this),
@@ -136,8 +137,8 @@ export default class ServicesStore extends Store {
136137
this._hibernate({ serviceId: service.id });
137138
}
138139

139-
if (service.lastPoll && (service.lastPoll) - service.lastPollAnswer > ms('30s')) {
140-
// If service did not reply for more than 30s try to reload.
140+
if (service.lastPoll && (service.lastPoll) - service.lastPollAnswer > ms('1m')) {
141+
// If service did not reply for more than 1m try to reload.
141142
if (!service.isActive) {
142143
if (this.stores.app.isOnline && service.lostRecipeReloadAttempt < 3) {
143144
service.webview.reload();
@@ -681,6 +682,24 @@ export default class ServicesStore extends Store {
681682
service.liveFrom = Date.now();
682683
}
683684

685+
@action _resetLastPollTimer({ serviceId = null }) {
686+
debug(`Reset last poll timer for ${serviceId ? `service: "${serviceId}"` : 'all services'}`);
687+
688+
const resetTimer = (service) => {
689+
service.lastPollAnswer = Date.now();
690+
service.lastPoll = Date.now();
691+
};
692+
693+
if (!serviceId) {
694+
this.allDisplayed.forEach(service => resetTimer(service));
695+
} else {
696+
const service = this.one(serviceId);
697+
if (service) {
698+
resetTimer(service);
699+
}
700+
}
701+
}
702+
684703
// Reactions
685704
_focusServiceReaction() {
686705
const service = this.active;

0 commit comments

Comments
 (0)