@@ -182,13 +182,15 @@ import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
182182import { loadState } from ' @nextcloud/initial-state'
183183import { File as NcFile , Node , davRemoteURL , davRootPath , davGetRootPath , sortNodes } from ' @nextcloud/files'
184184import { showError } from ' @nextcloud/dialogs'
185+ import { t } from ' @nextcloud/l10n'
185186import axios from ' @nextcloud/axios'
186187
187188import isFullscreen from ' @nextcloud/vue/dist/Mixins/isFullscreen.js'
188189import isMobile from ' @nextcloud/vue/dist/Mixins/isMobile.js'
189190
190191import { canDownload } from ' ../utils/canDownload.ts'
191192import { extractFilePaths , extractFilePathFromSource } from ' ../utils/fileUtils.ts'
193+ import { toggleEditor } from ' ../files_actions/viewerAction.ts'
192194import getSortingConfig from ' ../services/FileSortingConfig.ts'
193195import cancelableRequest from ' ../utils/CancelableRequest.js'
194196import Error from ' ../components/Error.vue'
@@ -204,7 +206,6 @@ import Download from 'vue-material-design-icons/Download.vue'
204206import Fullscreen from ' vue-material-design-icons/Fullscreen.vue'
205207import FullscreenExit from ' vue-material-design-icons/FullscreenExit.vue'
206208import Pencil from ' vue-material-design-icons/Pencil.vue'
207- import { toggleEditor } from ' ../files_actions/viewerAction.ts'
208209
209210// Dynamic loading
210211const 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