hangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegram
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
457 lines
11 KiB
457 lines
11 KiB
Ext.define('Rambox.view.main.MainController', { |
|
extend: 'Ext.app.ViewController' |
|
|
|
,requires: [ |
|
] |
|
|
|
,alias: 'controller.main' |
|
|
|
,showSimpleModal: function(record, edit) { |
|
var me = this; |
|
|
|
var win = Ext.create('Ext.window.Window', { |
|
title: (edit ? 'Edit ' : 'Add ') + record.get('name') |
|
,modal: true |
|
,width: 400 |
|
,resizable: false |
|
,draggable: false |
|
,bodyPadding: 20 |
|
,icon: 'resources/icons/' + record.get('logo') |
|
,items: [ |
|
{ |
|
xtype: 'form' |
|
,items: [ |
|
{ |
|
xtype: 'textfield' |
|
,fieldLabel: 'Name' |
|
,value: record.get('name') |
|
,name: 'serviceName' |
|
,allowBlank: true |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
} |
|
,{ |
|
xtype: 'fieldset' |
|
,title: 'Options' |
|
,margin: '10 0 0 0' |
|
,items: [ |
|
{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Separate' |
|
,checked: edit ? (record.get('align') === 'right' ? true : false) : false |
|
,name: 'align' |
|
,uncheckedValue: 'left' |
|
,inputValue: 'right' |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Show notifications' |
|
,name: 'notifications' |
|
,checked: edit ? record.get('notifications') : true |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Mute all sounds' |
|
,name: 'muted' |
|
,checked: edit ? record.get('muted') : false |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
] |
|
} |
|
] |
|
} |
|
] |
|
,buttons: [ |
|
{ |
|
text: 'Cancel' |
|
,ui: 'decline' |
|
,handler: function() { |
|
win.close(); |
|
} |
|
} |
|
,'->' |
|
,{ |
|
text: edit ? 'Save' : 'Add service' |
|
,itemId: 'submit' |
|
,handler: function() { |
|
var formValues = win.down('form').getValues(); |
|
|
|
if ( edit ) { |
|
record.set({ |
|
name: formValues.serviceName |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
}); |
|
Ext.getCmp('tab_'+record.get('id')).setTitle(formValues.serviceName); |
|
} else { |
|
var service = Ext.create('Rambox.model.Service', { |
|
type: record.get('id') |
|
,name: formValues.serviceName |
|
,url: record.get('url') |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
}); |
|
service.save(); |
|
|
|
var tabData = { |
|
xtype: 'webview' |
|
,id: 'tab_'+service.get('id') |
|
,title: service.get('name') |
|
,icon: 'resources/icons/'+record.get('logo') |
|
,src: service.get('url') |
|
,type: service.get('type') |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
,tabConfig: { |
|
service: service |
|
} |
|
}; |
|
|
|
if ( formValues.align === 'left' ) { |
|
var tbfill = me.getView().getTabBar().down('tbfill'); |
|
me.getView().insert(me.getView().getTabBar().items.indexOf(tbfill), tabData).show(); |
|
} else { |
|
me.getView().add(tabData).show(); |
|
} |
|
} |
|
|
|
win.close(); |
|
} |
|
} |
|
] |
|
}).show(); |
|
|
|
// Make focus to the name field |
|
win.down('textfield[name="serviceName"]').focus(true, 100); |
|
} |
|
|
|
,showCustomModal: function(record) { |
|
var me = this; |
|
|
|
var win = Ext.create('Ext.window.Window', { |
|
title: 'Add '+record.get('name') |
|
,modal: true |
|
,width: 400 |
|
,resizable: false |
|
,draggable: false |
|
,bodyPadding: 20 |
|
,icon: 'resources/icons/' + record.get('logo') |
|
,items: [ |
|
{ |
|
xtype: 'form' |
|
,items: [ |
|
{ |
|
xtype: 'textfield' |
|
,fieldLabel: 'Name' |
|
,value: record.get('name') |
|
,name: 'serviceName' |
|
,allowBlank: true |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
} |
|
,{ |
|
xtype: 'container' |
|
,layout: 'column' |
|
,items: [{ |
|
xtype: 'textfield' |
|
,fieldLabel: record.get('name') + ' team' |
|
,name: 'url' |
|
,allowBlank: false |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
},{ |
|
xtype: 'displayfield' |
|
,value: record.get('url').split('___')[1].slice(0, -1) // Get the URL and remove the final slash (/) |
|
,submitValue: false // Prevent being submitted |
|
}] |
|
} |
|
,{ |
|
xtype: 'fieldset' |
|
,title: 'Options' |
|
,margin: '10 0 0 0' |
|
,items: [ |
|
{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Separate' |
|
,checked: false |
|
,name: 'align' |
|
,uncheckedValue: 'left' |
|
,inputValue: 'right' |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Show notifications' |
|
,name: 'notifications' |
|
,checked: true |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Mute all sounds' |
|
,name: 'muted' |
|
,checked: false |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
] |
|
} |
|
] |
|
} |
|
] |
|
,buttons: [ |
|
{ |
|
text: 'Cancel' |
|
,ui: 'decline' |
|
,handler: function() { |
|
win.close(); |
|
} |
|
} |
|
,'->' |
|
,{ |
|
text: 'Add service' |
|
,itemId: 'submit' |
|
,handler: function() { |
|
var formValues = win.down('form').getValues(); |
|
|
|
var service = Ext.create('Rambox.model.Service', { |
|
type: record.get('id') |
|
,name: formValues.serviceName |
|
,url: record.get('url').replace('___', formValues.url) |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
}); |
|
service.save(); |
|
|
|
var tabData = { |
|
xtype: 'webview' |
|
,id: 'tab_'+service.get('id') |
|
,title: service.get('name') |
|
,icon: 'resources/icons/'+record.get('logo') |
|
,src: service.get('url') |
|
,type: service.get('type') |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
,tabConfig: { |
|
service: service |
|
} |
|
}; |
|
|
|
if ( formValues.align === 'left' ) { |
|
var tbfill = me.getView().getTabBar().down('tbfill'); |
|
me.getView().insert(me.getView().getTabBar().items.indexOf(tbfill), tabData).show(); |
|
} else { |
|
me.getView().add(tabData).show(); |
|
} |
|
|
|
win.close(); |
|
} |
|
} |
|
] |
|
}).show(); |
|
|
|
// Make focus to the name field |
|
win.down('textfield[name="serviceName"]').focus(true, 100); |
|
} |
|
|
|
,onNewServiceSelect: function( view, record, item, index, e ) { |
|
if ( record.get('url').indexOf('___') >= 0 ) { |
|
this.showCustomModal(record); |
|
} else { |
|
this.showSimpleModal(record, false); |
|
} |
|
} |
|
|
|
,removeService: function( gridView, rowIndex, colIndex, col, e, rec, rowEl ) { |
|
Ext.Msg.confirm('Please confirm...', 'Are you sure you want to remove '+rec.get('name')+'?', function(btnId) { |
|
if ( btnId === 'yes' ) { |
|
gridView.getStore().remove(rec); |
|
//webview.webContents.session.clearCache(); |
|
Ext.getCmp('tab_'+rec.get('id')).close(); |
|
} |
|
}); |
|
} |
|
|
|
,configureService: function( gridView, rowIndex, colIndex, col, e, rec, rowEl ) { |
|
this.showSimpleModal(rec, true); |
|
} |
|
|
|
,doFilter: function( cg, newValue, oldValue ) { |
|
var values = Ext.cq1('checkboxgroup').getValue(); |
|
Ext.getStore('ServicesList').getFilters().replaceAll({ |
|
fn: function(record) { |
|
return Ext.Array.contains(Ext.Object.getKeys(values), record.get('type')); |
|
} |
|
}); |
|
} |
|
|
|
,addCustomService: function( event, toolEl, owner, tool ) { |
|
var me = this; |
|
|
|
var win = Ext.create('Ext.window.Window', { |
|
title: 'Add Custom Service' |
|
,modal: true |
|
,width: 400 |
|
,resizable: false |
|
,draggable: false |
|
,bodyPadding: 20 |
|
,items: [ |
|
{ |
|
xtype: 'form' |
|
,items: [ |
|
{ |
|
xtype: 'textfield' |
|
,fieldLabel: 'Name' |
|
,name: 'serviceName' |
|
,allowBlank: true |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
} |
|
,{ |
|
xtype: 'textfield' |
|
,fieldLabel: 'URL' |
|
,emptyText: 'http://service.url.com' |
|
,name: 'url' |
|
,vtype: 'url' |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
} |
|
,{ |
|
xtype: 'textfield' |
|
,fieldLabel: 'Logo' |
|
,emptyText: 'http://image.url.com/image.png' |
|
,name: 'logo' |
|
,vtype: 'url' |
|
,listeners: { |
|
specialkey: function(field, e) { |
|
if(e.getKey() == e.ENTER && field.up('form').isValid()) { |
|
field.up('window').down('#submit').handler(); |
|
} |
|
} |
|
} |
|
} |
|
,{ |
|
xtype: 'fieldset' |
|
,title: 'Options' |
|
,margin: '10 0 0 0' |
|
,items: [ |
|
{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Separate' |
|
,checked: false |
|
,name: 'align' |
|
,uncheckedValue: 'left' |
|
,inputValue: 'right' |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Show notifications' |
|
,name: 'notifications' |
|
,checked: true |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
,{ |
|
xtype: 'checkbox' |
|
,boxLabel: 'Mute all sounds' |
|
,name: 'muted' |
|
,checked: false |
|
,uncheckedValue: false |
|
,inputValue: true |
|
} |
|
] |
|
} |
|
] |
|
} |
|
] |
|
,buttons: [ |
|
{ |
|
text: 'Cancel' |
|
,ui: 'decline' |
|
,handler: function() { |
|
win.close(); |
|
} |
|
} |
|
,'->' |
|
,{ |
|
text: 'Add service' |
|
,itemId: 'submit' |
|
,handler: function() { |
|
var formValues = win.down('form').getValues(); |
|
|
|
var service = Ext.create('Rambox.model.Service', { |
|
type: 'custom' |
|
,logo: formValues.logo |
|
,name: formValues.serviceName |
|
,url: formValues.url |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
}); |
|
service.save(); |
|
|
|
var tabData = { |
|
xtype: 'webview' |
|
,id: 'tab_'+service.get('id') |
|
,title: service.get('name') |
|
,icon: formValues.logo |
|
,src: service.get('url') |
|
,type: service.get('type') |
|
,align: formValues.align |
|
,notifications: formValues.notifications |
|
,muted: formValues.muted |
|
,tabConfig: { |
|
service: service |
|
} |
|
}; |
|
|
|
if ( formValues.align === 'left' ) { |
|
var tbfill = me.getView().getTabBar().down('tbfill'); |
|
me.getView().insert(me.getView().getTabBar().items.indexOf(tbfill), tabData).show(); |
|
} else { |
|
me.getView().add(tabData).show(); |
|
} |
|
|
|
win.close(); |
|
} |
|
} |
|
] |
|
}).show(); |
|
|
|
// Make focus to the name field |
|
win.down('textfield[name="serviceName"]').focus(true, 100); |
|
} |
|
});
|
|
|