diff --git a/src/shared/globals/OC/mimetype.js b/src/shared/globals/OC/mimetype.js new file mode 100644 index 00000000..888821ca --- /dev/null +++ b/src/shared/globals/OC/mimetype.js @@ -0,0 +1,167 @@ +/* + * @copyright Copyright (c) 2024 Grigorii Shartsev + * + * @author Grigorii Shartsev + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +// Source: https://github.com/nextcloud/server/blob/master/tests/data/integritycheck/mimetypeListModified/core/js/mimetypelist.js +export const MimeTypeList = { + aliases: { + 'application/coreldraw': 'image', + 'application/epub+zip': 'text', + 'application/font-sfnt': 'font', + 'application/font-woff': 'font', + 'application/gpx+xml': 'location', + 'application/gzip': 'package/x-generic', + 'application/illustrator': 'image', + 'application/javascript': 'text/code', + 'application/json': 'text/code', + 'application/msaccess': 'file', + 'application/msexcel': 'x-office/spreadsheet', + 'application/msonenote': 'x-office/document', + 'application/mspowerpoint': 'x-office/presentation', + 'application/msword': 'x-office/document', + 'application/octet-stream': 'file', + 'application/postscript': 'image', + 'application/rss+xml': 'application/xml', + 'application/vnd.android.package-archive': 'package/x-generic', + 'application/vnd.lotus-wordpro': 'x-office/document', + 'application/vnd.garmin.tcx+xml': 'location', + 'application/vnd.google-earth.kml+xml': 'location', + 'application/vnd.google-earth.kmz': 'location', + 'application/vnd.ms-excel': 'x-office/spreadsheet', + 'application/vnd.ms-excel.addin.macroEnabled.12': 'x-office/spreadsheet', + 'application/vnd.ms-excel.sheet.binary.macroEnabled.12': 'x-office/spreadsheet', + 'application/vnd.ms-excel.sheet.macroEnabled.12': 'x-office/spreadsheet', + 'application/vnd.ms-excel.template.macroEnabled.12': 'x-office/spreadsheet', + 'application/vnd.ms-fontobject': 'font', + 'application/vnd.ms-powerpoint': 'x-office/presentation', + 'application/vnd.ms-powerpoint.addin.macroEnabled.12': 'x-office/presentation', + 'application/vnd.ms-powerpoint.presentation.macroEnabled.12': 'x-office/presentation', + 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12': 'x-office/presentation', + 'application/vnd.ms-powerpoint.template.macroEnabled.12': 'x-office/presentation', + 'application/vnd.ms-visio.drawing.macroEnabled.12': 'application/vnd.visio', + 'application/vnd.ms-visio.drawing': 'application/vnd.visio', + 'application/vnd.ms-visio.stencil.macroEnabled.12': 'application/vnd.visio', + 'application/vnd.ms-visio.stencil': 'application/vnd.visio', + 'application/vnd.ms-visio.template.macroEnabled.12': 'application/vnd.visio', + 'application/vnd.ms-visio.template': 'application/vnd.visio', + 'application/vnd.ms-word.document.macroEnabled.12': 'x-office/document', + 'application/vnd.ms-word.template.macroEnabled.12': 'x-office/document', + 'application/vnd.oasis.opendocument.presentation': 'x-office/presentation', + 'application/vnd.oasis.opendocument.presentation-template': 'x-office/presentation', + 'application/vnd.oasis.opendocument.spreadsheet': 'x-office/spreadsheet', + 'application/vnd.oasis.opendocument.spreadsheet-template': 'x-office/spreadsheet', + 'application/vnd.oasis.opendocument.text': 'x-office/document', + 'application/vnd.oasis.opendocument.text-master': 'x-office/document', + 'application/vnd.oasis.opendocument.text-template': 'x-office/document', + 'application/vnd.oasis.opendocument.graphics': 'x-office/drawing', + 'application/vnd.oasis.opendocument.graphics-template': 'x-office/drawing', + 'application/vnd.oasis.opendocument.text-web': 'x-office/document', + 'application/vnd.oasis.opendocument.text-flat-xml': 'x-office/document', + 'application/vnd.oasis.opendocument.spreadsheet-flat-xml': 'x-office/spreadsheet', + 'application/vnd.oasis.opendocument.graphics-flat-xml': 'x-office/drawing', + 'application/vnd.oasis.opendocument.presentation-flat-xml': 'x-office/presentation', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'x-office/presentation', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow': 'x-office/presentation', + 'application/vnd.openxmlformats-officedocument.presentationml.template': 'x-office/presentation', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'x-office/spreadsheet', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template': 'x-office/spreadsheet', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'x-office/document', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template': 'x-office/document', + 'application/vnd.visio': 'x-office/document', + 'application/vnd.wordperfect': 'x-office/document', + 'application/x-7z-compressed': 'package/x-generic', + 'application/x-bzip2': 'package/x-generic', + 'application/x-cbr': 'text', + 'application/x-compressed': 'package/x-generic', + 'application/x-dcraw': 'image', + 'application/x-deb': 'package/x-generic', + 'application/x-fictionbook+xml': 'text', + 'application/x-font': 'font', + 'application/x-gimp': 'image', + 'application/x-gzip': 'application/gzip', + 'application/x-iwork-keynote-sffkey': 'x-office/presentation', + 'application/x-iwork-numbers-sffnumbers': 'x-office/spreadsheet', + 'application/x-iwork-pages-sffpages': 'x-office/document', + 'application/x-mobipocket-ebook': 'text', + 'application/x-perl': 'text/code', + 'application/x-photoshop': 'image', + 'application/x-php': 'text/code', + 'application/x-rar-compressed': 'package/x-generic', + 'application/x-tar': 'package/x-generic', + 'application/x-tex': 'text', + 'application/xml': 'text/html', + 'application/yaml': 'text/code', + 'application/zip': 'package/x-generic', + database: 'file', + 'httpd/unix-directory': 'dir', + 'text/css': 'text/code', + 'text/csv': 'x-office/spreadsheet', + 'text/html': 'text/code', + 'text/x-c': 'text/code', + 'text/x-c++src': 'text/code', + 'text/x-h': 'text/code', + 'text/x-java-source': 'text/code', + 'text/x-ldif': 'text/code', + 'text/x-python': 'text/code', + 'text/x-rst': 'text', + 'text/x-shellscript': 'text/code', + web: 'text/code', + 'application/internet-shortcut': 'link', + 'application/km': 'mindmap', + 'application/x-freemind': 'mindmap', + 'application/vnd.xmind.workbook': 'mindmap', + 'image/targa': 'image/tga', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.oform': 'x-office/form', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.docxf': 'x-office/form-template', + 'image/x-emf': 'image/emf', + 'my-custom/mimetype': 'custom', + }, + files: [ + 'application', + 'application-pdf', + 'audio', + 'file', + 'folder', + 'folder-drag-accept', + 'folder-encrypted', + 'folder-external', + 'folder-public', + 'folder-shared', + 'folder-starred', + 'font', + 'image', + 'link', + 'location', + 'mindmap', + 'package-x-generic', + 'text', + 'text-calendar', + 'text-code', + 'text-vcard', + 'video', + 'x-office-document', + 'x-office-drawing', + 'x-office-form', + 'x-office-form-template', + 'x-office-presentation', + 'x-office-spreadsheet', + ], + themes: [], +} diff --git a/src/shared/globals/globals.js b/src/shared/globals/globals.js index 21365c04..a13167cb 100644 --- a/src/shared/globals/globals.js +++ b/src/shared/globals/globals.js @@ -24,6 +24,7 @@ import { translate, translatePlural } from '@nextcloud/l10n' import { appData } from '../../app/AppData.js' import { dialogs } from './OC/dialogs.js' +import { MimeTypeList } from './OC/mimetype.js' import { getDesktopMediaSource } from '../../talk/renderer/getDesktopMediaSource.js' let enabledAbsoluteWebroot = false @@ -53,10 +54,26 @@ const OC = { spreed: '/apps/spreed', }, - // TODO: Add OC.MimeType + MimeTypeList, MimeType: { - getIconUrl() { - return undefined + // TODO: better to move this function from global to @nextcloud/files or @nextcloud/router + getIconUrl(mimeType) { + if (!mimeType) { + return undefined + } + + while (MimeTypeList.aliases[mimeType]) { + mimeType = MimeTypeList.aliases[mimeType] + } + + let icon = mimeType.replaceAll('/', '-') + icon = MimeTypeList.files.includes(icon) ? icon : mimeType.split('/')[0] + + try { + return require(`../assets/default/img/filetypes/${icon}.svg`) + } catch { + return undefined + } }, },