mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 03:46:37 +01:00 
			
		
		
		
	Compare commits
	
		
			138 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					cb8e551ee0 | ||
| 
						 | 
					f6dd1110e8 | ||
| 
						 | 
					623200b92b | ||
| 
						 | 
					4ff40ba14f | ||
| 
						 | 
					cecce1df20 | ||
| 
						 | 
					2030c8e995 | ||
| 
						 | 
					de6108f95d | ||
| 
						 | 
					fddab59265 | ||
| 
						 | 
					f22c76d9fb | ||
| 
						 | 
					b1131844d6 | ||
| 
						 | 
					03f3e46f8b | ||
| 
						 | 
					6f1b0b92fe | ||
| 
						 | 
					5e40c03fc9 | ||
| 
						 | 
					3b1fb8024f | ||
| 
						 | 
					6f49f870ed | ||
| 
						 | 
					b9133cb683 | ||
| 
						 | 
					ccac46527c | ||
| 
						 | 
					dcd35b1ea2 | ||
| 
						 | 
					a74741343e | ||
| 
						 | 
					4ff7e0813d | ||
| 
						 | 
					6d2d72fa7f | ||
| 
						 | 
					30ec706d37 | ||
| 
						 | 
					25ce2e4253 | ||
| 
						 | 
					b5674223e5 | ||
| 
						 | 
					02988ed2b3 | ||
| 
						 | 
					c27f573eed | ||
| 
						 | 
					c5b0c60797 | ||
| 
						 | 
					025af8df02 | ||
| 
						 | 
					d9e8cff00f | ||
| 
						 | 
					1a4f35470c | ||
| 
						 | 
					1d99c4e80b | ||
| 
						 | 
					dc7c64a94d | ||
| 
						 | 
					dc6a530d8c | ||
| 
						 | 
					38b0d05c20 | ||
| 
						 | 
					6e010dfbd7 | ||
| 
						 | 
					172bdb6118 | ||
| 
						 | 
					6136243d61 | ||
| 
						 | 
					a88a32acae | ||
| 
						 | 
					583df35231 | ||
| 
						 | 
					634baae796 | ||
| 
						 | 
					a674a12706 | ||
| 
						 | 
					c29f1af48f | ||
| 
						 | 
					51d1d8efb8 | ||
| 
						 | 
					a8d72c46e4 | ||
| 
						 | 
					ec36fbd83e | ||
| 
						 | 
					aedb05cbab | ||
| 
						 | 
					bb16840a72 | ||
| 
						 | 
					7b5d44a329 | ||
| 
						 | 
					d3cccae2df | ||
| 
						 | 
					9ba514d930 | ||
| 
						 | 
					8e1b8ab26c | ||
| 
						 | 
					197537b159 | ||
| 
						 | 
					917b259e92 | ||
| 
						 | 
					a53a65be1f | ||
| 
						 | 
					44aa2834b3 | ||
| 
						 | 
					58e4bd4974 | ||
| 
						 | 
					44af431a93 | ||
| 
						 | 
					479d742e85 | ||
| 
						 | 
					3337487063 | ||
| 
						 | 
					beb42f18fe | ||
| 
						 | 
					00a27313fb | ||
| 
						 | 
					564fea43a9 | ||
| 
						 | 
					3d3142e20c | ||
| 
						 | 
					9c679aef20 | ||
| 
						 | 
					d47a55d23a | ||
| 
						 | 
					052f584bf4 | ||
| 
						 | 
					1dfebdf6db | ||
| 
						 | 
					5314446980 | ||
| 
						 | 
					6b41c26d2b | ||
| 
						 | 
					463071ea4d | ||
| 
						 | 
					79c5645964 | ||
| 
						 | 
					2f58b6b3c8 | ||
| 
						 | 
					e7909d25c6 | ||
| 
						 | 
					f739dbfe87 | ||
| 
						 | 
					c43b20ec2b | ||
| 
						 | 
					2d0cb5b66e | ||
| 
						 | 
					caf38c94c7 | ||
| 
						 | 
					51db6761c8 | ||
| 
						 | 
					4d110aa143 | ||
| 
						 | 
					9c436cb61f | ||
| 
						 | 
					caa11b8f7e | ||
| 
						 | 
					926e9e12c0 | ||
| 
						 | 
					c4d35fb44e | ||
| 
						 | 
					1b41b92e02 | ||
| 
						 | 
					41cce4dcb9 | ||
| 
						 | 
					858072cc10 | ||
| 
						 | 
					855c5e0e67 | ||
| 
						 | 
					903e6b7ccc | ||
| 
						 | 
					c71f3c35b8 | ||
| 
						 | 
					f0cc3d0bcd | ||
| 
						 | 
					2e82b7380b | ||
| 
						 | 
					6c9ac5b5ec | ||
| 
						 | 
					9cd45299b1 | ||
| 
						 | 
					f1f4f45c9d | ||
| 
						 | 
					8644c38abc | ||
| 
						 | 
					e569ae1a0d | ||
| 
						 | 
					da741b522e | ||
| 
						 | 
					e055d4e15e | ||
| 
						 | 
					58200d6431 | ||
| 
						 | 
					57db945558 | ||
| 
						 | 
					2e6cd5f809 | ||
| 
						 | 
					6541523e88 | ||
| 
						 | 
					f60b282e09 | ||
| 
						 | 
					744ed27d91 | ||
| 
						 | 
					a254199746 | ||
| 
						 | 
					928c8bfdf7 | ||
| 
						 | 
					d5f38c0f88 | ||
| 
						 | 
					56f97f1081 | ||
| 
						 | 
					e648505ad3 | ||
| 
						 | 
					71c3fd5cbb | ||
| 
						 | 
					f9b0418333 | ||
| 
						 | 
					392a00ac17 | ||
| 
						 | 
					1a9919a866 | ||
| 
						 | 
					9dd95b62a9 | ||
| 
						 | 
					135b4fe88e | ||
| 
						 | 
					b79d81a94d | ||
| 
						 | 
					7e2186721f | ||
| 
						 | 
					6a70e0ab97 | ||
| 
						 | 
					b38a63d336 | ||
| 
						 | 
					d62558d97a | ||
| 
						 | 
					76aa7d1451 | ||
| 
						 | 
					4f401d71a2 | ||
| 
						 | 
					eb437ff642 | ||
| 
						 | 
					6edc6e2825 | ||
| 
						 | 
					59e8cb8c8b | ||
| 
						 | 
					a4bffbfa60 | ||
| 
						 | 
					70656d240b | ||
| 
						 | 
					42067b3c1e | ||
| 
						 | 
					0bc91da0bb | ||
| 
						 | 
					5b72b577b8 | ||
| 
						 | 
					ec2f8ec796 | ||
| 
						 | 
					cd3f8a41af | ||
| 
						 | 
					aa8bf0e60a | ||
| 
						 | 
					5b3a6b5e9d | ||
| 
						 | 
					81e226af6f | ||
| 
						 | 
					cb558e1378 | ||
| 
						 | 
					723a0e479e | ||
| 
						 | 
					5b8e876b77 | 
							
								
								
									
										2
									
								
								.idea/jsLibraryMappings.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/jsLibraryMappings.xml
									
									
									
										generated
									
									
									
								
							@@ -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
									
									
									
								
							
							
						
						
									
										2
									
								
								.idea/misc.xml
									
									
									
										generated
									
									
									
								
							@@ -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
									
									
									
								
							
							
						
						
									
										1
									
								
								.idea/sqldialects.xml
									
									
									
										generated
									
									
									
								
							@@ -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>
 | 
			
		||||
							
								
								
									
										1
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								.idea/vcs.xml
									
									
									
										generated
									
									
									
								
							@@ -2,6 +2,5 @@
 | 
			
		||||
<project version="4">
 | 
			
		||||
  <component name="VcsDirectoryMappings">
 | 
			
		||||
    <mapping directory="" vcs="Git" />
 | 
			
		||||
    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
 | 
			
		||||
  </component>
 | 
			
		||||
</project>
 | 
			
		||||
@@ -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)
 | 
			
		||||
 | 
			
		||||
[](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)以快速了解:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 | 
			
		||||
[](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
									
								
							
							
						
						
									
										63
									
								
								README.ru.md
									
									
									
									
									
										Normal 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)
 | 
			
		||||
 | 
			
		||||
[](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://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.
 | 
			
		||||
 | 
			
		||||
## Участвуйте в разработке
 | 
			
		||||
 | 
			
		||||
Используйте онлайн среду разработки в браузере
 | 
			
		||||
 | 
			
		||||
[](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 Лицензии, либо (по вашему выбору) любой более поздней версии.
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -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`
 | 
			
		||||
 
 | 
			
		||||
@@ -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 ..
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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`
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -55,47 +55,20 @@ echo "Creating release in GitHub"
 | 
			
		||||
EXTRA=
 | 
			
		||||
 | 
			
		||||
if [[ $TAG == *"beta"* ]]; then
 | 
			
		||||
  EXTRA=--pre-release
 | 
			
		||||
  EXTRA=--prerelease
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
github-release release \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$TAG release" $EXTRA
 | 
			
		||||
echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
 | 
			
		||||
 | 
			
		||||
echo "Uploading debian x64 package"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$DEBIAN_X64_BUILD" \
 | 
			
		||||
    --file "dist/$DEBIAN_X64_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Uploading linux x64 build"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$LINUX_X64_BUILD" \
 | 
			
		||||
    --file "dist/$LINUX_X64_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Uploading windows x64 build"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$WINDOWS_X64_BUILD" \
 | 
			
		||||
    --file "dist/$WINDOWS_X64_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Uploading mac x64 build"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$MAC_X64_BUILD" \
 | 
			
		||||
    --file "dist/$MAC_X64_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Uploading linux x64 server build"
 | 
			
		||||
 | 
			
		||||
github-release upload \
 | 
			
		||||
    --tag $TAG \
 | 
			
		||||
    --name "$SERVER_BUILD" \
 | 
			
		||||
    --file "dist/$SERVER_BUILD"
 | 
			
		||||
gh release create "$TAG" \
 | 
			
		||||
    --title "$TAG release" \
 | 
			
		||||
    --notes "" \
 | 
			
		||||
    $EXTRA \
 | 
			
		||||
    "dist/$DEBIAN_X64_BUILD" \
 | 
			
		||||
    "dist/$LINUX_X64_BUILD" \
 | 
			
		||||
    "dist/$WINDOWS_X64_BUILD" \
 | 
			
		||||
    "dist/$MAC_X64_BUILD" \
 | 
			
		||||
    "dist/$SERVER_BUILD"
 | 
			
		||||
 | 
			
		||||
echo "Building docker image"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								bin/tpl/trilium-no-cert-check.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								bin/tpl/trilium-no-cert-check.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
SET DIR=%~dp0
 | 
			
		||||
set NODE_TLS_REJECT_UNAUTHORIZED=0
 | 
			
		||||
cd %DIR%
 | 
			
		||||
start trilium.exe
 | 
			
		||||
							
								
								
									
										7
									
								
								bin/tpl/trilium-no-cert-check.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								bin/tpl/trilium-no-cert-check.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
DIR=`dirname "$0"`
 | 
			
		||||
export NODE_TLS_REJECT_UNAUTHORIZED=0
 | 
			
		||||
 | 
			
		||||
"$DIR/trilium"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/demo.zip
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -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;
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes ADD COLUMN is_deleted INTEGER NOT NULL DEFAULT 0
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes_tree ADD COLUMN date_modified INTEGER NOT NULL DEFAULT 0
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
DELETE FROM options WHERE opt_name IN ('is_readonly', 'prop_modified', 'doc_title', 'doc_UID', 'format_version', 'flask_secret_key')
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes_history ADD COLUMN encryption INTEGER DEFAULT 0
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
INSERT INTO options (opt_name, opt_value) VALUES ('last_synced', 0)
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
CREATE UNIQUE INDEX `IDX_notes_history_note_from_to` ON `notes_history` (
 | 
			
		||||
	`note_id`,
 | 
			
		||||
	`date_modified_from`,
 | 
			
		||||
	`date_modified_to`
 | 
			
		||||
);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
INSERT INTO options (opt_name, opt_value) VALUES ('document_id', '');
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
INSERT INTO options (opt_name, opt_value) VALUES ('document_secret', '');
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE options ADD COLUMN date_modified INTEGER NOT NULL DEFAULT 0
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE sync ADD COLUMN source_id TEXT
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
CREATE TABLE `recent_notes` (
 | 
			
		||||
	`note_id`	TEXT NOT NULL PRIMARY KEY,
 | 
			
		||||
	`date_accessed`	INTEGER NOT NULL
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE recent_notes ADD COLUMN is_deleted INT;
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE options SET opt_name = 'protected_session_timeout' WHERE opt_name = 'encryption_session_timeout';
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
module.exports = async () => console.log("heeeelllooo!!!");
 | 
			
		||||
@@ -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]);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
INSERT INTO options (opt_name, opt_value) VALUES ('encrypted_data_key_iv', '')
 | 
			
		||||
@@ -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);
 | 
			
		||||
};
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
CREATE TABLE `source_ids` (
 | 
			
		||||
	`source_id`	TEXT NOT NULL,
 | 
			
		||||
	`date_created`	INTEGER NOT NULL,
 | 
			
		||||
	PRIMARY KEY(`source_id`)
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE notes_tree SET note_pid = 'root' WHERE note_pid = ''
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
DELETE FROM sync;
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE options SET opt_name = 'start_note_tree_id' WHERE opt_name = 'start_node';
 | 
			
		||||
@@ -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
 | 
			
		||||
);
 | 
			
		||||
@@ -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'
 | 
			
		||||
@@ -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
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
DELETE FROM sync;
 | 
			
		||||
 | 
			
		||||
UPDATE options SET opt_value = 0 WHERE opt_name IN ('last_synced_push', 'last_synced_pull');
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
DROP TABLE audit_log;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes_tree ADD COLUMN `prefix` TEXT
 | 
			
		||||
@@ -1,2 +0,0 @@
 | 
			
		||||
DROP TABLE IF EXISTS links;
 | 
			
		||||
DROP TABLE IF EXISTS images;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
SELECT 1;
 | 
			
		||||
@@ -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';
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE options SET opt_name = 'start_note_path' WHERE opt_name = 'start_note_tree_id';
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
DROP index IDX_notes_tree_note_tree_id;
 | 
			
		||||
 | 
			
		||||
CREATE INDEX `IDX_notes_tree_note_id` ON `notes_tree` (
 | 
			
		||||
  `note_id`
 | 
			
		||||
);
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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');
 | 
			
		||||
@@ -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');
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE options SET opt_value = (SELECT MAX(id) FROM sync) WHERE opt_name = 'last_synced_push';
 | 
			
		||||
@@ -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');
 | 
			
		||||
@@ -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)
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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
 | 
			
		||||
);
 | 
			
		||||
@@ -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`
 | 
			
		||||
);
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -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
 | 
			
		||||
);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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');
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes ADD COLUMN type TEXT NOT NULL DEFAULT 'text';
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE notes ADD COLUMN mime TEXT NOT NULL DEFAULT 'text/html';
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -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';
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
DROP INDEX IDX_attributes_noteId_name;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE attributes ADD COLUMN isDeleted INT NOT NULL DEFAULT 0;
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
ALTER TABLE attributes ADD COLUMN position INT NOT NULL DEFAULT 0;
 | 
			
		||||
@@ -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
 | 
			
		||||
);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
CREATE INDEX IDX_attributes_name_value ON attributes (name, value);
 | 
			
		||||
@@ -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);
 | 
			
		||||
@@ -1 +0,0 @@
 | 
			
		||||
UPDATE notes SET mime = 'application/javascript;env=frontend' WHERE type = 'code' AND mime = 'application/javascript';
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user