diff --git a/app/ux/WebView.js b/app/ux/WebView.js index da8c6f8b..aa58c4e9 100644 --- a/app/ux/WebView.js +++ b/app/ux/WebView.js @@ -658,4 +658,12 @@ Ext.define('Rambox.ux.WebView',{ me.record.set('zoomLevel', me.zoomLevel); } } + + ,getWebView: function() { + if ( this.record.get('enabled') ) { + return this.down('component').el.dom; + } else { + return false; + } + } }); diff --git a/app/view/main/MainController.js b/app/view/main/MainController.js index 58bd4f64..8404ad03 100644 --- a/app/view/main/MainController.js +++ b/app/view/main/MainController.js @@ -69,7 +69,7 @@ Ext.define('Rambox.view.main.MainController', { Ext.getCmp('tab_'+e.record.get('id')).setTitle(e.record.get('name')); } - ,onEnableDisableService: function(cc, rowIndex, checked) { + ,onEnableDisableService: function(cc, rowIndex, checked, obj, hideTab) { var rec = Ext.getStore('Services').getAt(rowIndex); if ( !checked ) { @@ -87,8 +87,9 @@ Ext.define('Rambox.view.main.MainController', { ,displayTabUnreadCounter: rec.get('displayTabUnreadCounter') ,enabled: rec.get('enabled') ,record: rec + ,hidden: hideTab ,tabConfig: { - service: rec + service: rec } }); } @@ -100,32 +101,60 @@ Ext.define('Rambox.view.main.MainController', { }); } - ,removeServiceFn: function(serviceId) { + ,removeServiceFn: function(serviceId, total, actual) { + var me = this; if ( !serviceId ) return false; - // Get Tab - var tab = Ext.getCmp('tab_'+serviceId); // Get Record var rec = Ext.getStore('Services').getById(serviceId); - // Clear all trash data - if ( rec.get('enabled') && tab.down('component').el ) { - tab.down('component').el.dom.getWebContents().session.clearCache(Ext.emptyFn); - tab.down('component').el.dom.getWebContents().session.clearStorageData({}, Ext.emptyFn); + if ( !rec.get('enabled') ) { + rec.set('enabled', true); + me.onEnableDisableService(null, Ext.getStore('Services').indexOf(rec), true, null, true); + Ext.defer(function() { + // Get Tab + var tab = Ext.getCmp('tab_'+serviceId); + // Clear all trash data + const webview = tab.getWebView(); + + webview.addEventListener("did-finish-load", function() { + clearData(webview, tab); + }); + }, 1000); + } else { + // Get Tab + var tab = Ext.getCmp('tab_'+serviceId); + // Clear all trash data + const webview = tab.getWebView(); + clearData(webview, tab); } - // Remove record from localStorage - Ext.getStore('Services').remove(rec); - - // Close tab - tab.close(); + function clearData(webview, tab) { + webview.getWebContents().clearHistory(); + webview.getWebContents().session.flushStorageData(); + webview.getWebContents().session.clearCache(function() { + webview.getWebContents().session.clearStorageData(function() { + webview.getWebContents().session.cookies.flushStore(function() { + // Remove record from localStorage + Ext.getStore('Services').remove(rec); + // Close tab + tab.close(); + // Close waiting message + if ( total === actual ) Ext.Msg.hide(); + }); + }); + }); + } } ,removeService: function( gridView, rowIndex, colIndex, col, e, rec, rowEl ) { var me = this; Ext.Msg.confirm(locale['app.window[12]'], locale['app.window[13]']+' '+rec.get('name')+'?', function(btnId) { - if ( btnId === 'yes' ) me.removeServiceFn(rec.get('id')); + if ( btnId === 'yes' ) { + Ext.Msg.wait('Please wait until we clear all.', 'Removing...'); + me.removeServiceFn(rec.get('id'), 1, 1); + } }); } @@ -140,8 +169,11 @@ Ext.define('Rambox.view.main.MainController', { if ( btnId === 'yes' ) { Ext.cq1('app-main').suspendEvent('remove'); Ext.getStore('Services').load(); + Ext.Msg.wait('Please wait until we clear all.', 'Removing...'); + const count = Ext.getStore('Services').getCount(); + var i = 1; Ext.Array.each(Ext.getStore('Services').collect('id'), function(serviceId) { - me.removeServiceFn(serviceId); + me.removeServiceFn(serviceId, count, i++); }); if ( Ext.isFunction(callback) ) callback(); Ext.cq1('app-main').resumeEvent('remove'); @@ -152,7 +184,7 @@ Ext.define('Rambox.view.main.MainController', { Ext.cq1('app-main').suspendEvent('remove'); Ext.getStore('Services').load(); Ext.Array.each(Ext.getStore('Services').collect('id'), function(serviceId) { - me.removeServiceFn(serviceId); + me.removeServiceFn(serviceId, 1, 2); }); if ( Ext.isFunction(callback) ) callback(); Ext.cq1('app-main').resumeEvent('remove');