Skip to content

Commit 39834b3

Browse files
committed
fix: support multiple handlers
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
1 parent f7ab538 commit 39834b3

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

src/views/Viewer.vue

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,15 @@ import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
182182
import { loadState } from '@nextcloud/initial-state'
183183
import { File as NcFile, Node, davRemoteURL, davRootPath, davGetRootPath, sortNodes } from '@nextcloud/files'
184184
import { showError } from '@nextcloud/dialogs'
185+
import { t } from '@nextcloud/l10n'
185186
import axios from '@nextcloud/axios'
186187
187188
import isFullscreen from '@nextcloud/vue/dist/Mixins/isFullscreen.js'
188189
import isMobile from '@nextcloud/vue/dist/Mixins/isMobile.js'
189190
190191
import { canDownload } from '../utils/canDownload.ts'
191192
import { extractFilePaths, extractFilePathFromSource } from '../utils/fileUtils.ts'
193+
import { toggleEditor } from '../files_actions/viewerAction.ts'
192194
import getSortingConfig from '../services/FileSortingConfig.ts'
193195
import cancelableRequest from '../utils/CancelableRequest.js'
194196
import Error from '../components/Error.vue'
@@ -204,7 +206,6 @@ import Download from 'vue-material-design-icons/Download.vue'
204206
import Fullscreen from 'vue-material-design-icons/Fullscreen.vue'
205207
import FullscreenExit from 'vue-material-design-icons/FullscreenExit.vue'
206208
import Pencil from 'vue-material-design-icons/Pencil.vue'
207-
import { toggleEditor } from '../files_actions/viewerAction.ts'
208209
209210
// Dynamic loading
210211
const NcModal = () => import('@nextcloud/vue/dist/Components/NcModal.js')
@@ -720,7 +721,7 @@ export default defineComponent({
720721
}
721722
// If no provided handler, or provided handler not found: try a supported handler with mime/mime-alias
722723
if (!handler) {
723-
handler = this.registeredHandlers[mime] ?? this.registeredHandlers[alias]
724+
handler = this.registeredHandlers[mime].at(0) ?? this.registeredHandlers[alias].at(0) ?? null
724725
}
725726
726727
// if we don't have a handler for this mime, abort
@@ -808,13 +809,13 @@ export default defineComponent({
808809
openFileFromList(fileInfo) {
809810
// override mimetype if existing alias
810811
const mime = fileInfo.mime
811-
this.currentFile = new File(fileInfo, mime, this.components[mime])
812+
this.currentFile = new File(fileInfo, mime, this.components[mime].at(0))
812813
this.changeSidebar()
813814
this.updatePreviousNext()
814815
},
815816
816817
async compareFile(fileInfo) {
817-
this.comparisonFile = new File(fileInfo, fileInfo.mime, this.components[fileInfo.mime])
818+
this.comparisonFile = new File(fileInfo, fileInfo.mime, this.components[fileInfo.mime].at(0))
818819
},
819820
820821
/**
@@ -835,7 +836,7 @@ export default defineComponent({
835836
836837
if (prev) {
837838
const mime = prev.mime
838-
if (this.components[mime]) {
839+
if (this.components[mime].at(0)) {
839840
this.previousFile = new File(prev, mime, this.components[mime])
840841
}
841842
} else {
@@ -845,7 +846,7 @@ export default defineComponent({
845846
846847
if (next) {
847848
const mime = next.mime
848-
if (this.components[mime]) {
849+
if (this.components[mime].at(0)) {
849850
this.nextFile = new File(next, mime, this.components[mime])
850851
}
851852
} else {
@@ -870,7 +871,7 @@ export default defineComponent({
870871
*/
871872
registerHandler(handler) {
872873
// checking if handler is not already registered
873-
if (handler.id && Object.values(this.registeredHandlers).findIndex((h) => h.id === handler.id) > -1) {
874+
if (handler.id && Object.values(this.registeredHandlers).flat().findIndex((h) => h.id === handler.id) > -1) {
874875
logger.error('The following handler is already registered', { handler })
875876
return
876877
}
@@ -904,21 +905,23 @@ export default defineComponent({
904905
// parsing mimes registration
905906
if (handler.mimes) {
906907
handler.mimes.forEach(mime => {
907-
// checking valid mime
908-
if (this.components[mime]) {
909-
logger.error('The following mime is already registered', { mime, handler })
910-
return
908+
if (!this.components[mime]) {
909+
this.components[mime] = []
910+
}
911+
912+
if (!this.registeredHandlers[mime]) {
913+
this.registeredHandlers[mime] = []
911914
}
912915
913916
// register groups
914917
this.registerGroups({ mime, group: handler.group })
915918
916919
// register mime's component
917-
this.components[mime] = handler.component
920+
this.components[mime].push(handler.component)
918921
Vue.component(handler.component.name, handler.component)
919922
920923
// set the handler as registered
921-
this.registeredHandlers[mime] = handler
924+
this.registeredHandlers[mime].push(handler)
922925
})
923926
}
924927
},
@@ -937,24 +940,22 @@ export default defineComponent({
937940
// this is the targeted alias
938941
const alias = handler.mimesAliases[mime]
939942
940-
// checking valid mime
941-
if (this.components[mime]) {
942-
logger.error('The following mime is already registered', { mime, handler })
943-
return
943+
if (!this.components[mime]) {
944+
this.components[mime] = []
944945
}
945-
if (!this.components[alias]) {
946-
logger.error('The requested alias does not exists', { alias, mime, handler })
947-
return
946+
947+
if (!this.registeredHandlers[mime]) {
948+
this.registeredHandlers[mime] = []
948949
}
949950
950951
// register groups if the request alias had a group
951952
this.registerGroups({ mime, group: this.mimeGroups[alias] })
952953
953954
// register mime's component
954-
this.components[mime] = this.components[alias]
955+
this.components[mime] = this.components[alias] || []
955956
956957
// set the handler as registered
957-
this.registeredHandlers[mime] = handler
958+
this.registeredHandlers[mime].push(handler)
958959
})
959960
}
960961
},

0 commit comments

Comments
 (0)