-
Notifications
You must be signed in to change notification settings - Fork 0
/
$File.mbm
142 lines (128 loc) · 4.37 KB
/
$File.mbm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
* File module for JsMobileBasic.
* Help: https://vk.com/page-123026568_53604956
* Author: PROPHESSOR
* Supports:
* JsMB-Interpreter, NW.JS [+]
* Node FS [+]
* JsOS FS [+]
* Browser pseudo-fs [-]
*/
'use strict';
/** Модуль для работы с файлами
* Поддерживает:
* JsMB-Interpreter
* NW.JS
* Node.JS
* JsOS
* @module $File
* @author PROPHESSOR
* @namespace $File
*/
{
const $File = {
/** Сохраняет данные в папку приложения (appdata)
* @param {string} filename - Имя файла
* @param {object} data - Данные для сохранения
* @returns {this}
*/
saveData(filename, data) {
if (!this.$NW) return Boolean(console.error('Can\'t find base path'));
const filePath = this.$Path.join(this.$NW.App.dataPath, `${filename}.json`);
try {
$File.writeFileSync(filePath, this.toJSON(data), 'utf8');
return this;
} catch (e) {
console.error('Ошибка записи данных: ', e);
return false;
}
},
/** Читает данные из файла в папке приложения (appdata)
* @param {string} filename - Имя файла
* @returns {object} Объект или строка
*/
readData(filename) {
if (!this.$NW) return Boolean(console.error('Can\'t find base path'));
const filePath = this.$Path.join(this.$NW.App.dataPath, `${filename}.json`);
let data = null;
try {
data = $File.readFileSync(filePath, 'utf8');
} catch (e) {
console.error('Ошибка чтения данных: ', e);
return false;
}
let json = null;
try {
json = this.parseJSON(data);
} catch (e) {}
return json || data;
},
/** Прочитать данные из файла
* @param {string} file - Файл
* @returns {string}
*/
readFile(file) {
try {
return $File.readFileSync(file, 'utf8');
} catch (e) {
console.error('Ошибка чтения данных: ', e);
return false;
}
},
/** Записать в файл
* @param {string} file - Файл
* @param {string} data - Данные
* @returns {this}
*/
writeFile(file, data) {
try {
$File.writeFileSync(file, data, 'utf8');
return this;
} catch (e) {
console.error('Ошибка записи данных: ', e);
return false;
}
},
/** Чтение файла в бинароном виде
* @param {string} file - Файл
* @returns {Buffer}
*/
readFileBinary(file) {
try {
return $File.readFileSync(file);
} catch (e) {
console.error('Ошибка чтения данных: ', e);
return false;
}
},
/** Запись файла в бинарном виде
* @param {string} file - Файл
* @param {Buffer} data - Буфер с данными
* @returns {this}
*/
writeFileBinary(file, data) {
try {
$File.writeFileSync(file, data);
return this;
} catch (e) {
console.error('Ошибка записи данных: ', e);
return false;
}
}
};
if (typeof require === 'function') { // JsOS or Node
$File.$File = require('fs');
$File.$Path = require('path');
} else if (typeof localStorage !== 'undefined') { // eslint-disable-line
// Browser
// TODO: Add browser support
throw new Error('At this time, the browser is not supported!');
} else {
throw new Error('Your system doesn\'t support FileSystem');
}
for (const i in $File) {
if (typeof $File[i] === 'function') $File[i] = $File[i].bind(JsMB);
}
Object.assign(JsMB, $File);
Object.assign(window, $File);
}