mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	saving image
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| <dataSource name="document.db"> | <dataSource name="document.db"> | ||||||
|   <database-model serializer="dbm" rdbms="SQLITE" format-version="4.11"> |   <database-model serializer="dbm" dbms="SQLITE" family-id="SQLITE" format-version="4.14"> | ||||||
|     <root id="1"> |     <root id="1"> | ||||||
|       <ServerVersion>3.16.1</ServerVersion> |       <ServerVersion>3.16.1</ServerVersion> | ||||||
|     </root> |     </root> | ||||||
| @@ -15,635 +15,587 @@ | |||||||
|     <table id="7" parent="2" name="attributes"/> |     <table id="7" parent="2" name="attributes"/> | ||||||
|     <table id="8" parent="2" name="branches"/> |     <table id="8" parent="2" name="branches"/> | ||||||
|     <table id="9" parent="2" name="event_log"/> |     <table id="9" parent="2" name="event_log"/> | ||||||
|     <table id="10" parent="2" name="images"/> |     <table id="10" parent="2" name="links"/> | ||||||
|     <table id="11" parent="2" name="note_images"/> |     <table id="11" parent="2" name="note_revisions"/> | ||||||
|     <table id="12" parent="2" name="note_revisions"/> |     <table id="12" parent="2" name="notes"/> | ||||||
|     <table id="13" parent="2" name="notes"/> |     <table id="13" parent="2" name="options"/> | ||||||
|     <table id="14" parent="2" name="options"/> |     <table id="14" parent="2" name="recent_notes"/> | ||||||
|     <table id="15" parent="2" name="recent_notes"/> |     <table id="15" parent="2" name="source_ids"/> | ||||||
|     <table id="16" parent="2" name="source_ids"/> |     <table id="16" parent="2" name="sqlite_master"> | ||||||
|     <table id="17" parent="2" name="sqlite_master"> |  | ||||||
|       <System>1</System> |       <System>1</System> | ||||||
|     </table> |     </table> | ||||||
|     <table id="18" parent="2" name="sqlite_sequence"> |     <table id="17" parent="2" name="sqlite_sequence"> | ||||||
|       <System>1</System> |       <System>1</System> | ||||||
|     </table> |     </table> | ||||||
|     <table id="19" parent="2" name="sync"/> |     <table id="18" parent="2" name="sync"/> | ||||||
|     <column id="20" parent="6" name="apiTokenId"> |     <column id="19" parent="6" name="apiTokenId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="21" parent="6" name="token"> |     <column id="20" parent="6" name="token"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="22" parent="6" name="dateCreated"> |     <column id="21" parent="6" name="dateCreated"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="23" parent="6" name="isDeleted"> |     <column id="22" parent="6" name="isDeleted"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="24" parent="6" name="hash"> |     <column id="23" parent="6" name="hash"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="25" parent="6" name="sqlite_autoindex_api_tokens_1"> |     <index id="24" parent="6" name="sqlite_autoindex_api_tokens_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>apiTokenId</ColNames> |       <ColNames>apiTokenId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="26" parent="6"> |     <key id="25" parent="6"> | ||||||
|       <ColNames>apiTokenId</ColNames> |       <ColNames>apiTokenId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_api_tokens_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_api_tokens_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="27" parent="7" name="attributeId"> |     <column id="26" parent="7" name="attributeId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="28" parent="7" name="noteId"> |     <column id="27" parent="7" name="noteId"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="29" parent="7" name="type"> |     <column id="28" parent="7" name="type"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="30" parent="7" name="name"> |     <column id="29" parent="7" name="name"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="31" parent="7" name="value"> |     <column id="30" parent="7" name="value"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>''</DefaultExpression> |       <DefaultExpression>''</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="32" parent="7" name="position"> |     <column id="31" parent="7" name="position"> | ||||||
|       <Position>6</Position> |       <Position>6</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="33" parent="7" name="dateCreated"> |     <column id="32" parent="7" name="dateCreated"> | ||||||
|       <Position>7</Position> |       <Position>7</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="34" parent="7" name="dateModified"> |     <column id="33" parent="7" name="dateModified"> | ||||||
|       <Position>8</Position> |       <Position>8</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="35" parent="7" name="isDeleted"> |     <column id="34" parent="7" name="isDeleted"> | ||||||
|       <Position>9</Position> |       <Position>9</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="36" parent="7" name="hash"> |     <column id="35" parent="7" name="hash"> | ||||||
|       <Position>10</Position> |       <Position>10</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="37" parent="7" name="isInheritable"> |     <column id="36" parent="7" name="isInheritable"> | ||||||
|       <Position>11</Position> |       <Position>11</Position> | ||||||
|       <DataType>int|0s</DataType> |       <DataType>int|0s</DataType> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="38" parent="7" name="sqlite_autoindex_attributes_1"> |     <index id="37" parent="7" name="sqlite_autoindex_attributes_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>attributeId</ColNames> |       <ColNames>attributeId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="39" parent="7"> |     <key id="38" parent="7"> | ||||||
|       <ColNames>attributeId</ColNames> |       <ColNames>attributeId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_attributes_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="40" parent="8" name="branchId"> |     <column id="39" parent="8" name="branchId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="41" parent="8" name="noteId"> |     <column id="40" parent="8" name="noteId"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="42" parent="8" name="parentNoteId"> |     <column id="41" parent="8" name="parentNoteId"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="43" parent="8" name="notePosition"> |     <column id="42" parent="8" name="notePosition"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>INTEGER|0s</DataType> |       <DataType>INTEGER|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="44" parent="8" name="prefix"> |     <column id="43" parent="8" name="prefix"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="45" parent="8" name="isExpanded"> |     <column id="44" parent="8" name="isExpanded"> | ||||||
|       <Position>6</Position> |       <Position>6</Position> | ||||||
|       <DataType>BOOLEAN|0s</DataType> |       <DataType>BOOLEAN|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="46" parent="8" name="isDeleted"> |     <column id="45" parent="8" name="isDeleted"> | ||||||
|       <Position>7</Position> |       <Position>7</Position> | ||||||
|       <DataType>INTEGER|0s</DataType> |       <DataType>INTEGER|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="47" parent="8" name="dateModified"> |     <column id="46" parent="8" name="dateModified"> | ||||||
|       <Position>8</Position> |       <Position>8</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="48" parent="8" name="hash"> |     <column id="47" parent="8" name="hash"> | ||||||
|       <Position>9</Position> |       <Position>9</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="49" parent="8" name="dateCreated"> |     <column id="48" parent="8" name="dateCreated"> | ||||||
|       <Position>10</Position> |       <Position>10</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression> |       <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="50" parent="8" name="sqlite_autoindex_branches_1"> |     <index id="49" parent="8" name="sqlite_autoindex_branches_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>branchId</ColNames> |       <ColNames>branchId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <index id="51" parent="8" name="IDX_branches_noteId_parentNoteId"> |     <index id="50" parent="8" name="IDX_branches_noteId_parentNoteId"> | ||||||
|       <ColNames>noteId |       <ColNames>noteId | ||||||
| parentNoteId</ColNames> | parentNoteId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <index id="52" parent="8" name="IDX_branches_noteId"> |     <index id="51" parent="8" name="IDX_branches_noteId"> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <index id="53" parent="8" name="IDX_branches_parentNoteId"> |     <index id="52" parent="8" name="IDX_branches_parentNoteId"> | ||||||
|       <ColNames>parentNoteId</ColNames> |       <ColNames>parentNoteId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <key id="54" parent="8"> |     <key id="53" parent="8"> | ||||||
|       <ColNames>branchId</ColNames> |       <ColNames>branchId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_branches_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="55" parent="9" name="eventId"> |     <column id="54" parent="9" name="eventId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="56" parent="9" name="noteId"> |     <column id="55" parent="9" name="noteId"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="57" parent="9" name="comment"> |     <column id="56" parent="9" name="comment"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="58" parent="9" name="dateCreated"> |     <column id="57" parent="9" name="dateCreated"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <index id="59" parent="9" name="sqlite_autoindex_event_log_1"> |     <index id="58" parent="9" name="sqlite_autoindex_event_log_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>eventId</ColNames> |       <ColNames>eventId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="60" parent="9"> |     <key id="59" parent="9"> | ||||||
|       <ColNames>eventId</ColNames> |       <ColNames>eventId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_event_log_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_event_log_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="61" parent="10" name="imageId"> |     <column id="60" parent="10" name="linkId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="62" parent="10" name="format"> |     <column id="61" parent="10" name="noteId"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="63" parent="10" name="checksum"> |     <column id="62" parent="10" name="targetNoteId"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="64" parent="10" name="name"> |     <column id="63" parent="10" name="type"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="65" parent="10" name="data"> |     <column id="64" parent="10" name="isDeleted"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>BLOB|0s</DataType> |       <DataType>INTEGER|0s</DataType> | ||||||
|     </column> |  | ||||||
|     <column id="66" parent="10" name="isDeleted"> |  | ||||||
|       <Position>6</Position> |  | ||||||
|       <DataType>INT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="67" parent="10" name="dateModified"> |     <column id="65" parent="10" name="dateCreated"> | ||||||
|  |       <Position>6</Position> | ||||||
|  |       <DataType>TEXT|0s</DataType> | ||||||
|  |       <NotNull>1</NotNull> | ||||||
|  |     </column> | ||||||
|  |     <column id="66" parent="10" name="dateModified"> | ||||||
|       <Position>7</Position> |       <Position>7</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="68" parent="10" name="dateCreated"> |     <column id="67" parent="10" name="hash"> | ||||||
|       <Position>8</Position> |       <Position>8</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |  | ||||||
|     <column id="69" parent="10" name="hash"> |  | ||||||
|       <Position>9</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="70" parent="10" name="sqlite_autoindex_images_1"> |     <index id="68" parent="10" name="sqlite_autoindex_links_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>imageId</ColNames> |       <ColNames>linkId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="71" parent="10"> |     <key id="69" parent="10"> | ||||||
|       <ColNames>imageId</ColNames> |       <ColNames>linkId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_images_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_links_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="72" parent="11" name="noteImageId"> |     <column id="70" parent="11" name="noteRevisionId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="73" parent="11" name="noteId"> |     <column id="71" parent="11" name="noteId"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="74" parent="11" name="imageId"> |     <column id="72" parent="11" name="title"> | ||||||
|       <Position>3</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="75" parent="11" name="isDeleted"> |  | ||||||
|       <Position>4</Position> |  | ||||||
|       <DataType>INT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|       <DefaultExpression>0</DefaultExpression> |  | ||||||
|     </column> |  | ||||||
|     <column id="76" parent="11" name="dateModified"> |  | ||||||
|       <Position>5</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="77" parent="11" name="dateCreated"> |  | ||||||
|       <Position>6</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="78" parent="11" name="hash"> |  | ||||||
|       <Position>7</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|       <DefaultExpression>""</DefaultExpression> |  | ||||||
|     </column> |  | ||||||
|     <index id="79" parent="11" name="sqlite_autoindex_note_images_1"> |  | ||||||
|       <NameSurrogate>1</NameSurrogate> |  | ||||||
|       <ColNames>noteImageId</ColNames> |  | ||||||
|       <Unique>1</Unique> |  | ||||||
|     </index> |  | ||||||
|     <index id="80" parent="11" name="IDX_note_images_noteId_imageId"> |  | ||||||
|       <ColNames>noteId |  | ||||||
| imageId</ColNames> |  | ||||||
|     </index> |  | ||||||
|     <index id="81" parent="11" name="IDX_note_images_noteId"> |  | ||||||
|       <ColNames>noteId</ColNames> |  | ||||||
|     </index> |  | ||||||
|     <index id="82" parent="11" name="IDX_note_images_imageId"> |  | ||||||
|       <ColNames>imageId</ColNames> |  | ||||||
|     </index> |  | ||||||
|     <key id="83" parent="11"> |  | ||||||
|       <ColNames>noteImageId</ColNames> |  | ||||||
|       <Primary>1</Primary> |  | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_note_images_1</UnderlyingIndexName> |  | ||||||
|     </key> |  | ||||||
|     <column id="84" parent="12" name="noteRevisionId"> |  | ||||||
|       <Position>1</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="85" parent="12" name="noteId"> |  | ||||||
|       <Position>2</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="86" parent="12" name="title"> |  | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="87" parent="12" name="content"> |     <column id="73" parent="11" name="content"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="88" parent="12" name="isProtected"> |     <column id="74" parent="11" name="isProtected"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="89" parent="12" name="dateModifiedFrom"> |     <column id="75" parent="11" name="dateModifiedFrom"> | ||||||
|       <Position>6</Position> |       <Position>6</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="90" parent="12" name="dateModifiedTo"> |     <column id="76" parent="11" name="dateModifiedTo"> | ||||||
|       <Position>7</Position> |       <Position>7</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="91" parent="12" name="type"> |     <column id="77" parent="11" name="type"> | ||||||
|       <Position>8</Position> |       <Position>8</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>''</DefaultExpression> |       <DefaultExpression>''</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="92" parent="12" name="mime"> |     <column id="78" parent="11" name="mime"> | ||||||
|       <Position>9</Position> |       <Position>9</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>''</DefaultExpression> |       <DefaultExpression>''</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="93" parent="12" name="hash"> |     <column id="79" parent="11" name="hash"> | ||||||
|       <Position>10</Position> |       <Position>10</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="94" parent="12" name="sqlite_autoindex_note_revisions_1"> |     <index id="80" parent="11" name="sqlite_autoindex_note_revisions_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>noteRevisionId</ColNames> |       <ColNames>noteRevisionId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <index id="95" parent="12" name="IDX_note_revisions_noteId"> |     <index id="81" parent="11" name="IDX_note_revisions_noteId"> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <index id="96" parent="12" name="IDX_note_revisions_dateModifiedFrom"> |     <index id="82" parent="11" name="IDX_note_revisions_dateModifiedFrom"> | ||||||
|       <ColNames>dateModifiedFrom</ColNames> |       <ColNames>dateModifiedFrom</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <index id="97" parent="12" name="IDX_note_revisions_dateModifiedTo"> |     <index id="83" parent="11" name="IDX_note_revisions_dateModifiedTo"> | ||||||
|       <ColNames>dateModifiedTo</ColNames> |       <ColNames>dateModifiedTo</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <key id="98" parent="12"> |     <key id="84" parent="11"> | ||||||
|       <ColNames>noteRevisionId</ColNames> |       <ColNames>noteRevisionId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_note_revisions_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="99" parent="13" name="noteId"> |     <column id="85" parent="12" name="noteId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="100" parent="13" name="title"> |     <column id="86" parent="12" name="title"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>"unnamed"</DefaultExpression> |       <DefaultExpression>"note"</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="101" parent="13" name="content"> |     <column id="87" parent="12" name="content"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <DefaultExpression>NULL</DefaultExpression> | ||||||
|       <DefaultExpression>""</DefaultExpression> |  | ||||||
|     </column> |     </column> | ||||||
|     <column id="102" parent="13" name="isProtected"> |     <column id="88" parent="12" name="isProtected"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="103" parent="13" name="isDeleted"> |     <column id="89" parent="12" name="type"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>INT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|       <DefaultExpression>0</DefaultExpression> |  | ||||||
|     </column> |  | ||||||
|     <column id="104" parent="13" name="dateCreated"> |  | ||||||
|       <Position>6</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="105" parent="13" name="dateModified"> |  | ||||||
|       <Position>7</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |  | ||||||
|       <NotNull>1</NotNull> |  | ||||||
|     </column> |  | ||||||
|     <column id="106" parent="13" name="type"> |  | ||||||
|       <Position>8</Position> |  | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>'text'</DefaultExpression> |       <DefaultExpression>'text'</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="107" parent="13" name="mime"> |     <column id="90" parent="12" name="mime"> | ||||||
|       <Position>9</Position> |       <Position>6</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>'text/html'</DefaultExpression> |       <DefaultExpression>'text/html'</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="108" parent="13" name="hash"> |     <column id="91" parent="12" name="hash"> | ||||||
|       <Position>10</Position> |       <Position>7</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="109" parent="13" name="sqlite_autoindex_notes_1"> |     <column id="92" parent="12" name="isDeleted"> | ||||||
|  |       <Position>8</Position> | ||||||
|  |       <DataType>INT|0s</DataType> | ||||||
|  |       <NotNull>1</NotNull> | ||||||
|  |       <DefaultExpression>0</DefaultExpression> | ||||||
|  |     </column> | ||||||
|  |     <column id="93" parent="12" name="dateCreated"> | ||||||
|  |       <Position>9</Position> | ||||||
|  |       <DataType>TEXT|0s</DataType> | ||||||
|  |       <NotNull>1</NotNull> | ||||||
|  |     </column> | ||||||
|  |     <column id="94" parent="12" name="dateModified"> | ||||||
|  |       <Position>10</Position> | ||||||
|  |       <DataType>TEXT|0s</DataType> | ||||||
|  |       <NotNull>1</NotNull> | ||||||
|  |     </column> | ||||||
|  |     <index id="95" parent="12" name="sqlite_autoindex_notes_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <index id="110" parent="13" name="IDX_notes_type"> |     <key id="96" parent="12"> | ||||||
|       <ColNames>type</ColNames> |  | ||||||
|     </index> |  | ||||||
|     <key id="111" parent="13"> |  | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_notes_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="112" parent="14" name="name"> |     <column id="97" parent="13" name="name"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="113" parent="14" name="value"> |     <column id="98" parent="13" name="value"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="114" parent="14" name="dateModified"> |     <column id="99" parent="13" name="dateModified"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="115" parent="14" name="isSynced"> |     <column id="100" parent="13" name="isSynced"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>INTEGER|0s</DataType> |       <DataType>INTEGER|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>0</DefaultExpression> |       <DefaultExpression>0</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="116" parent="14" name="hash"> |     <column id="101" parent="13" name="hash"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="117" parent="14" name="dateCreated"> |     <column id="102" parent="13" name="dateCreated"> | ||||||
|       <Position>6</Position> |       <Position>6</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression> |       <DefaultExpression>'1970-01-01T00:00:00.000Z'</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <index id="118" parent="14" name="sqlite_autoindex_options_1"> |     <index id="103" parent="13" name="sqlite_autoindex_options_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>name</ColNames> |       <ColNames>name</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="119" parent="14"> |     <key id="104" parent="13"> | ||||||
|       <ColNames>name</ColNames> |       <ColNames>name</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_options_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="120" parent="15" name="branchId"> |     <column id="105" parent="14" name="branchId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="121" parent="15" name="notePath"> |     <column id="106" parent="14" name="notePath"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="122" parent="15" name="hash"> |     <column id="107" parent="14" name="hash"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <DefaultExpression>""</DefaultExpression> |       <DefaultExpression>""</DefaultExpression> | ||||||
|     </column> |     </column> | ||||||
|     <column id="123" parent="15" name="dateCreated"> |     <column id="108" parent="14" name="dateCreated"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="124" parent="15" name="isDeleted"> |     <column id="109" parent="14" name="isDeleted"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>INT|0s</DataType> |       <DataType>INT|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <index id="125" parent="15" name="sqlite_autoindex_recent_notes_1"> |     <index id="110" parent="14" name="sqlite_autoindex_recent_notes_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>branchId</ColNames> |       <ColNames>branchId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="126" parent="15"> |     <key id="111" parent="14"> | ||||||
|       <ColNames>branchId</ColNames> |       <ColNames>branchId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_recent_notes_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="127" parent="16" name="sourceId"> |     <column id="112" parent="15" name="sourceId"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="128" parent="16" name="dateCreated"> |     <column id="113" parent="15" name="dateCreated"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <index id="129" parent="16" name="sqlite_autoindex_source_ids_1"> |     <index id="114" parent="15" name="sqlite_autoindex_source_ids_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>sourceId</ColNames> |       <ColNames>sourceId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="130" parent="16"> |     <key id="115" parent="15"> | ||||||
|       <ColNames>sourceId</ColNames> |       <ColNames>sourceId</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|       <UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName> |       <UnderlyingIndexName>sqlite_autoindex_source_ids_1</UnderlyingIndexName> | ||||||
|     </key> |     </key> | ||||||
|     <column id="131" parent="17" name="type"> |     <column id="116" parent="16" name="type"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>text|0s</DataType> |       <DataType>text|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="132" parent="17" name="name"> |     <column id="117" parent="16" name="name"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>text|0s</DataType> |       <DataType>text|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="133" parent="17" name="tbl_name"> |     <column id="118" parent="16" name="tbl_name"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>text|0s</DataType> |       <DataType>text|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="134" parent="17" name="rootpage"> |     <column id="119" parent="16" name="rootpage"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>integer|0s</DataType> |       <DataType>integer|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="135" parent="17" name="sql"> |     <column id="120" parent="16" name="sql"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>text|0s</DataType> |       <DataType>text|0s</DataType> | ||||||
|     </column> |     </column> | ||||||
|     <column id="136" parent="18" name="name"> |     <column id="121" parent="17" name="name"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|     </column> |     </column> | ||||||
|     <column id="137" parent="18" name="seq"> |     <column id="122" parent="17" name="seq"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|     </column> |     </column> | ||||||
|     <column id="138" parent="19" name="id"> |     <column id="123" parent="18" name="id"> | ||||||
|       <Position>1</Position> |       <Position>1</Position> | ||||||
|       <DataType>INTEGER|0s</DataType> |       <DataType>INTEGER|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|       <SequenceIdentity>1</SequenceIdentity> |       <SequenceIdentity>1</SequenceIdentity> | ||||||
|     </column> |     </column> | ||||||
|     <column id="139" parent="19" name="entityName"> |     <column id="124" parent="18" name="entityName"> | ||||||
|       <Position>2</Position> |       <Position>2</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="140" parent="19" name="entityId"> |     <column id="125" parent="18" name="entityId"> | ||||||
|       <Position>3</Position> |       <Position>3</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="141" parent="19" name="sourceId"> |     <column id="126" parent="18" name="sourceId"> | ||||||
|       <Position>4</Position> |       <Position>4</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="142" parent="19" name="syncDate"> |     <column id="127" parent="18" name="syncDate"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <index id="143" parent="19" name="IDX_sync_entityName_entityId"> |     <index id="128" parent="18" name="IDX_sync_entityName_entityId"> | ||||||
|       <ColNames>entityName |       <ColNames>entityName | ||||||
| entityId</ColNames> | entityId</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <index id="144" parent="19" name="IDX_sync_syncDate"> |     <index id="129" parent="18" name="IDX_sync_syncDate"> | ||||||
|       <ColNames>syncDate</ColNames> |       <ColNames>syncDate</ColNames> | ||||||
|  |       <ColumnCollations></ColumnCollations> | ||||||
|     </index> |     </index> | ||||||
|     <key id="145" parent="19"> |     <key id="130" parent="18"> | ||||||
|       <ColNames>id</ColNames> |       <ColNames>id</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|     </key> |     </key> | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ CREATE TABLE "links" ( | |||||||
|   `noteId`	TEXT NOT NULL, |   `noteId`	TEXT NOT NULL, | ||||||
|   `targetNoteId`	TEXT NOT NULL, |   `targetNoteId`	TEXT NOT NULL, | ||||||
|   `type` TEXT NOT NULL, |   `type` TEXT NOT NULL, | ||||||
|  |   `hash` TEXT DEFAULT "" NOT NULL, | ||||||
|   `isDeleted`	INTEGER NOT NULL DEFAULT 0, |   `isDeleted`	INTEGER NOT NULL DEFAULT 0, | ||||||
|   `dateCreated`	TEXT NOT NULL, |   `dateCreated`	TEXT NOT NULL, | ||||||
|   `dateModified`	TEXT NOT NULL, |   `dateModified`	TEXT NOT NULL, | ||||||
|   | |||||||
| @@ -480,13 +480,6 @@ class Note extends Entity { | |||||||
|         return await repository.getEntities("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId]); |         return await repository.getEntities("SELECT * FROM note_revisions WHERE noteId = ?", [this.noteId]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * @returns {Promise<NoteImage[]>} |  | ||||||
|      */ |  | ||||||
|     async getNoteImages() { |  | ||||||
|         return await repository.getEntities("SELECT * FROM note_images WHERE noteId = ? AND isDeleted = 0", [this.noteId]); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @returns {Promise<Link[]>} |      * @returns {Promise<Link[]>} | ||||||
|      */ |      */ | ||||||
| @@ -494,6 +487,15 @@ class Note extends Entity { | |||||||
|         return await repository.getEntities("SELECT * FROM links WHERE noteId = ? AND isDeleted = 0", [this.noteId]); |         return await repository.getEntities("SELECT * FROM links WHERE noteId = ? AND isDeleted = 0", [this.noteId]); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Return all links from this note, including deleted ones. | ||||||
|  |      * | ||||||
|  |      * @returns {Promise<Link[]>} | ||||||
|  |      */ | ||||||
|  |     async getLinksWithDeleted() { | ||||||
|  |         return await repository.getEntities("SELECT * FROM links WHERE noteId = ?", [this.noteId]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * @returns {Promise<Branch[]>} |      * @returns {Promise<Branch[]>} | ||||||
|      */ |      */ | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								src/public/javascripts/services/bootstrap.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								src/public/javascripts/services/bootstrap.js
									
									
									
									
										vendored
									
									
								
							| @@ -37,6 +37,7 @@ window.glob.getHeaders = server.getHeaders; | |||||||
| window.glob.showAddLinkDialog = addLinkDialog.showDialog; | window.glob.showAddLinkDialog = addLinkDialog.showDialog; | ||||||
| // this is required by CKEditor when uploading images | // this is required by CKEditor when uploading images | ||||||
| window.glob.noteChanged = noteDetailService.noteChanged; | window.glob.noteChanged = noteDetailService.noteChanged; | ||||||
|  | window.glob.refreshTree = treeService.reload; | ||||||
|  |  | ||||||
| // required for ESLint plugin | // required for ESLint plugin | ||||||
| window.glob.getCurrentNote = noteDetailService.getCurrentNote; | window.glob.getCurrentNote = noteDetailService.getCurrentNote; | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								src/public/libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								src/public/libraries/ckeditor/ckeditor.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -47,9 +47,7 @@ async function uploadImage(req) { | |||||||
|         mime: 'text/html' |         mime: 'text/html' | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     const {fileName, imageId} = await imageService.saveImage(file, null, note.noteId); |     const {url} = await imageService.saveImage(file, null, note.noteId); | ||||||
|  |  | ||||||
|     const url = `/api/images/${imageId}/${fileName}`; |  | ||||||
|  |  | ||||||
|     const content = `<img src="${url}"/>`; |     const content = `<img src="${url}"/>`; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,8 +1,7 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
|  |  | ||||||
| const utils = require('./utils'); | const utils = require('./utils'); | ||||||
| const Image = require('../entities/image'); | const noteService = require('./notes'); | ||||||
| const NoteImage = require('../entities/note_image'); |  | ||||||
| const imagemin = require('imagemin'); | const imagemin = require('imagemin'); | ||||||
| const imageminMozJpeg = require('imagemin-mozjpeg'); | const imageminMozJpeg = require('imagemin-mozjpeg'); | ||||||
| const imageminPngQuant = require('imagemin-pngquant'); | const imageminPngQuant = require('imagemin-pngquant'); | ||||||
| @@ -20,22 +19,18 @@ async function saveImage(buffer, originalName, noteId) { | |||||||
|     const fileNameWithoutExtension = originalName.replace(/\.[^/.]+$/, ""); |     const fileNameWithoutExtension = originalName.replace(/\.[^/.]+$/, ""); | ||||||
|     const fileName = sanitizeFilename(fileNameWithoutExtension + "." + imageFormat.ext); |     const fileName = sanitizeFilename(fileNameWithoutExtension + "." + imageFormat.ext); | ||||||
|  |  | ||||||
|     const image = await new Image({ |     const {note} = await noteService.createNewNote(noteId, { | ||||||
|         format: imageFormat.ext, |         target: 'into', | ||||||
|         name: fileName, |         title: fileName, | ||||||
|         checksum: utils.hash(optimizedImage), |         content: optimizedImage, | ||||||
|         data: optimizedImage |         type: 'image', | ||||||
|     }).save(); |         mime: 'image/' + imageFormat.ext | ||||||
|  |     }); | ||||||
|     await new NoteImage({ |  | ||||||
|         noteId: noteId, |  | ||||||
|         imageId: image.imageId |  | ||||||
|     }).save(); |  | ||||||
|  |  | ||||||
|     return { |     return { | ||||||
|         fileName, |         fileName, | ||||||
|         imageId: image.imageId, |         noteId: note.noteId, | ||||||
|         url: `/api/images/${image.imageId}/${fileName}` |         url: `/api/images/${note.noteId}/${fileName}` | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ const eventService = require('./events'); | |||||||
| const repository = require('./repository'); | const repository = require('./repository'); | ||||||
| const cls = require('../services/cls'); | const cls = require('../services/cls'); | ||||||
| const Note = require('../entities/note'); | const Note = require('../entities/note'); | ||||||
| const NoteImage = require('../entities/note_image'); | const Link = require('../entities/link'); | ||||||
| const NoteRevision = require('../entities/note_revision'); | const NoteRevision = require('../entities/note_revision'); | ||||||
| const Branch = require('../entities/branch'); | const Branch = require('../entities/branch'); | ||||||
| const Attribute = require('../entities/attribute'); | const Attribute = require('../entities/attribute'); | ||||||
| @@ -45,6 +45,9 @@ async function triggerNoteTitleChanged(note) { | |||||||
|     await eventService.emit(eventService.NOTE_TITLE_CHANGED, note); |     await eventService.emit(eventService.NOTE_TITLE_CHANGED, note); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * FIXME: noteData has mandatory property "target", it might be better to add it as parameter to reflect this | ||||||
|  |  */ | ||||||
| async function createNewNote(parentNoteId, noteData) { | async function createNewNote(parentNoteId, noteData) { | ||||||
|     const newNotePos = await getNewNotePosition(parentNoteId, noteData); |     const newNotePos = await getNewNotePosition(parentNoteId, noteData); | ||||||
|  |  | ||||||
| @@ -67,7 +70,7 @@ async function createNewNote(parentNoteId, noteData) { | |||||||
|  |  | ||||||
|     const note = await new Note({ |     const note = await new Note({ | ||||||
|         title: noteData.title, |         title: noteData.title, | ||||||
|         content: noteData.content || '', |         content: noteData.content, | ||||||
|         isProtected: noteData.isProtected, |         isProtected: noteData.isProtected, | ||||||
|         type: noteData.type || 'text', |         type: noteData.type || 'text', | ||||||
|         mime: noteData.mime || 'text/html' |         mime: noteData.mime || 'text/html' | ||||||
| @@ -135,8 +138,6 @@ async function createNote(parentNoteId, title, content = "", extraOptions = {}) | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await triggerNoteTitleChanged(note); |  | ||||||
|  |  | ||||||
|     return {note, branch}; |     return {note, branch}; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -168,38 +169,42 @@ async function protectNoteRevisions(note) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| async function saveNoteImages(note) { | async function saveLinks(note) { | ||||||
|     if (note.type !== 'text') { |     if (note.type !== 'text') { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const existingNoteImages = await note.getNoteImages(); |     const existingLinks = await note.getLinks(); | ||||||
|     const foundImageIds = []; |     const foundNoteIds = []; | ||||||
|     const re = /src="\/api\/images\/([a-zA-Z0-9]+)\//g; |     const re = /src="\/api\/images\/([a-zA-Z0-9]+)\//g; | ||||||
|     let match; |     let match; | ||||||
|  |  | ||||||
|     while (match = re.exec(note.content)) { |     while (match = re.exec(note.content)) { | ||||||
|         const imageId = match[1]; |         const targetNoteId = match[1]; | ||||||
|         const existingNoteImage = existingNoteImages.find(ni => ni.imageId === imageId); |         const existingLink = existingLinks.find(link => link.targetNoteId === targetNoteId && link.type === 'image'); | ||||||
|  |  | ||||||
|         if (!existingNoteImage) { |         if (!existingLink) { | ||||||
|             await new NoteImage({ |             await new Link({ | ||||||
|                 noteId: note.noteId, |                 noteId: note.noteId, | ||||||
|                 imageId: imageId |                 targetNoteId, | ||||||
|  |                 type: 'image' | ||||||
|             }).save(); |             }).save(); | ||||||
|         } |         } | ||||||
|         // else we don't need to do anything |         else if (existingLink.isDeleted) { | ||||||
|  |             existingLink.isDeleted = false; | ||||||
|  |             await existingLink.save(); | ||||||
|  |         } | ||||||
|  |         // else the link exists so we don't need to do anything | ||||||
|  |  | ||||||
|         foundImageIds.push(imageId); |         foundNoteIds.push(targetNoteId); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // marking note images as deleted if they are not present on the page anymore |     // marking links as deleted if they are not present on the page anymore | ||||||
|     const unusedNoteImages = existingNoteImages.filter(ni => !foundImageIds.includes(ni.imageId)); |     const unusedLinks = existingLinks.filter(link => !foundNoteIds.includes(link.noteId)); | ||||||
|  |  | ||||||
|     for (const unusedNoteImage of unusedNoteImages) { |     for (const unusedLink of unusedLinks) { | ||||||
|         unusedNoteImage.isDeleted = true; |         unusedLink.isDeleted = true; | ||||||
|  |         await unusedLink.save(); | ||||||
|         await unusedNoteImage.save(); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -258,7 +263,7 @@ async function updateNote(noteId, noteUpdates) { | |||||||
|         await triggerNoteTitleChanged(note); |         await triggerNoteTitleChanged(note); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     await saveNoteImages(note); |     await saveLinks(note); | ||||||
|  |  | ||||||
|     await protectNoteRevisions(note); |     await protectNoteRevisions(note); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user