1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 * Namespace object for file type utility functions.
13 * Description of known file types.
14 * Pair type-subtype defines order when sorted by file type.
19 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'JPEG',
23 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'BMP',
27 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'GIF',
31 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'ICO',
35 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'PNG',
39 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'WebP',
43 type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'TIFF',
49 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: '3GP',
53 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'AVI',
57 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'QuickTime',
61 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'MKV',
65 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'MPEG',
66 pattern: /\.m(p4|4v|pg|peg|pg4|peg4)$/i
69 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'OGG',
70 pattern: /\.og(m|v|x)$/i
73 type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'WebM',
79 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'AMR',
83 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'FLAC',
87 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'MP3',
91 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'MPEG',
95 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'OGG',
96 pattern: /\.og(a|g)$/i
99 type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'WAV',
105 type: 'text', name: 'PLAIN_TEXT_FILE_TYPE', subtype: 'TXT',
111 type: 'archive', name: 'ZIP_ARCHIVE_FILE_TYPE', subtype: 'ZIP',
115 type: 'archive', name: 'RAR_ARCHIVE_FILE_TYPE', subtype: 'RAR',
119 type: 'archive', name: 'TAR_ARCHIVE_FILE_TYPE', subtype: 'TAR',
123 type: 'archive', name: 'TAR_BZIP2_ARCHIVE_FILE_TYPE', subtype: 'TBZ2',
124 pattern: /\.(tar\.bz2|tbz|tbz2)$/i
127 type: 'archive', name: 'TAR_GZIP_ARCHIVE_FILE_TYPE', subtype: 'TGZ',
128 pattern: /\.(tar\.|t)gz$/i
133 type: 'hosted', icon: 'gdoc', name: 'GDOC_DOCUMENT_FILE_TYPE',
134 subtype: 'doc', pattern: /\.gdoc$/i
137 type: 'hosted', icon: 'gsheet', name: 'GSHEET_DOCUMENT_FILE_TYPE',
138 subtype: 'sheet', pattern: /\.gsheet$/i
141 type: 'hosted', icon: 'gslides', name: 'GSLIDES_DOCUMENT_FILE_TYPE',
142 subtype: 'slides', pattern: /\.gslides$/i
145 type: 'hosted', icon: 'gdraw', name: 'GDRAW_DOCUMENT_FILE_TYPE',
146 subtype: 'draw', pattern: /\.gdraw$/i
149 type: 'hosted', icon: 'gtable', name: 'GTABLE_DOCUMENT_FILE_TYPE',
150 subtype: 'table', pattern: /\.gtable$/i
153 type: 'hosted', icon: 'glink', name: 'GLINK_DOCUMENT_FILE_TYPE',
154 subtype: 'glink', pattern: /\.glink$/i
157 type: 'hosted', icon: 'gform', name: 'GFORM_DOCUMENT_FILE_TYPE',
158 subtype: 'form', pattern: /\.gform$/i
163 type: 'document', icon: 'pdf', name: 'PDF_DOCUMENT_FILE_TYPE',
164 subtype: 'PDF', pattern: /\.pdf$/i
167 type: 'document', name: 'HTML_DOCUMENT_FILE_TYPE',
168 subtype: 'HTML', pattern: /\.(html?|mht|mhtml)$/i
171 type: 'document', icon: 'word', name: 'WORD_DOCUMENT_FILE_TYPE',
172 subtype: 'Word', pattern: /\.(doc|docx)$/i
175 type: 'document', icon: 'ppt', name: 'POWERPOINT_PRESENTATION_FILE_TYPE',
176 subtype: 'PPT', pattern: /\.(ppt|pptx)$/i
179 type: 'document', icon: 'excel', name: 'EXCEL_FILE_TYPE',
180 subtype: 'Excel', pattern: /\.(xls|xlsx)$/i
185 * A special type for directory.
187 FileType.DIRECTORY = {name: 'FOLDER', type: '.folder', icon: 'folder'};
190 * Returns the file path extension for a given file.
192 * @param {Entry} entry Reference to the file.
193 * @return {string} The extension including a leading '.', or empty string if
196 FileType.getExtension = function(entry) {
197 // No extension for a directory.
198 if (entry.isDirectory)
201 var extensionStartIndex = entry.name.lastIndexOf('.');
202 if (extensionStartIndex === -1 ||
203 extensionStartIndex === entry.name.length - 1) {
207 return entry.name.substr(extensionStartIndex);
211 * Gets the file type object for a given file name (base name). Use getType()
212 * if possible, since this method can't recognize directories.
214 * @param {string} name Name of the file.
215 * @return {Object} The matching file type object or an empty object.
217 FileType.getTypeForName = function(name) {
218 var types = FileType.types;
219 for (var i = 0; i < types.length; i++) {
220 if (types[i].pattern.test(name))
224 // Unknown file type.
225 var extension = util.splitExtension(name)[1];
226 if (extension === '') {
227 return { name: 'NO_EXTENSION_FILE_TYPE', type: 'UNKNOWN', icon: '' };
229 // subtype is the extension excluding the first dot.
231 name: 'GENERIC_FILE_TYPE', type: 'UNKNOWN',
232 subtype: extension.substr(1).toUpperCase(), icon: ''
237 * Gets the file type object for a given file.
238 * @param {Entry} entry Reference to the file.
239 * @return {Object} The matching file type object or an empty object.
241 FileType.getType = function(entry) {
242 if (entry.isDirectory)
243 return FileType.DIRECTORY;
245 var types = FileType.types;
246 for (var i = 0; i < types.length; i++) {
247 if (types[i].pattern.test(entry.name))
251 // Unknown file type.
252 var extension = FileType.getExtension(entry);
253 if (extension === '') {
254 return { name: 'NO_EXTENSION_FILE_TYPE', type: 'UNKNOWN', icon: '' };
256 // subtype is the extension excluding the first dot.
258 name: 'GENERIC_FILE_TYPE', type: 'UNKNOWN',
259 subtype: extension.substr(1).toUpperCase(), icon: ''
264 * @param {Object} fileType Type object returned by FileType.getType().
265 * @return {string} Localized string representation of file type.
267 FileType.typeToString = function(fileType) {
268 if (fileType.subtype)
269 return strf(fileType.name, fileType.subtype);
271 return str(fileType.name);
275 * Gets the media type for a given file.
277 * @param {Entry} entry Reference to the file.
278 * @return {string} The value of 'type' property from one of the elements in
279 * FileType.types or undefined.
281 FileType.getMediaType = function(entry) {
282 return FileType.getType(entry).type;
286 * @param {Entry} entry Reference to the file.
287 * @return {boolean} True if audio file.
289 FileType.isAudio = function(entry) {
290 return FileType.getMediaType(entry) === 'audio';
294 * @param {Entry} entry Reference to the file.
295 * @return {boolean} True if image file.
297 FileType.isImage = function(entry) {
298 return FileType.getMediaType(entry) === 'image';
302 * @param {Entry} entry Reference to the file.
303 * @return {boolean} True if video file.
305 FileType.isVideo = function(entry) {
306 return FileType.getMediaType(entry) === 'video';
311 * Files with more pixels won't have preview.
312 * @param {Entry} entry Reference to the file.
313 * @return {boolean} True if image or video.
315 FileType.isImageOrVideo = function(entry) {
316 var type = FileType.getMediaType(entry);
317 return type === 'image' || type === 'video';
321 * @param {Entry} entry Reference to the file.
322 * @return {boolean} Returns true if the file is hosted.
324 FileType.isHosted = function(entry) {
325 return FileType.getType(entry).type === 'hosted';
329 * @param {Entry} entry Reference to the file.
330 * @return {string} Returns string that represents the file icon.
331 * It refers to a file 'images/filetype_' + icon + '.png'.
333 FileType.getIcon = function(entry) {
334 var fileType = FileType.getType(entry);
335 return fileType.icon || fileType.type || 'unknown';