onedrive/utils/getPreviewType.ts

124 lines
2.5 KiB
TypeScript

import { getExtension } from './getFileIcon'
export const preview = {
markdown: 'markdown',
image: 'image',
text: 'text',
pdf: 'pdf',
code: 'code',
video: 'video',
audio: 'audio',
office: 'ms-office',
epub: 'epub',
url: 'url',
}
export const extensions = {
gif: preview.image,
jpeg: preview.image,
jpg: preview.image,
png: preview.image,
webp: preview.image,
md: preview.markdown,
markdown: preview.markdown,
mdown: preview.markdown,
pdf: preview.pdf,
doc: preview.office,
docx: preview.office,
ppt: preview.office,
pptx: preview.office,
xls: preview.office,
xlsx: preview.office,
c: preview.code,
cpp: preview.code,
js: preview.code,
jsx: preview.code,
java: preview.code,
sh: preview.code,
cs: preview.code,
py: preview.code,
css: preview.code,
html: preview.code,
// typescript or video file, determined below
ts: preview.code,
tsx: preview.code,
rs: preview.code,
vue: preview.code,
json: preview.code,
yml: preview.code,
yaml: preview.code,
toml: preview.code,
txt: preview.text,
vtt: preview.text,
srt: preview.text,
log: preview.text,
diff: preview.text,
mp4: preview.video,
flv: preview.video,
webm: preview.video,
m3u8: preview.video,
mkv: preview.video,
mov: preview.video,
avi: preview.video, // won't work!
mp3: preview.audio,
m4a: preview.audio,
aac: preview.audio,
wav: preview.audio,
ogg: preview.audio,
oga: preview.audio,
opus: preview.audio,
flac: preview.audio,
epub: preview.epub,
url: preview.url,
}
export function getPreviewType(extension: string, flags?: { video?: boolean }): string | undefined {
let previewType = extensions[extension]
if (!previewType) {
return previewType
}
// Files with '.ts' extensions may be TypeScript files or TS Video files, we check for the flag 'video'
// to determine what preview renderer to use for '.ts' files.
if (extension === 'ts') {
if (flags?.video) {
previewType = preview.video
}
}
return previewType
}
export function getLanguageByFileName(filename: string): string {
const extension = getExtension(filename)
switch (extension) {
case 'ts':
case 'tsx':
return 'typescript'
case 'rs':
return 'rust'
case 'js':
case 'jsx':
return 'javascript'
case 'sh':
return 'shell'
case 'cs':
return 'csharp'
case 'py':
return 'python'
case 'yml':
return 'yaml'
default:
return extension
}
}