mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	Compare commits
	
		
			17 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a717ee00fb | ||
|  | f5e27278ab | ||
|  | 20c24e26cc | ||
|  | 3bafc396fc | ||
|  | 3fa3e912a4 | ||
|  | 44219e7ccc | ||
|  | 5b67854cbe | ||
|  | c6d912dcb7 | ||
|  | da53c1eaa8 | ||
|  | 73bf2dcb02 | ||
|  | 719f10981e | ||
|  | deb67d6275 | ||
|  | e4039ea5e1 | ||
|  | 78a50be663 | ||
|  | 3d3ad3b99b | ||
|  | 0d9cdcac85 | ||
|  | 350331e2ef | 
| @@ -57,7 +57,6 @@ | |||||||
|     <index id="24" 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="25" parent="6"> |     <key id="25" parent="6"> | ||||||
| @@ -131,21 +130,17 @@ | |||||||
|     <index id="38" parent="7" name="sqlite_autoindex_attributes_1"> |     <index id="38" 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> | ||||||
|     <index id="39" parent="7" name="IDX_attributes_noteId_index"> |     <index id="39" parent="7" name="IDX_attributes_noteId_index"> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="40" parent="7" name="IDX_attributes_name_value"> |     <index id="40" parent="7" name="IDX_attributes_name_value"> | ||||||
|       <ColNames>name |       <ColNames>name | ||||||
| value</ColNames> | value</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="41" parent="7" name="IDX_attributes_value_index"> |     <index id="41" parent="7" name="IDX_attributes_value_index"> | ||||||
|       <ColNames>value</ColNames> |       <ColNames>value</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="42" parent="7"> |     <key id="42" parent="7"> | ||||||
|       <ColNames>attributeId</ColNames> |       <ColNames>attributeId</ColNames> | ||||||
| @@ -212,17 +207,14 @@ value</ColNames> | |||||||
|     <index id="54" parent="8" name="sqlite_autoindex_branches_1"> |     <index id="54" 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="55" parent="8" name="IDX_branches_noteId_parentNoteId"> |     <index id="55" parent="8" name="IDX_branches_noteId_parentNoteId"> | ||||||
|       <ColNames>noteId |       <ColNames>noteId | ||||||
| parentNoteId</ColNames> | parentNoteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="56" parent="8" name="IDX_branches_parentNoteId"> |     <index id="56" parent="8" name="IDX_branches_parentNoteId"> | ||||||
|       <ColNames>parentNoteId</ColNames> |       <ColNames>parentNoteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="57" parent="8"> |     <key id="57" parent="8"> | ||||||
|       <ColNames>branchId</ColNames> |       <ColNames>branchId</ColNames> | ||||||
| @@ -253,7 +245,6 @@ parentNoteId</ColNames> | |||||||
|     <index id="62" parent="9" name="sqlite_autoindex_note_contents_1"> |     <index id="62" parent="9" name="sqlite_autoindex_note_contents_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="63" parent="9"> |     <key id="63" parent="9"> | ||||||
| @@ -284,7 +275,6 @@ parentNoteId</ColNames> | |||||||
|     <index id="68" parent="10" name="sqlite_autoindex_note_revision_contents_1"> |     <index id="68" parent="10" name="sqlite_autoindex_note_revision_contents_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>noteRevisionId</ColNames> |       <ColNames>noteRevisionId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="69" parent="10"> |     <key id="69" parent="10"> | ||||||
| @@ -369,28 +359,22 @@ parentNoteId</ColNames> | |||||||
|     <index id="84" parent="11" name="sqlite_autoindex_note_revisions_1"> |     <index id="84" 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="85" parent="11" name="IDX_note_revisions_noteId"> |     <index id="85" parent="11" name="IDX_note_revisions_noteId"> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="86" parent="11" name="IDX_note_revisions_utcDateLastEdited"> |     <index id="86" parent="11" name="IDX_note_revisions_utcDateLastEdited"> | ||||||
|       <ColNames>utcDateLastEdited</ColNames> |       <ColNames>utcDateLastEdited</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="87" parent="11" name="IDX_note_revisions_utcDateCreated"> |     <index id="87" parent="11" name="IDX_note_revisions_utcDateCreated"> | ||||||
|       <ColNames>utcDateCreated</ColNames> |       <ColNames>utcDateCreated</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="88" parent="11" name="IDX_note_revisions_dateLastEdited"> |     <index id="88" parent="11" name="IDX_note_revisions_dateLastEdited"> | ||||||
|       <ColNames>dateLastEdited</ColNames> |       <ColNames>dateLastEdited</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="89" parent="11" name="IDX_note_revisions_dateCreated"> |     <index id="89" parent="11" name="IDX_note_revisions_dateCreated"> | ||||||
|       <ColNames>dateCreated</ColNames> |       <ColNames>dateCreated</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="90" parent="11"> |     <key id="90" parent="11"> | ||||||
|       <ColNames>noteRevisionId</ColNames> |       <ColNames>noteRevisionId</ColNames> | ||||||
| @@ -477,36 +461,28 @@ parentNoteId</ColNames> | |||||||
|     <index id="105" parent="12" name="sqlite_autoindex_notes_1"> |     <index id="105" 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="106" parent="12" name="IDX_notes_title"> |     <index id="106" parent="12" name="IDX_notes_title"> | ||||||
|       <ColNames>title</ColNames> |       <ColNames>title</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="107" parent="12" name="IDX_notes_type"> |     <index id="107" parent="12" name="IDX_notes_type"> | ||||||
|       <ColNames>type</ColNames> |       <ColNames>type</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="108" parent="12" name="IDX_notes_isDeleted"> |     <index id="108" parent="12" name="IDX_notes_isDeleted"> | ||||||
|       <ColNames>isDeleted</ColNames> |       <ColNames>isDeleted</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="109" parent="12" name="IDX_notes_dateCreated"> |     <index id="109" parent="12" name="IDX_notes_dateCreated"> | ||||||
|       <ColNames>dateCreated</ColNames> |       <ColNames>dateCreated</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="110" parent="12" name="IDX_notes_dateModified"> |     <index id="110" parent="12" name="IDX_notes_dateModified"> | ||||||
|       <ColNames>dateModified</ColNames> |       <ColNames>dateModified</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="111" parent="12" name="IDX_notes_utcDateCreated"> |     <index id="111" parent="12" name="IDX_notes_utcDateCreated"> | ||||||
|       <ColNames>utcDateCreated</ColNames> |       <ColNames>utcDateCreated</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <index id="112" parent="12" name="IDX_notes_utcDateModified"> |     <index id="112" parent="12" name="IDX_notes_utcDateModified"> | ||||||
|       <ColNames>utcDateModified</ColNames> |       <ColNames>utcDateModified</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="113" parent="12"> |     <key id="113" parent="12"> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
| @@ -547,7 +523,6 @@ parentNoteId</ColNames> | |||||||
|     <index id="120" parent="13" name="sqlite_autoindex_options_1"> |     <index id="120" 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="121" parent="13"> |     <key id="121" parent="13"> | ||||||
| @@ -583,7 +558,6 @@ parentNoteId</ColNames> | |||||||
|     <index id="127" parent="14" name="sqlite_autoindex_recent_notes_1"> |     <index id="127" parent="14" name="sqlite_autoindex_recent_notes_1"> | ||||||
|       <NameSurrogate>1</NameSurrogate> |       <NameSurrogate>1</NameSurrogate> | ||||||
|       <ColNames>noteId</ColNames> |       <ColNames>noteId</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|       <Unique>1</Unique> |       <Unique>1</Unique> | ||||||
|     </index> |     </index> | ||||||
|     <key id="128" parent="14"> |     <key id="128" parent="14"> | ||||||
| @@ -604,12 +578,10 @@ parentNoteId</ColNames> | |||||||
|     <index id="131" parent="15" name="sqlite_autoindex_source_ids_1"> |     <index id="131" 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> | ||||||
|     <index id="132" parent="15" name="IDX_source_ids_utcDateCreated"> |     <index id="132" parent="15" name="IDX_source_ids_utcDateCreated"> | ||||||
|       <ColNames>utcDateCreated</ColNames> |       <ColNames>utcDateCreated</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="133" parent="15"> |     <key id="133" parent="15"> | ||||||
|       <ColNames>sourceId</ColNames> |       <ColNames>sourceId</ColNames> | ||||||
| @@ -663,22 +635,26 @@ parentNoteId</ColNames> | |||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <column id="145" parent="18" name="utcSyncDate"> |     <column id="145" parent="18" name="isSynced"> | ||||||
|       <Position>5</Position> |       <Position>5</Position> | ||||||
|  |       <DataType>INTEGER|0s</DataType> | ||||||
|  |       <NotNull>1</NotNull> | ||||||
|  |       <DefaultExpression>0</DefaultExpression> | ||||||
|  |     </column> | ||||||
|  |     <column id="146" parent="18" name="utcSyncDate"> | ||||||
|  |       <Position>6</Position> | ||||||
|       <DataType>TEXT|0s</DataType> |       <DataType>TEXT|0s</DataType> | ||||||
|       <NotNull>1</NotNull> |       <NotNull>1</NotNull> | ||||||
|     </column> |     </column> | ||||||
|     <index id="146" parent="18" name="IDX_sync_entityName_entityId"> |     <index id="147" 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="147" parent="18" name="IDX_sync_utcSyncDate"> |     <index id="148" parent="18" name="IDX_sync_utcSyncDate"> | ||||||
|       <ColNames>utcSyncDate</ColNames> |       <ColNames>utcSyncDate</ColNames> | ||||||
|       <ColumnCollations></ColumnCollations> |  | ||||||
|     </index> |     </index> | ||||||
|     <key id="148" parent="18"> |     <key id="149" parent="18"> | ||||||
|       <ColNames>id</ColNames> |       <ColNames>id</ColNames> | ||||||
|       <Primary>1</Primary> |       <Primary>1</Primary> | ||||||
|     </key> |     </key> | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								db/migrations/0158__add_isSynced_to_sync.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								db/migrations/0158__add_isSynced_to_sync.sql
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | CREATE TABLE IF NOT EXISTS "sync_mig" ( | ||||||
|  |                                           `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, | ||||||
|  |                                           `entityName`	TEXT NOT NULL, | ||||||
|  |                                           `entityId`	TEXT NOT NULL, | ||||||
|  |                                           `sourceId` TEXT NOT NULL, | ||||||
|  |                                           `isSynced` INTEGER default 0 not null, | ||||||
|  |                                           `utcSyncDate`	TEXT NOT NULL); | ||||||
|  |  | ||||||
|  | INSERT INTO sync_mig (id, entityName, entityId, sourceId, isSynced, utcSyncDate) | ||||||
|  | SELECT id, entityName, entityId, sourceId, 1, utcSyncDate 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_utcSyncDate` ON `sync` ( | ||||||
|  |                                                `utcSyncDate` | ||||||
|  |     ); | ||||||
| @@ -1,16 +1,8 @@ | |||||||
| CREATE TABLE IF NOT EXISTS "sync" ( |  | ||||||
|                                     `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, |  | ||||||
|                                     `entityName`	TEXT NOT NULL, |  | ||||||
|                                     `entityId`	TEXT NOT NULL, |  | ||||||
|                                     `sourceId` TEXT NOT NULL, |  | ||||||
|                                     `utcSyncDate`	TEXT NOT NULL); |  | ||||||
| CREATE TABLE IF NOT EXISTS "source_ids" ( | CREATE TABLE IF NOT EXISTS "source_ids" ( | ||||||
|                                           `sourceId`	TEXT NOT NULL, |                                           `sourceId`	TEXT NOT NULL, | ||||||
|                                           `utcDateCreated`	TEXT NOT NULL, |                                           `utcDateCreated`	TEXT NOT NULL, | ||||||
|                                           PRIMARY KEY(`sourceId`) |                                           PRIMARY KEY(`sourceId`) | ||||||
| ); | ); | ||||||
| CREATE INDEX IDX_source_ids_utcDateCreated |  | ||||||
|     on source_ids (utcDateCreated); |  | ||||||
| CREATE TABLE IF NOT EXISTS "api_tokens" | CREATE TABLE IF NOT EXISTS "api_tokens" | ||||||
| ( | ( | ||||||
|   apiTokenId TEXT PRIMARY KEY NOT NULL, |   apiTokenId TEXT PRIMARY KEY NOT NULL, | ||||||
| @@ -27,13 +19,6 @@ CREATE TABLE IF NOT EXISTS "options" | |||||||
|   utcDateCreated TEXT not null, |   utcDateCreated TEXT not null, | ||||||
|   utcDateModified TEXT NOT NULL |   utcDateModified TEXT NOT NULL | ||||||
| ); | ); | ||||||
| CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` ( |  | ||||||
|                                                               `entityName`, |  | ||||||
|                                                               `entityId` |  | ||||||
|   ); |  | ||||||
| CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` ( |  | ||||||
|                                             `utcSyncDate` |  | ||||||
|   ); |  | ||||||
| CREATE TABLE IF NOT EXISTS "note_contents" ( | CREATE TABLE IF NOT EXISTS "note_contents" ( | ||||||
|                                                    `noteId`	TEXT NOT NULL, |                                                    `noteId`	TEXT NOT NULL, | ||||||
|                                                    `content`	TEXT NULL DEFAULT NULL, |                                                    `content`	TEXT NULL DEFAULT NULL, | ||||||
| @@ -72,6 +57,8 @@ CREATE INDEX `IDX_note_revisions_utcDateCreated` ON `note_revisions` (`utcDateCr | |||||||
| CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`); | CREATE INDEX `IDX_note_revisions_utcDateLastEdited` ON `note_revisions` (`utcDateLastEdited`); | ||||||
| CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`); | CREATE INDEX `IDX_note_revisions_dateCreated` ON `note_revisions` (`dateCreated`); | ||||||
| CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`); | CREATE INDEX `IDX_note_revisions_dateLastEdited` ON `note_revisions` (`dateLastEdited`); | ||||||
|  | CREATE INDEX IDX_source_ids_utcDateCreated | ||||||
|  |     on source_ids (utcDateCreated); | ||||||
| CREATE TABLE IF NOT EXISTS "notes" ( | CREATE TABLE IF NOT EXISTS "notes" ( | ||||||
|                                            `noteId`	TEXT NOT NULL, |                                            `noteId`	TEXT NOT NULL, | ||||||
|                                            `title`	TEXT NOT NULL DEFAULT "note", |                                            `title`	TEXT NOT NULL DEFAULT "note", | ||||||
| @@ -130,3 +117,17 @@ CREATE INDEX IDX_attributes_noteId_index | |||||||
|     on attributes (noteId); |     on attributes (noteId); | ||||||
| CREATE INDEX IDX_attributes_value_index | CREATE INDEX IDX_attributes_value_index | ||||||
|     on attributes (value); |     on attributes (value); | ||||||
|  | CREATE TABLE IF NOT EXISTS "sync" ( | ||||||
|  |     `id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, | ||||||
|  |     `entityName`	TEXT NOT NULL, | ||||||
|  |     `entityId`	TEXT NOT NULL, | ||||||
|  |     `sourceId` TEXT NOT NULL, | ||||||
|  |     `isSynced` INTEGER default 0 not null, | ||||||
|  |     `utcSyncDate`	TEXT NOT NULL); | ||||||
|  | CREATE UNIQUE INDEX `IDX_sync_entityName_entityId` ON `sync` ( | ||||||
|  |                                                               `entityName`, | ||||||
|  |                                                               `entityId` | ||||||
|  |     ); | ||||||
|  | CREATE INDEX `IDX_sync_utcSyncDate` ON `sync` ( | ||||||
|  |                                                `utcSyncDate` | ||||||
|  |     ); | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "trilium", |   "name": "trilium", | ||||||
|   "version": "0.40.3", |   "version": "0.40.4", | ||||||
|   "lockfileVersion": 1, |   "lockfileVersion": 1, | ||||||
|   "requires": true, |   "requires": true, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|   "name": "trilium", |   "name": "trilium", | ||||||
|   "productName": "Trilium Notes", |   "productName": "Trilium Notes", | ||||||
|   "description": "Trilium Notes", |   "description": "Trilium Notes", | ||||||
|   "version": "0.40.4", |   "version": "0.40.6", | ||||||
|   "license": "AGPL-3.0-only", |   "license": "AGPL-3.0-only", | ||||||
|   "main": "electron.js", |   "main": "electron.js", | ||||||
|   "bin": { |   "bin": { | ||||||
|   | |||||||
| @@ -11,7 +11,9 @@ const ENTITY_NAME_TO_ENTITY = { | |||||||
|     "attributes": Attribute, |     "attributes": Attribute, | ||||||
|     "branches": Branch, |     "branches": Branch, | ||||||
|     "notes": Note, |     "notes": Note, | ||||||
|  |     "note_contents": Note, | ||||||
|     "note_revisions": NoteRevision, |     "note_revisions": NoteRevision, | ||||||
|  |     "note_revision_contents": NoteRevision, | ||||||
|     "recent_notes": RecentNote, |     "recent_notes": RecentNote, | ||||||
|     "options": Option, |     "options": Option, | ||||||
|     "api_tokens": ApiToken, |     "api_tokens": ApiToken, | ||||||
|   | |||||||
| @@ -161,7 +161,13 @@ async function printActiveNote() { | |||||||
|         importCSS: false, |         importCSS: false, | ||||||
|         loadCSS: [ |         loadCSS: [ | ||||||
|             "libraries/codemirror/codemirror.css", |             "libraries/codemirror/codemirror.css", | ||||||
|             "libraries/ckeditor/ckeditor-content.css" |             "libraries/ckeditor/ckeditor-content.css", | ||||||
|  |             "libraries/ckeditor/ckeditor-content.css", | ||||||
|  |             "libraries/bootstrap/css/bootstrap.min.css", | ||||||
|  |             "stylesheets/print.css", | ||||||
|  |             "stylesheets/relation_map.css", | ||||||
|  |             "stylesheets/themes.css", | ||||||
|  |             "stylesheets/detail.css" | ||||||
|         ], |         ], | ||||||
|         debug: true |         debug: true | ||||||
|     }); |     }); | ||||||
|   | |||||||
| @@ -148,8 +148,8 @@ class NoteDetailBook { | |||||||
|                 const label = `${childCount} child${childCount > 1 ? 'ren' : ''}`; |                 const label = `${childCount} child${childCount > 1 ? 'ren' : ''}`; | ||||||
|  |  | ||||||
|                 $card.append($('<div class="note-book-children">') |                 $card.append($('<div class="note-book-children">') | ||||||
|                     .append($(`<a class="note-book-open-children-button" href="javascript:">+ Show ${label}</a>`)) |                     .append($(`<a class="note-book-open-children-button no-print" href="javascript:">+ Show ${label}</a>`)) | ||||||
|                     .append($(`<a class="note-book-hide-children-button" href="javascript:">- Hide ${label}</a>`).hide()) |                     .append($(`<a class="note-book-hide-children-button no-print" href="javascript:">- Hide ${label}</a>`).hide()) | ||||||
|                     .append($('<div class="note-book-children-content">')) |                     .append($('<div class="note-book-children-content">')) | ||||||
|                 ); |                 ); | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -60,6 +60,7 @@ class NoteDetailCode { | |||||||
|             // CodeMirror breaks pretty badly on null so even though it shouldn't happen (guarded by consistency check) |             // CodeMirror breaks pretty badly on null so even though it shouldn't happen (guarded by consistency check) | ||||||
|             // we provide fallback |             // we provide fallback | ||||||
|             this.codeEditor.setValue(this.ctx.note.content || ""); |             this.codeEditor.setValue(this.ctx.note.content || ""); | ||||||
|  |             this.codeEditor.clearHistory(); | ||||||
|  |  | ||||||
|             const info = CodeMirror.findModeByMIME(this.ctx.note.mime); |             const info = CodeMirror.findModeByMIME(this.ctx.note.mime); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ body { | |||||||
|     min-height: 0; |     min-height: 0; | ||||||
|     padding-left: 10px; |     padding-left: 10px; | ||||||
|     width: 100%; |     width: 100%; | ||||||
|  |     height: 100%; | ||||||
| } | } | ||||||
|  |  | ||||||
| #search-box { | #search-box { | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								src/public/stylesheets/detail.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/public/stylesheets/detail.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | .note-detail-book { | ||||||
|  |     height: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-detail-book-content { | ||||||
|  |     display: flex; | ||||||
|  |     flex-wrap: wrap; | ||||||
|  |     overflow: auto; | ||||||
|  |     height: 100%; | ||||||
|  |     align-content: start; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-card { | ||||||
|  |     border-radius: 10px; | ||||||
|  |     background-color: var(--accented-background-color); | ||||||
|  |     padding: 15px; | ||||||
|  |     padding-bottom: 5px; | ||||||
|  |     margin: 5px; | ||||||
|  |     margin-left: 0; | ||||||
|  |     overflow: hidden; | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |     flex-shrink: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-card .note-book-card { | ||||||
|  |     border: 1px solid var(--main-border-color); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-content { | ||||||
|  |     overflow: hidden; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-card.type-image .note-book-content, .note-book-card.type-file .note-book-content, .note-book-card.type-protected-session .note-book-content { | ||||||
|  |     display: flex; | ||||||
|  |     align-items: center; | ||||||
|  |     justify-content: center; | ||||||
|  |     text-align: center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-card.type-image .note-book-content img, .note-book-card.type-text .note-book-content img { | ||||||
|  |     max-width: 100%; | ||||||
|  |     max-height: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-title { | ||||||
|  |     flex-grow: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-content { | ||||||
|  |     flex-grow: 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-book-auto-message { | ||||||
|  |     background-color: var(--accented-background-color); | ||||||
|  |     text-align: center; | ||||||
|  |     width: 100%; | ||||||
|  |     border-radius: 10px; | ||||||
|  |     padding: 5px; | ||||||
|  |     margin-top: 5px; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-detail-image { | ||||||
|  |     text-align: center; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .note-detail-image-view { | ||||||
|  |     max-width: 100%; | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								src/public/stylesheets/print.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/public/stylesheets/print.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | @media print | ||||||
|  | { | ||||||
|  |     .no-print, .no-print * | ||||||
|  |     { | ||||||
|  |         display: none !important; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     .relation-map-wrapper { | ||||||
|  |         height: 100vh !important; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -518,14 +518,6 @@ button.icon-button { | |||||||
|     padding: 5px; |     padding: 5px; | ||||||
| } | } | ||||||
|  |  | ||||||
| .note-detail-image { |  | ||||||
|     text-align: center; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-detail-image-view { |  | ||||||
|     max-width: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| pre:not(.CodeMirror-line) { | pre:not(.CodeMirror-line) { | ||||||
|     color: var(--main-text-color) !important; |     color: var(--main-text-color) !important; | ||||||
|     white-space: pre-wrap; |     white-space: pre-wrap; | ||||||
| @@ -857,68 +849,6 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href | |||||||
|     z-index: 100; |     z-index: 100; | ||||||
| } | } | ||||||
|  |  | ||||||
| .note-detail-book { |  | ||||||
|     height: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-detail-book-content { |  | ||||||
|     display: flex; |  | ||||||
|     flex-wrap: wrap; |  | ||||||
|     overflow: auto; |  | ||||||
|     height: 100%; |  | ||||||
|     align-content: start; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-card { |  | ||||||
|     border-radius: 10px; |  | ||||||
|     background-color: var(--accented-background-color); |  | ||||||
|     padding: 15px; |  | ||||||
|     padding-bottom: 5px; |  | ||||||
|     margin: 5px; |  | ||||||
|     margin-left: 0; |  | ||||||
|     overflow: hidden; |  | ||||||
|     display: flex; |  | ||||||
|     flex-direction: column; |  | ||||||
|     flex-shrink: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-card .note-book-card { |  | ||||||
|     border: 1px solid var(--main-border-color); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-content { |  | ||||||
|     overflow: hidden; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-card.type-image .note-book-content, .note-book-card.type-file .note-book-content, .note-book-card.type-protected-session .note-book-content { |  | ||||||
|     display: flex; |  | ||||||
|     align-items: center; |  | ||||||
|     justify-content: center; |  | ||||||
|     text-align: center; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-card.type-image .note-book-content img, .note-book-card.type-text .note-book-content img { |  | ||||||
|     max-width: 100%; |  | ||||||
|     max-height: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-title { |  | ||||||
|     flex-grow: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-content { |  | ||||||
|     flex-grow: 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .note-book-auto-message { |  | ||||||
|     background-color: var(--accented-background-color); |  | ||||||
|     text-align: center; |  | ||||||
|     width: 100%; |  | ||||||
|     border-radius: 10px; |  | ||||||
|     padding: 5px; |  | ||||||
|     margin-top: 5px; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #toast-container { | #toast-container { | ||||||
|     position: absolute; |     position: absolute; | ||||||
|     width: 100%; |     width: 100%; | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
|  |  | ||||||
| const app_info = require('../../services/app_info'); | const appInfo = require('../../services/app_info'); | ||||||
|  |  | ||||||
| async function getAppInfo() { | async function getAppInfo() { | ||||||
|     return app_info; |     return appInfo; | ||||||
| } | } | ||||||
|  |  | ||||||
| module.exports = { | module.exports = { | ||||||
|   | |||||||
| @@ -49,7 +49,7 @@ async function loginSync(req) { | |||||||
|  |  | ||||||
|     return { |     return { | ||||||
|         sourceId: sourceIdService.getCurrentSourceId(), |         sourceId: sourceIdService.getCurrentSourceId(), | ||||||
|         maxSyncId: await sql.getValue("SELECT MAX(id) FROM sync") |         maxSyncId: await sql.getValue("SELECT MAX(id) FROM sync WHERE isSynced = 1") | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -50,7 +50,7 @@ async function getStats() { | |||||||
| async function checkSync() { | async function checkSync() { | ||||||
|     return { |     return { | ||||||
|         entityHashes: await contentHashService.getEntityHashes(), |         entityHashes: await contentHashService.getEntityHashes(), | ||||||
|         maxSyncId: await sql.getValue('SELECT MAX(id) FROM sync') |         maxSyncId: await sql.getValue('SELECT MAX(id) FROM sync WHERE isSynced = 1') | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -116,11 +116,11 @@ async function forceNoteSync(req) { | |||||||
| async function getChanged(req) { | async function getChanged(req) { | ||||||
|     const lastSyncId = parseInt(req.query.lastSyncId); |     const lastSyncId = parseInt(req.query.lastSyncId); | ||||||
|  |  | ||||||
|     const syncs = await sql.getRows("SELECT * FROM sync WHERE id > ? LIMIT 1000", [lastSyncId]); |     const syncs = await sql.getRows("SELECT * FROM sync WHERE isSynced = 1 AND id > ? LIMIT 1000", [lastSyncId]); | ||||||
|  |  | ||||||
|     return { |     return { | ||||||
|         syncs: await syncService.getSyncRecords(syncs), |         syncs: await syncService.getSyncRecords(syncs), | ||||||
|         maxSyncId: await sql.getValue('SELECT MAX(id) FROM sync') |         maxSyncId: await sql.getValue('SELECT MAX(id) FROM sync WHERE isSynced = 1') | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ const build = require('./build'); | |||||||
| const packageJson = require('../../package'); | const packageJson = require('../../package'); | ||||||
| const {TRILIUM_DATA_DIR} = require('./data_dir'); | const {TRILIUM_DATA_DIR} = require('./data_dir'); | ||||||
|  |  | ||||||
| const APP_DB_VERSION = 157; | const APP_DB_VERSION = 158; | ||||||
| const SYNC_VERSION = 14; | const SYNC_VERSION = 14; | ||||||
| const CLIPPER_PROTOCOL_VERSION = "1.0"; | const CLIPPER_PROTOCOL_VERSION = "1.0"; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| module.exports = { buildDate:"2020-02-24T22:59:22+01:00", buildRevision: "fb55cdaea6b1367129e11118b8b6fd2eadebad5f" }; | module.exports = { buildDate:"2020-03-15T11:21:43+01:00", buildRevision: "f5e27278ab2a38484019ee2510781099b60ec2b6" }; | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ class ConsistencyChecks { | |||||||
|             childToParents[childNoteId].push(parentNoteId); |             childToParents[childNoteId].push(parentNoteId); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         function checkTreeCycle(noteId, path) { |         const checkTreeCycle = (noteId, path) => { | ||||||
|             if (noteId === 'root') { |             if (noteId === 'root') { | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| @@ -75,7 +75,7 @@ class ConsistencyChecks { | |||||||
|                     checkTreeCycle(parentNoteId, newPath); |                     checkTreeCycle(parentNoteId, newPath); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         }; | ||||||
|  |  | ||||||
|         const noteIds = Object.keys(childToParents); |         const noteIds = Object.keys(childToParents); | ||||||
|  |  | ||||||
| @@ -546,7 +546,7 @@ class ConsistencyChecks { | |||||||
|           ${entityName}  |           ${entityName}  | ||||||
|           LEFT JOIN sync ON sync.entityName = '${entityName}' AND entityId = ${key}  |           LEFT JOIN sync ON sync.entityName = '${entityName}' AND entityId = ${key}  | ||||||
|         WHERE  |         WHERE  | ||||||
|           sync.id IS NULL AND ` + (entityName === 'options' ? 'isSynced = 1' : '1'), |           sync.id IS NULL AND ` + (entityName === 'options' ? 'options.isSynced = 1' : '1'), | ||||||
|             async ({entityId}) => { |             async ({entityId}) => { | ||||||
|                 if (this.autoFix) { |                 if (this.autoFix) { | ||||||
|                     await syncTableService.addEntitySync(entityName, entityId); |                     await syncTableService.addEntitySync(entityName, entityId); | ||||||
|   | |||||||
| @@ -235,8 +235,6 @@ async function importEnex(taskContext, file, parentNote) { | |||||||
|  |  | ||||||
|         taskContext.increaseProgressCount(); |         taskContext.increaseProgressCount(); | ||||||
|  |  | ||||||
|         let noteContent = await noteEntity.getContent(); |  | ||||||
|  |  | ||||||
|         for (const resource of resources) { |         for (const resource of resources) { | ||||||
|             const hash = utils.md5(resource.content); |             const hash = utils.md5(resource.content); | ||||||
|  |  | ||||||
| @@ -268,7 +266,7 @@ async function importEnex(taskContext, file, parentNote) { | |||||||
|  |  | ||||||
|                 const resourceLink = `<a href="#root/${resourceNote.noteId}">${utils.escapeHtml(resource.title)}</a>`; |                 const resourceLink = `<a href="#root/${resourceNote.noteId}">${utils.escapeHtml(resource.title)}</a>`; | ||||||
|  |  | ||||||
|                 noteContent = noteContent.replace(mediaRegex, resourceLink); |                 content = content.replace(mediaRegex, resourceLink); | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|             if (["image/jpeg", "image/png", "image/gif", "image/webp"].includes(resource.mime)) { |             if (["image/jpeg", "image/png", "image/gif", "image/webp"].includes(resource.mime)) { | ||||||
| @@ -281,12 +279,12 @@ async function importEnex(taskContext, file, parentNote) { | |||||||
|  |  | ||||||
|                     const imageLink = `<img src="${url}">`; |                     const imageLink = `<img src="${url}">`; | ||||||
|  |  | ||||||
|                     noteContent = noteContent.replace(mediaRegex, imageLink); |                     content = content.replace(mediaRegex, imageLink); | ||||||
|  |  | ||||||
|                     if (!noteContent.includes(imageLink)) { |                     if (!content.includes(imageLink)) { | ||||||
|                         // if there wasn't any match for the reference, we'll add the image anyway |                         // if there wasn't any match for the reference, we'll add the image anyway | ||||||
|                         // otherwise image would be removed since no note would include it |                         // otherwise image would be removed since no note would include it | ||||||
|                         noteContent += imageLink; |                         content += imageLink; | ||||||
|                     } |                     } | ||||||
|                 } catch (e) { |                 } catch (e) { | ||||||
|                     log.error("error when saving image from ENEX file: " + e); |                     log.error("error when saving image from ENEX file: " + e); | ||||||
| @@ -298,7 +296,7 @@ async function importEnex(taskContext, file, parentNote) { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // save updated content with links to files/images |         // save updated content with links to files/images | ||||||
|         await noteEntity.setContent(noteContent); |         await noteEntity.setContent(content); | ||||||
|  |  | ||||||
|         await noteService.scanForLinks(noteEntity.noteId); |         await noteService.scanForLinks(noteEntity.noteId); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -209,6 +209,8 @@ async function transactional(func) { | |||||||
|  |  | ||||||
|             transactionActive = false; |             transactionActive = false; | ||||||
|             resolve(); |             resolve(); | ||||||
|  |  | ||||||
|  |             setTimeout(() => require('./ws').sendPingToAllClients(), 50); | ||||||
|         } |         } | ||||||
|         catch (e) { |         catch (e) { | ||||||
|             if (transactionActive) { |             if (transactionActive) { | ||||||
|   | |||||||
| @@ -176,7 +176,7 @@ async function pushSync(syncContext) { | |||||||
|     let lastSyncedPush = await getLastSyncedPush(); |     let lastSyncedPush = await getLastSyncedPush(); | ||||||
|  |  | ||||||
|     while (true) { |     while (true) { | ||||||
|         const syncs = await sql.getRows('SELECT * FROM sync WHERE id > ? LIMIT 1000', [lastSyncedPush]); |         const syncs = await sql.getRows('SELECT * FROM sync WHERE isSynced = 1 AND id > ? LIMIT 1000', [lastSyncedPush]); | ||||||
|  |  | ||||||
|         if (syncs.length === 0) { |         if (syncs.length === 0) { | ||||||
|             log.info("Nothing to push"); |             log.info("Nothing to push"); | ||||||
| @@ -236,7 +236,7 @@ async function checkContentHash(syncContext) { | |||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     const notPushedSyncs = await sql.getValue("SELECT EXISTS(SELECT 1 FROM sync WHERE id > ?)", [await getLastSyncedPush()]); |     const notPushedSyncs = await sql.getValue("SELECT EXISTS(SELECT 1 FROM sync WHERE isSynced = 1 AND id > ?)", [await getLastSyncedPush()]); | ||||||
|  |  | ||||||
|     if (notPushedSyncs) { |     if (notPushedSyncs) { | ||||||
|         log.info(`There's ${notPushedSyncs} outstanding pushes, skipping content check.`); |         log.info(`There's ${notPushedSyncs} outstanding pushes, skipping content check.`); | ||||||
| @@ -353,7 +353,7 @@ async function updatePushStats() { | |||||||
|     if (await syncOptions.isSyncSetup()) { |     if (await syncOptions.isSyncSetup()) { | ||||||
|         const lastSyncedPush = await optionService.getOption('lastSyncedPush'); |         const lastSyncedPush = await optionService.getOption('lastSyncedPush'); | ||||||
|  |  | ||||||
|         stats.outstandingPushes = await sql.getValue("SELECT COUNT(1) FROM sync WHERE id > ?", [lastSyncedPush]); |         stats.outstandingPushes = await sql.getValue("SELECT COUNT(1) FROM sync WHERE isSynced = 1 AND id > ?", [lastSyncedPush]); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,7 +11,8 @@ async function insertEntitySync(entityName, entityId, sourceId) { | |||||||
|         entityName: entityName, |         entityName: entityName, | ||||||
|         entityId: entityId, |         entityId: entityId, | ||||||
|         utcSyncDate: dateUtils.utcNowDateTime(), |         utcSyncDate: dateUtils.utcNowDateTime(), | ||||||
|         sourceId: sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId() |         sourceId: sourceId || cls.getSourceId() || sourceIdService.getCurrentSourceId(), | ||||||
|  |         isSynced: 1 | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     sync.id = await sql.replace("sync", sync); |     sync.id = await sql.replace("sync", sync); | ||||||
| @@ -23,8 +24,6 @@ async function addEntitySync(entityName, entityId, sourceId) { | |||||||
|     const sync = await insertEntitySync(entityName, entityId, sourceId); |     const sync = await insertEntitySync(entityName, entityId, sourceId); | ||||||
|  |  | ||||||
|     syncs.push(sync); |     syncs.push(sync); | ||||||
|  |  | ||||||
|     setTimeout(() => require('./ws').sendPingToAllClients(), 50); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| async function addEntitySyncsForSector(entityName, entityPrimaryKey, sector) { | async function addEntitySyncsForSector(entityName, entityPrimaryKey, sector) { | ||||||
|   | |||||||
| @@ -250,6 +250,7 @@ | |||||||
|  |  | ||||||
| <link href="stylesheets/themes.css" rel="stylesheet"> | <link href="stylesheets/themes.css" rel="stylesheet"> | ||||||
| <link href="stylesheets/style.css" rel="stylesheet"> | <link href="stylesheets/style.css" rel="stylesheet"> | ||||||
|  | <link href="stylesheets/detail.css" rel="stylesheet"> | ||||||
| <link href="stylesheets/desktop.css" rel="stylesheet"> | <link href="stylesheets/desktop.css" rel="stylesheet"> | ||||||
|  |  | ||||||
| <script src="javascripts/desktop.js" crossorigin type="module"></script> | <script src="javascripts/desktop.js" crossorigin type="module"></script> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <div class="note-detail-image note-detail-component"> | <div class="note-detail-image note-detail-component"> | ||||||
|     <div style="display: flex; justify-content: space-evenly; margin: 10px;"> |     <div class="no-print" style="display: flex; justify-content: space-evenly; margin: 10px;"> | ||||||
|         <button class="image-download btn btn-sm btn-primary" type="button">Download</button> |         <button class="image-download btn btn-sm btn-primary" type="button">Download</button> | ||||||
|  |  | ||||||
|         <button class="image-copy-to-clipboard btn btn-sm btn-primary" type="button">Copy to clipboard</button> |         <button class="image-copy-to-clipboard btn btn-sm btn-primary" type="button">Copy to clipboard</button> | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <div class="note-detail-relation-map note-detail-component"> | <div class="note-detail-relation-map note-detail-component"> | ||||||
|     <button class="relation-map-create-child-note btn btn-sm floating-button" type="button" |     <button class="relation-map-create-child-note btn btn-sm floating-button no-print" type="button" | ||||||
|             title="Create new child note and add it into this relation map"> |             title="Create new child note and add it into this relation map"> | ||||||
|         <span class="bx bx-folder-plus"></span> |         <span class="bx bx-folder-plus"></span> | ||||||
|  |  | ||||||
| @@ -7,11 +7,11 @@ | |||||||
|     </button> |     </button> | ||||||
|  |  | ||||||
|     <button type="button" |     <button type="button" | ||||||
|             class="relation-map-reset-pan-zoom btn icon-button floating-button bx bx-crop" |             class="relation-map-reset-pan-zoom btn icon-button floating-button bx bx-crop no-print" | ||||||
|             title="Reset pan & zoom to initial coordinates and magnification" |             title="Reset pan & zoom to initial coordinates and magnification" | ||||||
|             style="right: 70px;"></button> |             style="right: 70px;"></button> | ||||||
|  |  | ||||||
|     <div class="btn-group floating-button" style="right: 10px;"> |     <div class="btn-group floating-button no-print" style="right: 10px;"> | ||||||
|         <button type="button" |         <button type="button" | ||||||
|                 class="relation-map-zoom-in btn icon-button bx bx-zoom-in" |                 class="relation-map-zoom-in btn icon-button bx bx-zoom-in" | ||||||
|                 title="Zoom In"></button> |                 title="Zoom In"></button> | ||||||
|   | |||||||
| @@ -118,6 +118,7 @@ | |||||||
|  |  | ||||||
| <link href="stylesheets/themes.css" rel="stylesheet"> | <link href="stylesheets/themes.css" rel="stylesheet"> | ||||||
| <link href="stylesheets/style.css" rel="stylesheet"> | <link href="stylesheets/style.css" rel="stylesheet"> | ||||||
|  | <link href="stylesheets/detail.css" rel="stylesheet"> | ||||||
| <link href="stylesheets/mobile.css" rel="stylesheet"> | <link href="stylesheets/mobile.css" rel="stylesheet"> | ||||||
|  |  | ||||||
| <link rel="stylesheet" type="text/css" href="libraries/boxicons/css/boxicons.min.css"> | <link rel="stylesheet" type="text/css" href="libraries/boxicons/css/boxicons.min.css"> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user