Skip to content

Commit

Permalink
Merge pull request #619 from nextcloud/fix/oc-MimeType-getIconUrl
Browse files Browse the repository at this point in the history
fix: show mime type icon for attachments in messages
  • Loading branch information
ShGKme authored Apr 18, 2024
2 parents 3705fda + 4e14804 commit 38cb36d
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 3 deletions.
167 changes: 167 additions & 0 deletions src/shared/globals/OC/mimetype.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
/*
* @copyright Copyright (c) 2024 Grigorii Shartsev <[email protected]>
*
* @author Grigorii Shartsev <[email protected]>
*
* @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 <http://www.gnu.org/licenses/>.
*/

// 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: [],
}
23 changes: 20 additions & 3 deletions src/shared/globals/globals.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
},
},

Expand Down

0 comments on commit 38cb36d

Please sign in to comment.