You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.5 KiB
144 lines
3.5 KiB
/*
|
|
* MinIO Cloud Storage (C) 2016 MinIO, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import mimedb from "mime-types"
|
|
|
|
const isFolder = (name, contentType) => {
|
|
if (name.endsWith("/")) return true
|
|
return false
|
|
}
|
|
|
|
const isPdf = (name, contentType) => {
|
|
if (contentType === "application/pdf") return true
|
|
return false
|
|
}
|
|
const isImage = (name, contentType) => {
|
|
if (
|
|
contentType === "image/jpeg" ||
|
|
contentType === "image/gif" ||
|
|
contentType === "image/x-icon" ||
|
|
contentType === "image/png" ||
|
|
contentType === "image/svg+xml" ||
|
|
contentType === "image/tiff" ||
|
|
contentType === "image/webp"
|
|
)
|
|
return true
|
|
return false
|
|
}
|
|
|
|
const isZip = (name, contentType) => {
|
|
if (!contentType || !contentType.includes("/")) return false
|
|
if (contentType.split("/")[1].includes("zip")) return true
|
|
return false
|
|
}
|
|
|
|
const isCode = (name, contentType) => {
|
|
const codeExt = [
|
|
"c",
|
|
"cpp",
|
|
"go",
|
|
"py",
|
|
"java",
|
|
"rb",
|
|
"js",
|
|
"pl",
|
|
"fs",
|
|
"php",
|
|
"css",
|
|
"less",
|
|
"scss",
|
|
"coffee",
|
|
"net",
|
|
"html",
|
|
"rs",
|
|
"exs",
|
|
"scala",
|
|
"hs",
|
|
"clj",
|
|
"el",
|
|
"scm",
|
|
"lisp",
|
|
"asp",
|
|
"aspx",
|
|
]
|
|
const ext = name.split(".").reverse()[0]
|
|
for (var i in codeExt) {
|
|
if (ext === codeExt[i]) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isExcel = (name, contentType) => {
|
|
if (!contentType || !contentType.includes("/")) return false
|
|
const types = ["excel", "spreadsheet"]
|
|
const subType = contentType.split("/")[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isDoc = (name, contentType) => {
|
|
if (!contentType || !contentType.includes("/")) return false
|
|
const types = ["word", ".document"]
|
|
const subType = contentType.split("/")[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const isPresentation = (name, contentType) => {
|
|
if (!contentType || !contentType.includes("/")) return false
|
|
var types = ["powerpoint", "presentation"]
|
|
const subType = contentType.split("/")[1]
|
|
for (var i in types) {
|
|
if (subType.includes(types[i])) return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
const typeToIcon = (type) => {
|
|
return (name, contentType) => {
|
|
if (!contentType || !contentType.includes("/")) return false
|
|
if (contentType.split("/")[0] === type) return true
|
|
return false
|
|
}
|
|
}
|
|
|
|
export const getDataType = (name, contentType) => {
|
|
if (contentType === "") {
|
|
contentType = mimedb.lookup(name) || "application/octet-stream"
|
|
}
|
|
const check = [
|
|
["folder", isFolder],
|
|
["code", isCode],
|
|
["audio", typeToIcon("audio")],
|
|
["image", typeToIcon("image")],
|
|
["video", typeToIcon("video")],
|
|
["text", typeToIcon("text")],
|
|
["pdf", isPdf],
|
|
["image", isImage],
|
|
["zip", isZip],
|
|
["excel", isExcel],
|
|
["doc", isDoc],
|
|
["presentation", isPresentation],
|
|
]
|
|
for (var i in check) {
|
|
if (check[i][1](name, contentType)) return check[i][0]
|
|
}
|
|
return "other"
|
|
}
|
|
|