Improve connection handling

* Clear directory data on disconnect
* Clear path URL param on disconnect
* Don't try to fetch dir listing when starting app disconnected
This commit is contained in:
Basti 2017-12-22 12:52:48 +01:00
parent b49cb5c50e
commit e865ffe073
4 changed files with 25 additions and 7 deletions

View File

@ -2,7 +2,6 @@ import Controller from '@ember/controller';
import EmberObject from '@ember/object'; import EmberObject from '@ember/object';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import { alias } from '@ember/object/computed'; import { alias } from '@ember/object/computed';
import { observer } from '@ember/object';
import { isEmpty } from '@ember/utils'; import { isEmpty } from '@ember/utils';
export default Controller.extend({ export default Controller.extend({
@ -13,10 +12,6 @@ export default Controller.extend({
connected: alias('storage.connected'), connected: alias('storage.connected'),
rootListing: alias('storage.rootListing'), rootListing: alias('storage.rootListing'),
handleConnected: observer('connected', function() {
this.get('storage').fetchRootListing();
}),
categories: function() { categories: function() {
let categories = []; let categories = [];
let rootListing = this.get('rootListing'); let rootListing = this.get('rootListing');

View File

@ -1,5 +1,6 @@
import Controller from '@ember/controller'; import Controller from '@ember/controller';
import { inject as controller } from '@ember/controller'; import { inject as controller } from '@ember/controller';
import { observer } from '@ember/object';
import { inject as service } from '@ember/service'; import { inject as service } from '@ember/service';
import { alias } from '@ember/object/computed'; import { alias } from '@ember/object/computed';
import { isPresent } from '@ember/utils'; import { isPresent } from '@ember/utils';
@ -10,7 +11,7 @@ export default Controller.extend({
storage: service(), storage: service(),
// connecting: alias('storage.connecting'), // connecting: alias('storage.connecting'),
// connected: alias('storage.connected'), connected: alias('storage.connected'),
rootListing: alias('storage.rootListing'), rootListing: alias('storage.rootListing'),
currentDirPath: alias('application.currentDirPath'), currentDirPath: alias('application.currentDirPath'),
@ -22,6 +23,15 @@ export default Controller.extend({
} else { } else {
return this.get('rootListing'); return this.get('rootListing');
} }
}.property('rootListing.[]', 'model.[]') }.property('rootListing.[]', 'model.[]'),
connectedChange: observer('connected', function() {
if (this.get('connected')) {
// console.debug('connectedChange connected');
} else {
this.set('model', {});
this.set('path', null);
}
}),
}); });

View File

@ -14,6 +14,8 @@ export default Route.extend({
}, },
model(params) { model(params) {
if (this.get('storage.disconnected')) { return {}; }
let path = params.path; let path = params.path;
if (isEmpty(params.path)) { return null; } if (isEmpty(params.path)) { return null; }
@ -28,6 +30,7 @@ export default Route.extend({
setupController(controller, model) { setupController(controller, model) {
this._super(controller, model); this._super(controller, model);
if (this.get('storage.disconnected')) { return true; }
if (isEmpty(this.get('storage.categories')) && this.get('storage.connected')) { if (isEmpty(this.get('storage.categories')) && this.get('storage.connected')) {
this.get('storage').fetchRootListing(); this.get('storage').fetchRootListing();

View File

@ -1,4 +1,5 @@
import EmberObject from '@ember/object'; import EmberObject from '@ember/object';
import { computed, observer } from '@ember/object';
import Service from '@ember/service'; import Service from '@ember/service';
import RemoteStorage from 'npm:remotestoragejs'; import RemoteStorage from 'npm:remotestoragejs';
import Widget from 'npm:remotestorage-widget'; import Widget from 'npm:remotestorage-widget';
@ -10,6 +11,7 @@ export default Service.extend({
widget: null, widget: null,
connecting: true, connecting: true,
connected: false, connected: false,
disconnected: computed.not('connected'),
client: null, client: null,
rootListing: null, rootListing: null,
@ -72,6 +74,14 @@ export default Service.extend({
this.set('client', rs.scope('/')); this.set('client', rs.scope('/'));
}.on('init'), }.on('init'),
connectedChange: observer('connected', function() {
if (this.get('connected')) {
this.fetchRootListing();
} else {
this.set('rootListing', null);
}
}),
fetchRootListing() { fetchRootListing() {
this.fetchListing('').then(items => { this.fetchListing('').then(items => {
this.set('rootListing', items.sortBy('name')); this.set('rootListing', items.sortBy('name'));