@fto-consult/expo-ui 7.5.44 → 7.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/babel.config.alias.js +2 -1
- package/bin/index.js +0 -152
- package/bin/update-appex-chart.js +1 -1
- package/bin/update-pdfmake.js +1 -1
- package/bin/utils.js +1 -1
- package/copy-env-file.js +3 -6
- package/create-transpile-module-transformer.js +1 -1
- package/find-licenses.js +1 -1
- package/package.json +3 -4
- package/src/screens/Help/openLibraries.js +339 -1
- package/bin/init.js +0 -95
- package/electron/app/desktopCapturer.js +0 -123
- package/electron/app/email.js +0 -55
- package/electron/app/file.js +0 -501
- package/electron/app/index.html +0 -32
- package/electron/app/index.js +0 -19
- package/electron/app/instance.js +0 -46
- package/electron/create-index-file.js +0 -15
- package/electron/dependencies.js +0 -13
- package/electron/index.js +0 -556
- package/electron/init/index.js +0 -0
- package/electron/init/main.js +0 -55
- package/electron/init/renderer.js +0 -6
- package/electron/is-initialized.js +0 -11
- package/electron/pload.js +0 -88
- package/electron/preload.js +0 -461
- package/electron/tools.js +0 -0
- package/electron/utils/config.js +0 -30
- package/electron/utils/copy.js +0 -20
- package/electron/utils/createDir.js +0 -30
- package/electron/utils/createDirSync.js +0 -31
- package/electron/utils/debounce.js +0 -19
- package/electron/utils/dependencies.js +0 -10
- package/electron/utils/env.js +0 -80
- package/electron/utils/exec.js +0 -81
- package/electron/utils/getDirname.js +0 -14
- package/electron/utils/getIcon.js +0 -25
- package/electron/utils/index.js +0 -24
- package/electron/utils/isBase64.js +0 -14
- package/electron/utils/isDataURL.js +0 -13
- package/electron/utils/isValidUrl.js +0 -4
- package/electron/utils/json.js +0 -57
- package/electron/utils/parseArgs.js +0 -21
- package/electron/utils/paths.js +0 -11
- package/electron/utils/postMessage.js +0 -19
- package/electron/utils/replaceAll.js +0 -12
- package/electron/utils/session.js +0 -5
- package/electron/utils/uniqid.js +0 -33
- package/electron/utils/writeFile.js +0 -14
package/electron/app/file.js
DELETED
@@ -1,501 +0,0 @@
|
|
1
|
-
const config = ELECTRON.CONFIG;
|
2
|
-
let path = require("path");
|
3
|
-
const fs = require("fs");
|
4
|
-
let getBackupPath = ELECTRON.getBackupPath;
|
5
|
-
/*let isNonNullString = (val) => {
|
6
|
-
return val && typeof val =='string';
|
7
|
-
};*/
|
8
|
-
//let isFunction= x=> typeof x == 'function';
|
9
|
-
//let defaultObj = o => {return o && typeof o == 'object' && !Array.isArray(o)? 0 : {}};
|
10
|
-
|
11
|
-
let directoryExists = (dirPath)=>{
|
12
|
-
return isDirectory(dirPath);
|
13
|
-
}
|
14
|
-
let isFileOrDirectory = (path,type)=>{
|
15
|
-
if(!isNonNullString(path)) return false;
|
16
|
-
if(!fs.existsSync(path)) return false;
|
17
|
-
const stat = fs.lstatSync(path);
|
18
|
-
switch(type){
|
19
|
-
case 'directory':
|
20
|
-
return stat && stat.isDirectory();
|
21
|
-
break;
|
22
|
-
default :
|
23
|
-
return stat && stat.isFile();
|
24
|
-
}
|
25
|
-
}
|
26
|
-
let isDirectory = (dirPath)=>{
|
27
|
-
return isFileOrDirectory(dirPath,'directory');
|
28
|
-
}
|
29
|
-
let isFile = (filePath)=>{
|
30
|
-
return isFileOrDirectory(filePath);
|
31
|
-
}
|
32
|
-
/*** boolean permettant de créer un répertoire s'il n'existe pas */
|
33
|
-
let createDirectory = (dirPath)=>{
|
34
|
-
if(!isNonNullString(dirPath)) return false;
|
35
|
-
if(fs.existsSync(dirPath)) return true;
|
36
|
-
try {
|
37
|
-
fs.mkdirSync(dirPath,{
|
38
|
-
recursive:true
|
39
|
-
});
|
40
|
-
return fs.existsSync(dirPath);
|
41
|
-
} catch(e){
|
42
|
-
console.log("could not create folder "+e);
|
43
|
-
return false;
|
44
|
-
}
|
45
|
-
return false;
|
46
|
-
}
|
47
|
-
let getCheckedImagesPath = ()=>{
|
48
|
-
return getBackupPath('IMAGES.CHECKED')
|
49
|
-
}
|
50
|
-
let /*** vérifie les images d'un simple fichier
|
51
|
-
@param string, file, le chemin complet du fichier à vérifier
|
52
|
-
*/
|
53
|
-
checkSingleFileImage = (file,options)=>{
|
54
|
-
let checkedImagesPath = getCheckedImagesPath();
|
55
|
-
return new Promise((resolve,reject)=>{
|
56
|
-
if(!isFile(file)){
|
57
|
-
return resolve({status:false,msg:"L'élément spécifier n'est pas un fichier valide : "})
|
58
|
-
}
|
59
|
-
let oldPath = file;
|
60
|
-
let newPath = oldPath;
|
61
|
-
let dirname = path.dirname(file);
|
62
|
-
let code = getName(file,true);
|
63
|
-
if(!isNonNullString(code)){
|
64
|
-
return resolve({status:false,msg:'Non du fichier incorrect : '+code,code});
|
65
|
-
}
|
66
|
-
let codeC = APP.calculateBarCode({code:code.replace("O","0")});
|
67
|
-
showPreloader(file+", " +defaultStr(options.percentage)+" ...");
|
68
|
-
let UpsertImage = (p,rCode,override)=>{
|
69
|
-
let imgP = path.join(checkedImagesPath,rCode+".jpg");
|
70
|
-
if(!override && fs.existsSync(imgP)){
|
71
|
-
resolve({status : true, msg : 'Aucune modification apporté au code ',code,codeC})
|
72
|
-
oldPath = null;
|
73
|
-
code = null;
|
74
|
-
newPath = oldPath = null;
|
75
|
-
} else {
|
76
|
-
APP.resizeImage(fileUrl(p),options).then((image)=>{
|
77
|
-
if(isNonNullString(image)){
|
78
|
-
fs.writeFileSync(imgP, getBase64FromDataUrl(image) , {encoding: "base64"});
|
79
|
-
let t = fs.existsSync(imgP);
|
80
|
-
resolve({status:t,code,codeC,action:oldPath +" => "+newPath+","+(t?'Redimentionné avec succès':' non rénommé!')});
|
81
|
-
t = null;
|
82
|
-
newPath = oldPath = null;
|
83
|
-
UpsertImage = null;
|
84
|
-
image = null;
|
85
|
-
} else {
|
86
|
-
resolve({status:false,msg:'Impossible de rédimensionner l\'image : , ancien : '+code+" nouveau : "+codeC,code})
|
87
|
-
}
|
88
|
-
}).catch((e)=>{
|
89
|
-
console.log(e, ' resizing image to upsert on checking db electron');
|
90
|
-
resolve({status:false,msg:'Nouveau code erroné : , ancien : '+code+" nouveau : "+codeC,code})
|
91
|
-
code = null;
|
92
|
-
newPath = oldPath = null;
|
93
|
-
})
|
94
|
-
}
|
95
|
-
}
|
96
|
-
if(codeC != code){
|
97
|
-
if(!isNonNullString(codeC)){
|
98
|
-
resolve({status:false,msg:'Nouveau code erroné : , ancien : '+code+" nouveau : "+codeC,code})
|
99
|
-
}
|
100
|
-
newPath = path.join(dirname,codeC+".jpg");
|
101
|
-
if(fs.existsSync(newPath)){
|
102
|
-
//au cas où le fichier existait déjà
|
103
|
-
UpsertImage(newPath,codeC,false);
|
104
|
-
} else {
|
105
|
-
// au renome le fichier précédent
|
106
|
-
fs.rename(oldPath,newPath,(err)=>{
|
107
|
-
if(err){
|
108
|
-
console.log(err,' error when renaming checking db ',oldPath,' to ', newPath)
|
109
|
-
return resolve({status:false,msg:'Fichier non renommé ',code,codeC});
|
110
|
-
}
|
111
|
-
UpsertImage(newPath,codeC,false);
|
112
|
-
//resolve({status:true,code,codeC,action:oldPath +" => "+newPath})
|
113
|
-
})
|
114
|
-
}
|
115
|
-
} else{
|
116
|
-
UpsertImage(newPath,codeC,defaultBool(options.override,false));
|
117
|
-
//resolve({status : true, msg : 'Aucune modification apporté au code ',code,codeC})
|
118
|
-
}
|
119
|
-
})
|
120
|
-
}
|
121
|
-
let getName = (file,withoutExtension)=>{
|
122
|
-
withoutExtension = defaultVal(withoutExtension,true);
|
123
|
-
if(isNonNullString(file)){
|
124
|
-
return withoutExtension? path.basename(file,path.extname(file)): path.basename(file);
|
125
|
-
}
|
126
|
-
return "";
|
127
|
-
}
|
128
|
-
/*** @param string filePath: le chemin du fichier
|
129
|
-
* @param bool resolve, si la fonctioin path.resolve :Resolves all the path segments into an absolute path.
|
130
|
-
*/
|
131
|
-
let fileUrl = (filePath, resolve) => {
|
132
|
-
if(!isNonNullString(filePath)){
|
133
|
-
return "";
|
134
|
-
}
|
135
|
-
resolve = defaultVal(resolve,false);
|
136
|
-
|
137
|
-
let pathName = filePath;
|
138
|
-
|
139
|
-
if (resolve) {
|
140
|
-
pathName = path.resolve(filePath);
|
141
|
-
}
|
142
|
-
pathName = pathName.replace(/\\/g, '/');
|
143
|
-
// Windows drive letter must be prefixed with a slash
|
144
|
-
if (pathName[0] !== '/') {
|
145
|
-
pathName = `/${pathName}`;
|
146
|
-
}
|
147
|
-
// Escape required characters for path components
|
148
|
-
// See: https://tools.ietf.org/html/rfc3986#section-3.3
|
149
|
-
return encodeURI(`file://${pathName}`).replace(/[?#]/g, encodeURIComponent);
|
150
|
-
};
|
151
|
-
let FILE = {
|
152
|
-
url : fileUrl,
|
153
|
-
directoryExists,
|
154
|
-
isFile,
|
155
|
-
isDirectory,
|
156
|
-
getExtension : (file)=>{
|
157
|
-
if(isNonNullString(file)){
|
158
|
-
return path.extname(file);
|
159
|
-
}
|
160
|
-
return "";
|
161
|
-
},
|
162
|
-
getName : getName,
|
163
|
-
exists : fs.existsSync,
|
164
|
-
createDirectory,
|
165
|
-
///retourne l'image à partir du code d'un article
|
166
|
-
getPictureFromCode : ()=>{
|
167
|
-
return Promise.resolve({});
|
168
|
-
},
|
169
|
-
/**** affiche le repertoire de sélection d'un fichier
|
170
|
-
* options : {
|
171
|
-
* mediaType || mimeType, le type de media à récupérer
|
172
|
-
* }
|
173
|
-
*/
|
174
|
-
browse : (success,error,options)=>{
|
175
|
-
if(isObj(success)){
|
176
|
-
let t = options;
|
177
|
-
options = success;
|
178
|
-
if(isFunction(error)){
|
179
|
-
success = error;
|
180
|
-
error = isFunction(t)?t : undefined;
|
181
|
-
}
|
182
|
-
}
|
183
|
-
/*** retourne plusieurs fichiers sélectionnés dans un tableau.
|
184
|
-
* la promesse généère un tableau contenant les différents fichiers sélectionnés
|
185
|
-
*/
|
186
|
-
|
187
|
-
/**
|
188
|
-
* @param accept Optional MIME type filter (e.g. 'image/gif,video/*').
|
189
|
-
*
|
190
|
-
* @returns Promise containing selected file's information,
|
191
|
-
* MIME type, display name, and original URI.
|
192
|
-
* return : {
|
193
|
-
mediaType: string;
|
194
|
-
name: string;
|
195
|
-
uri: string;
|
196
|
-
* }
|
197
|
-
*/
|
198
|
-
let accept = "image/*";
|
199
|
-
if(isNonNullString(options)){
|
200
|
-
accept = options;
|
201
|
-
}
|
202
|
-
options = defaultObj(options);
|
203
|
-
accept = "";
|
204
|
-
let configKeyName = "lastOpenedFilePath";
|
205
|
-
let defaultPath = config.get(configKeyName);
|
206
|
-
if(typeof defaultPath != 'string' || !defaultPath){
|
207
|
-
defaultPath = undefined;
|
208
|
-
}
|
209
|
-
return new Promise((resolve,reject)=>{
|
210
|
-
ELECTRON.showOpenDialog({
|
211
|
-
...options,
|
212
|
-
properties: ['openFile','multiSelections'],
|
213
|
-
defaultPath
|
214
|
-
}).then((r)=>{
|
215
|
-
if(r){
|
216
|
-
if(r.canceled){
|
217
|
-
return r.canceled;
|
218
|
-
}
|
219
|
-
if(Array.isArray(r.filePaths)){
|
220
|
-
let files = [];
|
221
|
-
config.set(configKeyName,path.dirname(r.filePaths[0]))
|
222
|
-
for(let i in r.filePaths){
|
223
|
-
files.push({
|
224
|
-
path : r.filePaths[i],
|
225
|
-
name : path.basename(r.filePaths[i])
|
226
|
-
})
|
227
|
-
}
|
228
|
-
if(isFunction(success)){
|
229
|
-
success(files);
|
230
|
-
} else {
|
231
|
-
resolve(files)
|
232
|
-
}
|
233
|
-
}
|
234
|
-
}
|
235
|
-
}).catch((e)=>{
|
236
|
-
if(isFunction(error)){
|
237
|
-
error(e)
|
238
|
-
} else reject(e);
|
239
|
-
})
|
240
|
-
})
|
241
|
-
},
|
242
|
-
/**** prend en paramètre le chemin complet d'un fichier, et lit le contenu sur forme de contenu texte brute
|
243
|
-
* @param filePath : le chemin absolu du fichier à lire le contenu
|
244
|
-
* @param success : la fonction de rappel à appeler en cas de success, cette fonction prend en paramètre le contenu lu
|
245
|
-
* @param error : la fonction de rappel à appeler en cas d'erreur : cette fonction prend en paramètre l'objet e correspondant à l'erreur généré
|
246
|
-
@param readType : le type de contenu à lire :
|
247
|
-
text : le fichier sera lu en contenu texttuel
|
248
|
-
*/
|
249
|
-
read : (filePath,success,error,readType)=>{
|
250
|
-
if(!isNonNullString(readType)) readType = "text";
|
251
|
-
if(!filePath || !isNonNullString(readType)) return;
|
252
|
-
if(!isNonNullString(filePath)) {
|
253
|
-
if(isFunction(error)){
|
254
|
-
error({msg : 'Chemin du fichier invalide ou commande non compatible pour la lecture du fichier'});
|
255
|
-
}
|
256
|
-
return;
|
257
|
-
}
|
258
|
-
try {
|
259
|
-
// Asynchronous read
|
260
|
-
fs.readFile(filePath, function (err, data) {
|
261
|
-
if (err) {
|
262
|
-
if(isFunction(error)){
|
263
|
-
error(err);
|
264
|
-
}
|
265
|
-
return;
|
266
|
-
}
|
267
|
-
switch ((readType.toLowerCase())) {
|
268
|
-
case 'text':
|
269
|
-
data = data.toString();
|
270
|
-
break;
|
271
|
-
|
272
|
-
default:
|
273
|
-
break;
|
274
|
-
}
|
275
|
-
//console.log(data,' is data');
|
276
|
-
if(isFunction(success)){
|
277
|
-
success(data);
|
278
|
-
}
|
279
|
-
});
|
280
|
-
} catch(e){
|
281
|
-
if(isFunction(error)){
|
282
|
-
error(e)
|
283
|
-
}
|
284
|
-
}
|
285
|
-
|
286
|
-
},
|
287
|
-
readAsText : (filePath,success,error)=>{
|
288
|
-
return FILE.read(filePath,success,error,'text');
|
289
|
-
},
|
290
|
-
showFileExplorer : function(){
|
291
|
-
return APP.FILE.browse.apply(APP.FILE,Array.prototype.slice.call(arguments,0));
|
292
|
-
},
|
293
|
-
saveExcel : ({workbook,directory,fileName})=>{
|
294
|
-
let XLSX = APP.require("$xlsx");
|
295
|
-
return new Promise((resolve,reject)=>{
|
296
|
-
showPreloader("génération du fichier excel "+fileName);
|
297
|
-
let isC = isCapacitor(true);
|
298
|
-
if(!isC && !isNativeDesktop()){
|
299
|
-
try {
|
300
|
-
XLSX.writeFile(workbook, fileName)
|
301
|
-
resolve( {fileName,path:fileName});
|
302
|
-
notify.success("Données exportées avec succès!! au nom du fichier "+fileName);
|
303
|
-
hidePreloader();
|
304
|
-
} catch(e){
|
305
|
-
reject(e);
|
306
|
-
hidePreloader();
|
307
|
-
}
|
308
|
-
} else {
|
309
|
-
let content = XLSX.write(workbook,{
|
310
|
-
bookType : 'xlsx',
|
311
|
-
bookSST: false,
|
312
|
-
type: "base64"
|
313
|
-
});
|
314
|
-
directory = defaultStr(directory,(isC?(APP.getId()+"/DATA/EXPORTS/EXCEL"):""));
|
315
|
-
APP.FILE.write({content,fileName,directory}).then(resolve).catch((e)=>{
|
316
|
-
console.log(e,' catched');
|
317
|
-
reject();
|
318
|
-
}).finally(hidePreloader);
|
319
|
-
}
|
320
|
-
})
|
321
|
-
},
|
322
|
-
saveText : (args)=>{
|
323
|
-
args = defaultObj(args);
|
324
|
-
args.mime = args.mimeType = defaultStr(args.mime,args.mimeType,"text/plain");
|
325
|
-
return FILE.saveBinary(args)
|
326
|
-
},
|
327
|
-
saveBinary : ({content,charset,data,mimeType,directory,mime,fileName})=>{
|
328
|
-
mime = defaultStr(mime,mimeType);
|
329
|
-
return new Promise((resolve,reject)=>{
|
330
|
-
data = defaultVal(data,content);
|
331
|
-
charset = defaultStr(charset,'utf8').trim().ltrim(";");
|
332
|
-
fileName = sanitizeFileName(defaultStr(fileName));
|
333
|
-
blobToBase64(data instanceof Blob ? data : new Blob(isArray(data)?data:[data], { type: mime + ";" +charset })).then((content)=>{
|
334
|
-
return FILE.write({content,mimeType:mime,mime,charset,fileName,directory}).then(resolve).catch(reject)
|
335
|
-
}).catch(reject)
|
336
|
-
})
|
337
|
-
},
|
338
|
-
/**** sauvegarde un fichier sur le disque
|
339
|
-
* Si directory est dir sont à undefined, àlors, l'explorateur d'enregistrement de fichier sera proposé à l'utilisateur de sélectionner l'emplacement à enregistrer
|
340
|
-
* le fichier sur le disque
|
341
|
-
* @param {object} {
|
342
|
-
* content {mix}: le contenu du fichier à enregistrer
|
343
|
-
* charset {string}: L'encodage à utiliser pour l'enregistrement du fichier, par défaut utf-8
|
344
|
-
* directory || dir {string} : le répertoire dans lequel enregistrer le fichier
|
345
|
-
* fileName {string} : le nom du fichier à enregistrer
|
346
|
-
* success {function} : la fonction de rappel à appeler en cas de success
|
347
|
-
* error {function} la fonction de rappel à appeler en cas d'erreur
|
348
|
-
* }
|
349
|
-
*/
|
350
|
-
write : ({content,isBinary,charset,directory,dir,fileName,success,error})=>{
|
351
|
-
directory = defaultStr(directory,dir);
|
352
|
-
return new Promise((resolve,reject)=>{
|
353
|
-
let errorF = (err)=>{
|
354
|
-
if(isFunction(error)){
|
355
|
-
error(err);
|
356
|
-
} else reject(err);
|
357
|
-
}
|
358
|
-
let successF = (arg)=>{
|
359
|
-
if(isFunction(success)){
|
360
|
-
success(arg);
|
361
|
-
} else resolve(arg);
|
362
|
-
};
|
363
|
-
if(!isNonNullString(fileName)){
|
364
|
-
errorF({status:false,msg:'Non de fichier invalide'});
|
365
|
-
return;
|
366
|
-
}
|
367
|
-
fileName = sanitizeFileName(fileName);
|
368
|
-
charset = defaultStr(charset,'utf8');
|
369
|
-
let writingOpts = {charset};
|
370
|
-
if(isDataURL(content)){
|
371
|
-
content = dataURLToBase64(content);
|
372
|
-
}
|
373
|
-
if(isBase64(content)){
|
374
|
-
writingOpts.encoding = 'base64';
|
375
|
-
} else {
|
376
|
-
writingOpts.encoding = charset;
|
377
|
-
}
|
378
|
-
if(isBinary ===true){
|
379
|
-
delete writingOpts.encoding;
|
380
|
-
writingOpts.encoding = "binary";
|
381
|
-
}
|
382
|
-
//si directory est undefined, alors une boîte de dialogue est démandé à l'utilisateur pour récupérer le chemin ainsi que le nom du fichier à sauvegarder
|
383
|
-
if(!isNonNullString(directory)){
|
384
|
-
let ext = getFileExtension(fileName,true);
|
385
|
-
let options = {
|
386
|
-
//Placeholder 1
|
387
|
-
title: "Sauvegarder "+fileName,
|
388
|
-
|
389
|
-
//Placeholder 2
|
390
|
-
defaultPath : fileName,
|
391
|
-
|
392
|
-
//Placeholder 4
|
393
|
-
buttonLabel : "Enregistrer",
|
394
|
-
|
395
|
-
//Placeholder 3
|
396
|
-
filters : ext ? [{name: 'Fichier de Type .'+ext, extensions: [ext]}]: undefined
|
397
|
-
}
|
398
|
-
|
399
|
-
ELECTRON.showSaveDialog(options).then((fName)=>{
|
400
|
-
if(isObj(fName) && isNonNullString(fName.filePath)){
|
401
|
-
fName = fName.filePath;
|
402
|
-
}
|
403
|
-
if(isNonNullString(fName) && !isBase64(fName)){
|
404
|
-
fs.writeFile(fName, content,writingOpts,(err) => {
|
405
|
-
if (err) {
|
406
|
-
errorF(err);
|
407
|
-
return;
|
408
|
-
}
|
409
|
-
successF(fName);
|
410
|
-
});
|
411
|
-
} else {
|
412
|
-
errorF({msg:"Opération annulée",status:false});
|
413
|
-
}
|
414
|
-
}).catch((e)=>{
|
415
|
-
console.log(e,' is error writing electorn file')
|
416
|
-
errorF(e);
|
417
|
-
});
|
418
|
-
} else {
|
419
|
-
if(createDirectory(directory)){
|
420
|
-
let p = path.join(directory,fileName);
|
421
|
-
fs.writeFile(p, content,writingOpts,(err) => {
|
422
|
-
if (err) {
|
423
|
-
errorF(err);
|
424
|
-
return;
|
425
|
-
}
|
426
|
-
successF(p);
|
427
|
-
});
|
428
|
-
} else {
|
429
|
-
errorF({status : false,msg:'Impossible de créer le répertoire '+directory});
|
430
|
-
}
|
431
|
-
}
|
432
|
-
})
|
433
|
-
},
|
434
|
-
/***
|
435
|
-
* return : Promise (
|
436
|
-
* resolve :
|
437
|
-
* reject :
|
438
|
-
* )
|
439
|
-
*/
|
440
|
-
backupDB : ({dbContent,content,fileName,mimeType,charset,dbName,success,error,showSaveDialog})=>{
|
441
|
-
dbContent = defaultVal(dbContent,content);
|
442
|
-
dbName = defaultStr(dbName,fileName);
|
443
|
-
charset = defaultStr(charset,'utf-8')
|
444
|
-
if(!isNonNullString(dbName)){
|
445
|
-
dbName= "export-donnéess.json";
|
446
|
-
}
|
447
|
-
return new Promise((resolve,reject)=>{
|
448
|
-
let errorF = (err)=>{
|
449
|
-
if(isFunction(error)){
|
450
|
-
error(err);
|
451
|
-
}
|
452
|
-
console.log(err," backup func")
|
453
|
-
reject(err);
|
454
|
-
}
|
455
|
-
let successF = (arg)=>{
|
456
|
-
if(isFunction(success)){
|
457
|
-
success(arg);
|
458
|
-
}
|
459
|
-
resolve(arg);
|
460
|
-
}
|
461
|
-
let DATA_FOLDER = getBackupPath("BACKUP");
|
462
|
-
|
463
|
-
let date = new Date().format("dd-mm-yyyy");
|
464
|
-
if(!showSaveDialog){
|
465
|
-
date = path.join(DATA_FOLDER,date);
|
466
|
-
}
|
467
|
-
if(createDirectory(date)){
|
468
|
-
if(!isNonNullString(getFileExtension(dbName,true))){
|
469
|
-
dbName+=".json"
|
470
|
-
}
|
471
|
-
let sArg = {directory:date,fileName:dbName,filePath:!showSaveDialog? path.join(date,dbName):dbName};
|
472
|
-
if(showSaveDialog){
|
473
|
-
APP.require("$file-saver")(new Blob([dbContent], { type: mimeType + ";" + charset }), dbName, true);
|
474
|
-
successF(sArg);
|
475
|
-
} else {
|
476
|
-
fs.writeFile(path.join(date,dbName), dbContent, charset,(err) => {
|
477
|
-
if (err) {
|
478
|
-
errorF(err);
|
479
|
-
return;
|
480
|
-
}
|
481
|
-
successF(sArg);
|
482
|
-
});
|
483
|
-
}
|
484
|
-
} else {
|
485
|
-
errorF({msg:'Impossible de créer le répertoire de sauvegarde des données '+date});
|
486
|
-
}
|
487
|
-
})
|
488
|
-
},
|
489
|
-
/*** retourne les statistiques sur le fichier passé en paramètre */
|
490
|
-
getStats : (file) =>{
|
491
|
-
if(!isNonNullString(file)) return null;
|
492
|
-
if(!fs.existsSync(file)) return null;
|
493
|
-
let stats = fs.statSync(file)
|
494
|
-
stats.sizeInBytes = stats.size;
|
495
|
-
stats.sizeInKiloBytes = stats.size / 1024;
|
496
|
-
stats.sizeInMegaBytes = stats.sizeInKiloBytes / 1024;
|
497
|
-
return stats;
|
498
|
-
}
|
499
|
-
}
|
500
|
-
|
501
|
-
module.exports = FILE;
|
package/electron/app/index.html
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html >
|
3
|
-
<head>
|
4
|
-
<!--meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *"-->
|
5
|
-
<meta name="theme-color" content="#a20315">
|
6
|
-
<!-- Windows Phone -->
|
7
|
-
<meta name="msapplication-navbutton-color" content="#a20315">
|
8
|
-
<!-- iOS Safari -->
|
9
|
-
<meta name="apple-mobile-web-app-status-bar-style" content="#a20315">
|
10
|
-
<meta name="format-detection" content="telephone=no">
|
11
|
-
<meta name="msapplication-tap-highlight" content="no">
|
12
|
-
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
|
13
|
-
<meta charSet="utf-8" />
|
14
|
-
<meta httpEquiv="X-UA-Compatible" content="IE=edge" />
|
15
|
-
<meta name="viewport" content="minimum-scale=1.0,maximum-scale=1.0, initial-scale=1.0, width=device-width, user-scalable=no, shrink-to-fit=no"/>
|
16
|
-
<meta charset="UTF-8">
|
17
|
-
<!--[if lte IE 8]>
|
18
|
-
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400" />
|
19
|
-
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:700" />
|
20
|
-
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:800" />
|
21
|
-
<![endif]-->
|
22
|
-
</head>
|
23
|
-
<body>
|
24
|
-
<style>
|
25
|
-
@-moz-keyframes three-quarters-loader{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes three-quarters-loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes three-quarters-loader{0%{-moz-transform:rotate(0);-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.three-quarters-loader:not(:required){-moz-animation:three-quarters-loader 1.25s infinite linear;-webkit-animation:three-quarters-loader 1.25s infinite linear;animation:three-quarters-loader 1.25s infinite linear;border:8px solid #38e;border-right-color:transparent;border-radius:16px;box-sizing:border-box;display:inline-block;position:relative;overflow:hidden;text-indent:-9999px;width:32px;height:32px}
|
26
|
-
</style>
|
27
|
-
<div class="wrappper" id="main-body-wrapper-spinner" style="position:absolute;top:47%;bottom:0;right: 0;left:0;height:50%;text-align: center;">
|
28
|
-
<div class="three-quarters-loader"></div>
|
29
|
-
<!--div class="spinner-loader-content">chargement ...</div-->
|
30
|
-
</div>
|
31
|
-
<script src="bundle.js"></script></body>
|
32
|
-
</html>
|
package/electron/app/index.js
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module.exports = function(ELECTRON){
|
2
|
-
ELECTRON = defaultObj(ELECTRON);
|
3
|
-
let r = {
|
4
|
-
file : require("./file"),
|
5
|
-
printer : require("./printer"),
|
6
|
-
email : require("./email")
|
7
|
-
}
|
8
|
-
for(let i in r) {
|
9
|
-
let iU = i.toUpperCase();
|
10
|
-
if((r[i]) && !ELECTRON[iU]){
|
11
|
-
Object.defineProperties(ELECTRON,{
|
12
|
-
[iU] : {
|
13
|
-
value : r[i],writable:false,override:false
|
14
|
-
}
|
15
|
-
})
|
16
|
-
}
|
17
|
-
}
|
18
|
-
require("./desktopCapturer")(ELECTRON)
|
19
|
-
}
|
package/electron/app/instance.js
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
const postMessage = require("../utils/postMessage");
|
2
|
-
const callbackRef = {current:null};
|
3
|
-
const instanceRef = {current:null};
|
4
|
-
const isValid = APP => APP && typeof APP =='object' && typeof APP.trigger =='function';
|
5
|
-
const setInstance = (APP)=>{
|
6
|
-
if(isValid(APP)){
|
7
|
-
instanceRef.current = APP;
|
8
|
-
if(typeof callbackRef.current =='function'){
|
9
|
-
callbackRef.current(APP);
|
10
|
-
}
|
11
|
-
}
|
12
|
-
callbackRef.current = undefined;
|
13
|
-
return instanceRef.current;
|
14
|
-
}
|
15
|
-
module.exports = {
|
16
|
-
get callback(){
|
17
|
-
return callbackRef.current;
|
18
|
-
},
|
19
|
-
set callback(handler){
|
20
|
-
callbackRef.current = handler;
|
21
|
-
},
|
22
|
-
get get (){
|
23
|
-
return (handler,force)=>{
|
24
|
-
return new Promise((resolve)=>{
|
25
|
-
callbackRef.current = (APP)=>{
|
26
|
-
callbackRef.current = undefined;
|
27
|
-
if(typeof handler =='function'){
|
28
|
-
handler(APP);
|
29
|
-
}
|
30
|
-
instanceRef.current = APP;
|
31
|
-
resolve(APP);
|
32
|
-
};
|
33
|
-
if(force !== true && handler !==true && isValid(instanceRef.current)){
|
34
|
-
return callbackRef.current(instanceRef.current);
|
35
|
-
}
|
36
|
-
postMessage("GET_APP_INSTANCE");
|
37
|
-
});
|
38
|
-
}
|
39
|
-
},
|
40
|
-
get set (){
|
41
|
-
return setInstance;
|
42
|
-
},
|
43
|
-
set current (APP){
|
44
|
-
return setInstance(APP);
|
45
|
-
}
|
46
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
const fs = require("fs");
|
2
|
-
const writeFile = require("../electron/utils/writeFile");
|
3
|
-
const path = require("path");
|
4
|
-
const packageJSON = require("../package.json");
|
5
|
-
|
6
|
-
module.exports = ({electronProjectRoot,force,logo,appName})=>{
|
7
|
-
if(!electronProjectRoot || typeof electronProjectRoot !='string' || !fs.existsSync(electronProjectRoot)){
|
8
|
-
return null;
|
9
|
-
}
|
10
|
-
const indexPath = path.resolve(electronProjectRoot,"index.js");
|
11
|
-
if(!fs.existsSync(indexPath) || force === true){
|
12
|
-
writeFile(indexPath,`require("${packageJSON.name}/electron");`);
|
13
|
-
}
|
14
|
-
return indexPath;
|
15
|
-
}
|
package/electron/dependencies.js
DELETED