|
|
- // Main file, used only for Electron
-
- var electron = require('electron'),
- fs = require('fs'),
- temp = require('tmp'),
- ini = require('ini'),
- path = require('path'),
- requirejs = require('requirejs');
-
- var app = electron.app;
- var BrowserWindow = electron.BrowserWindow;
- var Menu = electron.Menu;
- var ipc = electron.ipcMain;
- var dialog = electron.dialog;
-
- var mainWindow = null;
-
- var debug = false;
- var frameless = true;
- var reinit = false;
-
-
- // Localization features
- l10n = {
- ini: null,
- language: '*',
-
- init: function() {
- this.language = app.getLocale() || "*";
- this.ini = ini.parse(fs.readFileSync(app.getAppPath()+'/locale.ini', 'utf-8'));
- },
-
- setLanguage: function(lang) {
- this.language = lang;
- },
-
- getLanguage: function() {
- return this.language;
- },
-
- get: function(text, params) {
- var locales = this.ini[this.language];
- if (!locales) {
- locales = this.ini['*'];
- }
- if (!locales[text]) {
- return text;
- }
- var translate = locales[text];
- for (var param in params) {
- translate = translate.replace('{{'+param+'}}', params[param]);
- }
- return translate;
- }
- }
-
- // Save a file
- function saveFile(file, arg, sender) {
- var buf;
- if (arg.text) {
- buf = arg.text;
- } else {
- var data = arg.binary.replace(/^data:.+;base64,/, "");
- buf = new Buffer(data, 'base64');
- }
- fs.writeFile(file, buf, function(err) {
- sender.send('save-file-reply', {err: err, filename: file});
- });
- }
-
- // Load a file
- function LoadFile(event, file) {
- var extension = path.extname(file).substr(1);
- var fileProperty = {};
- fileProperty.name = path.basename(file);
- var extToMimetypes = {'json':'application/json','jpg':'image/jpeg','png':'image/png','wav':'audio/wav','webm':'video/webm','mp3':'audio/mp3','mp4':'video/mp4','txt':'text/plain','pdf':'application/pdf','doc':'application/msword','odt':'application/vnd.oasis.opendocument.text'};
- for (var ext in extToMimetypes) {
- if (ext == extension) {
- fileProperty.type = extToMimetypes[ext];
- break;
- }
- }
- var json = (extension == 'json' ? 'utf8' : null);
- fs.readFile(file, function(err, data) {
- var text = (json ? data : "data:"+fileProperty.type+";base64,"+data.toString('base64'));
- event.sender.send('choose-files-reply', fileProperty, err, text);
- });
- }
-
- function createWindow () {
- // Process argument
- for (var i = 0 ; i < process.argv.length ; i++) {
- if (process.argv[i] == '--debug') {
- debug = true;
- } else if (process.argv[i] == '--window') {
- frameless = false;
- } else if (process.argv[i] == '--init') {
- reinit = true;
- }
- }
-
- // Create the browser window
- mainWindow = new BrowserWindow({
- show: false,
- backgroundColor: '#FFF',
- minWidth: 640,
- minHeight: 480,
- fullscreen: frameless,
- frame: !frameless,
- webPreferences: {
- webSecurity: false,
- nodeIntegration: true
- },
- icon: './res/icon/electron/icon-1024.png'
- });
- if (process.platform === 'darwin') {
- app.dock.setIcon(app.getAppPath()+'/res/icon/electron/icon-1024.png');
- }
-
- // Load the index.html of Sugarizer
- mainWindow.loadURL('file://'+app.getAppPath()+'/index.html'+(reinit?'?rst=1':''));
- if (frameless) {
- mainWindow.maximize();
- }
-
- // Wait for 'ready-to-show' to display our window
- mainWindow.webContents.once('did-finish-load', function() {
- // Initialize locales
- l10n.init();
-
- // Handle save file dialog
- ipc.on('save-file-dialog', function(event, arg) {
- var saveFunction = function(file) {
- if (file) {
- saveFile(file, arg, event.sender);
- }
- }
- if (!arg.directory) {
- // Ask directory to use, then save
- var dialogSettings = {
- defaultPath: arg.filename,
- filters: [
- { name: arg.mimetype, extensions: [arg.extension] }
- ]
- };
- dialogSettings.title = l10n.get("SaveFile");
- dialogSettings.buttonLabel = l10n.get("Save");
- dialog.showSaveDialog(dialogSettings, saveFunction);
- } else {
- // Save in the directory provided
- saveFunction(path.join(arg.directory,arg.filename));
- }
- });
- ipc.on('choose-directory-dialog', function(event) {
- var dialogSettings = {
- properties: ['openDirectory', 'createDirectory']
- };
- dialogSettings.title = l10n.get("ChooseDirectory");
- dialogSettings.buttonLabel = l10n.get("Choose");
- dialog.showOpenDialog(dialogSettings, function(files) {
- if (files && files.length > 0) {
- event.sender.send('choose-directory-reply', files[0]);
- }
- });
- });
- ipc.on('choose-files-dialog', function(event) {
- var dialogSettings = {
- properties: ['openFile', 'multiSelections'],
- filters: [
- {name: 'Activities', extensions: ['jpg','png','json','webm','wav','mp3','mp4','pdf','txt','doc','odt']}
- ]
- };
- dialogSettings.title = l10n.get("ChooseFiles");
- dialogSettings.buttonLabel = l10n.get("Choose");
- dialogSettings.filters[0].name = l10n.get("FilesSupported");
- dialog.showOpenDialog(dialogSettings, function(files) {
- if (files && files.length > 0) {
- for (var i = 0 ; i < files.length ; i++) {
- LoadFile(event, files[i]);
- }
- }
- });
- });
- ipc.on('create-tempfile', function(event, arg) {
- temp.file('sugarizer', function(err, path, fd) {
- if (!err) {
- var data = arg.text.replace(/^data:.+;base64,/, "");
- var buf = new Buffer(data, 'base64');
- fs.writeFile(fd, buf, function(err) {
- event.sender.send('create-tempfile-reply', path);
- });
- }
- });
- });
-
- // Build menu
- var template = [];
- if (process.platform === 'darwin') {
- var appname = electron.app.getName();
- var menu = {
- label: appname,
- submenu: [{
- accelerator: 'Command+Q',
- click: function () {
- app.quit()
- }
- }]
- };
- menu.submenu[0].label = l10n.get("Quit");
- template.unshift(menu);
- }
- var menu = Menu.buildFromTemplate(template);
- Menu.setApplicationMenu(menu);
-
- // Debug console
- if (debug) {
- mainWindow.webContents.openDevTools();
- }
-
- // Show wmain window
- mainWindow.show();
- });
-
- // Emitted when the window is closed
- mainWindow.on('closed', function() {
- mainWindow = null;
- });
- }
-
- // This method will be called when Electron has finished
- // initialization and is ready to create browser windows
- app.on('ready', createWindow);
-
- // Quit when all windows are closed.
- app.on('window-all-closed', function () {
- app.quit()
- });
-
- app.on('activate', function () {
- // On OS X it's common to re-create a window in the app when the
- // dock icon is clicked and there are no other windows open.
- if (mainWindow === null) {
- createWindow();
- }
- });
|