summaryrefslogtreecommitdiff
path: root/shrine/utils/files/category.go
blob: d9d87e491837b20af58c47d0f2cc84a502f07d46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package files

import (
	"shrine/utils/collections"
	"strings"
)

var archiveMimes = collections.SetOf(
	"application/zip",
	"application/x-rar-compressed",
	"application/gzip",
	"application/x-7z-compressed",
	"application/x-tar",
	"application/x-bzip2",
	"application/x-xz",
	"application/x-compress",
)

var documentMimes = collections.SetOf(
	"application/msword",
	"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
	"application/vnd.oasis.opendocument.text",
	"application/rtf",
	"application/epub+zip",
)

var spreadsheetMimes = collections.SetOf(
	"application/vnd.ms-excel",
	"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
	"application/vnd.oasis.opendocument.spreadsheet",
	"text/csv",
)

var presentationMimes = collections.SetOf(
	"application/vnd.ms-powerpoint",
	"application/vnd.openxmlformats-officedocument.presentationml.presentation",
	"application/vnd.oasis.opendocument.presentation",
)

var codeMimes = collections.SetOf(
	"application/javascript",
	"application/json",
	"application/xml",
	"application/x-httpd-php",
	"application/x-sh",
	"application/x-python",
	"application/typescript",
)

var databaseMimes = collections.SetOf(
	"application/x-sqlite3",
	"application/vnd.ms-access",
)


func DetectCategory(contentType string) string {
	if strings.HasPrefix(contentType, "image/") {
		return "image"
	}
	if strings.HasPrefix(contentType, "video/") {
		return "video"
	}
	if strings.HasPrefix(contentType, "audio/") {
		return "audio"
	}
	if strings.Contains(contentType, "font") {
		return "font"
	}
	if contentType == "application/pdf" {
		return "document"
	}
	if archiveMimes.Has(contentType) {
		return "archive"
	}
	if documentMimes.Has(contentType) {
		return "document"
	}
	if spreadsheetMimes.Has(contentType) {
		return "spreadsheet"
	}
	if presentationMimes.Has(contentType) {
		return "presentation"
	}
	if codeMimes.Has(contentType) {
		return "code"
	}
	if databaseMimes.Has(contentType) {
		return "database"
	}
	if strings.HasPrefix(contentType, "text/x-") {
		return "code"
	}
	if strings.HasPrefix(contentType, "text/") {
		return "document"
	}
	return "other"
}