mattermost-mobile/app/mm-redux/utils/file_utils.ts
Miguel Alatzar 2d81b497cf [MM-23520] Port mattermost-redux (#4088)
* Remove mattermost-redux

* Move mm-redux files into app/redux

* Add @redux path to tsconfig.json

* Fix imports

* Install missing dependencies

* Fix tsc errors

* Fix i18n_utils test

* Fix more imports

* Remove redux websocket

* Fix tests

* Rename @redux

* Apply changes from mattermost-redux PR 1103

* Remove mattermost-redux mention in template

* Add missing imports

* Rename app/redux/ to app/mm-redux/

* Remove test file

* Fix fetching Sidebar GM profiles

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
2020-04-17 21:12:09 -07:00

101 lines
2.8 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {Files, General} from '../constants';
import {Client4} from '@mm-redux/client';
import {FileInfo} from '@mm-redux/types/files';
import {Dictionary} from '@mm-redux/types/utilities';
const mimeDB = require('mime-db');
export function getFormattedFileSize(file: FileInfo): string {
const bytes = file.size;
const fileSizes = [
['TB', 1024 * 1024 * 1024 * 1024],
['GB', 1024 * 1024 * 1024],
['MB', 1024 * 1024],
['KB', 1024],
];
const size = fileSizes.find((unitAndMinBytes) => {
const minBytes = unitAndMinBytes[1];
return bytes > minBytes;
});
if (size) {
return `${Math.floor(bytes / (size[1] as any))} ${size[0]}`;
}
return `${bytes} B`;
}
export function getFileType(file: FileInfo): string {
if (!file || !file.extension) {
return 'other';
}
const fileExt = file.extension.toLowerCase();
const fileTypes = [
'image',
'code',
'pdf',
'video',
'audio',
'spreadsheet',
'text',
'word',
'presentation',
'patch',
];
return fileTypes.find((fileType) => {
const constForFileTypeExtList = `${fileType}_types`.toUpperCase();
const fileTypeExts = Files[constForFileTypeExtList];
return fileTypeExts.indexOf(fileExt) > -1;
}) || 'other';
}
let extToMime: Dictionary<string>;
function buildExtToMime() {
extToMime = {};
Object.keys(mimeDB).forEach((key) => {
const mime = mimeDB[key];
if (mime.extensions) {
mime.extensions.forEach((ext: string) => {
extToMime[ext] = key;
});
}
});
}
export function lookupMimeType(filename: string): string {
if (!extToMime) {
buildExtToMime();
}
const ext = filename.split('.').pop()!.toLowerCase();
return extToMime[ext] || 'application/octet-stream';
}
export function getFileUrl(fileId: string): string {
return Client4.getFileRoute(fileId);
}
export function getFileDownloadUrl(fileId: string): string {
return `${Client4.getFileRoute(fileId)}?download=1`;
}
export function getFileThumbnailUrl(fileId: string): string {
return `${Client4.getFileRoute(fileId)}/thumbnail`;
}
export function getFilePreviewUrl(fileId: string): string {
return `${Client4.getFileRoute(fileId)}/preview`;
}
export function sortFileInfos(fileInfos: Array<FileInfo> = [], locale: string = General.DEFAULT_LOCALE): Array<FileInfo> {
return fileInfos.sort((a, b) => {
if (a.create_at !== b.create_at) {
return a.create_at - b.create_at;
}
return a.name.localeCompare(b.name, locale, {numeric: true});
});
}