mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 21:11:30 +08:00 
			
		
		
		
	Merge pull request #3940 from SiriusXT/open-note-custom
Open note custom
This commit is contained in:
		
						commit
						d7d98b29a7
					
				| @ -55,6 +55,15 @@ export default class RootCommandExecutor extends Component { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     openNoteCustomCommand() { | ||||||
|  |         const noteId = appContext.tabManager.getActiveContextNoteId(); | ||||||
|  |         const mime = appContext.tabManager.getActiveContextNoteMime() | ||||||
|  | 
 | ||||||
|  |         if (noteId) { | ||||||
|  |             openService.openNoteCustom(noteId, mime); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     enterProtectedSessionCommand() { |     enterProtectedSessionCommand() { | ||||||
|         protectedSessionService.enterProtectedSession(); |         protectedSessionService.enterProtectedSession(); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -47,6 +47,62 @@ async function openNoteExternally(noteId, mime) { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | async function openNoteCustom(noteId, mime) { | ||||||
|  |     if (utils.isElectron()) { | ||||||
|  |       const resp = await server.post(`notes/${noteId}/save-to-tmp-dir`); | ||||||
|  |       const filePath = resp.tmpFilePath; | ||||||
|  |       const { exec } = utils.dynamicRequire('child_process'); | ||||||
|  |       const platform = process.platform; | ||||||
|  |       if (platform === 'linux') {         | ||||||
|  |         const terminals = ['gnome-terminal', 'konsole', 'xterm', 'xfce4-terminal', 'mate-terminal', 'rxvt', 'terminator', 'terminology']; | ||||||
|  |         const openFileWithTerminal = (terminal) => { | ||||||
|  |           const command = `${terminal} -e 'mimeopen -d "${filePath}"'`; | ||||||
|  |           console.log(`Open Note custom: ${command} `); | ||||||
|  |           exec(command, (error, stdout, stderr) => { | ||||||
|  |             if (error) { | ||||||
|  |               console.error(`Open Note custom: Failed to open file with ${terminal}: ${error}`); | ||||||
|  |               searchTerminal(terminals.indexOf(terminal) + 1); | ||||||
|  |             } else { | ||||||
|  |               console.log(`Open Note custom: File opened with ${terminal}. ${stdout}`); | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |         }; | ||||||
|  |         const searchTerminal = (index) => { | ||||||
|  |           const terminal = terminals[index]; | ||||||
|  |           if (!terminal) { | ||||||
|  |             console.error('Open Note custom: No terminal found!'); | ||||||
|  |             open(getFileUrl(noteId), { url: true }); | ||||||
|  |             return; | ||||||
|  |           } | ||||||
|  |           exec(`which ${terminal}`, (error, stdout, stderr) => { | ||||||
|  |             if (stdout.trim()) { | ||||||
|  |               openFileWithTerminal(terminal); | ||||||
|  |             } else { | ||||||
|  |               searchTerminal(index + 1); | ||||||
|  |             } | ||||||
|  |           }); | ||||||
|  |         }; | ||||||
|  |         searchTerminal(0); | ||||||
|  |       } else if (platform === 'win32') { | ||||||
|  |         if (filePath.indexOf("/") !== -1) { | ||||||
|  |           //Note that the path separator must be \ instead of /
 | ||||||
|  |           filePath = filePath.replace(/\//g, "\\"); | ||||||
|  |         } | ||||||
|  |         const command = `rundll32.exe shell32.dll,OpenAs_RunDLL ` + filePath; | ||||||
|  |         exec(command, (err, stdout, stderr) => { | ||||||
|  |           if (err) { | ||||||
|  |             console.error("Open Note custom: ", err); | ||||||
|  |             open(getFileUrl(noteId), { url: true }); | ||||||
|  |             return; | ||||||
|  |           } | ||||||
|  |         }); | ||||||
|  |       } else { | ||||||
|  |         console.log('Currently "Open Note custom" only supports linux and windows systems'); | ||||||
|  |         open(getFileUrl(noteId), { url: true }); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
| function downloadNoteRevision(noteId, noteRevisionId) { | function downloadNoteRevision(noteId, noteRevisionId) { | ||||||
|     const url = getUrlForDownload(`api/notes/${noteId}/revisions/${noteRevisionId}/download`); |     const url = getUrlForDownload(`api/notes/${noteId}/revisions/${noteRevisionId}/download`); | ||||||
| 
 | 
 | ||||||
| @ -76,6 +132,7 @@ export default { | |||||||
|     download, |     download, | ||||||
|     downloadFileNote, |     downloadFileNote, | ||||||
|     openNoteExternally, |     openNoteExternally, | ||||||
|  |     openNoteCustom, | ||||||
|     downloadNoteRevision, |     downloadNoteRevision, | ||||||
|     getUrlForDownload |     getUrlForDownload | ||||||
| } | } | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ const TPL = ` | |||||||
|         <a data-trigger-command="findInText" class="dropdown-item find-in-text-button">Search in note <kbd data-command="findInText"></a> |         <a data-trigger-command="findInText" class="dropdown-item find-in-text-button">Search in note <kbd data-command="findInText"></a> | ||||||
|         <a data-trigger-command="showNoteSource" class="dropdown-item show-source-button"><kbd data-command="showNoteSource"></kbd> Note source</a> |         <a data-trigger-command="showNoteSource" class="dropdown-item show-source-button"><kbd data-command="showNoteSource"></kbd> Note source</a> | ||||||
|         <a data-trigger-command="openNoteExternally" class="dropdown-item open-note-externally-button"><kbd data-command="openNoteExternally"></kbd> Open note externally</a> |         <a data-trigger-command="openNoteExternally" class="dropdown-item open-note-externally-button"><kbd data-command="openNoteExternally"></kbd> Open note externally</a> | ||||||
|  |         <a data-trigger-command="openNoteCustom" class="dropdown-item open-note-custom-button"><kbd data-command="openNoteCustom"></kbd> Open note custom (beta)</a> | ||||||
|         <a class="dropdown-item import-files-button">Import files</a> |         <a class="dropdown-item import-files-button">Import files</a> | ||||||
|         <a class="dropdown-item export-note-button">Export note</a> |         <a class="dropdown-item export-note-button">Export note</a> | ||||||
|         <a class="dropdown-item delete-note-button">Delete note</a> |         <a class="dropdown-item delete-note-button">Delete note</a> | ||||||
| @ -67,6 +68,7 @@ export default class NoteActionsWidget extends NoteContextAwareWidget { | |||||||
|         this.$widget.on('click', '.dropdown-item', () => this.$widget.find("[data-toggle='dropdown']").dropdown('toggle')); |         this.$widget.on('click', '.dropdown-item', () => this.$widget.find("[data-toggle='dropdown']").dropdown('toggle')); | ||||||
| 
 | 
 | ||||||
|         this.$openNoteExternallyButton = this.$widget.find(".open-note-externally-button"); |         this.$openNoteExternallyButton = this.$widget.find(".open-note-externally-button"); | ||||||
|  |         this.$openNoteCustomButton = this.$widget.find(".open-note-custom-button"); | ||||||
| 
 | 
 | ||||||
|         this.$deleteNoteButton = this.$widget.find(".delete-note-button"); |         this.$deleteNoteButton = this.$widget.find(".delete-note-button"); | ||||||
|         this.$deleteNoteButton.on("click", () => { |         this.$deleteNoteButton.on("click", () => { | ||||||
| @ -88,6 +90,7 @@ export default class NoteActionsWidget extends NoteContextAwareWidget { | |||||||
|         this.$renderNoteButton.toggle(note.type === 'render'); |         this.$renderNoteButton.toggle(note.type === 'render'); | ||||||
| 
 | 
 | ||||||
|         this.$openNoteExternallyButton.toggle(utils.isElectron()); |         this.$openNoteExternallyButton.toggle(utils.isElectron()); | ||||||
|  |         this.$openNoteCustomButton.toggle(utils.isElectron()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     toggleDisabled($el, enable) { |     toggleDisabled($el, enable) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 zadam
						zadam