5 // Created by Heberti Almeida on 29/04/15.
6 // Copyright (c) 2015 Folio Reader. All rights reserved.
12 MediaType is used to tell the type of content a resource is.
14 Examples of mediatypes are image/gif, text/css and application/xhtml+xml
16 public struct MediaType: Equatable {
17 public let name: String
18 public let defaultExtension: String
19 public let extensions: [String]
21 public init(name: String, defaultExtension: String, extensions: [String] = []) {
23 self.defaultExtension = defaultExtension
24 self.extensions = extensions
31 public func == (lhs: MediaType, rhs: MediaType) -> Bool {
32 guard lhs.name == rhs.name else { return false }
33 guard lhs.defaultExtension == rhs.defaultExtension else { return false }
34 guard lhs.extensions == rhs.extensions else { return false }
40 Manages mediatypes that are used by epubs.
43 static let xhtml = MediaType(name: "application/xhtml+xml", defaultExtension: "xhtml", extensions: ["htm", "html", "xhtml", "xml"])
44 static let epub = MediaType(name: "application/epub+zip", defaultExtension: "epub")
45 static let ncx = MediaType(name: "application/x-dtbncx+xml", defaultExtension: "ncx")
46 static let opf = MediaType(name: "application/oebps-package+xml", defaultExtension: "opf")
47 static let javaScript = MediaType(name: "text/javascript", defaultExtension: "js")
48 static let css = MediaType(name: "text/css", defaultExtension: "css")
51 static let jpg = MediaType(name: "image/jpeg", defaultExtension: "jpg", extensions: ["jpg", "jpeg"])
52 static let png = MediaType(name: "image/png", defaultExtension: "png")
53 static let gif = MediaType(name: "image/gif", defaultExtension: "gif")
54 static let svg = MediaType(name: "image/svg+xml", defaultExtension: "svg")
57 static let ttf = MediaType(name: "application/x-font-ttf", defaultExtension: "ttf")
58 static let ttf1 = MediaType(name: "application/x-font-truetype", defaultExtension: "ttf")
59 static let ttf2 = MediaType(name: "application/x-truetype-font", defaultExtension: "ttf")
60 static let openType = MediaType(name: "application/vnd.ms-opentype", defaultExtension: "otf")
61 static let woff = MediaType(name: "application/font-woff", defaultExtension: "woff")
64 static let mp3 = MediaType(name: "audio/mpeg", defaultExtension: "mp3")
65 static let mp4 = MediaType(name: "audio/mp4", defaultExtension: "mp4")
66 static let ogg = MediaType(name: "audio/ogg", defaultExtension: "ogg")
68 static let smil = MediaType(name: "application/smil+xml", defaultExtension: "smil")
69 static let xpgt = MediaType(name: "application/adobe-page-template+xml", defaultExtension: "xpgt")
70 static let pls = MediaType(name: "application/pls+xml", defaultExtension: "pls")
72 static let mediatypes = [xhtml, epub, ncx, opf, jpg, png, gif, javaScript, css, svg, ttf, ttf1, ttf2, openType, woff, mp3, mp4, ogg, smil, xpgt, pls]
75 Gets the MediaType based on the file mimetype.
76 - parameter name: The mediaType name
77 - parameter fileName: The file name to extract the extension
78 - returns: A know mediatype or create a new one.
80 static func by(name: String, fileName: String?) -> MediaType {
81 for mediatype in mediatypes {
82 if mediatype.name == name {
86 let ext = fileName?.pathExtension ?? ""
87 return MediaType(name: name, defaultExtension: ext)
91 Gets the MediaType based on the file extension.
93 static func by(fileName: String) -> MediaType? {
94 let ext = "." + (fileName as NSString).pathExtension
95 return mediatypes.filter({ $0.extensions.contains(ext) }).first
99 Compare if the resource is a image.
100 - returns: `true` if is a image and `false` if not
102 static func isBitmapImage(_ mediaType: MediaType) -> Bool {
103 return mediaType == jpg || mediaType == png || mediaType == gif
107 Gets the MediaType based on the file extension.
109 static func determineMediaType(_ fileName: String) -> MediaType? {
110 let ext = fileName.pathExtension
112 for mediatype in mediatypes {
113 if mediatype.defaultExtension == ext {
116 if mediatype.extensions.contains(ext) {