Skip to content

Commit ee52846

Browse files
fix(db): check tables, set default values during migration #581 (#599)
* fix(menu): update preview code shortcut to include Alt modifier * ci: exclude .yml and .blockmap files from artifact uploads * build: enhance electron-builder configs with schema and artifact naming * fix(db): check tables, set default values during migration
1 parent d2e1ee3 commit ee52846

File tree

6 files changed

+59
-21
lines changed

6 files changed

+59
-21
lines changed

.github/workflows/build-and-release.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ jobs:
6868
dist/*.msi
6969
dist/*.AppImage
7070
dist/*.snap
71+
!dist/*.yml
72+
!dist/*.blockmap
7173
if-no-files-found: warn
7274
retention-days: 30
7375

@@ -128,6 +130,8 @@ jobs:
128130
dist/*.msi
129131
dist/*.AppImage
130132
dist/*.snap
133+
!dist/*.yml
134+
!dist/*.blockmap
131135
if-no-files-found: warn
132136
retention-days: 30
133137

electron-builder.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "https://json.schemastore.org/electron-builder",
23
"appId": "io.masscode.app",
34
"productName": "massCode",
45
"directories": {
@@ -29,7 +30,11 @@
2930
"oneClick": false,
3031
"perMachine": false,
3132
"allowToChangeInstallationDirectory": true,
32-
"shortcutName": "massCode"
33+
"shortcutName": "massCode",
34+
"artifactName": "${productName}-${version}-${arch}.${ext}"
35+
},
36+
"portable": {
37+
"artifactName": "${productName}-${version}-${arch}-portable.${ext}"
3338
},
3439
"protocols": [
3540
{

electron-builder.sponsored.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"$schema": "https://json.schemastore.org/electron-builder",
23
"appId": "io.masscode.app",
34
"productName": "massCode",
45
"directories": {
@@ -30,7 +31,11 @@
3031
"oneClick": false,
3132
"perMachine": false,
3233
"allowToChangeInstallationDirectory": true,
33-
"shortcutName": "massCode"
34+
"shortcutName": "massCode",
35+
"artifactName": "${productName}-${version}-${arch}-sponsored.${ext}"
36+
},
37+
"portable": {
38+
"artifactName": "${productName}-${version}-${arch}-portable-sponsored.${ext}"
3439
},
3540
"protocols": [
3641
{

src/main/db/index.ts

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ const isDev = process.env.NODE_ENV === 'development'
1414
let db: Database.Database | null = null
1515
let backupTimer: NodeJS.Timeout | null = null
1616

17+
function tableExists(db: Database.Database, table: string): boolean {
18+
const row = db
19+
.prepare(
20+
`
21+
SELECT name
22+
FROM sqlite_master
23+
WHERE type='table' AND name=?
24+
`,
25+
)
26+
.get(table)
27+
return !!row
28+
}
29+
1730
export function useDB() {
1831
if (db)
1932
return db
@@ -144,15 +157,26 @@ export function clearDB() {
144157
try {
145158
const db = useDB()
146159
const stmt = db.transaction(() => {
147-
// Сначала удаляем записи из таблиц со внешними ключами
148-
db.prepare('DELETE FROM snippet_tags').run()
149-
db.prepare('DELETE FROM snippet_contents').run()
150-
db.prepare('DELETE FROM snippets').run()
151-
// Затем удаляем записи из основных таблиц
152-
db.prepare('DELETE FROM tags').run()
153-
db.prepare('DELETE FROM folders').run()
154-
// Сбрасываем автоинкрементные счетчики, чтобы id начинались с 1
155-
db.prepare('DELETE FROM sqlite_sequence').run()
160+
const tables = [
161+
// Таблицы со внешними ключами должны быть первыми
162+
'snippet_tags',
163+
'snippet_contents',
164+
'snippets',
165+
// Остальные таблицы можно удалить в любом порядке
166+
'tags',
167+
'folders',
168+
]
169+
170+
for (const table of tables) {
171+
if (tableExists(db, table)) {
172+
db.prepare(`DELETE FROM ${table}`).run()
173+
}
174+
}
175+
176+
// Сброс автоинкремента — тоже только если таблица есть
177+
if (tableExists(db, 'sqlite_sequence')) {
178+
db.prepare('DELETE FROM sqlite_sequence').run()
179+
}
156180
})
157181

158182
stmt()

src/main/db/migrate.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ export function migrateJsonToSqlite(jsonData: JSONDB) {
4848
// Миграция папок
4949
jsonData.folders.forEach((folder) => {
5050
const result = insertFolderStmt.run(
51-
folder.name,
51+
folder.name || 'Untitled Folder',
5252
folder.defaultLanguage || 'plain_text',
5353
null, // parentId обновим позже
5454
folder.isOpen ? 1 : 0,
55-
folder.createdAt,
56-
folder.updatedAt,
55+
folder.createdAt || Date.now(),
56+
folder.updatedAt || Date.now(),
5757
folder.icon || null,
5858
folder.index ?? 0,
5959
)
@@ -74,9 +74,9 @@ export function migrateJsonToSqlite(jsonData: JSONDB) {
7474
// Миграция тегов
7575
jsonData.tags.forEach((tag) => {
7676
const result = insertTagStmt.run(
77-
tag.name,
78-
tag.createdAt,
79-
tag.updatedAt,
77+
tag.name || 'Untitled Tag',
78+
tag.createdAt || Date.now(),
79+
tag.updatedAt || Date.now(),
8080
)
8181
tagIdMap[tag.id] = Number(result.lastInsertRowid)
8282
})
@@ -86,13 +86,13 @@ export function migrateJsonToSqlite(jsonData: JSONDB) {
8686
// Определяем новый id папки для сниппета
8787
const mappedFolderId = folderIdMap[snippet.folderId] || null
8888
const result = insertSnippetStmt.run(
89-
snippet.name,
89+
snippet.name || 'Untitled Snippet',
9090
snippet.description || null,
9191
mappedFolderId,
9292
snippet.isDeleted ? 1 : 0,
9393
snippet.isFavorites ? 1 : 0,
94-
snippet.createdAt,
95-
snippet.updatedAt,
94+
snippet.createdAt || Date.now(),
95+
snippet.updatedAt || Date.now(),
9696
)
9797
const newSnippetId = Number(result.lastInsertRowid)
9898
snippetIdMap[snippet.id] = newSnippetId

src/main/menu/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ const editorMenuItems: MenuConfig[] = [
217217
{
218218
label: i18n.t('menu:editor.previewCode'),
219219
click: () => send('main-menu:preview-code'),
220-
accelerator: 'CommandOrControl+Shift+P',
220+
accelerator: 'Alt+CommandOrControl+P',
221221
},
222222
{
223223
type: 'separator',

0 commit comments

Comments
 (0)