Browse Source

Gestion import de fichier

Arthur Brandao 5 years ago
parent
commit
98300b2c83
5 changed files with 94 additions and 1 deletions
  1. 4 0
      app/main/event.js
  2. 27 0
      app/main/function/dialog.js
  3. 33 1
      app/main/function/menu.js
  4. 16 0
      app/render/event.js
  5. 14 0
      helper/file.js

+ 4 - 0
app/main/event.js

@@ -17,4 +17,8 @@ ipcMain.on('confirm-delete', (event, arg) => {
             event.sender.send('delete-card', index === 1);
         }
     );
+});
+
+ipcMain.on('card-already-exist', (event, arg) => {
+    dialog.error('Note éxistante', `Une note avec l'id ${arg} existe déjà, pour importer votre note veuillez d'abord la supprimer`);
 });

+ 27 - 0
app/main/function/dialog.js

@@ -25,4 +25,31 @@ dlg.message = function(title, content, type = 'info', buttons = ['Ok'], defaultB
     }
 }
 
+dlg.fileSelectorPromise = function(openFile = true, openDir = false, filters = [{name: 'Tous les fichiers', extensions: ['*']}]) {
+    const opts = {
+        properties: [],
+        filters: filters
+    }
+    if (openFile) {
+        opts.properties.push('openFile');
+    }
+    if (openDir) {
+        opts.properties.push('openDirectory');
+    }
+    return dialog.showOpenDialog(opts)
+}
+
+dlg.fileSelector = function(openFile = true, openDir = false, filters = [{name: 'Tous les fichiers', extensions: ['*']}], callback = null) {
+    const promise = dlg.fileSelectorPromise(openFile, openDir, filters);
+    if (callback !== null) {
+        promise.then(data => {
+            callback(data.canceled, data.filePaths[0]);
+        });
+    }
+}
+
+dlg.error = function (title, content) {
+    dialog.showErrorBox(title, content);
+}
+
 module.exports = dlg;

+ 33 - 1
app/main/function/menu.js

@@ -1,4 +1,7 @@
+const path = require('path');
 const window = require('../../../helper/window');
+const file = require('../../../helper/file');
+const dialog = require('./dialog');
 const menu = {};
 
 menu.new = function() {
@@ -6,7 +9,36 @@ menu.new = function() {
 };
 
 menu.import = function() {
-    console.log('Import');
+    // Select file on user computer
+    const filter = [
+        {name: 'JSON', extensions: ['json']},
+        {name: 'Markdown', extensions: ['md']}
+    ];
+    dialog.fileSelector(true, false, filter, (canceled, filepath) => {
+        // If the user select one file
+        if (canceled) {
+            return;
+        }
+        // Read informations
+        const ext = file.getExtension(filepath).toLowerCase();
+        const content = file.read(filepath);
+        let data = {};
+        if (ext === 'md') {
+            // Create data from markdown file
+            data.id = '_' + Math.random().toString(36).substr(2, 9);
+            data.title = path.basename(filepath);
+            data.content = content;
+        } else {
+            data = JSON.parse(content);
+            // Check if JSON structure is good
+            if (data.id === undefined || data.title === undefined || data.content === undefined) {
+                // Error data is invalid
+                dialog.error('Données invalides', 'Les données dans le fichier JSON sont invalides. Les données ne peuvent pas être importées');
+            }
+        }
+        // Send informations to main window
+        mainWindow.webContents.send('import-card', data);
+    });
 }
 
 menu.devTool = function (item, focusedWindow) {

+ 16 - 0
app/render/event.js

@@ -6,4 +6,20 @@ ipcRenderer.on('reset-app', (event, arg) => {
 
 ipcRenderer.on('app-loader', (event, arg) => {
     func.loader();
+});
+
+ipcRenderer.on('import-card', (event, arg) => {
+    // If card with same id already exist
+    if (localStorage[arg.id]) {
+        ipcRenderer.send('card-already-exist', arg.id);
+    } else {
+        // Add card on list
+        const list = JSON.parse(localStorage.list);
+        list.push(arg.id);
+        localStorage.setItem('list', JSON.stringify(list));
+        // Add list
+        localStorage.setItem(arg.id, JSON.stringify(arg));
+        // Refresh card
+        ipcRenderer.send('refresh-card');
+    }
 });

+ 14 - 0
helper/file.js

@@ -112,4 +112,18 @@ module.exports.copy = function (source, dest, verbose = false) {
     }
 };
 
+module.exports.read = function (filepath, varbose = false) {
+    if (!module.exports.isFile(filepath)) {
+        return false;
+    }
+    try {
+        return fs.readFileSync(filepath).toString();
+    } catch (err) {
+        if (verbose) {
+            console.error(err);
+        }
+        return false;
+    }
+}
+
 module.exports.system = fs;