From 4ab5ac293ee867b931a7480ca8b77b88e9834e28 Mon Sep 17 00:00:00 2001 From: Ramiro Saenz Date: Tue, 12 Jul 2016 17:14:16 -0300 Subject: [PATCH] Fixed bug on Firebase integration --- app/ux/Firebase.js | 35 +++++++++++++++++++++++++++++---- app/view/main/MainController.js | 7 +++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/app/ux/Firebase.js b/app/ux/Firebase.js index 027a7025..50d04f2c 100644 --- a/app/ux/Firebase.js +++ b/app/ux/Firebase.js @@ -4,8 +4,9 @@ Ext.define('Rambox.ux.Firebase', { // private ,eventsDefined: false - ,createEvents: function(createTabs) { - if ( this.eventsDefined || !localStorage.getItem('id_token') ) return; + ,createEvents: function() { + //if ( this.eventsDefined || !localStorage.getItem('id_token') ) return; + if ( !localStorage.getItem('id_token') ) return; console.log('Define listeners for Firebase'); @@ -41,12 +42,18 @@ Ext.define('Rambox.ux.Firebase', { Ext.getStore('Services').suspendEvents(['add', 'update']); var rec = Ext.getStore('Services').findRecord('firebase_key', snapshot.key); + // For all version of Rambox (0.3.0) + if ( rec === null ) rec = Ext.getStore('Services').getById(snapshot.val().id); + + var data = snapshot.val(); + // Update current services if ( rec ) { - rec.set(snapshot.val()); + delete data.id; + data.firebase_key = snapshot.key; + rec.set(data); rec.save(); } else { // Add new ones if exist - var data = snapshot.val(); data.firebase_key = snapshot.key; rec = Ext.create('Rambox.model.Service', data); rec.save(); @@ -104,4 +111,24 @@ Ext.define('Rambox.ux.Firebase', { this.eventsDefined = true; } + + ,removeEvents: function() { + //if ( !this.eventsDefined ) return; + + console.log('Remove listeners for Firebase'); + + var ref = fireRef.database().ref('users/' + Ext.decode(localStorage.getItem('profile')).user_id).child('services'); + + ref.off('child_changed', function() { + console.warn('Firebase - Child Changed event removed'); + }); + + ref.off('child_added', function() { + console.warn('Firebase - Child Added event removed'); + }); + + ref.off('child_removed', function() { + console.warn('Firebase - Child Removed event removed'); + }); + } }); diff --git a/app/view/main/MainController.js b/app/view/main/MainController.js index 72f4eaa3..06ad0bdb 100644 --- a/app/view/main/MainController.js +++ b/app/view/main/MainController.js @@ -805,6 +805,8 @@ Ext.define('Rambox.view.main.MainController', { // Save the profile and JWT. localStorage.setItem('profile', JSON.stringify(profile)); localStorage.setItem('id_token', id_token); + + // Define Events for Firebase Rambox.ux.Firebase.createEvents(); } @@ -829,6 +831,8 @@ Ext.define('Rambox.view.main.MainController', { // Save the profile and JWT. localStorage.setItem('profile', JSON.stringify(profile)); localStorage.setItem('id_token', id_token); + + // Define Events for Firebase Rambox.ux.Firebase.createEvents(); } else { Ext.Msg.confirm('Clear services', 'Do you want to remove all your current services to start over?

If NO, you will be logged out.', function(btnId) { @@ -874,6 +878,9 @@ Ext.define('Rambox.view.main.MainController', { Ext.Msg.wait('Closing you session...', 'Logout'); firebase.auth().signOut().then(function() { + // Remove Events for Firebase + Rambox.ux.Firebase.removeEvents(); + localStorage.removeItem('profile'); localStorage.removeItem('id_token');