mirror of
https://github.com/nextcloud/server.git
synced 2026-06-07 15:53:04 -04:00
feat(editLocallyAction): Handle possible no local client scenario
Resolves: https://github.com/nextcloud/server/issues/46438 Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
This commit is contained in:
parent
8dc28fd59d
commit
c8a36ab373
1 changed files with 54 additions and 3 deletions
|
|
@ -23,11 +23,62 @@ import { encodePath } from '@nextcloud/paths'
|
|||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import { getCurrentUser } from '@nextcloud/auth'
|
||||
import { FileAction, Permission, type Node } from '@nextcloud/files'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { showError, DialogBuilder } from '@nextcloud/dialogs'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
import LaptopSvg from '@mdi/svg/svg/laptop.svg?raw'
|
||||
import IconCancel from '@mdi/svg/svg/cancel.svg?raw'
|
||||
import IconCheck from '@mdi/svg/svg/check.svg?raw'
|
||||
|
||||
const confirmLocalEditDialog = (
|
||||
localEditCallback: (openingLocally: boolean) => void = () => {},
|
||||
) => {
|
||||
let callbackCalled = false
|
||||
|
||||
return (new DialogBuilder())
|
||||
.setName(t('files', 'Edit file locally'))
|
||||
.setText(t('files', 'The file should now open locally. If you don\'t see this happening, make sure that the desktop client is installed on your system.'))
|
||||
.setButtons([
|
||||
{
|
||||
label: t('files', 'Retry local edit'),
|
||||
icon: IconCancel,
|
||||
callback: () => {
|
||||
callbackCalled = true
|
||||
localEditCallback(false)
|
||||
},
|
||||
},
|
||||
{
|
||||
label: t('files', 'Edit online'),
|
||||
icon: IconCheck,
|
||||
type: 'primary',
|
||||
callback: () => {
|
||||
callbackCalled = true
|
||||
localEditCallback(true)
|
||||
},
|
||||
},
|
||||
])
|
||||
.build()
|
||||
.show()
|
||||
.then(() => {
|
||||
// Ensure the callback is called even if the dialog is dismissed in other ways
|
||||
if (!callbackCalled) {
|
||||
localEditCallback(true)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const attemptOpenLocalClient = async (path: string) => {
|
||||
openLocalClient(path)
|
||||
confirmLocalEditDialog(
|
||||
(openLocally: boolean) => {
|
||||
if (!openLocally) {
|
||||
window.OCA.Viewer.open({ path })
|
||||
return
|
||||
}
|
||||
openLocalClient(path)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
const openLocalClient = async function(path: string) {
|
||||
const link = generateOcsUrl('apps/files/api/v1') + '/openlocaleditor?format=json'
|
||||
|
|
@ -60,7 +111,7 @@ export const action = new FileAction({
|
|||
},
|
||||
|
||||
async exec(node: Node) {
|
||||
openLocalClient(node.path)
|
||||
attemptOpenLocalClient(node.path)
|
||||
return null
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue