11 changed files with 3388 additions and 2647 deletions
@ -1,334 +1,444 @@
|
||||
Ext.define('Rambox.Application', { |
||||
extend: 'Ext.app.Application' |
||||
Ext.define("Rambox.Application", { |
||||
extend: "Ext.app.Application", |
||||
|
||||
,name: 'Rambox' |
||||
name: "Rambox", |
||||
|
||||
,requires: [ |
||||
'Rambox.ux.Auth0' |
||||
,'Rambox.util.MD5' |
||||
,'Ext.window.Toast' |
||||
,'Ext.util.Cookies' |
||||
] |
||||
requires: [ |
||||
"Rambox.ux.Auth0", |
||||
"Rambox.util.MD5", |
||||
"Ext.window.Toast", |
||||
"Ext.util.Cookies", |
||||
], |
||||
|
||||
,stores: [ |
||||
'ServicesList' |
||||
,'Services' |
||||
] |
||||
stores: ["ServicesList", "Services"], |
||||
|
||||
,profiles: [ |
||||
'Offline' |
||||
,'Online' |
||||
] |
||||
profiles: ["Offline", "Online"], |
||||
|
||||
,config: { |
||||
totalServicesLoaded: 0 |
||||
,totalNotifications: 0 |
||||
,googleURLs: [] |
||||
} |
||||
config: { |
||||
totalServicesLoaded: 0, |
||||
totalNotifications: 0, |
||||
googleURLs: [], |
||||
}, |
||||
|
||||
,launch: function () { |
||||
launch: function () { |
||||
const isOnline = require("is-online"); |
||||
const Mousetrap = require("mousetrap"); |
||||
(async () => { |
||||
await isOnline().then((res) => { |
||||
var hideNoConnection = ipc.sendSync("getConfig").hideNoConnectionDialog; |
||||
if (!res && !hideNoConnection) { |
||||
Ext.get("spinner") ? Ext.get("spinner").destroy() : null; |
||||
Ext.get("background") ? Ext.get("background").destroy() : null; |
||||
Ext.Msg.show({ |
||||
title: "No Internet Connection", |
||||
msg: |
||||
"Please, check your internet connection. If you use a Proxy, please go to Preferences to configure it. Rambox will try to re-connect in 10 seconds", |
||||
width: 300, |
||||
closable: false, |
||||
buttons: Ext.Msg.YESNO, |
||||
buttonText: { |
||||
yes: "Ok", |
||||
no: "Never show this again", |
||||
}, |
||||
multiline: false, |
||||
fn: function (buttonValue, inputText, showConfig) { |
||||
if (buttonValue === "no") { |
||||
ipc.send("sConfig", { hideNoConnectionDialog: true }); |
||||
hideNoConnection = true; |
||||
} |
||||
}, |
||||
icon: Ext.Msg.QUESTION, |
||||
}); |
||||
setTimeout(function () { |
||||
if (!hideNoConnection) ipc.send("reloadApp"); |
||||
}, 10000); |
||||
} |
||||
}); |
||||
})(); |
||||
|
||||
const isOnline = require('is-online'); |
||||
const Mousetrap = require('mousetrap'); |
||||
(async () => { |
||||
await isOnline().then(res => { |
||||
var hideNoConnection = ipc.sendSync('getConfig').hideNoConnectionDialog |
||||
if ( !res && !hideNoConnection ) { |
||||
Ext.get('spinner') ? Ext.get('spinner').destroy() : null; |
||||
Ext.get('background') ? Ext.get('background').destroy() : null; |
||||
Ext.Msg.show({ |
||||
title: 'No Internet Connection' |
||||
,msg: 'Please, check your internet connection. If you use a Proxy, please go to Preferences to configure it. Rambox will try to re-connect in 10 seconds' |
||||
,width: 300 |
||||
,closable: false |
||||
,buttons: Ext.Msg.YESNO |
||||
,buttonText: { |
||||
yes: 'Ok' |
||||
,no: 'Never show this again' |
||||
} |
||||
,multiline: false |
||||
,fn: function(buttonValue, inputText, showConfig) { |
||||
if ( buttonValue === 'no' ) { |
||||
ipc.send('sConfig', { hideNoConnectionDialog: true }); |
||||
hideNoConnection = true; |
||||
} |
||||
} |
||||
,icon: Ext.Msg.QUESTION |
||||
}); |
||||
setTimeout(function() { |
||||
if ( !hideNoConnection ) ipc.send('reloadApp') |
||||
}, 10000) |
||||
} |
||||
}) |
||||
})(); |
||||
if ( |
||||
!localStorage.getItem("hideMacPermissions") && |
||||
process.platform === "darwin" && |
||||
(require("electron").remote.systemPreferences.getMediaAccessStatus( |
||||
"microphone" |
||||
) !== "granted" || |
||||
require("electron").remote.systemPreferences.getMediaAccessStatus( |
||||
"camera" |
||||
) !== "granted") |
||||
) { |
||||
console.info("Checking mac permissions..."); |
||||
Ext.cq1("app-main").addDocked({ |
||||
xtype: "toolbar", |
||||
dock: "top", |
||||
style: { background: "#30BBF3" }, |
||||
items: [ |
||||
"->", |
||||
{ |
||||
xtype: "label", |
||||
html: |
||||
"<b>Rambox CE needs permissions to use Microphone and Camera for the apps.</b>", |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: "Grant permissions", |
||||
ui: "decline", |
||||
handler: async function (btn) { |
||||
await require("electron").remote.systemPreferences.askForMediaAccess( |
||||
"microphone" |
||||
); |
||||
await require("electron").remote.systemPreferences.askForMediaAccess( |
||||
"camera" |
||||
); |
||||
Ext.cq1("app-main").removeDocked(btn.up("toolbar"), true); |
||||
}, |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: "Never ask again", |
||||
ui: "decline", |
||||
handler: function (btn) { |
||||
Ext.cq1("app-main").removeDocked(btn.up("toolbar"), true); |
||||
localStorage.setItem("hideMacPermissions", true); |
||||
}, |
||||
}, |
||||
"->", |
||||
{ |
||||
glyph: "xf00d@FontAwesome", |
||||
baseCls: "", |
||||
style: "cursor:pointer;", |
||||
handler: function (btn) { |
||||
Ext.cq1("app-main").removeDocked(btn.up("toolbar"), true); |
||||
}, |
||||
}, |
||||
], |
||||
}); |
||||
} |
||||
|
||||
if ( !localStorage.getItem('hideMacPermissions') && process.platform === 'darwin' && (require('electron').remote.systemPreferences.getMediaAccessStatus('microphone') !== 'granted' || require('electron').remote.systemPreferences.getMediaAccessStatus('camera') !== 'granted') ) { |
||||
console.info('Checking mac permissions...'); |
||||
Ext.cq1('app-main').addDocked({ |
||||
xtype: 'toolbar' |
||||
,dock: 'top' |
||||
,style: {background: '#30BBF3'} |
||||
,items: [ |
||||
'->' |
||||
,{ |
||||
xtype: 'label' |
||||
,html: '<b>Rambox CE needs permissions to use Microphone and Camera for the apps.</b>' |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: 'Grant permissions' |
||||
,ui: 'decline' |
||||
,handler: async function(btn) { |
||||
await require('electron').remote.systemPreferences.askForMediaAccess('microphone'); |
||||
await require('electron').remote.systemPreferences.askForMediaAccess('camera'); |
||||
Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); |
||||
} |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: 'Never ask again' |
||||
,ui: 'decline' |
||||
,handler: function(btn) { |
||||
Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); |
||||
localStorage.setItem('hideMacPermissions', true); |
||||
} |
||||
} |
||||
,'->' |
||||
,{ |
||||
glyph: 'xf00d@FontAwesome' |
||||
,baseCls: '' |
||||
,style: 'cursor:pointer;' |
||||
,handler: function(btn) { Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); } |
||||
} |
||||
] |
||||
}); |
||||
} |
||||
Ext.getStore("ServicesList").load(function (records, operations, success) { |
||||
if (!success) { |
||||
Ext.cq1("app-main").addDocked({ |
||||
xtype: "toolbar", |
||||
dock: "top", |
||||
ui: "servicesnotloaded", |
||||
style: { background: "#efef6d" }, |
||||
items: [ |
||||
"->", |
||||
{ |
||||
xtype: "label", |
||||
html: |
||||
"<b>Services couldn't be loaded, some Rambox features will not be available.</b>", |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: "Reload", |
||||
handler: function () { |
||||
ipc.send("reloadApp"); |
||||
}, |
||||
}, |
||||
"->", |
||||
{ |
||||
glyph: "xf00d@FontAwesome", |
||||
baseCls: "", |
||||
style: "cursor:pointer;", |
||||
handler: function (btn) { |
||||
Ext.cq1("app-main").removeDocked(btn.up("toolbar"), true); |
||||
}, |
||||
}, |
||||
], |
||||
}); |
||||
} |
||||
// Prevent track if the user have disabled this option (default: false)
|
||||
if (!ipc.sendSync("sendStatistics")) { |
||||
ga_storage = { |
||||
_enableSSL: Ext.emptyFn, |
||||
_disableSSL: Ext.emptyFn, |
||||
_setAccount: Ext.emptyFn, |
||||
_setDomain: Ext.emptyFn, |
||||
_setLocale: Ext.emptyFn, |
||||
_setCustomVar: Ext.emptyFn, |
||||
_deleteCustomVar: Ext.emptyFn, |
||||
_trackPageview: Ext.emptyFn, |
||||
_trackEvent: Ext.emptyFn, |
||||
}; |
||||
} |
||||
|
||||
// Set Google Analytics events
|
||||
ga_storage._setAccount("UA-80680424-1"); |
||||
ga_storage._trackPageview("/index.html", "main"); |
||||
ga_storage._trackEvent( |
||||
"Versions", |
||||
require("electron").remote.app.getVersion() |
||||
); |
||||
|
||||
Ext.getStore('ServicesList').load(function (records, operations, success) { |
||||
// Load language for Ext JS library
|
||||
Ext.Loader.loadScript({ |
||||
url: Ext.util.Format.format( |
||||
"ext/packages/ext-locale/build/ext-locale-{0}.js", |
||||
localStorage.getItem("locale-auth0") || "en" |
||||
), |
||||
}); |
||||
|
||||
if (!success) { |
||||
Ext.cq1('app-main').addDocked({ |
||||
xtype: 'toolbar' |
||||
,dock: 'top' |
||||
,ui: 'servicesnotloaded' |
||||
,style: { background: '#efef6d' } |
||||
,items: [ |
||||
'->' |
||||
,{ |
||||
xtype: 'label' |
||||
,html: '<b>Services couldn\'t be loaded, some Rambox features will not be available.</b>' |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: 'Reload' |
||||
,handler: function() { ipc.send('reloadApp'); } |
||||
} |
||||
,'->' |
||||
,{ |
||||
glyph: 'xf00d@FontAwesome' |
||||
,baseCls: '' |
||||
,style: 'cursor:pointer;' |
||||
,handler: function(btn) { Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); } |
||||
} |
||||
] |
||||
}); |
||||
} |
||||
// Prevent track if the user have disabled this option (default: false)
|
||||
if ( !ipc.sendSync('sendStatistics') ) { |
||||
ga_storage = { |
||||
_enableSSL: Ext.emptyFn |
||||
,_disableSSL: Ext.emptyFn |
||||
,_setAccount: Ext.emptyFn |
||||
,_setDomain: Ext.emptyFn |
||||
,_setLocale: Ext.emptyFn |
||||
,_setCustomVar: Ext.emptyFn |
||||
,_deleteCustomVar: Ext.emptyFn |
||||
,_trackPageview: Ext.emptyFn |
||||
,_trackEvent: Ext.emptyFn |
||||
} |
||||
} |
||||
// Initialize Auth0
|
||||
if (auth0Cfg.clientID !== "" && auth0Cfg.domain !== "") |
||||
Rambox.ux.Auth0.init(); |
||||
|
||||
// Set Google Analytics events
|
||||
ga_storage._setAccount('UA-80680424-1'); |
||||
ga_storage._trackPageview('/index.html', 'main'); |
||||
ga_storage._trackEvent('Versions', require('electron').remote.app.getVersion()); |
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set( |
||||
"version", |
||||
require("electron").remote.app.getVersion() |
||||
); |
||||
if (Ext.util.Cookies.get("auth0") === null) |
||||
Ext.util.Cookies.set("auth0", false); |
||||
|
||||
// Load language for Ext JS library
|
||||
Ext.Loader.loadScript({url: Ext.util.Format.format("ext/packages/ext-locale/build/ext-locale-{0}.js", localStorage.getItem('locale-auth0') || 'en')}); |
||||
// Check for updates
|
||||
if ( |
||||
require("electron").remote.process.argv.indexOf("--without-update") === |
||||
-1 |
||||
) |
||||
Rambox.app.checkUpdate(true); |
||||
|
||||
// Initialize Auth0
|
||||
if ( auth0Cfg.clientID !== '' && auth0Cfg.domain !== '' ) Rambox.ux.Auth0.init(); |
||||
// Get Google URLs
|
||||
Ext.Ajax.request({ |
||||
url: |
||||
"https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/google.json", |
||||
method: "GET", |
||||
success: function (response) { |
||||
Rambox.app.config.googleURLs = Ext.decode(response.responseText); |
||||
}, |
||||
}); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set('version', require('electron').remote.app.getVersion()); |
||||
if ( Ext.util.Cookies.get('auth0') === null ) Ext.util.Cookies.set('auth0', false); |
||||
// Shortcuts
|
||||
const platform = require("electron").remote.process.platform; |
||||
// Prevents default behaviour of Mousetrap, that prevents shortcuts in textareas
|
||||
Mousetrap.prototype.stopCallback = function (e, element, combo) { |
||||
return false; |
||||
}; |
||||
// Add shortcuts to switch services using CTRL + Number
|
||||
Mousetrap.bind( |
||||
platform === "darwin" |
||||
? [ |
||||
"command+1", |
||||
"command+2", |
||||
"command+3", |
||||
"command+4", |
||||
"command+5", |
||||
"command+6", |
||||
"command+7", |
||||
"command+8", |
||||
"command+9", |
||||
] |
||||
: [ |
||||
"ctrl+1", |
||||
"ctrl+2", |
||||
"ctrl+3", |
||||
"ctrl+4", |
||||
"ctrl+5", |
||||
"ctrl+6", |
||||
"ctrl+7", |
||||
"ctrl+8", |
||||
"ctrl+9", |
||||
], |
||||
function (e, combo) { |
||||
// GROUPS
|
||||
var tabPanel = Ext.cq1("app-main"); |
||||
var arg = parseInt(e.key); |
||||
if (arg >= tabPanel.items.indexOf(Ext.getCmp("tbfill"))) arg++; |
||||
tabPanel.setActiveTab(arg); |
||||
} |
||||
); |
||||
// Add shortcut to main tab (ctrl+,)
|
||||
Mousetrap.bind( |
||||
platform === "darwin" ? "command+," : "ctrl+,", |
||||
(e, combo) => { |
||||
Ext.cq1("app-main").setActiveTab(0); |
||||
} |
||||
); |
||||
// Add shortcuts to navigate through services
|
||||
Mousetrap.bind(["ctrl+tab", "ctrl+pagedown"], (e, combo) => { |
||||
var tabPanel = Ext.cq1("app-main"); |
||||
var activeIndex = tabPanel.items.indexOf(tabPanel.getActiveTab()); |
||||
var i = activeIndex + 1; |
||||
// "cycle" (go to the start) when the end is reached or the end is the spacer "tbfill"
|
||||
if ( |
||||
i === tabPanel.items.items.length || |
||||
(i === tabPanel.items.items.length - 1 && |
||||
tabPanel.items.items[i].id === "tbfill") |
||||
) |
||||
i = 0; |
||||
// skip spacer
|
||||
while (tabPanel.items.items[i].id === "tbfill") i++; |
||||
tabPanel.setActiveTab(i); |
||||
}); |
||||
Mousetrap.bind(["ctrl+shift+tab", "ctrl+pageup"], (e, combo) => { |
||||
var tabPanel = Ext.cq1("app-main"); |
||||
var activeIndex = tabPanel.items.indexOf(tabPanel.getActiveTab()); |
||||
var i = activeIndex - 1; |
||||
if (i < 0) i = tabPanel.items.items.length - 1; |
||||
while (tabPanel.items.items[i].id === "tbfill" || i < 0) i--; |
||||
tabPanel.setActiveTab(i); |
||||
}); |
||||
// Add shortcut to search inside a service
|
||||
Mousetrap.bind( |
||||
process.platform === "darwin" ? ["command+alt+f"] : ["shift+alt+f"], |
||||
(e, combo) => { |
||||
var currentTab = Ext.cq1("app-main").getActiveTab(); |
||||
if (currentTab.getWebView) currentTab.showSearchBox(true); |
||||
} |
||||
); |
||||
// Add shortcut to Do Not Disturb
|
||||
Mousetrap.bind( |
||||
platform === "darwin" ? ["command+alt+d"] : ["shift+alt+d"], |
||||
function (e, combo) { |
||||
var btn = Ext.getCmp("disturbBtn"); |
||||
btn.toggle(); |
||||
Ext.cq1("app-main").getController().dontDisturb(btn, true); |
||||
} |
||||
); |
||||
// Add shortcut to Lock Rambox
|
||||
Mousetrap.bind( |
||||
platform === "darwin" ? ["command+alt+l"] : ["shift+alt+l"], |
||||
(e, combo) => { |
||||
var btn = Ext.getCmp("lockRamboxBtn"); |
||||
Ext.cq1("app-main").getController().lockRambox(btn); |
||||
} |
||||
); |
||||
|
||||
// Check for updates
|
||||
if ( require('electron').remote.process.argv.indexOf('--without-update') === -1 ) Rambox.app.checkUpdate(true); |
||||
// Mouse Wheel zooming
|
||||
document.addEventListener("mousewheel", function (e) { |
||||
if (e.ctrlKey) { |
||||
var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail)); |
||||
|
||||
// Get Google URLs
|
||||
Ext.Ajax.request({ |
||||
url: 'https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/google.json' |
||||
,method: 'GET' |
||||
,success: function(response) { |
||||
Rambox.app.config.googleURLs = Ext.decode(response.responseText); |
||||
} |
||||
}); |
||||
var tabPanel = Ext.cq1("app-main"); |
||||
if (tabPanel.items.indexOf(tabPanel.getActiveTab()) === 0) |
||||
return false; |
||||
|
||||
// Shortcuts
|
||||
const platform = require('electron').remote.process.platform; |
||||
// Prevents default behaviour of Mousetrap, that prevents shortcuts in textareas
|
||||
Mousetrap.prototype.stopCallback = function(e, element, combo) { |
||||
return false; |
||||
}; |
||||
// Add shortcuts to switch services using CTRL + Number
|
||||
Mousetrap.bind(platform === 'darwin' ? ["command+1","command+2","command+3","command+4","command+5","command+6","command+7","command+8","command+9"] : ["ctrl+1","ctrl+2","ctrl+3","ctrl+4","ctrl+5","ctrl+6","ctrl+7","ctrl+8","ctrl+9"], function(e, combo) { // GROUPS
|
||||
var tabPanel = Ext.cq1('app-main'); |
||||
var arg = parseInt(e.key); |
||||
if ( arg >= tabPanel.items.indexOf(Ext.getCmp('tbfill')) ) arg++; |
||||
tabPanel.setActiveTab(arg); |
||||
}); |
||||
// Add shortcut to main tab (ctrl+,)
|
||||
Mousetrap.bind(platform === 'darwin' ? 'command+,' : 'ctrl+,', (e, combo) => { |
||||
Ext.cq1('app-main').setActiveTab(0); |
||||
}); |
||||
// Add shortcuts to navigate through services
|
||||
Mousetrap.bind(['ctrl+tab', 'ctrl+pagedown'], (e, combo) => { |
||||
var tabPanel = Ext.cq1('app-main'); |
||||
var activeIndex = tabPanel.items.indexOf(tabPanel.getActiveTab()); |
||||
var i = activeIndex + 1; |
||||
// "cycle" (go to the start) when the end is reached or the end is the spacer "tbfill"
|
||||
if (i === tabPanel.items.items.length || i === tabPanel.items.items.length - 1 && tabPanel.items.items[i].id === 'tbfill') i = 0; |
||||
// skip spacer
|
||||
while (tabPanel.items.items[i].id === 'tbfill') i++; |
||||
tabPanel.setActiveTab(i); |
||||
}); |
||||
Mousetrap.bind(['ctrl+shift+tab', 'ctrl+pageup'], (e, combo) => { |
||||
var tabPanel = Ext.cq1('app-main'); |
||||
var activeIndex = tabPanel.items.indexOf(tabPanel.getActiveTab()); |
||||
var i = activeIndex - 1; |
||||
if ( i < 0 ) i = tabPanel.items.items.length - 1; |
||||
while ( tabPanel.items.items[i].id === 'tbfill' || i < 0 ) i--; |
||||
tabPanel.setActiveTab(i); |
||||
}); |
||||
// Add shortcut to search inside a service
|
||||
Mousetrap.bind(process.platform === 'darwin' ? ['command+alt+f'] : ['shift+alt+f'], (e, combo) => { |
||||
var currentTab = Ext.cq1('app-main').getActiveTab(); |
||||
if ( currentTab.getWebView ) currentTab.showSearchBox(true); |
||||
}); |
||||
// Add shortcut to Do Not Disturb
|
||||
Mousetrap.bind(platform === 'darwin' ? ["command+alt+d"] : ["shift+alt+d"], function(e, combo) { |
||||
var btn = Ext.getCmp('disturbBtn'); |
||||
btn.toggle(); |
||||
Ext.cq1('app-main').getController().dontDisturb(btn, true); |
||||
}); |
||||
// Add shortcut to Lock Rambox
|
||||
Mousetrap.bind(platform === 'darwin' ? ['command+alt+l'] : ['shift+alt+l'], (e, combo) => { |
||||
var btn = Ext.getCmp('lockRamboxBtn'); |
||||
Ext.cq1('app-main').getController().lockRambox(btn); |
||||
}); |
||||
if (delta === 1) { |
||||
// Zoom In
|
||||
tabPanel.getActiveTab().zoomIn(); |
||||
} else { |
||||
// Zoom Out
|
||||
tabPanel.getActiveTab().zoomOut(); |
||||
} |
||||
} |
||||
}); |
||||
|
||||
// Mouse Wheel zooming
|
||||
document.addEventListener('mousewheel', function(e) { |
||||
if( e.ctrlKey ) { |
||||
var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); |
||||
// Define default value
|
||||
if (localStorage.getItem("dontDisturb") === null) |
||||
localStorage.setItem("dontDisturb", false); |
||||
ipc.send("setDontDisturb", localStorage.getItem("dontDisturb")); // We store it in config
|
||||
|
||||
var tabPanel = Ext.cq1('app-main'); |
||||
if ( tabPanel.items.indexOf(tabPanel.getActiveTab()) === 0 ) return false; |
||||
if (localStorage.getItem("locked")) { |
||||
console.info("Lock Rambox:", "Enabled"); |
||||
Ext.cq1("app-main").getController().showLockWindow(); |
||||
} |
||||
Ext.getStore("Services").load(); |
||||
}); |
||||
}, |
||||
|
||||
if ( delta === 1 ) { // Zoom In
|
||||
tabPanel.getActiveTab().zoomIn(); |
||||
} else { // Zoom Out
|
||||
tabPanel.getActiveTab().zoomOut(); |
||||
} |
||||
} |
||||
}); |
||||
updateTotalNotifications: function (newValue, oldValue) { |
||||
newValue = parseInt(newValue); |
||||
if (newValue > 0) { |
||||
if (Ext.cq1("app-main").getActiveTab().record) { |
||||
document.title = |
||||
"Rambox (" + |
||||
Rambox.util.Format.formatNumber(newValue) + |
||||
") - " + |
||||
Ext.cq1("app-main").getActiveTab().record.get("name"); |
||||
} else { |
||||
document.title = |
||||
"Rambox (" + Rambox.util.Format.formatNumber(newValue) + ")"; |
||||
} |
||||
} else { |
||||
if (Ext.cq1("app-main") && Ext.cq1("app-main").getActiveTab().record) { |
||||
document.title = |
||||
"Rambox - " + Ext.cq1("app-main").getActiveTab().record.get("name"); |
||||
} else { |
||||
document.title = "Rambox"; |
||||
} |
||||
} |
||||
}, |
||||
|
||||
// Define default value
|
||||
if ( localStorage.getItem('dontDisturb') === null ) localStorage.setItem('dontDisturb', false); |
||||
ipc.send('setDontDisturb', localStorage.getItem('dontDisturb')); // We store it in config
|
||||
checkUpdate: function (silence) { |
||||
console.info("Checking for updates..."); |
||||
Ext.Ajax.request({ |
||||
url: |
||||
"https://api.github.com/repos/ramboxapp/community-edition/releases/latest", |
||||
method: "GET", |
||||
success: function (response) { |
||||
var json = Ext.decode(response.responseText); |
||||
var appVersion = new Ext.Version( |
||||
require("electron").remote.app.getVersion() |
||||
); |
||||
if ( |
||||
appVersion.isLessThan(json.name) && |
||||
!json.draft && |
||||
!json.prerelease |
||||
) { |
||||
console.info("New version is available", json.version); |
||||
Ext.cq1("app-main").addDocked({ |
||||
xtype: "toolbar", |
||||
dock: "top", |
||||
ui: "newversion", |
||||
items: [ |
||||
"->", |
||||
{ |
||||
xtype: "label", |
||||
html: |
||||
"<b>" + |
||||
locale["app.update[0]"] + |
||||
"</b> (" + |
||||
json.version + |
||||
")" + |
||||
(process.platform === "win32" |
||||
? " is downloading in the background and you will be notified when it is ready to be installed." |
||||
: ""), |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: locale["app.update[1]"], |
||||
href: |
||||
process.platform === "darwin" |
||||
? "https://getrambox.herokuapp.com/download/" + |
||||
process.platform + |
||||
"_" + |
||||
process.arch |
||||
: "https://github.com/ramboxapp/community-edition/releases/latest", |
||||
hidden: process.platform === "win32", |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: locale["app.update[2]"], |
||||
ui: "decline", |
||||
tooltip: |
||||
"Click here to see more information about the new version.", |
||||
href: |
||||
"https://github.com/ramboxapp/community-edition/releases/tag/" + |
||||
json.version, |
||||
}, |
||||
"->", |
||||
{ |
||||
glyph: "xf00d@FontAwesome", |
||||
baseCls: "", |
||||
style: "cursor:pointer;", |
||||
handler: function (btn) { |
||||
Ext.cq1("app-main").removeDocked(btn.up("toolbar"), true); |
||||
}, |
||||
}, |
||||
], |
||||
}); |
||||
ipc.send("autoUpdater:check-for-updates"); |
||||
return; |
||||
} else if (!silence) { |
||||
Ext.Msg.show({ |
||||
title: locale["app.update[3]"], |
||||
message: locale["app.update[4]"], |
||||
icon: Ext.Msg.INFO, |
||||
buttons: Ext.Msg.OK, |
||||
}); |
||||
} |
||||
|
||||
if ( localStorage.getItem('locked') ) { |
||||
console.info('Lock Rambox:', 'Enabled'); |
||||
Ext.cq1('app-main').getController().showLockWindow(); |
||||
} |
||||
Ext.getStore('Services').load(); |
||||
}); |
||||
} |
||||
|
||||
,updateTotalNotifications: function( newValue, oldValue ) { |
||||
newValue = parseInt(newValue); |
||||
if ( newValue > 0 ) { |
||||
if ( Ext.cq1('app-main').getActiveTab().record ) { |
||||
document.title = 'Rambox (' + Rambox.util.Format.formatNumber(newValue) + ') - '+Ext.cq1('app-main').getActiveTab().record.get('name'); |
||||
} else { |
||||
document.title = 'Rambox (' + Rambox.util.Format.formatNumber(newValue) + ')'; |
||||
} |
||||
} else { |
||||
if ( Ext.cq1('app-main') && Ext.cq1('app-main').getActiveTab().record ) { |
||||
document.title = 'Rambox - '+Ext.cq1('app-main').getActiveTab().record.get('name'); |
||||
} else { |
||||
document.title = 'Rambox'; |
||||
} |
||||
} |
||||
} |
||||
|
||||
,checkUpdate: function(silence) { |
||||
console.info('Checking for updates...'); |
||||
Ext.Ajax.request({ |
||||
url: 'https://api.github.com/repos/ramboxapp/community-edition/releases/latest' |
||||
,method: 'GET' |
||||
,success: function(response) { |
||||
var json = Ext.decode(response.responseText); |
||||
var appVersion = new Ext.Version(require('electron').remote.app.getVersion()); |
||||
if ( appVersion.isLessThan(json.name) && !json.draft && !json.prerelease ) { |
||||
console.info('New version is available', json.version); |
||||
Ext.cq1('app-main').addDocked({ |
||||
xtype: 'toolbar' |
||||
,dock: 'top' |
||||
,ui: 'newversion' |
||||
,items: [ |
||||
'->' |
||||
,{ |
||||
xtype: 'label' |
||||
,html: '<b>'+locale['app.update[0]']+'</b> ('+json.version+')' + ( process.platform === 'win32' ? ' is downloading in the background and you will be notified when it is ready to be installed.' : '' ) |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: locale['app.update[1]'] |
||||
,href: process.platform === 'darwin' ? 'https://getrambox.herokuapp.com/download/'+process.platform+'_'+process.arch : 'https://github.com/ramboxapp/community-edition/releases/latest' |
||||
,hidden: process.platform === 'win32' |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: locale['app.update[2]'] |
||||
,ui: 'decline' |
||||
,tooltip: 'Click here to see more information about the new version.' |
||||
,href: 'https://github.com/ramboxapp/community-edition/releases/tag/'+json.version |
||||
} |
||||
,'->' |
||||
,{ |
||||
glyph: 'xf00d@FontAwesome' |
||||
,baseCls: '' |
||||
,style: 'cursor:pointer;' |
||||
,handler: function(btn) { Ext.cq1('app-main').removeDocked(btn.up('toolbar'), true); } |
||||
} |
||||
] |
||||
}); |
||||
ipc.send('autoUpdater:check-for-updates'); |
||||
return; |
||||
} else if ( !silence ) { |
||||
Ext.Msg.show({ |
||||
title: locale['app.update[3]'] |
||||
,message: locale['app.update[4]'] |
||||
,icon: Ext.Msg.INFO |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
console.info('Your version is the latest. No need to update.'); |
||||
} |
||||
}); |
||||
} |
||||
console.info("Your version is the latest. No need to update."); |
||||
}, |
||||
}); |
||||
}, |
||||
}); |
||||
|
@ -1,42 +1,43 @@
|
||||
Ext.define('Rambox.store.ServicesList', { |
||||
extend: 'Ext.data.Store' |
||||
,alias: 'store.serviceslist' |
||||
Ext.define("Rambox.store.ServicesList", { |
||||
extend: "Ext.data.Store", |
||||
alias: "store.serviceslist", |
||||
|
||||
,requires: [ |
||||
'Ext.data.proxy.LocalStorage' |
||||
] |
||||
requires: ["Ext.data.proxy.LocalStorage"], |
||||
|
||||
,model: 'Rambox.model.ServiceList' |
||||
model: "Rambox.model.ServiceList", |
||||
|
||||
,proxy: { |
||||
type: 'ajax', |
||||
url: 'https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/services.json', |
||||
reader: { |
||||
type: 'json', |
||||
rootProperty: 'responseText' |
||||
} |
||||
} |
||||
,listeners: { |
||||
load: function () { |
||||
Ext.get('spinner') ? Ext.get('spinner').destroy() : null; |
||||
Ext.get('background') ? Ext.get('background').destroy() : null; |
||||
this.add({ |
||||
id: 'custom' |
||||
,logo: 'custom.png' |
||||
,name: '_Custom Service' |
||||
,description: locale['services[38]'] |
||||
,url: '___' |
||||
,type: 'custom' |
||||
,allow_popups: true |
||||
}) |
||||
} |
||||
} |
||||
,sorters: [{ |
||||
property: 'name' |
||||
,direction: 'ASC' |
||||
}] |
||||
proxy: { |
||||
type: "ajax", |
||||
url: |
||||
"https://raw.githubusercontent.com/ramboxapp/community-edition/gh-pages/api/services.json", |
||||
reader: { |
||||
type: "json", |
||||
rootProperty: "responseText", |
||||
}, |
||||
}, |
||||
listeners: { |
||||
load: function () { |
||||
Ext.get("spinner") ? Ext.get("spinner").destroy() : null; |
||||
Ext.get("background") ? Ext.get("background").destroy() : null; |
||||
this.add({ |
||||
id: "custom", |
||||
logo: "custom.png", |
||||
name: "_Custom Service", |
||||
description: locale["services[38]"], |
||||
url: "___", |
||||
type: "custom", |
||||
allow_popups: true, |
||||
}); |
||||
}, |
||||
}, |
||||
sorters: [ |
||||
{ |
||||
property: "name", |
||||
direction: "ASC", |
||||
}, |
||||
], |
||||
|
||||
,autoLoad: true |
||||
,autoSync: true |
||||
,pageSize: 100000 |
||||
autoLoad: true, |
||||
autoSync: true, |
||||
pageSize: 100000, |
||||
}); |
||||
|
@ -1,298 +1,344 @@
|
||||
Ext.define('Rambox.ux.Auth0', { |
||||
singleton: true |
||||
|
||||
// private
|
||||
,lock: null |
||||
,auth0: null |
||||
,authService: null |
||||
,backupCurrent: false |
||||
|
||||
,init: function() { |
||||
var me = this; |
||||
|
||||
var Auth0 = require('auth0-js'); |
||||
var _AuthService = require('./resources/js/AuthService'); |
||||
|
||||
me.authService = new _AuthService.default({ |
||||
clientId: auth0Cfg.clientID, |
||||
authorizeEndpoint: 'https://'+auth0Cfg.domain+'/authorize', |
||||
audience: 'https://'+auth0Cfg.domain+'/userinfo', |
||||
scope: 'openid profile offline_access', |
||||
redirectUri: 'https://'+auth0Cfg.domain+'/mobile', |
||||
tokenEndpoint: 'https://'+auth0Cfg.domain+'/oauth/token' |
||||
}); |
||||
|
||||
me.auth0 = new Auth0.WebAuth({ clientID: auth0Cfg.clientID, domain : auth0Cfg.domain }); |
||||
|
||||
//me.defineEvents();
|
||||
} |
||||
|
||||
,onLogin: function(token, authWindow) { |
||||
var me = this; |
||||
|
||||
authWindow.close(); |
||||
|
||||
me.auth0.client.userInfo(token.access_token, function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.error === 401 || err.error === 'Unauthorized' ) return me.renewToken(me.checkConfiguration); |
||||
Ext.Msg.hide(); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.error_description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
// Display a spinner while waiting
|
||||
Ext.Msg.wait(locale['app.window[29]'], locale['app.window[28]']); |
||||
|
||||
// Google Analytics Event
|
||||
ga_storage._trackEvent('Users', 'loggedIn'); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set('auth0', true); |
||||
|
||||
// User is logged in
|
||||
// Save the profile and JWT.
|
||||
localStorage.setItem('profile', JSON.stringify(profile)); |
||||
localStorage.setItem('access_token', token.access_token); |
||||
localStorage.setItem('id_token', token.id_token); |
||||
localStorage.setItem('refresh_token', token.refresh_token); |
||||
|
||||
if ( !Ext.isEmpty(profile.user_metadata) && !Ext.isEmpty(profile.user_metadata.services) && !me.backupCurrent ) { |
||||
Ext.each(profile.user_metadata.services, function(s) { |
||||
var service = Ext.create('Rambox.model.Service', s); |
||||
service.save(); |
||||
Ext.getStore('Services').add(service); |
||||
}); |
||||
|
||||
require('electron').remote.app.relaunch(); |
||||
require('electron').remote.app.exit(); |
||||
} |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.cq1('app-main').getViewModel().set('username', profile.name); |
||||
Ext.cq1('app-main').getViewModel().set('avatar', profile.picture); |
||||
}); |
||||
} |
||||
|
||||
,backupConfiguration: function(callback) { |
||||
var me = this; |
||||
|
||||
Ext.Msg.wait('Saving backup...', 'Please wait...'); |
||||
|
||||
// Getting all services
|
||||
var lastupdate = (new Date()).toJSON(); |
||||
var services = []; |
||||
Ext.getStore('Services').each(function(service) { |
||||
var s = Ext.clone(service); |
||||
delete s.data.id; |
||||
delete s.data.zoomLevel; |
||||
services.push(s.data); |
||||
}); |
||||
|
||||
Ext.Ajax.request({ |
||||
url: 'https://rambox.auth0.com/api/v2/users/'+Ext.decode(localStorage.getItem('profile')).sub |
||||
,method: 'PATCH' |
||||
,headers: { authorization: "Bearer " + localStorage.getItem('id_token') } |
||||
,jsonData: { user_metadata: { services: services, services_lastupdate: lastupdate } } |
||||
,success: function(response) { |
||||
Ext.Msg.hide(); |
||||
// Save the last update in localStorage
|
||||
var profile = Ext.decode(localStorage.getItem('profile')); |
||||
if ( !profile.user_metadata ) profile.user_metadata = {}; |
||||
profile.user_metadata.services_lastupdate = lastupdate; |
||||
localStorage.setItem('profile', Ext.encode(profile)); |
||||
Ext.cq1('app-main').getViewModel().set('last_sync', new Date(lastupdate).toUTCString()); |
||||
|
||||
Ext.toast({ |
||||
html: '<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Your configuration were successfully backed up.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
} |
||||
,failure: function(response) { |
||||
if ( response.status === 401 ) return me.renewToken(me.backupConfiguration); |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.toast({ |
||||
html: '<i class="fa fa-times fa-3x fa-pull-left" aria-hidden="true"></i> Error occurred when trying to backup your configuration.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
|
||||
console.error(response); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,restoreConfiguration: function() { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.code === 401 ) return me.renewToken(me.restoreConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
// First we remove all current services
|
||||
Ext.cq1('app-main').getController().removeAllServices(false, function() { |
||||
if ( !profile.user_metadata || !profile.user_metadata.services ) return; |
||||
Ext.each(profile.user_metadata.services, function(s) { |
||||
var service = Ext.create('Rambox.model.Service', s); |
||||
service.save(); |
||||
Ext.getStore('Services').add(service); |
||||
}); |
||||
|
||||
require('electron').remote.getCurrentWindow().reload(); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
,checkConfiguration: function() { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo(localStorage.getItem('access_token'), function(err, profile) { |
||||
if ( err ) { |
||||
if ( err.code === 401 ) return me.renewToken(me.checkConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: 'Error' |
||||
,message: 'There was an error getting the profile: ' + err.description |
||||
,icon: Ext.Msg.ERROR |
||||
,buttons: Ext.Msg.OK |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile['https://rambox.pro/user_metadata']; |
||||
delete profile['https://rambox.pro/user_metadata']; |
||||
|
||||
if ( !profile.user_metadata ) { |
||||
Ext.toast({ |
||||
html: 'You don\'t have any backup yet.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
return; |
||||
} |
||||
|
||||
if ( Math.floor(new Date(profile.user_metadata.services_lastupdate) / 1000) > Math.floor(new Date(Ext.decode(localStorage.getItem('profile')).user_metadata.services_lastupdate) / 1000) ) { |
||||
Ext.toast({ |
||||
html: 'Your settings are out of date.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
} else { |
||||
Ext.toast({ |
||||
html: '<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Latest backup is already applied.' |
||||
,title: 'Synchronize Configuration' |
||||
,width: 300 |
||||
,align: 't' |
||||
,closable: false |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,renewToken: function(callback) { |
||||
var me = this; |
||||
|
||||
Ext.Ajax.request({ |
||||
url: 'https://rambox.auth0.com/oauth/token' |
||||
,method: 'POST' |
||||
,jsonData: { |
||||
grant_type: 'refresh_token' |
||||
,client_id: auth0Cfg.clientID |
||||
,client_secret: auth0Cfg.clientSecret |
||||
,refresh_token: localStorage.getItem('refresh_token') |
||||
,api_type: 'app' |
||||
} |
||||
,success: function(response) { |
||||
var json = Ext.decode(response.responseText); |
||||
localStorage.setItem('access_token', json.access_token); |
||||
localStorage.setItem('id_token', json.id_token); |
||||
|
||||
if ( Ext.isFunction(callback) ) callback.bind(me)(); |
||||
} |
||||
,failure: function(response) { |
||||
console.error(response); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
,login: function() { |
||||
var me = this; |
||||
|
||||
var electron = require('electron').remote; |
||||
var authWindow = new electron.BrowserWindow({ |
||||
title: 'Rambox - Login' |
||||
,width: 400 |
||||
,height: 600 |
||||
,maximizable: false |
||||
,minimizable: false |
||||
,resizable: true |
||||
,closable: true |
||||
,center: true |
||||
,autoHideMenuBar: true |
||||
,skipTaskbar: true |
||||
,fullscreenable: false |
||||
,parent: require('electron').remote.getCurrentWindow() |
||||
,webPreferences: { |
||||
partition: 'persist:rambox' |
||||
} |
||||
}); |
||||
|
||||
authWindow.on('closed', function() { |
||||
authWindow = null; |
||||
}); |
||||
|
||||
authWindow.loadURL(me.authService.requestAuthCode()); |
||||
|
||||
authWindow.webContents.on('did-start-loading', function(e) { |
||||
authWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { |
||||
Rambox.app.config.googleURLs.forEach((loginURL) => { |
||||
if ( details.url.indexOf(loginURL) > -1 ) details.requestHeaders['User-Agent'] = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0' }) |
||||
callback({ cancel: false, requestHeaders: details.requestHeaders }); |
||||
}); |
||||
}); |
||||
|
||||
authWindow.webContents.on('did-navigate', function(e, url) { |
||||
me.authService.requestAccessCode(url, me.onLogin.bind(me), authWindow); |
||||
}); |
||||
} |
||||
|
||||
,logout: function() { |
||||
var me = this; |
||||
|
||||
localStorage.removeItem('profile'); |
||||
localStorage.removeItem('id_token'); |
||||
localStorage.removeItem('refresh_token'); |
||||
localStorage.removeItem('access_token'); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set('auth0', false); |
||||
} |
||||
Ext.define("Rambox.ux.Auth0", { |
||||
singleton: true, |
||||
|
||||
// private
|
||||
lock: null, |
||||
auth0: null, |
||||
authService: null, |
||||
backupCurrent: false, |
||||
|
||||
init: function () { |
||||
var me = this; |
||||
|
||||
var Auth0 = require("auth0-js"); |
||||
var _AuthService = require("./resources/js/AuthService"); |
||||
|
||||
me.authService = new _AuthService.default({ |
||||
clientId: auth0Cfg.clientID, |
||||
authorizeEndpoint: "https://" + auth0Cfg.domain + "/authorize", |
||||
audience: "https://" + auth0Cfg.domain + "/userinfo", |
||||
scope: "openid profile offline_access", |
||||
redirectUri: "https://" + auth0Cfg.domain + "/mobile", |
||||
tokenEndpoint: "https://" + auth0Cfg.domain + "/oauth/token", |
||||
}); |
||||
|
||||
me.auth0 = new Auth0.WebAuth({ |
||||
clientID: auth0Cfg.clientID, |
||||
domain: auth0Cfg.domain, |
||||
}); |
||||
|
||||
//me.defineEvents();
|
||||
}, |
||||
|
||||
onLogin: function (token, authWindow) { |
||||
var me = this; |
||||
|
||||
authWindow.close(); |
||||
|
||||
me.auth0.client.userInfo(token.access_token, function (err, profile) { |
||||
if (err) { |
||||
if (err.error === 401 || err.error === "Unauthorized") |
||||
return me.renewToken(me.checkConfiguration); |
||||
Ext.Msg.hide(); |
||||
return Ext.Msg.show({ |
||||
title: "Error", |
||||
message: |
||||
"There was an error getting the profile: " + err.error_description, |
||||
icon: Ext.Msg.ERROR, |
||||
buttons: Ext.Msg.OK, |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile["https://rambox.pro/user_metadata"]; |
||||
delete profile["https://rambox.pro/user_metadata"]; |
||||
|
||||
// Display a spinner while waiting
|
||||
Ext.Msg.wait(locale["app.window[29]"], locale["app.window[28]"]); |
||||
|
||||
// Google Analytics Event
|
||||
ga_storage._trackEvent("Users", "loggedIn"); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set("auth0", true); |
||||
|
||||
// User is logged in
|
||||
// Save the profile and JWT.
|
||||
localStorage.setItem("profile", JSON.stringify(profile)); |
||||
localStorage.setItem("access_token", token.access_token); |
||||
localStorage.setItem("id_token", token.id_token); |
||||
localStorage.setItem("refresh_token", token.refresh_token); |
||||
|
||||
if ( |
||||
!Ext.isEmpty(profile.user_metadata) && |
||||
!Ext.isEmpty(profile.user_metadata.services) && |
||||
!me.backupCurrent |
||||
) { |
||||
Ext.each(profile.user_metadata.services, function (s) { |
||||
var service = Ext.create("Rambox.model.Service", s); |
||||
service.save(); |
||||
Ext.getStore("Services").add(service); |
||||
}); |
||||
|
||||
require("electron").remote.app.relaunch(); |
||||
require("electron").remote.app.exit(); |
||||
} |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.cq1("app-main").getViewModel().set("username", profile.name); |
||||
Ext.cq1("app-main").getViewModel().set("avatar", profile.picture); |
||||
}); |
||||
}, |
||||
|
||||
backupConfiguration: function (callback) { |
||||
var me = this; |
||||
|
||||
Ext.Msg.wait("Saving backup...", "Please wait..."); |
||||
|
||||
// Getting all services
|
||||
var lastupdate = new Date().toJSON(); |
||||
var services = []; |
||||
Ext.getStore("Services").each(function (service) { |
||||
var s = Ext.clone(service); |
||||
delete s.data.id; |
||||
delete s.data.zoomLevel; |
||||
services.push(s.data); |
||||
}); |
||||
|
||||
Ext.Ajax.request({ |
||||
url: |
||||
"https://rambox.auth0.com/api/v2/users/" + |
||||
Ext.decode(localStorage.getItem("profile")).sub, |
||||
method: "PATCH", |
||||
headers: { authorization: "Bearer " + localStorage.getItem("id_token") }, |
||||
jsonData: { |
||||
user_metadata: { services: services, services_lastupdate: lastupdate }, |
||||
}, |
||||
success: function (response) { |
||||
Ext.Msg.hide(); |
||||
// Save the last update in localStorage
|
||||
var profile = Ext.decode(localStorage.getItem("profile")); |
||||
if (!profile.user_metadata) profile.user_metadata = {}; |
||||
profile.user_metadata.services_lastupdate = lastupdate; |
||||
localStorage.setItem("profile", Ext.encode(profile)); |
||||
Ext.cq1("app-main") |
||||
.getViewModel() |
||||
.set("last_sync", new Date(lastupdate).toUTCString()); |
||||
|
||||
Ext.toast({ |
||||
html: |
||||
'<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Your configuration were successfully backed up.', |
||||
title: "Synchronize Configuration", |
||||
width: 300, |
||||
align: "t", |
||||
closable: false, |
||||
}); |
||||
|
||||
if (Ext.isFunction(callback)) callback.bind(me)(); |
||||
}, |
||||
failure: function (response) { |
||||
if (response.status === 401) |
||||
return me.renewToken(me.backupConfiguration); |
||||
|
||||
Ext.Msg.hide(); |
||||
Ext.toast({ |
||||
html: |
||||
'<i class="fa fa-times fa-3x fa-pull-left" aria-hidden="true"></i> Error occurred when trying to backup your configuration.', |
||||
title: "Synchronize Configuration", |
||||
width: 300, |
||||
align: "t", |
||||
closable: false, |
||||
}); |
||||
|
||||
if (Ext.isFunction(callback)) callback.bind(me)(); |
||||
|
||||
console.error(response); |
||||
}, |
||||
}); |
||||
}, |
||||
|
||||
restoreConfiguration: function () { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo( |
||||
localStorage.getItem("access_token"), |
||||
function (err, profile) { |
||||
if (err) { |
||||
if (err.code === 401) return me.renewToken(me.restoreConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: "Error", |
||||
message: |
||||
"There was an error getting the profile: " + err.description, |
||||
icon: Ext.Msg.ERROR, |
||||
buttons: Ext.Msg.OK, |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile["https://rambox.pro/user_metadata"]; |
||||
delete profile["https://rambox.pro/user_metadata"]; |
||||
|
||||
// First we remove all current services
|
||||
Ext.cq1("app-main") |
||||
.getController() |
||||
.removeAllServices(false, function () { |
||||
if (!profile.user_metadata || !profile.user_metadata.services) |
||||
return; |
||||
Ext.each(profile.user_metadata.services, function (s) { |
||||
var service = Ext.create("Rambox.model.Service", s); |
||||
service.save(); |
||||
Ext.getStore("Services").add(service); |
||||
}); |
||||
|
||||
require("electron").remote.getCurrentWindow().reload(); |
||||
}); |
||||
} |
||||
); |
||||
}, |
||||
|
||||
checkConfiguration: function () { |
||||
var me = this; |
||||
|
||||
me.auth0.client.userInfo( |
||||
localStorage.getItem("access_token"), |
||||
function (err, profile) { |
||||
if (err) { |
||||
if (err.code === 401) return me.renewToken(me.checkConfiguration); |
||||
return Ext.Msg.show({ |
||||
title: "Error", |
||||
message: |
||||
"There was an error getting the profile: " + err.description, |
||||
icon: Ext.Msg.ERROR, |
||||
buttons: Ext.Msg.OK, |
||||
}); |
||||
} |
||||
|
||||
profile.user_metadata = profile["https://rambox.pro/user_metadata"]; |
||||
delete profile["https://rambox.pro/user_metadata"]; |
||||
|
||||
if (!profile.user_metadata) { |
||||
Ext.toast({ |
||||
html: "You don't have any backup yet.", |
||||
title: "Synchronize Configuration", |
||||
width: 300, |
||||
align: "t", |
||||
closable: false, |
||||
}); |
||||
return; |
||||
} |
||||
|
||||
if ( |
||||
Math.floor( |
||||
new Date(profile.user_metadata.services_lastupdate) / 1000 |
||||
) > |
||||
Math.floor( |
||||
new Date( |
||||
Ext.decode( |
||||
localStorage.getItem("profile") |
||||
).user_metadata.services_lastupdate |
||||
) / 1000 |
||||
) |
||||
) { |
||||
Ext.toast({ |
||||
html: "Your settings are out of date.", |
||||
title: "Synchronize Configuration", |
||||
width: 300, |
||||
align: "t", |
||||
closable: false, |
||||
}); |
||||
} else { |
||||
Ext.toast({ |
||||
html: |
||||
'<i class="fa fa-check fa-3x fa-pull-left" aria-hidden="true"></i> Latest backup is already applied.', |
||||
title: "Synchronize Configuration", |
||||
width: 300, |
||||
align: "t", |
||||
closable: false, |
||||
}); |
||||
} |
||||
} |
||||
); |
||||
}, |
||||
|
||||
renewToken: function (callback) { |
||||
var me = this; |
||||
|
||||
Ext.Ajax.request({ |
||||
url: "https://rambox.auth0.com/oauth/token", |
||||
method: "POST", |
||||
jsonData: { |
||||
grant_type: "refresh_token", |
||||
client_id: auth0Cfg.clientID, |
||||
client_secret: auth0Cfg.clientSecret, |
||||
refresh_token: localStorage.getItem("refresh_token"), |
||||
api_type: "app", |
||||
}, |
||||
success: function (response) { |
||||
var json = Ext.decode(response.responseText); |
||||
localStorage.setItem("access_token", json.access_token); |
||||
localStorage.setItem("id_token", json.id_token); |
||||
|
||||
if (Ext.isFunction(callback)) callback.bind(me)(); |
||||
}, |
||||
failure: function (response) { |
||||
console.error(response); |
||||
}, |
||||
}); |
||||
}, |
||||
|
||||
login: function () { |
||||
var me = this; |
||||
|
||||
var electron = require("electron").remote; |
||||
var authWindow = new electron.BrowserWindow({ |
||||
title: "Rambox - Login", |
||||
width: 400, |
||||
height: 600, |
||||
maximizable: false, |
||||
minimizable: false, |
||||
resizable: true, |
||||
closable: true, |
||||
center: true, |
||||
autoHideMenuBar: true, |
||||
skipTaskbar: true, |
||||
fullscreenable: false, |
||||
parent: require("electron").remote.getCurrentWindow(), |
||||
webPreferences: { |
||||
partition: "persist:rambox", |
||||
}, |
||||
}); |
||||
|
||||
authWindow.on("closed", function () { |
||||
authWindow = null; |
||||
}); |
||||
|
||||
authWindow.loadURL(me.authService.requestAuthCode()); |
||||
|
||||
authWindow.webContents.on("did-start-loading", function (e) { |
||||
authWindow.webContents.session.webRequest.onBeforeSendHeaders( |
||||
(details, callback) => { |
||||
Rambox.app.config.googleURLs.forEach((loginURL) => { |
||||
if (details.url.indexOf(loginURL) > -1) |
||||
details.requestHeaders["User-Agent"] = |
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0"; |
||||
}); |
||||
callback({ cancel: false, requestHeaders: details.requestHeaders }); |
||||
} |
||||
); |
||||
}); |
||||
|
||||
authWindow.webContents.on("did-navigate", function (e, url) { |
||||
me.authService.requestAccessCode(url, me.onLogin.bind(me), authWindow); |
||||
}); |
||||
}, |
||||
|
||||
logout: function () { |
||||
var me = this; |
||||
|
||||
localStorage.removeItem("profile"); |
||||
localStorage.removeItem("id_token"); |
||||
localStorage.removeItem("refresh_token"); |
||||
localStorage.removeItem("access_token"); |
||||
|
||||
// Set cookies to help Tooltip.io messages segmentation
|
||||
Ext.util.Cookies.set("auth0", false); |
||||
}, |
||||
}); |
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,382 +1,412 @@
|
||||
Ext.define('Rambox.view.preferences.Preferences',{ |
||||
extend: 'Ext.window.Window' |
||||
,xtype: 'preferences' |
||||
Ext.define("Rambox.view.preferences.Preferences", { |
||||
extend: "Ext.window.Window", |
||||
xtype: "preferences", |
||||
|
||||
,requires: [ |
||||
'Rambox.view.preferences.PreferencesController' |
||||
,'Rambox.view.preferences.PreferencesModel' |
||||
,'Ext.form.field.ComboBox' |
||||
,'Ext.form.field.Checkbox' |
||||
] |
||||
requires: [ |
||||
"Rambox.view.preferences.PreferencesController", |
||||
"Rambox.view.preferences.PreferencesModel", |
||||
"Ext.form.field.ComboBox", |
||||
"Ext.form.field.Checkbox", |
||||
], |
||||
|
||||
,controller: 'preferences-preferences' |
||||
,viewModel: { |
||||
type: 'preferences-preferences' |
||||
} |
||||
controller: "preferences-preferences", |
||||
viewModel: { |
||||
type: "preferences-preferences", |
||||
}, |
||||
|
||||
,title: locale['preferences[0]'] |
||||
,width: 420 |
||||
,height: 500 |
||||
,modal: true |
||||
,closable: true |
||||
,minimizable: false |
||||
,maximizable: false |
||||
,draggable: true |
||||
,resizable: false |
||||
,scrollable: 'vertical' |
||||
,bodyStyle: 'margin-right:15px;' |
||||
,buttons: [ |
||||
{ |
||||
text: locale['button[1]'] |
||||
,ui: 'decline' |
||||
,handler: 'cancel' |
||||
} |
||||
,'->' |
||||
,{ |
||||
text: locale['button[4]'] |
||||
,handler: 'save' |
||||
} |
||||
] |
||||
title: locale["preferences[0]"], |
||||
width: 420, |
||||
height: 500, |
||||
modal: true, |
||||
closable: true, |
||||
minimizable: false, |
||||
maximizable: false, |
||||
draggable: true, |
||||
resizable: false, |
||||
scrollable: "vertical", |
||||
bodyStyle: "margin-right:15px;", |
||||
buttons: [ |
||||
{ |
||||
text: locale["button[1]"], |
||||
ui: "decline", |
||||
handler: "cancel", |
||||
}, |
||||
"->", |
||||
{ |
||||
text: locale["button[4]"], |
||||
handler: "save", |
||||
}, |
||||
], |
||||
|
||||
,initComponent: function() { |
||||
var config = ipc.sendSync('getConfig'); |
||||
initComponent: function () { |
||||
var config = ipc.sendSync("getConfig"); |
||||
|
||||
var defaultServiceOptions = []; |
||||
defaultServiceOptions.push({ value: 'ramboxTab', label: 'Rambox Tab' }); |
||||
defaultServiceOptions.push({ value: 'last', label: 'Last Active Service' }); |
||||
Ext.getStore('Services').each(function(rec) { |
||||
defaultServiceOptions.push({ |
||||
value: rec.get('id') |
||||
,label: rec.get('name') |
||||
}); |
||||
}); |
||||
var defaultServiceOptions = []; |
||||
defaultServiceOptions.push({ value: "ramboxTab", label: "Rambox Tab" }); |
||||
defaultServiceOptions.push({ value: "last", label: "Last Active Service" }); |
||||
Ext.getStore("Services").each(function (rec) { |
||||
defaultServiceOptions.push({ |
||||
value: rec.get("id"), |
||||
label: rec.get("name"), |
||||
}); |
||||
}); |
||||
|
||||
this.items = [ |
||||
{ |
||||
xtype: 'form' |
||||
,bodyPadding: 20 |
||||
,items: [ |
||||
{ |
||||
xtype: 'container' |
||||
,layout: 'hbox' |
||||
,items: [ |
||||
{ |
||||
xtype: 'combo' |
||||
,name: 'locale' |
||||
,fieldLabel: 'Language' |
||||
,labelAlign: 'left' |
||||
,flex: 1 |
||||
,labelWidth: 80 |
||||
,value: config.locale |
||||
,displayField: 'label' |
||||
,valueField: 'value' |
||||
,editable: false |
||||
,store: Ext.create('Ext.data.Store', { |
||||
fields: ['value', 'label'] |
||||
,data: [ |
||||
{ 'value': 'af', 'auth0': 'af', 'label': 'Afrikaans' } |
||||
,{ 'value': 'ar', 'auth0': 'en', 'label': 'Arabic' } |
||||
,{ 'value': 'bs2', 'auth0': 'en', 'label': 'Barndutsch, Switzerland' } |
||||
,{ 'value': 'bn', 'auth0': 'en', 'label': 'Bengali' } |
||||
,{ 'value': 'bg', 'auth0': 'en', 'label': 'Bulgarian' } |
||||
,{ 'value': 'ca', 'auth0': 'ca', 'label': 'Catalan' } |
||||
,{ 'value': 'ceb', 'auth0': 'en', 'label': 'Cebuano' } |
||||
,{ 'value': 'zh-CN', 'auth0': 'zh', 'label': 'Chinese Simplified' } |
||||
,{ 'value': 'zh-TW', 'auth0': 'zh-tw', 'label': 'Chinese Traditional' } |
||||
,{ 'value': 'hr', 'auth0': 'en', 'label': 'Croatian' } |
||||
,{ 'value': 'cs', 'auth0': 'cs', 'label': 'Czech' } |
||||
,{ 'value': 'da', 'auth0': 'da', 'label': 'Danish' } |
||||
,{ 'value': 'nl', 'auth0': 'nl', 'label': 'Dutch' } |
||||
,{ 'value': 'en', 'auth0': 'en', 'label': 'English' } |
||||
,{ 'value': 'fi', 'auth0': 'fi', 'label': 'Finnish' } |
||||
,{ 'value': 'fil', 'auth0': 'en', 'label': 'Filipino' } |
||||
,{ 'value': 'fr', 'auth0': 'fr', 'label': 'French' } |
||||
,{ 'value': 'de', 'auth0': 'de', 'label': 'German' } |
||||
,{ 'value': 'de-CH', 'auth0': 'de', 'label': 'German, Switzerland' } |
||||
,{ 'value': 'el', 'auth0': 'el', 'label': 'Greek' } |
||||
,{ 'value': 'he', 'auth0': 'en', 'label': 'Hebrew' } |
||||
,{ 'value': 'hi', 'auth0': 'en', 'label': 'Hindi' } |
||||
,{ 'value': 'hu', 'auth0': 'hu', 'label': 'Hungarian' } |
||||
,{ 'value': 'id', 'auth0': 'en', 'label': 'Indonesian' } |
||||
,{ 'value': 'it', 'auth0': 'it', 'label': 'Italian' } |
||||
,{ 'value': 'ja', 'auth0': 'ja', 'label': 'Japanese' } |
||||
,{ 'value': 'ko', 'auth0': 'ko', 'label': 'Korean' } |
||||
,{ 'value': 'no', 'auth0': 'no', 'label': 'Norwegian' } |
||||
,{ 'value': 'fa', 'auth0': 'fa', 'label': 'Persian' } |
||||
,{ 'value': 'pl', 'auth0': 'pl', 'label': 'Polish' } |
||||
,{ 'value': 'pt-PT', 'auth0': 'pt-br', 'label': 'Portuguese' } |
||||
,{ 'value': 'pt-BR', 'auth0': 'pt-br', 'label': 'Portuguese (Brazilian)' } |
||||
,{ 'value': 'ro', 'auth0': 'ro', 'label': 'Romanian' } |
||||
,{ 'value': 'ru', 'auth0': 'ru', 'label': 'Russian' } |
||||
,{ 'value': 'sr', 'auth0': 'en', 'label': 'Serbian (Cyrillic)' } |
||||
,{ 'value': 'sk', 'auth0': 'sk', 'label': 'Slovak' } |
||||
,{ 'value': 'es-ES', 'auth0': 'es', 'label': 'Spanish' } |
||||
,{ 'value': 'sv-SE', 'auth0': 'sv', 'label': 'Swedish' } |
||||
,{ 'value': 'tl', 'auth0': 'en', 'label': 'Tagalog' } |
||||
,{ 'value': 'th', 'auth0': 'en', 'label': 'Thai' } |
||||
,{ 'value': 'tr', 'auth0': 'tr', 'label': 'Turkish' } |
||||
,{ 'value': 'uk', 'auth0': 'en', 'label': 'Ukrainian' } |
||||
,{ 'value': 'ur-PK', 'auth0': 'en', 'label': 'Urdu (Pakistan)' } |
||||
,{ 'value': 'vi', 'auth0': 'en', 'label': 'Vietnamese' } |
||||
] |
||||
}) |
||||
} |
||||
,{ |
||||
xtype: 'button' |
||||
,text: 'Help us Translate' |
||||
,style: 'border-top-left-radius:0;border-bottom-left-radius:0;' |
||||
,href: 'https://crowdin.com/project/rambox/invite' |
||||
} |
||||
] |
||||
} |
||||
,{ |
||||
xtype: 'label' |
||||
,text: 'English is the only language that has full translation. We are working with all the others, help us!' |
||||
,style: 'display:block;font-size:10px;line-height:15px;' |
||||
,margin: '0 0 10 0' |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'auto_launch' |
||||
,boxLabel: locale['preferences[5]'] |
||||
,value: config.auto_launch |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'start_minimized' |
||||
,boxLabel: locale['preferences[4]'] |
||||
,value: config.start_minimized |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'darkreader' |
||||
,boxLabel: locale['preferences[29]'] |
||||
,value: config.darkreader |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'hide_menu_bar' |
||||
,boxLabel: locale['preferences[1]']+' (<code>Alt</code> key to display)' |
||||
,value: config.hide_menu_bar |
||||
,hidden: process.platform === 'darwin' |
||||
} |
||||
,{ |
||||
xtype: 'combo' |
||||
,name: 'tabbar_location' |
||||
,fieldLabel: locale['preferences[11]'] |
||||
,labelAlign: 'left' |
||||
,width: 380 |
||||
,labelWidth: 180 |
||||
,value: config.tabbar_location |
||||
,displayField: 'label' |
||||
,valueField: 'value' |
||||
,editable: false |
||||
,store: Ext.create('Ext.data.Store', { |
||||
fields: ['value', 'label'] |
||||
,data: [ |
||||
{ 'value': 'top', 'label': 'Top' } |
||||
,{ 'value': 'left', 'label': 'Left' } |
||||
,{ 'value': 'bottom', 'label': 'Bottom' } |
||||
,{ 'value': 'right', 'label': 'Right' } |
||||
] |
||||
}) |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'hide_tabbar_labels' |
||||
,boxLabel: locale['preferences[28]'] |
||||
,value: config.hide_tabbar_labels |
||||
} |
||||
,{ |
||||
xtype: 'combo' |
||||
,name: 'default_service' |
||||
,fieldLabel: locale['preferences[12]'] |
||||
,labelAlign: 'top' |
||||
//,width: 380
|
||||
//,labelWidth: 105
|
||||
,value: config.default_service |
||||
,displayField: 'label' |
||||
,valueField: 'value' |
||||
,editable: false |
||||
,store: Ext.create('Ext.data.Store', { |
||||
fields: ['value', 'label'] |
||||
,data: defaultServiceOptions |
||||
}) |
||||
} |
||||
,{ |
||||
xtype: 'combo' |
||||
,name: 'window_display_behavior' |
||||
,fieldLabel: locale['preferences[13]'] |
||||
,labelAlign: 'left' |
||||
,width: 380 |
||||
,labelWidth: 105 |
||||
,value: config.window_display_behavior |
||||
,displayField: 'label' |
||||
,valueField: 'value' |
||||
,editable: false |
||||
,store: Ext.create('Ext.data.Store', { |
||||
fields: ['value', 'label'] |
||||
,data: [ |
||||
{ 'value': 'show_taskbar', 'label': locale['preferences[14]'] } |
||||
,{ 'value': 'show_trayIcon', 'label': locale['preferences[15]'] } |
||||
,{ 'value': 'taskbar_tray', 'label': locale['preferences[16]'] } |
||||
] |
||||
}) |
||||
,hidden: process.platform === 'darwin' |
||||
} |
||||
,{ |
||||
xtype: 'combo' |
||||
,name: 'window_close_behavior' |
||||
,fieldLabel: locale['preferences[17]'] |
||||
,labelAlign: 'left' |
||||
,width: 380 |
||||
,labelWidth: 180 |
||||
,value: config.window_close_behavior |
||||
,displayField: 'label' |
||||
,valueField: 'value' |
||||
,editable: false |
||||
,store: Ext.create('Ext.data.Store', { |
||||
fields: ['value', 'label'] |
||||
,data: [ |
||||
{ 'value': 'keep_in_tray', 'label': locale['preferences[18]'] } |
||||
,{ 'value': 'keep_in_tray_and_taskbar', 'label': locale['preferences[19]'] } |
||||
,{ 'value': 'quit', 'label': locale['preferences[20]'] } |
||||
] |
||||
}) |
||||
,hidden: process.platform === 'darwin' |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'always_on_top' |
||||
,boxLabel: locale['preferences[21]'] |
||||
,value: config.always_on_top |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'systemtray_indicator' |
||||
,boxLabel: locale['preferences[22]'] |
||||
,value: config.systemtray_indicator |
||||
,hidden: process.platform === 'darwin' |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'flash_frame' |
||||
,boxLabel: process.platform === 'darwin' ? locale['preferences[10]'] : locale['preferences[9]'] |
||||
,value: config.flash_frame |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'disable_gpu' |
||||
,boxLabel: locale['preferences[23]'] |
||||
,value: config.disable_gpu |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'enable_hidpi_support' |
||||
,boxLabel: locale['preferences[8]'] |
||||
,value: config.enable_hidpi_support |
||||
,hidden: process.platform !== 'win32' |
||||
}, |
||||
{ |
||||
xtype: 'textfield' |
||||
,fieldLabel: 'Override User-Agent for all services (needs to relaunch)' |
||||
,labelAlign: 'top' |
||||
,name: 'user_agent' |
||||
,value: config.user_agent |
||||
,width: 360 |
||||
,emptyText: 'Leave blank for default user agent' |
||||
} |
||||
,{ |
||||
xtype: 'fieldset' |
||||
,title: locale['preferences[24]'] |
||||
,collapsed: !config.master_password |
||||
,checkboxToggle: true |
||||
,checkboxName: 'master_password' |
||||
,margin: '10 0 0 0' |
||||
,padding: 10 |
||||
,layout: 'hbox' |
||||
,defaults: { labelAlign: 'top' } |
||||
,items: [ |
||||
{ |
||||
xtype: 'textfield' |
||||
,inputType: 'password' |
||||
,fieldLabel: locale['preferences[25]'] |
||||
,name: 'master_password1' |
||||
,itemId: 'pass' |
||||
,flex: 1 |
||||
,listeners: { |
||||
validitychange: function(field) { |
||||
field.next().validate(); |
||||
}, |
||||
blur: function(field) { |
||||
field.next().validate(); |
||||
} |
||||
} |
||||
} |
||||
,{ |
||||
xtype: 'textfield' |
||||
,inputType: 'password' |
||||
,fieldLabel: locale['preferences[26]'] |
||||
,name: 'master_password2' |
||||
,margin: '0 0 0 10' |
||||
,vtype: 'password' |
||||
,initialPassField: 'pass' |
||||
,flex: 1 |
||||
} |
||||
] |
||||
} |
||||
,{ |
||||
xtype: 'fieldset' |
||||
,title: 'Proxy (needs to relaunch) - <a href="https://github.com/saenzramiro/rambox/wiki/FREE-PROXY-SERVERS" target="_blank">Free Proxy Servers</a>' |
||||
,collapsed: !config.proxy |
||||
,checkboxToggle: true |
||||
,checkboxName: 'proxy' |
||||
,margin: '10 0 0 0' |
||||
,padding: 10 |
||||
,layout: 'vbox' |
||||
,defaults: { labelAlign: 'left' } |
||||
,items: [ |
||||
{ |
||||
xtype: 'textfield' |
||||
,vtype: 'url' |
||||
,fieldLabel: 'Host' |
||||
,name: 'proxyHost' |
||||
,value: config.proxyHost |
||||
//,flex: 1
|
||||
} |
||||
,{ |
||||
xtype: 'numberfield' |
||||
,fieldLabel: 'Port' |
||||
,name: 'proxyPort' |
||||
,value: config.proxyPort |
||||
} |
||||
,{ |
||||
xtype: 'textfield' |
||||
,fieldLabel: 'Login' |
||||
,name: 'proxyLogin' |
||||
,value: config.proxyLogin |
||||
,emptyText: 'Optional' |
||||
} |
||||
,{ |
||||
xtype: 'textfield' |
||||
,fieldLabel: 'Password' |
||||
,name: 'proxyPassword' |
||||
,value: config.proxyPassword |
||||
,emptyText: 'Optional' |
||||
,inputType: 'password' |
||||
} |
||||
] |
||||
} |
||||
,{ |
||||
xtype: 'checkbox' |
||||
,name: 'sendStatistics' |
||||
,boxLabel: locale['preferences[27]'] |
||||
,value: config.sendStatistics |
||||
} |
||||
] |
||||
} |
||||
]; |
||||
this.items = [ |
||||
{ |
||||
xtype: "form", |
||||
bodyPadding: 20, |
||||
items: [ |
||||
{ |
||||
xtype: "container", |
||||
layout: "hbox", |
||||
items: [ |
||||
{ |
||||
xtype: "combo", |
||||
name: "locale", |
||||
fieldLabel: "Language", |
||||
labelAlign: "left", |
||||
flex: 1, |
||||
labelWidth: 80, |
||||
value: config.locale, |
||||
displayField: "label", |
||||
valueField: "value", |
||||
editable: false, |
||||
store: Ext.create("Ext.data.Store", { |
||||
fields: ["value", "label"], |
||||
data: [ |
||||
{ value: "af", auth0: "af", label: "Afrikaans" }, |
||||
{ value: "ar", auth0: "en", label: "Arabic" }, |
||||
{ |
||||
value: "bs2", |
||||
auth0: "en", |
||||
label: "Barndutsch, Switzerland", |
||||
}, |
||||
{ value: "bn", auth0: "en", label: "Bengali" }, |
||||
{ value: "bg", auth0: "en", label: "Bulgarian" }, |
||||
{ value: "ca", auth0: "ca", label: "Catalan" }, |
||||
{ value: "ceb", auth0: "en", label: "Cebuano" }, |
||||
{ |
||||
value: "zh-CN", |
||||
auth0: "zh", |
||||
label: "Chinese Simplified", |
||||
}, |
||||
{ |
||||
value: "zh-TW", |
||||
auth0: "zh-tw", |
||||
label: "Chinese Traditional", |
||||
}, |
||||
{ value: "hr", auth0: "en", label: "Croatian" }, |
||||
{ value: "cs", auth0: "cs", label: "Czech" }, |
||||
{ value: "da", auth0: "da", label: "Danish" }, |
||||
{ value: "nl", auth0: "nl", label: "Dutch" }, |
||||
{ value: "en", auth0: "en", label: "English" }, |
||||
{ value: "fi", auth0: "fi", label: "Finnish" }, |
||||
{ value: "fil", auth0: "en", label: "Filipino" }, |
||||
{ value: "fr", auth0: "fr", label: "French" }, |
||||
{ value: "de", auth0: "de", label: "German" }, |
||||
{ |
||||
value: "de-CH", |
||||
auth0: "de", |
||||
label: "German, Switzerland", |
||||
}, |
||||
{ value: "el", auth0: "el", label: "Greek" }, |
||||
{ value: "he", auth0: "en", label: "Hebrew" }, |
||||
{ value: "hi", auth0: "en", label: "Hindi" }, |
||||
{ value: "hu", auth0: "hu", label: "Hungarian" }, |
||||
{ value: "id", auth0: "en", label: "Indonesian" }, |
||||
{ value: "it", auth0: "it", label: "Italian" }, |
||||
{ value: "ja", auth0: "ja", label: "Japanese" }, |
||||
{ value: "ko", auth0: "ko", label: "Korean" }, |
||||
{ value: "no", auth0: "no", label: "Norwegian" }, |
||||
{ value: "fa", auth0: "fa", label: "Persian" }, |
||||
{ value: "pl", auth0: "pl", label: "Polish" }, |
||||
{ value: "pt-PT", auth0: "pt-br", label: "Portuguese" }, |
||||
{ |
||||
value: "pt-BR", |
||||
auth0: "pt-br", |
||||
label: "Portuguese (Brazilian)", |
||||
}, |
||||
{ value: "ro", auth0: "ro", label: "Romanian" }, |
||||
{ value: "ru", auth0: "ru", label: "Russian" }, |
||||
{ value: "sr", auth0: "en", label: "Serbian (Cyrillic)" }, |
||||
{ value: "sk", auth0: "sk", label: "Slovak" }, |
||||
{ value: "es-ES", auth0: "es", label: "Spanish" }, |
||||
{ value: "sv-SE", auth0: "sv", label: "Swedish" }, |
||||
{ value: "tl", auth0: "en", label: "Tagalog" }, |
||||
{ value: "th", auth0: "en", label: "Thai" }, |
||||
{ value: "tr", auth0: "tr", label: "Turkish" }, |
||||
{ value: "uk", auth0: "en", label: "Ukrainian" }, |
||||
{ value: "ur-PK", auth0: "en", label: "Urdu (Pakistan)" }, |
||||
{ value: "vi", auth0: "en", label: "Vietnamese" }, |
||||
], |
||||
}), |
||||
}, |
||||
{ |
||||
xtype: "button", |
||||
text: "Help us Translate", |
||||
style: "border-top-left-radius:0;border-bottom-left-radius:0;", |
||||
href: "https://crowdin.com/project/rambox/invite", |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
xtype: "label", |
||||
text: |
||||
"English is the only language that has full translation. We are working with all the others, help us!", |
||||
style: "display:block;font-size:10px;line-height:15px;", |
||||
margin: "0 0 10 0", |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "auto_launch", |
||||
boxLabel: locale["preferences[5]"], |
||||
value: config.auto_launch, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "start_minimized", |
||||
boxLabel: locale["preferences[4]"], |
||||
value: config.start_minimized, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "darkreader", |
||||
boxLabel: locale["preferences[29]"], |
||||
value: config.darkreader, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "hide_menu_bar", |
||||
boxLabel: |
||||
locale["preferences[1]"] + " (<code>Alt</code> key to display)", |
||||
value: config.hide_menu_bar, |
||||
hidden: process.platform === "darwin", |
||||
}, |
||||
{ |
||||
xtype: "combo", |
||||
name: "tabbar_location", |
||||
fieldLabel: locale["preferences[11]"], |
||||
labelAlign: "left", |
||||
width: 380, |
||||
labelWidth: 180, |
||||
value: config.tabbar_location, |
||||
displayField: "label", |
||||
valueField: "value", |
||||
editable: false, |
||||
store: Ext.create("Ext.data.Store", { |
||||
fields: ["value", "label"], |
||||
data: [ |
||||
{ value: "top", label: "Top" }, |
||||
{ value: "left", label: "Left" }, |
||||
{ value: "bottom", label: "Bottom" }, |
||||
{ value: "right", label: "Right" }, |
||||
], |
||||
}), |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "hide_tabbar_labels", |
||||
boxLabel: locale["preferences[28]"], |
||||
value: config.hide_tabbar_labels, |
||||
}, |
||||
{ |
||||
xtype: "combo", |
||||
name: "default_service", |
||||
fieldLabel: locale["preferences[12]"], |
||||
labelAlign: "top", |
||||
//,width: 380
|
||||
//,labelWidth: 105
|
||||
value: config.default_service, |
||||
displayField: "label", |
||||
valueField: "value", |
||||
editable: false, |
||||
store: Ext.create("Ext.data.Store", { |
||||
fields: ["value", "label"], |
||||
data: defaultServiceOptions, |
||||
}), |
||||
}, |
||||
{ |
||||
xtype: "combo", |
||||
name: "window_display_behavior", |
||||
fieldLabel: locale["preferences[13]"], |
||||
labelAlign: "left", |
||||
width: 380, |
||||
labelWidth: 105, |
||||
value: config.window_display_behavior, |
||||
displayField: "label", |
||||
valueField: "value", |
||||
editable: false, |
||||
store: Ext.create("Ext.data.Store", { |
||||
fields: ["value", "label"], |
||||
data: [ |
||||
{ value: "show_taskbar", label: locale["preferences[14]"] }, |
||||
{ value: "show_trayIcon", label: locale["preferences[15]"] }, |
||||
{ value: "taskbar_tray", label: locale["preferences[16]"] }, |
||||
], |
||||
}), |
||||
hidden: process.platform === "darwin", |
||||
}, |
||||
{ |
||||
xtype: "combo", |
||||
name: "window_close_behavior", |
||||
fieldLabel: locale["preferences[17]"], |
||||
labelAlign: "left", |
||||
width: 380, |
||||
labelWidth: 180, |
||||
value: config.window_close_behavior, |
||||
displayField: "label", |
||||
valueField: "value", |
||||
editable: false, |
||||
store: Ext.create("Ext.data.Store", { |
||||
fields: ["value", "label"], |
||||
data: [ |
||||
{ value: "keep_in_tray", label: locale["preferences[18]"] }, |
||||
{ |
||||
value: "keep_in_tray_and_taskbar", |
||||
label: locale["preferences[19]"], |
||||
}, |
||||
{ value: "quit", label: locale["preferences[20]"] }, |
||||
], |
||||
}), |
||||
hidden: process.platform === "darwin", |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "always_on_top", |
||||
boxLabel: locale["preferences[21]"], |
||||
value: config.always_on_top, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "systemtray_indicator", |
||||
boxLabel: locale["preferences[22]"], |
||||
value: config.systemtray_indicator, |
||||
hidden: process.platform === "darwin", |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "flash_frame", |
||||
boxLabel: |
||||
process.platform === "darwin" |
||||
? locale["preferences[10]"] |
||||
: locale["preferences[9]"], |
||||
value: config.flash_frame, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "disable_gpu", |
||||
boxLabel: locale["preferences[23]"], |
||||
value: config.disable_gpu, |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "enable_hidpi_support", |
||||
boxLabel: locale["preferences[8]"], |
||||
value: config.enable_hidpi_support, |
||||
hidden: process.platform !== "win32", |
||||
}, |
||||
{ |
||||
xtype: "textfield", |
||||
fieldLabel: |
||||
"Override User-Agent for all services (needs to relaunch)", |
||||
labelAlign: "top", |
||||
name: "user_agent", |
||||
value: config.user_agent, |
||||
width: 360, |
||||
emptyText: "Leave blank for default user agent", |
||||
}, |
||||
{ |
||||
xtype: "fieldset", |
||||
title: locale["preferences[24]"], |
||||
collapsed: !config.master_password, |
||||
checkboxToggle: true, |
||||
checkboxName: "master_password", |
||||
margin: "10 0 0 0", |
||||
padding: 10, |
||||
layout: "hbox", |
||||
defaults: { labelAlign: "top" }, |
||||
items: [ |
||||
{ |
||||
xtype: "textfield", |
||||
inputType: "password", |
||||
fieldLabel: locale["preferences[25]"], |
||||
name: "master_password1", |
||||
itemId: "pass", |
||||
flex: 1, |
||||
listeners: { |
||||
validitychange: function (field) { |
||||
field.next().validate(); |
||||
}, |
||||
blur: function (field) { |
||||
field.next().validate(); |
||||
}, |
||||
}, |
||||
}, |
||||
{ |
||||
xtype: "textfield", |
||||
inputType: "password", |
||||
fieldLabel: locale["preferences[26]"], |
||||
name: "master_password2", |
||||
margin: "0 0 0 10", |
||||
vtype: "password", |
||||
initialPassField: "pass", |
||||
flex: 1, |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
xtype: "fieldset", |
||||
title: |
||||
'Proxy (needs to relaunch) - <a href="https://github.com/saenzramiro/rambox/wiki/FREE-PROXY-SERVERS" target="_blank">Free Proxy Servers</a>', |
||||
collapsed: !config.proxy, |
||||
checkboxToggle: true, |
||||
checkboxName: "proxy", |
||||
margin: "10 0 0 0", |
||||
padding: 10, |
||||
layout: "vbox", |
||||
defaults: { labelAlign: "left" }, |
||||
items: [ |
||||
{ |
||||
xtype: "textfield", |
||||
vtype: "url", |
||||
fieldLabel: "Host", |
||||
name: "proxyHost", |
||||
value: config.proxyHost, |
||||
//,flex: 1
|
||||
}, |
||||
{ |
||||
xtype: "numberfield", |
||||
fieldLabel: "Port", |
||||
name: "proxyPort", |
||||
value: config.proxyPort, |
||||
}, |
||||
{ |
||||
xtype: "textfield", |
||||
fieldLabel: "Login", |
||||
name: "proxyLogin", |
||||
value: config.proxyLogin, |
||||
emptyText: "Optional", |
||||
}, |
||||
{ |
||||
xtype: "textfield", |
||||
fieldLabel: "Password", |
||||
name: "proxyPassword", |
||||
value: config.proxyPassword, |
||||
emptyText: "Optional", |
||||
inputType: "password", |
||||
}, |
||||
], |
||||
}, |
||||
{ |
||||
xtype: "checkbox", |
||||
name: "sendStatistics", |
||||
boxLabel: locale["preferences[27]"], |
||||
value: config.sendStatistics, |
||||
}, |
||||
], |
||||
}, |
||||
]; |
||||
|
||||
this.callParent(); |
||||
} |
||||
this.callParent(); |
||||
}, |
||||
}); |
||||
|
@ -1,241 +1,241 @@
|
||||
{ |
||||
"name": "Rambox", |
||||
"productName": "Rambox", |
||||
"version": "0.7.9", |
||||
"description": "Free and Open Source messaging and emailing app that combines common web applications into one.", |
||||
"main": "electron/main.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/ramboxapp/community-edition.git" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/ramboxapp/community-edition/issues" |
||||
}, |
||||
"homepage": "https://rambox.app", |
||||
"keywords": [ |
||||
"Rambox", |
||||
"messaging", |
||||
"app", |
||||
"slack", |
||||
"whatsapp", |
||||
"facebook", |
||||
"messenger", |
||||
"telegram", |
||||
"google", |
||||
"hangouts", |
||||
"skype" |
||||
], |
||||
"author": "Rambox LLC <[email protected]>", |
||||
"license": "GPL-3.0", |
||||
"scripts": { |
||||
"start": "electron electron/main.js", |
||||
"start:debug": "electron electron/main.js --enable-logging", |
||||
"dev": "electron electron/main.js", |
||||
"test": "./node_modules/.bin/mocha test/tests/**/*.spec.js", |
||||
"sencha:clean": "rm -rf ./build/production", |
||||
"sencha:compile": "sencha app build && npm --prefix ./build/production/Rambox/ install ./build/production/Rambox/", |
||||
"sencha:compile:build": "sencha app build", |
||||
"clean": "rm -rf ./dist", |
||||
"clean:osx": "rm -rf ./dist/Rambox-darwin-*", |
||||
"clean:win": "rm -rf ./dist/Rambox-win32-*", |
||||
"pack": "npm run pack:osx && npm run pack:win", |
||||
"pack:osx": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=darwin --arch=x64 --icon=resources/installer/Icon.icns --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:win": "npm run pack:win32 && npm run pack:win64", |
||||
"pack:win32": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=win32 --arch=ia32 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=32-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:win64": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=win32 --arch=x64 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:linux": "npm run pack:linux32 && npm run pack:linux64", |
||||
"pack:linux32": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=linux --arch=ia32 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:linux64": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=linux --arch=x64 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"build": "npm run build:linux && npm run build:osx && npm run build:win", |
||||
"build:osx": "electron-builder --macos", |
||||
"build:linux": "electron-builder --linux --publish=onTagOrDraft", |
||||
"build:linux32": "electron-builder --linux --ia32 --publish=onTagOrDraft", |
||||
"build:linux64": "electron-builder --linux --x64 --publish=onTagOrDraft", |
||||
"build:win": "electron-builder --win --ia32 --x64", |
||||
"build:win32": "electron-builder --win --ia32", |
||||
"build:win64": "electron-builder --win --x64", |
||||
"setup:osx": "npm run sencha:clean && npm run sencha:compile && npm run clean:osx && npm run pack:osx && npm run build:osx", |
||||
"setup:win": "npm run sencha:clean && npm run sencha:compile && npm run clean:win && npm run pack:win && npm run build:win", |
||||
"all:win": "npm run sencha:clean && npm run sencha:compile && npm run clean:win && npm run pack:win && npm run zip:win32 && npm run zip:win64 && npm run build:win", |
||||
"all:linux": "npm run sencha:clean && npm run sencha:compile && npm run build:linux", |
||||
"translations:download": "node languages.js download", |
||||
"translations:generate": "node languages.js generate" |
||||
}, |
||||
"build": { |
||||
"productName": "Rambox", |
||||
"appId": "com.grupovrs.ramboxce", |
||||
"afterSign": "resources/installer/notarize.js", |
||||
"asar": true, |
||||
"electronVersion": "11.4.10", |
||||
"electronDownload": { |
||||
"version": "11.4.10" |
||||
}, |
||||
"mac": { |
||||
"category": "public.app-category.productivity", |
||||
"artifactName": "Rambox-${version}-mac.${ext}", |
||||
"target": [ |
||||
"default" |
||||
], |
||||
"hardenedRuntime": true, |
||||
"gatekeeperAssess": false, |
||||
"entitlements": "resources/installer/entitlements.mac.plist", |
||||
"entitlementsInherit": "resources/installer/entitlements.mac.plist", |
||||
"extendInfo": { |
||||
"NSMicrophoneUsageDescription": "Apps inside Rambox CE may need access to your microphone. Please, grant access to have a better experience.", |
||||
"NSCameraUsageDescription": "Apps inside Rambox CE may need access to your camera. Please, grant access to have a better experience." |
||||
} |
||||
}, |
||||
"dmg": { |
||||
"title": "Rambox", |
||||
"iconSize": 128, |
||||
"sign": false, |
||||
"contents": [ |
||||
{ |
||||
"x": 355, |
||||
"y": 125, |
||||
"type": "link", |
||||
"path": "/Applications" |
||||
}, |
||||
{ |
||||
"x": 155, |
||||
"y": 125, |
||||
"type": "file" |
||||
} |
||||
] |
||||
}, |
||||
"win": { |
||||
"publisherName": "Rambox LLC", |
||||
"artifactName": "Rambox-${version}-win-${arch}.${ext}", |
||||
"target": [ |
||||
"nsis", |
||||
"zip" |
||||
] |
||||
}, |
||||
"nsis": { |
||||
"deleteAppDataOnUninstall": true, |
||||
"oneClick": false, |
||||
"perMachine": false, |
||||
"runAfterFinish": true |
||||
}, |
||||
"snap": { |
||||
"publish": [ |
||||
{ |
||||
"provider": "github" |
||||
} |
||||
], |
||||
"plugs": [ |
||||
"default", |
||||
"camera", |
||||
"audio-record", |
||||
"audio-playback", |
||||
"removable-media", |
||||
"raw-usb", |
||||
"u2f-devices", |
||||
"cups-control" |
||||
] |
||||
}, |
||||
"linux": { |
||||
"icon": "resources/installer/icons", |
||||
"category": "Network", |
||||
"desktop": { |
||||
"Terminal": "false", |
||||
"Type": "Application", |
||||
"Categories": "GTK;GNOME;Network;Email;Chat;InstantMessaging;" |
||||
}, |
||||
"artifactName": "Rambox-${version}-linux-${arch}.${ext}", |
||||
"executableArgs": [ |
||||
"--no-sandbox" |
||||
], |
||||
"target": [ |
||||
{ |
||||
"target": "snap", |
||||
"arch": [ |
||||
"x64" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "AppImage", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "deb", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "rpm", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "zip", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "tar.gz", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
} |
||||
] |
||||
}, |
||||
"directories": { |
||||
"buildResources": "resources/installer/", |
||||
"output": "dist/" |
||||
}, |
||||
"publish": [ |
||||
{ |
||||
"provider": "github", |
||||
"owner": "ramboxapp", |
||||
"repo": "community-edition", |
||||
"vPrefixedTagName": false |
||||
} |
||||
] |
||||
}, |
||||
"devDependencies": { |
||||
"asar": "0.12.4", |
||||
"chai": "3.5.0", |
||||
"crowdin": "1.0.0", |
||||
"csvjson": "4.3.3", |
||||
"electron": "11.4.10", |
||||
"electron-builder": "22.9.1", |
||||
"electron-notarize": "1.0.0", |
||||
"electron-packager": "15.1.0", |
||||
"mocha": "5.2.0", |
||||
"spectron": "3.8.0" |
||||
}, |
||||
"dependencies": { |
||||
"@exponent/electron-cookies": "2.0.0", |
||||
"auth0-js": "9.13.2", |
||||
"auto-launch-patched": "5.0.2", |
||||
"crypto": "1.0.1", |
||||
"darkreader": "4.9.17", |
||||
"diskusage": "1.1.3", |
||||
"electron-contextmenu-wrapper": "git+https://github.com/ramboxapp/electron-contextmenu-wrapper.git", |
||||
"electron-is-dev": "0.3.0", |
||||
"electron-log": "2.2.17", |
||||
"electron-store": "6.0.0", |
||||
"electron-updater": "4.1.2", |
||||
"is-online": "8.2.0", |
||||
"mime": "2.3.1", |
||||
"mousetrap": "1.6.3", |
||||
"request": "2.88.0", |
||||
"request-promise": "4.2.2", |
||||
"rimraf": "2.6.1", |
||||
"tmp": "0.0.28" |
||||
}, |
||||
"volta": { |
||||
"node": "14.16.1" |
||||
} |
||||
"name": "Rambox", |
||||
"productName": "Rambox", |
||||
"version": "0.7.9", |
||||
"description": "Free and Open Source messaging and emailing app that combines common web applications into one.", |
||||
"main": "electron/main.js", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "https://github.com/ramboxapp/community-edition.git" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/ramboxapp/community-edition/issues" |
||||
}, |
||||
"homepage": "https://rambox.app", |
||||
"keywords": [ |
||||
"Rambox", |
||||
"messaging", |
||||
"app", |
||||
"slack", |
||||
"whatsapp", |
||||
"facebook", |
||||
"messenger", |
||||
"telegram", |
||||
"google", |
||||
"hangouts", |
||||
"skype" |
||||
], |
||||
"author": "Rambox LLC <[email protected]>", |
||||
"license": "GPL-3.0", |
||||
"scripts": { |
||||
"start": "electron electron/main.js", |
||||
"start:debug": "electron electron/main.js --enable-logging", |
||||
"dev": "electron electron/main.js", |
||||
"test": "./node_modules/.bin/mocha test/tests/**/*.spec.js", |
||||
"sencha:clean": "rm -rf ./build/production", |
||||
"sencha:compile": "sencha app build && npm --prefix ./build/production/Rambox/ install ./build/production/Rambox/", |
||||
"sencha:compile:build": "sencha app build", |
||||
"clean": "rm -rf ./dist", |
||||
"clean:osx": "rm -rf ./dist/Rambox-darwin-*", |
||||
"clean:win": "rm -rf ./dist/Rambox-win32-*", |
||||
"pack": "npm run pack:osx && npm run pack:win", |
||||
"pack:osx": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=darwin --arch=x64 --icon=resources/installer/Icon.icns --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:win": "npm run pack:win32 && npm run pack:win64", |
||||
"pack:win32": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=win32 --arch=ia32 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=32-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:win64": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=win32 --arch=x64 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:linux": "npm run pack:linux32 && npm run pack:linux64", |
||||
"pack:linux32": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=linux --arch=ia32 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"pack:linux64": "electron-packager \"./build/production/Rambox/\" \"Rambox\" --out=dist --platform=linux --arch=x64 --icon=resources/installer/Icon.ico --app-version=0.2.0 --build-version=64-bit --version-string.CompanyName=\"Rambox\" --version-string.ProductName=\"Rambox\" --asar --prune --overwrite", |
||||
"build": "npm run build:linux && npm run build:osx && npm run build:win", |
||||
"build:osx": "electron-builder --macos", |
||||
"build:linux": "electron-builder --linux --publish=onTagOrDraft", |
||||
"build:linux32": "electron-builder --linux --ia32 --publish=onTagOrDraft", |
||||
"build:linux64": "electron-builder --linux --x64 --publish=onTagOrDraft", |
||||
"build:win": "electron-builder --win --ia32 --x64", |
||||
"build:win32": "electron-builder --win --ia32", |
||||
"build:win64": "electron-builder --win --x64", |
||||
"setup:osx": "npm run sencha:clean && npm run sencha:compile && npm run clean:osx && npm run pack:osx && npm run build:osx", |
||||
"setup:win": "npm run sencha:clean && npm run sencha:compile && npm run clean:win && npm run pack:win && npm run build:win", |
||||
"all:win": "npm run sencha:clean && npm run sencha:compile && npm run clean:win && npm run pack:win && npm run zip:win32 && npm run zip:win64 && npm run build:win", |
||||
"all:linux": "npm run sencha:clean && npm run sencha:compile && npm run build:linux", |
||||
"translations:download": "node languages.js download", |
||||
"translations:generate": "node languages.js generate" |
||||
}, |
||||
"build": { |
||||
"productName": "Rambox", |
||||
"appId": "com.grupovrs.ramboxce", |
||||
"afterSign": "resources/installer/notarize.js", |
||||
"asar": true, |
||||
"electronVersion": "11.4.10", |
||||
"electronDownload": { |
||||
"version": "11.4.10" |
||||
}, |
||||
"mac": { |
||||
"category": "public.app-category.productivity", |
||||
"artifactName": "Rambox-${version}-mac.${ext}", |
||||
"target": [ |
||||
"default" |
||||
], |
||||
"hardenedRuntime": true, |
||||
"gatekeeperAssess": false, |
||||
"entitlements": "resources/installer/entitlements.mac.plist", |
||||
"entitlementsInherit": "resources/installer/entitlements.mac.plist", |
||||
"extendInfo": { |
||||
"NSMicrophoneUsageDescription": "Apps inside Rambox CE may need access to your microphone. Please, grant access to have a better experience.", |
||||
"NSCameraUsageDescription": "Apps inside Rambox CE may need access to your camera. Please, grant access to have a better experience." |
||||
} |
||||
}, |
||||
"dmg": { |
||||
"title": "Rambox", |
||||
"iconSize": 128, |
||||
"sign": false, |
||||
"contents": [ |
||||
{ |
||||
"x": 355, |
||||
"y": 125, |
||||
"type": "link", |
||||
"path": "/Applications" |
||||
}, |
||||
{ |
||||
"x": 155, |
||||
"y": 125, |
||||
"type": "file" |
||||
} |
||||
] |
||||
}, |
||||
"win": { |
||||
"publisherName": "Rambox LLC", |
||||
"artifactName": "Rambox-${version}-win-${arch}.${ext}", |
||||
"target": [ |
||||
"nsis", |
||||
"zip" |
||||
] |
||||
}, |
||||
"nsis": { |
||||
"deleteAppDataOnUninstall": true, |
||||
"oneClick": false, |
||||
"perMachine": false, |
||||
"runAfterFinish": true |
||||
}, |
||||
"snap": { |
||||
"publish": [ |
||||
{ |
||||
"provider": "github" |
||||
} |
||||
], |
||||
"plugs": [ |
||||
"default", |
||||
"camera", |
||||
"audio-record", |
||||
"audio-playback", |
||||
"removable-media", |
||||
"raw-usb", |
||||
"u2f-devices", |
||||
"cups-control" |
||||
] |
||||
}, |
||||
"linux": { |
||||
"icon": "resources/installer/icons", |
||||
"category": "Network", |
||||
"desktop": { |
||||
"Terminal": "false", |
||||
"Type": "Application", |
||||
"Categories": "GTK;GNOME;Network;Email;Chat;InstantMessaging;" |
||||
}, |
||||
"artifactName": "Rambox-${version}-linux-${arch}.${ext}", |
||||
"executableArgs": [ |
||||
"--no-sandbox" |
||||
], |
||||
"target": [ |
||||
{ |
||||
"target": "snap", |
||||
"arch": [ |
||||
"x64" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "AppImage", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "deb", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "rpm", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "zip", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
}, |
||||
{ |
||||
"target": "tar.gz", |
||||
"arch": [ |
||||
"x64", |
||||
"ia32" |
||||
] |
||||
} |
||||
] |
||||
}, |
||||
"directories": { |
||||
"buildResources": "resources/installer/", |
||||
"output": "dist/" |
||||
}, |
||||
"publish": [ |
||||
{ |
||||
"provider": "github", |
||||
"owner": "ramboxapp", |
||||
"repo": "community-edition", |
||||
"vPrefixedTagName": false |
||||
} |
||||
] |
||||
}, |
||||
"devDependencies": { |
||||
"asar": "0.12.4", |
||||
"chai": "3.5.0", |
||||
"crowdin": "1.0.0", |
||||
"csvjson": "4.3.3", |
||||
"electron": "11.4.10", |
||||
"electron-builder": "22.9.1", |
||||
"electron-notarize": "1.0.0", |
||||
"electron-packager": "15.1.0", |
||||
"mocha": "5.2.0", |
||||
"spectron": "3.8.0" |
||||
}, |
||||
"dependencies": { |
||||
"@exponent/electron-cookies": "2.0.0", |
||||
"auth0-js": "9.13.2", |
||||
"auto-launch-patched": "5.0.2", |
||||
"crypto": "1.0.1", |
||||
"darkreader": "4.9.17", |
||||
"diskusage": "1.1.3", |
||||
"electron-contextmenu-wrapper": "git+https://github.com/ramboxapp/electron-contextmenu-wrapper.git", |
||||
"electron-is-dev": "0.3.0", |
||||
"electron-log": "2.2.17", |
||||
"electron-store": "6.0.0", |
||||
"electron-updater": "4.1.2", |
||||
"is-online": "8.2.0", |
||||
"mime": "2.3.1", |
||||
"mousetrap": "1.6.3", |
||||
"request": "2.88.0", |
||||
"request-promise": "4.2.2", |
||||
"rimraf": "2.6.1", |
||||
"tmp": "0.0.28" |
||||
}, |
||||
"volta": { |
||||
"node": "14.16.1" |
||||
} |
||||
} |
||||
|
@ -1,14 +1,14 @@
|
||||
const { ipcRenderer } = require('electron'); |
||||
const darkreader = require('darkreader'); |
||||
const { ipcRenderer } = require("electron"); |
||||
const darkreader = require("darkreader"); |
||||
darkreader.setFetchMethod(window.fetch); |
||||
|
||||
const getIsEnabled = () => ipcRenderer.sendSync("getConfig").darkreader; |
||||
const canEnable = () => |
||||
document.readyState === "complete" || document.readyState === "interactive"; |
||||
|
||||
const getIsEnabled = () => ipcRenderer.sendSync('getConfig').darkreader;
|
||||
const canEnable = () => document.readyState === 'complete' || document.readyState === 'interactive'; |
||||
|
||||
document.addEventListener('readystatechange', () => { |
||||
console.log(document.readyState) |
||||
if (canEnable()) { |
||||
getIsEnabled()? darkreader.enable(): darkreader.disable(); |
||||
} |
||||
document.addEventListener("readystatechange", () => { |
||||
console.log(document.readyState); |
||||
if (canEnable()) { |
||||
getIsEnabled() ? darkreader.enable() : darkreader.disable(); |
||||
} |
||||
}); |
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue