15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)'use strict';
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Namespace object for file type utility functions.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var FileType = {};
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Description of known file types.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Pair type-subtype defines order when sorted by file type.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileType.types = [
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Images
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'JPEG',
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.jpe?g$/i},
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'BMP',
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.bmp$/i},
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'GIF',
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.gif$/i},
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'ICO',
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.ico$/i},
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'PNG',
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.png$/i},
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'WebP',
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.webp$/i},
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'image', name: 'IMAGE_FILE_TYPE', subtype: 'TIFF',
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.tiff?$/i},
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Video
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: '3GP',
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.3gp$/i},
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'AVI',
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.avi$/i},
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'QuickTime',
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.mov$/i},
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'MKV',
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)   pattern: /\.mkv$/i},
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'MPEG',
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.m(p4|4v|pg|peg|pg4|peg4)$/i},
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'OGG',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.og(m|v|x)$/i},
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'video', name: 'VIDEO_FILE_TYPE', subtype: 'WebM',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.webm$/i},
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Audio
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'AMR',
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)   pattern: /\.amr$/i},
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'FLAC',
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.flac$/i},
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'MP3',
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.mp3$/i},
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'MPEG',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.m4a$/i},
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'OGG',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.og(a|g)$/i},
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'audio', name: 'AUDIO_FILE_TYPE', subtype: 'WAV',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.wav$/i},
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Text
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'text', name: 'PLAIN_TEXT_FILE_TYPE', subtype: 'TXT',
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.txt$/i},
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Archive
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'archive', name: 'ZIP_ARCHIVE_FILE_TYPE', subtype: 'ZIP',
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.zip$/i},
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'archive', name: 'RAR_ARCHIVE_FILE_TYPE', subtype: 'RAR',
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.rar$/i},
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'archive', name: 'TAR_ARCHIVE_FILE_TYPE', subtype: 'TAR',
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pattern: /\.tar$/i},
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'archive', name: 'TAR_BZIP2_ARCHIVE_FILE_TYPE', subtype: 'TBZ2',
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   pattern: /\.(tar\.bz2|tbz|tbz2)$/i},
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'archive', name: 'TAR_GZIP_ARCHIVE_FILE_TYPE', subtype: 'TGZ',
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)   pattern: /\.(tar\.|t)gz$/i},
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Hosted docs.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'gdoc', name: 'GDOC_DOCUMENT_FILE_TYPE',
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'doc', pattern: /\.gdoc$/i},
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'gsheet', name: 'GSHEET_DOCUMENT_FILE_TYPE',
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'sheet', pattern: /\.gsheet$/i},
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'gslides', name: 'GSLIDES_DOCUMENT_FILE_TYPE',
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'slides', pattern: /\.gslides$/i},
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'gdraw', name: 'GDRAW_DOCUMENT_FILE_TYPE',
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'draw', pattern: /\.gdraw$/i},
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'gtable', name: 'GTABLE_DOCUMENT_FILE_TYPE',
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'table', pattern: /\.gtable$/i},
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'hosted', icon: 'glink', name: 'GLINK_DOCUMENT_FILE_TYPE',
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'glink', pattern: /\.glink$/i},
928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  {type: 'hosted', icon: 'gform', name: 'GFORM_DOCUMENT_FILE_TYPE',
938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)   subtype: 'form', pattern: /\.gform$/i},
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Others
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'document', icon: 'pdf', name: 'PDF_DOCUMENT_FILE_TYPE',
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'PDF', pattern: /\.pdf$/i},
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'document', name: 'HTML_DOCUMENT_FILE_TYPE',
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'HTML', pattern: /\.(html?|mht|mhtml)$/i},
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'document', icon: 'word', name: 'WORD_DOCUMENT_FILE_TYPE',
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'Word', pattern: /\.(doc|docx)$/i},
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'document', icon: 'ppt', name: 'POWERPOINT_PRESENTATION_FILE_TYPE',
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'PPT', pattern: /\.(ppt|pptx)$/i},
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {type: 'document', icon: 'excel', name: 'EXCEL_FILE_TYPE',
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   subtype: 'Excel', pattern: /\.(xls|xlsx)$/i}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)];
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * A special type for directory.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileType.DIRECTORY = {name: 'FOLDER', type: '.folder', icon: 'folder'};
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * Returns the file path extension for a given file.
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {string} The extension including a leading '.', or empty string if
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *     not found.
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.getExtension = function(entry) {
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // No extension for a directory.
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (entry.isDirectory)
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return '';
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var extensionStartIndex = entry.name.lastIndexOf('.');
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (extensionStartIndex === -1 ||
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      extensionStartIndex === entry.name.length - 1) {
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return '';
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return entry.name.substr(extensionStartIndex);
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/**
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Gets the file type object for a given file name (base name). Use getType()
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * if possible, since this method can't recognize directories.
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} name Name of the file.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {Object} The matching file type object or an empty object.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.getTypeForName = function(name) {
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var types = FileType.types;
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (var i = 0; i < types.length; i++) {
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (types[i].pattern.test(name))
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return types[i];
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Unknown file type.
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  var extension = util.splitExtension(name)[1];
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (extension === '') {
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return { name: 'NO_EXTENSION_FILE_TYPE', type: 'UNKNOWN', icon: '' };
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // subtype is the extension excluding the first dot.
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return { name: 'GENERIC_FILE_TYPE', type: 'UNKNOWN',
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)           subtype: extension.substr(1).toUpperCase(), icon: '' };
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/**
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Gets the file type object for a given file.
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @return {Object} The matching file type object or an empty object.
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.getType = function(entry) {
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (entry.isDirectory)
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return FileType.DIRECTORY;
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var types = FileType.types;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var i = 0; i < types.length; i++) {
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (types[i].pattern.test(entry.name))
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return types[i];
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Unknown file type.
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var extension = FileType.getExtension(entry);
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (extension === '') {
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return { name: 'NO_EXTENSION_FILE_TYPE', type: 'UNKNOWN', icon: '' };
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // subtype is the extension excluding the first dot.
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return { name: 'GENERIC_FILE_TYPE', type: 'UNKNOWN',
180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           subtype: extension.substr(1).toUpperCase(), icon: '' };
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Object} fileType Type object returned by FileType.getType().
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * @return {string} Localized string representation of file type.
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.typeToString = function(fileType) {
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (fileType.subtype)
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return strf(fileType.name, fileType.subtype);
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return str(fileType.name);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/**
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Gets the media type for a given file.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string} The value of 'type' property from one of the elements in
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *     FileType.types or undefined.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.getMediaType = function(entry) {
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return FileType.getType(entry).type;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} True if audio file.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.isAudio = function(entry) {
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return FileType.getMediaType(entry) === 'audio';
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} True if image file.
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.isImage = function(entry) {
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return FileType.getMediaType(entry) === 'image';
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} True if video file.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.isVideo = function(entry) {
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return FileType.getMediaType(entry) === 'video';
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Files with more pixels won't have preview.
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} True if image or video.
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.isImageOrVideo = function(entry) {
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var type = FileType.getMediaType(entry);
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return type === 'image' || type === 'video';
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Returns true if the file is hosted.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.isHosted = function(entry) {
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return FileType.getType(entry).type === 'hosted';
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Entry} entry Reference to the file.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {string} Returns string that represents the file icon.
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *     It refers to a file 'images/filetype_' + icon + '.png'.
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FileType.getIcon = function(entry) {
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  var fileType = FileType.getType(entry);
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return fileType.icon || fileType.type || 'unknown';
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
258