Compare commits

...

128 Commits

Author SHA1 Message Date
zadam
cb8e551ee0 release 0.47.3 2021-05-15 23:05:20 +02:00
zadam
f6dd1110e8 fix sync status 2021-05-15 22:00:53 +02:00
zadam
623200b92b fix "force note sync" 2021-05-15 14:04:01 +02:00
zadam
4ff40ba14f fix sync status in-progress 2021-05-15 13:44:12 +02:00
zadam
cecce1df20 electron upgrade 2021-05-14 22:23:11 +02:00
zadam
2030c8e995 fallback value for isErased for 0173 migration, #1937 2021-05-14 21:52:14 +02:00
zadam
de6108f95d protected session is now global application state to avoid weird issues with multiple tabs/windows/reloads 2021-05-07 22:23:49 +02:00
zadam
fddab59265 added note.executeScript() 2021-05-07 21:23:10 +02:00
zadam
f22c76d9fb fix focusing tree from note detail, closes #1897 2021-04-27 23:05:28 +02:00
zadam
b1131844d6 fix filling entity changes from Options' Advanced tab, closes #1898 2021-04-27 22:59:08 +02:00
zadam
03f3e46f8b release 0.47.2 2021-04-26 22:32:54 +02:00
zadam
6f1b0b92fe fix searchForNote backend API method 2021-04-26 22:27:12 +02:00
zadam
5e40c03fc9 use Map instead of object where keys can be (reserved) words, fixes #1895 2021-04-26 21:12:46 +02:00
zadam
3b1fb8024f handle undefined in the search ordering 2021-04-26 21:04:22 +02:00
FliegendeWurst
6f49f870ed Exit on SIGTERM (#1891)
Stopping the systemd service running the server now works properly.
2021-04-25 11:05:09 +02:00
zadam
b9133cb683 fix keyboard shortcut for "open externally" 2021-04-24 22:18:25 +02:00
zadam
ccac46527c opened file change detection now useable on all note types 2021-04-24 21:56:44 +02:00
zadam
dcd35b1ea2 fix broken inline PDF viewer, #1833 2021-04-24 20:27:42 +02:00
zadam
a74741343e upload of modified open file WIP 2021-04-24 11:39:59 +02:00
zadam
4ff7e0813d upload of modified open file WIP 2021-04-24 11:39:44 +02:00
zadam
6d2d72fa7f add ERR_ADDRESS_UNREACHABLE as expected sync exception, #1888 2021-04-24 10:17:21 +02:00
zadam
30ec706d37 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package.json
#	src/services/build.js
2021-04-22 21:25:15 +02:00
zadam
25ce2e4253 release 0.46.9 2021-04-22 20:50:22 +02:00
zadam
b5674223e5 fixed some incorrect order by behavior, #1881 2021-04-22 20:28:26 +02:00
zadam
02988ed2b3 added random ordering 2021-04-22 19:53:11 +02:00
zadam
c27f573eed fix line continuation in the release script 2021-04-22 19:39:57 +02:00
zadam
c5b0c60797 Merge remote-tracking branch 'origin/master' 2021-04-21 23:03:16 +02:00
zadam
025af8df02 ckeditor 27.1 2021-04-21 23:03:09 +02:00
chee
d9e8cff00f Only add widgets that are executable (#1875)
closes #1874
2021-04-21 22:25:52 +02:00
zadam
1a4f35470c Merge remote-tracking branch 'origin/stable' 2021-04-21 22:04:33 +02:00
zadam
1d99c4e80b fix moving notes with keyboard on Firefox, closes #1865 2021-04-21 22:03:41 +02:00
zadam
dc7c64a94d Merge remote-tracking branch 'origin/stable' into stable 2021-04-21 20:38:15 +02:00
zadam
dc6a530d8c clear note selection anytime a new note is activated 2021-04-21 20:38:07 +02:00
chee
38b0d05c20 Add .includes to the type check (#1871)
beforehand it would always be `true`
fixes #1869
2021-04-21 20:16:15 +02:00
zadam
6e010dfbd7 fix note preview, closes #1869 2021-04-21 20:14:37 +02:00
zadam
172bdb6118 release 0.47.1-beta 2021-04-19 22:43:03 +02:00
zadam
6136243d61 release 0.47.1-beta 2021-04-19 22:40:50 +02:00
zadam
a88a32acae support OPML from MindManager, fixes #1862 2021-04-19 22:33:58 +02:00
zadam
583df35231 log warning about unsucessful login 2021-04-19 21:41:29 +02:00
zadam
634baae796 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/services/build.js
2021-04-19 20:56:56 +02:00
zadam
a674a12706 disable tar polluting build log 2021-04-19 20:56:05 +02:00
zadam
c29f1af48f use n to force node version
(cherry picked from commit 51d1d8efb8)
2021-04-19 20:51:06 +02:00
zadam
51d1d8efb8 use n to force node version 2021-04-19 20:26:58 +02:00
zadam
a8d72c46e4 release 0.46.8 2021-04-18 21:47:45 +02:00
zadam
ec36fbd83e release 0.46.8 2021-04-18 21:46:35 +02:00
zadam
d3cccae2df implemented audio/video in note content renderer + streaming API #886 2021-04-18 12:40:12 +02:00
zadam
9ba514d930 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package-lock.json
#	trilium.iml
2021-04-18 12:39:19 +02:00
zadam
8e1b8ab26c show not set keyboard shortcuts as "not set", #1851 2021-04-15 21:45:37 +02:00
zadam
197537b159 idea config stuff 2021-04-13 21:54:34 +02:00
zadam
917b259e92 add new sync status "unknown" to differentiate from "can't connect", #1844 2021-04-13 21:54:07 +02:00
zadam
44aa2834b3 release 0.47.0-beta 2021-04-11 22:29:56 +02:00
zadam
58e4bd4974 Merge remote-tracking branch 'origin/stable' 2021-04-11 22:28:30 +02:00
zadam
479d742e85 partly reverted wrong change, #1820 2021-04-10 23:24:17 +02:00
zadam
3337487063 fixes 2021-04-10 23:23:43 +02:00
zadam
beb42f18fe linux server better-sqlite3 binary 2021-04-10 11:15:13 +02:00
zadam
00a27313fb linux desktop and mac better-sqlite3 binaries 2021-04-09 23:40:42 +02:00
zadam
564fea43a9 don't open new tab after duplicating subtree 2021-04-09 23:40:15 +02:00
zadam
3d3142e20c Merge remote-tracking branch 'origin/master' 2021-04-08 21:22:54 +02:00
zadam
9c679aef20 added #runOnInstance and #runAtHour 2021-04-08 21:22:47 +02:00
Davi Alexandre
d47a55d23a Avoid resetting all background properties on note-icons (#1834)
This ensures only the background-color property will be changed transparent,
avoiding to reset any other properties (background-image, for example) that
might have been set by some custom CSS rules applied in combination with
#iconClass
2021-04-08 20:24:19 +02:00
zadam
052f584bf4 edit note button is now just an icon 2021-04-08 20:17:35 +02:00
MatAsmania
1dfebdf6db Fix for Evernote workaround and support for en-todo (#1827) 2021-04-07 22:48:49 +02:00
zadam
5314446980 fix seeing only part of the PDF preview 2021-04-07 22:45:46 +02:00
zadam
6b41c26d2b disable entering new line in the attribute editor 2021-04-07 22:35:06 +02:00
zadam
463071ea4d make global button more consistent with sync button 2021-04-07 22:15:44 +02:00
zadam
79c5645964 various javaDoc improvements 2021-04-07 22:01:52 +02:00
zadam
2f58b6b3c8 fix bottom margin/padding styling in tooltip 2021-04-07 21:21:06 +02:00
zadam
e7909d25c6 fix linking to notes 2021-04-07 21:12:55 +02:00
zadam
f739dbfe87 ckeditor 5.60.0 2021-04-06 22:16:34 +02:00
zadam
c43b20ec2b script api search ignores hoisting by default 2021-04-06 21:56:46 +02:00
zadam
2d0cb5b66e update electron to 13 beta 2021-04-06 20:19:34 +02:00
zadam
caf38c94c7 fix search route 2021-04-06 20:18:34 +02:00
zadam
51db6761c8 fix opening links with single click outside of the ckeditor instance 2021-04-06 20:18:16 +02:00
zadam
4d110aa143 updated render note help 2021-04-05 22:37:12 +02:00
zadam
9c436cb61f Merge remote-tracking branch 'origin/stable' 2021-04-05 21:39:35 +02:00
zadam
926e9e12c0 Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	package-lock.json
#	package.json
2021-04-05 11:44:42 +02:00
zadam
c4d35fb44e fix reference link widget in attr editor after CKEditor 27 upgrade 2021-04-05 11:28:34 +02:00
zadam
1b41b92e02 publish xml2js into backend script api 2021-04-05 11:18:56 +02:00
WPum
903e6b7ccc correct a typo in #1820 fix (#1824)
Thanks!
2021-04-04 22:11:42 +02:00
zadam
c71f3c35b8 Merge remote-tracking branch 'origin/stable' 2021-04-04 22:03:00 +02:00
zadam
2e82b7380b hide relationMapLink and template relations from link map, fixes #1820 2021-04-03 11:28:11 +02:00
zadam
6c9ac5b5ec jquery 3.6.0 2021-03-30 23:32:44 +02:00
zadam
9cd45299b1 grid items in note list are clickable as a whole 2021-03-30 23:26:14 +02:00
zadam
f1f4f45c9d display note icon in note list 2021-03-30 23:13:16 +02:00
zadam
8644c38abc hide sync status on extra window until the sync status is known 2021-03-30 22:59:25 +02:00
zadam
e569ae1a0d one sync status tooltip did not have data-toggle="tooltip" 2021-03-30 22:53:23 +02:00
zadam
da741b522e note cache fixes, #1805 2021-03-30 21:39:42 +02:00
zadam
e055d4e15e ckeditor 27 2021-03-29 23:29:14 +02:00
zadam
58200d6431 fix dragabilly webpack build 2021-03-29 22:01:01 +02:00
zadam
57db945558 set cssClass and other note related classes on the root widget instead, fixes #1799 2021-03-28 22:24:24 +02:00
zadam
2e6cd5f809 Merge remote-tracking branch 'origin/master' 2021-03-28 00:07:45 +01:00
zadam
6541523e88 empty page on new tab nw offers list of available workspaces 2021-03-28 00:07:38 +01:00
Igor
f60b282e09 * Russian README added (#1794)
* * Russian README added

* Links to another READMEs added

* * Fix inline images

Co-authored-by: mopsicus <lii@rstgames.com>
2021-03-27 20:32:01 +01:00
bavis-m
744ed27d91 If the database hasn't been initialized (new install?) don't attempt to update our last synced id, as there is no db to grab it from (prevents running the server as a fresh install completely) (#1797)
Co-authored-by: Mark <mark@mhack.io>
2021-03-27 20:30:40 +01:00
zadam
a254199746 Merge remote-tracking branch 'origin/stable' 2021-03-26 21:47:24 +01:00
zadam
928c8bfdf7 Merge remote-tracking branch 'origin/stable' 2021-03-23 22:47:42 +01:00
zadam
d5f38c0f88 sync status style fix 2021-03-21 23:45:15 +01:00
zadam
56f97f1081 dragging the tab vertically by 100px will now move it to a new window (chrome like behavior) 2021-03-21 23:35:13 +01:00
zadam
e648505ad3 avoid weird button shrinking when window size is too small, fixes #1745 2021-03-21 23:12:34 +01:00
zadam
71c3fd5cbb don't use special layout for "extra window" 2021-03-21 23:05:31 +01:00
zadam
f9b0418333 sync status widget tweaks 2021-03-21 22:46:45 +01:00
zadam
392a00ac17 sync status widget 2021-03-21 22:43:41 +01:00
zadam
1a9919a866 sync status widget WIP 2021-03-21 00:01:28 +01:00
zadam
9dd95b62a9 added ScrollingContainer to guarantee scrolling to top when switching notes 2021-03-20 19:44:43 +01:00
zadam
135b4fe88e Merge remote-tracking branch 'origin/stable'
# Conflicts:
#	src/public/app/layouts/mobile_layout.js
2021-03-20 12:49:37 +01:00
zadam
b79d81a94d sync status widget WIP 2021-03-20 00:00:49 +01:00
zadam
7e2186721f added "re-render note" menu item & shortcut, closes #1766 2021-03-19 22:34:56 +01:00
zadam
6a70e0ab97 add trilium-no-cert-check bat/shell file in order to be able to connect to the sync server even without valid server certificate 2021-03-18 23:49:28 +01:00
zadam
b38a63d336 delete notes dialog provides checkbox to switch between delete all clones and normal delete 2021-03-18 23:42:30 +01:00
zadam
d62558d97a delete notes dialog WIP 2021-03-18 23:23:35 +01:00
zadam
76aa7d1451 Merge remote-tracking branch 'origin/master' 2021-03-18 22:11:45 +01:00
zadam
4f401d71a2 Merge remote-tracking branch 'origin/stable' 2021-03-18 21:11:56 +01:00
Patrick Moriarty
eb437ff642 Add mobile dropdown for plugin buttons (#1762)
* Add mobile toolbar buttons

* cleanup

* more cleanup

* Mobile plugin buttons: Add else block & change icon
2021-03-18 21:09:08 +01:00
zadam
6edc6e2825 load search result only on explicit action (expand node, execute search), #1759 2021-03-18 21:05:43 +01:00
zadam
59e8cb8c8b Merge remote-tracking branch 'origin/stable' 2021-03-17 23:20:28 +01:00
Patrick Moriarty
a4bffbfa60 Mobile view: iOS sizing/styling changes (#1756)
* Fix dark themed action-button text color on mobile safari

* Fix note view scrolling on ios safari

* Fix scroll issues on tree view on ios safari

* Fix mobile firefox/chrome sizing issues

* Fix scroll-to-active-note
2021-03-17 22:07:53 +01:00
zadam
70656d240b better-sqlite3 built for electron 12 windows 2021-03-15 23:49:08 +01:00
zadam
42067b3c1e Merge remote-tracking branch 'origin/stable' 2021-03-15 23:40:44 +01:00
zadam
0bc91da0bb added possibility to zoom into images using mousewheel 2021-03-15 22:24:56 +01:00
zadam
5b72b577b8 delete notes preview dialog WIP 2021-03-14 22:54:39 +01:00
zadam
ec2f8ec796 added subtree note count into info widget 2021-03-14 20:47:33 +01:00
zadam
cd3f8a41af removed (112) migrations originating before first public release (0.20 in Sept 2018) 2021-03-14 20:37:35 +01:00
zadam
aa8bf0e60a Revert "Revert "delete notes skeleton dialog""
This reverts commit 584fea19
2021-03-14 19:54:40 +01:00
zadam
5b3a6b5e9d Merge remote-tracking branch 'origin/stable' 2021-03-14 19:53:51 +01:00
zadam
81e226af6f Merge remote-tracking branch 'origin/stable' 2021-03-12 20:27:05 +01:00
zadam
cb558e1378 Merge remote-tracking branch 'origin/stable' 2021-03-11 21:14:58 +01:00
zadam
723a0e479e ckeditor 26.0 2021-03-10 20:02:23 +01:00
zadam
5b8e876b77 upgrade to electron 12 2021-03-09 22:36:41 +01:00
344 changed files with 6154 additions and 4842 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<file url="PROJECT" libraries="{@types/jquery}" />
<includedPredefinedLibrary name="Node.js Core" />
</component>
</project>

2
.idea/misc.xml generated
View File

@@ -3,7 +3,7 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager">
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" project-jdk-name="openjdk-16" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

1
.idea/sqldialects.xml generated
View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$" dialect="SQLite" />
<file url="PROJECT" dialect="SQLite" />
</component>
</project>

View File

@@ -1,5 +1,7 @@
# Trilium注意事项
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Trilium Notes是一个分层的笔记应用程序专注于建立大型个人知识库。请参阅[屏幕截图](https://github.com/zadam/trilium/wiki/Screenshot-tour)以快速了解:

View File

@@ -1,5 +1,7 @@
# Trilium Notes
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Trilium Notes is a hierarchical note taking application with focus on building large personal knowledge bases. See [screenshots](https://github.com/zadam/trilium/wiki/Screenshot-tour) for quick overview:

63
README.ru.md Normal file
View File

@@ -0,0 +1,63 @@
# Trilium Notes
[English](https://github.com/zadam/trilium/blob/master/README.md) | [Chinese](https://github.com/zadam/trilium/blob/master/README-ZH_CN.md) | [Russian](https://github.com/zadam/trilium/blob/master/README.ru.md)
[![Join the chat at https://gitter.im/trilium-notes/Lobby](https://badges.gitter.im/trilium-notes/Lobby.svg)](https://gitter.im/trilium-notes/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
Trilium Notes это приложение для заметок с иерархической структурой, ориентированное на создание больших персональных баз знаний. Для быстрого ознакомления посмотрите [скриншот-тур](https://github.com/zadam/trilium/wiki/Screenshot-tour):
![](https://raw.githubusercontent.com/wiki/zadam/trilium/images/screenshot.png)
## Возможности
* Заметки можно расположить в виде дерева произвольной глубины. Отдельную заметку можно разместить в нескольких местах дерева (см. [клонирование](https://github.com/zadam/trilium/wiki/Cloning-notes))
* Продвинутый визуальный редактор (WYSIWYG) позволяет работать с таблицами, изображениями, [формулами](https://github.com/zadam/trilium/wiki/Text-notes#math-support) и разметкой markdown, имеет [автоформатирование](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
* Редактирование [заметок с исходным кодом](https://github.com/zadam/trilium/wiki/Code-notes), включая подсветку синтаксиса
* Быстрая и простая [навигация между заметками](https://github.com/zadam/trilium/wiki/Note-navigation), полнотекстовый поиск и [выделение заметок](https://github.com/zadam/trilium/wiki/Note-hoisting) в отдельный блок
* Бесшовное [версионирование заметки](https://github.com/zadam/trilium/wiki/Note-revisions)
* Специальные [атрибуты](https://github.com/zadam/trilium/wiki/Attributes) позволяют гибко организовать структуру, используются для поиска и продвинутого [скриптинга](https://github.com/zadam/trilium/wiki/Scripts)
* [Синхронизация](https://github.com/zadam/trilium/wiki/Synchronization) заметок со своим сервером
* Надёжное [шифрование](https://github.com/zadam/trilium/wiki/Protected-notes) с детализацией по каждой заметке
* [Карты связей](https://github.com/zadam/trilium/wiki/Relation-map) и [карты ссылок](https://github.com/zadam/trilium/wiki/Link-map) для визуализации их взяимосвязей
* [Скрипты](https://github.com/zadam/trilium/wiki/Scripts) - см. [продвинутые примеры](https://github.com/zadam/trilium/wiki/Advanced-showcases)
* Хорошо масштабируется, как по удобству использования, так и по производительности до 100000 заметок
* Оптимизированный [мобильный фронтенд](https://github.com/zadam/trilium/wiki/Mobile-frontend) смартфонов и планшетов
* [Темная тема](https://github.com/zadam/trilium/wiki/Themes)
* Импорт и экпорт [Evernote](https://github.com/zadam/trilium/wiki/Evernote-import) и данных в [markdown](https://github.com/zadam/trilium/wiki/Markdown) формате
* [Web Clipper](https://github.com/zadam/trilium/wiki/Web-clipper) для удобного сохранения веб-контента
## Сборки
Trilium предоставляется в виде десктопного приложения (Linux и Windows) или веб-приложения, размещенного на вашем сервере (Linux). Доступна сборка Mac OS, но она [не поддерживается](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support).
* Если вы хотите использовать Trilium на десктопе, скачайте архив для своей платформы со страницы [релизов](https://github.com/zadam/trilium/releases/latest), распакуйте и запустите исполняемый файл ```trilium```.
* Если вы хотите установить Trilium на сервере, следуйте этой [инструкции](https://github.com/zadam/trilium/wiki/Server-installation).
* В данный момент поддерживаются (протестированы) последние версии браузеров Chrome и Firefox.
## Документация
[Полный список страниц документации доступен в Wiki.](https://github.com/zadam/trilium/wiki/)
Вы также можете ознакомиться с [шаблонами персональных баз знаний](https://github.com/zadam/trilium/wiki/Patterns-of-personal-knowledge-base), чтобы получить представление о том, как можно использовать Trilium.
## Участвуйте в разработке
Используйте онлайн среду разработки в браузере
[![Открыть в Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/zadam/trilium)
Или склонируйте на своё устройство и запустите
```
npm install
npm run start-server
```
## Благодарности
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - лучший WYSIWYG редактор, очень активная и внимательная команда.
* [FancyTree](https://github.com/mar10/fancytree) - многофункциональная библиотека для создания древовидных структур. Вне конкуренции. Без него Trilium Notes не были бы таким.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - редактор кода с поддержкой огромного количество языков.
* [jsPlumb](https://github.com/jsplumb/jsplumb) - библиотека для визуализации связей. Вне конкуренции. Используется в [картах связей](https://github.com/zadam/trilium/wiki/Relation-map) и [картах ссылок](https://github.com/zadam/trilium/wiki/Link-map).
## Лицензия
Эта программа является бесплатным программным обеспечением: вы можете распространять и/или изменять ее в соответствии с условиями GNU Affero General Public License, опубликованной Free Software Foundation, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.

View File

@@ -27,8 +27,11 @@ cp images/app-icons/png/128x128.png $BUILD_DIR/icon.png
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
cp bin/tpl/portable-trilium.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/portable-trilium.sh
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-portable.sh
cp bin/tpl/trilium-no-cert-check.sh $BUILD_DIR/
chmod 755 $BUILD_DIR/trilium-no-cert-check.sh
echo "Packaging linux x64 electron distribution..."
VERSION=`jq -r ".version" package.json`

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
PKG_DIR=dist/trilium-linux-x64-server
NODE_VERSION=12.19.0
NODE_VERSION=14.16.1
if [ "$1" != "DONTCOPY" ]
then
@@ -10,7 +10,7 @@ fi
cd dist
wget https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz
tar xvfJ node-v${NODE_VERSION}-linux-x64.tar.xz
tar xfJ node-v${NODE_VERSION}-linux-x64.tar.xz
rm node-v${NODE_VERSION}-linux-x64.tar.xz
cd ..

View File

@@ -25,7 +25,8 @@ mv "./dist/Trilium Notes-win32-x64" $BUILD_DIR
# removing software WebGL binaries because they are pretty huge and not necessary
rm -r $BUILD_DIR/swiftshader
cp bin/tpl/portable-trilium.bat $BUILD_DIR/
cp bin/tpl/trilium-portable.bat $BUILD_DIR/
cp bin/tpl/trilium-no-cert-check.bat $BUILD_DIR/
echo "Zipping windows x64 electron distribution..."
VERSION=`jq -r ".version" package.json`

View File

@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
exit 1
fi
npm run webpack
n exec 12 npm run webpack
DIR=$1
@@ -27,7 +27,7 @@ cp -r electron.js $DIR/
cp webpack-* $DIR/
# run in subshell (so we return to original dir)
(cd $DIR && npm install --only=prod)
(cd $DIR && n exec 12 npm install --only=prod)
# cleanup of useless files in dependencies
rm -r $DIR/node_modules/image-q/demo

View File

@@ -8,9 +8,9 @@ fi
VERSION=$1
SERIES=${VERSION:0:4}-latest
sudo docker push zadam/trilium:$VERSION
sudo docker push zadam/trilium:$SERIES
docker push zadam/trilium:$VERSION
docker push zadam/trilium:$SERIES
if [[ $1 != *"beta"* ]]; then
sudo docker push zadam/trilium:latest
docker push zadam/trilium:latest
fi

View File

@@ -62,7 +62,7 @@ echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
gh release create "$TAG" \
--title "$TAG release" \
--notes ""
--notes "" \
$EXTRA \
"dist/$DEBIAN_X64_BUILD" \
"dist/$LINUX_X64_BUILD" \

View File

@@ -0,0 +1,4 @@
SET DIR=%~dp0
set NODE_TLS_REJECT_UNAUTHORIZED=0
cd %DIR%
start trilium.exe

View File

@@ -0,0 +1,7 @@
#!/usr/bin/env sh
DIR=`dirname "$0"`
export NODE_TLS_REJECT_UNAUTHORIZED=0
"$DIR/trilium"

View File

@@ -1,11 +0,0 @@
DROP TABLE IF EXISTS anchors;
DROP TABLE IF EXISTS attachments;
DROP TABLE IF EXISTS bookmarks;
DROP TABLE IF EXISTS custom_properties;
DROP TABLE IF EXISTS deletions;
DROP TABLE IF EXISTS deletions_attachments;
DROP TABLE IF EXISTS formatting;
DROP TABLE IF EXISTS icons;
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS tags_notes;
DROP TABLE IF EXISTS tasks;

View File

@@ -1,3 +0,0 @@
CREATE TABLE notes_mig AS SELECT note_id, note_title, note_text, note_clone_id, date_created, date_modified, encryption FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;

View File

@@ -1 +0,0 @@
ALTER TABLE notes ADD COLUMN is_deleted INTEGER NOT NULL DEFAULT 0

View File

@@ -1 +0,0 @@
ALTER TABLE notes_tree ADD COLUMN date_modified INTEGER NOT NULL DEFAULT 0

View File

@@ -1 +0,0 @@
DELETE FROM options WHERE opt_name IN ('is_readonly', 'prop_modified', 'doc_title', 'doc_UID', 'format_version', 'flask_secret_key')

View File

@@ -1,3 +0,0 @@
CREATE TABLE notes_history_mig AS SELECT id, note_id, note_title, note_text, date_modified AS date_modified_from, date_modified AS date_modified_to FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;

View File

@@ -1 +0,0 @@
ALTER TABLE notes_history ADD COLUMN encryption INTEGER DEFAULT 0

View File

@@ -1,15 +0,0 @@
CREATE TABLE `notes_history_mig` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`note_id` INT,
`note_title` TEXT,
`note_text` TEXT,
`date_modified_from` INT,
`date_modified_to` INT,
`encryption` INTEGER DEFAULT 0
);
INSERT INTO notes_history (id, note_id, note_title, note_text, date_modified_from, date_modified_to, encryption)
SELECT id, note_id, note_title, note_text, date_modified_from, date_modified_to, encryption FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;

View File

@@ -1,41 +0,0 @@
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_images_note_id` ON `images` (
`note_id`
);
CREATE INDEX `IDX_links_note_id` ON `links` (
`note_id`
);
CREATE INDEX `IDX_audit_log_note_id` ON `audit_log` (
`note_id`
);
CREATE INDEX `IDX_audit_log_date_modified` ON `audit_log` (
`date_modified`
);
CREATE TABLE `notes_mig` (
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`note_clone_id` TEXT,
`date_created` INT,
`date_modified` INT,
`encryption` INT,
`is_deleted` INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY(`note_id`)
);
INSERT INTO notes_mig (note_id, note_title, note_text, note_clone_id, date_created, date_modified, encryption)
SELECT note_id, note_title, note_text, note_clone_id, date_created, date_modified, encryption FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_is_deleted` ON `notes` (
`is_deleted`
);

View File

@@ -1,5 +0,0 @@
ALTER TABLE notes_tree ADD COLUMN is_deleted INTEGER NOT NULL DEFAULT 0;
CREATE INDEX `IDX_notes_tree_is_deleted` ON `notes_tree` (
`is_deleted`
);

View File

@@ -1 +0,0 @@
INSERT INTO options (opt_name, opt_value) VALUES ('last_synced', 0)

View File

@@ -1,5 +0,0 @@
CREATE UNIQUE INDEX `IDX_notes_history_note_from_to` ON `notes_history` (
`note_id`,
`date_modified_from`,
`date_modified_to`
);

View File

@@ -1,3 +0,0 @@
UPDATE options SET opt_name = 'last_synced_pull' WHERE opt_name = 'last_synced';
INSERT INTO options (opt_name, opt_value) VALUES ('last_synced_push', 0);

View File

@@ -1,16 +0,0 @@
CREATE TABLE `audit_log_mig` (
`id` TEXT NOT NULL PRIMARY KEY,
`date_modified` INTEGER NOT NULL,
`category` TEXT NOT NULL,
`browser_id` TEXT,
`note_id` TEXT,
`change_from` TEXT,
`change_to` TEXT,
`comment` TEXT
);
INSERT INTO audit_log_mig (id, date_modified, category, browser_id, note_id, change_from, change_to)
SELECT id, date_modified, category, browser_id, note_id, change_from, change_to FROM audit_log;
DROP TABLE audit_log;
ALTER TABLE audit_log_mig RENAME TO audit_log;

View File

@@ -1,6 +0,0 @@
UPDATE notes SET note_id = substr(note_id, 0, 22);
UPDATE notes_tree SET note_id = substr(note_id, 0, 22), note_pid = substr(note_pid, 0, 22);
UPDATE notes_history SET note_id = substr(note_id, 0, 22);
UPDATE audit_log SET note_id = substr(note_id, 0, 22);
UPDATE links SET note_id = substr(note_id, 0, 22);
UPDATE images SET note_id = substr(note_id, 0, 22);

View File

@@ -1,6 +0,0 @@
UPDATE notes SET note_id = substr(note_id, 0, 13);
UPDATE notes_tree SET note_id = substr(note_id, 0, 13), note_pid = substr(note_pid, 0, 13);
UPDATE notes_history SET note_id = substr(note_id, 0, 13);
UPDATE audit_log SET note_id = substr(note_id, 0, 13);
UPDATE links SET note_id = substr(note_id, 0, 13);
UPDATE images SET note_id = substr(note_id, 0, 13);

View File

@@ -1 +0,0 @@
INSERT INTO options (opt_name, opt_value) VALUES ('document_id', '');

View File

@@ -1 +0,0 @@
INSERT INTO options (opt_name, opt_value) VALUES ('document_secret', '');

View File

@@ -1 +0,0 @@
ALTER TABLE options ADD COLUMN date_modified INTEGER NOT NULL DEFAULT 0

View File

@@ -1,15 +0,0 @@
CREATE TABLE `sync` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entity_name` TEXT NOT NULL,
`entity_id` TEXT NOT NULL,
`sync_date` INTEGER NOT NULL
);
CREATE UNIQUE INDEX `IDX_sync_entity_name_id` ON `sync` (
`entity_name`,
`entity_id`
);
CREATE INDEX `IDX_sync_sync_date` ON `sync` (
`sync_date`
);

View File

@@ -1 +0,0 @@
ALTER TABLE sync ADD COLUMN source_id TEXT

View File

@@ -1,7 +0,0 @@
ALTER TABLE notes_history ADD COLUMN note_history_id TEXT;
UPDATE notes_history SET note_history_id = id;
CREATE UNIQUE INDEX `IDX_note_history_note_history_id` ON `notes_history` (
`note_history_id`
);

View File

@@ -1,27 +0,0 @@
CREATE TABLE `notes_history_mig` (
`note_history_id` TEXT NOT NULL PRIMARY KEY,
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`encryption` INT,
`date_modified_from` INT,
`date_modified_to` INT
);
INSERT INTO notes_history_mig (note_history_id, note_id, note_title, note_text, encryption, date_modified_from, date_modified_to)
SELECT note_history_id, note_id, note_title, note_text, encryption, date_modified_from, date_modified_to FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_notes_history_note_date_modified_from` ON `notes_history` (
`date_modified_from`
);
CREATE INDEX `IDX_notes_history_note_date_modified_to` ON `notes_history` (
`date_modified_to`
);

View File

@@ -1,11 +0,0 @@
CREATE TABLE `options_mig` (
`opt_name` TEXT NOT NULL PRIMARY KEY,
`opt_value` TEXT,
`date_modified` INT
);
INSERT INTO options_mig (opt_name, opt_value, date_modified)
SELECT opt_name, opt_value, date_modified FROM options;
DROP TABLE options;
ALTER TABLE options_mig RENAME TO options;

View File

@@ -1,10 +0,0 @@
CREATE TABLE `event_log` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`note_id` TEXT,
`comment` TEXT,
`date_added` INTEGER NOT NULL
);
CREATE INDEX `IDX_event_log_date_added` ON `event_log` (
`date_added`
);

View File

@@ -1,4 +0,0 @@
CREATE TABLE `recent_notes` (
`note_id` TEXT NOT NULL PRIMARY KEY,
`date_accessed` INTEGER NOT NULL
);

View File

@@ -1 +0,0 @@
ALTER TABLE recent_notes ADD COLUMN is_deleted INT;

View File

@@ -1,52 +0,0 @@
UPDATE audit_log SET category = 'PROTECTED' WHERE category = 'ENCRYPTION';
DELETE FROM notes WHERE note_clone_id IS NOT NULL AND note_clone_id != '';
CREATE TABLE `notes_mig` (
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`date_created` INT,
`date_modified` INT,
`is_protected` INT NOT NULL DEFAULT 0,
`is_deleted` INT NOT NULL DEFAULT 0,
PRIMARY KEY(`note_id`)
);
INSERT INTO notes_mig (note_id, note_title, note_text, date_created, date_modified, is_protected, is_deleted)
SELECT note_id, note_title, note_text, date_created, date_modified, encryption, is_deleted FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_is_deleted` ON `notes` (
`is_deleted`
);
CREATE TABLE `notes_history_mig` (
`note_history_id` TEXT NOT NULL PRIMARY KEY,
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT,
`date_modified_from` INT,
`date_modified_to` INT
);
INSERT INTO notes_history_mig (note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to)
SELECT note_history_id, note_id, note_title, note_text, encryption, date_modified_from, date_modified_to FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_notes_history_note_date_modified_from` ON `notes_history` (
`date_modified_from`
);
CREATE INDEX `IDX_notes_history_note_date_modified_to` ON `notes_history` (
`date_modified_to`
);

View File

@@ -1 +0,0 @@
UPDATE options SET opt_name = 'protected_session_timeout' WHERE opt_name = 'encryption_session_timeout';

View File

@@ -1 +0,0 @@
module.exports = async () => console.log("heeeelllooo!!!");

View File

@@ -1,44 +0,0 @@
const sql = require('../services/sql');
const data_encryption = require('../services/data_encryption');
const password_encryption = require('../services/password_encryption');
const readline = require('readline');
const cl = readline.createInterface(process.stdin, process.stdout);
function question(q) {
return new Promise( (res, rej) => {
cl.question( q, answer => {
res(answer);
})
});
}
module.exports = async () => {
const password = await question("Enter password: ");
const dataKey = await password_encryption.getDecryptedDataKey(password);
const protectedNotes = await sql.getRows("SELECT * FROM notes WHERE is_protected = 1");
for (const note of protectedNotes) {
const decryptedTitle = data_encryption.decrypt(dataKey, note.note_title);
note.note_title = data_encryption.encrypt(dataKey, "0" + note.note_id, decryptedTitle);
const decryptedText = data_encryption.decrypt(dataKey, note.note_text);
note.note_text = data_encryption.encrypt(dataKey, "1" + note.note_id, decryptedText);
await sql.execute("UPDATE notes SET note_title = ?, note_text = ? WHERE note_id = ?", [note.note_title, note.note_text, note.note_id]);
}
const protectedNotesHistory = await sql.getRows("SELECT * FROM notes_history WHERE is_protected = 1");
for (const noteHistory of protectedNotesHistory) {
const decryptedTitle = data_encryption.decrypt(dataKey, noteHistory.note_title);
noteHistory.note_title = data_encryption.encrypt(dataKey, "0" + noteHistory.note_history_id, decryptedTitle);
const decryptedText = data_encryption.decrypt(dataKey, noteHistory.note_text);
noteHistory.note_text = data_encryption.encrypt(dataKey, "1" + noteHistory.note_history_id, decryptedText);
await sql.execute("UPDATE notes SET note_title = ?, note_text = ? WHERE note_id = ?", [noteHistory.note_title, noteHistory.note_text, noteHistory.note_history_id]);
}
};

View File

@@ -1 +0,0 @@
INSERT INTO options (opt_name, opt_value) VALUES ('encrypted_data_key_iv', '')

View File

@@ -1,25 +0,0 @@
const password_encryption = require('../services/password_encryption');
const readline = require('readline');
const cl = readline.createInterface(process.stdin, process.stdout);
function question(q) {
return new Promise( (res, rej) => {
cl.question( q, answer => {
res(answer);
})
});
}
module.exports = async () => {
const password = await question("Enter password: ");
let dataKey = await password_encryption.getDecryptedDataKey(password);
console.log("Original data key: ", dataKey);
dataKey = dataKey.slice(0, 16);
console.log("Trimmed data key: ", dataKey);
await password_encryption.setDataKey(password, dataKey);
};

View File

@@ -1,5 +0,0 @@
CREATE TABLE `source_ids` (
`source_id` TEXT NOT NULL,
`date_created` INTEGER NOT NULL,
PRIMARY KEY(`source_id`)
);

View File

@@ -1 +0,0 @@
UPDATE notes_tree SET note_pid = 'root' WHERE note_pid = ''

View File

@@ -1 +0,0 @@
DELETE FROM sync;

View File

@@ -1,21 +0,0 @@
CREATE TABLE [notes_tree_mig] (
[note_tree_id] VARCHAR(30) PRIMARY KEY NOT NULL,
[note_id] VARCHAR(30) UNIQUE NOT NULL,
[note_pid] VARCHAR(30) NOT NULL,
[note_pos] INTEGER NOT NULL,
[is_expanded] BOOLEAN NULL ,
date_modified INTEGER NOT NULL DEFAULT 0,
is_deleted INTEGER NOT NULL DEFAULT 0
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, note_pid, note_pos, is_expanded, date_modified, is_deleted)
SELECT 'TT' || SUBSTR(note_id, 3), note_id, note_pid, note_pos, is_expanded, date_modified, is_deleted FROM notes_tree;
UPDATE notes_tree_mig SET note_pid = 'TT' || SUBSTR(note_pid, 3) WHERE note_pid != 'root';
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
`note_tree_id`
);

View File

@@ -1 +0,0 @@
UPDATE options SET opt_name = 'start_note_tree_id' WHERE opt_name = 'start_node';

View File

@@ -1,7 +0,0 @@
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
`note_tree_id` TEXT NOT NULL PRIMARY KEY,
`date_accessed` INTEGER NOT NULL ,
is_deleted INT
);

View File

@@ -1,6 +0,0 @@
UPDATE
notes_tree
SET
note_pid = (SELECT parent.note_id FROM notes_tree parent WHERE notes_tree.note_pid = parent.note_tree_id)
WHERE
note_pid != 'root'

View File

@@ -1,7 +0,0 @@
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
`note_path` TEXT NOT NULL PRIMARY KEY,
`date_accessed` INTEGER NOT NULL ,
is_deleted INT
);

View File

@@ -1,24 +0,0 @@
CREATE TABLE "notes_tree_mig" (
[note_tree_id] VARCHAR(30) PRIMARY KEY NOT NULL,
[note_id] VARCHAR(30) NOT NULL,
[note_pid] VARCHAR(30) NOT NULL,
[note_pos] INTEGER NOT NULL,
[is_expanded] BOOLEAN NULL ,
date_modified INTEGER NOT NULL DEFAULT 0,
is_deleted INTEGER NOT NULL DEFAULT 0
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, note_pid, note_pos, is_expanded, date_modified, is_deleted)
SELECT note_tree_id, note_id, note_pid, note_pos, is_expanded, date_modified, is_deleted FROM notes_tree;
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_tree_id` ON `notes_tree` (
`note_tree_id`
);
CREATE INDEX `IDX_notes_tree_note_id_note_pid` ON `notes_tree` (
`note_id`,
`note_pid`
);

View File

@@ -1,3 +0,0 @@
DELETE FROM sync;
UPDATE options SET opt_value = 0 WHERE opt_name IN ('last_synced_push', 'last_synced_pull');

View File

@@ -1 +0,0 @@
DROP TABLE audit_log;

View File

@@ -1 +0,0 @@
ALTER TABLE notes_tree ADD COLUMN `prefix` TEXT

View File

@@ -1,2 +0,0 @@
DROP TABLE IF EXISTS links;
DROP TABLE IF EXISTS images;

View File

@@ -1 +0,0 @@
SELECT 1;

View File

@@ -1,10 +0,0 @@
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
'note_tree_id'TEXT NOT NULL PRIMARY KEY,
`note_path` TEXT NOT NULL,
`date_accessed` INTEGER NOT NULL ,
is_deleted INT
);
DELETE FROM sync WHERE entity_name = 'recent_notes';

View File

@@ -1 +0,0 @@
UPDATE options SET opt_name = 'start_note_path' WHERE opt_name = 'start_note_tree_id';

View File

@@ -1,156 +0,0 @@
DROP TABLE migrations;
-- Sync
CREATE TABLE `sync_mig` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entity_name` TEXT NOT NULL,
`entity_id` TEXT NOT NULL,
`source_id` TEXT NOT NULL,
`sync_date` TEXT NOT NULL);
INSERT INTO sync_mig (id, entity_name, entity_id, source_id, sync_date)
SELECT id, entity_name, entity_id, source_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', sync_date, 'unixepoch') FROM sync;
DROP TABLE sync;
ALTER TABLE sync_mig RENAME TO sync;
CREATE UNIQUE INDEX `IDX_sync_entity_name_id` ON `sync` (
`entity_name`,
`entity_id`
);
CREATE INDEX `IDX_sync_sync_date` ON `sync` (
`sync_date`
);
-- Options
UPDATE options SET opt_value = strftime('%Y-%m-%dT%H:%M:%S.000Z', opt_value, 'unixepoch') WHERE opt_name IN ('last_backup_date');
UPDATE options SET date_modified = strftime('%Y-%m-%dT%H:%M:%S.000Z', date_modified, 'unixepoch');
-- Event log
CREATE TABLE `event_log_mig` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`note_id` TEXT,
`comment` TEXT,
`date_added` TEXT NOT NULL
);
INSERT INTO event_log_mig (id, note_id, comment, date_added)
SELECT id, note_id, comment, strftime('%Y-%m-%dT%H:%M:%S.000Z', date_added, 'unixepoch') FROM event_log;
DROP TABLE event_log;
ALTER TABLE event_log_mig RENAME TO event_log;
CREATE INDEX `IDX_event_log_date_added` ON `event_log` (
`date_added`
);
-- Notes
CREATE TABLE IF NOT EXISTS "notes_mig" (
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT NOT NULL DEFAULT 0,
`is_deleted` INT NOT NULL DEFAULT 0,
`date_created` TEXT NOT NULL,
`date_modified` TEXT NOT NULL,
PRIMARY KEY(`note_id`)
);
INSERT INTO notes_mig (note_id, note_title, note_text, is_protected, is_deleted, date_created, date_modified)
SELECT note_id, note_title, note_text, is_protected, is_deleted,
strftime('%Y-%m-%dT%H:%M:%S.000Z', date_created, 'unixepoch'),
strftime('%Y-%m-%dT%H:%M:%S.000Z', date_modified, 'unixepoch')
FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_is_deleted` ON `notes` (
`is_deleted`
);
-- note history
CREATE TABLE IF NOT EXISTS "notes_history_mig" (
`note_history_id` TEXT NOT NULL PRIMARY KEY,
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT NOT NULL DEFAULT 0,
`date_modified_from` TEXT NOT NULL,
`date_modified_to` TEXT NOT NULL
);
INSERT INTO notes_history_mig (note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to)
SELECT note_history_id, note_id, note_title, note_text, is_protected,
strftime('%Y-%m-%dT%H:%M:%S.000Z', date_modified_from, 'unixepoch'),
strftime('%Y-%m-%dT%H:%M:%S.000Z', date_modified_to, 'unixepoch')
FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_notes_history_note_date_modified_from` ON `notes_history` (
`date_modified_from`
);
CREATE INDEX `IDX_notes_history_note_date_modified_to` ON `notes_history` (
`date_modified_to`
);
-- Source IDs
DROP TABLE source_ids;
CREATE TABLE `source_ids` (
`source_id` TEXT NOT NULL,
`date_created` TEXT NOT NULL,
PRIMARY KEY(`source_id`)
);
-- Recent notes
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
`note_tree_id` TEXT NOT NULL PRIMARY KEY,
`note_path` TEXT NOT NULL,
`date_accessed` TEXT NOT NULL,
is_deleted INT
);
-- Notes tree
CREATE TABLE IF NOT EXISTS "notes_tree_mig" (
`note_tree_id` TEXT NOT NULL,
`note_id` TEXT NOT NULL,
`note_pid` TEXT NOT NULL,
`note_pos` INTEGER NOT NULL,
`prefix` TEXT,
`is_expanded` BOOLEAN,
`is_deleted` INTEGER NOT NULL DEFAULT 0,
`date_modified` TEXT NOT NULL,
PRIMARY KEY(`note_tree_id`)
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, note_pid, note_pos, prefix, is_expanded, is_deleted, date_modified)
SELECT note_tree_id, note_id, note_pid, note_pos, prefix, is_expanded, is_deleted,
strftime('%Y-%m-%dT%H:%M:%S.000Z', date_modified, 'unixepoch')
FROM notes_tree;
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_tree_id` ON `notes_tree` (
`note_tree_id`
);
CREATE INDEX `IDX_notes_tree_note_id_note_pid` ON `notes_tree` (
`note_id`,
`note_pid`
);

View File

@@ -1,5 +0,0 @@
DROP index IDX_notes_tree_note_tree_id;
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
`note_id`
);

View File

@@ -1,8 +0,0 @@
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes', note_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes;
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes_tree', note_tree_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes_tree;
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes_history', note_history_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes_history;

View File

@@ -1,18 +0,0 @@
delete from notes where note_id in ('FfZylYxt','HqzAEsR2fFEZ','KgTQDh67+1Mh','TKMbAYl0AFyQ','W+bGM185c6gw',
'YXBdhv4dYKMy','aF4/6p1zTpIS','nsLnrrDktl/s','wkhFImoPuxky');
delete from notes_tree where note_tree_id in ('TTy5N2y2S6JP','TTkL3rWDexpp','TTEhtomZekUk','TTvP7zW01zwg','TTuYmMTZyKRt'
,'TToaClamxbBF','TTKvNCe5X2dj','TTE7jFx5A0zW','TTc79bscyrHX','TTcw8ZyDy2Cc','TTdFzAOWA9hZ','TTUyVLqyIvVg','TTy85NKSBDyO'
,'TTCyuireAWBv','TTDpVyuzbj1a','TTYznrYvAeIs','TTocvv15VMyu','TTjtxQkBT5vj','TToyyRzbBF0T','TTFt8NE9vSyZ','TTfzFZOuuDqv'
,'TT2e2oUYcxG6','TToXselUpPAy','TTEM68gGukg0','TTkZxxwtUOzW','TTAZNxBtgmmh','TTK1YErdBE3x','TTzjKiEf54o6','TTPWd5Ou1xET'
,'TTxQtjf22rTL','TTJAGaI4c89V','TTUQmsxSTdV3','TTGAOf5Lvr6b','TTECSDRN4ZPW','TTZZXLiGNWv4','TTxSLphulRct','TT8vld7x0qWF'
,'TTuuxXnv2Kpw','TT3RkLZ9AI6t','TTuEbI4Cj3qC','TT4CXXRyWRqm','TTQCuFgnMqxX','TTxnDEMz1bd4','TTMOnqhBesjs','TTHblx55gRHN'
,'TTMHW8HIGCjR','TTxzg3qqyLjw','TTluvD7yS8Rv','TT88qK2j3ggk','TTF7oHhS5ANF','TTOH275JiUSy','TToIt2dQ5tYH','TTBPgixQgbAq'
,'TTeN46707CJl','TTDb3GC2y6nN','TTlIXFwpICko','TTE6M9AxLh2U','TTjqhB8zXjD6','TT9NPeLg4FjK','TTj12jDX7TM3','TTPRjf7EdvDX'
,'TTBnu09pxOmn','TTZxyAkJQ9Cf','TTlvqeof2IBS','TT5R5xtIqRQf','TTiiD6hFjlVH','TTNVjGHSqNgo','TTrORSHCsAVQ','TT5Ei5fngqkv'
,'TTQ4hdpcIX3C','TTQgxq4CoiHU','TTJayLjI6BSE','TTYyraNy0CVT','TTnAJ3AK3wHz','TTJwKcgs1s0X','TT4FiatgbLEs','TTEdp5Zx1n5F');
update notes_tree set is_deleted = 1 where note_tree_id in ('TTiaU9xqnrca','TTQAy9c1vDId','TTHXWBJB2Y24','TTDV8DUK2IZA'
,'TTI5JHODZYV5','TTBEZ8TMSJV4','TT1MDWZXE8ZI','TTJV7ZOA8907','TTUGE6N99QSO','TTN0OS17T0KM');
delete from notes_history where note_history_id in ('KHAp5viTrrOfugzQ', 'xmhaS76piZn0QGzn', '25aL96ke8xmud9Bt');

View File

@@ -1,3 +0,0 @@
DELETE FROM notes_tree WHERE note_tree_id IN ('cb94QGgnCwOD', 'c3FWKhcVYyaQ');
DELETE FROM notes_history WHERE note_history_id IN ('cdUD6ycs3l9h', 'OW4uh0HLtXaw');

View File

@@ -1 +0,0 @@
UPDATE options SET opt_value = (SELECT MAX(id) FROM sync) WHERE opt_name = 'last_synced_push';

View File

@@ -1,13 +0,0 @@
DELETE FROM recent_notes;
DELETE FROM sync;
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes', note_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes;
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes_tree', note_tree_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes_tree;
INSERT OR IGNORE INTO sync (entity_name, entity_id, sync_date, source_id)
SELECT 'notes_history', note_history_id, strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), 'IMPORT' FROM notes_history;
UPDATE options SET opt_value = (SELECT MAX(id) FROM sync) WHERE opt_name IN ('last_synced_push', 'last_synced_pull');

View File

@@ -1,101 +0,0 @@
INSERT INTO notes (note_id, note_title, note_text, date_created, date_modified)
VALUES ('root', 'root', 'root', strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'), strftime('%Y-%m-%dT%H:%M:%S.000Z', 'now'));
CREATE TABLE IF NOT EXISTS "notes_mig" (
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT NOT NULL DEFAULT 0,
`is_deleted` INT NOT NULL DEFAULT 0,
`date_created` TEXT NOT NULL,
`date_modified` TEXT NOT NULL,
PRIMARY KEY(`note_id`)
);
INSERT INTO notes_mig (note_id, note_title, note_text, is_protected, is_deleted, date_created, date_modified)
SELECT note_id, note_title, note_text, is_protected, is_deleted, date_created, date_modified FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_is_deleted` ON `notes` (
`is_deleted`
);
CREATE TABLE IF NOT EXISTS "notes_tree_mig" (
`note_tree_id` TEXT NOT NULL,
`note_id` TEXT NOT NULL,
`parent_note_id` TEXT NOT NULL,
`note_position` INTEGER NOT NULL,
`prefix` TEXT,
`is_expanded` BOOLEAN,
`is_deleted` INTEGER NOT NULL DEFAULT 0,
`date_modified` TEXT NOT NULL,
FOREIGN KEY(note_id) REFERENCES notes(note_id),
FOREIGN KEY(parent_note_id) REFERENCES notes(note_id),
PRIMARY KEY(`note_tree_id`)
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified)
SELECT note_tree_id, note_id, note_pid, note_pos, prefix, is_expanded, is_deleted, date_modified FROM notes_tree;
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_tree_id` ON `notes_tree` (
`note_tree_id`
);
CREATE INDEX `IDX_notes_tree_note_id_parent_note_id` ON `notes_tree` (
`note_id`,
`parent_note_id`
);
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
`note_id`
);
CREATE TABLE IF NOT EXISTS "notes_history_mig" (
`note_history_id` TEXT NOT NULL PRIMARY KEY,
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT NOT NULL DEFAULT 0,
`date_modified_from` TEXT NOT NULL,
`date_modified_to` TEXT NOT NULL,
FOREIGN KEY(note_id) REFERENCES notes(note_id)
);
INSERT INTO notes_history_mig (note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to)
SELECT note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_notes_history_note_date_modified_from` ON `notes_history` (
`date_modified_from`
);
CREATE INDEX `IDX_notes_history_note_date_modified_to` ON `notes_history` (
`date_modified_to`
);
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
`note_tree_id` TEXT NOT NULL PRIMARY KEY,
`note_path` TEXT NOT NULL,
`date_accessed` TEXT NOT NULL,
is_deleted INT,
FOREIGN KEY(note_tree_id) REFERENCES notes_tree(note_tree_id)
);
DROP TABLE event_log;
CREATE TABLE `event_log` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`note_id` TEXT,
`comment` TEXT,
`date_added` TEXT NOT NULL,
FOREIGN KEY(note_id) REFERENCES notes(note_id)
);

View File

@@ -1,29 +0,0 @@
CREATE TABLE IF NOT EXISTS "notes_tree_mig" (
`note_tree_id` TEXT NOT NULL,
`note_id` TEXT NOT NULL,
`parent_note_id` TEXT NOT NULL,
`note_position` INTEGER NOT NULL,
`prefix` TEXT,
`is_expanded` BOOLEAN,
`is_deleted` INTEGER NOT NULL DEFAULT 0,
`date_modified` TEXT NOT NULL,
FOREIGN KEY(note_id) REFERENCES notes(note_id),
PRIMARY KEY(`note_tree_id`)
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified)
SELECT note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified FROM notes_tree;
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_tree_id` ON `notes_tree` (
`note_tree_id`
);
CREATE INDEX `IDX_notes_tree_note_id_parent_note_id` ON `notes_tree` (
`note_id`,
`parent_note_id`
);
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
`note_id`
);

View File

@@ -1,28 +0,0 @@
CREATE TABLE IF NOT EXISTS "notes_tree_mig" (
`note_tree_id` TEXT NOT NULL,
`note_id` TEXT NOT NULL,
`parent_note_id` TEXT NOT NULL,
`note_position` INTEGER NOT NULL,
`prefix` TEXT,
`is_expanded` BOOLEAN,
`is_deleted` INTEGER NOT NULL DEFAULT 0,
`date_modified` TEXT NOT NULL,
PRIMARY KEY(`note_tree_id`)
);
INSERT INTO notes_tree_mig (note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified)
SELECT note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified FROM notes_tree;
DROP TABLE notes_tree;
ALTER TABLE notes_tree_mig RENAME TO notes_tree;
CREATE INDEX `IDX_notes_tree_note_tree_id` ON `notes_tree` (
`note_tree_id`
);
CREATE INDEX `IDX_notes_tree_note_id_parent_note_id` ON `notes_tree` (
`note_id`,
`parent_note_id`
);
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
`note_id`
);

View File

@@ -1,34 +0,0 @@
CREATE TABLE IF NOT EXISTS "notes_history_mig" (
`note_history_id` TEXT NOT NULL PRIMARY KEY,
`note_id` TEXT NOT NULL,
`note_title` TEXT,
`note_text` TEXT,
`is_protected` INT NOT NULL DEFAULT 0,
`date_modified_from` TEXT NOT NULL,
`date_modified_to` TEXT NOT NULL
);
INSERT INTO notes_history_mig (note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to)
SELECT note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to FROM notes_history;
DROP TABLE notes_history;
ALTER TABLE notes_history_mig RENAME TO notes_history;
CREATE INDEX `IDX_notes_history_note_id` ON `notes_history` (
`note_id`
);
CREATE INDEX `IDX_notes_history_note_date_modified_from` ON `notes_history` (
`date_modified_from`
);
CREATE INDEX `IDX_notes_history_note_date_modified_to` ON `notes_history` (
`date_modified_to`
);
DROP TABLE recent_notes;
CREATE TABLE `recent_notes` (
`note_tree_id` TEXT NOT NULL PRIMARY KEY,
`note_path` TEXT NOT NULL,
`date_accessed` TEXT NOT NULL,
is_deleted INT
);

View File

@@ -1,6 +0,0 @@
DROP INDEX IDX_notes_tree_note_id_parent_note_id;
CREATE UNIQUE INDEX `IDX_notes_tree_note_id_parent_note_id` ON `notes_tree` (
`note_id`,
`parent_note_id`
);

View File

@@ -1,9 +0,0 @@
DROP INDEX IDX_notes_tree_note_id_parent_note_id;
CREATE INDEX `IDX_notes_tree_note_id_parent_note_id` ON `notes_tree` (
`note_id`,
`parent_note_id`
);
-- dropping this as it's just duplicate of primary key
DROP INDEX IDX_notes_tree_note_tree_id;

View File

@@ -1,11 +0,0 @@
CREATE TABLE images
(
image_id TEXT PRIMARY KEY NOT NULL,
format TEXT NOT NULL,
checksum TEXT NOT NULL,
name TEXT NOT NULL,
data BLOB,
is_deleted INT NOT NULL DEFAULT 0,
date_modified TEXT NOT NULL,
date_created TEXT NOT NULL
);

View File

@@ -1,16 +0,0 @@
DROP TABLE images;
CREATE TABLE images
(
image_id TEXT PRIMARY KEY NOT NULL,
note_id TEXT NOT NULL,
format TEXT NOT NULL,
checksum TEXT NOT NULL,
name TEXT NOT NULL,
data BLOB,
is_deleted INT NOT NULL DEFAULT 0,
date_modified TEXT NOT NULL,
date_created TEXT NOT NULL
);
CREATE INDEX images_note_id_index ON images (note_id);

View File

@@ -1,27 +0,0 @@
DROP TABLE images;
CREATE TABLE images
(
image_id TEXT PRIMARY KEY NOT NULL,
format TEXT NOT NULL,
checksum TEXT NOT NULL,
name TEXT NOT NULL,
data BLOB,
is_deleted INT NOT NULL DEFAULT 0,
date_modified TEXT NOT NULL,
date_created TEXT NOT NULL
);
CREATE TABLE notes_image
(
note_image_id TEXT PRIMARY KEY NOT NULL,
note_id TEXT NOT NULL,
image_id TEXT NOT NULL,
is_deleted INT NOT NULL DEFAULT 0,
date_modified TEXT NOT NULL,
date_created TEXT NOT NULL
);
CREATE INDEX notes_image_note_id_index ON notes_image (note_id);
CREATE INDEX notes_image_image_id_index ON notes_image (image_id);
CREATE INDEX notes_image_note_id_image_id_index ON notes_image (note_id, image_id);

View File

@@ -1,12 +0,0 @@
CREATE TABLE attributes
(
attribute_id TEXT PRIMARY KEY NOT NULL,
note_id TEXT NOT NULL,
name TEXT NOT NULL,
value TEXT,
date_created TEXT NOT NULL,
date_modified TEXT NOT NULL
);
CREATE INDEX attributes_note_id_index ON attributes (note_id);
CREATE UNIQUE INDEX attributes_note_id_name_index ON attributes (note_id, name);

View File

@@ -1,5 +0,0 @@
ALTER TABLE options ADD COLUMN is_synced INTEGER NOT NULL DEFAULT 0;
UPDATE options SET is_synced = 1 WHERE opt_name IN ('username', 'password_verification_hash', 'password_verification_salt',
'password_derived_key_salt', 'encrypted_data_key', 'encrypted_data_key_iv',
'protected_session_timeout', 'history_snapshot_time_interval');

View File

@@ -1 +0,0 @@
ALTER TABLE notes ADD COLUMN type TEXT NOT NULL DEFAULT 'text';

View File

@@ -1 +0,0 @@
ALTER TABLE notes ADD COLUMN mime TEXT NOT NULL DEFAULT 'text/html';

View File

@@ -1,207 +0,0 @@
CREATE TABLE "options_mig" (
`name` TEXT NOT NULL PRIMARY KEY,
`value` TEXT,
`dateModified` INT,
isSynced INTEGER NOT NULL DEFAULT 0);
INSERT INTO options_mig (name, value, dateModified, isSynced)
SELECT opt_name, opt_value, date_modified, is_synced FROM options;
DROP TABLE options;
ALTER TABLE options_mig RENAME TO options;
CREATE TABLE "sync_mig" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`entityName` TEXT NOT NULL,
`entityId` TEXT NOT NULL,
`sourceId` TEXT NOT NULL,
`syncDate` TEXT NOT NULL);
INSERT INTO sync_mig (id, entityName, entityId, sourceId, syncDate)
SELECT id, entity_name, entity_id, source_id, sync_date FROM sync;
DROP TABLE sync;
ALTER TABLE sync_mig RENAME TO sync;
CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` (
`entityName`,
`entityId`
);
CREATE INDEX `IDX_sync_syncDate` ON `sync` (
`syncDate`
);
CREATE TABLE `source_ids_mig` (
`sourceId` TEXT NOT NULL,
`dateCreated` TEXT NOT NULL,
PRIMARY KEY(`sourceId`)
);
INSERT INTO source_ids_mig (sourceId, dateCreated)
SELECT source_id, date_created FROM source_ids;
DROP TABLE source_ids;
ALTER TABLE source_ids_mig RENAME TO source_ids;
CREATE TABLE "notes_mig" (
`noteId` TEXT NOT NULL,
`title` TEXT,
`content` TEXT,
`isProtected` INT NOT NULL DEFAULT 0,
`isDeleted` INT NOT NULL DEFAULT 0,
`dateCreated` TEXT NOT NULL,
`dateModified` TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'text',
mime TEXT NOT NULL DEFAULT 'text/html',
PRIMARY KEY(`noteId`)
);
INSERT INTO notes_mig (noteId, title, content, isProtected, isDeleted, dateCreated, dateModified, type, mime)
SELECT note_id, note_title, note_text, is_protected, is_deleted, date_created, date_modified, type, mime FROM notes;
DROP TABLE notes;
ALTER TABLE notes_mig RENAME TO notes;
CREATE INDEX `IDX_notes_isDeleted` ON `notes` (
`isDeleted`
);
CREATE TABLE `event_log_mig` (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`noteId` TEXT,
`comment` TEXT,
`dateAdded` TEXT NOT NULL,
FOREIGN KEY(noteId) REFERENCES notes(noteId)
);
INSERT INTO event_log_mig (id, noteId, comment, dateAdded)
SELECT id, note_id, comment, date_added FROM event_log;
DROP TABLE event_log;
ALTER TABLE event_log_mig RENAME TO event_log;
CREATE TABLE "note_tree" (
`noteTreeId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` BOOLEAN,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`noteTreeId`)
);
INSERT INTO note_tree (noteTreeId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified)
SELECT note_tree_id, note_id, parent_note_id, note_position, prefix, is_expanded, is_deleted, date_modified FROM notes_tree;
DROP TABLE notes_tree;
CREATE INDEX `IDX_note_tree_noteId` ON `note_tree` (
`noteId`
);
CREATE INDEX `IDX_note_tree_noteId_parentNoteId` ON `note_tree` (
`noteId`,
`parentNoteId`
);
CREATE TABLE "note_revisions" (
`noteRevisionId` TEXT NOT NULL PRIMARY KEY,
`noteId` TEXT NOT NULL,
`title` TEXT,
`content` TEXT,
`isProtected` INT NOT NULL DEFAULT 0,
`dateModifiedFrom` TEXT NOT NULL,
`dateModifiedTo` TEXT NOT NULL
);
INSERT INTO note_revisions (noteRevisionId, noteId, title, content, isProtected, dateModifiedFrom, dateModifiedTo)
SELECT note_history_id, note_id, note_title, note_text, is_protected, date_modified_from, date_modified_to FROM notes_history;
DROP TABLE notes_history;
CREATE INDEX `IDX_note_revisions_noteId` ON `note_revisions` (
`noteId`
);
CREATE INDEX `IDX_note_revisions_dateModifiedFrom` ON `note_revisions` (
`dateModifiedFrom`
);
CREATE INDEX `IDX_note_revisions_dateModifiedTo` ON `note_revisions` (
`dateModifiedTo`
);
CREATE TABLE `recent_notes_mig` (
`noteTreeId` TEXT NOT NULL PRIMARY KEY,
`notePath` TEXT NOT NULL,
`dateAccessed` TEXT NOT NULL,
isDeleted INT
);
INSERT INTO recent_notes_mig (noteTreeId, notePath, dateAccessed, isDeleted)
SELECT note_tree_id, note_path, date_accessed, is_deleted FROM recent_notes;
DROP TABLE recent_notes;
ALTER TABLE recent_notes_mig RENAME TO recent_notes;
CREATE TABLE images_mig
(
imageId TEXT PRIMARY KEY NOT NULL,
format TEXT NOT NULL,
checksum TEXT NOT NULL,
name TEXT NOT NULL,
data BLOB,
isDeleted INT NOT NULL DEFAULT 0,
dateModified TEXT NOT NULL,
dateCreated TEXT NOT NULL
);
INSERT INTO images_mig (imageId, format, checksum, name, data, isDeleted, dateModified, dateCreated)
SELECT image_id, format, checksum, name, data, is_deleted, date_modified, date_created FROM images;
DROP TABLE images;
ALTER TABLE images_mig RENAME TO images;
CREATE TABLE note_images
(
noteImageId TEXT PRIMARY KEY NOT NULL,
noteId TEXT NOT NULL,
imageId TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0,
dateModified TEXT NOT NULL,
dateCreated TEXT NOT NULL
);
INSERT INTO note_images (noteImageId, noteId, imageId, isDeleted, dateModified, dateCreated)
SELECT note_image_id, note_id, image_id, is_deleted, date_modified, date_created FROM notes_image;
DROP TABLE notes_image;
CREATE INDEX IDX_note_images_noteId ON note_images (noteId);
CREATE INDEX IDX_note_images_imageId ON note_images (imageId);
CREATE INDEX IDX_note_images_noteId_imageId ON note_images (noteId, imageId);
CREATE TABLE attributes_mig
(
attributeId TEXT PRIMARY KEY NOT NULL,
noteId TEXT NOT NULL,
name TEXT NOT NULL,
value TEXT,
dateCreated TEXT NOT NULL,
dateModified TEXT NOT NULL
);
INSERT INTO attributes_mig (attributeId, noteId, name, value, dateCreated, dateModified)
SELECT attribute_id, note_id, name, value, date_created, date_modified FROM attributes;
DROP TABLE attributes;
ALTER TABLE attributes_mig RENAME TO attributes;
CREATE INDEX IDX_attributes_noteId ON attributes (noteId);
CREATE UNIQUE INDEX IDX_attributes_noteId_name ON attributes (noteId, name);

View File

@@ -1,4 +0,0 @@
UPDATE sync SET entityName = 'note_images' WHERE entityName = 'notes_image';
UPDATE sync SET entityName = 'note_tree' WHERE entityName = 'notes_tree';
UPDATE sync SET entityName = 'note_revisions' WHERE entityName = 'notes_history';
UPDATE sync SET entityName = 'note_reordering' WHERE entityName = 'notes_reordering';

View File

@@ -1 +0,0 @@
DROP INDEX IDX_attributes_noteId_name;

View File

@@ -1 +0,0 @@
ALTER TABLE attributes ADD COLUMN isDeleted INT NOT NULL DEFAULT 0;

View File

@@ -1 +0,0 @@
ALTER TABLE attributes ADD COLUMN position INT NOT NULL DEFAULT 0;

View File

@@ -1,7 +0,0 @@
CREATE TABLE IF NOT EXISTS "api_tokens"
(
apiTokenId TEXT PRIMARY KEY NOT NULL,
token TEXT NOT NULL,
dateCreated TEXT NOT NULL,
isDeleted INT NOT NULL DEFAULT 0
);

View File

@@ -1 +0,0 @@
CREATE INDEX IDX_attributes_name_value ON attributes (name, value);

View File

@@ -1,23 +0,0 @@
UPDATE attributes SET value = '' WHERE value IS NULL;
CREATE TABLE IF NOT EXISTS "attributes_mig"
(
attributeId TEXT PRIMARY KEY NOT NULL,
noteId TEXT NOT NULL,
name TEXT NOT NULL,
value TEXT NOT NULL DEFAULT '',
position INT NOT NULL DEFAULT 0,
dateCreated TEXT NOT NULL,
dateModified TEXT NOT NULL,
isDeleted INT NOT NULL
);
INSERT INTO attributes_mig (attributeId, noteId, name, value, position, dateCreated, dateModified, isDeleted)
SELECT attributeId, noteId, name, value, position, dateCreated, dateModified, isDeleted FROM attributes;
DROP TABLE attributes;
ALTER TABLE attributes_mig RENAME TO attributes;
CREATE INDEX IDX_attributes_noteId ON attributes (noteId);
CREATE INDEX IDX_attributes_name_value ON attributes (name, value);

View File

@@ -1 +0,0 @@
UPDATE notes SET mime = 'application/javascript;env=frontend' WHERE type = 'code' AND mime = 'application/javascript';

View File

@@ -1,38 +0,0 @@
CREATE TABLE "branches" (
`branchId` TEXT NOT NULL,
`noteId` TEXT NOT NULL,
`parentNoteId` TEXT NOT NULL,
`notePosition` INTEGER NOT NULL,
`prefix` TEXT,
`isExpanded` BOOLEAN,
`isDeleted` INTEGER NOT NULL DEFAULT 0,
`dateModified` TEXT NOT NULL,
PRIMARY KEY(`branchId`)
);
INSERT INTO branches (branchId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified)
SELECT noteTreeId, noteId, parentNoteId, notePosition, prefix, isExpanded, isDeleted, dateModified FROM note_tree;
DROP TABLE note_tree;
CREATE INDEX `IDX_branches_noteId` ON `branches` (
`noteId`
);
CREATE INDEX `IDX_branches_noteId_parentNoteId` ON `branches` (
`noteId`,
`parentNoteId`
);
CREATE TABLE `recent_notes_mig` (
`branchId` TEXT NOT NULL PRIMARY KEY,
`notePath` TEXT NOT NULL,
`dateAccessed` TEXT NOT NULL,
isDeleted INT
);
INSERT INTO recent_notes_mig (branchId, notePath, dateAccessed, isDeleted)
SELECT noteTreeId, notePath, dateAccessed, isDeleted FROM recent_notes;
DROP TABLE recent_notes;
ALTER TABLE recent_notes_mig RENAME TO recent_notes;

View File

@@ -1,22 +0,0 @@
create table labels
(
labelId TEXT not null primary key,
noteId TEXT not null,
name TEXT not null,
value TEXT default '' not null,
position INT default 0 not null,
dateCreated TEXT not null,
dateModified TEXT not null,
isDeleted INT not null
);
create index IDX_labels_name_value
on labels (name, value);
create index IDX_labels_noteId
on labels (noteId);
INSERT INTO labels (labelId, noteId, name, "value", "position", dateCreated, dateModified, isDeleted)
SELECT attributeId, noteId, name, "value", "position", dateCreated, dateModified, isDeleted FROM attributes;
DROP TABLE attributes;

Some files were not shown because too many files have changed in this diff Show More