Skip to content

Commit 3191f02

Browse files
committed
feat: save snippets to file storage instead of prefs manager
1 parent 4148d56 commit 3191f02

File tree

4 files changed

+83
-34
lines changed

4 files changed

+83
-34
lines changed

src/extensionsIntegrated/CustomSnippets/driver.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,15 @@ define(function (require, exports, module) {
4545
Global.SnippetHintsList.push(snippetData);
4646
Helper.clearAllInputFields();
4747
Helper.toggleSaveButtonDisability();
48-
SnippetsState.saveSnippetsToState();
48+
49+
// save to file storage
50+
SnippetsState.saveSnippetsToState()
51+
.then(function () {
52+
//
53+
})
54+
.catch(function (error) {
55+
console.error("failed to save custom snippet correctly:", error);
56+
});
4957

5058
// we need to move back to snippets list view after a snippet is saved
5159
UIHelper.showSnippetListMenu();
@@ -87,7 +95,15 @@ define(function (require, exports, module) {
8795
// update the snippet in the list
8896
if (snippetIndex !== -1) {
8997
Global.SnippetHintsList[snippetIndex] = editedData;
90-
SnippetsState.saveSnippetsToState();
98+
99+
// save to file storage
100+
SnippetsState.saveSnippetsToState()
101+
.then(function () {
102+
//
103+
})
104+
.catch(function (error) {
105+
console.error("failed to save custom snippet correctly:", error);
106+
});
91107

92108
// clear the stored data
93109
$editView.removeData("originalSnippet");
@@ -164,8 +180,6 @@ define(function (require, exports, module) {
164180
};
165181
}
166182

167-
168-
169183
exports.getWordBeforeCursor = getWordBeforeCursor;
170184
exports.handleSaveBtnClick = handleSaveBtnClick;
171185
exports.handleEditSaveBtnClick = handleEditSaveBtnClick;

src/extensionsIntegrated/CustomSnippets/main.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,16 @@ define(function (require, exports, module) {
258258
$snippetsPanel = $(snippetsPanelTpl);
259259
_addToMenu();
260260
CodeHintIntegration.init();
261-
SnippetsState.loadSnippetsFromState();
261+
262+
// load snippets from file storage
263+
SnippetsState.loadSnippetsFromState()
264+
.then(function () {
265+
//
266+
})
267+
.catch(function (error) {
268+
console.error("failed to load custom snippets:", error);
269+
});
270+
262271
SnippetCursorManager.registerHandlers();
263272
});
264273
});

src/extensionsIntegrated/CustomSnippets/snippetsList.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ define(function (require, exports, module) {
104104
if (filterText) {
105105
$emptyMessage.text(`No snippets match "${filterText}"`);
106106
} else {
107-
$emptyMessage.html('Add your own code hints to speed up coding - <a href="https://docs.phcode.dev" target="_blank">Learn More</a>');
107+
$emptyMessage.html(
108+
'Add your own code hints to speed up coding - <a href="https://docs.phcode.dev" target="_blank">Learn More</a>'
109+
);
108110
}
109111
}
110112

@@ -163,8 +165,16 @@ define(function (require, exports, module) {
163165

164166
if (index !== -1) {
165167
Global.SnippetHintsList.splice(index, 1); // removes it from the actual array
166-
// save to preferences after deleting snippet
167-
SnippetsState.saveSnippetsToState();
168+
169+
// save to file storage
170+
SnippetsState.saveSnippetsToState()
171+
.then(function () {
172+
//
173+
})
174+
.catch(function (error) {
175+
console.error("failed to delete custom snippet correctly:", error);
176+
});
177+
168178
// update the snippets count in toolbar
169179
Helper.updateSnippetsCount();
170180
// Refresh the entire list to properly handle filtering

src/extensionsIntegrated/CustomSnippets/snippetsState.js

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,45 +19,61 @@
1919
*/
2020

2121
define(function (require, exports, module) {
22-
const PreferencesManager = require("preferences/PreferencesManager");
23-
2422
const Global = require("./global");
23+
const PreferencesBase = require("preferences/PreferencesBase");
2524

26-
// create extension preferences
27-
const prefs = PreferencesManager.getExtensionPrefs("CustomSnippets");
25+
const SNIPPETS_FILE_PATH = brackets.app.getApplicationSupportDirectory() + "/customSnippets.json";
2826

29-
// define preference for storing snippets
30-
prefs.definePreference("snippetsList", "array", [], {
31-
description: "List of custom code snippets"
27+
// the file storage for storing the snippets
28+
const fileStorage = new PreferencesBase.FileStorage(SNIPPETS_FILE_PATH, {
29+
snippets: []
3230
});
3331

3432
/**
35-
* Load snippets from preferences
36-
* This is called on startup to restore previously saved snippets
33+
* This function is responsible to load snippets from file storage
34+
* @returns {Promise} a promise that resolves when snippets are loaded
3735
*/
3836
function loadSnippetsFromState() {
39-
try {
40-
const savedSnippets = prefs.get("snippetsList");
41-
if (Array.isArray(savedSnippets)) {
42-
// clear existing snippets and load from saved state
43-
Global.SnippetHintsList.length = 0;
44-
Global.SnippetHintsList.push(...savedSnippets);
45-
}
46-
} catch (e) {
47-
console.error("something went wrong when trying to load custom snippets from preferences:", e);
48-
}
37+
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 = [];
46+
}
47+
resolve();
48+
})
49+
.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);
53+
});
54+
});
4955
}
5056

5157
/**
52-
* Save snippets to preferences
53-
* This is called whenever snippets are modified
58+
* this function is responsible to save snippets to file storage
59+
* @returns {Promise} a promise that resolves when snippets are saved
5460
*/
5561
function saveSnippetsToState() {
56-
try {
57-
prefs.set("snippetsList", [...Global.SnippetHintsList]);
58-
} catch (e) {
59-
console.error("something went wrong when saving custom snippets to preferences:", e);
60-
}
62+
return new Promise((resolve, reject) => {
63+
const dataToSave = {
64+
snippets: Global.SnippetHintsList
65+
};
66+
67+
fileStorage
68+
.save(dataToSave)
69+
.done(() => {
70+
resolve();
71+
})
72+
.fail((error) => {
73+
console.error("unable to save snippets to file storage:", error);
74+
reject(error);
75+
});
76+
});
6177
}
6278

6379
exports.loadSnippetsFromState = loadSnippetsFromState;

0 commit comments

Comments
 (0)