mirror of
https://github.com/zadam/trilium.git
synced 2025-10-27 16:26:31 +01:00
Compare commits
523 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3ed673453 | ||
|
|
3fd16a16e8 | ||
|
|
3448eba7b9 | ||
|
|
19a6d89d4f | ||
|
|
a6bef45a30 | ||
|
|
65938c5272 | ||
|
|
5011b6a51a | ||
|
|
61e78858bc | ||
|
|
995e6c2fef | ||
|
|
0a2807c0b3 | ||
|
|
1a615398aa | ||
|
|
b557a44f34 | ||
|
|
f50bb2278c | ||
|
|
6b68068cde | ||
|
|
56378cd0f5 | ||
|
|
a76e3f6e2d | ||
|
|
dc5304faa0 | ||
|
|
b9639bffce | ||
|
|
3c7232f427 | ||
|
|
5860b2eebb | ||
|
|
a4aaa49774 | ||
|
|
a4c7069856 | ||
|
|
7cad65b370 | ||
|
|
3ead734323 | ||
|
|
cb8e551ee0 | ||
|
|
f6dd1110e8 | ||
|
|
623200b92b | ||
|
|
4ff40ba14f | ||
|
|
16563eaba4 | ||
|
|
caa6e9ee72 | ||
|
|
f4a58a2598 | ||
|
|
cecce1df20 | ||
|
|
2030c8e995 | ||
|
|
a410ed1b74 | ||
|
|
de6108f95d | ||
|
|
fddab59265 | ||
|
|
1308dc20e8 | ||
|
|
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 | ||
|
|
7672f22ce0 | ||
|
|
ef37a52a06 | ||
|
|
2318d615bb | ||
|
|
2e82b7380b | ||
|
|
bc14c3d665 | ||
|
|
b89ea9a684 | ||
|
|
6c9ac5b5ec | ||
|
|
9cd45299b1 | ||
|
|
f1f4f45c9d | ||
|
|
8644c38abc | ||
|
|
e569ae1a0d | ||
|
|
da741b522e | ||
|
|
e055d4e15e | ||
|
|
58200d6431 | ||
|
|
57db945558 | ||
|
|
2e6cd5f809 | ||
|
|
6541523e88 | ||
|
|
f60b282e09 | ||
|
|
744ed27d91 | ||
|
|
a254199746 | ||
|
|
496767a52b | ||
|
|
9139c597e5 | ||
|
|
942132c01d | ||
|
|
928c8bfdf7 | ||
|
|
1862acd1ff | ||
|
|
ce7e18d0b0 | ||
|
|
65280d5ba3 | ||
|
|
7e3d424e23 | ||
|
|
d5f38c0f88 | ||
|
|
56f97f1081 | ||
|
|
e648505ad3 | ||
|
|
71c3fd5cbb | ||
|
|
f9b0418333 | ||
|
|
392a00ac17 | ||
|
|
1a9919a866 | ||
|
|
9dd95b62a9 | ||
|
|
135b4fe88e | ||
|
|
bff04c121a | ||
|
|
b79d81a94d | ||
|
|
7e2186721f | ||
|
|
6a70e0ab97 | ||
|
|
b38a63d336 | ||
|
|
d62558d97a | ||
|
|
76aa7d1451 | ||
|
|
4f401d71a2 | ||
|
|
eb437ff642 | ||
|
|
6edc6e2825 | ||
|
|
e8903e82a1 | ||
|
|
59e8cb8c8b | ||
|
|
0cfd95d9b8 | ||
|
|
1aa5349628 | ||
|
|
a4bffbfa60 | ||
|
|
70656d240b | ||
|
|
42067b3c1e | ||
|
|
0bc91da0bb | ||
|
|
4e21d12202 | ||
|
|
fdce218e88 | ||
|
|
5b72b577b8 | ||
|
|
ec2f8ec796 | ||
|
|
cd3f8a41af | ||
|
|
aa8bf0e60a | ||
|
|
5b3a6b5e9d | ||
|
|
6c8d20288d | ||
|
|
88d04772c4 | ||
|
|
9fd26a9b9f | ||
|
|
98f02c3c9a | ||
|
|
584fea1992 | ||
|
|
af50a1ec52 | ||
|
|
4e76d1fa85 | ||
|
|
81e226af6f | ||
|
|
03a11e6f77 | ||
|
|
cb558e1378 | ||
|
|
e1a16b4a9f | ||
|
|
12b468d3dc | ||
|
|
6f901e6852 | ||
|
|
09e9ac4d00 | ||
|
|
723a0e479e | ||
|
|
5b8e876b77 | ||
|
|
a33ac65fdf | ||
|
|
f8fb071a6f | ||
|
|
a654078e56 | ||
|
|
fba68681aa | ||
|
|
50c84e0f5f | ||
|
|
f27370d44f | ||
|
|
c6c9202c00 | ||
|
|
2cafda5f66 | ||
|
|
873953cbaf | ||
|
|
d51744ce19 | ||
|
|
7df8c940b6 | ||
|
|
9bac2a4819 | ||
|
|
88147f7a0a | ||
|
|
ca77211b38 | ||
|
|
4606e8d118 | ||
|
|
9f002fa802 | ||
|
|
060d4fc27b | ||
|
|
bf0fbe201e | ||
|
|
721e5da672 | ||
|
|
8192b51b8a | ||
|
|
73514a63d8 | ||
|
|
f8c310eb8f | ||
|
|
b9422b0efd | ||
|
|
14ced949a9 | ||
|
|
5b5c2a2dbb | ||
|
|
2c958eaacb | ||
|
|
4aa27b6033 | ||
|
|
89a0c5a1c9 | ||
|
|
78e48095e6 | ||
|
|
02016ed031 | ||
|
|
cb91dadeca | ||
|
|
2c755bcc38 | ||
|
|
3c7a6bc1e4 | ||
|
|
3fe87259e2 | ||
|
|
d476dfc53b | ||
|
|
19821b634f | ||
|
|
cde41b268e | ||
|
|
1c59bc4d3c | ||
|
|
cb6d35236c | ||
|
|
7572ee284b | ||
|
|
d0eaf623a8 | ||
|
|
25c2db6c3a | ||
|
|
5a173ff14e | ||
|
|
7fab75b085 | ||
|
|
0f065536d0 | ||
|
|
d0747abded | ||
|
|
f62b4a581e | ||
|
|
dcf1c62ec1 | ||
|
|
93d55b3e7b | ||
|
|
90c6852423 | ||
|
|
208baa56e9 | ||
|
|
ddf8438b22 | ||
|
|
6008dc891f | ||
|
|
cc887a00f2 | ||
|
|
fbbd51d0b1 | ||
|
|
081b8b126a | ||
|
|
7a6bb81345 | ||
|
|
1d5714c411 | ||
|
|
56506d33a7 | ||
|
|
c94fb7a62d | ||
|
|
4160da70be | ||
|
|
2cfd093cae | ||
|
|
859465841d | ||
|
|
0c9a11db6f | ||
|
|
4cbf9c2e86 | ||
|
|
1f7997eeed | ||
|
|
8e730c6ecf | ||
|
|
600a312b2a | ||
|
|
ec2e973165 | ||
|
|
faeb55bc90 | ||
|
|
23ebe360a6 | ||
|
|
d905335935 | ||
|
|
f49f510459 | ||
|
|
e78b495bd3 | ||
|
|
5542c9dc57 | ||
|
|
2388da7cfb | ||
|
|
3b4fa0c5fc | ||
|
|
1af98056bb | ||
|
|
c0edcc1bfe | ||
|
|
597e595c32 | ||
|
|
e212a37c84 | ||
|
|
c41448f5da | ||
|
|
aab49946f8 | ||
|
|
cc4d04416b | ||
|
|
66c5606d46 | ||
|
|
50bcf45113 | ||
|
|
08cba1e1ce | ||
|
|
f528799fed | ||
|
|
a78c8ddad7 | ||
|
|
3cc93157bf | ||
|
|
3dbd80d5a6 | ||
|
|
076b4a6651 | ||
|
|
378987e61c | ||
|
|
5eb850bf59 | ||
|
|
4914160590 | ||
|
|
00c106aba6 | ||
|
|
5e6d2c8336 | ||
|
|
d45a59aa4e | ||
|
|
9f19cf8046 | ||
|
|
c0dfd23191 | ||
|
|
b9539117d8 | ||
|
|
d616a77d6b | ||
|
|
5b679930de | ||
|
|
3d7beefad0 | ||
|
|
8850de51f5 | ||
|
|
18b13657fd | ||
|
|
43ac712fca | ||
|
|
bf231d31a2 | ||
|
|
7dd19c0366 | ||
|
|
0040334e89 | ||
|
|
96a5cb23f3 | ||
|
|
067ca9ab16 | ||
|
|
be65e2e62f | ||
|
|
bed7bdfd00 | ||
|
|
cd5be59413 | ||
|
|
2a67d9eae2 | ||
|
|
0f05d6258e | ||
|
|
45516fa7b4 | ||
|
|
70708b36ef | ||
|
|
fb3d5f25ac | ||
|
|
397f0d1326 | ||
|
|
6469937393 | ||
|
|
48cb4d2ab9 | ||
|
|
3a94b04ef4 | ||
|
|
d406df48a8 | ||
|
|
9447d3f9b5 | ||
|
|
2ac78c2e03 | ||
|
|
17073096cf | ||
|
|
6068bd7c44 | ||
|
|
56a35b85a6 | ||
|
|
9d7d79ef94 | ||
|
|
eb1a6b78ff | ||
|
|
60d000b9cb | ||
|
|
61ddd8afc6 | ||
|
|
69bdcdd74a | ||
|
|
17c6f53397 | ||
|
|
1c51419db5 | ||
|
|
1ba1f28006 | ||
|
|
6b306ac426 | ||
|
|
ae26f22114 | ||
|
|
552d213817 | ||
|
|
8fb7dd451e | ||
|
|
01a82bed09 | ||
|
|
77bc5f9944 | ||
|
|
6081c3540e | ||
|
|
0a10764ed4 | ||
|
|
ba33a0d330 | ||
|
|
aea81c9872 | ||
|
|
8019e23ee4 | ||
|
|
5eb9b8fe42 | ||
|
|
d19a929237 | ||
|
|
67e0e0888e | ||
|
|
810fd9e819 | ||
|
|
2dc742f5b8 | ||
|
|
48b7108da0 | ||
|
|
806ab22fa8 | ||
|
|
fbabdef272 | ||
|
|
a1f67e830d | ||
|
|
ee78413ecb | ||
|
|
b936a63db3 | ||
|
|
80354d09fb | ||
|
|
87925f72a3 | ||
|
|
898c941333 | ||
|
|
8b0a1e546d | ||
|
|
ec351137d4 | ||
|
|
cf5127dcec | ||
|
|
345de752d1 | ||
|
|
9c2b98915e | ||
|
|
7b0fd639f6 | ||
|
|
6408a47a8a | ||
|
|
f2ca9276d6 | ||
|
|
872e81fe1f | ||
|
|
480aec1667 | ||
|
|
35ea877c7d | ||
|
|
41ca4b8d2e | ||
|
|
8375a1b5ab | ||
|
|
48b697f408 | ||
|
|
c33d496cf3 | ||
|
|
200982655f | ||
|
|
d67e1552ee | ||
|
|
ce09e4a1eb | ||
|
|
7bf6ec3ff2 | ||
|
|
1f923403de | ||
|
|
cb2361e9c4 | ||
|
|
d7e46263be | ||
|
|
138903cf28 | ||
|
|
3fa2535862 | ||
|
|
5bb490e1ff | ||
|
|
f2e44e5617 | ||
|
|
58a93f748b | ||
|
|
e1e185e5db | ||
|
|
199b49c1f7 | ||
|
|
cbc1f63732 | ||
|
|
3f2e8717b3 | ||
|
|
e06c5703ee | ||
|
|
cd858a73c1 | ||
|
|
69353f12b5 | ||
|
|
fe3bb2c5f6 | ||
|
|
7f8b19aee4 | ||
|
|
cd653b9f0c | ||
|
|
9fcd659df4 | ||
|
|
c08c4531db | ||
|
|
f8bec35893 | ||
|
|
7aadd57d2f | ||
|
|
02d9752abf | ||
|
|
1d64129572 | ||
|
|
95760f1d28 | ||
|
|
75c3bd8ae3 | ||
|
|
479d6ba964 | ||
|
|
9f472b353a | ||
|
|
4c614aee90 | ||
|
|
f17be0ef9b | ||
|
|
7dde78e98a | ||
|
|
8c0662ab82 | ||
|
|
cc3addebd4 | ||
|
|
a1b2e22ba5 | ||
|
|
f8936f3bc8 | ||
|
|
015c9d2ccd | ||
|
|
95ccfd2521 | ||
|
|
6c15d299e0 | ||
|
|
f8089ba370 | ||
|
|
053162fef2 | ||
|
|
71bbf2eb16 | ||
|
|
f723433970 | ||
|
|
1cc7917b6e | ||
|
|
cdc2721ac1 | ||
|
|
4a15127e58 | ||
|
|
c5ec57e08e | ||
|
|
d0578971f7 | ||
|
|
1b0bb22273 | ||
|
|
bf653a9a5c | ||
|
|
5467dc62cd | ||
|
|
96eff4c410 | ||
|
|
3a12181a57 | ||
|
|
fccce2ff1e | ||
|
|
c949dcb449 | ||
|
|
8b99f065d5 | ||
|
|
6d7b9e0db3 | ||
|
|
248fa780e8 | ||
|
|
20c7c657da | ||
|
|
0a896cc19c | ||
|
|
0bb548d0d1 | ||
|
|
de1584eab8 | ||
|
|
60e2026850 | ||
|
|
5098dda376 | ||
|
|
35e47f866a | ||
|
|
199d89c1a6 | ||
|
|
be543737a9 | ||
|
|
0b6fa4ab06 | ||
|
|
8f1b2fa226 | ||
|
|
5010175b84 | ||
|
|
0ac42608f7 | ||
|
|
7f3ef2cb8b | ||
|
|
16c4b8aa43 | ||
|
|
4078b32e9d | ||
|
|
90d33f56c3 | ||
|
|
b0e5ab7533 | ||
|
|
526bd81b50 | ||
|
|
a1fb84f14d | ||
|
|
bc520edd19 | ||
|
|
5f4f0d3086 | ||
|
|
a68c61b2f0 | ||
|
|
2a6978c349 | ||
|
|
1c5425c9eb | ||
|
|
2338a13749 | ||
|
|
6df6fe03fa | ||
|
|
b0217ee04c | ||
|
|
2a54ce803e | ||
|
|
642bf9d113 | ||
|
|
31746e7baf | ||
|
|
48b1703725 | ||
|
|
72d6440de7 | ||
|
|
eaed7ec86f | ||
|
|
02043d9109 | ||
|
|
b9c0823abf | ||
|
|
61f30373d4 | ||
|
|
9889166afc | ||
|
|
35d5036aaa | ||
|
|
14f5b46ece | ||
|
|
ac636b6649 | ||
|
|
52b8162d01 | ||
|
|
167b6974fe | ||
|
|
4bd86a6dfa | ||
|
|
5bbec118e4 | ||
|
|
473229f03a | ||
|
|
af1fd5bd06 | ||
|
|
c737a3adc9 | ||
|
|
8e2bf7795c | ||
|
|
4fd9e7f14f | ||
|
|
7859aca006 | ||
|
|
1403acd808 | ||
|
|
e258de329c | ||
|
|
044bcf6f05 | ||
|
|
2c028f7c45 | ||
|
|
435200ec5a | ||
|
|
3d808d638a | ||
|
|
bb0ee0b36c | ||
|
|
b70ee742e8 | ||
|
|
4281111344 | ||
|
|
37e111d8a9 | ||
|
|
4202af96c8 | ||
|
|
d0efd67d5e | ||
|
|
aeb6c34d27 | ||
|
|
a3f4fc7762 | ||
|
|
6517188b39 | ||
|
|
c4acecd510 | ||
|
|
c7d8bddf24 | ||
|
|
29c1d05540 | ||
|
|
55f04436c0 | ||
|
|
4ce2eaa919 | ||
|
|
489e064932 | ||
|
|
1369603ed9 | ||
|
|
79431d8b4b | ||
|
|
4591899df0 | ||
|
|
dfa7d3f186 | ||
|
|
a7c13ceacc | ||
|
|
b2b3c80192 | ||
|
|
badb678b69 | ||
|
|
5933b17b47 | ||
|
|
761912c3bd | ||
|
|
99f35b2588 | ||
|
|
51eb9f18f7 | ||
|
|
4b8ca31091 | ||
|
|
2706f1b02f | ||
|
|
6710476768 | ||
|
|
de30095737 |
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@@ -1,3 +1,4 @@
|
|||||||
# These are supported funding model platforms
|
# These are supported funding model platforms
|
||||||
|
|
||||||
github: [zadam]
|
github: [zadam]
|
||||||
|
custom: ["https://paypal.me/za4am"]
|
||||||
|
|||||||
2
.idea/jsLibraryMappings.xml
generated
2
.idea/jsLibraryMappings.xml
generated
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="JavaScriptLibraryMappings">
|
<component name="JavaScriptLibraryMappings">
|
||||||
<file url="PROJECT" libraries="{@types/jquery}" />
|
<includedPredefinedLibrary name="Node.js Core" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -3,7 +3,7 @@
|
|||||||
<component name="JavaScriptSettings">
|
<component name="JavaScriptSettings">
|
||||||
<option name="languageLevel" value="ES6" />
|
<option name="languageLevel" value="ES6" />
|
||||||
</component>
|
</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" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
1
.idea/sqldialects.xml
generated
1
.idea/sqldialects.xml
generated
@@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="SqlDialectMappings">
|
<component name="SqlDialectMappings">
|
||||||
|
<file url="file://$PROJECT_DIR$" dialect="SQLite" />
|
||||||
<file url="PROJECT" dialect="SQLite" />
|
<file url="PROJECT" dialect="SQLite" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
3
.idea/vcs.xml
generated
3
.idea/vcs.xml
generated
@@ -2,6 +2,5 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM node:12.19.0-alpine
|
FROM node:14.17.0-alpine
|
||||||
|
|
||||||
# Create app directory
|
# Create app directory
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
@@ -23,5 +23,7 @@ RUN set -x \
|
|||||||
# Bundle app source
|
# Bundle app source
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
USER node
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
CMD [ "node", "./src/www" ]
|
CMD [ "node", "./src/www" ]
|
||||||
|
|||||||
60
README-ZH_CN.md
Normal file
60
README-ZH_CN.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# 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)以快速了解:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 特性
|
||||||
|
|
||||||
|
* 笔记可以排列成任意深的树。单个笔记可以放在树中的多个位置(请参阅[克隆](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
||||||
|
* 丰富的所见即所得笔记编辑功能,包括带有markdown[自动格式化功能的](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)表格,图像和[数学](https://github.com/zadam/trilium/wiki/Text-notes#math-support)
|
||||||
|
* 支持编辑[使用源代码的笔记](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)
|
||||||
|
* 可用性和性能均能很好地扩展至超过10万个笔记
|
||||||
|
* 针对智能手机和平板电脑进行触摸优化的[移动前端](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)可轻松保存Web内容
|
||||||
|
|
||||||
|
## 构建
|
||||||
|
|
||||||
|
Trilium是作为桌面应用程序(Linux和Windows)或服务器上托管的Web应用程序(Linux)提供的。Mac OS桌面版本可用,但[不受支持](https://github.com/zadam/trilium/wiki/FAQ#mac-os-support)。
|
||||||
|
|
||||||
|
* 如果要在桌面上使用Trilium,请从[最新版本](https://github.com/zadam/trilium/releases/latest)下载适用于您平台的二进制[版本](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) - 市场上最好的所见即所得编辑器,互动性强且聆听能力强的团队
|
||||||
|
* [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)
|
||||||
10
README.md
10
README.md
@@ -1,5 +1,7 @@
|
|||||||
# Trilium Notes
|
# 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)
|
[](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:
|
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:
|
||||||
|
|
||||||
@@ -8,7 +10,7 @@ Trilium Notes is a hierarchical note taking application with focus on building l
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
* Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://github.com/zadam/trilium/wiki/Cloning-notes))
|
||||||
* Rich WYSIWYG note editing including e.g. tables and images with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
|
* Rich WYSIWYG note editing including e.g. tables, images and [math](https://github.com/zadam/trilium/wiki/Text-notes#math-support) with markdown [autoformat](https://github.com/zadam/trilium/wiki/Text-notes#autoformat)
|
||||||
* Support for editing [notes with source code](https://github.com/zadam/trilium/wiki/Code-notes), including syntax highlighting
|
* Support for editing [notes with source code](https://github.com/zadam/trilium/wiki/Code-notes), including syntax highlighting
|
||||||
* Fast and easy [navigation between notes](https://github.com/zadam/trilium/wiki/Note-navigation), full text search and [note hoisting](https://github.com/zadam/trilium/wiki/Note-hoisting)
|
* Fast and easy [navigation between notes](https://github.com/zadam/trilium/wiki/Note-navigation), full text search and [note hoisting](https://github.com/zadam/trilium/wiki/Note-hoisting)
|
||||||
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)
|
* Seamless [note versioning](https://github.com/zadam/trilium/wiki/Note-revisions)
|
||||||
@@ -54,4 +56,8 @@ npm run start-server
|
|||||||
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - best WYSIWYG editor on the market, very interactive and listening team
|
||||||
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
* [FancyTree](https://github.com/mar10/fancytree) - very feature rich tree library without real competition. Trilium Notes would not be the same without it.
|
||||||
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with support for huge amount of languages
|
||||||
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
|
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library without competition. Used in [relation maps](https://github.com/zadam/trilium/wiki/Relation-map) and [link maps](https://github.com/zadam/trilium/wiki/Link-map)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
|||||||
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
|
# removing software WebGL binaries because they are pretty huge and not necessary
|
||||||
rm -r $BUILD_DIR/swiftshader
|
rm -r $BUILD_DIR/swiftshader
|
||||||
|
|
||||||
cp bin/tpl/portable-trilium.sh $BUILD_DIR/
|
cp bin/tpl/trilium-portable.sh $BUILD_DIR/
|
||||||
chmod 755 $BUILD_DIR/portable-trilium.sh
|
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..."
|
echo "Packaging linux x64 electron distribution..."
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
PKG_DIR=dist/trilium-linux-x64-server
|
PKG_DIR=dist/trilium-linux-x64-server
|
||||||
NODE_VERSION=12.19.0
|
NODE_VERSION=14.16.1
|
||||||
|
|
||||||
if [ "$1" != "DONTCOPY" ]
|
if [ "$1" != "DONTCOPY" ]
|
||||||
then
|
then
|
||||||
@@ -10,7 +10,7 @@ fi
|
|||||||
|
|
||||||
cd dist
|
cd dist
|
||||||
wget https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz
|
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
|
rm node-v${NODE_VERSION}-linux-x64.tar.xz
|
||||||
cd ..
|
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
|
# removing software WebGL binaries because they are pretty huge and not necessary
|
||||||
rm -r $BUILD_DIR/swiftshader
|
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..."
|
echo "Zipping windows x64 electron distribution..."
|
||||||
VERSION=`jq -r ".version" package.json`
|
VERSION=`jq -r ".version" package.json`
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if [[ $# -eq 0 ]] ; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
npm run webpack
|
n exec 12 npm run webpack
|
||||||
|
|
||||||
DIR=$1
|
DIR=$1
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ cp -r electron.js $DIR/
|
|||||||
cp webpack-* $DIR/
|
cp webpack-* $DIR/
|
||||||
|
|
||||||
# run in subshell (so we return to original 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
|
# cleanup of useless files in dependencies
|
||||||
rm -r $DIR/node_modules/image-q/demo
|
rm -r $DIR/node_modules/image-q/demo
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ fi
|
|||||||
VERSION=$1
|
VERSION=$1
|
||||||
SERIES=${VERSION:0:4}-latest
|
SERIES=${VERSION:0:4}-latest
|
||||||
|
|
||||||
sudo docker push zadam/trilium:$VERSION
|
docker push zadam/trilium:$VERSION
|
||||||
sudo docker push zadam/trilium:$SERIES
|
docker push zadam/trilium:$SERIES
|
||||||
|
|
||||||
if [[ $1 != *"beta"* ]]; then
|
if [[ $1 != *"beta"* ]]; then
|
||||||
sudo docker push zadam/trilium:latest
|
docker push zadam/trilium:latest
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -55,47 +55,20 @@ echo "Creating release in GitHub"
|
|||||||
EXTRA=
|
EXTRA=
|
||||||
|
|
||||||
if [[ $TAG == *"beta"* ]]; then
|
if [[ $TAG == *"beta"* ]]; then
|
||||||
EXTRA=--pre-release
|
EXTRA=--prerelease
|
||||||
fi
|
fi
|
||||||
|
|
||||||
github-release release \
|
echo "$GITHUB_CLI_AUTH_TOKEN" | gh auth login --with-token
|
||||||
--tag $TAG \
|
|
||||||
--name "$TAG release" $EXTRA
|
|
||||||
|
|
||||||
echo "Uploading debian x64 package"
|
gh release create "$TAG" \
|
||||||
|
--title "$TAG release" \
|
||||||
github-release upload \
|
--notes "" \
|
||||||
--tag $TAG \
|
$EXTRA \
|
||||||
--name "$DEBIAN_X64_BUILD" \
|
"dist/$DEBIAN_X64_BUILD" \
|
||||||
--file "dist/$DEBIAN_X64_BUILD"
|
"dist/$LINUX_X64_BUILD" \
|
||||||
|
"dist/$WINDOWS_X64_BUILD" \
|
||||||
echo "Uploading linux x64 build"
|
"dist/$MAC_X64_BUILD" \
|
||||||
|
"dist/$SERVER_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"
|
|
||||||
|
|
||||||
echo "Building docker image"
|
echo "Building docker image"
|
||||||
|
|
||||||
@@ -105,4 +78,4 @@ echo "Pushing docker image to dockerhub"
|
|||||||
|
|
||||||
bin/push-docker-image.sh $VERSION
|
bin/push-docker-image.sh $VERSION
|
||||||
|
|
||||||
echo "Release finished!"
|
echo "Release finished!"
|
||||||
|
|||||||
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"
|
||||||
|
|
||||||
@@ -5,6 +5,9 @@ instanceName=
|
|||||||
# set to true to allow using Trilium without authentication (makes sense for server build only, desktop build doesn't need password)
|
# set to true to allow using Trilium without authentication (makes sense for server build only, desktop build doesn't need password)
|
||||||
noAuthentication=false
|
noAuthentication=false
|
||||||
|
|
||||||
|
# set to true to disable backups (e.g. because of limited space on server)
|
||||||
|
noBackup=false
|
||||||
|
|
||||||
# Disable automatically generating desktop icon
|
# Disable automatically generating desktop icon
|
||||||
# noDesktopIcon=true
|
# noDesktopIcon=true
|
||||||
|
|
||||||
|
|||||||
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
|
|
||||||
);
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user