Skip to content

Commit fe895df

Browse files
devvaannshabose
authored andcommitted
refactor: store snippets directly in file instead of preferencesBase
1 parent 8b684f1 commit fe895df

File tree

1 file changed

+43
-23
lines changed

1 file changed

+43
-23
lines changed

src/extensionsIntegrated/CustomSnippets/snippetsState.js

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,50 @@
2020

2121
define(function (require, exports, module) {
2222
const Global = require("./global");
23-
const PreferencesBase = require("preferences/PreferencesBase");
23+
const FileSystem = require("filesystem/FileSystem");
24+
const FileUtils = require("file/FileUtils");
25+
const FileSystemError = require("filesystem/FileSystemError");
2426

2527
const SNIPPETS_FILE_PATH = brackets.app.getApplicationSupportDirectory() + "/customSnippets.json";
2628

27-
// the file storage for storing the snippets
28-
const fileStorage = new PreferencesBase.FileStorage(SNIPPETS_FILE_PATH, {
29-
snippets: []
30-
});
31-
3229
/**
3330
* This function is responsible to load snippets from file storage
3431
* @returns {Promise} a promise that resolves when snippets are loaded
3532
*/
3633
function loadSnippetsFromState() {
3734
return new Promise((resolve, reject) => {
38-
fileStorage
39-
.load()
40-
.done(function (data) {
41-
if (data && data.snippets && Array.isArray(data.snippets)) {
42-
Global.SnippetHintsList = data.snippets;
43-
} else {
44-
// no snippets are present
45-
Global.SnippetHintsList = [];
35+
const file = FileSystem.getFileForPath(SNIPPETS_FILE_PATH);
36+
37+
// true is for bypassCache, to get the latest content always
38+
const readPromise = FileUtils.readAsText(file, true);
39+
40+
readPromise
41+
.done(function (text) {
42+
try {
43+
const data = JSON.parse(text);
44+
if (data && data.snippets && Array.isArray(data.snippets)) {
45+
Global.SnippetHintsList = data.snippets;
46+
} else {
47+
// no snippets are present
48+
Global.SnippetHintsList = [];
49+
}
50+
resolve();
51+
} catch (error) {
52+
console.error("Error parsing snippets JSON:", error);
53+
Global.SnippetHintsList = []; // fallback
54+
resolve();
4655
}
47-
resolve();
4856
})
4957
.fail(function (error) {
50-
console.error("unable to load snippets from file storage:", error);
51-
Global.SnippetHintsList = []; // since it failed we init a empty array
52-
reject(error);
58+
if (error === FileSystemError.NOT_FOUND) {
59+
// file is not present, empty array
60+
Global.SnippetHintsList = [];
61+
resolve();
62+
} else {
63+
console.error("Unable to load snippets from file storage:", error);
64+
Global.SnippetHintsList = [];
65+
reject(error);
66+
}
5367
});
5468
});
5569
}
@@ -64,13 +78,19 @@ define(function (require, exports, module) {
6478
snippets: Global.SnippetHintsList
6579
};
6680

67-
fileStorage
68-
.save(dataToSave)
69-
.done(() => {
81+
const file = FileSystem.getFileForPath(SNIPPETS_FILE_PATH);
82+
// 2 is for pretty print
83+
const jsonText = JSON.stringify(dataToSave, null, 2);
84+
85+
// true is allowBlindWrite to overwrite without checking file contents
86+
const writePromise = FileUtils.writeText(file, jsonText, true);
87+
88+
writePromise
89+
.done(function () {
7090
resolve();
7191
})
72-
.fail((error) => {
73-
console.error("unable to save snippets to file storage:", error);
92+
.fail(function (error) {
93+
console.error("Unable to save snippets to file storage:", error);
7494
reject(error);
7595
});
7696
});

0 commit comments

Comments
 (0)